千万不要看中文,千万不要看中文,千万不要看中文。建议英文加自己的翻译去翻译,中文文档是过时的,注意。 我又从繁体的输入法回来了~~
梦开始的地址:https://developers.facebook.com/
实际上所谓接入
messenger
平台
messenger开发文档
零、会触发回调接口失效的原因
1、更换SSL证书导致
更新SSL证书,由于生成的证书链变化也会导致失效
2、变更ip地址
虽然可能是绑定域名,但是会检测ip地址变动
3、账户权限变更
2022年4月前,develop权限用户旧版本设置的主页还是生效,4月后,develop仅能设置自己创建的主页,需要admin才可以调用拥有者的主页。
一、配置facebook 环境
1)创建一个用于调试Messenger的主页
2)配置Webhook回调地址
fbBotToken
自定义,用于配置回调地址
fbPageAccessToken
通常在配置回调地址后配置fbBotToken=lg_token_for_test
fbPageAccessToken=EAAPeK646ZC2kBANAlEGLXDHOhZBStKAEJZCzC5FvRZAZC1VRIYAVSPMZAGyYsgMY4IwMOYSlhKlmm94H6fUB04ixwySZBmonqEmwsmzMxmgykHGgG0Pjh6n52XLylCSYrM8Ys0qqTFHNCHcXoEBfpWS0bmYVR0GYJZCFBJYxzy92oYWNgjTkv4tC
3)如何测试facebook
messenger搜索自己的主页,就可以沟通了
二、开始开发Messenger
1、不使用辅助sdk
https://developers.facebook.com/docs/messenger-platform/
自己慢慢看,如果有时间,我也自己搞
2、使用辅助sdk
2.1 基础jar包依赖流程
这个,我们可以自定义sdk包,然后根据自己需求做出改动
Tips:
建议直接复制jbot内文件,避免依赖等问题,仅需删除BotWebSocketHandler
即可
1) github 地址 :
https://github.com/rampatra/jbot
2)打包加入lib依赖:
编译好后直接加入
3)新版webHook 消息类型分析
发生各种交互或事件(包括某人发送消息时)时通知您。Messenger平台将Webhook事件作为
POST
请求发送到您的Webhook。
一般情况仅需勾选message事件即可
可以更方便的通过事件驱动类型来监听数据
#具体webhook 可以参照
https://developers.facebook.com/docs/messenger-platform/webhook
通过webhook设置不同的类型,可以对不同类型进行分配各自的回调处理(若配置回调后,持续不响应Webhook事件,会自动相应递进警告且自动取消webhook订阅的问题)
2.2 全盘CV(拷贝忍者自己改)
通常我建议自行更改http客户端,以免出现参数无法传递的问题
定位到FbApiEndpoints
,将其中的restTemplate替换为自己的http客户端。
三、功能搭建组合
主要针对收发信息的大部分内容进行操作,结合新版WebHook来对消息内容解析
1、收发事件基本已经归类到EventType
中,通过对时间的监听收发
2、已经对Messenger回复信息进行包装为Event
,可以轻松获取结构化的信息
1、快速回复(按钮)
对应:
QUICK_REPLY
可以针对性的提供按钮,最多13个
回复时
将已点击按钮的标题作为消息发布到对话中。
参数解释(button)
button
属性 | 类型 | 说明 |
---|---|---|
content_type |
string | 必须是以下类型之一text :发送文本按钮user_phone_number :发送一个按钮,让消息接收人可以发送与其帐户绑定的手机号。user_email :发送一个按钮,让消息接收人可以发送与其帐户绑定的邮箱。 |
title |
字符串 | 如果 content_type 为“text”,则必须设置此属性。这些文本将显示在快速回复按钮上。请勿超过 20 个字符。 |
payload |
字符串,数值 | 如果 content_type 为“text”,则必须设置此属性。将通过messaging_postbacks Webhook 事件向您发回的自定义数据。不超过 1000 个字符。 如果设置了 image_url ,则可将此项设置为空字符串 |
image_url |
字符串 | **可选。**将在文本快速回复按钮上显示的图片的网址。图片大小不低于 24 X 24 像素。如果图片过大,系统会自动进行裁剪并调整大小。 如果 title 为空字符串,则必须设置此属性。 |
1)纯文本
#只需要在text填入所需回复文本即可
reply(Event event, String text)
2)文字快速带背景
#参数说明
title:展示的内容
payload:真实返回的内容
image_url:背景图url
#单一按钮
message = new Message().setQuickReply(new Button()
.setTitle("展示内容").setPayload("真实相应内容").setImageUrl("背景图url"));
#多按钮
message = new Message().setQuickReplies(new Button[]{
new Button().setTitle("展示内容1").setPayload("真实相应内容2").setImageUrl("背景图url3"),
new Button().setTitle("展示内容1").setPayload("真实相应内容2").setImageUrl("背景图url3")
});
#调用上方message
reply(event,message)
3)位置快速回复
message = new Message().setQuickReply(new Button().setContentType("location").setTitle("请求位置"));
#调用上方message
reply(event,message)
4)获取用户号码
如果用户的个人资料没有电话号码,则不会显示快速回复。
new Message().setQuickReply(new Button().setContentType("user_phone_number").setTitle("获取用户号码"));
#调用上方message
reply(event,message)
5)获取用户电子邮件
如果用户的个人资料没有电子邮件地址,快速回复将不会显示
new Message().setQuickReply(new Button().setContentType("user_email").setTitle("获取用户电子邮箱"));
#调用上方message
reply(event,message)
2、模版信息
模版信息统一调用方法
#下方都属于message参数的各种类型
reply(event,message)
1)常规模版
参数解释(generic)
message.attachment
属性 | 类型 | 描述 |
---|---|---|
type |
string | 值必须是 template |
payload | payload | 常规模板 |
message.attachment.payload
属性 | 类型 | 描述 |
---|---|---|
template_type |
string | 值必须是 generic |
image_aspect_ratio |
string | **可选的。**用于渲染由指定的图像的宽高比element.image_url 。必须为horizontal (1.91:1)或square (1:1)。默认为horizontal 。 |
elements |
element[] | 一个element 对象数组,描述要发送的通用模板的实例。指定多个元素将发送可水平滚动的模板轮播。最多支持10个元素。 |
message.attachment.payload.elements
下方button为快速回复的对象
属性 | 类型 | 描述 |
---|---|---|
title |
string | 显示在模板中的标题。最多80个字符。 |
subtitle |
string | **可选的。**在模板中显示的字幕。最多80个字符。 |
image_url |
string | **可选的。**要在模板中显示的图像的URL。 |
default_action |
button | 可选的。点击模板时执行的默认操作。接受与 上述快速回复按钮相同的属性,但除外title 。 |
buttons |
button[] | **可选的。**附加到模板的按钮数组。每个元素最多支持3个按钮。 |
1、轮播展示(最多10个元素)
#多个element可以用作轮播图
Message message = new Message();
Element[] element = new Element[]{
new Element().setTitle("test1").setImageUrl("https://plugins.compzets.com/images/as-logo.png")
.setSubtitle("We have the right hat for everyone 11111")
.setDefaultAction(new Button().setType("web_url").setUrl("https://plugins.compzets.com")
.setMessengerExtensions(false).setWebviewHeightRatio("tall")),
new Element().setTitle("test2")
.setImageUrl("https://plugins.compzets.com/contentshare/img/cs-logo-64.png")
.setSubtitle("We have the right hat for everyone 22222")
.setDefaultAction(new Button().setType("web_url")
.setUrl("https://plugins.compzets.com/images/fs-logo.png").setMessengerExtensions(false)
.setWebviewHeightRatio("tall"))};
message.setAttachment(new Attachment().setType("template")
.setPayload(new Payload().setTemplateType("generic").setElements(element)));
2、单元素配合按钮(每个元素最多3个按钮)
Message message = new Message();
Element[] element = new Element[]{
new Element().setTitle("test1").setImageUrl("https://plugins.compzets.com/images/as-logo.png")
.setSubtitle("We have the right hat for everyone 11111")
.setDefaultAction(
new Button().setType("web_url").setUrl("https://plugins.compzets.com")
.setMessengerExtensions(false).setWebviewHeightRatio("tall"))
.setButtons(new Button[]{new Button().setTitle("按鈕描述")
.setPayload("真实相应内容")
})
};
message.setAttachment(new Attachment().setType("template")
.setPayload(new Payload().setTemplateType("generic").setElements(element)));
2)列表模版
参数解释(list)
message.attachment
属性 | 类型 | 描述 |
---|---|---|
type |
string | 值必须是 template |
payload | payload | 常规模板 |
message.attachment.payload
属性 | 类型 | 描述 |
---|---|---|
template_type |
string | 值必须为 list |
top_element_style |
string | *可选。 设置第一个列表项的格式。Messenger 网页客户端目前仅呈现compact 格式。 默认compact :呈现无格式的列表项。 large :将第一个列表项呈现为封面项。 |
buttons |
button[] | 可选。 显示在列表底部的按钮。最多支持 1 个按钮;接受与 上述快速回复按钮*相同的属性 |
elements |
element[] | 描述列表中各项目的一组元素。 要求最少 2 个元素。最多支持 4 个元素。 |
sharable |
Boolean | *可选。 设置为 true ,可为模板消息启用 Messenger 原生分享按钮。默认为 false 。 |
message.attachment.payload.elements
属性 | 类型 | 描述 |
---|---|---|
title |
string | 显示为列表项标题的字符串。 不超过 80 个字符。如果标题跨越太多行,则可能会被截断。 元素也必须至少设置 image_url 或subtitle 之一。 |
subtitle |
字符串 | *可选。 显示为列表项副标题的字符串。不超过 80 个字符。如果副标题跨越太多行,则可能会被截断。 元素必须至少设置 image_url 或subtitle 之一。 |
image_url |
字符串 | *可选。 要显示在列表项中的图片网址。 元素必须至少设置 image_url 或subtitle 之一。 |
default_action |
button | *可选。接受与 上述快速回复按钮相同的属性,指定用户轻触列表项时要执行的默认操作。 仅当 messenger_extensions 属性设置为 true 时允许使用 |
buttons |
button[] | *可选。* 要显示在列表项中的按钮。最多支持 1 个按钮 |
Message message = new Message();
Element[] elements = new Element[]{
new Element().setTitle("AnimateScroll").setSubtitle("A jQuery Plugin for Animating Scroll.")
.setImageUrl("https://plugins.compzets.com/images/as-logo.png")
.setDefaultAction(new Button().setType("web_url").setMessengerExtensions(true)
.setUrl("https://plugins.compzets.com/animatescroll/")),
new Element().setTitle("Windows on Top").setSubtitle("Keeps a specific Window on Top of all others.")
.setImageUrl("htt ps://plugins.compzets.com/images/compzets-logo.png")
.setDefaultAction(new Button().setType("web_url").setMessengerExtensions(true)
.setUrl("https://www.compzets.com/view-upload.php?id=702&action=view")),
new Element().setTitle("SimpleFill").setSubtitle("Simplest form filler ever.")
.setImageUrl("https://plugins.compzets.com/simplefill/chrome-extension/icon-64.png")
.setDefaultAction(new Button().setType("web_url").setMessengerExtensions(true)
.setUrl("https://plugins.compzets.com/simplefill/"))
};
1、默认首列覆盖文本的封面图像
message.setAttachment(new Attachment().setType("template").setPayload(new Payload()
.setTemplateType("list").setElements(elements)))
2、无格式列表展示
差别正如属性
top_element_style
为compact
message.setAttachment(new Attachment().setType("template").setPayload(new Payload()
.setTemplateType("list").setElements(elements)
.setTopElementStyle("compact")))
3)按钮模版(button)
参数解释(button)
message.attachment
属性 | 类型 | 描述 |
---|---|---|
type |
string | 值必须是 template |
payload | payload | 常规模板 |
message.attachment.payload
属性 | 类型 | 描述 |
---|---|---|
template_type |
string | 值必须是 button |
text |
string | UTF-8编码的文本,最多640个字符。文本将出现在按钮上方。 |
buttons |
button[] | 可选。 显示为号召性用语的1-3个按钮集合;接受与 上述快速回复按钮*相同的属性 |
1、一行Text说明后,排列按钮
Message message = new Message();
Button[] buttons = new Button[]{
new Button().setType("web_url").setUrl("http://blog.ramswaroop.me").setTitle("JBot Docs"),
new Button().setType("web_url").setUrl("https://goo.gl/uKrJWX").setTitle("Buttom Template")
};
message.setAttachment(new Attachment().setType("template").setPayload(new Payload()
.setTemplateType("button").setText("These are 2 link buttons.").setButtons(buttons)))
2、主页欢迎讯息
//【设置开始按钮的方法】
//这里"开始"代表点击后返回给服务器的载体讯息
setGetStartedButton("开始");
//【设置问候语的方法】
//可配置参数
//{{user_first_name}}
//{{user_last_name}}
//{{user_full_name}}
//可兼容多言语
setGreetingText(new Payload[]{new Payload().setLocale("default").setText(greetEn),
new Payload().setLocale("zh_CN").setText(greetSc),
new Payload().setLocale("zh_HK").setText(greetTc),
new Payload().setLocale("en_US").setText(greetEn)});
//例如:greetSc 值为:你好,{{user_full_name}},歡迎來到demo
四、不基于第三方直接偷懒(憨憨的行为)
等我有空就脑抽作
持续更新中(如果记得的话)~~
五、FB针对其他拓展性功能支持
1、支持集成聊天浮动窗口
相当于在自己的网站集成一个图标,点击即可唤起facebook,可设置为需要登录或游客形式交互。
详细链接:插件集成
2、支持帖子回复
相当于发表的文章内容评论讯息等回复。
值得注意的是,截至2022.4.28,官方描述为仅7天内的讯息可回复
详细链接 :文帖回复