الأذونات

يمكنك استخدام الأذونات في الإجراء الخاص بك لطلب بيانات شخصية من المستخدم. لأغراض إكمال الطلب. على سبيل المثال، إجراء توصيل الطعام استخدام إذن تحديد الموقع الجغرافي للجهاز لطلب معلومات حول موقع المستخدم الموقع.

عندما تضيف إذنًا إلى المهمّة، يقدّم "مساعد Google" معيارًا من واجهة متسقة لطلب الإذن من المستخدم لتقديم المعلومات إلى الإجراء الخاص بك.

الأذونات المتاحة

يمكن طلب الأذونات التالية من خلال الإجراء الخاص بك:

  • DEVICE_PRECISE_LOCATION: لطلب الموقع الجغرافي الدقيق لجهاز المستخدم (الإحداثيات وعنوان الشارع).
  • DEVICE_COARSE_LOCATION: يطلب الموقع الجغرافي التقريبي لجهاز المستخدم (الرمز البريدي والمدينة).

إعداد الأذونات

لإعداد أذونات الإجراء الخاص بك، عليك إضافة نوع خانة جديد إلى مشهد. بعد ذلك، اضبط خانة لإذن البيانات الذي تريد طلبه.

إضافة نوع خانة الإذن

يمكنك منح الإجراء الخاص بك إمكانية الحصول على معلومات المستخدم من خلال نوع الخانة: actions.type.Permission

لإعداد هذا النوع من الشرائح، اتّبِع الخطوات التالية:

  1. انتقل إلى وحدة تحكم الإجراءات واختَر أو أنشئ المشروع.
  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. انتقل إلى وحدة تحكم الإجراءات وانقر على انقر على تطوير في القائمة العلوية.
  2. ضمن المَشاهد، انقر على المشهد الذي يتضمّن خانة الإذن.
  3. ضمن قسم الشرط في المشهد، انقر على + لإضافة عنصر الشرط.
  4. أدخِل الشرط التالي للتحقّق من حالة الإذن (حيث &lt;slot_name&gt; هو اسم معلمة الجلسة التي ضبطتها في الخانة):

    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.