Slack API은 메신저와 같은 커뮤니케이션 공간으로써, 많은 유저들이 하나의 커뮤니티 공간에서 많은 채널 (채팅방)을 서로 공유하며, 정보를 주고 받을 수가 있다.
개발자들 및 IT 유저들 사이에는 이미 널리 알려진 웹어플리케이션으로써, 필자가 일하고 있는 회사에서도 역시 직원들의 커뮤니티 공간으로 잘 활용을 하고 있다.
이전에 포스트에서 올려놓았던 Workflow Related Item 업데이트 하기에서 Custom Workflow를 소개하였으며, Workflow가 업데이트 될때마다 관리자 및 검증자가 업데이트 되어진 정보를 이메일로 받는 동시에, Slack API를 통하여 Slack 채널에도 업데이트된 정보가 올려지도록 클래스를 많들었다.
우선, Real-Time message를 전송하기 위하여, Slack 플러그인 (Incoming WebHooks)을 추가적으로 설치한 후, Webhook URL의 값을 WebClient의 UploadString 메쏘드 파라미터로 입력을 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | public static class PostSlackMessage { public static void PostMessage(Item pageItem, User user, bool isPublished, string comment = null) { if (pageItem == null) { Sitecore.Diagnostics.Assert.IsNull(null, "Page Item can't be found!"); } if (user == null) { Sitecore.Diagnostics.Assert.IsNull(null, "User can't be found!"); } string pagePath = pageItem.Paths.Path.ToString().ToLower(); pagePath = pagePath.Replace(Sitecore.Context.Data.Site.RootPath.ToLower(), ""); pagePath = pagePath.Replace(Sitecore.Context.Data.Site.StartItem.ToLower(), ""); string requestedByEmail = user.Profile.Email; string requestedByFullName = user.Profile.FullName; string updatedByEmail = User.FromName(pageItem.Statistics.UpdatedBy, true).Profile.Email; string updatedByFullName = User.FromName(pageItem.Statistics.UpdatedBy, true).Profile.FullName; string requestedDate = DateTime.Now.ToString("g"); string pretextMsg = "Approval Request :file_cabinet:"; string fallbackMsg = "ReferenceError - UI is not defined"; string titleMsg = "<https://yoursitecms.com" + pagePath + "|" + pageItem.Fields["Page Title"].Value + "> - " + pagePath; string commentMsg = comment; string colorMsg = "#FF8000"; if (isPublished) { pretextMsg = "Approved and Published :white_check_mark:"; titleMsg = "<http://yoursitecds.com" + pagePath + "|" + pageItem.Fields["Page Title"].Value + ">"; colorMsg = "#36a64f"; } var field = new[]{ new { title = (isPublished) ? "Approved by" : "Requested by", value = "<mailto:" + requestedByEmail + "|" + requestedByFullName + ">", @short = true }, new { title = "Updated by", value = "<mailto:" + updatedByEmail + "|" + updatedByFullName + ">", @short = true }, new { title = (isPublished) ? "Approved Date" : "Requested Date", value = requestedDate, @short = true }, new { title = "Page Version", value = pageItem.Version.Number.ToString(), @short = true } }; var message = new { username = "Mr. Sitecore", channel = "G690XEDK4", // Private Channel "Sitcore Publishing" icon_emoji = ":sitecore:", attachments = new[]{ new { pretext = pretextMsg, fallback = fallbackMsg, title = titleMsg, text = commentMsg, color = colorMsg, fields = field } } }; var json = JsonConvert.SerializeObject(message); var webClient = new WebClient(); webClient.Headers[HttpRequestHeader.ContentType] = "application/json"; webClient.UploadString("https://hooks.slack.com/services/your/code/here", json); } } |
1 2 | // Post Slack Message PostSlackMessage.PostMessage(args.DataItem, User.Current, true, args.CommentFields["Comments"].ToString()); |