c# - DirectLine 客户端上的 startConversationAsync() 未完成
问题描述
我有一个在 botframework v3 上运行的机器人。我制作了一个直通频道,以便我可以解析来自 Alexa 和 Google Home 的任务。这些请求通过连接亚马逊云/谷歌云和机器人服务的网络服务进行。在 api/alexa 上接听 Alexa 电话,在 api/Google 上接听 Google Assistant 电话。我在本地的 web 服务之间运行它,因此我通过带有 host-headers=rewrite 的 ngrok 路由请求。Alexa 工作得很好,但 Google Assistant 不行。不知何故,谈话没有开始。请参阅下面的代码
从 Alexa 控制器启动 directLine(有效):
var client = _directLineMaker.GetClient(ConfigAndConstants.DirectLineSecret);
var conversation = await client.Conversations.StartConversationAsync();
session.Attributes[ConfigAndConstants.DictKeyWatermark] = null;
从 Google 控制器启动 directLine(不起作用):
var client = _directLineMaker.GetClient(ConfigAndConstants.DirectLineSecret);
/// client is defined
var conversation = await client.Conversations.StartConversationAsync();
/// The line below is never reached
var session = sessionId;
在这两种情况下,_directlineMaker.GetClient() 都会简单地返回
return new DirectLineClient(directLineSecret);
行为一致;谷歌助手从来没有用过,Alexa 总是有效的。我看不出我有什么不同,而且我对可能导致这种行为的原因一无所知。
什么可能导致 startConversationAsync 不返回任何内容?
编辑:
当我调用时,为 Google 助理开始对话确实有效
var conversation = client.Conversations.StartConversation();
所以我很高兴。仍然不明白为什么异步版本会挂起。
解决方案
它与直线无关,但一切都与我造成了僵局。在 Task.Run( () => { } ).Result 中运行此代码;解决了一切。
推荐阅读
- html - 在水平滚动上看不到垫表背景颜色
- c# - Azure Service Fabric 中的 NodeType 和 ScaleSet 有什么区别
- discord - 如何让我的不和谐机器人自动回复任何消息
- c - C中的函数,用于计算读取的字符在字符串中出现的次数
- .net - HtmlParser 与 BrowsingContext
- spring-boot - Spring Boot with Validation - 在自定义验证器中注入存储库给出 Null
- c# - 从Delphi到C#的方法数据类型转换
- javascript - Ajax 不能在 iphone 上运行,但可以在 pc 上运行
- reactjs - React:useContext vs 变量来存储缓存
- php - 使用 twig-variable 渲染 twig HTML 字符串