[英]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.