从零开始踩坑INS私信&评论自动回复(1)
背景&原理
1、有人在你的INS帖子中进行评论,希望立即给他自动发送一条私信,或评论某关键词发送不同私信
2、有人向你的INS发送私信,自动回复设定好的内容,或同样根据关键词回复
3、当有人打开你的INS私信框时,给定1-4个破冰语句,并对应设定好回复
实现原理:INS设定了几种事件,比如评论、私信、艾特、破冰等,这些动作发生后,会触发对应事件给我们的服务器,即webhooks,拿到事件信息要做什么就是自己开发了
开发步骤
u1s1真心觉得INS对于这块的开发手册写的非常不友好
设置账号系列
1、使用同一个邮箱注册ins和Facebook账号
a. 修改个人信息,避免被系统误判为机器人封号
2、设置ins和Facebook账号相互关联绑定,为了后续使用ins图谱API
3、ins在设置中切换为专业账户,账户类型选择商家,类别选择 产品/服务,商家信息可以选择不使用个人信息跳过,但不能使用个人信息,至此切换专业账户完成
a. 在专业账户最下面,可以选择切换为 业务账户
4、新建Facebook公共主页(区别于个人,公司组织品牌),填写相关信息,尽量完整避免误封
5、公共主页设置,已绑定账户,选择绑定ins
摸不着头脑的开发文档
1、Mate旗下产品技术文档,同属Meta开发者,注册为Meta开发者 https://developers.facebook.com/async/registration/dialog/?src=default
a. 注册完成后创建应用,应用类型选择 商务,
b. ins开放平台 https://developers.facebook.com/docs/instagram/ ,用于获取ins相关媒体信息,ins要使用专业账户
c. message开放平台 https://developers.facebook.com/docs/messenger-platform/instagram ,回复消息需要使用该平台能力
2、创建业务账户 https://business.facebook.com/latest/home ,业务账户可以将 FB公共主页、ins账户等集中管理,暂时还没理解为什么一定要这个,但是需要使用到
3、ins图谱API是FB提供的访问ins专业账户数据的端点,基本URL是 graph.facebook.com
a. 图谱API探索工具 https://developers.facebook.com/tools/explorer ,可在线测试接口
b. Instagram图谱API使用文档https://developers.facebook.com/docs/instagram-api
c. 使用API需要先创建一个应用
d. 使用API需要验证应用的用户身份,故所有请求都必须包含FB用户访问口令,即access_token,注意必须使用FB账号而不能ins账号
i. 访问口令分为多种,其中发送私信使用 公共主页访问口令 PAGE-ACCESS-TOKEN https://developers.facebook.com/docs/facebook-login/guides/access-tokens ,此文档介绍了不同口令,和生成短期公共主页口令方法,短期口令有效期为1小时,下一篇即是获取长期口令
ii. 另有一篇文档也是介绍如何生成访问口令的,https://developers.facebook.com/docs/pages/access-tokens ,但好像根据这篇文档介绍的方法生成的口令无法通过 comment_id 发送私信,返回字段也有所不同,暂不清楚两种口令的区别
iii. 公共主页访问口令需要使用(长期?)用户访问口令生成,用户生成口令参考文档 i ,公共主页参考文档 ii
1、短期用户口令在 图谱API探索工具 创建获取,选择用户口令
EAALpuPCUpYABOZBTeZCsJnyac5ihpwVSo************************************************A3qZBcB1NUbcpx5VCeZA8c8rKwE012PvqkJRtUyrWQa78Clp6TZCR9fWi91nj6zcmlK6Y9smd39KUSgR9hmHIbphw1ZBCOcZBZAsnSMQZCz1edEpxvDzz4ZCxWyapZBLNzSWeYGGQ35ELTEQZCAhgZDZD
2、参考文档i生成长期用户访问口令,有效期60天,需要使用创建应用的 ID、秘钥 和 上面的短期口令
https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=*************&client_secret=****************************&fb_exchange_token=EAALpuPCUpYABOZBTeZCsJnyac5ihpwVSoHRZAtTSYRe0Tg4iq9Sr8bhcVWvV2YA8YhfeY1ZA************************************************78Clp6TZCR9fWi91nj6zcmlK6Y9smd39KUSgR9hmHIbphw1ZBCOcZBZAsnSMQZCz1edEpxvDzz4ZCxWyapZBLNzSWeYGGQ35ELTEQZCAhgZDZD
3、参考文档ii生成短期公共主页访问口令,需要使用FB个人账户ID,以及上面生成的(长期?)用户口令
https://graph.facebook.com/1077*********07/accounts?access_token=EAAXbj44sKFUBO1fjVldVZBpZARmOXkaXzu3tZBeNq1vCMG************************************************33svG5IV1ImDZAJ2oQ6T1CFCXks7o3JLMyJNyl5lVh1incmMb3iJZBjZCrcpwGL0DaYEjA1ntnMIGw9b3zsGMZA2FEKKsTczk5OWPZARhCfg2xOPM
4、参考文档ii下一篇生成长期公共主页访问口令,需要使用API版本号,个人FB账户ID,以及第二步生成的长期用户口令
https://graph.facebook.com/v17.0/me/accounts?access_token=EAALpuPCUpYABO53MLn3RQfGjUKz4iUE9ZCnZBE1reH************************************************LtywSZCLM6U1veeEeGvFQiQ8Npxbf2sPA2wATIf48NGdITd9cdhZAazOk9a0tO2gkNEVkpKJOGZCzeKeahGcTXZB5mKfSG9IsO6PJmo
5*、参考文档i也可以生成一个长期公共主页访问口令,但不清楚与第4步的口令区别,目前发私信使用第4步长期公共主页口令。需要使用公共主页账号ID,以及第二步生成的长期用户口令
https://graph.facebook.com/105************504?fields=access_token&access_token=EAAXbj44sKFUBO1fjVldVZBpZARmOXkaXzu3tZBeNq1vCMGQ************************************************svG5IV1ImDZAJ2oQ6T1CFCXks7o3JLMyJNyl5lVh1incmMb3iJZBjZCrcpwGL0DaYEjA1ntnMIGw9b3zsGMZA2FEKKsTczk5OWPZARhCfg2xOPM
e. 使用API不同端点需要授予不同的权限,授权申请在应用的控制台操作
f. 公共主页PAGE相关权限介绍 https://developers.facebook.com/docs/pages/overview/permissions-features#tasks ,申请高级权限必看
4、为Meta开发者用户添加webhook产品
a. 添加地址 https://developers.facebook.com/apps/164********8133/webhooks/?business_id=333******225
b. 选择Instagram订阅,回调网址 https://www.xxy.ink/***/***/insWebhook ,注意必须https,get访问时加上query参数 ,其中hub.challenge字段随便填串数字,返回也是这个,hub.verify_token字段是回调网址下面的验证口令,可以填一串MD5字符串。这个接口由自己起服务器开发,即收到get请求返回hub.challenge内容即可
?hub.mode=subscribe&hub.challenge=***********&hub.verify_token=E531*******2046
c. 添加成功后订阅 comments 事件,即用户对于ins媒体的评论事件
i. story_insights:捕获快拍成效分析
ii. mentions:@事件
iii. 其他messages相关的webhooks,https://developers.facebook.com/docs/messenger-platform/instagram/features/webhook
d. 点击test测试评论事件的hook,我方服务器收到发来的模拟ins评论数据 ,在服务器查看日志
e. 查看不同hooks的介绍以及所需的权限
i. 设置 Instagram 专用 Webhooks https://developers.facebook.com/docs/graph-api/webhooks/getting-started/webhooks-for-instagram
1. 按照第二步将应用订阅公共主页
2. 在图谱API工具平台,必须选中business_management权限,公共主页访问口令才会出现
ii. Instagram 消息专用 Webhooks,messages相关hook事件,消息 区别于上面文档,https://developers.facebook.com/docs/messenger-platform/instagram/features/webhook
iii. Messenger 开放平台专用 Webhooks https://developers.facebook.com/docs/messenger-platform/webhooks/?translation
5、添加测试者用户身份
a. 输入FB编号,注意这里编号不是USER-ID,仅仅是指个人主页后的一串id数字
b. 提交后进入 待审核 状态,需要对应的测试账号进入他的Meta开发者平台,同意测试邀请 https://developers.facebook.com/apps/
6、应用开发完成后,需要申请权限
a. 申请权限就是应用审核
i. ins消息对应的应用审核:https://developers.facebook.com/docs/messenger-platform/instagram/app-review/?translation
ii. Meta应用审核:https://developers.facebook.com/docs/app-review/submission-guide
b. 应用审核完成后,将获得高级访问级别,而获取高级访问级别现在要求完成公司验证https://developers.facebook.com/docs/graph-api/overview/access-levels/#advanced-access ,即先公司验证再应用审核权限
其他参数举例
1、USER-ID:个人主页编号
2、PAGE-ID:公共主页编号
3、ig-user-id:INS帐户编号
a. ins媒体指图片、视频、快拍等
1、GET /{ig-user-id}/media
-- 获取当前ins用户的所有ins媒体编号ig-media-id,限制1W条
2、GET /{ig-media-id}/comments
-- 获取当前媒体对象的所有评论,每次限制50条
-- 返回评论时间戳、内容、id(ig-comment-id)
3、GET /{ig-comment-id}?fields={fields}
-- 获取当前评论媒体对象的所有fields信息
-- fields可选 from,id,like_count,hidden,media,parent_id,text,timestamp,user,username,replies 等
-- 有针对该评论媒体对象的 隐藏、删除 post请求
4、POST /PAGE-ID/messages
-- JSON参数:{
"recipient": {
"comment_id": "18024301255610997"
},
"message": {
"text": "this is a test"
},
"access_token": PAGE-ACCESS-TOKEN
}
-- 向评论id的用户发送私信,私信限制一条,24小时内发送,access_token为公共主页访问口令,短期长期均可,使用 图谱API探索工具 时,需要将访问口令切换为 公共主页口令
4、使用测试账号评论INS帖子,触发hook后收到消息格式
{
"entry": [
{
"id": "178414*******62102",
"time": 1692341370,
"changes": [
{
"value": {
"from": {
"id": "6234*****970946",
"username": "xxy.sdn"
},
"media": {
"id": "1830861*****0873",
"media_product_type": "FEED"
},
"id": "17987170******93263",
"text": "Hahaha"
},
"field": "comments"
}
]
}
],
"object": "instagram"
}
5、没有申请到高级权限前,只有添加为测试账号私信才会触发hook,收到消息格式
{
"object": "instagram",
"entry": [
{
"time": 1692*****9952,
"id": "17841*****8762102",
"messaging": [
{
"sender": {
"id": "62348*****70946"
},
"recipient": {
"id": "178414*****62102"
},
"timestamp": 169*****88826,
"message": {
"mid": "aWdfZAG1faXRlbTox********ODQxNDYwOTI4NzYyMTAyOjM0MDI4MjM2Njg0MTcxMDMwMTI0NDI3NjAyMzQ1NDAyNTExNTM5NDozMTIxODE4ODQ4NTAyNzEzNjY4MTMzMDA1Njk0NDk0MzEwNAZDZD",
"text": "Hello"
}
}
]
}
]
}
测试效果
个人账号没有申请到高级权限,评论私信不需要高级权限;私信回复需要,但是测试账号不需要;破冰跟私信自动回复差不多,调用不同的图谱API在服务器启动时执行即可设置上。一顿操作下来我个人对这个体验很差,先记这点,后面有空再写。