Подтверждение номера телефона по смс

В данной статье мы предлагаем вам готовый сценарий, позволяющий подтвердить номер телефона пользователя по СМС.
Что делает этот сценарий:
  • Запрашивает номер телефона у пользователя и проверяет вводимые данные на соответствие формату номера.
  • Формирует и отправляет на присланный номер СМС сообщение с кодом.
  • Проверяет введенный пользователем код на корректность (суммарно 4 попытки ввода кода).
  • Если прислан корректный код, сценарий продолжает работу, если некорректный, переводит на оператора.
Данный готовый сценарий - это копия отдельного сценария, поэтому при его импорте ваши остальные сценарии останутся нетронутыми. Однако, если у вас есть переменные с кодом PHONE и VERIFICATION_CODE, то они перезапишутся на тип "Телефон" и "строка" соответственно. В любом случае, рекомендуется всегда создавать резервную копию чат-бота перед любым импортом, чтобы вы имели возможность быстро вернуться к изначальным настройкам.
Для данного сценария вам необходим доступ к SMS.RU. Регистрация на sms.ru (10% скидка на первый месяц)

Чтобы отправлять клиентам SMS-сообщения, вам нужно указать api_id от SMS.ru. Для этого перейдите в настройки чат-бота (иконка шестерёнки в главном меню) и выберите вкладку SMS.




Чтобы загрузить копию сценария, скачайте бекап по ссылке выше, в приложении выберите "Импорт отдельного сценария".



Нажмите на "+ Укажите файл для импорта с расширением .issb или .zip" и выберите скаченный бекап.





Далее указана инструкция на случай, если вы хотите настроить данный сценарий вручную или понять его принцип.

Чтобы подтвердить номер телефона, нам предварительно нужно получить данный телефон. Наши шаги будут следующими:
  • Запрашиваем номер телефона у клиента с помощью типа ответа "Ждать произвольного ответа пользователя"
  • Проверяем корректность введённого номера телефона
  • Формируем случайный код с помощью действия "Заполнение переменной"
  • Отправляем на номер телефона SMS с полученным кодом с помощью действия "Отправка смс"
  • После получения ответа, проверяем корректность введённого кода
  • Если код правильный - сценарий продолжается
  • Если код неправильный - после четырёх неудачных попыток переводим клиента на оператора.


Исходя из списка наших шагов, мы можем понять, что нам нужно где-то хранить:
  • Телефон клиента
  • Проверочный код

Для этого откроем настройки чат-бота и перейдём на вкладку "Переменные".



Нажмём "Добавить переменную".

Для телефона укажем следующие данные:
  • Название - Телефон
  • Код - PHONE
  • Тип данных - Телефон



Для проверочного кода укажем:
  • Название - Проверочный код
  • Код - VERIFICATION_CODE
  • Тип данных - Строка



По итогу получаем две переменные разных типов.




Далее нам нужно создать сценарий, где мы будем проверять номер телефона.

Нажмите на "Создать сценарий".



Отроется редактор с тремя базовыми узлами, которые можно удалить. Давайте сразу сохраним сценарий, нажав на зелёную кнопку и выбрав "Сохранить как...".



Дадим ему звучное название, например "Запрос и проверка номера телефона".




Теперь мы можем настроить наши шаги.

Запрашиваем номер телефона у клиента с помощью типа ответа "Ждать произвольного ответа пользователя"

Откройте на редактирование начальный узел.

Поменяйте ему название, чтобы было понятно, что именно мы делаем в данном узле.

В секции "Ответ пользователя" выбираем тип ответа "Ждать произвольного ответа пользователя" и указываем следующие настройки:
  • Проверить ответ на соответствие формату - Телефон.
  • Очистить данные - включаем параметр.
  • Показать кнопку отправки контакта в мессенджерах - включаем параметр, если у вас указан токен Viber или Telegram в настройках чат-бота.
  • Текст, отправляемый перед запросом номера - данный текст появится, только если у вас указан токен Viber или Telegram, и если клиент напишет именно в один из этих мессенджеров. Можете оставить текст по умолчанию.
  • Записать ответ в переменную - выбираем ранее созданную переменную с кодом PHONE.
  • Действие после корректного ответа пользователя - пока пропустим, вернёмся к этому параметру позже.
  • Действие после некорректного ответа пользователя:
    • Ожидать ответ - 3 раза
    • Отправить сообщение при ошибке - дайте клиенту понять, что номер телефона введён не правильно.



