تأیید کاربر ثانویه به شما امکان میدهد امنیت عامل دوم را به دستورات صوتی اضافه کنید. این به شما امکان میدهد امنیت بیشتری را برای اقدامات خاصی مانند خاموش کردن دوربین امنیتی یا باز کردن در اضافه کنید. تأیید کاربر ثانویه به یک ویژگی خاص دستگاه وابسته نیست که به شما امکان میدهد تصمیم بگیرید چه زمانی Google Assistant چالشی را ایجاد کند. به عنوان مثال، میتوانید انتخاب کنید که برای ویژگی OnOff برای یک دوربین امنیتی چالشی ایجاد کنید، اما برای ویژگی OnOff برای یک چراغ چالشی ایجاد نکنید. همچنین میتوانید Assistant بخواهید که در موقعیتهای خاص برای همان اقدام، چالشهایی را ایجاد کند. به عنوان مثال، میتوانید از Assistant بخواهید که اگر یک کلید NFC در نزدیکی آن در نیست، درخواست چالشی برای باز کردن در صادر کند، اما اگر کلید NFC وجود دارد، چالشی ایجاد نکند.
 Assistant میتواند دو نوع چالش صادر کند - تأیید صریح یا شماره شناسایی شخصی (PIN). این یک بلوک چالش به اهداف QUERY و EXECUTE ارسال شده از Assistant به اقدام شما اضافه میکند و پاسخ خطای challengeNeeded را میپذیرد. Assistant سپس درخواست هدف را به همراه دادههای چالش در بلوک چالش به اقدام شما برمیگرداند. سپس میتوانید دادههای چالش را اعتبارسنجی کنید تا مشخص شود که آیا کاربر پاسخ امنیتی صحیحی داده است یا خیر.
Assistant از طریق دیالوگ، چالش را مطرح میکند، اما اگر Assistant روی سطوح غیرصوتی استفاده کنید، پین و تأییدها روی صفحه انجام میشوند.
انواع دستگاههای پشتیبانیشده
تأیید هویت ثانویه کاربر در همه انواع دستگاهها پشتیبانی میشود.
ویژگیهای دستگاه پشتیبانیشده
تأیید ثانویه کاربر برای همه ویژگیهای دستگاه پشتیبانی میشود.
انواع چالش پشتیبانی شده
انواع چالشهای تأیید کاربر ثانویه پشتیبانیشده عبارتند از:
- بدون چالش - درخواست و پاسخی که از چالش تأیید کاربر ثانویه استفاده نمیکند.
 - ackNeeded - یک تأیید هویت ثانویه کاربر که نیاز به تأیید صریح (بله یا خیر) دارد و همچنین میتواند از حالتهای ویژگی به عنوان بازخورد پاسخ استفاده کند. این نوع چالش برای دستگاهها و ویژگیهای امنیتی توصیه نمیشود.
 - pinNeeded - یک تأیید هویت ثانویه کاربر که به شماره شناسایی شخصی (PIN) نیاز دارد، که برای دستگاهها و ویژگیهای امنیتی ایدهآل است.
 
بدون چالش
 این مثال یک درخواست و پاسخ 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 برای کم کردن نور و تأیید برای کم کردن نور نشان میدهد.
| کاربر | نور اتاق نشیمن را کم کنید. | 
| 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
 -  
currentArmLevel -  
currentStatusReport - Fill
 - LockUnlock
 - OnOff
 -  
on - OpenClose
 - Scene
 - TemperatureSetting
 -  
thermostatMode -  
thermostatTemperatureSetpoint -  
thermostatTemperatureSetpointHigh -  
thermostatTemperatureSetpointLow 
 این مثال یک درخواست و پاسخ با چالش ackNeeded را نشان میدهد که از یک حالت ویژگی (trait state) استفاده میکند. این حالت، حالت تهویه مطبوع را به گرما تغییر میدهد و دما را روی ۲۸ درجه تنظیم میکند. سپس، 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 برمیگرداند، بنابراین 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 را برگردانید. به پاسخهای خطا مراجعه کنید.
| کاربر | ۳۳۳۲۲۲ | 
| 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" } }] } }
پین معتبر
این مثال درخواست و پاسخ یک پین معتبر را نشان میدهد.
| کاربر | ۳۳۳۴۴۴ | 
| 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 - متاسفیم، تلاشهای ناموفق زیادی انجام شده است. لطفاً برای تکمیل آن اقدام به برنامه دستگاه خود بروید.
 - پین نادرست - متاسفیم، کد امنیتی نادرست است.
 - کاربر لغو شد - باشه
 
لیست کامل خطاها و استثنائات را مشاهده کنید.