DirectLine客户端上的startConversationAsync()尚未完成

时间:2018-11-26 16:10:18

标签: c# botframework direct-line-botframework

我有一个在botframework v3上运行的机器人。我建立了一个直接渠道,以便我可以解析来自Alexa和Google Home的任务。这些请求通过在Amazon Cloud / Google Cloud和botservice之间架桥的Web服务进行。 在api / alexa上收到Alexa呼叫,在api / Google上收到Google Assistant呼叫。我在本地Web服务之间运行此命令,因此我正在通过ngrok使用host-headers = rewrite路由请求。 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);

行为是一致的; Google助手从来没有用过,Alexa总是可以用。我看不出我做了什么不同的事情,对于导致这种行为的原因我一无所知。

什么可能导致startConversationAsync不返回任何内容?

编辑:

在我调用

时,可以启动Google Assistant的对话
var conversation = client.Conversations.StartConversation();

所以我很高兴。仍然困惑为什么异步版本会挂起。

1 个答案:

答案 0 :(得分:0)

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