我使用API AI提供的GUI工具來創建Actions。是否有可能獲取設備位置?我聽說這可以通過請求權限來實現。這是記錄在任何地方?示例/代碼片段將非常有用。如何使用API AI獲取設備位置?
回答
是的,在用戶授予許可後,可以獲取設備位置和其他一些信息(名稱)。
它已經很好的記錄了by google,所以我認爲我不需要在這裏重複。
如果問題是,是否有可能獲得無多數民衆贊成通過API.AI的實現調用自定義網絡掛接實現位置信息,那麼答案是否定的:API.AI自己本身不提供此功能,你需要使用API.AI的擴展機制,即webhook。
正如你在這裏看到的Api.Ai doc在響應中有一個data
字段。您需要完全創建json響應Google期望webhook響應(請參閱Google docs),但如果您使用的是Api.Ai,則需要將Google json元素嵌套在數據字段下。
該文檔有點不清楚。我希望這可以幫助某人。
您所要做的就是爲您正在請求的權限創建一個孩子回退意圖。
- 要做到這一點,您需要點擊您的意圖「添加後續意圖」鏈接。請注意,鏈接只會在您將其懸停時顯示。從下拉列表中選擇回退選項,併爲您創建子回退意向。
Screen shot for how to create a child fallback intent
- 點擊進入子回退意圖並啓用 「使用網絡掛接」。
Screen shot for how to configure the child fallback intent
就是這樣。現在,一旦請求了權限,用戶響應將通過在您的子後備意圖中配置的操作回發給您。
請參閱下面的webhook示例代碼。
'use strict';
const express = require('express')();
const router = require('express').Router();
const bodyParser = require('body-parser');
const ActionsSdkApp = require('actions-on-google').ActionsSdkApp;
const ApiAiApp = require('actions-on-google').ApiAiApp;
express.use(bodyParser.json({type: 'application/json'}));
// In aip.ai console, under Fulfillment set webhook url to
// https://[YOUR DOMAIN]/example/location
// don't forget to select "Enable webhook for all domains" for the DOMAIN field
router.post('/location', (req, res) => {
\t const app = new ApiAiApp({request: req, response: res});
\t const intent = app.getIntent();
\t
\t switch(intent){
\t \t case 'input.welcome':
\t \t \t // you are able to request for multiple permissions at once
\t \t \t const permissions = [
\t \t \t \t app.SupportedPermissions.NAME,
\t \t \t \t app.SupportedPermissions.DEVICE_PRECISE_LOCATION
\t \t \t ];
\t \t \t app.askForPermissions('Your own reason', permissions);
\t \t break;
\t \t case 'DefaultWelcomeIntent.DefaultWelcomeIntent-fallback':
\t \t \t if (app.isPermissionGranted()) {
\t \t \t \t // permissions granted.
\t \t \t \t let displayName = app.getUserName().displayName;
\t \t \t \t
\t \t \t \t //NOTE: app.getDeviceLocation().address always return undefined for me. not sure if it is a bug.
\t \t \t \t // \t \t \t app.getDeviceLocation().coordinates seems to return a correct values
\t \t \t \t // \t \t \t so i have to use node-geocoder to get the address out of the coordinates
\t \t \t \t let coordinates = app.getDeviceLocation().address;
\t \t \t \t
\t \t \t \t app.tell('Hi ' + app.getUserName().givenName + '! Your address is ' + address);
\t \t \t }else{
\t \t \t \t // permissions are not granted. ask them one by one manually
\t \t \t \t app.ask('Alright. Can you tell me you address please?');
\t \t \t }
\t \t break;
\t }
});
express.use('/example', router);
express.listen('8081', function() {
console.log('Example app is running')
})
有三個環節進行:
- 請求允許
- 告訴API.AI處理響應
- 處理通過API轉發的信息。AI
請求允許
很多人都沒有提JSON的身體需要被擺在首位,以要求而作出權限。這是(很少)記錄在https://developers.google.com/actions/assistant/helpers#user_information,因爲它不真正涵蓋如果您使用API.AI需要發送什麼。
總之,你的JSON需要看起來像這樣:
{
"speech": "PLACEHOLDER_FOR_PERMISSION",
"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"
]
}
}
}
}
}
告訴API.AI處理響應
API.AI需要知道哪些意圖處理的許可信息。您可以通過將事件設置爲actions_intent_PERMISSION
來完成此操作。
這將是這個樣子:
您可以設置爲任何有意義的網絡掛接操作,並確保能夠在意向網絡掛接履行爲好。
如果您需要跟蹤許可請求的起始位置,並通過其他操作處理它,則可以根據不同的上下文設置設置上下文並具有不同的處理意圖。
回退意向方法的工作原理是因爲在那時沒有更好的匹配,因爲您沒有用actions_intent_PERMISSION
指定常規意向。但它不是最好的選擇,因爲它可以與用戶的其他情況相匹配。
獲取信息在網絡掛接
你的網絡掛接將獲得在體內的JSON對象。
用戶名和相關信息將位於對象路徑originalRequest.data.user.profile
。
他們的位置提供在originalRequest.data.device.location
。
參見https://developers.google.com/actions/apiai/webhook#request以供參考。
我一直在爲此奮鬥了這麼久。我發現這個論壇和點擊。結果真的不那麼難。
在你的PHP網絡掛接,你的原意應該返回這是JSON - 或json_encode
此陣:
array(
'data' =>
array(
'google' =>
array(
'expectUserResponse' => true,
'systemIntent' =>
array(
'intent' => 'actions.intent.PERMISSION',
'data' =>
array(
'@type' =>
'type.googleapis.com/google.actions.v2.PermissionValueSpec',
'optContext' => 'To find the closest site ',
'permissions' =>
'DEVICE_PRECISE_LOCATION'
,
),
),
),
),
)
然後創建與事件的另一個意圖:actions_intent_PERMISSION
在你的PHP網絡掛接的新創建的意圖,您現在將返回該位置。這是在迴應:["originalRequest"]['data']['device']['location']['coordinates']
易Peasy ...
- 1. 使用位置API或電話API獲取設備位置
- 2. 如何使用traccar api獲取設備
- 3. 使用Android Wear獲取設備位置
- 4. 無法獲取當前設備位置
- 5. 獲取設備位置並在地圖上設置位置
- 6. 推送通知獲取設備位置
- 7. 獲取Android設備的位置自動
- 8. Android 4.4.2 - 獲取設備位置座標
- 9. 獲取設備位置的OnDemand
- 10. 使用T-SQL獲取/設置服務器備份位置
- 11. 如何在Android(2.2)設備上獲取用戶的GPS位置
- 12. 如何使用API.AI從一個句子中獲取多值?
- 13. PHP獲取移動設備位置?
- 14. 如何使用Phonegap跟蹤設備位置(iOS和Android)設備
- 15. 如何在從Beacons獲取位置信息時使用here api設置Indoorlocation
- 16. 如何使用netsuite API在移動設備上獲取數據?
- 17. iOS使用GPS設備獲取當前位置
- 18. 如何獲取位圖uri在Android移動設備使用java
- 19. 即使使用融合位置API關閉gps,如何獲取位置更新?
- 20. Google地圖如何獲取Android設備上的位置?
- 21. 如何獲取intentService中的設備位置?
- 22. 如何獲取Android設備中的日誌文件位置?
- 23. 如何在iPhone中獲取設備位置名稱?
- 24. 如何在不使用位置的情況下獲取設備的區號
- 25. 如何使用Glympse獲取用戶共享位置和REST API?
- 26. 如何使用google api獲取用戶的位置
- 27. 設置/獲取使用Java API
- 28. Apache HttpClient:如何使用Fluent API獲取重定向位置?
- 29. 如何使用Google API獲取IP地址的地理位置?
- 30. 如何使用google map api獲取iOS中的當前位置?
即使我一直以前的帽子鏈接。它有一個使用Node的例子。js客戶端庫。如果您使用API AI – Sai
,此鏈接不夠詳細鏈接中的說明適用於使用google-on-action或API.AI界面。無論哪種方式,您都需要在自己的自定義代碼中請求位置信息 - 使用API.AI時,這意味着通過必須提供的webhook設置完整填充。 –
我在Heroku上部署了一個RESTful服務,並使用webhook與API AI上的代理連接。我如何在後端Java代碼中請求位置權限?上面的鏈接有一個JavaScript示例 let permission = assistant.SupportedPermissions.NAME Java中的等效內容是什麼? – Sai