关于FaceBook的接入笔记

  • Post author:
  • Post category:其他

千万不要看中文,千万不要看中文,千万不要看中文。建议英文加自己的翻译去翻译,中文文档是过时的,注意。 我又从繁体的输入法回来了~~

梦开始的地址:https://developers.facebook.com/

实际上所谓接入facebook,通常指的是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_urlsubtitle 之一。
subtitle 字符串 *可选。 显示为列表项副标题的字符串。不超过 80 个字符。如果副标题跨越太多行,则可能会被截断。 元素必须至少设置 image_urlsubtitle 之一。
image_url 字符串 *可选。 要显示在列表项中的图片网址。 元素必须至少设置 image_urlsubtitle 之一。
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、主页欢迎讯息

在这里插入图片描述

图示开始按钮及欢迎语: 参考链接
Tips: 需要在主页开启问候语后生效
多言语列表支持地区

//【设置开始按钮的方法】
//这里"开始"代表点击后返回给服务器的载体讯息
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天内的讯息可回复
详细链接文帖回复


版权声明:本文为CoffeeAndIce原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。