2017-08-08 95 views
3

我已成功地通過action-on-google nodejs庫請求用戶位置,但我更多的是java小夥子,我需要在java中執行此操作。在沒有nodejs庫的情況下請求用戶位置

https://developers.google.com/actions/assistant/helpers#json

How can I request the user's location in API.ai?

Requesting User Location from Google Actions with Api.ai

從上面的鏈接,我發現這是可能的只是JSON反應變量。

我創建了一個api.ai我POC的應用程序,它返回以下JSON反應變量

{ 
    "conversationToken": { 
     "state": null, 
     "data": {} 
    }, 
    "expectUserResponse": true, 
    "expectedInputs": [ 
     { 
      "inputPrompt": { 
       "initialPrompts": [ 
        { 
         "textToSpeech": "PLACEHOLDER_FOR_PERMISSION" 
        } 
       ], 
       "noInputPrompts": null 
      }, 
      "possibleIntents": [ 
       { 
        "intent": "actions.intent.PERMISSION", 
        "inputValueData": { 
         "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec", 
         "optContext": "Requesting Location.", 
         "permissions": [ 
          "DEVICE_COARSE_LOCATION" 
         ] 
        } 
       } 
      ] 
     } 
    ] 
} 

這將返回: Unparseable Json Response

{ 
    "contextOut": [ 
     { 
      "lifespan": 100, 
      "name": "_actions_on_google_", 
      "parameters": null 
     }, 
     { 
      "lifespan": 5, 
      "name": "requesting_permission", 
      "parameters": null 
     } 
    ], 
    "data": { 
     "google": { 
      "expect_user_response": true, 
      "is_ssml": false, 
      "no_input_prompts": null, 
      "permissions_request": { 
       "opt_context": "Requesting Location.", 
       "permissions": [ 
        "DEVICE_COARSE_LOCATION" 
       ] 
      } 
     } 
    }, 
    "speech": "PLACEHOLDER_FOR_PERMISSION" 
} 

此退貨: PLACEHOLDER TEXT

我想知道我這樣做的方式是否可行。如果是,我做錯了什麼?

請幫忙。

+0

現在有一個非官方的Java /科特林SDK。它具有nodejs和非常類似的API的所有功能。我維護這個項目,並且很快就會更新文檔和自述文件,但它已經可以使用並且處於Maven核心。 https://github.com/TicketmasterMobileStudio/actions-on-google-kotlin – Patrick

+0

@Patrick謝謝,我會看看 – Sukh

回答

1

對於初學者 - 是的,這是可能的。您可以使用JSON來請求權限。所有node.js庫都會幫助格式化JSON。

大部分看起來是正確的,但我認爲這裏有兩種不同類型的錯誤。

首先是我懷疑在第一個示例中API.AI/Google存在幾個導致問題的字段。這兩個字段爲空,conversationToken.stateexpectedInputs.inputPrompt.noInputPrompts,可能會導致問題。 state字段應該只是一個字符串(任何字符串都可以),並且noInputPrompts應該是一個空數組。

此外,您表明您正在使用API​​.AI,它需要發回其他信息以及您已經指出的data.google部分中的大部分內容(您在第二個示例中有這種情況,但沒有你的第一個)。有關API.AI響應的基本佈局,請參閱https://api.ai/docs/fulfillment#response;有關Google智能助理使用的其他字段,請參閱https://developers.google.com/actions/apiai/webhook#response

這裏是我產生了一些輸出工作:


{ 
    "speech": "PLACEHOLDER_FOR_PERMISSION", 
    "contextOut": [ 
     { 
      "name": "_actions_on_google_", 
      "lifespan": 100, 
      "parameters": {} 
     } 
    ], 
    "data": { 
     "google": { 
      "expectUserResponse": true, 
      "isSsml": false, 
      "noInputPrompts": [], 
      "systemIntent": { 
       "intent": "actions.intent.PERMISSION", 
       "data": { 
        "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec", 
        "optContext": "To pick you up", 
        "permissions": [ 
         "NAME", 
         "DEVICE_PRECISE_LOCATION" 
        ] 
       } 
      } 
     } 
    } 
} 

+0

非常感謝你的幫助。它按我的意願工作。 :) – Sukh

+0

嗨@Prisoner,我有一個問題:一旦我們獲得用戶名和位置權限,是否有任何方法可以存儲該會話的權限,只要需要,我就可以得到它,這有可能嗎? – Sukh

+0

對於其他/不同的問題,最好是如果你問另一個SO問題,而不是嘗試使用評論來跟進。然而,在這種情況下,它已被問及並回答:https://stackoverflow.com/questions/45044623/google-assistant-location-permissions-not-stored-between-requests如果回答你的問題,upvote這個問題並回答。如果不是,請儘可能多地提出一個新問題。 – Prisoner

相關問題