使用 express 创建信使机器人
使用 express 创建信使机器人
原文:https://medium.com/hackernoon/creating-a-messenger-bot-with-express-134e7ec8ea07
最初发表在 diff 博客上,现在我忘记了之前放在媒体上,但是我希望它仍然有用。
脸书最近宣布了为他们的信使平台创建机器人的方案。
每个月,全球超过 9 亿人通过 Messenger 与朋友、家人和超过 5000 万家企业交流。这是 iOS 上第二大最受欢迎的应用,也是 2015 年美国增长最快的应用。
有一个接收和发送消息的应用编程接口,这样您就可以通过编程的方式与用户和客户交流,有几个步骤可以让它工作,所以我们建议从一个简单的应用程序开始。你作为一个页面而不是个人与用户互动,所以在这个过程中你会创建一个脸书应用程序和页面。
有一个示例应用程序有两个端点,一个用于接收,另一个用于发送消息。在这个应用程序中,发送者将收到它发送的相同消息。我们对两者使用相同的 url,当收到一条消息时,请求是 GET,发送一条新消息时,它将使用 POST 请求。
概观
- 设置 Nodejs 应用程序。
- 脸书不喜欢自签名证书。使用 LetsEncrypt 中的一个。
- 按照 Facebook Messenger API 文档中提到的步骤创建所需的应用程序和页面。
- 生成页面访问令牌。
- 使用上一步生成的令牌,并将应用程序订阅到页面。
- 你准备好了,机器人应该用发送的确切字符串来回应。
- 其他步骤
设置 Nodejs 应用程序
最简单的方法是在数字海洋中创建一个液滴,在创建液滴时,您可以选择一个小实例,并单击应用程序列表上的 nodejs。您也可以通过点击(这里是)在 Heroku 上部署该应用程序,但是我还没有完全证明这一点,所以它可能需要额外的配置。
运行 nodejs 生产就绪应用程序对您来说应该是最简单的部分。克隆样本应用程序并使用 pm2 运行。
您可以在数字海洋指南中找到更多信息。
应用程序需要有两个端点,一个 get 和一个 post。
脸书将在安装过程中使用 Get 来验证您是否拥有此端点。
每次用户向您发送消息时,都会使用 Post,并附带消息的有效负载。
要发送消息,您需要向脸书发送一个包含内容的 Post 请求。
验证端点如下所示:
if (req.query['hub.verify_token'] === conf.VERIFY_TOKEN)
return res.send(req.query['hub.challenge']);
它确保脸书发送的令牌与您配置中的令牌相匹配,稍后您将对此进行设置。
从 LetsEncrypt 创建证书
https://letsencrypt.org/让我们为 ssl 创建一个证书。它是免费的、自动化的、开放的。这个证书对你的机器人来说已经足够好了。
要为此过程做准备,请为要使用的域或子域创建一个 A 记录。
克隆 LetsEncrypt repo
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
并生成证书
cd /opt/letsencrypt
./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d your.domain.com
它会要求您输入一个电子邮件地址,以获取有关您的域和证书的信息,并同意服务条款。
使用 Webroot 插件 Webroot 插件通过在/中放置一个特殊的文件来工作。您的文档根目录中众所周知的目录,可以通过 Let's Encrypt 服务打开(通过您的 web 服务器)进行验证。根据您的配置,您可能需要显式允许访问/。知名目录。
通过将它添加到服务器块来修改您的 nginx 配置
sudo vi /etc/nginx/sites-available/defaultlisten 443 ssl;server_name your.domain.com;ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
你可以在数字海洋指南中找到更详细的步骤。
遵循 Facebook Messenger API 文档中提到的步骤
完整的脸书指南可以在这里找到。
你需要有一个页面,你的用户将是一个页面,而不是一个人,所以创建一个新的页面。特别是对于您的测试尝试,最好使用不重要的内容,不要冒险使用重要的业务页面。在我的例子中,我创建了信使回声机器人
在 app configuration 上,您将生成一个令牌,将这个令牌添加到 conf.js 。
要生成令牌,请转到应用程序配置的产品设置,选择添加产品并找到 Messenger,它会让您选择您自己的页面并生成令牌。将此令牌作为配置中的值添加到PROFILE_TOKEN。
您可以通过应用程序设置或运行以下命令,使用此令牌将页面与应用程序相关联:
curl -ik -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=<PROFILE_TOKEN>"
创建一个随机、安全的字符串,并将其添加到VERIFY_TOKEN。在应用程序配置中,添加 webhook 时会提示您输入此信息。你的节点应用程序现在应该可以工作了,因为脸书只会让你添加 webhook,如果这样的话
当你的应用处于开发模式时,插件和 API 功能只对应用的管理员、开发者和测试者有效。在你的应用程序被批准并公开后,它将为普通大众服务。
记得在编辑 conf.js 后重启你的应用,最快的方法是pm2 restart all,但是如果有更多的应用在那个服务器上运行,要小心。
尝试一下
转到您创建的页面并选择消息选项,页面将回复您发送的相同文本。
如果有错误,调试应该很容易,可能出错的地方很少。
跟踪应用程序的日志,看看向页面发送消息时会发生什么。
如果日志中什么都没有,可能是因为:用户没有关联到应用程序,因此没有触发挂钩,或者挂钩没有正确配置。
另一个常见错误是 OAuthException,这意味着PROFILE_TOKEN不正确。
如果你遇到其他你不能修复的错误,试着发表评论,开一张票或者联系我,我会试着看看。
其他步骤
要为用户准备好你的应用程序,你必须提供隐私政策、应用程序图标和关于你的机器人如何工作的视频。对于测试应用程序来说,工作量相当大,他们似乎很认真地对待这一点,并审查每一个提交的内容,所以请确保在申请前完成所有步骤。
如果这就是你的应用的全部功能,你的应用可能会被拒绝,所以试着添加一些聪明的笑话或者更多的信息。
您可以在脸书应用程序设置的应用程序查看部分找到详细说明。
希望这有助于你开始,让我们知道你有什么很酷的机器人!