首页 > 解决方案 > 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();

所以我很高兴。仍然不明白为什么异步版本会挂起。

标签: c#botframeworkdirect-line-botframework

解决方案


它与直线无关,但一切都与我造成了僵局。在 Task.Run( () => { } ).Result 中运行此代码;解决了一切。


推荐阅读