1

我正在使用 NodeJS 和Bottender来运行我的 facebook messenger webhook。

所以我想要一个get started button和一个persistent menu。我在 repo 上提供的示例上检查并设计了我的配置,比如这个,但我还不能让它出现在 messenger 上。

这是我的 config.js

require('dotenv').config();

const {
  FB_ACCESS_TOKEN,
  FB_VERIFY_TOKEN,
  APP_ID,
  APP_SECRET,
} = process.env;

const { bots } = require('./global-session');

const profile = {
  get_started: {
    payload: '/start',
  },
  persistent_menu: [
    {
      locale: 'default',
      composer_input_disabled: false,
      call_to_actions: [
        {
          type: 'postback',
          title: 'Menu',
          payload: '/menu',
        },
      ],
    },
  ],
};
/* istanbul ignore next */
module.exports = {
  messenger: {
    bot: {
      accessToken: FB_ACCESS_TOKEN,
      appId: APP_ID,
      appSecret: APP_SECRET,
      mapPageToAccessToken: bots.getTokenByPageById,
      profile,
    },
    server: {
      verifyToken: FB_VERIFY_TOKEN,
      path: '/messenger',
      profile,
    },
  },
};

这就是我如何使用它

const { MessengerBot } = require('bottender');
const express = require('express');
const bodyParser = require('body-parser');
const { registerRoutes } = require('bottender/express');
const handler = require('./handlers');
const logger = require('./utils/logger');

const { APP_PORT, NODE_ENV } = process.env;
const server = express();

/* istanbul ignore next */
const verify = (req, res, buf) => {
  req.rawBody = buf.toString();
};

server.use(bodyParser.json({ verify }));
server.use(require('morgan')('short', { stream: logger.logStream }));

const { messenger } = require('./config');

const bots = {
  messenger: new MessengerBot(messenger.bot).onEvent(handler.messenger.execute),
  // Define other platform bots here!
};

const initialize = async () => {
  try {
    registerRoutes(server, bots.messenger, messenger.server);
    // Start server
    server.listen(APP_PORT, () => logger.info(`ENV[${NODE_ENV}] - server is listening on port ${APP_PORT}...`));
  } catch (e) {
    logger.error('unable to start server!');
    logger.error(e);
    throw Error();
  }
};

/* istanbul ignore next */
if (process.env.NODE_ENV !== 'test') {
  initialize();
}

module.exports = initialize;

我的 facebook 应用程序的背景 - 它已经向公众发布获得批准(至少对于pages_messaging

有什么我错过的事情吗?任何帮助,将不胜感激!

4

1 回答 1

1

我们将信使配置文件控制留给开发人员,因为我们无法假设开发人员何时想要设置、更新或删除机器人的信使配置文件。

例如,您可以有这样的脚本:

const { MessengerClient } = require('messaging-api-messenger'); 

const config = require('./bottender.config');

const client = MessengerClient.connect();

const tokens = [ /* */ ]; // get tokens from somewhere

for (let i = 0; i < tokens.length; i++) {
  const token = tokens[i];
  client.setMessengerProfile(config.messenger.profile, {
    access_token: token, // important! pass token to client api
  });
}

或者,您可以setMessengerProfile在将令牌注册到数据库时调用:

async function registerPage(page, token) {
  // ....put page and token to database
  await client.setMessengerProfile(config.messenger.profile, {
    access_token: token, // important! pass token to client api
  });
}
于 2018-02-26T03:09:19.780 回答