如何使用 bot 框架在多个 facebook 页面上使用同一个 bot
How can I use the same bot on multiple facebook pages using bot framework
我有几个 Facebook 页面,我想 运行 每个页面上都有相同的机器人。我正在使用 bot 框架,现在所有内容都可以完美地用于一页。如何关联多个页面?
每个页面都需要自己的 facebook 应用程序。创建应用程序后,您可以 link 将它们发送给同一个机器人,但它们将使用不同的页面令牌,以防您验证代码中的签名并且您可能想使用不同的 url对于他们每个人。
当您调用 Facebook 发送 API 时,您通过 access_token
参数传递页面访问令牌。您可以通过修改此访问令牌来指定将您的消息发送到哪个页面。要知道哪个页面发起了消息,您可以访问消息条目的 id
字段 post.
app.post('/webhook', (req, res) => {
const data = req.body
// Make sure this is a page subscription
if (data.object === 'page') {
// Iterate over each entry
data.entry.forEach((pageEntry) => {
// get the pageId
const pageId = pageEntry.id
...
然后您需要维护一个对象映射页面 ID 到与每个页面 ID 关联的访问令牌:
const accessTokens = {
myPageId1: 'myPageAccessToken1',
myPageId2: 'myPageAccessToken2',
}
然后在发送response的时候,指定对应的页面即可access_token
const callSendAPI = (pageId, messageData) =>
rp({
uri: 'https://graph.facebook.com/v2.8/me/messages',
qs: { access_token: accessTokens[pageId] },
method: 'POST',
body: messageData,
json: true,
})
我的处理方式是在不同的服务器上部署相同的 Bot 后端。这样,我将拥有相同的后端源但不同的 webhook URL。这使得每个机器人虽然功能相似,但可以隔离和单独维护。这是构建 Bot 时极其重要的设计考虑因素,因为它可能会进行大量对话。
要回答您的问题,是的,可以通过为每个请求传递页面令牌和验证令牌并在用户与其他页面交谈时更改它 - 但我不建议这样做。
您可以为同一个应用订阅多个页面。订阅 Facebook 应用程序后,与该应用程序相关联的信使将与该页面相关联。
https://developers.facebook.com/docs/graph-api/reference/page/subscribed_apps/这个api用于将facebook应用程序添加到页面
对不起,如果我的回答晚了
您可以通过一个机器人后端很好地处理所有页面流量
- 创建 Facebook 应用程序和 select 产品作为 Messenger
- 添加指向您的机器人的网络书配置
- Select所有你要关联的页面一一对应
并将页面访问令牌放在手边。
- 去你的 fb 页面搜索 page id 并把它放在手边
- 以常量或 dB 的形式维护页面访问令牌对我的页面
- 当您在 webhook 上收到回调时,您会收到一个页面条目和 Id== 页面 ID
- 根据页面我有你的业务逻辑
- 使用您在页面 ID 中存储的页面访问令牌调用发送 api
希望对您有所帮助
我有几个 Facebook 页面,我想 运行 每个页面上都有相同的机器人。我正在使用 bot 框架,现在所有内容都可以完美地用于一页。如何关联多个页面?
每个页面都需要自己的 facebook 应用程序。创建应用程序后,您可以 link 将它们发送给同一个机器人,但它们将使用不同的页面令牌,以防您验证代码中的签名并且您可能想使用不同的 url对于他们每个人。
当您调用 Facebook 发送 API 时,您通过 access_token
参数传递页面访问令牌。您可以通过修改此访问令牌来指定将您的消息发送到哪个页面。要知道哪个页面发起了消息,您可以访问消息条目的 id
字段 post.
app.post('/webhook', (req, res) => {
const data = req.body
// Make sure this is a page subscription
if (data.object === 'page') {
// Iterate over each entry
data.entry.forEach((pageEntry) => {
// get the pageId
const pageId = pageEntry.id
...
然后您需要维护一个对象映射页面 ID 到与每个页面 ID 关联的访问令牌:
const accessTokens = {
myPageId1: 'myPageAccessToken1',
myPageId2: 'myPageAccessToken2',
}
然后在发送response的时候,指定对应的页面即可access_token
const callSendAPI = (pageId, messageData) =>
rp({
uri: 'https://graph.facebook.com/v2.8/me/messages',
qs: { access_token: accessTokens[pageId] },
method: 'POST',
body: messageData,
json: true,
})
我的处理方式是在不同的服务器上部署相同的 Bot 后端。这样,我将拥有相同的后端源但不同的 webhook URL。这使得每个机器人虽然功能相似,但可以隔离和单独维护。这是构建 Bot 时极其重要的设计考虑因素,因为它可能会进行大量对话。
要回答您的问题,是的,可以通过为每个请求传递页面令牌和验证令牌并在用户与其他页面交谈时更改它 - 但我不建议这样做。
您可以为同一个应用订阅多个页面。订阅 Facebook 应用程序后,与该应用程序相关联的信使将与该页面相关联。
https://developers.facebook.com/docs/graph-api/reference/page/subscribed_apps/这个api用于将facebook应用程序添加到页面
对不起,如果我的回答晚了
您可以通过一个机器人后端很好地处理所有页面流量
- 创建 Facebook 应用程序和 select 产品作为 Messenger
- 添加指向您的机器人的网络书配置
- Select所有你要关联的页面一一对应 并将页面访问令牌放在手边。
- 去你的 fb 页面搜索 page id 并把它放在手边
- 以常量或 dB 的形式维护页面访问令牌对我的页面
- 当您在 webhook 上收到回调时,您会收到一个页面条目和 Id== 页面 ID
- 根据页面我有你的业务逻辑
- 使用您在页面 ID 中存储的页面访问令牌调用发送 api
希望对您有所帮助