В данном разделе приведен пример использования HTTP-запроса для синхронизации "Первой Формы" с Telegram через чат-бот |
---|
С помощью смарт-действия "Отправить HTTP-запрос" можно автоматизировать общение через чат-бот Telegram. HTTP-запрос необходимо использовать в категории "Группы", когда в чате должно быть более одного пользователя, или "Сообщения", когда в чате должен быть только один пользователь и чат-бот. Действие срабатывает после написания комментария и отправляет запрос из "Первой Формы" в Telegram.
Порядок действий
1. Если вы еще не зарегистрированы в Telegram, пройдите регистрацию.
2. Создайте чат-бота. Для получения идентификатора нового бота (bot token) найдите в Telegram пользователя @BotFather, запустите с ним чат (команда /start при первом обращении) и введите команду создания нового бота: /newbot.
Команда создания нового бота
Введите публичное имя для вашего бота и имя пользователя для бота в Telegram. Обратите внимание: имя пользователя должно быть уникальным и должно заканчиваться на "bot" (например: Chat1FBot). Если пользователь с таким именем уже существует вы увидите ошибку: "Sorry, this username is invalid" — необходимо ввести уникальное имя. При успешном создании вы получите сообщение с ссылкой на свого бота в Telegram и токеном для доступа к HTTP API.
Сообщение об успешном создании чат-бота
3. Получите идентификатор беседы с ботом <chat_id>: В диалоге с созданным ботом и напишите ему произвольное сообщение, затем откройте в браузере ссылку: https://api.telegram.org/bot<bot_token>/getUpdates
где <bot_token> — идентификатор, полученный от @BotFather.
В полученном json-ответе найдите значение в параметре result->message->chat->id, это и есть <chat_id>.
URL для отправки сообщения боту формируется по образцу:
https://api.telegram.org/bot<bot_token>/sendMessage?chat_id=<chat_id>&text=<текст_отправляемого_сообщения>
URL для получения последнего сообщения от бота формируется по образцу:
https://api.telegram.org/bot<bot_token>/getUpdates?offset=<номер_последнего_полученного_сообщения+1>
Если возвращается одно сообщение, то json имеет вид:
{"ok":true,"result":[
{"update_id":<offset>,
"message":{"message_id":14,
"from":{"id":<user_id>,"is_bot":false,"first_name":"<name>","last_name":"<surname>","username":"<nick>,"language_code":"ru-RU"},
"chat":{"id":<chat_id>,"first_name":"<name>","last_name":"<surname>","username":"<nick>","type":"private"},
"date":1519205140,
"text":"текст_сообщения"}
}
]}
Чат-бот может вернуть сразу несколько последних ответов — json вида:
{"ok":true,"result":[
{"update_id":<offset1>,
"message":{"message_id":14,
"from":{"id":<user_id>,"is_bot":false,"first_name":"<name>","last_name":"<surname>","username":"<nick>,"language_code":"ru-RU"},
"chat":{"id":<chat_id>,"first_name":"<name>","last_name":"<surname>","username":"<nick>","type":"private"},
"date":1519205140,
"text":"текст_сообщения1"}
},
{"update_id":<offset2>,
"message":{"message_id":15,
"from":{"id":<user_id>,"is_bot":false,"first_name":"<name>","last_name":"<surname>","username":"<nick>,"language_code":"ru-RU"},
"chat":{"id":<chat_id>,"first_name":"<name>","last_name":"<surname>","username":"<nick>","type":"private"},
"date":1519205140,
"text":"текст_сообщения2"}
}
]}
Первое непрочитанное ответное сообщение доступно как значение атрибута result.message[0].text, а <chat-id> доступен как значение атрибута result.message[0].chat.id (этот параметр важен, поскольку бот может вести несколько чатов одновременно).
Простейший пример обмена сообщениями с чат-ботом Telegram описан ниже.
Отправка сообщения
Смарт-пакет для отправки сообщения боту
Смарт-действие для отправки сообщения боту
Вариант смарт-действия для отправки сообщения боту с использованием двух параметров:
Вариант смарт-действия для отправки сообщения боту с использованием двух параметров
Для данного кейса не поддерживаются зашифрованные задачи |
---|
Получение сообщения
Смарт-пакет для работы с курсом валюты в формате JSON
Обратите внимание на необходимость очистки ответа веб-сервиса от лишних символов. Поэтому во втором смарт-действии для выделения текста сообщения используется выражение TSQL:
select top 1 JSON_VALUE ( @ActionResult8639, '$.HttpResponse.ResponseContent.result[0].message.text' )
Полезные ссылки