From 1c7f25773a77ceb9e84feabe3907e7f93f6870e4 Mon Sep 17 00:00:00 2001 From: Joey Lee Date: Sat, 27 Jan 2018 00:37:39 +1100 Subject: PLT-3658 Added support for Slack attachments in outgoing webhook response (#7774) (#8102) --- app/webhook.go | 15 +++++++++++++-- model/outgoing_webhook.go | 13 +++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/webhook.go b/app/webhook.go index 14dec3daa..a9bb32f35 100644 --- a/app/webhook.go +++ b/app/webhook.go @@ -113,7 +113,7 @@ func (a *App) TriggerWebhook(payload *model.OutgoingWebhookPayload, hook *model. webhookResp := model.OutgoingWebhookResponseFromJson(resp.Body) - if webhookResp != nil && webhookResp.Text != nil { + if webhookResp != nil && (webhookResp.Text != nil || len(webhookResp.Attachments) > 0) { postRootId := "" if webhookResp.ResponseType == model.OUTGOING_HOOK_RESPONSE_TYPE_COMMENT { postRootId = post.Id @@ -122,7 +122,18 @@ func (a *App) TriggerWebhook(payload *model.OutgoingWebhookPayload, hook *model. webhookResp.Props = make(model.StringInterface) } webhookResp.Props["webhook_display_name"] = hook.DisplayName - if _, err := a.CreateWebhookPost(hook.CreatorId, channel, *webhookResp.Text, webhookResp.Username, webhookResp.IconURL, webhookResp.Props, webhookResp.Type, postRootId); err != nil { + + text := "" + if webhookResp.Text != nil { + text = a.ProcessSlackText(*webhookResp.Text) + } + webhookResp.Attachments = a.ProcessSlackAttachments(webhookResp.Attachments) + // attachments is in here for slack compatibility + if len(webhookResp.Attachments) > 0 { + webhookResp.Props["attachments"] = webhookResp.Attachments + } + + if _, err := a.CreateWebhookPost(hook.CreatorId, channel, text, webhookResp.Username, webhookResp.IconURL, webhookResp.Props, webhookResp.Type, postRootId); err != nil { l4g.Error(utils.T("api.post.handle_webhook_events_and_forget.create_post.error"), err) } } diff --git a/model/outgoing_webhook.go b/model/outgoing_webhook.go index 477a277de..b00171845 100644 --- a/model/outgoing_webhook.go +++ b/model/outgoing_webhook.go @@ -46,12 +46,13 @@ type OutgoingWebhookPayload struct { } type OutgoingWebhookResponse struct { - Text *string `json:"text"` - Username string `json:"username"` - IconURL string `json:"icon_url"` - Props StringInterface `json:"props"` - Type string `json:"type"` - ResponseType string `json:"response_type"` + Text *string `json:"text"` + Username string `json:"username"` + IconURL string `json:"icon_url"` + Props StringInterface `json:"props"` + Attachments []*SlackAttachment `json:"attachments"` + Type string `json:"type"` + ResponseType string `json:"response_type"` } const OUTGOING_HOOK_RESPONSE_TYPE_COMMENT = "comment" -- cgit v1.2.3-1-g7c22