Tôi đang sử dụng các công cụ GUI do API AI cung cấp để tạo Hành động. Có thể tìm nạp vị trí thiết bị không? Tôi đã nghe nói rằng điều này là có thể bằng cách yêu cầu quyền. Tài liệu này có ở bất kỳ đâu không? Một ví dụ/đoạn mã sẽ rất hữu ích.Cách tìm nạp vị trí thiết bị bằng API AI?
Trả lời
Có, bạn có thể tìm nạp vị trí thiết bị và một số thông tin khác (tên) sau khi người dùng cấp quyền.
Tài liệu cũng đã được ghi thành tài liệu by google, vì vậy tôi không nghĩ rằng tôi cần lặp lại nó ở đây. Nếu câu hỏi đặt ra là liệu có thể lấy thông tin vị trí mà không cần triển khai webhook tùy chỉnh được gọi thông qua thực hiện API.AI, thì câu trả lời là không: Bản thân API.AI không cung cấp khả năng này, bạn cần sử dụng Cơ chế mở rộng của API.AI, đó là một webhook.
Như bạn có thể thấy ở đây Api.Ai doc trong phản hồi có trường data
. Bạn cần tạo phản hồi json chính xác mà Google mong đợi phản hồi trên webhook (xem Google docs) nhưng nếu bạn đang sử dụng Api.Ai, bạn cần lồng phần tử json của Google vào trong trường dữ liệu.
Tài liệu có chút không rõ ràng. Tôi hy vọng điều này có thể giúp một ai đó.
Tất cả những gì bạn phải làm là tạo ra một ý định dự phòng con cho mục đích bạn đang yêu cầu quyền.
- Để làm như vậy, bạn cần phải nhấp vào liên kết "Thêm mục đích tiếp theo" theo ý định của bạn. Lưu ý rằng liên kết sẽ chỉ xuất hiện khi bạn di chuột lên. Chọn tùy chọn dự phòng từ danh sách thả xuống và mục đích dự phòng con sẽ được tạo cho bạn.
Screen shot for how to create a child fallback intent
- Bấm vào mục đích dự phòng trẻ em và kích hoạt "Sử dụng webhook".
Screen shot for how to configure the child fallback intent
Vậy là xong. Bây giờ sau khi sự cho phép được yêu cầu, phản hồi của người dùng sẽ được đăng lại cho bạn với hành động được cấu hình trong mục đích dự phòng con của bạn.
Xem bên dưới để biết mã mẫu 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')
})
Có ba phần như sau:
- xin phép
- Telling API.AI để xử lý các phản ứng
- Xử lý thông tin chuyển tiếp bởi API.AI
xin phép
Rất nhiều người không được nhắc đến cơ thể JSON mà cần phải được thực hiện để yêu cầu quyền ở nơi đầu tiên. Đây là (kém) được ghi lại tại số https://developers.google.com/actions/assistant/helpers#user_information vì nó không thực sự đề cập đến những gì cần được gửi nếu bạn đang sử dụng API.AI.
Nói tóm lại, JSON của bạn cần phải tìm kiếm một cái gì đó như thế này:
{
"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"
]
}
}
}
}
}
Telling API.AI để xử lý các phản ứng
API.AI cần phải biết được ý định xử lý thông tin được phép. Bạn làm điều này bằng cách đặt Sự kiện thành actions_intent_PERMISSION
.
này sẽ giống như thế này:
Bạn có thể thiết lập các hành động để bất cứ điều gì có ý nghĩa cho webhook của bạn, và hãy chắc chắn để cho phép thực hiện webhook cho tiếp cận mục đích là tốt.
Nếu bạn cần theo dõi nơi yêu cầu cấp phép được bắt đầu và xử lý nó thông qua một Hành động khác, bạn có thể đặt Ngữ cảnh và có các mục đích xử lý khác nhau dựa trên các cài đặt ngữ cảnh khác nhau.
Phương thức dự phòng dự phòng hoạt động vì không có kết hợp nào tốt hơn tại thời điểm đó vì bạn chưa chỉ định Mục đích thông thường với actions_intent_PERMISSION
. Tuy nhiên, đây không phải là lựa chọn tốt nhất vì nó có thể phù hợp với các tình huống khác từ người dùng của bạn.
thập các thông tin trong webhook bạn
webhook của bạn sẽ nhận được một đối tượng JSON trong cơ thể.
Tên người dùng và thông tin liên quan sẽ có tại đường dẫn đối tượng originalRequest.data.user.profile
.
Vị trí của chúng được cung cấp tại originalRequest.data.device.location
.
Xem https://developers.google.com/actions/apiai/webhook#request để tham khảo.
Tôi đã đấu tranh với điều này quá lâu. Tôi tìm thấy diễn đàn này và một cái gì đó nhấp vào. Hóa ra nó thực sự không khó.
Trong webhook php của bạn, ý định ban đầu của bạn nên quay trở lại này như json - hoặc json_encode
mảng này:
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'
,
),
),
),
),
)
sau đó tạo ra một ý định với sự kiện: actions_intent_PERMISSION
Trong webhook php của bạn cho ý định mới được tạo ra, bây giờ bạn sẽ có vị trí được trả về. Đó là trong phản hồi: ["originalRequest"]['data']['device']['location']['coordinates']
Dễ dàng Peasy ...
- 1. Lấy đoạn vị trí bằng phản hồi chuyển hướng API tìm nạp
- 2. API tìm nạp bằng cookie
- 3. Cách theo dõi thiết bị vị trí thiết bị (iOS và Android) bằng Phonegap
- 4. Tìm nạp bằng API tiêu chuẩn nhibernate
- 5. Cách tìm nạp XML với tìm nạp api
- 6. Cách xác định vị trí thiết bị trong Android bằng địa chỉ IP
- 7. API tìm nạp và Cordova
- 8. Mô phỏng vị trí giả trên thiết bị iOS thực
- 9. Cách nhận vị trí của Tweets bằng tìm kiếm Twitter API
- 10. tìm vị trí tweet
- 11. Tìm nạp thông tin bằng Twitter API v.1.1
- 12. đặt vị trí chuột trên thiết bị Android gốc
- 13. API vị trí địa lý trên iPhone
- 14. Tìm hiểu vị trí của các vị trí khác nhau
- 15. Cách lấy khoảng cách từ một vị trí đến các vị trí khác nhau bằng một lần nhấp bằng API bản đồ của Google?
- 16. Kết quả tìm kiếm trên biểu đồ Facebook api phụ thuộc vào vị trí?
- 17. Tìm vị trí/Vị trí của JFrame trong cửa sổ
- 18. Yêu cầu POST với API tìm nạp?
- 19. Cách theo dõi vị trí của thiết bị Android trong một tòa nhà?
- 20. Cách ứng dụng web hỏi vị trí thiết bị di động?
- 21. Sự khác biệt khi nhận vị trí bằng cách sử dụng Trình quản lý vị trí và Api nhà cung cấp vị trí hợp nhất là gì?
- 22. Flickr API lấy hình ảnh dựa trên vị trí
- 23. API/Phương pháp lấy dữ liệu vị trí từ thiết bị GPS (USG-MR350) trong ứng dụng ca cao?
- 24. Cách gửi vị trí bằng Telegram Desktop?
- 25. API tìm nạp - bằng cách sử dụng response.json() ném kết thúc lỗi đầu vào bất ngờ
- 26. Cách nhận Lat, Dài vị trí được nhấp bằng tờ rơi Api
- 27. Cách xác định vị trí quốc gia hiện tại của thiết bị Android bất kể cài đặt vị trí của người dùng là gì?
- 28. Nơi tôi có thể tìm thấy id vị trí của vị trí khi sử dụng Instagram API
- 29. tìm vị trí đỉnh trong dải phổ
- 30. toàn cầu thiết lập node_modules vị trí cho dự án
Ngay cả tôi đã từng liên kết mũ trước đó. Nó có một ví dụ sử dụng Node.thư viện khách hàng js. Liên kết này không đủ chi tiết nếu bạn đang sử dụng API AI – Sai
Hướng dẫn tại liên kết là sử dụng giao diện hành động trên google hoặc API.AI. Dù bằng cách nào, bạn cần phải yêu cầu thông tin vị trí trong mã tùy chỉnh của riêng bạn - khi sử dụng API.AI, điều đó có nghĩa là thiết lập fullfillment qua webhook mà bạn phải cung cấp. –
Tôi đã triển khai dịch vụ RESTful trên Heroku và kết nối với tác nhân của tôi trên API AI bằng cách sử dụng webhook. Làm thế nào tôi có thể yêu cầu sự cho phép vị trí trong mã Java back-end? Liên kết ở trên có ví dụ JavaScript cho phép = assistant.SupportedPermissions.NAME tương đương trong Java là gì? – Sai