使用漫游器框架将主动消息发送到松弛状态

时间:2019-08-26 19:43:48

标签: javascript node.js botframework restify

我有一个用例,我想向一个闲散的用户发送一条消息,该消息我使用bot框架偶尔知道一次通知的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)

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

1 个答案:

答案 0 :(得分:1)

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

  

但是,仅当自引导程序启动后用户与该程序进行对话时,该方法才有效。但是,重新启动后,直到用户发起对话后,该功能才起作用。

这几乎肯定是TrustServiceUrl Issue。有关其他上下文,请参见this answer

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