Потребность

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

Решение

Так выглядит весь сценарий:



Как это работает

Получаем имя

Создаем первый экран, добавляем в него два блока “Текст”. В первый текстовый блок помещаем приветствие, а во втором запрашиваем имя. На этот же экран добавим блок “Фразы”, чтобы получить имя от пользователя. Для этого используем нашу системную сущность $NAME.

Системная сущность $NAME принимает только те имена, которые есть в её словаре. Смотрите вариант дополненного сценария в конце статьи.





Вы можете получить имя из каналов, содержащих имя, с помощью переменной $rawRequest - читайте здесь.

Получаем номер телефона

Создаем второй экран и добавляем на него блок “Текст”, в который помещаем просьбу ввести номер телефона. Также на этот экран добавляем блок “Фразы”. Так как наша системная сущность $PHONE на данный момент работает только с российскими мобильными номерами, мы воспользуемся регулярным выражением для валидации городского номера. Выглядеть регулярное выражение будет так: $regexp<^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$> Оно будет также валидировать и мобильные номера. Внутри $regexp<> вы можете использовать любое регулярное выражение. Вы можете самостоятельно создать регулярное выражение, изучив уроки по написанию регулярных выражений на языке Java.

Обязательно делаем эту фразу шаблоном, то есть, переключаем кавычки на значок @. Наш блок “Фразы” будет выглядеть следующим образом:





Опубликуйте своего бота в канал Telegram

Пожалуйста, перейдите на эту статью и следуйте инструкции, чтобы опубликовать бота в канал Telegram.

Если вы уже добавили канал Telegram, переходите к следующему пункту.

Получение chat_id

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

Чтобы получить chat_id, создайте в сценарии новый экран с текстом:

$rawRequest.message.from.id

Если вы хотите отправлять сообщения в группу в телеграме, а не себе в личные сообщения, то создайте группу, затем перейдите в своего бота в телеграме, нажмите на три точки и выберите "Добавить в группу". Добавьте бота в нужную группу и вместо $rawRequest.message.from.id в сценарии используйте $rawRequest.message.chat.id, чтобы получить chat_id группы.

Поместите этот экран в начало сценария, чтобы этот экран был в левом верхнем углу. Таким образом, этот экран будет первым при запуске бота.



Нажмите Опубликовать и дождитесь сообщения о том, что сценарий опубликован на канале Телеграм.




Затем обратитесь к своему боту, напишите /start, и бот пришлет вам нужное значение.



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

Скопируйте и сохраните себе число, которое прислал бот.



Удалите экран с текстом $rawRequest.message.from.id. Он больше не нужен.

Отправка данных

Следующий шаг — отправляем данные, полученные от клиента. Для этого в сценарии создайте блок HTTP-запрос:

метод Get
URL будет выглядеть таким образом: https://api.telegram.org/bot<token>/sendMessage

В этом URL вместо <token> нужно ввести токен, полученный от бота BotFather на том этапе, когда вы создавали канал в телеграме.



Поле BODY будет содержать следующее:

{
"chat_id": 123456789,
"text": "Имя клиента: $NAME.name, номер телефона: $queryText"
}


где chat_id - число, которое вы получили в пункте 4.



Итак, мы оформили Http-запрос для отправки данных.

От логики "Завершен успешно" добавляем связь к новому экрану, содержащему сообщение об успешной отправке данных. Например, “Ваши данные успешно отправлены!”

От логики “Завершен с ошибкой” делаем связь с экраном, содержащим текстовый блок “Ошибка $httpStatus”. Данный блок поможет нам понять, в чём неполадка, если http-запрос не будет успешным.



Теперь мы можем протестировать: запускаем тест и видим, что нам приходит нужная информация в телеграм:



Обратите внимание, что бот будет присылать вам сообщение в вашу беседу с ботом.
Если вы ожидаете, что вам придет личное сообщение от какого-то другого аккаунта, вас может смутить такое поведение. Но в дальнейшем, когда другие люди будут писать боту, и вы будете получать сообщения от бота, вам будет более понятно, что происходит. Попросите другого человека прислать боту своё имя и телефон, и тогда вы получите сообщение от бота.

Возможные неполадки:

При тестировании сценария вы получаете ошибку.

Обратите внимание на пункт 3 данной инструкции. Если ваш бот не опубликован в канале Telegram, вы не сможете реализовать этот функционал.

"Ошибка -1"

Проверьте правильность URL в http-запросе. Возможно, в самом URL или в конце URL есть пробел.

"Ошибка 400"

Проверьте правильность оформления http-запроса. Попробуйте удалить телеграм-бота в BotFather, создать заново и использовать заново сгенерированный токен.

Проверьте правильность оформления поля Body (синтаксис):

{
"chat_id": 123456789,
"text": "Имя клиента: $NAME.name, номер телефона: $queryText"
}




Дополняем сценарий

Системная сущность $NAME имеет ограниченный словарь.

Вы всегда можете просмотреть словарь системных сущностей:



В случае, если имя клиента не содержится в словаре системной сущности $NAME, по созданному нами сценарию бот будет снова спрашивать имя у клиента. Чтобы избежать этой ситуации и принимать необычные имена, дополним сценарий.

От первого экрана с приветствием свяжите $NAME и "Любая друга фраза" с новым экраном, на который добавьте блок "Условия".

В блоке "Условия" пропишите следующее:

$name = $NAME ? $NAME.name : $queryText



Свяжите данный блок условий с блоком, на котором мы запрашиваем номер пользователя:



Отредактируйте http-запрос.

Поле Body должно содержать следующее:

{
"chat_id": 123456789,
"text": "Имя клиента: $name, номер телефона: $queryText"
}




Готово. Теперь бот будет принимать за имя любой текст, набранный пользователем в ответ на вопрос "Как вас зовут?"





Вы также можете использовать регулярные выражения для валидации имени. Например, регулярное выражение $regexp<^[а-яА-Я]{2,15}$> будет принимать слова, состоящие из букв русского алфавита, длиной от двух до пятнадцати символов.
Была ли эта статья полезна?
отменить
Спасибо!