欢迎来访~

从零开始踩坑INS私信&评论自动回复(1)

node XXY 2023-08-21 14:34:00 3061次浏览 本文字数:6.4k 阅读时长 ≈ 16分钟

背景&原理

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在服务器启动时执行即可设置上。一顿操作下来我个人对这个体验很差,先记这点,后面有空再写。

发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)条评论
  1. For latest information you have to go to see web and on internet I found this site as a best web site for latest updates.
  2. Hello, i think that i saw you visited my weblog so i came to “return the favor”.I'm attempting to find things to improve my web site!I suppose its ok to use some of your ideas!!
    gold ira2023-12-23 14:57 回复