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。注意:您也可以为此添加过期时间。
我在 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。注意:您也可以为此添加过期时间。