التحقُّق من هوية المستخدم الثانوي

يتيح لك التحقق الثانوي من المستخدم إضافة عامل أمان ثانٍ إلى الأوامر الصوتية. يتيح لك هذا الإجراء توفير المزيد من الأمان لتنفيذ إجراءات معيّنة مثل إيقاف تشغيل كاميرا المراقبة أو فتح الباب. ولا يرتبط التحقُّق الثانوي من المستخدِم بسمة جهاز معيّنة، ما يسمح لك بتحديد الوقت الذي تريد فيه إصدار تحدٍ من خلال Google Assistant. على سبيل المثال، يمكنك اختيار إصدار تحدي لسمة OnOff الخاص بكاميرا المراقبة، ولكن بدون فرض اختبار على سمة OnOff بالضوء. قد تواجه أيضًا تحديات في Assistant المشكلة في مواقف معيّنة لتنفيذ الإجراء نفسه. على سبيل المثال، يمكنك أن تطلب من Assistant إصدار طلب تحدٍّ لفتح باب إذا لم تكن لوحة المفاتيح NFC على مسافة قريبة من ذلك الباب، لكن لن تُصدر تحديًا في حال وجود المفتاح الرئيسي.

يمكن لـ Assistant إصدار نوعين من التحديات هما: الإقرار الصريح أو رقم التعريف الشخصي (PIN). يؤدي هذا الإجراء إلى إضافة حظر إلى QUERY وهدف EXECUTE الذي يتم إرساله من Assistant إلى الإجراء ويقبل الردّ على الخطأ challengeNeeded. بعد ذلك، يُعيد Assistant طلب الغرض إلى الإجراء الخاص بك باستخدام بيانات الاختبار الموجودة في مجموعة الاختبار. يمكنك بعد ذلك التحقق من صحة بيانات الاختبار لتحديد ما إذا كان المستخدم قد قدم الرد الأمني الصحيح.

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

أنواع الأجهزة المتوافقة

تتوفر إمكانية التحقُّق الثانوي من المستخدِم على جميع أنواع الأجهزة.

سمات الأجهزة المتوافقة

تتم إتاحة التحقُّق الثانوي من المستخدِم في جميع سمات الجهاز.

أنواع التحدّي المتاحة

في ما يلي أنواع اختبارات إثبات هوية المستخدم الثانوية المتوافقة:

  • ما مِن تحدٍّ - طلب وردّ لا يستخدمان اختبار التحقُّق الثانوي من المستخدم.
  • ackNeeded: عملية تحقُّق ثانوية للمستخدم تتطلّب إقرارًا صريحًا (نعم أو لا) ويمكنه أيضًا استخدام حالات السمات كملاحظات للردّ. لا يُنصح باستخدام هذا النوع من الاختبارات للأجهزة والسمات الأمنية.
  • pinNeeded - عملية تحقُّق ثانوية للمستخدم تتطلب رقم تعريف شخصي (PIN)، وهو مثالي للأجهزة والسمات الأمنية.

ما مِن تحدٍّ

يعرض هذا المثال طلبًا ناجحًا وردًّا بشأن EXECUTE بدون تحدّي إضاءة المصابيح.

المستخدم تشغيل الأضواء
Google Assistant حسنًا، جارٍ تشغيل 3 مصابيح.
طلب
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.OnOff",
          "params": {
            "on": true
          }
        }]
      }]
    }
  }]
}
الرد
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "on": true,
        "online": true
      }
    }]
  }
}

ackNeeded

مصادقة إقرار المستخدم الثانوية يمكنها استخدام حالات متعددة لسمة أو مصادقة إقرار بسيطة.

في ما يلي الأنواع التالية من ackNeeded تحدّيات:

مطلوب بسيط

يعرض هذا المثال طلبًا بسيطًا وردًّا عليه من خلال تحدٍّ ackNeeded لخفت الضوء وتأكيدًا لخفت الإضاءة.

المستخدم تخفيف الإضاءة في غرفة المعيشة.
Google Assistant يَتِمُّ الْآنْ تَخْفِيتْ إِضَاءَةْ مِصْبَاحْ غُرْفَةِ الْمَعِيشَة. هل تريد المتابعة؟
المستخدم نعم.
Google Assistant يَتِمُّ الْآنْ تَخْفِيتْ إِضَاءَةْ مِصْبَاحْ غُرْفَةِ الْمَعِيشَة.
الطلب 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.BrightnessAbsolute",
          "params": {
            "brightness": 12
          }
        }]
      }]
    }
  }]
}
الرد 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
الطلب 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.BrightnessAbsolute",
          "params": {
            "brightness": 12
          },
          "challenge": {
            "ack": true
          }
        }]
      }]
    }
  }]
}
الرد 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS"
    }]
  }
}

مطلوبة مع حالات السمات

مصادقة إقرار المستخدم الثانوية التي يمكنها استخدام الحالات لسمة ما. على سبيل المثال، إذا كنت تستخدم سمة TemperatureSetting وتم ضبط كل من thermostatMode وthermostatTemperatureSetpoint، يمكن لـ "Assistant" طرح السؤال هل المطلوب فعلاً ضبط درجة التدفئة في مكيّف الهواء على 28 درجة؟

