Botframework – Bot与Emulator正常工作,但没有任何发布的频道
我一直在用nodejs
bot框架进行修改。 我成功地创build了一个发送主动消息的机器人,但它只是在emulator
工作。
它可以在我的本地服务器以及我的远程服务器上运行,位于https://chatobot.ngrok.io/api/messages
到现在为止还挺好。
但是,在完成https://dev.botframework.com的注册过程并在Skype频道和电报频道上发布后,什么都不会发生。 机器人不会回复,也不会触发我的服务器端点。
我使用了botframework网站上的“ Test
function。 它发送我的消息,但它似乎永远不会到达我的服务器。 另外,据我所知,这并没有给我任何错误。
但是,当我连接到我的远程服务器使用Emulator
一切正常…!
我做了什么:
- 确保我的
MS_APP_ID
和MS_APP_PWD
正确设置为环境variables。 - 通过使用
nginx
(使用自签名证书)和后来的ngrok
(只是为了确保它不是我自己的证书的问题)通过HTTPS
服务来启动我的api
。 - 试图添加更多的渠道(松弛和不是),以确保它不是特定于Skype或networking聊天的问题。
- 在SO上查找类似的问题。 有很多,但通常这些人能够通过更新APP_ID和APP_PWD(我也尝试过)来解决他们的问题,或者甚至以错误的forms得到某种反馈……不幸的是,这不是我的情况:|
PS:不介意我的MS Paint技能。
PS2:这是我的代码https://github.com/assimoes/chatobot
所以,我可以确认问题的根源显然是在我的远程服务器。 发生什么事是,如果我运行我的服务器作为一个Linux服务,出于某种原因terminal不会被击中…但是,如果我在控制台上运行node index.js
一切正常?
我会尝试研究更多为什么发生这种情况,但任何build议将不胜感激!
UPDATE
所以我终于明白了这一点。 所以发生了什么事情,我有我的nodejs API的以下systemd
configuration:
#/etc/systemd/system/bot.service [Unit] Description=Node.js Chatobot server [Service] ExecStart=/usr/local/bin/node /www/chatobot/index.js Restart=always RestartSec=10 StandardOutput=syslog StandardError=syslog SyslogIdentifier=nodejs-chatobot User=chb Environment=NODE_ENV=development PORT=8009 [Install] WantedBy=multi-user.target
这意味着当我启动服务时,具有我的APP ID
和APP PWD
的环境variables对于运行的进程是不可访问的。 为了解决这个问题,我只需要将systemd
脚本更改为:
#/etc/systemd/system/bot.service [Unit] Description=Node.js Chatobot server [Service] Environment=MS_APP_ID=<MY APP ID> Environment=MS_APP_PWD=<MY APP PWD> ExecStart=/usr/local/bin/node /www/chatobot/index.js Restart=always RestartSec=10 StandardOutput=syslog StandardError=syslog SyslogIdentifier=nodejs-chatobot User=chb Environment=NODE_ENV=development PORT=8009 [Install] WantedBy=multi-user.target
这解决了一切。