确认Google Assistant的异步操作

时间:2018-11-01 20:22:38

标签: javascript firebase actions-on-google google-home

我正在为Google助手创建一个从REST API获取一些数据的操作。动作启动http请求,然后解析响应以创建最终的动作语音,所有这些处理都使用Promise异步完成。结果,用户需要一定的时间才能获得动作响应。

有没有一种方法可以先说出“ ok,我正在搜索”之类的确认语句,然后在处理完http答案后再用第二句话完成操作?

下面是异步意图的框架:

app.intent('IntentName', (conv, {params}) => {

    // ==> Provide here an acknowledgement to the user <==

    // return a promise to handle this intent asynchronously
    return new Promise(function (resolve, reject) {
        http.get(httpOptions, function (resp) {
            processing...
            conv.close(strSpeech);
        });
    });
});

1 个答案:

答案 0 :(得分:0)

不像您期望的那样直接,不。

在Google和Dialogflow上的操作以一种非常对话的方式来进行。除了一些例外,您的操作一旦发送回回复,您就无法将任何内容发送给用户,除非他们向您发送回另一个请求。

其中一个例外是您可以通过助手向您的用户发送notification。通知仅在某些表面上可用,并且如果响应将在几秒钟内到来,那么它实际上并不适用,因此对于您而言,这可能不是一个好的解决方案。

更好的是,尽管有点破绽,但还是立即发回包含Media Response的回复,该回复包含几秒钟的“保持音乐”。在播放音乐时,您可以让代码确定答案并将结果存储在缓存中。音乐结束时,将再次调用您的操作,以指示音频结束。如果届时您有答案,可以将其返回。如果没有,您可以再播放几秒钟的音乐。