Microsoft Bot Framework v4:Bot重新启动后,未经授权的Facebook Messenger主动消息

时间:2019-02-18 20:51:17

标签: facebook botframework facebook-messenger unauthorized proactive

我已经使用C#中的Microsoft框架v4 SDK编写了一个机器人。该机器人已部署在Azure中,并已连接到Web聊天,直线和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,但是我将其更改为对AzureState和userState使用Azure Blob存储。这没有区别。 好像它必须在内存中存储一​​个facebook身份验证令牌,因此,如果应用程序重新启动,令牌将丢失,直到用户从Messenger发送另一条消息为止。

有什么办法可以解决此问题,因为如果无法处理机器人webApp重新启动,订阅更新将毫无意义吗?

非常感谢

1 个答案:

答案 0 :(得分:4)

这听起来很像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,如果有帮助的话。否则,浏览我链接的问题应该会有所帮助。

其他注意事项:

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

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

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