如何解决机器人重新启动后,主动消息在MS Teams中不起作用
我有一个主动消息传递端点,当用户积极参与对话时,该端点可以正常工作。例如,在一个用例中,用户要求检索发票数据,这是异步发生的,并通过主动消息发送回去。这很好。但是,如果尝试在几周后继续进行对话,则continueConversation
操作将失败。如果我进入团队并与机器人发起新的对话,那么重新发送主动消息(不进行任何更改)将再次起作用。
在我的一个使用案例中,该机器人需要在未来1周内与用户进行跟进。因此,我需要弄清楚如何向团队用户发送主动消息,即使他们最近没有与机器人聊天。我不确定为什么continueConversation
不能正常工作,因为对话ID不变(而且几个月内也没有变化,也许从未改变过)。
这是我用来发送主动消息的功能。
server.post('/api/notify',async (req,res) => {
//console.log(req.body);
try {
const conversationReference = req.body.conversationReference;
await adapter.continueConversation(conversationReference,async turnContext => {
// If you encounter permission-related errors when sending this message,see
// https://aka.ms/BotTrustServiceUrl
await turnContext.sendActivity(req.body.message);
});
res.setHeader('Content-Type','text/html');
res.writeHead(200);
res.write('<html><body><h1>Proactive messages have been sent.</h1></body></html>');
res.end();
} catch (error) {
console.log('Bad Request. Please ensure your message contains the conversation reference and message text.');
console.log(error);
appInsightsClient.trackTrace({
message: `${error.name} - ${path.basename(__filename)}`,severity: 4,properties: {'error':error.message,'callStack':error.stack,'botName': process.env.botName}
});
res.setHeader('Content-Type','text/html');
res.writeHead(400);
res.write('<html><body><p>Bad Request. Please ensure your message contains the conversation reference and message text.</p></body></html>');
res.end();
}
});
解决方法
正如link in my own code所说,
如果您的漫游器已重新启动,则等待主动消息的用户将无法接收它,除非他们在重新启动后再次向该漫游器发送了消息。
这就是问题所在。但是该页面上的说明并未提供完整的细节。您必须通过const { MicrosoftAppCredentials } = require('botframework-connector')
添加该类,并将serviceUrl设置为通过(已在conversationReference.serviceUrl
上可用)。
因此,通过这些更改,我在发送主动消息之前添加了MicrosoftAppCredentials.trustServiceUrl(conversationReference.serviceUrl);
,即使重新启动了bot,它也可以正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。