【问题标题】:Botframework - Bot working properly with Emulator but nothing with any published channelBot Framework - 不能与模拟器一起正常工作,但任何已发布的频道都不能正常工作
【发布时间】:2017-10-20 19:20:30
【问题描述】:

我一直在修改nodejs 机器人框架。我成功地创建了一个发送主动消息的机器人,但碰巧它只适用于emulator

它可以在我的本地服务器上运行,也可以在https://chatobot.ngrok.io/api/messages 的远程服务器上运行

到目前为止一切顺利。

但是,在https://dev.botframework.com 完成注册过程并“成功”发布到 Skype 频道和电报频道后,什么也没有发生。机器人不会回复,我的服务器端点也没有任何反应。

我使用了您在 botframework 网站上找到的 Test 功能。它发送的是我的消息,但似乎永远无法到达我的服务器。另外,据我所知,它没有给我任何错误。

但是,当我使用 Emulator 连接到远程服务器时,一切正常...!

我做了什么:

  • 确保我的MS_APP_IDMS_APP_PWD 已正确设置为环境变量。
  • 首先使用nginx(带有自签名证书)为我的apiHTTPS 提供服务,然后使用ngrok(只是为了确保我自己的证书没有问题)。
  • 尝试添加更多频道(Slack 等),以确保这不是 Skype 或网络聊天特有的问题。
  • 在 SO 上寻找类似的问题。有很多,但通常这些人能够通过更新他们的 APP_ID 和 APP_PWD(我也尝试过)甚至以错误的形式获得某种反馈来解决他们的问题......不幸的是,这不是我的案例:|

PS:不要介意我的 MS Paint 技能。

PS2:这是我的代码https://github.com/assimoes/chatobot

【问题讨论】:

  • 您的机器人托管在哪里?如果不在 Azure 上,您的远程服务器是否有有效证书?
  • @JasonSowers,感谢您的提问。我的服务器托管在Linode,但出于这个原因,我用 ngrok 打开了一个 http 隧道。所以我使用 ngrok 的https 隧道为我的消息传递端点提供服务。

标签: node.js botframework


【解决方案1】:

所以,我可以确认问题的根源显然是在我的远程服务器上。会发生什么情况,如果我将服务器作为 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 IDAPP 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

这解决了一切。

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2020-09-01
    • 1970-01-01
    • 2018-11-10
    • 2014-07-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多