VK Video
Создаем Telegram бота
Ищем @BotFather
.
Говорим /newbot
.
Вводим title
и username
.
Получаем token
.
Можем добавить картинку новому боту сказав ботфазеру /setuserpic
и загрузив картинку.
Вызываем бот из Totum
Создаем в Тотум кнопку в которой делаем тестовый вызов telegram-api
:
= : linkToDataJson(title: "Answer"; data: $extr)
extr: jsonExtract(text: $getfs)
getfs: getFromScript(uri: str`"https://api.telegram.org/bot" + $token + "/" + $command`)
token: "YOUR_BOT_TOKEN"
command: "getMe"
Выполняем и видим ответ с данными нашего бота — если нет, то смотрим где ошиблись.
Добавляем Remout в Totum
Далее создаем Remout
в Totum, что бы получать входящие сообщения от нашего бота.
Идем Системные таблицы
— Основные
— API
— Remotes
.
Добавляем Remout
с name
: telegram_bot_incoming_HASH
(замените HASH
на вашу случайную последовательность 6-10 символов ) и выбираем remote_user
.
Добавим простую таблицу для тестирования: incoming_from_bot
с полем incoming_message
тип Данные в строчной части.
В код ремоута запишем добавление строки в эту таблицу, когда приходит hook
:
=: insert(table: 'incoming_from_bot'; field: 'incoming_message' = $extract)
extract: jsonExtract(text: $#input)
Регистрируем адрес Remout в боте
Регистрируем наш hook
в боте (замените HOST
на ваш хост):
= : linkToDataJson(title: "Answer"; data: $extr)
extr: jsonExtract(text: $getfs)
getfs: getFromScript(uri: str`"https://api.telegram.org/bot" + $token + "/" + $command`; post: "url" = "https://HOST/Remotes/telegram_bot_incoming"; post: "secret_token" = $secret_token)
token: "YOUR_BOT_TOKEN"
command: "setWebhook"
secret_token: "goldenBrown"
в url
передается https://HOST/Remotes/telegram_bot_incoming
(замените HOST
на ваш хост)
в secret_token
произвольная фраза. Можно использовать A-Z
, a-z
, 0-9
, _
и -
. Этой фразой бот будет подписываться, когда будет отправлять сообщение на ваш Тотум.
Выполняем и можем проверить установленный адрес хука:
= : linkToDataJson(title: "Answer"; data: $extr)
extr: jsonExtract(text: $getfs)
getfs: getFromScript(uri: str`"https://api.telegram.org/bot" + $token + "/" + $command`)
token: "YOUR_BOT_TOKEN"
command: "getWebhookInfo"
Подключаемся к боту
Теперь мы ищем нашего бота в telegram
по @your_bot_username
и отправляем ему сообщение и смотрим пришедшие данные в таблице incoming_from_bot
.
Нас интересует #message[chat][id]
— это id
, который нам нужен, что бы отправить обратное сообщение.
Бот отправляет сообщение
Теперь попробуем отправить сообщение пользователю:
= : linkToDataJson(title: "Answer"; data: $extr)
extr: jsonExtract(text: $getfs)
getfs: getFromScript(uri: str`"https://api.telegram.org/bot" + $token + "/" + $command`; post: "chat_id" = "169521867"; post: "text" = $text)
token: "YOUR_BOT_TOKEN"
command: "sendMessage"
text: "Some great text!"
Если пришло, значит все ок и можем вешать отправку нужной нам нотификации на триггер.
Отправляем в сообщении Кнопки
https://github.com/totumonline/totum-ru-issues-and-discussions/discussions/218
Заключение
Это самый простой бот отправляющий нотификации, но API телеграма позволяет огромное количество штук https://core.telegram.org/bots/api#available-methods.
Теперь, когда вы знаете общий метод взаимодействия с ботом вы можете программировать свой.
Проверка секретной фразы при вызове webhook
Что бы проверять секретную фразу при срабатывании webhook
модифицируйте код в Remotes
:
=: if(condition: $#headers["X-Telegram-Bot-Api-Secret-Token"][0] = "goldenBrown"; then: $insert)
insert: insert(table: 'incoming_from_bot'; field: 'incoming_message' = $extract)
extract: jsonExtract(text: $#input)
Обратите внимание, что секретный ключ приходит в заголовке X-Telegram-Bot-Api-Secret-Token
(название которого содержит дефисы -
) в котором лежит list
и ключ в первом элементе этого list
и что бы по структуре Тотум мог его взять этот ключ обязательно должен быть указан в кавычках!