2017-07-14 106 views
1

我現在被困在獲取用戶輸入(用戶說)在我的index.js中的問題。例如,用戶說:請告訴我{animals}是否可以在溫度{x}到{y}之間生活。我想獲得什麼動物,x和y的確切值(字符串),以便我可以檢查它是否可能在我自己的服務器中。我想知道如何做到這一點,因爲如果我將這三個參數註釋到某些實體類別,實體需要映射到某些確切的鍵值。從api.ai獲取參數/參數值

爲ApiAiApp的方法是非常有限的:https://developers.google.com/actions/reference/nodejs/ApiAiApp

而且從我的角度來看,沒有一種列出的方法在這種情況下工作。

請幫忙!

回答

2

一般API.AI實體是有一套已知值,而不是聽任何價值,在網絡掛接驗證。首先,我將確定您期望驗證的實體種類。對於溫度(x和y),我會使用API​​.AI的system entities。爲這些參數調用getArgument()(如前面的答案所述)應該返回確切的數字值。

對於動物,我會使用API​​.AI的developer entities。您可以使用JSON或CSV在實體控制檯中上載它們。您可以啓用API.AI的automated expansion以允許用戶說出您不支持的動物,然後在webhook中使用getArgument(),webhook將返回由API.AI識別的新值。您可以使用它來驗證並用適當的消息進行響應。對於每個動物,您還可以指定同義名稱以及何時說出其中的任何名稱,並且getArgument()將返回該動物的規範實體值。

額外的提示,如果您希望用戶可能會講多個動物,請確保檢查API.AI意圖的參數部分中的Is列表框。

+0

謝謝@Sachit!這樣可行! –

+0

只想跟隨一個問題,如果變量無法獲得參數,將存儲在變量中的內容是什麼?換句話說,在index.js中我們有const animal = assistant.getArgument('animal');但是,我們沒有在api.ai中註釋它,我們如何檢查它?事實是,如果我們執行assistant.ask((variable).toString()),它將只顯示某些值,如果參數無法獲取值,將顯示NOT AVAILABLE。 –

0

如果在API.AI中將「動物」,「x」和「y」定義爲參數,則可以使用ApiAiApp中定義的getArgument()方法。

所以下面應該工作:

function tempCheck(app){ 
    var animals = app.getArgument('animals'); 
    var x  = app.getArgument('x'); 
    var y  = app.getArgument('y'); 
    // Check the range and then use something like app.tell() to give a response. 
} 
+0

嗨囚犯,我以前試過這個'動物''x'和'y'是我在意圖定義的確切參數,通過使用示例註釋來關聯它們。問題是,它只獲得我在實體中定義的映射值,而不是用戶說的。如果它不匹配鍵值,那麼getArgument()似乎不適合我。 –