Как получить городской номер телефона клиента
В данной статье мы расскажем, как получить от клиента имя и городской либо мобильный номер телефона. Полученные данные будут отправляться в личные сообщения администратора бота в канале Telegram.
phone to $var
.Получение данных клиента
Получение имени
-
Создайте новый сценарий для чат-бота и добавьте экран с блоком Текст с приветствием и просьбой ввести имя.
-
На этом же экране нажмите + БЛОК → Еще блоки → Имена.
Раздел Еще блоки содержит готовые интенты.
Готовый интент Имена будет распознавать российские имена, которые содержатся в системном справочнике$NAME
. Когда бот распознает имя, он поместит его в переменную$NAME
.подсказкаИнтент Имена принимает только те имена, которые есть в справочнике$NAME
. Чтобы распознавать имена, которых нет в справочнике, необходимо дополнить сценарий. -
Соедините опцию Любая другая фраза с этим же экраном, чтобы бот спрашивал у клиента имя до тех пор, пока клиент его не напишет.
$rawRequest
.Получение номера телефона
-
От интента Имена создайте второй экран с блоком Текст и напишите в нем просьбу ввести номер телефона.
-
На этот же экран добавьте блок Интенты.
-
Для получения городских и мобильных номеров телефонов скопируйте следующее регулярное выражение:
$regexp<^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$>
подсказкаВнутри$regexp<>
вы можете использовать любое регулярное выражение. Чтобы добавлять свои регулярные выражения, используйте синтаксис их написания на языке Java. -
Вставьте это регулярное выражение в блок Интенты. Сделайте этот пример шаблоном, нажав напротив строки. Иконка изменится на .
У вас получится следующий участок сценария:
Публикация бота в канале Telegram
Перейдите к инструкции по подключению канала Telegram и выполните ее шаги, чтобы опубликовать бота.
После подключения канала Telegram перейдите к следующему шагу этой статьи.
Получение chat_id
Чтобы бот отправлял данные клиентов в ваш аккаунт или группу в Telegram, вам нужно получить chat_id
аккаунта или группы.
Для аккаунта
-
Чтобы получить
chat_id
аккаунта Telegram, создайте в сценарии новый экран и добавьте на него текстовый блок со следующим содержанием:$rawRequest.message.from.id
. -
Поместите экран для получения
chat_id
аккаунта или группы в начало сценария, чтобы он был в левом верхнем углу сценария. Экран будет срабатывать сразу после запуска бота. -
Нажмите Опубликовать и дождитесь сообщения о том, что сценарий опубликован в канале Telegram.
-
Теперь перейдите в Telegram и отправьте боту команду
/start
. Бот пришлет вам нужное значение.предупреждениеСценарий будет работать только в канале Telegram. Если вы напишете боту в тестовом виджете, он вернет ошибку, так как не сможет получить данные из канала Telegram. -
Скопируйте и сохраните себе число, которое прислал бот.
-
Теперь удалите экран, добавленный на шаге 1. Он был нужен только для того, чтобы получить
chat_id
, и больше не понадобится.
Для группы
Если вы хотите отправлять сообщения в группу Telegram, а не в личные сообщения отдельного аккаунта, тогда:
-
Создайте группу в Telegram.
-
Перейдите в диалог с вашим ботом в Telegram.
-
Нажмите → Добавить в группу.
-
Добавьте бота в нужную группу.
-
Проделайте те же шаги, что и для получения
chat_id
для аккаунта, только замените выражение в текстовом блоке на$rawRequest.message.chat.id
, чтобы получитьchat_id
группы:
Отправка данных клиента
Данные от клиента будут отправляться боту через Telegram API.
-
Добавьте в сценарий блок HTTP-запрос и заполните его следующим образом:
- Укажите метод
GET
. - В поле URL вставьте URL следующего вида:
https://api.telegram.org/bot<token>/sendMessage
- Укажите метод
-
В этом URL вместо параметра
<token>
подставьте токен, полученный от бота BotFather при создании бота в Telegram: -
На вкладке BODY укажите JSON-объект:
- В поле
chat_id
вставьте идентификатор, полученный на предыдущем шаге. - В поле
text
добавьте текст с переменными, где содержится информация о клиенте, которую вы хотите отправить.
Пример JSON-объекта:
{
"chat_id": "113468479",
"text": "Имя клиента: $NAME.name, номер телефона: $queryText"
}Здесь
$NAME.name
— переменная, в которой хранится имя клиента.подсказкаВ переменной$queryText
хранится полный текст ответа клиента на последний запрос. Если вы хотите сохранить ответ клиента на весь сценарий, создайте новую переменную и присвойте ей значение переменной$queryText
.Запрос для отправки данных клиента должен выглядеть следующим образом:
- В поле
-
Соедините вариант Завершен успешно с новым экраном и напишите на нем сообщение об успешной отправке данных.
-
Вариант Завершен с ошибкой соедините с экраном, на который добавьте текст
Не удалось получить номер телефона. Ошибка $httpStatus.
Если возникнет ошибка и бот пойдет по этой ветке сценария, он выведет сообщение с кодом ошибки. Это поможет вам понять причину ошибки.подсказкаПодобное сообщение рекомендуется добавлять только при тестировании бота. После того как вы протестировали бота и убедились, что он работает корректно, продумайте, какое сообщение должен получить клиент в случае ошибки.
Тестирование отправки данных
Теперь можете протестировать работу сценария.
Для начала нажмите Опубликовать, чтобы изменения в сценарии отправились в Telegram. После этого нажмите Тестировать.
Если вы используете один и тот же аккаунт при создании и при тестировании бота, тогда после получения данных бот пришлет их в тот же диалог:
chat_id
которого вы указали в запросе.Когда реальные клиенты будут отправлять данные боту, он не будет выводить им сообщение с их данными, а отправит его в указанный чат. Чтобы убедиться в этом, вы можете отправить сообщение боту с другого аккаунта.
Возможные ошибки
Если при попытке протестировать сценарий в Telegram бот не реагирует на команду /start
, возможно, вы не опубликовали бота в этом канале. Убедитесь, что корректно проделали шаги по публикации бота.
Если при отправке данных клиента возникнет ошибка, бот выведет сообщение с кодом ошибки в чат.
Ошибка -1
Данная ошибка возникает, если вы неправильно оформили HTTP-запрос.
Проверьте, корректно ли вы указали URL. В нем не должно присутствовать пробелов, в том числе в начале и конце URL. Также убедитесь в отсутствии других лишних символов.
Ошибка 400
Эта ошибка также говорит о неверном оформлении HTTP-запроса.
В первую очередь проверьте синтаксис тела запроса на вкладке BODY. В запросе не должны одновременно присутствовать одинарные ' '
и двойные " "
кавычки. Также убедитесь, что в JSON-объекте не пропущены фигурные скобки или запятые.
Если ошибок в JSON-объекте нет, попробуйте удалить Telegram-бота в BotFather, создать бота заново и использовать новый токен в HTTP-запросе.
Дополнение сценария
Системный справочник $NAME
, при помощи которого вы запрашиваете имя клиента, содержит ограниченное количество имен.
Вы можете скачать справочник и посмотреть его содержимое, перейдя на вкладку Сущности → Системные справочники и нажав Скачать под справочником $NAME
.
В текущем сценарии, если имя клиента не содержится в системном справочнике $NAME
, бот будет снова спрашивать имя у клиента.
Чтобы избежать этой ситуации и научить бота принимать любые имена с первого раза, дополните сценарий.
-
От готового интента Имена и от ветки Любая другая фраза на первом экране создайте связь с новым экраном. Добавьте на него блок Условия со следующим содержанием:
$name = $NAME ? $NAME.name : $queryText
Любой введенный клиентом текст с охранится в переменную
$queryText
до следующего запроса.Если бот найдет в сообщении клиента сущность
$NAME
, он присвоит переменной$name
значение из справочника. Если бот не найдет сущность в сообщении, в переменную$name
он запишет значение$queryText
. -
Свяжите условие с экраном, на котором вы запрашиваете номер телефона клиента.
-
Отредактируйте HTTP-запрос.
Вкладка BODY должна содержать следующий JSON-объект:
{
"chat_id": 123456789,
"text": "Имя клиента: $name, номер телефона: $queryText"
}
Теперь бот будет принимать за имя любой текст, набранный клиентом в ответ на запрос имени.
Пример диалога с клиентом:
Сообщение, которое бот отправит на указанный chat_id
:
$regexp<^[а-яА-Я]{2,15}$>
будет принимать слова длиной от двух до пятнадцати символов, состоящие из букв русского алфавита.Готовый сценарий
Так выглядит весь сценарий: