สิทธิ์

คุณใช้สิทธิ์ในการดำเนินการเพื่อขอข้อมูลส่วนตัวจากผู้ใช้เพื่อดำเนินการตามคำขอได้ เช่น การดำเนินการส่งอาหาร อาจใช้สิทธิ์เข้าถึงตำแหน่งของอุปกรณ์เพื่อขอข้อมูลเกี่ยวกับตำแหน่งของผู้ใช้

เมื่อคุณเพิ่มสิทธิ์ลงในการดำเนินการ Assistant จะแสดงอินเทอร์เฟซมาตรฐานที่สอดคล้องกันเพื่อขอสิทธิ์จากผู้ใช้ในการให้ข้อมูลแก่การดำเนินการของคุณ

สิทธิ์ที่ใช้ได้

การดำเนินการของคุณสามารถขอสิทธิ์ต่อไปนี้ได้

  • DEVICE_PRECISE_LOCATION: ขอตำแหน่งอุปกรณ์ของผู้ใช้แบบแม่นยำ (พิกัดและที่อยู่)
  • DEVICE_COARSE_LOCATION: ขอตำแหน่งอุปกรณ์คร่าวๆ ของผู้ใช้ (รหัสไปรษณีย์และเมือง)

สิทธิ์การตั้งค่า

คุณต้องเพิ่มประเภทช่องใหม่ในฉากเพื่อตั้งค่าสิทธิ์สำหรับการดำเนินการ จากนั้นคุณกำหนดค่าสล็อตสิทธิ์สำหรับข้อมูลที่ต้องการขอ

เพิ่มประเภทช่องสิทธิ์

คุณให้สิทธิ์การดำเนินการในการรับข้อมูลผู้ใช้ด้วยช่องประเภท actions.type.Permission ได้

หากต้องการกำหนดค่าประเภทสล็อตนี้ ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่คอนโซล Actions แล้วเลือกหรือสร้างโปรเจ็กต์
  2. คลิกพัฒนาในเมนูด้านบน
  3. ในส่วนฉาก ให้คลิกฉากที่ต้องการเพิ่มโฟลว์สิทธิ์
  4. ในส่วนการเติมช่องโฆษณาของฉาก ให้คลิก + เพื่อเพิ่มช่องใหม่
  5. ในเมนูแบบเลื่อนลงเลือกประเภท ให้เลือกประเภทช่อง actions.type.Permission

  6. ตั้งชื่อช่องในช่องป้อนชื่อช่องโฆษณา

  7. เปิดใช้การเขียนกลับค่าช่องที่กำหนดเองเพื่อเขียนผลลัพธ์ไปยังพารามิเตอร์ของเซสชัน

กำหนดค่าสล็อต

ตอนนี้คุณระบุสตริงบริบทและรายการสิทธิ์ที่จะอนุญาตเพื่อกำหนดค่าช่องโฆษณาได้แล้ว สตริงบริบทเป็นสาเหตุที่คุณขอข้อมูลจากผู้ใช้ และระบบจะแสดงต่อผู้ใช้เมื่อระบบขอให้ผู้ใช้ให้สิทธิ์แก่การดำเนินการของคุณ

คุณสามารถกำหนดค่าสตริงบริบทและสิทธิ์ได้ในส่วนกำหนดค่าช่องโฆษณา ดังที่แสดงในภาพหน้าจอต่อไปนี้

ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างการกำหนดค่าช่อง

{
  "@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 ในเงื่อนไขของโหมด

หากต้องการตรวจสอบสถานะของช่องสิทธิ์ ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่คอนโซล Actions และคลิกพัฒนาในเมนูด้านบน
  2. ในส่วนฉาก ให้คลิกฉากที่มีช่องสิทธิ์
  3. ในส่วนเงื่อนไขของฉาก ให้คลิก + เพื่อเพิ่มเงื่อนไขใหม่
  4. ป้อนเงื่อนไขต่อไปนี้เพื่อตรวจสอบสถานะสิทธิ์ (โดยที่ <slot_name> คือชื่อพารามิเตอร์เซสชันที่คุณกำหนดค่าในช่อง)

    scene.slots.status == "FINAL" && (session.params.<slot_name>.permissionStatus == "PERMISSION_GRANTED" || session.params.<slot_name>.permissionStatus == "ALREADY_GRANTED")
    

  5. ในส่วนเงื่อนไขของฉาก ให้คลิก + เพื่อเพิ่มเงื่อนไขใหม่

  6. ป้อนเงื่อนไขต่อไปนี้เพื่อจัดการกรณีที่ผู้ใช้ไม่ยินยอมให้แชร์ข้อมูล

    scene.slots.status == "FINAL"
    

  7. ในส่วนเงื่อนไขของฉาก ให้คลิก + เพื่อเพิ่มเงื่อนไขใหม่

  8. ป้อนเงื่อนไขต่อไปนี้เพื่อจัดการกรณีที่ผู้ใช้ได้ให้สิทธิ์แล้ว และไม่ต้องมีการถามอีก

    "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.