مجوزها

می‌توانید از مجوزها در Action خود برای درخواست داده‌های شخصی از کاربر به منظور تکمیل یک درخواست استفاده کنید. برای مثال، یک اقدام تحویل غذا می‌تواند از مجوز مکان دستگاه برای درخواست اطلاعات درباره مکان کاربر استفاده کند.

وقتی مجوزی را به Action خود اضافه می‌کنید، Assistant یک رابط استاندارد و ثابت برای درخواست مجوز از کاربر برای ارائه اطلاعات به Action شما ارائه می‌کند.

مجوزهای موجود

مجوزهای زیر را می توان توسط Action شما درخواست کرد:

  • DEVICE_PRECISE_LOCATION : مکان دقیق دستگاه کاربر (مختصات و آدرس خیابان) را درخواست می کند.
  • DEVICE_COARSE_LOCATION : مکان دستگاه درشت کاربر (کد پستی و شهر) را درخواست می کند.

مجوزها را تنظیم کنید

برای تنظیم مجوزها برای Action خود، یک نوع شکاف جدید به صحنه اضافه می‌کنید. سپس اسلات را برای مجوز داده ای که می خواهید درخواست کنید پیکربندی کنید.

نوع شکاف مجوز را اضافه کنید

می‌توانید به Action خود توانایی دریافت اطلاعات کاربر را با نوع شکاف actions.type.Permission بدهید.

برای پیکربندی این نوع اسلات، مراحل زیر را دنبال کنید:

  1. به کنسول Actions بروید و یک پروژه را انتخاب یا ایجاد کنید.
  2. در منوی بالا روی Develop کلیک کنید.
  3. در بخش صحنه‌ها ، روی صحنه‌ای که می‌خواهید جریان مجوز را به آن اضافه کنید، کلیک کنید.
  4. در قسمت Slot filling صحنه، روی + کلیک کنید تا یک اسلات جدید اضافه کنید.
  5. در منوی انتخاب نوع ، نوع اسلات actions.type.Permission را انتخاب کنید.

  6. در قسمت Enter Slot name ، اسلات را نام ببرید.

  7. برای نوشتن نتیجه در پارامتر جلسه، نوشتن مقدار اسلات سفارشی را فعال کنید.

شکاف را پیکربندی کنید

اکنون می توانید یک رشته زمینه و لیستی از مجوزهایی که باید برای پیکربندی شکاف اعطا شوند، ارائه دهید. رشته زمینه دلیلی است برای اینکه چرا اطلاعاتی را از کاربر درخواست می‌کنید، و زمانی که از آنها خواسته می‌شود مجوز Action شما را صادر کنند به کاربران نمایش داده می‌شود.

همانطور که در تصویر زیر نشان داده شده است، می توانید رشته زمینه و مجوزها را در بخش Configure Slot پیکربندی کنید:

قطعه کد زیر نمونه ای از پیکربندی اسلات را نشان می دهد:

{
  "@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 بروید و در منوی بالا روی Develop کلیک کنید.
  2. در بخش صحنه‌ها ، روی صحنه حاوی شکاف مجوز کلیک کنید.
  3. در قسمت Condition صحنه، روی + کلیک کنید تا یک شرط جدید اضافه شود.
  4. شرط زیر را برای بررسی وضعیت مجوز وارد کنید (که در آن <slot_name> نام پارامتر جلسه ای است که در اسلات خود پیکربندی کرده اید):

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

  5. در قسمت Condition صحنه، روی + کلیک کنید تا یک شرط جدید اضافه شود.

  6. برای رسیدگی به مواردی که کاربر به اشتراک گذاری اطلاعات خود رضایت نمی دهد، شرایط زیر را وارد کنید:

    scene.slots.status == "FINAL"
    

  7. در قسمت Condition صحنه، روی + کلیک کنید تا یک شرط جدید اضافه شود.

  8. برای رسیدگی به مواردی که کاربر قبلاً مجوز داده است و نیازی به درخواست مجدد نیست، شرط زیر را وارد کنید:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

اطلاعات کاربر را بخوانید

اگر کاربر اجازه دهد، اطلاعات کاربر در درخواست‌های بعدی ارائه می‌شود.

در قطعه زیر، می‌توانید اطلاعات مکان دستگاه موجود در یک درخواست به webhook را در زیر 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.