我正在为Skype频道开发一个机器人,该机器人可以发送主动消息。
我遵循了示例项目https://github.com/Microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore/16.proactive-messages,这可以满足我的需要。
我将机器人托管在共享托管服务上,而不是Azure。
我在Azure频道注册中注册了我的机器人,并在Skype上进行了测试。 Bot响应我,当我向主动端点发送请求时,我得到主动消息。一切都很好。
然后我意识到,一段时间后,主动请求将获得500(内部服务器错误)。在那之后,我从skype键入了一些东西给机器人,然后再次发送主动请求,机器人发送了主动消息。
我调查了这个问题,发现了两件事。首先,在IIS中启用AlwaysOn,但是我在共享主机上,我不能这样做。其次,定期向bot发送一些请求,以使bot保持生存状态。
比我注意到的多,我可以使用DirectLine通道进行此操作。我设置了代码以开始对话,发送一些消息并在发送主动通知之前接收它。从DirectLine开始对话很容易,我发送了一条消息,然后收到了回复。由于这是对bot的请求,因此我认为这可以主动解决我的500(内部服务器错误)响应状态。但事实并非如此。
仅当我在短时间内输入要从Skype漫游的内容时,我才能在Skype中接收主动消息。否则,Skype主动消息请求将出现500错误。
我不知道该怎么做。
答案 0 :(得分:1)
请注意,我也在their duplicate GitHub issue中与该用户一起工作。
这听起来可能是TrustServiceUrl Issue(尽管出现500 vs 401错误消息)。
您可以通过将Skype添加到受信任的URL列表中来对其进行修复:
var serviceUrl = <GetThisFrom Activity.ServiceUrl>;
MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);
Here's a link,如果有帮助的话。否则,browsing these issues应该有所帮助。
此“信任服务URL问题”不仅适用于Skype。尝试使用主动消息传递时,许多其他URL也会发生这种情况。只需将serviceUrl
替换为适合您的用例的内容即可。是的,如果您使用多个渠道,则可以在使用MicrosoftAppCredentials.TrustServiceUrl()
时通过多次调用来添加多个URL。
这里是the method definition。注意:您也可以为此添加到期时间。