簡體   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