Microsoft Bot Framework v4:Facebook Messenger 主动消息在机器人重启后未经授权

Microsoft Bot Framework v4: Facebook messenger proactive message unauthorized after bot restart

我在 C# 中使用 Microsoft Framework v4 SDK 编写了一个机器人。该机器人部署在 Azure 中并连接到网络聊天、直线和 Facebook Messenger 渠道。该机器人适用于所有人。

用户可以主动订阅接收更新。为此,我使用了一个存储的 ConversationReference,然后用于发送主动消息。同样,这一切都工作正常 除了机器人 wepApp 重新启动 会导致:-

Exception caught : Microsoft.Bot.Schema.ErrorResponseException: Operation returned an invalid status code 'Unauthorized' for the facebook channel.

如果我从 Facebook Messenger 向机器人发送另一条消息,那么即使对于较早存储的 ConversationReferences,主动消息也会再次开始工作。

最初我根据示例使用 MemoryStorage,但我将其更改为将 Azure Blob 存储用于 conversationState 和 userState。这没有区别。 就好像它必须在内存中存储一​​个 facebook 身份验证令牌,因此如果应用程序重新启动,令牌将丢失,直到用户从 Messenger 发送另一条消息。

有什么方法可以解决这个问题,因为如果它不能处理机器人 webApp 重启,它会使订阅的主动更新变得毫无意义?

非常感谢

这听起来很像 Trust Service URL Issue

您可以通过将 facebook 添加到受信任的 URL 列表来修复它:

var serviceUrl = "https://facebook.botframework.com/";

var connector = new ConnectorClient(new Uri(serviceUrl), new MicrosoftAppCredentials("YourAPPID", "YourAppPassword"));

MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);

Here's a link 到图书馆,如果有帮助的话。否则,浏览我链接的问题应该会有所帮助。

其他人注意事项:

此 "Trust Service URL Issue" 不仅仅适用于 Facebook。当尝试使用主动消息传递时,许多其他 URL 都会发生这种情况。只需将 serviceUrl 替换为适合您的用例的内容即可。是的,如果您使用多个渠道,您可以在使用 MicrosoftAppCredentials.TrustServiceUrl() 时通过多次调用来添加多个 URL。

这是the method definition。注意:您也可以为此添加过期时间。

根据要求,I've submitted a PR for this