В секции "Действия бота" добавим действие "Отправить текст", где попросим клиента прислать нам номер телефона.



 Итак, первый шаг почти создан. Позже мы к нему вернёмся.




Проверяем корректность введённого номера телефона

В начальном узле в ответе пользователя у нас было два раздела:
  • Действие после корректного ответа пользователя
  • Действие после некорректного ответа пользователя

Где мы можем указать узел на который чат-бот сделает переход в случае, если клиент передаст нам неправильный номер или правильный.

Давайте сперва создадим узел, куда чат-бот перейдёт в случае некорректного номера (после трёх неудачных попыток клиента указать номер).

Нажмём "Добавить узел".
Зададим ему понятное название. 

Создадим действие "Отправить текст", где объясним клиенту, что так как он ввёл данные неправильно - мы переводим его на оператора.



Далее создадим действие "Перевести на оператора", где переведём диалог в очередь.



В итоге получаем простой узел из двух действий:




Теперь создадим узел на который чат-бот перейдёт в случае корректного номера телефона.
Зададим ему говорящее название, а действия пока создавать не будем. Вернёмся к нему позже.



И так, у нас есть два узла - две ветки возможных событий - корректный и некорректный номер телефона.
Давайте вернёмся в начальный узел к настройкам ответа.

В разделе "Действие после корректного ответа пользователя" в параметре "Запустить другой сценарий/узел" укажем текущий сценарий и узел, отвечающий за ветку с корректным номером.

В разделе "Действие после некорректного ответа пользователя" в параметре "Запустить другой сценарий/узел" укажем текущий сценарий и узел, отвечающий за ветку с некорректным номером.



Сохраним узел.

И получим следующую картину.



Ветка с некорректным номером у нас закончена, так как после перевода на оператора чат-бот перестанет отвечать клиенту. Теперь нам нужно продолжить ветку с корректным номером.


Формируем случайный код с помощью действия "Заполнение переменной"

Вернёмся к нашему узлу "Корректный номер телефона".

Создадим в нём действие "Заполнение переменной" со следующими параметрами:
Переменная - указываем ранее созданную переменную с кодом VERIFICATION_CODE.
Тип заполнения - случайное значение.
Длина - так как это проверочный код, то не рекомендуется использовать длинные коды, 5-8 символов будет достаточно.
Набор символов - если вы хотите использовать проверочный код в виде одних цифр, то укажите "0-9", если же вы хотите совместить цифры с английскими буквами, то укажите "0-9" и "A-Z".




Отправляем на номер телефона SMS с полученным кодом с помощью действия "Отправка смс"

Номер телефона мы получили, проверочный код сформировали. Теперь нужно передать проверочный код клиенту.

В том же узле добавим действие "Отправка смс" с параметрами:
  • Номер телефона из переменной - указываем нашу переменную с кодом PHONE.
  • Отправляемый текст - вставим туда код переменной с кодом VERIFICATION_CODE.



Обратите внимание, если при создании действия вы видите данную надпись:



Значит вы неправильно или вовсе не настроили доступ к SMS.ru
Без него клиент не получит сообщение.


После получения ответа, проверяем корректность введённого кода

Для этого сначала создадим новый узел, который будет переводить на оператора в случае 4-х неудачных попыток ввода проверочного кода.

Зададим ему название, например "Не удалось подтвердить номер телефона".

Создадим в нём действие "Отправить текст", где укажем причину перевода на оператора.



Далее переведём диалог в очередь.



Получим простой узел из двух действий, который будет завершать диалог с чат-ботом, так как после перевода в очередь бот перестанет реагировать на сообщения клиента.




Теперь создадим новый узел, который будет отвечать за некорректный проверочный код.

Зададим ему соответствующее название "Некорректный проверочный код".

В самом низу настроек узла включим параметр "Считать количество заходов в этот узел".



Сохраним узел и сценарий, чтобы у нас появилась новая переменная - Счётчик заходов в узел "Некорректный проверочный код".


Вернёмся в наш узел.

Вспоминаем шаги, где мы хотели переводить диалог на оператора только по истечению 4-х неудачных попыток ввода проверочного кода.

Поэтому создаём действие "Запустить другой сценарий/узел", где укажем текущий сценарий, и в качестве узла - наш предыдущий узел "Не удалось подтвердить номер телефона", где мы переводим на оператора.

