1

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

用户可以订阅以主动接收更新。为此,我使用存储的 ConversationReference 来发送主动消息。同样,这一切都很好,除非重新启动 bot wepApp导致:-

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

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

最初我根据示例使用 MemoryStorage,但我将其更改为将 Azure Blob 存储用于会话状态和用户状态。这没什么区别。就好像它必须在内存中存储一​​个 facebook auth 令牌,所以如果应用程序重新启动,令牌就会丢失,直到用户从 messenger 发送另一条消息。

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

非常感谢

4

1 回答 1

5

这听起来很像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);

这是图书馆的链接,如果有帮助的话。否则,浏览我链接的问题应该会有所帮助。

给其他人的注意事项:

此“信任服务 URL 问题”不仅适用于 Facebook。在尝试使用主动消息传递时,许多其他 URL 都会发生这种情况。只需替换serviceUrl适合您的用例的任何内容。是的,如果您使用多个渠道,您可以在使用时MicrosoftAppCredentials.TrustServiceUrl()通过多次调用来添加多个 URL。

这是方法定义。注意:您也可以为此添加过期时间。

根据要求,我为此提交了 PR

于 2019-02-19T00:32:46.690 回答