【问题标题】:sending pro active messages to slack using bot framework使用 bot 框架向 slack 发送主动消息
【发布时间】:2019-08-28 01:47:57
【问题描述】:

我有一个用例,我想使用机器人框架向 slack 用户发送一条消息,我不时知道通知的 ID。

现在我有以下内容:

server.get("/api/notify", async (req, res) => {
  await adapter.createConversation(conversationReference, async turnContext => {
    await turnContext.sendActivity("proactive hello");
  });

  res.setHeader("Content-Type", "text/html");
  res.writeHead(200);
  res.write(
    "<html><body><h1>Proactive messages have been sent.</h1></body></html>"
  );
  res.end();
});

对话参考如下:

const conversationReference = {
  user: { id: "ID3:ID2", name: "user1" },
  bot: { id: "ID1:ID2", name: "bot1" },
  conversation: {
    isGroup: false,
    id: "ID1:ID2:ID3",
    conversationType: "slack",
    tenantId: "",
    name: ""
  },
  channelId: "slack",
  serviceUrl: "https://slack.botframework.com/"
};

但它仅在机器人启动后用户与机器人交谈时才有效。但是在重新启动后,这将不再起作用,直到用户发起对话。

当我在机器人重启后尝试发送主动消息并且用户之后没有开始对话时,我得到以下异常:

UnhandledPromiseRejectionWarning: Error
  at new RestError (/usr/app/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1397:28)
  at /usr/app/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1849:37
  at process._tickCallback (internal/process/next_tick.js:68:7)

我的问题是:如何保持这种状态,以便在重新启动后仍然可以发送主动消息?

【问题讨论】:

  • 为什么不起作用?几个月前,即使没有之前的对话,我也能够从机器人向 Slack 用户发送消息。我最近没有再次对其进行测试,但这应该可以工作:您可以使用 ID 创建对话,这些 ID 是您可以从 Slack API 查询的 Slack 值(实际上它由用户 ID、团队 ID 组成.. .)
  • 它会在 botbuilder 正在使用的 sdk 上引发异常。仅当用户在启动后尚未对话时才会抛出此问题
  • 什么样的异常?
  • 我更新了我原来的答案,但有例外

标签: javascript node.js botframework restify


【解决方案1】:

啊哈!这部分问题是关键:

但它仅在机器人启动后用户与机器人交谈时才有效。但是在重新启动后,这将不再起作用,直到用户发起对话。

这几乎肯定是TrustServiceUrl Issue。请参阅this answer 了解更多上下文。

基本上,在重新启动时,机器人会忘记与该用户交谈是可以的。您需要“信任”用户/活动的 ServiceUrl,以确保机器人知道可以向他们发送消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-22
    • 2022-12-07
    • 2021-01-07
    • 2019-10-30
    • 2019-07-07
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多