繁体   English   中英

确认Google Assistant的异步操作

[英]Acknowledge an asynchronous action for Google Assistant

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

有没有一种方法可以先告诉一个确认语句,例如“好,我正在搜索”,然后在处理完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);
        });
    });
});

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM