node.js - 机器人框架 - 无法与模拟器正常工作,但与任何已发布的 channel 均无法正常工作

标签 node.js botframework

我一直在修改 nodejs 机器人框架。我成功地创建了一个发送主动消息的机器人,但碰巧它只能与模拟器一起使用。

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

到目前为止一切顺利。

但是,在 https://dev.botframework.com 完成注册过程后并“成功”将其发布到 Skype channel 和 Telegram channel ,但没有任何反应。机器人不会回复,并且没有任何东西到达我服务器的端点。

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

Botframework Test window

Skype. Bot apparently Online and properly registred

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

Working with Emulator

我做了什么:

  • 确保我的 MS_APP_IDMS_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/

相关文章:

javascript - 通过node js上传到dropbox失败

javascript - 继承放置在另一个文件中的子类(CoffeeScript)

javascript - 如何使用 Node 在 javascript 中运行两个文件?

c# - 如何在 Bot Framework C# 中在运行时生成瀑布步骤?

javascript - 无法在本地运行新创建的机器人 - 读取机器人文件时出错

java - 将 React js 与现有 Java Web 应用程序一起使用

javascript - 如何在使用Nodejs调用回调函数之前等待N个查询完成

c# - 更新到 1.2.0.1 后 LuisDialog 不再工作

c# - 在 BotFramework 上启动从机器人到用户的消息

c# - 将聊天机器人连接到 cosmos db 后出现错误 500