Интеграция telegram

Web site


Интеграция telegram

Подключение нового бота

Шлюз SLS позволяет напрямую подключать ботов. Один бот одновременно может использоваться только одним устройством, поэтому рекомендуется для каждого шлюза регистрировать отдельного бота. Прежде всего нужно получить токен. Для этого пишем боту @BotFather команду /newbot, после этого даем боту имя и тэг. После этих действий бот отправит токен, который никому давать нельзя.

botfather

Если вы желаете отправлять сообщения в Группу, необходимо в BotFather настроить режим конфиденциальности. Отключение режима конфиденциальности (для работы с группами):

/mybots
выбираете имя бота из списка
Bot settings
Group privacy
Disable

В итоге нужно получить такой ответ

Privacy mode (https://core.telegram.org/bots#privacy-mode) is disabled for your bot

Chat ID

Отправка сообщений в группу Телеграмм или личные сообщения выполняется по идентификатору chatid, который имеет вид:

  • -1001234567890 - группа
  • 1234567890 - личные сообщения

Существует множество вариантов получения chatid пользователя, бота или группы (канала), начиная с использования различных специализированных ботов getmyid_bot или с использованием стандартного API

ID группы

ID группы (канала, чата) можно получить как с помощью многочисленных ботов, так и с помощью стандартного API Телеграмм по инструкции

https://api.telegram.org/botBOT:TOKEN/getChat?chat_id=@имяканала
  • здесь:
    • BOT:TOKEN - реквизиты Вашего бота
    • @имяканала- имя искомого чата, канала или группы

в ответ получим

{«ok»:true,»result»:{«id»:-1001234567890,»title»:………
  • где id - chatid канала.

ID Пользователя

chatid пользователя проще получить с помощью бота getmyid_bot

Если нужно получить свой ID, достаточно просто написать боту.

Если нужен ID другого пользователя, нужно переслать боту сообщение этого пользователя

Бот возвращает:

  • Your user ID - Ваш ID
  • Forwarded from - ID пользователя, чата, группы или канала, из которого переслано сообщение

Настройка шлюза

Теперь требуется инициализировать бота в стартовом скрипте, для этого войдите в редактор скриптов Actions->Files и если ранее не создавали, создайте стартовый скрипт init.lua. Пропишите строки инициализации токена телеграмм как в примере:

telegram.settoken("597******444:AAG4Nxe27**********rXDUgy7U")   --API-токен вашего бота
telegram.setchat("1234567890")   -- ChatID, куда бот будет писать сообщения
telegram.receive(true[, period])   --обрабатывать входящие сообщения. По умолчанию выключен. Period - частота приема входящих сообщений в мс, не менее 1000. По умолчанию 1000мс.
telegram.send("SLS  загружен "..net.localIP()) --отправит сообщение с локальным адресом SLS в вашей сети в телеграм

О безопасности

По умолчанию включена отправка на сервер по протоколу http. Если вы желаете использовать https, небходимо при инициализации указать:

telegram.secure(true)

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

Отправка сообщений

Сообщения отправляются из скриптов LUA командой

telegram.send(msg[, chatid, parse_mode])
-- msg - STR, сообщение 
-- chatid - STR, ID чата, куда бот будет писать сообщения
-- parse_mode - STR, можно использовать для отправки ReplyKeyboard

Например:

telegram.send('hello world')

Обработка входящих сообщений

Для обработки входящих сообщений необходимо создать файл tlg.lua. Пример файла:

if ( Event.Telegram.Text=="Info") then dofile("/int/info.lua") end   -- при получениие сообщения, содержащего "Info" запускать сценарий info.lua

Теперь при получении сообщения Info в просматриваемом чате будет запускаться скрипт /int/info.lua, в который можно поместить например отправку информации о шлюзе:

local remip = http.request("http://wtfismyip.com/text")
uptime=os.millis()
uptime_s=math.floor(uptime/1000)%60
uptime_m=math.floor(uptime/1000/60)%60
uptime_h=math.floor(uptime/1000/60/60)%24
uptime_d=math.floor(uptime/1000/60/60/24)
msg="SLS XIAOMI  is working  "..net.localIP()..", "..remip
msg=msg.."\n\r".."Uptime: " .. uptime_d  .. "d ".. uptime_h .. ":" .. uptime_m..":"..uptime_s
msg=msg.."\n\r".."Free heap: "..os.freeMem('heap')
msg=msg.."\n\r".."Free psram: "..os.freeMem('psram')
telegram.send(msg)

Данный скрипт отправит локальный / внешний ip, количество свободной памяти и время работы шлюза.

Отправка кнопок ReplyKeyboard

Шлюз может отправить сообщение replyKeyboard

telegram.send("Главное меню", "chatid","parse_mode=MarkdownV2&reply_markup={\"keyboard\":[[\"Температуры\"],[\"Info\",\"cmd3\"]],\"resize_keyboard\":true,\"one_time_keyboard\":true}")