Actions on google 如何在Google上处理Actions中的异步API调用

Actions on google 如何在Google上处理Actions中的异步API调用,actions-on-google,dialogflow-es,Actions On Google,Dialogflow Es,我正在使用带有DialogFlow的google github nodejs应用程序上的操作。考虑到google上的操作在5秒内没有收到来自intent的响应时会返回错误格式的错误,我正试图找出如何进行一个耗时超过5秒的异步api调用,并在响应准备就绪时将响应返回给用户。 这是我的代码的一个简单代码片段: app.intent('first-intent', async (conv: any) => { conv.ask('Please wait while we make our

我正在使用带有DialogFlow的google github nodejs应用程序上的操作。考虑到google上的操作在5秒内没有收到来自intent的响应时会返回错误格式的错误,我正试图找出如何进行一个耗时超过5秒的异步api调用,并在响应准备就绪时将响应返回给用户。 这是我的代码的一个简单代码片段:

app.intent('first-intent', async (conv: any) => {
    conv.ask('Please wait while we make our long api call...');
    await myPrivateFunction();
})

// I have put API_RESPONSE_RECEIVED as Events in DialogFlow
app.intent('second-intent', (conv: any) => {
    console.log('This is second-intent');
    var response = conv.data.apiResponse;
    conv.ask(response);
})

function myPrivateFunction(): Promise<void> {
    utils.apiCall().then(apiResponse => {
        console.log('api response received');
        conv.data.apiResponse = apiResponse;
        conv.followup('API_RESPONSE_RECEIVED');
    });
}
app.intent('first-intent',异步(conv:any)=>{
conv.ask('正在进行长api调用,请稍候…);
等待myPrivateFunction();
})
//我已将收到的API_响应_作为事件放入DialogFlow中
app.intent('second-intent',(conv:any)=>{
log(“这是第二个意图”);
var响应=conv.data.apiResponse;
会话询问(应答);
})
函数myPrivateFunction():承诺{
utils.apiCall().then(apiResponse=>{
log(“收到api响应”);
conv.data.apiResponse=apiResponse;
conv.followup(“收到API_响应”);
});
}
在我的Firebase日志中,我可以看到“请稍候,我们正在进行漫长的api调用…”和“收到api响应”,但不能看到“这是第二个意图”。如果我将
conv.followup('API\u RESPONSE\u RECEIVED')
放在
conv.ask('Please wait when we's make long API call…')
之后的API调用之外,我会看到“这是第二个意图”。所以,
app.followup
看起来不错,显然问题在于我如何处理承诺,但我不知道如何修复它


我正在开发环境中使用针对es5的TypeScript。因此,我可以在api调用中使用
await/async
。但是,使用wait会导致格式错误,因为api调用需要5秒以上的时间。

我们现在没有很好的方法来处理这个问题,但是我们有几种方法可以根据您的需要进行排序

目前可用于智能手机上的助手,并且可用于扬声器。在某些情况下,可以说您正在处理问题,并在收到通知后发送通知,然后从通知中恢复对话


另一种方法是使用播放一点“保持音乐”。在此方案下,您将启动异步调用,但也会立即发送回“hold music response”。当长异步调用完成时,它会将结果保存在本地缓存中。在音乐片段结束时,您的webhook将收到音乐已完成的通知。如果本地缓存中有可用的结果,您可以在该时间报告,否则您将播放更多的保留音乐并重复此过程。

您有如何执行“保留音乐”方法的示例吗?i、 e.将响应发送给用户并播放音乐后,如何返回到履行状态以检查“队列”?。。。很抱歉我对Google Actions非常陌生,我正在尝试让它与我的外部API通信。。。它正在工作,但我无法让它在API调用完成后向用户提供响应。我已更新了媒体响应当前页面的链接,其中包括有关如何处理
Media\u STATUS
事件的代码。在这个处理程序中,您将检查队列以获得回复。如果您仍然有问题,我建议您创建一个新的问题,尽可能详细地展示您当前拥有的代码以及它正在做什么或没有做什么。