درستی‌سنجی ثانویه کاربر

درستی‌سنجی ثانویه کاربر به شما امکان می‌دهد امنیت دومرحله‌ای را به فرمان‌های گفتاری اضافه کنید. این کار به شما امکان می‌دهد برای کنش‌های خاصی مثل خاموش کردن دوربین امنیتی یا باز کردن در، امنیت بیشتری اضافه کنید. درستی‌سنجی ثانویه کاربر به ویژگی خاصی از دستگاه وابسته نیست و به شما امکان می‌دهد تصمیم بگیرید چه زمانی Google Assistant چالش صادر کند. برای مثال، می‌توانید انتخاب کنید که برای ویژگی OnOff در دوربین امنیتی چالش صادر شود، اما برای ویژگی OnOff در چراغ چالش صادر نشود. همچنین می‌توانید Assistant را برای صدور چالش در شرایط خاص برای همان کنش داشته باشید. برای مثال، می‌توانید درخواست کنید که اگر جاکلیدی NFC در مجاورت در نیست، Assistant درخواست چالش برای باز کردن در صادر کند، اما اگر جاکلیدی موجود است، چالش صادر نکند.

Assistant می‌تواند دو نوع چالش صادر کند - تأیید صریح یا شماره شناسایی شخصی (پین). این کار یک بلوک چالش به هدف‌های QUERY و EXECUTE ارسال‌شده از Assistant به کنش شما اضافه می‌کند و پاسخ خطای challengeNeeded را می‌پذیرد. سپس Assistant درخواست هدف را با داده‌های چالش در بلوک چالش به کنش شما برمی‌گرداند. سپس می‌توانید داده‌های چالش را اعتبارسنجی کنید تا مشخص شود آیا کاربر پاسخ امنیتی صحیح را ارائه داده است یا نه.

Assistant از کادر گفتگو برای ارائه چالش استفاده می‌کند، اما اگر از Assistant در سطوح غیرصوتی استفاده کنید، پین و تأییدیه‌ها روی صفحه انجام می‌شود.

زمان استفاده از درستی‌سنجی ثانویه کاربر

می‌توانید درستی‌سنجی ثانویه کاربر را برای هر نوع دستگاه یا ویژگی فعال کنید. بااین‌حال، برای دریافت گواهینامه ادغام، باید درستی‌سنجی ثانویه کاربر را برای برخی‌از انواع و ویژگی‌های دستگاه‌های حساس به امنیت پیاده‌سازی کنید.

درستی‌سنجی ثانویه کاربر بااستفاده از نوع چالش pinNeeded برای ترکیب‌های نوع دستگاه و ویژگی زیر الزامی است:

  • ویژگی OnOff اگر نوع دستگاه CAMERA باشد.
  • ویژگی OpenClose اگر نوع دستگاه DOOR، GARAGE، GATE، یا WINDOW باشد.
  • ویژگی LockUnlock هنگام باز کردن قفل.
  • ویژگی ArmDisarm هنگام غیرفعال کردن یا لغو غیرفعال‌سازی.
  • ویژگی Reboot،‏ SoftwareUpdate، یا NetworkControl اگر نوع دستگاه NETWORK یا ROUTER باشد.

نوع چالش ackNeeded برای ویژگی TemperatureSetting الزامی است اگر نوع دستگاه AC_UNIT باشد و ادغام در ژاپن باشد.

انواع چالش‌های پشتیبانی‌شده

انواع چالش‌های درستی‌سنجی ثانویه کاربر که پشتیبانی می‌شوند عبارت‌اند از:

  • بدون چالش - درخواست و پاسخی که از چالش درستی‌سنجی ثانویه کاربر استفاده نمی‌کند.
  • ackNeeded - درستی‌سنجی ثانویه کاربر که به تأیید صریح (بله یا نه) نیاز دارد و می‌تواند از حالت‌های ویژگی به‌عنوان بازخورد پاسخ نیز استفاده کند. این نوع چالش برای دستگاه‌ها و ویژگی‌های امنیتی توصیه نمی‌شود.
  • pinNeeded - درستی‌سنجی ثانویه کاربر که به شماره شناسایی شخصی (پین) نیاز دارد و برای دستگاه‌ها و ویژگی‌های امنیتی ایده‌آل است.

بدون چالش

این مثال درخواست و پاسخ موفق EXECUTE را بدون چالش برای روشن کردن چراغ‌ها نشان می‌دهد.

