我一直在修改 nodejs
机器人框架。我成功地创建了一个发送主动消息的机器人,但碰巧它只能与模拟器
一起使用。
它可以在我的本地服务器上运行,也可以在我的远程服务器上运行 https://chatobot.ngrok.io/api/messages
到目前为止一切顺利。
但是,在 https://dev.botframework.com 完成注册过程后并“成功”将其发布到 Skype channel 和 Telegram channel ,但没有任何反应。机器人不会回复,并且没有任何东西到达我服务器的端点。
我使用了您在 botframework 网站上找到的测试
功能。它发送了我的消息,但似乎永远不会到达我的服务器。另外,据我所知,它不会给我任何错误。
但是,当我使用模拟器
连接到远程服务器时,一切正常......!
我做了什么:
- 确保我的
MS_APP_ID
和MS_APP_PWD
已正确设置为环境变量。 - 首先使用
nginx
(带有自签名证书)通过HTTPS
为我的api
提供服务,然后使用ngrok
code> (只是为了确保这不是我自己的证书的问题)。 - 尝试添加更多 channel (Slack 等)以确保这不是 Skype 或网络聊天特有的问题。
- 在 SO 上寻找类似问题。有很多,但通常这些人能够通过更新他们的 APP_ID 和 APP_PWD (我也尝试过)或者甚至以错误的形式获得某种反馈来解决他们的问题......不幸的是这不是我的案例:|
PS:别介意我的 MS Paint 技能。
PS2:这是我的代码 https://github.com/assimoes/chatobot
最佳答案
因此,我可以确认问题的根源显然是在我的远程服务器上。发生的情况是,如果我将服务器作为 Linux 服务运行,由于某种原因,端点永远不会被命中...但是,如果我在控制台运行 node index.js
一切正常吗?
我将尝试更多地研究为什么会发生这种情况,但任何建议将不胜感激!
更新
所以我终于明白了这一点。因此,我的 Nodejs api 具有以下 systemd
配置:
#/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
的环境变量。要解决这个问题,我只需将 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
这解决了一切。
关于node.js - 机器人框架 - 无法与模拟器正常工作,但与任何已发布的 channel 均无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46855955/