【问题标题】:Microsoft Bot Framework v4: Facebook messenger proactive message unauthorized after bot restartMicrosoft Bot Framework v4:机器人重启后 Facebook Messenger 主动消息未经授权
【发布时间】:2019-07-12 07:16:05
【问题描述】:

我使用 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 重启,它会使订阅的主动更新变得毫无意义?

非常感谢

【问题讨论】:

    标签: facebook botframework facebook-messenger unauthorized proactive


    【解决方案1】:

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

    【讨论】:

    • 就是这样。问题解决了。太感谢了!它可能应该被添加到主动机器人示例中或在其中提及。
    • @hitcai 不客气!你是对的,样本应该提到这一点,所以我已经为它提交了一个 PR(见上面的更新)。
    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2016-08-30
    • 2017-06-04
    • 1970-01-01
    • 2019-04-04
    • 2016-09-05
    • 1970-01-01
    相关资源
    最近更新 更多