Skip to content

Commit

Permalink
Include header images from template messages as attachments on previe…
Browse files Browse the repository at this point in the history
…w message
  • Loading branch information
rowanseymour committed Jun 5, 2024
1 parent 17ca9c3 commit cc26883
Show file tree
Hide file tree
Showing 3 changed files with 150 additions and 13 deletions.
16 changes: 11 additions & 5 deletions flows/actions/send_msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/nyaruka/goflow/assets"
"github.com/nyaruka/goflow/flows"
"github.com/nyaruka/goflow/flows/events"
"github.com/nyaruka/goflow/utils"
)

func init() {
Expand Down Expand Up @@ -150,27 +151,32 @@ func (a *SendMsgAction) getTemplateMsg(run flows.Run, urn urns.URN, channelRef *
}

// the message we return is an approximate preview of what the channel will send using the template
var previewParts []string
var previewText []string
var previewAttachments []utils.Attachment
var previewQRs []string

for _, comp := range translation.Components() {
previewContent := comp.Content()
for key, index := range comp.Variables() {
previewContent = strings.ReplaceAll(previewContent, fmt.Sprintf("{{%s}}", key), variables[index].Value)
variable := variables[index]
if variable.Type == "text" {
previewContent = strings.ReplaceAll(previewContent, fmt.Sprintf("{{%s}}", key), variable.Value)
} else if variable.Type == "image" && variable.Value != "" {
previewAttachments = append(previewAttachments, utils.Attachment("image:"+variable.Value))
}
}

if previewContent != "" {
if comp.Type() == "header" || comp.Type() == "body" || comp.Type() == "footer" {
previewParts = append(previewParts, previewContent)
previewText = append(previewText, previewContent)
} else if strings.HasPrefix(comp.Type(), "button/") {
previewQRs = append(previewQRs, stringsx.TruncateEllipsis(previewContent, maxQuickReplyLength))
}
}
}

previewText := strings.Join(previewParts, "\n\n")
locale := translation.Locale()
templating := flows.NewMsgTemplating(a.Template, translation.Namespace(), components, variables)

return flows.NewMsgOut(urn, channelRef, previewText, nil, previewQRs, templating, flows.NilMsgTopic, locale, unsendableReason)
return flows.NewMsgOut(urn, channelRef, strings.Join(previewText, "\n\n"), previewAttachments, previewQRs, templating, flows.NilMsgTopic, locale, unsendableReason)
}
43 changes: 41 additions & 2 deletions flows/actions/testdata/_assets.json
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@
{
"type": "header",
"name": "header",
"content": "",
"content": "Update",
"variables": {}
},
{
Expand Down Expand Up @@ -384,7 +384,7 @@
{
"type": "header",
"name": "header",
"content": "",
"content": "Actualizar",
"variables": {}
},
{
Expand Down Expand Up @@ -424,6 +424,45 @@
]
}
]
},
{
"uuid": "be68beff-1a5b-424b-815e-023cc53c1ddc",
"name": "cat_fact",
"translations": [
{
"channel": {
"uuid": "57f1078f-88aa-46f4-a59a-948a5739c03d",
"name": "My Android Phone"
},
"locale": "eng-US",
"components": [
{
"type": "header",
"name": "header",
"content": "",
"variables": {
"1": 0
}
},
{
"type": "body",
"name": "body",
"content": "{{1}}",
"variables": {
"1": 1
}
}
],
"variables": [
{
"type": "image"
},
{
"type": "text"
}
]
}
]
}
],
"topics": [
Expand Down
104 changes: 98 additions & 6 deletions flows/actions/testdata/send_msg.json
Original file line number Diff line number Diff line change
Expand Up @@ -791,9 +791,6 @@
"type": "send_msg",
"uuid": "ad154980-7bf7-4ab8-8728-545fd6378912",
"text": "Hey Ryan Lewis, your gender is saved as boy.",
"attachments": [
"http://example.com/red.jpg"
],
"quick_replies": [
"Yes",
"No"
Expand Down Expand Up @@ -833,7 +830,7 @@
"uuid": "57f1078f-88aa-46f4-a59a-948a5739c03d",
"name": "My Android Phone"
},
"text": "Hola, Ryan Lewis, tu género está guardado como niño.",
"text": "Actualizar\n\nHola, Ryan Lewis, tu género está guardado como niño.",
"quick_replies": [
"Sip",
"No"
Expand Down Expand Up @@ -882,7 +879,6 @@
],
"templates": [
"Hey Ryan Lewis, your gender is saved as boy.",
"http://example.com/red.jpg",
"Yes",
"No",
"@contact.name",
Expand All @@ -896,7 +892,6 @@
],
"localizables": [
"Hey Ryan Lewis, your gender is saved as boy.",
"http://example.com/red.jpg",
"Yes",
"No",
"@contact.name",
Expand All @@ -917,5 +912,102 @@
"waiting_exits": [],
"parent_refs": []
}
},
{
"description": "Template with header image component",
"action": {
"type": "send_msg",
"uuid": "ad154980-7bf7-4ab8-8728-545fd6378912",
"text": "The Maine Coone is the only native American long haired breed.",
"attachments": [
"image/jpeg:http://example.com/cat1.jpg"
],
"template": {
"uuid": "be68beff-1a5b-424b-815e-023cc53c1ddc",
"name": "cat_fact"
},
"template_variables": [
"http://example.com/cat2.jpg",
"The first true cats came into existence about 12 million years ago and were the Proailurus."
]
},
"events": [
{
"type": "msg_created",
"created_on": "2018-10-18T14:20:30.000123456Z",
"step_uuid": "59d74b86-3e2f-4a93-aece-b05d2fdcde0c",
"msg": {
"uuid": "9688d21d-95aa-4bed-afc7-f31b35731a3d",
"urn": "tel:+12065551212?channel=57f1078f-88aa-46f4-a59a-948a5739c03d&id=123",
"channel": {
"uuid": "57f1078f-88aa-46f4-a59a-948a5739c03d",
"name": "My Android Phone"
},
"text": "The first true cats came into existence about 12 million years ago and were the Proailurus.",
"attachments": [
"image:http://example.com/cat2.jpg"
],
"templating": {
"template": {
"uuid": "be68beff-1a5b-424b-815e-023cc53c1ddc",
"name": "cat_fact"
},
"namespace": "",
"components": [
{
"type": "header",
"name": "header",
"variables": {
"1": 0
}
},
{
"type": "body",
"name": "body",
"variables": {
"1": 1
}
}
],
"variables": [
{
"type": "image",
"value": "http://example.com/cat2.jpg"
},
{
"type": "text",
"value": "The first true cats came into existence about 12 million years ago and were the Proailurus."
}
]
},
"locale": "eng-US"
}
}
],
"templates": [
"The Maine Coone is the only native American long haired breed.",
"image/jpeg:http://example.com/cat1.jpg",
"http://example.com/cat2.jpg",
"The first true cats came into existence about 12 million years ago and were the Proailurus."
],
"localizables": [
"The Maine Coone is the only native American long haired breed.",
"image/jpeg:http://example.com/cat1.jpg",
"http://example.com/cat2.jpg",
"The first true cats came into existence about 12 million years ago and were the Proailurus."
],
"inspection": {
"dependencies": [
{
"uuid": "be68beff-1a5b-424b-815e-023cc53c1ddc",
"name": "cat_fact",
"type": "template"
}
],
"issues": [],
"results": [],
"waiting_exits": [],
"parent_refs": []
}
}
]

0 comments on commit cc26883

Please sign in to comment.