يمكنك أيضًا تضمين حالة في الاستجابة لتوجيه Assistant إلى تنفيذ إجراء محدّد بناءً على طلب معيّن.

تتوافق السمات والحالة التالية مع ackNeeded بحالات السمات. تشير قائمة السمة المحددة إلى أن جميع حالاتها مدعومة.

يعرض هذا المثال طلبًا وردًّا باستخدام تحدٍّ ackNeeded يستخدم حالة سمة. فهي تعمل على تغيير وضع مكيف الهواء إلى التدفئة وتضبط درجة الحرارة على 28 درجة. بعد ذلك، تطلب Assistant من المستخدمين الإقرار بتشغيل التدفئة وضبط درجة الحرارة على 28 درجة، وذلك بعد أن يتم عرض thermostatTemperatureSetpoint في 28 كحالة في الاستجابة.

المستخدم اضبط وضع AC على "التدفئة".
Google Assistant هل تريد فعلاً ضبط درجة حرارة مكيف الهواء على 28 درجة؟
المستخدم نعم.
Google Assistantnt يَتِمُّ الْآنْ ضَبْطْ حَرَارَةِ التَّدْفِئَة فِي مُكَيِّفِ الْهَوَاءْ عَلَى 28 دَرَجَة.
الطلب 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.TemperatureSetting",
          "params": {
            "thermostatMode": "heat"
          }
        }]
      }]
    }
  }]
}
الرد 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      },
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
الطلب 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.TemperatureSetting",
          "params": {
            "thermostatMode": "heat"
          },
          "challenge": {
            "ack": true
          }
        }]
      }]
    }
  }]
}
الرد 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      }
    }]
  }
}

pinNeeded

يُنصَح باستخدام تحدّي pinNeeded للأجهزة الأمنية.

يعرض هذا المثال طلبًا أوليًا وردًّا عليه في تحدّي pinNeeded. يعرض المثال ردًّا يتضمّن تحدٍّ pinNeeded، وبالتالي يطلب Assistant تثبيت المنتج. في هذه المرحلة، يمكن للمستخدم تقديم رقم تعريف شخصي غير صحيح أو صالح.

نموذج طلب وردّ لرقم تعريف شخصي غير صحيح أو صالح:

المستخدم افتح الباب.
Google Assistant هل يمكنني الحصول على رمز الأمان؟
طلب
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.LockUnlock",
          "params": {
            "lock": false
          }
        }]
      }]
    }
  }]
}
الرد
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

رمز PIN غير صحيح

يعرض هذا المثال الطلب والردّ في تحدّي challengeFailedPinNeeded. يجب استخدام هذا التحدي بعد فشل اختبار pinNeeded أولي.

عند عرض نوع challengeFailedPinNeeded، يطلب "Assistant" إدخال رمز الأمان مرة أخرى. إذا أجرى المستخدم عددًا كبيرًا جدًا من المحاولات غير الناجحة، يمكنك عرض استجابة خطأ tooManyFailedAttempts. يُرجى الاطّلاع على الردود التي تتضمّن خطأ.

المستخدم 333222
Google Assistant عُذْرًا، رَمْزُ الْأَمَانْ غَيْرْ صَحِيحْ. هل يمكنني الحصول على رمز الأمان؟
طلب
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.LockUnlock",
          "params": {
            "lock": false
          },
          "challenge": {
            "pin": "333222"
          }
        }]
      }]
    }
  }]
}
الرد
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "challengeFailedPinNeeded"
      }
    }]
  }
}

رقم تعريف شخصي صالح

يعرض هذا المثال طلب رقم تعريف شخصي صالح وردّه عليه.

المستخدم 333444
Google Assistant يَتِمُّ الْآنْ فَتْحُ الْبَابْ.
طلب
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.LockUnlock",
          "params": {
            "lock": false
          },
          "challenge": {
            "pin": "333444"
          }
        }]
      }]
    }
  }]
}
الرد
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "isLocked": false,
        "isJammed": false
      }
    }]
  }
}
المستخدم تخفيف الإضاءة في غرفة المعيشة.
Google Assistant هل يمكنني الحصول على رمز الأمان؟
طلب
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.BrightnessAbsolute",
          "params": {
            "brightness": 12
          }
        }]
      }]
    }
  }]
}
الرد
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

الردود على الأخطاء

في ما يلي بعض رموز الخطأ التي يمكن عرضها مع ردودك:

  • challengeFailedNotSetup - يتطلّب هذا الإجراء رمز أمان، ولكن لم يتم إعداده في تطبيق جهازك.
  • tooManyFailedAttempts - عذرًا، لقد تعذّر إتمام عدد كبير جدًا من المحاولات. يُرجى الانتقال إلى تطبيق الجهاز لإكمال هذا الإجراء.
  • pinIncorrect - عذرًا، رمز الأمان غير صحيح.
  • userCancelled - حسنًا

راجِع القائمة الكاملة للأخطاء والاستثناءات.