คุณใช้สิทธิ์ในการดำเนินการเพื่อขอข้อมูลส่วนตัวจากผู้ใช้เพื่อดำเนินการตามคำขอได้ เช่น การดำเนินการส่งอาหาร อาจใช้สิทธิ์เข้าถึงตำแหน่งของอุปกรณ์เพื่อขอข้อมูลเกี่ยวกับตำแหน่งของผู้ใช้
เมื่อคุณเพิ่มสิทธิ์ลงในการดำเนินการ Assistant จะแสดงอินเทอร์เฟซมาตรฐานที่สอดคล้องกันเพื่อขอสิทธิ์จากผู้ใช้ในการให้ข้อมูลแก่การดำเนินการของคุณ
สิทธิ์ที่ใช้ได้
การดำเนินการของคุณสามารถขอสิทธิ์ต่อไปนี้ได้
DEVICE_PRECISE_LOCATION
: ขอตำแหน่งอุปกรณ์ของผู้ใช้แบบแม่นยำ (พิกัดและที่อยู่)DEVICE_COARSE_LOCATION
: ขอตำแหน่งอุปกรณ์คร่าวๆ ของผู้ใช้ (รหัสไปรษณีย์และเมือง)
สิทธิ์การตั้งค่า
คุณต้องเพิ่มประเภทช่องใหม่ในฉากเพื่อตั้งค่าสิทธิ์สำหรับการดำเนินการ จากนั้นคุณกำหนดค่าสล็อตสิทธิ์สำหรับข้อมูลที่ต้องการขอ
เพิ่มประเภทช่องสิทธิ์
คุณให้สิทธิ์การดำเนินการในการรับข้อมูลผู้ใช้ด้วยช่องประเภท actions.type.Permission
ได้
หากต้องการกำหนดค่าประเภทสล็อตนี้ ให้ทำตามขั้นตอนต่อไปนี้
- ไปที่คอนโซล Actions แล้วเลือกหรือสร้างโปรเจ็กต์
- คลิกพัฒนาในเมนูด้านบน
- ในส่วนฉาก ให้คลิกฉากที่ต้องการเพิ่มโฟลว์สิทธิ์
- ในส่วนการเติมช่องโฆษณาของฉาก ให้คลิก + เพื่อเพิ่มช่องใหม่
ในเมนูแบบเลื่อนลงเลือกประเภท ให้เลือกประเภทช่อง
actions.type.Permission
ตั้งชื่อช่องในช่องป้อนชื่อช่องโฆษณา
เปิดใช้การเขียนกลับค่าช่องที่กำหนดเองเพื่อเขียนผลลัพธ์ไปยังพารามิเตอร์ของเซสชัน
กำหนดค่าสล็อต
ตอนนี้คุณระบุสตริงบริบทและรายการสิทธิ์ที่จะอนุญาตเพื่อกำหนดค่าช่องโฆษณาได้แล้ว สตริงบริบทเป็นสาเหตุที่คุณขอข้อมูลจากผู้ใช้ และระบบจะแสดงต่อผู้ใช้เมื่อระบบขอให้ผู้ใช้ให้สิทธิ์แก่การดำเนินการของคุณ
คุณสามารถกำหนดค่าสตริงบริบทและสิทธิ์ได้ในส่วนกำหนดค่าช่องโฆษณา ดังที่แสดงในภาพหน้าจอต่อไปนี้
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างการกำหนดค่าช่อง
{
"@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValueSpec",
"context": "Context string",
"permissions": ["DEVICE_PRECISE_LOCATION"]
}
ข้อความแจ้งที่แสดงต่อผู้ใช้จะอยู่ในรูปแบบ "$context_string ฉันแค่ต้องใช้ตำแหน่งปัจจุบันของคุณจาก Google ไม่ทราบว่าคุณสะดวกไหม"
คุณสามารถรับข้อมูลผู้ใช้ต่อไปนี้โดยใช้รหัสสิทธิ์:
สิทธิ์ | คำอธิบาย |
---|---|
DEVICE_PRECISE_LOCATION |
ตำแหน่งที่แน่นอนของอุปกรณ์ (พิกัดและที่อยู่) |
DEVICE_COARSE_LOCATION |
ตำแหน่งของอุปกรณ์คร่าวๆ (รหัสไปรษณีย์และเมือง) |
รับผลลัพธ์ของสิทธิ์
ส่วนต่อไปนี้จะอธิบายวิธีตรวจสอบสถานะสิทธิ์และอ่านข้อมูลของผู้ใช้หากได้รับสิทธิ์
ตรวจสอบสถานะสิทธิ์
เมื่อผู้ใช้ให้สิทธิ์ ระบบจะเขียนสถานะผลลัพธ์ไปยังพารามิเตอร์เซสชันที่เชื่อมโยงกับช่องโฆษณา
คุณจะตรวจสอบสถานะสิทธิ์ได้โดยตรวจสอบค่าของ session.params.<slot_name>.permissionStatus
ในเงื่อนไขของโหมด
หากต้องการตรวจสอบสถานะของช่องสิทธิ์ ให้ทำตามขั้นตอนต่อไปนี้
- ไปที่คอนโซล Actions และคลิกพัฒนาในเมนูด้านบน
- ในส่วนฉาก ให้คลิกฉากที่มีช่องสิทธิ์
- ในส่วนเงื่อนไขของฉาก ให้คลิก + เพื่อเพิ่มเงื่อนไขใหม่
ป้อนเงื่อนไขต่อไปนี้เพื่อตรวจสอบสถานะสิทธิ์ (โดยที่ <slot_name> คือชื่อพารามิเตอร์เซสชันที่คุณกำหนดค่าในช่อง)
scene.slots.status == "FINAL" && (session.params.<slot_name>.permissionStatus == "PERMISSION_GRANTED" || session.params.<slot_name>.permissionStatus == "ALREADY_GRANTED")
ในส่วนเงื่อนไขของฉาก ให้คลิก + เพื่อเพิ่มเงื่อนไขใหม่
ป้อนเงื่อนไขต่อไปนี้เพื่อจัดการกรณีที่ผู้ใช้ไม่ยินยอมให้แชร์ข้อมูล
scene.slots.status == "FINAL"
ในส่วนเงื่อนไขของฉาก ให้คลิก + เพื่อเพิ่มเงื่อนไขใหม่
ป้อนเงื่อนไขต่อไปนี้เพื่อจัดการกรณีที่ผู้ใช้ได้ให้สิทธิ์แล้ว และไม่ต้องมีการถามอีก
"DEVICE_PRECISE_LOCATION" in user.permissions
อ่านข้อมูลผู้ใช้
หากผู้ใช้ให้สิทธิ์ ระบบจะแสดงข้อมูลผู้ใช้ในคำขอที่ตามมา
ในข้อมูลโค้ดด้านล่าง คุณจะเห็นข้อมูลตำแหน่งอุปกรณ์ที่อยู่ในคำขอที่ส่งไปยังเว็บฮุคของส่วน device.currentLocation
ขอ JSON |
---|
{ "handler": { "name": "handler" }, "intent": { "name": "", "params": { "deviceLoc": { "original": "", "resolved": { "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValue", "permissionStatus": "PERMISSION_GRANTED", "grantedPermissions": [ "DEVICE_PRECISE_LOCATION" ] } } }, "query": "Yes" }, "scene": { "name": "Scene", "slotFillingStatus": "FINAL", "slots": { "deviceLoc": { "mode": "REQUIRED", "status": "SLOT_UNSPECIFIED", "value": { "grantedPermissions": [ "DEVICE_PRECISE_LOCATION" ], "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValue", "permissionStatus": "PERMISSION_GRANTED" }, "updated": true } }, "next": { "name": "actions.scene.END_CONVERSATION" } }, "session": { "id": "session_id", "params": { "deviceLoc": { "grantedPermissions": [ "DEVICE_PRECISE_LOCATION" ], "permissionStatus": "PERMISSION_GRANTED", "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValue" } }, "typeOverrides": [], "languageCode": "" }, "user": { "locale": "en-US", "params": {}, "accountLinkingStatus": "ACCOUNT_LINKING_STATUS_UNSPECIFIED", "verificationStatus": "VERIFIED", "packageEntitlements": [], "permissions": [ "DEVICE_PRECISE_LOCATION" ], "lastSeenTime": "2021-02-08T20:43:47Z" }, "home": { "params": {} }, "device": { "capabilities": [ "SPEECH", "RICH_RESPONSE", "LONG_FORM_AUDIO" ], "currentLocation": { "coordinates": { "latitude": 37.422, "longitude": -122.084 }, "postalAddress": { "revision": 0, "regionCode": "US", "languageCode": "en", "postalCode": "94043", "sortingCode": "", "administrativeArea": "California", "locality": "Mountain View", "sublocality": "", "addressLines": ["1600 Amphitheatre Parkway"], "recipients": [], "organization": "" } } } } |
ดูข้อมูลเพิ่มเติมเกี่ยวกับสคีมาของประเภทสถานที่ตั้งได้ที่ข้อมูลอ้างอิง Location
คุณเข้าถึงข้อมูลที่อยู่ในคำขอจากเว็บฮุคได้ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
เว็บฮุค |
---|
app.handle('handler', (conv) => { let location = conv.device.currentLocation; conv.add(`Your postal code is ${location.postalCode}`); }); |
ใช้สิทธิ์ในข้อความแจ้ง
นอกจากนี้คุณยังอ้างอิงสิทธิ์ในข้อความแจ้งแบบคงที่ได้ด้วย เช่น คุณใช้ $device.currentLocation.coordinates.*
และ $device.currentLocation.postalAddress.*
สำหรับตำแหน่งของอุปกรณ์ได้
ข้อมูลโค้ดต่อไปนี้จะแสดงวิธีอ้างอิงเมืองของผู้ใช้ในพรอมต์
candidates:
- first_simple:
variants:
- speech: >-
There are no events scheduled tomorrow in the city of $device.currentLocation.postalAddress.locality.