⟵ сюдатуда ⟶
  • Мастерклассы
  • Внешние подключения
  • Отправляем сообщение в Slack через n8n.io
  • Создаем и подключаем Telegram бота
  • Подключаемся к Yandex-переводчику
  • Получаем email по IMAP в Totum
  • Устанавливаем Mailcow как SMTP-сервер для Totum
  • Tableau и PowerBI
  • amoCRM
  • Битрикс 24
  • База знаний
  • Создаем и подключаем Telegram бота

    VK Video

    Смотреть на 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, что бы получать входящие сообщения от нашего бота.

    Идем Системные таблицыОсновныеAPIRemotes.

    Добавляем 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 и что бы по структуре Тотум мог его взять этот ключ обязательно должен быть указан в кавычках!