کاربر چراغ‌ها را روشن کنید.
Google Assistant بسیار خوب، ۳ چراغ را روشن می‌کنم.
درخواست
{
  "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 simple

این مثال درخواست و پاسخ ساده‌ای را با چالش ackNeeded برای کم کردن نور چراغ و تأیید کم کردن نور چراغ نشان می‌دهد.

کاربر نور چراغ اتاق نشیمن را کم کن.
Google Assistant درحال کم کردن نور چراغ اتاق نشیمن. مطمئن هستید؟
کاربر بله.
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": "ackNeeded"
      }
    }]
  }
}
درخواست ۲
{
  "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
          }
        }]
      }]
    }
  }]
}
پاسخ ۲
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS"
    }]
  }
}

ackNeeded با وضعیت‌های مشخصه

اصالت‌سنجی تأیید کاربر ثانویه که می‌تواند از حالت‌ها برای یک مشخصه استفاده کند. برای مثال، اگر با ویژگی TemperatureSetting کار می‌کنید و هر دو thermostatMode و thermostatTemperatureSetpoint تنظیم شده‌اند، Assistant می‌تواند بپرسد مطمئنید می‌خواهید گرمایش دستگاه تهویه مطبوع را روی ۲۸ درجه تنظیم کنید؟

همچنین می‌توانید وضعیتی را در پاسخ بگنجانید تا Assistant کنش خاصی را براساس درخواست ارائه‌شده انجام دهد.

ویژگی‌ها و حالت‌های زیر از ackNeeded با حالت‌های ویژگی پشتیبانی می‌کنند. فهرست کردن یک ویژگی خاص نشان می‌دهد که همه حالت‌های آن پشتیبانی می‌شود.

  • ArmDisarm
    • از نوع چالش ackNeeded برای فعال کردن یا لغو فعال کردن دستگاه استفاده کنید، اما برای عملکردهای غیرفعال کردن و لغو غیرفعال کردن، نوع چالش pinNeeded الزامی است.
  • Fill
  • LockUnlock
    • از نوع چالش ackNeeded برای قفل کردن دستگاه و از نوع چالش pinNeeded برای باز کردن قفل استفاده کنید.
  • OnOff
    • on
    • از نوع چالش ackNeeded برای این ویژگی استفاده کنید. وقتی از این ویژگی با دستگاه‌های CAMERA استفاده می‌شود، نوع چالش pinNeeded الزامی است.
  • OpenClose
    • از نوع چالش ackNeeded برای این ویژگی استفاده کنید. وقتی از این ویژگی با دستگاه‌های DOOR،‏ GARAGE،‏ GATE، یا WINDOW استفاده می‌شود، نوع چالش pinNeeded الزامی است.
  • Scene
  • TemperatureSetting
    • thermostatMode
    • thermostatTemperatureSetpoint
    • thermostatTemperatureSetpointHigh
    • thermostatTemperatureSetpointLow

این مثال درخواست و پاسخی را با چالش ackNeeded نشان می‌دهد که از وضعیت مشخصه استفاده می‌کند. این دستور حالت دستگاه تهویه مطبوع را به گرمایش تغییر می‌دهد و دما را روی ۲۸ درجه تنظیم می‌کند. سپس، Assistant از کاربران می‌خواهد تأیید کنند که گرمایش روشن شود و دما روی ۲۸ درجه تنظیم شود، زیرا thermostatTemperatureSetpoint 28 به‌عنوان وضعیت در پاسخ برگردانده شده است.

کاربر حالت تهویه مطبوع را روی گرما تنظیم کن.
Google Assistant مطمئنید می‌خواهید گرمایش دستگاه تهویه مطبوع را روی ۲۸ درجه تنظیم کنید؟
کاربر بله.
Google Assistant درحال تنظیم گرمایش دستگاه تهویه مطبوع روی ۲۸ درجه.
درخواست ۱
{
  "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"
          }
        }]
      }]
    }
  }]
}
پاسخ ۱
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      },
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
درخواست ۲
{
  "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
          }
        }]
      }]
    }
  }]
}
پاسخ ۲
{
  "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"
      }
    }]
  }
}

پین اشتباه

این مثال درخواست و پاسخ را با چالش 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"
      }
    }]
  }
}

پاسخ‌های خطا

این‌ها برخی‌از کدهای خطایی هستند که ممکن است با پاسخ‌های شما برگردانده شوند:

  • tooManyFailedAttempts - متأسفیم، تعداد تلاش‌های ناموفق بیش‌از حد بوده است. لطفاً برای تکمیل این کنش، به برنامه دستگاهتان بروید.
  • pinIncorrect - متأسفیم، کد امنیتی نادرست است.
  • userCancelled - Ok

فهرست کامل خطاها و استثناها را ببینید.