Перейти к основному содержимому

Как получить городской номер телефона клиента

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

подсказка
Если вам нужно получать только мобильные номера телефонов, вы можете использовать готовый интент Номер телефона или блок phone to $var.

Получение данных клиента

Получение имени

  1. Создайте новый сценарий для чат-бота и добавьте экран с блоком Текст с приветствием и просьбой ввести имя.

  2. На этом же экране нажмите + БЛОКЕще блокиИмена.
    Раздел Еще блоки содержит готовые интенты.
    Готовый интент Имена будет распознавать российские имена, которые содержатся в системном справочнике $NAME. Когда бот распознает имя, он поместит его в переменную $NAME.

    подсказка
    Интент Имена принимает только те имена, которые есть в справочнике $NAME. Чтобы распознавать имена, которых нет в справочнике, необходимо дополнить сценарий.

    Интент Имена в меню блоков

    Экран с интентом

  3. Соедините опцию Любая другая фраза с этим же экраном, чтобы бот спрашивал у клиента имя до тех пор, пока клиент его не напишет.

    Связь с экраном

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

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

  1. От интента Имена создайте второй экран с блоком Текст и напишите в нем просьбу ввести номер телефона.

  2. На этот же экран добавьте блок Интенты.

  3. Для получения городских и мобильных номеров телефонов скопируйте следующее регулярное выражение:

    $regexp<^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$>
    подсказка
    Внутри $regexp<> вы можете использовать любое регулярное выражение. Чтобы добавлять свои регулярные выражения, используйте синтаксис их написания на языке Java.
  4. Вставьте это регулярное выражение в блок Интенты. Сделайте этот пример шаблоном, нажав напротив строки. Иконка изменится на .

    Шаблон с регулярным выражением

    У вас получится следующий участок сценария:

    Участок сценария

Публикация бота в канале Telegram

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

После подключения канала Telegram перейдите к следующему шагу этой статьи.

Получение chat_id

Чтобы бот отправлял данные клиентов в ваш аккаунт или группу в Telegram, вам нужно получить chat_id аккаунта или группы.

Для аккаунта

  1. Чтобы получить chat_id аккаунта Telegram, создайте в сценарии новый экран и добавьте на него текстовый блок со следующим содержанием: $rawRequest.message.from.id.

    Экран для получения chat_id аккаунта

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

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

  4. Теперь перейдите в Telegram и отправьте боту команду /start. Бот пришлет вам нужное значение.

    chat_id

    предупреждение
    Сценарий будет работать только в канале Telegram. Если вы напишете боту в тестовом виджете, он вернет ошибку, так как не сможет получить данные из канала Telegram.
  5. Скопируйте и сохраните себе число, которое прислал бот.

  6. Теперь удалите экран, добавленный на шаге 1. Он был нужен только для того, чтобы получить chat_id, и больше не понадобится.

Для группы

Если вы хотите отправлять сообщения в группу Telegram, а не в личные сообщения отдельного аккаунта, тогда:

  1. Создайте группу в Telegram.

  2. Перейдите в диалог с вашим ботом в Telegram.

  3. Нажмите Добавить в группу.

  4. Добавьте бота в нужную группу.

  5. Проделайте те же шаги, что и для получения chat_id для аккаунта, только замените выражение в текстовом блоке на $rawRequest.message.chat.id, чтобы получить chat_id группы:

    Экран для получения chat_id группы

Отправка данных клиента

Данные от клиента будут отправляться боту через Telegram API.

  1. Добавьте в сценарий блок HTTP-запрос и заполните его следующим образом:

    • Укажите метод GET.
    • В поле URL вставьте URL следующего вида: https://api.telegram.org/bot<token>/sendMessage
  2. В этом URL вместо параметра <token> подставьте токен, полученный от бота BotFather при создании бота в Telegram:

    Токен бота

  3. На вкладке BODY укажите JSON-объект:

    • В поле chat_id вставьте идентификатор, полученный на предыдущем шаге.
    • В поле text добавьте текст с переменными, где содержится информация о клиенте, которую вы хотите отправить.

    Пример JSON-объекта:

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

    Здесь $NAME.name — переменная, в которой хранится имя клиента.

    подсказка
    В переменной $queryText хранится полный текст ответа клиента на последний запрос. Если вы хотите сохранить ответ клиента на весь сценарий, создайте новую переменную и присвойте ей значение переменной $queryText.

    Запрос для отправки данных клиента должен выглядеть следующим образом:

    HTTP-запрос

  4. Соедините вариант Завершен успешно с новым экраном и напишите на нем сообщение об успешной отправке данных.

  5. Вариант Завершен с ошибкой соедините с экраном, на который добавьте текст Не удалось получить номер телефона. Ошибка $httpStatus. Если возникнет ошибка и бот пойдет по этой ветке сценария, он выведет сообщение с кодом ошибки. Это поможет вам понять причину ошибки.

    Сценарий

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

Тестирование отправки данных

Теперь можете протестировать работу сценария.

Для начала нажмите Опубликовать, чтобы изменения в сценарии отправились в Telegram. После этого нажмите Тестировать.

Если вы используете один и тот же аккаунт при создании и при тестировании бота, тогда после получения данных бот пришлет их в тот же диалог:

Пример диалога

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

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

Возможные ошибки

Если при попытке протестировать сценарий в Telegram бот не реагирует на команду /start, возможно, вы не опубликовали бота в этом канале. Убедитесь, что корректно проделали шаги по публикации бота.

Если при отправке данных клиента возникнет ошибка, бот выведет сообщение с кодом ошибки в чат.

Ошибка -1

Данная ошибка возникает, если вы неправильно оформили HTTP-запрос.

Проверьте, корректно ли вы указали URL. В нем не должно присутствовать пробелов, в том числе в начале и конце URL. Также убедитесь в отсутствии других лишних символов.

Ошибка 400

Эта ошибка также говорит о неверном оформлении HTTP-запроса.

В первую очередь проверьте синтаксис тела запроса на вкладке BODY. В запросе не должны одновременно присутствовать одинарные ' ' и двойные " " кавычки. Также убедитесь, что в JSON-объекте не пропущены фигурные скобки или запятые.

подсказка
Чтобы проверить валидность вашего JSON-объекта, вы можете использовать какой-либо сервис по проверке JSON. Например, JSON Formatter.

Если ошибок в JSON-объекте нет, попробуйте удалить Telegram-бота в BotFather, создать бота заново и использовать новый токен в HTTP-запросе.

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

Системный справочник $NAME, при помощи которого вы запрашиваете имя клиента, содержит ограниченное количество имен.

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

Справочник $NAME

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

  1. От готового интента Имена и от ветки Любая другая фраза на первом экране создайте связь с новым экраном. Добавьте на него блок Условия со следующим содержанием:

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

    Любой введенный клиентом текст сохранится в переменную $queryText до следующего запроса.

    Если бот найдет в сообщении клиента сущность $NAME, он присвоит переменной $name значение из справочника. Если бот не найдет сущность в сообщении, в переменную $name он запишет значение $queryText.

    Получение любого имени

  2. Свяжите условие с экраном, на котором вы запрашиваете номер телефона клиента.

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

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

    Вкладка BODY должна содержать следующий JSON-объект:

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

    HTTP-запрос

предупреждение
Не забудьте повторно опубликовать сценарий.

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

Пример диалога с клиентом:

Пример диалога

Сообщение, которое бот отправит на указанный chat_id:

Сообщение с chat_id

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

Готовый сценарий

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

Готовый сценарий