确认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);
});
});
});

没有你预期的那么直接,没有。

谷歌和对话流上的操作以一种非常对话的方式来回进行。只有一些例外,一旦Action发回回复,在用户向您发回另一个请求之前,您将无法向用户发送任何内容。

其中一个例外是,您可以通过助手向用户发送通知。通知只在某些表面上可用,如果几秒钟内就会收到响应,则不太适合,因此在您的情况下,这可能不是一个好的解决方案。

更好的做法是,尽管有点像黑客,但立即发回一条回复,其中包括一条媒体回复,其中包含几秒钟的"暂停音乐"。当暂停音乐播放时,您可以让代码确定答案并将结果存储在缓存中。音乐结束时,将再次调用您的"操作",表示音频结束。如果你当时有答案,你可以返回。如果没有,你可以再开始几秒钟的保持音乐。

最新更新