В параметре "Условие выполнения действия" нажмём на плюсик ниже и добавим условие "Значение переменной" с параметрами:
  • Переменная - недавно нами созданная переменная -  Счётчик заходов в узел "Некорректный проверочный код".
  • Сравнение - больше трёх.



Получаем следующее действие. Не забываем дать ему понятное нам название.



Итак, если счётчик будет больше 3-х- запустится другой узел сценария, а действия расположенные ниже в данном узле не выполнятся.

Если же счётчик меньше или равен 3-м, то продолжаем выполнение узла.

В тот же узел добавим действие "Отправить текст", где уведомим клиента о том, что код введён неправильный.



В секции "Ответ пользователя" выберем тип ответа "Задать варианты ответов вручную" и дадим клиенту один вариант "Запросить новый проверочный код". 

Разрешим числа для ответов, на случай если планируем использовать чат-бота в мессенджерах, не поддерживающих клавиатуру.

В параметре "При ответе не по списку" выберем "Продолжить отработку без ожидания выбора". В нашем случае это значит, что если клиент напишет "1" или "Запросить новый проверочный код", то запустится связанный с данным ответом узел. Если же он напишет любой другой текст, то запустится секция "Действия бота после ответа".




Создадим новый узел, который будет отвечать за действия после того, как клиент введёт правильный код.

Назовём его "Корректный проверочный код".

Добавим действие "Отправить текст", в котором сообщим клиенту, что номер телефона успешно подтверждён.



В итоге получаем простой узел с одним действием.



Далее в этом узле после действия отправки текста рекомендуется добавить действие "Запустить другой сценарий/узел" и сменить сценарий, который позволит клиенту продолжить общаться с чат-ботом. Не рекомендуется продолжать добавлять узлы, не связанные с номером телефона в этом же сценарии. Так как гораздо проще контролировать логику бота, когда всё разбито по разным сценариям.



Давайте создадим ещё один узел, который будет проверять корректность введённого клиентом проверочного кода.

Зададим ему название "Проверка проверочного кода".

Добавим действие "Запустить другой сценарий/узел".

В данном действии добавим условие "Текст сообщения содержит" и вставим код переменной VERIFICATION_CODE, в которую мы сохранили проверочный код.



Укажем параметры:
  • Сценарий - Текущий
  • Начальный узел - Корректный проверочный код

Т.е. если сообщение будет содержать проверочный код, указанный в переменной VERIFICATION_CODE - чат-бот переведёт клиента в узел "Корректный проверочный код" и действия, указанные ниже, не выполнятся.



Добавим ещё одно действие "Запустить другой сценарий/узел".

Укажем параметры:
  • Сценарий - Текущий
  • Начальный узел - Некорректный проверочный код

Т.е. если текст сообщения не будет содержать проверочный код - чат-бот запустит узел "Некорректный проверочный код".



Получаем узел с двумя действиями.




Теперь давайте снова вернёмся в узел "Некорректный проверочный код" и в секции "Действия бота после ответа" добавим действие "Запустить другой сценарий/узел".

Укажем параметры:
  • Сценарий - Текущий
  • Начальный узел - Проверка проверочного кода

Т.е. если текст сообщения не будет равен ответу "Запросить новый проверочный код", то запустится узел проверки проверочного кода.



Ответ "Запросить новый проверочный код" свяжем с узлом "Корректный номер телефона", который формирует новый проверочный код.

Финальный узел получается следующим.





Вернёмся к узлу "Корректный номер телефона".

В секции "Действия бота после ответа" добавим действие "Запустить другой сценарий/узел".

Укажем параметры:
  • Сценарий - Текущий
  • Начальный узел - Проверка проверочного кода

Т.е. после отправки СМС чат-бот ожидает ответ от клиента.
После того как ответ будет получен - чат-бот запускает секцию "Действия бота после ответа" в которой будет переход на узел, проверяющий ответ клиента.



В том же узле в секции "Корректный номер телефона" добавим действие "Заполнение переменной" с параметрами:
Переменная - счётчик заходов в "Некорректный проверочный код".
Тип заполнения - Значение.
Заполнить из - Указать значение.
Значение - 0.

Т.е. при формировании нового проверочного кода мы обнуляем счётчик, чтобы у клиента было снова четыре попытки указать код.



Получаем следующий финальный узел:



И наш сценарий готов.



Не забудьте, что узел "Корректный проверочный код" - это успешное прохождение данного сценария и в него следует добавить действия, которые помогут боту продолжить общение с клиентом.