1 facebook proactive unauthorized facebook-messenger botframework
我已经在C#中使用Microsoft框架v4 SDK编写了一个机器人。该机器人已部署在Azure中,并连接到网络聊天,直线和Facebook Messenger渠道。该机器人适合所有人。
用户可以订阅以主动接收更新。为此,我使用一个存储的ConversationReference,然后将其用于发送主动消息。再次,所有这一切都正常,除非机器人wepApp重新启动,这会导致:-
Exception caught : Microsoft.Bot.Schema.ErrorResponseException: Operation returned an invalid status code 'Unauthorized' for the facebook channel.
Run Code Online (Sandbox Code Playgroud)
如果我从facebook messenger向机器人发送了另一条消息,那么即使对于较旧的存储的ConversationReferences,主动消息也可以再次开始工作。
最初,我是按照示例使用MemoryStorage的,但是我将其更改为将Azure Blob存储用于sessionState和userState。这没有区别。好像它必须在内存中存储一个Facebook身份验证令牌,因此,如果应用程序重新启动,令牌将丢失,直到用户从Messenger发送了另一条消息。
有什么办法可以解决此问题,因为如果无法处理机器人webApp重新启动,它会使已订阅的主动更新毫无意义吗?
非常感谢
这听起来很像信任服务URL问题。
您可以通过将Facebook添加到受信任的URL列表中来解决此问题:
var serviceUrl = "https://facebook.botframework.com/";
var connector = new ConnectorClient(new Uri(serviceUrl), new MicrosoftAppCredentials("YourAPPID", "YourAppPassword"));
MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);
Run Code Online (Sandbox Code Playgroud)
如果有帮助的话,这是一个到图书馆的链接。否则,浏览我链接的问题应该会有所帮助。
此“信任服务URL问题”不仅适用于Facebook。尝试使用主动消息传递时,许多其他URL也会发生这种情况。只需替换serviceUrl为适合您的用例的内容即可。是的,如果您使用多个渠道,则可以MicrosoftAppCredentials.TrustServiceUrl()通过多次调用来添加多个URL 。
这是方法定义。注意:您也可以为此添加到期时间。
根据要求,我已为此提交了PR
| 归档时间: |
|
| 查看次数: |
268 次 |
| 最近记录: |