node.js - 为什么 Azure Bot Service Slack 连接器不转发事件和交互式消息?

标签 node.js azure botframework slack

更新:2020 年 6 月 30 日

经过更多测试,我获得了一些详细信息,可以帮助其他人识别我的问题。

问题似乎是 Slack 正在将数据发送到 Azure Bot 服务,但该数据没有转发到我的代码。我已经能够毫无问题地使用机器人模拟器,并且 Azure Web 聊天工作正常。

我知道 OAuth 重定向 URL 的 Slack 配置是正确的(我能够将我的机器人添加到 Slack),并且事件的请求 URL 是正确的(他们发送了“挑战”并且已验证)。我已订阅 Microsoft 文档中的确切范围和事件,并且已验证交互性和事件选项已启用。

当用户在我的机器人的 Slack channel 中键入文本时,我的应用程序会收到“消息”事件,并且我的代码可以发送响应,因此看起来 Microsoft 可以针对普通消息进行端到端通信。当用户首次加入我的机器人(如 ConversationUpdate)或单击对话框中的按钮时,我不会收到任何数据。我可以看到 Slack 在按下按钮时发送数据,但它永远不会到达。

作为测试,我从 Azure 机器人设置中复制了消息传递端点,并将其粘贴到 Slack 的交互“请求 URL”中,当我单击 Slack 中的按钮时,我可以看到 Slack 发送的数据(不幸的是,其格式为我的代码无法处理)。

原帖

我有一个用 nodejs 编写的 Bot Framework 应用程序 (v4)。它运行良好,我有一个 ActivityHandler 可以响应人们被添加到对话中以及何时发送消息。我能够获得主动的消息传递功能,一切都很棒,直到我尝试让交互性发挥作用。

我开始使用 Microsoft 文档中的一些示例按钮代码:

let reply = MessageFactory.suggestedActions(['Red', 'Yellow', 'Blue'], 'What is the best color?');
await turnContext.sendActivity(reply);

这在模拟器中工作正常,但在 Slack 中它呈现为项目符号列表。看起来这就是“建议行动”的方式are handled in Slack .

我更改了代码以使用“英雄卡”:

let card = CardFactory.heroCard(
    'What is the best color?',
    undefined,
    CardFactory.actions([
        {
            type: 'imBack',
            title: 'Color Red',
            value: 'Red Value'
        }
    ])
);
let reply = MessageFactory.attachment(card);
await turnContext.sendActivity(reply);

这在模拟器中工作正常,除了我的应用程序认为用户输入“红色值”并且按钮保留在屏幕上并且仍然可单击。我也许可以解决这个问题,但该按钮在 Slack 中根本不起作用。它呈现得很好,但我在我的应用程序中没有收到通知。

单击按钮会显示 HTTP 请求:

https://{MY_SLACK}.slack.com/api/chat.attachmentAction?_x_id=f8d003c3-1592436018.632&_x_csid=NcWi3y50lFU&slack_route={OTHER_SLACK_STUFF}

我可以看到该请求发布了各种数据,包括:

payload: {"actions":[{"id":"1","name":"imBack","text":"Color Red","type":"button","value":"Red Value","style":"default"}],"attachment_id":"2","callback_id":"{MAGIC_NUMBER}:{TEAM_ID}","channel_id":"{CHANNEL_ID}","message_ts":"1592435983.056000","prompt_app_install":false,"team_id":"{TEAM_ID}"}

我不确定如何在 Azure 门户中查看任何有用的内容 - 我的机器人的分析选项似乎不起作用,并且事件选项仅显示“编写机器人服务”。我没有看到任何消息从 Slack 发送到 Azure 的迹象。

我正在本地开发并配置了 ngrok,以便我在 Azure 中的消息传递端点可以设置为 https://69fe1382ce17.ngrok.io/api/messages在 Slack 方面,我已将交互请求 URL 配置为 https://slack.botframework.com/api/Actions事件订阅请求 URL 为 https://slack.botframework.com/api/Events/{MY_BOT_NAME}

我想要的是一组具有不同选项的按钮,当用户单击一个按钮时,我的机器人会获得某种“值”而不是消息文本。我还希望该按钮消失,以便用户无法发送重复的命令。如果英雄卡折叠起来只显示提示就好了。

是否有适用于 Slack 和其他 channel 的互动选项?

谢谢!

最佳答案

我知道在没有额外细节的情况下链接到另一个网站是不受欢迎的,但我没有足够的专业知识来回答您的问题。我怀疑这里的链接可能会让您朝正确的方向发展: Choice Prompts are not translated over to Slack format #3974

祝你好运!

关于node.js - 为什么 Azure Bot Service Slack 连接器不转发事件和交互式消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62440845/

相关文章:

javascript - Node.js 中的 <!-- 运算符是什么?

javascript - 关于范围、node.js 和express 的问题

javascript - 无法查询 Puppeteer 上的选择器(TypeError : selector.startsWith 不是函数)

azure - 无法在同一资源组中创建 Linux 功能应用程序(消耗计划)和 Linux 应用程序服务计划

sql-server - 在 SQL Azure 上的 App_Start 上运行实体代码优先迁移

node.js - pm2进程停止运行

azure - 从 Azure Blob 存储到计算目标的数据传输速度缓慢

node.js - Microsoft bot 旧版本警告消息即使在更新后仍然存在

node.js - 如何禁用默认 BotBuilder 日志

c# - 使用 Microsoft Bot Framework 时如何使用 CSS 设置聊天窗口的样式