0

我正在为 Skype 频道开发一个机器人,它可以发送主动消息。

我遵循了示例项目https://github.com/Microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore/16.proactive-messages,这可以满足我的需要。

我将我的机器人托管在共享托管服务上,而不是 Azure。

我在 Azure 频道注册中注册了我的机器人,并在 Skype 上进行了测试。Bot 响应我,当我向主动端点发送请求时,我收到主动消息。一切安好。

然后我意识到,一段时间后,主动请求得到 500(内部服务器错误)。之后,我从 Skype 向 bot 输入了一些内容,然后再次发送主动请求,bot 发送了主动消息。

我调查了这个问题,发现了两件事。首先,在 IIS 中启用 AlwaysOn,但我在共享主机上,我不能这样做。其次,定期向 bot 发送一些请求,以保持 bot 的存活。

比我注意到的,我可以用 DirectLine 频道做到这一点。我设置了我的代码来开始对话,发送一些消息,并在我发送主动通知之前接收它。从 DirectLine 开始对话很容易,我发送了一条消息,并收到了回复。由于这是对机器人的请求,我认为这可以主动解决我的 500(内部服务器错误)响应状态。但它没有。

我只能在 Skype 中接收主动消息,前提是我在短时间内从 Skype 键入一些内容以进行 bot。否则,Skype 主动消息请求会收到 500 错误。

我不知道该怎么做。

4

1 回答 1

1

请注意,我也在与该用户重复 GitHub 问题

这听起来可能是一个TrustServiceUrl 问题(尽管有 500 vs 401 错误消息)。

您可以通过将 Skype 添加到受信任的 URL 列表来修复它:

var serviceUrl = <GetThisFrom Activity.ServiceUrl>;

MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);

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

给其他人的注意事项:

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

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

我已经为此提交了 PR,到目前为止已经更新了一些文档

于 2019-05-24T19:06:36.983 回答