做跨境的应该都已经对Messanger Marketing都很了解了,随着Amazon对review的把控越来越严格,找review的难度也越来越大,这要求我们尽可能找到相应市场里购买记录良好的真实用户为我们留评。那么到哪里去找真实用户呢,SNS平台因为其高参与性自然就进入我们的视野,而其中Facebook也因为其用户量巨大且真实,成为我们SNS推广的首选。目前,SNS平台的流量引入Chatbot(Manychat、Chatbot或自己设计bot)引导用户留评的方式仍然是最高效且附加值比较高的。
而Chatbot在这里扮演着非常重要的角色。它们是流量的承接平台,也是我们引导用户留评最前线的通道。因此一个设计良好的chatbot不仅能极大的提高我们的效率,而且还能提高转化率并降低我们的广告费用。因为个人使用Manychat比较多,所以最近也会以Manychat为例来聊下chatbot在跨境电商里的作用。
这篇文章是Manychat系列之一,其他也会陆续更新。今天我们就来说下Manychat的Dynamic Block的基础知识吧,后面会在另一篇文章聊下应用。
动态内容(Dynamic Block)可以让我们接收服务器生成的message,并将其发送给我们的Subscribers。要想生成对应形式的message,我们需要让服务器根据Manychat的要求生成特定格式的数据,Manychat支持的message形式在这个文档里有详细说明。(此文后面也会说到)
首选,我们来看下如何创建动态内容~
创建动态内容
在创建flow时会发现Pro账户的下面有一个发送Dynamic的选项,这里就是我们创建动态内容的地方,如图:
选择了“Dynamic”之后,点击我们的动态内容,会弹出设置的对话框,如图:
好了,我们就在这里开始创建动态内容:
- 选择HTTP请求方法(GET或POST)
- 在
Request URL
那里输入生成数据的URL。如果我们现在还没有自己的服务器应用来生成数据,我们可以用Glitch提供的服务来做练习。这里也是用Glitch的应用来做测试(具体方法下一小节会介绍) - 根据自己的需求填入请求的'Headers'和'Body'
-
都填写完后点'Test the Request'来测试下是否能返回自己想要的数据。返回200则代表访问成功。
-
都设置好之后就可以了,但最好再给动态内容添加一个Fallback步骤,Fallback会在动态内容出错的时候被调用。就是这里:
用Glicth应用练习
如果没有用来练习Dev Tools的服务器,我们可以用Glitch来做练习。Manychat官方在Glitch提供了供我们练习的start项目,我们直接去remix这个项目就可以了。
在Glitch上创建项目
-
首先我们打开manychat在Glitch提供的starter webhook项目,进去后点右上角的'Remix Your Own'按钮复制一份。
-
在左上角,点击'Show',在下拉菜单选择在新窗口打开,并复制公共项目的URL。这就是我们用来生成数据的URL。
-
有了地址后,和上文一样,我们在创建一个动态内容的message。在‘Request URL’添加我们刚刚复制的服务器地址:
-
好了!现在我们点'Test the Request'来测试下,如果返回了'Hello from server!',则说明我们成功从Glitch获取到了数据。
-
接下来我们就可以在Glitch里编写想要返回给动态内容的数据了。注意:服务器返回数据必须遵循Manychat的格式,这样才能生成正确样式的message。具体可以参考下文或Manychat的官方文档: Dynamic Block
好了,到这里我们已经可以动态生成内容了,如果chatbot的flow不是特别复杂,我们可以先将服务部署在glitch或heroku上,等后期项目复杂之后再迁到自己的服务器上。剩下的只需要熟悉Manychat为我们提供的内容格式了,Manychat官方文档在这里,这篇文章也会不断更新。
dynamic_block文档
响应的格式
服务器返回的json数据应该如下列格式:
{
"version": "v2", //dynamic_block的版本
"content": {
"messages": [
{
"type": "text",
"text": "simple text"
},
{
...Another messages
}
],
"actions": [ //optional
{
"action": "add_tag",
"tag_name": "example tag"
},
{
...Another actions
}
],
"quick_replies": [ //optional
{
"type": "node",
"caption": "Quick reply text",
"target": "My Content"
},
{
...Another quick replies
}
]
}
}
PS: 动态内容API v2目前只支持不超过10条的messages,11条快捷回复和5个actions。其中“buttons”,“actions”和“quick_replies”属性是可选的。
Messages类型
文字
用来发送text信息,支持和url、flow、node、call buttons一起使用。"buttons", "actions", "quick_replies"属性可省略。
{
"version": "v2",
"content": {
"messages": [
{
"type": "text",
"text": "simple text with button",
"buttons": [
{
"type": "url",
"caption": "External link",
"url": "https://manychat.com"
}
]
}
],
"actions": [],
"quick_replies": []
}
}
图片、音频、视频
用来发送图片、音频、视频,支持JPG、PNG和GIF图片格式和25mb以内的音、视频文件,可以与url、call, buy、flow、node、share buttons一起使用。"buttons", "actions", "quick_replies"属性可省略。
{
"version": "v2",
"content": {
"messages": [
{
"type": "image",
//"type": "video",
// "type": "audio",
"url": "文件url地址",
"buttons": []
}
],
"actions": [],
"quick_replies": []
}
}
文件
用来传送文件,支持25mb以内的文件,"actions", "quick_replies"属性是可选择的。
{
"version": "v2",
"content": {
"messages": [
{
"type": "file",
"url": "https://manybot-thumbnails.s3.eu-central-1.amazonaws.com/ca/xxxxxxzzzzzzzzz.pdf"
}
],
"actions": [],
"quick_replies": []
}
}
卡片Gallery(常用)
用来发送可水平滚动的卡片gallery,可以与url、call、buy、flow、node和share buttons一起使用。"action_url", "buttons", "actions", "quick_replies"属性可省略。
{
"version": "v2",
"content": {
"messages": [
{
"type": "cards",
"elements": [
{
"title": "Card title",
"subtitle": "card text",
"image_url": "https://manybot-thumbnails.s3.eu-central-1.amazonaws.com/ca/xxxxxxzzzzzzzzz.png",
"action_url": "https://manychat.com",
"buttons": []
}
],
"image_aspect_ratio": "horizontal"
}
],
"actions": [],
"quick_replies": []
}
}
action_url
- 建议使用HTTPS的URL,HTTP地址在某些浏览器可能打不开。
image_aspect_ratio
- 设置图片显示的纵横比。可以使用horizontal(默认)或者square(1:1)。
列表(常用)
用来发送列表,可以与url、flow、node和buy buttons一起使用,'top_element_style', 'action_url', 'buttons', 'actions', 'quick_replies'属性可省略。
列表有两种展示方式:
- 'top_element_style': 'large', 第一个列表元素以封面大图加文字的方式展示。
- 'top_element_style': 'compact',无突出展示,所有列表元素形式相同(普通列表)。
列表可容纳元素数量在2~4个。
{
"version": "v2",
"content": {
"messages": [
{
"type": "list",
"top_element_style": "compact",
"buttons": [],
"elements": [
{
"title": "list title1",
"subtitle": "list substitle2",
"image_url": "https://manybot-thumbnails.s3.eu-central-1.amazonaws.com/ca/xxxxxxzzzzzzzzz.png"
"action_url": "https://manychat.com",
"buttons": []
}
]
}
],
"actions": [],
"quick_replies": []
}
}
按钮(常用)
按钮分为call、url、share、flow、node和buy这几种类型,其中actions属性指定按钮触发时进行的actions,可以是url、flow或node button类型。actions属性可省略。
按钮基本格式:
{
"version": "v2",
"content": {
"messages": [
{
"type": "text",
"text": "simple text",
"buttons": [
{
"type": "url",
"caption": "External link",
"url": "https://manychat.com",
"actions": [] //optional
},
{
...Another buttons
}
]
},
{
...Another messages
}
],
"actions": [ //optional
{
"action": "add_tag",
"tag_name": "example tag"
},
{
...Another actions
}
],
"quick_replies": [ //optional
{
"type": "node",
"caption": "Quick reply text",
"target": "My Content"
},
{
...Another quick replies
}
]
}
}
电话按钮
{
"version": "v2",
"content": {
"messages": [
{
"type": "text",
"text": "simple text with button",
"buttons": [
{
"type": "call",
"caption": "Call me",
"phone": "+1 (555) 555-55-55"
}
]
}
],
"actions": [],
"quick_replies": []
}
}
URL按钮
URL按钮的webview_size
属性有3种:(该属性定义在Manychat里打开url时窗口的大小,可省略)
- full - (100%)
- medium - (75%)
- compact - (50%)
{
"version": "v2",
"content": {
"messages": [
{
"type": "text",
"text": "simple text with button",
"buttons": [
{
"type": "url",
"caption": "External link",
"url": "https://manychat.com",
"webview_size": "full"
}
]
}
],
"actions": [],
"quick_replies": []
}
}
分享按钮
{
"version": "v2",
"content": {
"messages": [
{
"type": "text",
"text": "simple text with button",
"buttons": [
{
"type": "share"
}
]
}
],
"actions": [],
"quick_replies": []
}
}
节点按钮*
{
"version": "v2",
"content": {
"messages": [
{
"type": "text",
"text": "simple text with button",
"buttons": [
{
"type": "node",
"caption": "Show",
"target": "My Content"
}
]
}
],
"actions": [],
"quick_replies": []
}
}
target
的值是节点名,其指定的节点必须存在于正在执行的flow。节点名可以在node的header里看到。连接到的节点的名字在该flow中必须是唯一的。跳转按钮仅支持flow内部访问,不支持Public API访问。
节点名在这里~
flow跳转按钮
{
"version": "v2",
"content": {
"messages": [
{
"type": "text",
"text": "simple text with button",
"buttons": [
{
"type": "flow",
"caption": "Go",
"target": "content20180221085508_278589"
}
]
}
],
"actions": [],
"quick_replies": []
}
}
target
字段需要指定flow ID,flow ID可以在flow被打开时找到。如下图:
购买按钮
购买按钮只有在Stripe已经配置好的情况下使用。 "success_target" 属性可省略。
{
"version": "v2",
"content": {
"messages": [
{
"type": "text",
"text": "simple text with button",
"buttons": [
{
"type": "buy",
"caption": "Buy",
"customer": {
"shipping_address": true,
"contact_name": false,
"contact_phone": true
},
"product": {
"label": "T-shirt",
"cost": 2250
},
"success_target": "My Content"
}
]
}
],
"actions": [],
"quick_replies": []
}
}
shipping_address
, contact_name
, contact_phone
字段是必须的,要用来设置付款表单;
product.cost
应该按照美分来计数(比如$22.5需要指定的值是2250)
success_target
字段需要连接到执行中flow的某个节点,节点名可以在节点的头部找到,连接到的节点的名字在该flow中必须是唯一的。
Dynamic block callback按钮
'headers', 'payload'属性可省略。
{
"version": "v2",
"content": {
"messages": [
{
"type": "text",
"text": "simple text with button",
"buttons": [
{
"type": "dynamic_block_callback",
"caption": "Dynamic content",
"url": "https://your-service.com/dynamic",
"method": "post",
"headers": {
"x-header": "value"
},
"payload": {
"key": "value"
}
}
]
}
],
"actions": [],
"quick_replies": []
}
}
该按钮的工作方式和动态内容一样,都会向服务器请求内容,并生成Manychat相应格式的内容。
Actions类型
actions属性是在所有类型的数据中都是可选的。
添加/删除标签
为subscriber添加/删除标签,标签必须存在。
{
"version": "v2",
"content": {
"messages": [{}],
"actions": [
//添加标签
{
"action": "add_tag",
"tag_name": "your tag",
},
//删除标签
{
"action": "remove_tag",
"tag_name": "your tag",
}
],
"quick_replies": []
}
}
添加/清除custom field
为用户添加/清除custom field,custom field必须存在。
PS:添加custom field时要注意其数据类型,必须符合原来定义的数据类型。
{
"version": "v2",
"content": {
"messages": [{}],
"actions": [
// 添加custom field
{
"action": "set_field_value",
"field_name": "your field name",
"value": "some value"
},
// 删除custom field
{
"action": "unset_field_value",
"field_name": "your field name",
"value": "some value"
}
],
"quick_replies": []
}
}
custom field支持的数据类型
-
Number
:2 or 3.14 -
Text
:"文字" -
Date
:采用YYYY-MM-DD
格式,类似"2018-03-25" -
Date Time
:采用ISO8601 UTC
格式,类似"2018-03-25T13:25:00.000Z" -
True/False
:true或false
快捷回复
quick_replies
是可选的。 如果动态内容里内容块之后还有其他内容,则不能使用快捷回复。快捷回复的设置和按钮相同,支持content
, node
, dynamic_block_callback
3种类型。
跳转到某节点
{
"version": "v2",
"content": {
"messages": [{}],
"actions": [],
// 此处定义快捷回复
"quick_replies": [
{
"type": "node",
"caption": "Show",
"target": "My Content"
}
]
}
}
此处对节点的要求和go to node按钮的要求相同。
跳转到flow
{
"version": "v2",
"content": {
"messages": [{}],
"actions": [],
"quick_replies": [
{
"type": "flow",
"caption": "Go",
"target": "content20180221085508_278589"
}
]
}
}
动态内容快捷回复
headers
和payload
属性是可选的。
{
"version": "v2",
"content": {
"messages": [{}],
"actions": [],
"quick_replies": [
{
"type": "dynamic_block_callback",
"caption": "Dynamic content",
"url": "https://your-service.com/dynamic",
"method": "post",
"headers": {
"x-header": "value"
},
"payload": {
"key": "value"
}
]
}
}
External Message Callback
external_message_callback
属性是可选的,该属性可以将用户输入的数据传给特定的服务器处理。
payload
里的{{last_input_text}}
变量保存着用户的message信息。该信息默认且最多保存一天,可以在payload
里用timeouit
属性来指定保存的时间。
{
"version": "v2",
"content": {
"messages": [
{
"type": "text",
"text": "Hello! How are you?"
}
],
"actions": [],
"quick_replies": [],
"external_message_callback": {
"url": "https://your-service.com/dynamic",
"method": "post",
"headers": {
"x-header": "value"
},
"payload": {
"id": "{{user_id}}",
"last_input_text": "{{last_input_text}}",
"key": "value"
},
"timeout": 600
}
}
}
external_message_callback
和动态内容工作方式相同。
变量
在动态内容的请求体里(Request),可以使用Full Subscriber Data
变量,该变量包含了subscriber的所有信息。
{
"id": 13245647xxxxxxxxx,
"key": "user:13245647xxxxxxxxx",
"page_id": 234564657xxxxxxxx,
"status": "active",
"first_name": "Subscriber",
"last_name": "Lastname",
"name": "Subscriber Lastname",
"gender": "male",
"profile_pic": "https://xxxxxxxxx.com/subscribers/big_xxxxxxxxxxxxxxxx.jpg",
"locale": "en_US",
"language": "English",
"timezone": "UTC-07",
"live_chat_url": "https://manychat.com/fb234564657xxxxxxxx/chat/13245647xxxxxxxxx",
"last_input_text": "Last subscriber's input text",
"last_growth_tool": null,
"subscribed": "2018-07-02T00:00:00+00:00",
"last_interaction": "2018-07-02T00:00:00+00:00",
"last_seen": "2018-07-02T00:00:00+00:00",
"custom_fields": {
"customField": 0.75,
"customDate": "2018-05-31",
"customBool": true,
...
}
}
网友评论