已订阅Webhook Feed事件,如何触发聊天机器人并获取用户App Scoped FB ID?
实现用户评论/操作时触发聊天机器人并获取App Scoped FB ID的方案
没问题,这完全可以实现,我来一步步给你讲清楚怎么做:
1. 从Webhook的Feed事件中提取App Scoped FB ID
你已经订阅了feed事件,当用户对页面进行评论(或其他feed相关操作)时,Facebook会向你的Webhook发送包含用户信息的Payload。其中**entry[0].changes[0].value.from.id就是你需要的App Scoped FB ID**,这个ID和你的应用绑定,可直接用于向用户发送Messenger消息。
举个Node.js的解析示例:
app.post('/webhook', (req, res) => { const body = req.body; // 确认是页面相关的事件 if (body.object === 'page') { body.entry.forEach(entry => { entry.changes.forEach(change => { // 筛选出评论类型的feed事件 if (change.field === 'feed' && change.value.item === 'comment') { const userAppScopedId = change.value.from.id; const userName = change.value.from.name; console.log(`触发评论的用户ID: ${userAppScopedId}`); // 这里调用聊天机器人的触发逻辑 triggerChatBot(userAppScopedId); } }); }); res.status(200).send('EVENT_RECEIVED'); } else { res.sendStatus(404); } });
2. 触发聊天机器人的两种方式
方式一:通过Messenger Send API主动唤起聊天窗口
当获取到用户的App Scoped ID后,直接调用Messenger Send API发送一条消息,用户的Messenger客户端会自动弹出聊天窗口,相当于打开了你的聊天机器人。
示例代码:
const axios = require('axios'); function triggerChatBot(userId) { const messagePayload = { recipient: { id: userId }, message: { text: '嗨!感谢你的评论,有什么我可以帮你的吗?😊' } }; // 调用Send API发送消息 axios.post('https://graph.facebook.com/v18.0/me/messages', messagePayload, { params: { access_token: '你的页面访问令牌' } }) .then(() => console.log('聊天机器人已触发,消息发送成功')) .catch(err => console.error('触发失败:', err.response.data)); }
方式二:网页端直接唤起内嵌聊天插件
如果你的业务场景是在网页端,也可以在用户完成评论操作后,通过Facebook的Messenger内嵌插件直接在页面上唤起聊天窗口。插件会自动识别当前登录的Facebook用户(对应你的App Scoped ID),无需手动传递ID。
3. 关键注意事项
- 确保你的Facebook App已经申请并获得
pages_messaging权限,这是调用Send API发送消息的必备权限。 - 一定要验证Webhook请求的合法性:在Webhook配置时设置验证令牌,接收请求时先验证令牌,避免恶意请求。
- App Scoped ID是应用专属的,同一个用户在不同Facebook App下的ID不同,所以这个ID只能用于你的应用向该用户发送消息。
内容的提问来源于stack exchange,提问作者Lucas Ansei
相关产品推荐
相关产品推荐

