Открыть меню
Toggle preferences menu
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Уведомления в Telegram (Телеграм): различия между версиями

Материал из Sprut.hub Wiki
Нет описания правки
 
(не показано 26 промежуточных версий 2 участников)
Строка 1: Строка 1:
Для получения уведомлений о событиях Sprut.hub через бота в Telegram можно использовать решение с помощью кода (пока не готово официальная интеграция).
Для получения уведомлений о событиях Sprut.hub через бота в Telegram можно использовать сервис уведомлений или решение с использованием кода (выбор за вами)


Если у вас нет своего бота, вам необходимо его создать.  
Если у вас нет своего бота, вам необходимо его создать.  


Именно этот бот, будет присылать вам сообщения, которые вы будете отправлять из Sprut.hub.   
Именно этот бот будет присылать вам сообщения, которые вы будете отправлять из Sprut.hub.   


Если вы хотите, чтобы сообщения приходили в ваш канал, который будут читать несколько пользователей, то вам на шаге 4 - необходимо выяснить ID канала, куда будут присылаться сообщения от бота и указать его.  
Если вы хотите, чтобы сообщения приходили в ваш канал, который будут читать несколько пользователей, то вам потребуется выяснить ID канала, куда будут присылаться сообщения от бота и указать его. Личные уведомления и группы с супергруппами могут добавляться в уведомления автоматически.
 
== Создание сервиса уведомлений Telegram ==
Необходимо перейти в раздел "Уведомления" в веб интерфейсе Sprut.hub и создать новый сервис уведомлений
[[Файл:010 Телеграм Создать сервис уведомлений.png|центр|обрамить]]
Далее выбрать Telegram
[[Файл:011 Телеграм Выбрать сервис уведомлений.png|центр|обрамить]]
Далее перейти в настройки нового сервиса
[[Файл:012 Телеграм Настройки.png|центр|обрамить]]
В настройках необходимо перейти в раздел управления вашим ботом (откроется диалог с официальным ботом Telegram @botfather)
[[Файл:013 Телеграм создать бота.png|центр|обрамить]]


== Создание своего бота в Telegram ==
== Создание своего бота в Telegram ==
Для этого необходимо в Telegram в поиске вбить [https://t.me/BotFather @BotFather] (это официальный бот для создания ботов)
Если вы не перешли из настроек сервиса уведомлений, то вы можете в Telegram в поиске вбить [https://t.me/BotFather @BotFather] (это официальный бот для создания ботов)
[[Файл:Tg0.jpg|центр|обрамить]]
[[Файл:Tg0.jpg|центр|обрамить]]




После этого, необходимо:


'''Шаг 1:''' Нажмите «Запустить» для активации бота BotFather. В ответ вы получите список команд по управлению ботов.
После этого необходимо:


'''Шаг 2:''' Выполнить команду /newbot
'''Шаг 1:''' Нажмите «Запустить» для активации бота BotFather.


'''Шаг 3:''' Дать имя своему боту — например "Мой дом" и присвоить никнейм бота, по которому вы сможете его найти. Он должен быть уникальным и заканчиваться на слово «bot».
Шаг 2: Открыть меню управления ботами (кнопка Open)


После этого вы получите сообщение, которое будет содержать ссылку на вашего бота, а также '''токен''' для авторизации в Sprut.hub или другой системе управления умным домом.
'''Шаг 2: Нажать "Create a New Bot"'''


'''Шаг 4:''' Далее вам необходимо узнать ваш '''chatID'''. Для этого вам нужно подключиться к [https://t.me/getmyid_bot этому боту], который и сообщит вам ваш '''chatID'''. Если же вам нужно, чтобы ваш бот присылал сообщения в какой нибудь общий канал Telegram, то вам нужно выяснить ID этого канала. Для этого, необходимо переслать сообщение из этого канала [https://t.me/getmyid_bot тому же боту], чтобы он вам сообщил ID чата, из которого вы переслали сообщение.
'''Шаг 3:''' Дать имя своему боту — например "Бот для умного дома" и присвоить никнейм бота, по которому вы сможете его найти. Он должен быть уникальным и заканчиваться на слово «bot».


'''Шаг 5:''' Чтобы начать пользоваться ботом, нужно начать с ним чат и нажать кнопку "Запустить"
Шаг 4: Нажать кнопку "Create bot"
[[Файл:Telegram.png|центр|обрамить]]


{{QuoteBlue | Ваш бот готов к использованию}}
Шаг 5: Перейти в настройки вашего бота
{{QuoteYellow|Если вы хотите, чтобы бот отправлял сообщения в ваш канал и его сообщения могли читать несколько пользователей, то вы должны добавить бота в этот канал с правами администратора и возможностью отправлять сообщения}}


== Создание глобального сценария ==
Шаг 6: Отключить Privacy Mode в группах, чтобы бот мог видеть сообщения в группах
Теперь вам необходимо настроить его работу в Sprut.hub. Для этого необходимо создать глобальный сценарий в виде кода. Идем в "Сценарии" - "Глобальные" и создаем там новый сценарий
[[Файл:Scenario1.png|центр|обрамить]]


После этого - вставляем в блок кода сценария следующий код:<syntaxhighlight lang="js" line="1">
Шаг 7: Вернитесь в настройки, скопируйте и сохраните токен вашего бота для дальнейшего использования в хабе (Нажав синюю кнопку Copy)
let chatIDs = ["777777777", "888888888", "-123123123123"];
[[Файл:000 Телеграм Botfather Создать бота full.png|центр|обрамить]]
// 777777777 и 888888888 - ID чатов, в которые будут отправляться сообщения
// -123123123123 - ID канала, куда вы можете добавить бота, чтобы сообщения от него приходили группе людей


// let chatIDs = ["777777777"] // первая строка будет выглядеть так, если вам нужно отправлять только в один чат
== Окончательная настройка бота в сервисе уведомлений Telegram ==
После создания бота, вам необходимо вернуться в веб интерфейса хаба и вставить скопированный на предыдущем этапе токен бота в соответствующее поле. После, нажмите кнопку "Авторизоваться"
[[Файл:002 Телеграм Botfather Bot Settings token.png|центр|обрамить]]
[[Файл:014 Телеграм авторизовать бота.png|центр|обрамить]]


let token = "666666666:AABBCCddEeffggeeHH-IIJJkKLlMmnno_oP"
== Добавление чатов, групп и супергрупп в сервис уведомлений ==
После настройки вашего бота, вам необходимо добавить клиентов сервиса уведомлений, которые будут их получать. Для этого необходимо начать диалог с ботом, чтобы получать личные уведомления. Это делается с помощью отправки кода в диалоге с ботом.


function sendToTelegram(text, notify) {
Необходимо нажать на строку "Отправьте код...." и у вас откроется диалог с вашим ботом.
    try {
[[Файл:016 Телеграм отправить код боту.png|центр|обрамить]]
        if (!Array.isArray(text))
Чтобы начать пользоваться ботом, нужно начать с ним чат и нажать кнопку "Старт". После этого, необходимо отправить код, указанный в настройках сервиса уведомлений и у вас автоматически подключится новый клиент.
            text = [text];


        chatIDs.forEach(function (chatID) {
[[Файл:Telegram.png|центр|обрамить]]{{QuoteBlue |Код обновляется после каждого использования}}
            HttpClient.POST("https://api.telegram.org")
                .path("bot" + token)
                .path("sendMessage")
                .queryString("chat_id", chatID)
                .queryString("text", text.join("\n"))
                .queryString("parse_mode", "Markdown")
                .queryString("disable_notification", notify == null ? false : !notify)
                .send()
        })
    } catch (e) {
        log.error(e.message);
    }
}
sendToTelegram(["*Мой город*", "Хаб запущен"])
</syntaxhighlight> [https://wiki.spruthub.ru/images/c/c9/Отправка_сообщений_в_Telegram.zip Скачать шаблон сценария]{{QuoteYellow | В коде необходимо заменить "777777777" и другие ID на те ID, которые вы получили от бота на Шаге 4 и заменить токен 666666666:AABBCCddEeffggeeHH-IIJJkKLlMmnno_oP на токен, который вы получили на Шаге 3}}


После этого сохраняем сценарий
== Отправка сообщений в телеграм группы и супергруппы ==
{{QuoteGreen|Для каждого топика супергруппы - необходимо отправлять свой код. При этом в вашем хабе создается отдельный клиент уведомлений для каждого топика супергруппы}}
Для отправки сообщений в группы и супергруппы (в определенные топики), вам необходимо:


== Дополнительные настройки отправки сообщений ==
# Добавить бота в группу или супергруппу
В этот же глобальный сценарий, после функции sendToTelegram, вы можете добавить дополнительную строку, которая будет уведомлять вас о запуске хаба вызывая функцию выше:
# Открыть настройки сервиса уведомлений Telegram
<syntaxhighlight lang="js">
# Отправить сообщение в кодом в группе или в нужном топике супергруппы
sendToTelegram(["*Мой город*", "Хаб запущен"])
# Группа будет автоматически добавлена в список клиентов уведомлений
</syntaxhighlight>


Вызов функции отправки сообщений из блочных сценариев, производится через добавление в блоке кода блочного сценария (в раздел "Тогда" или "Иначе") следующей команды:
== Отправка сообщений в каналы ==
<syntaxhighlight lang="js">
{{QuoteYellow|Если вы хотите, чтобы бот отправлял сообщения в ваш канал и его сообщения могли читать несколько пользователей, то вы должны добавить бота в этот канал с правами администратора и возможностью отправлять сообщения}}Далее вам необходимо узнать '''chatID''' вашего канала. Для этого вам скопировать ссылку на любое сообщение из канала или чата. Она будет выглядеть примерно так: <nowiki>https://t.me/c/2123456789/23</nowiki> - где 2123456789 - это идентификатор вашего чата или канала. Для использования в сценариях, вам нужно к этой цифре добавить -100 если это публичный чат или канал, или просто знак минуса "-" если это приватный чат (которые обычно начинаются на цифру 4). Если у вас публичный канал или чат - ссылка на сообщение будет выглядеть как <nowiki>https://t.me/chat_username</nowiki>. Тогда вам придется воспользоваться приложением Telegram для компьютера, включить в настройках экспериментальные функции и тогда у вас в карточке каждого пользователя или чата будет виден их ID. К чатам так же необходимо будет добавлять -100 если они публичные или когда то были публичными, и просто "-" если они всегда были частными.
global.sendToTelegram("Сообщение")
[[Файл:031 Телеграм ID экспериментальное сводка.png|центр|обрамить]]
</syntaxhighlight>


Если вам нужен перевод на новую строку, то код будет выглядеть вот так
Или можно воспользоваться Web версией Telegram и использовать ее так, как [https://pikabu.ru/story/kak_uznat_identifikator_telegram_kanalachatagruppyi_kak_uznat_chat_id_telegram_bez_botov_i_koda_11099278 описано в этой статье].
<syntaxhighlight lang="js">
global.sendToTelegram(["*Нижний Новгород*, хаб запущен", "вторая строка"])
</syntaxhighlight>


Если вы хотите, чтобы приходили "тихие" уведомления в телеграм, то строка кода будет выглядеть вот так:
После этого, вам необходимо вручную добавить нового клиента сервиса уведомлений.
<syntaxhighlight lang="js">
global.sendToTelegram(["*Нижний Новгород*, хаб запущен", "вторая строка"], false)
</syntaxhighlight>


Также можно оформлять текст с помощью разных "плюшек" в виде различного форматирования текста:
Для этого необходимо создать нового клиента и вставить туда полученный ID канала
<syntaxhighlight lang="js">
[[Файл:017 Телеграм создать клиента.png|центр|обрамить]]
global.sendToTelegram("*выделение жирным*")
[[Файл:018 Телеграм настроить клиента.png|центр|обрамить]]
</syntaxhighlight>
После этого ваш канал появится в списке клиентов для уведомлений
<syntaxhighlight lang="js">
global.sendToTelegram("__выделение подчеркнутым__")
</syntaxhighlight>
<syntaxhighlight lang="js">
global.sendToTelegram("_наклонный текст_")
</syntaxhighlight>
<syntaxhighlight lang="js">
global.sendToTelegram("Текст с емоджи 😄")
</syntaxhighlight>''<small>** Эмоджи можно скопировать из любого приложения, которое их поддерживает и вставить в код сценария. Как текст.</small>''<syntaxhighlight lang="js">
global.sendToTelegram("[Инструкции живут тут](https://spruthub.ru/news)") - это отправка ссылки
</syntaxhighlight>
 
Если вам нужно отправить в телеграм значение какого либо устройства, то можно использовать следующий синтаксис:
 
<syntaxhighlight lang="js">
global.sendToTelegram("Состояние сигнализации: " + Hub.getCharacteristic(2, 13).format())
</syntaxhighlight>где 2 - это [[Аксессуары, сервисы и характеристики#Идентификаторы аксессуара, сервиса и характеристики|идентификатор аксессуара]], а 13 это [[Аксессуары, сервисы и характеристики#Идентификаторы аксессуара, сервиса и характеристики|идентификатор характеристики]]


Для отправки в одном сообщении состояний нескольких устройств в одну строку<syntaxhighlight lang="js">
== Использование уведомлений в телеграм из сценариев ==
global.sendToTelegram("Показания датчика температуры 1 : " + Hub.getCharacteristicValue(13,15) + " Показания датчика температуры 2 : " + Hub.getCharacteristicValue(16,19))
В блочном сценарии, вам необходимо в блоке Тогда блочного сценария, добавить сервис уведомлений, выбрать там Телеграм и выбрать клиента, которому вы хотите отправить уведомления
</syntaxhighlight>Для отправки в одном сообщении состояний нескольких устройств в две строки, где добавляются квадратные скобки [], а перевод строки осуществляется с помощью запятой<syntaxhighlight lang="js">
[[Файл:019 Телеграм уведомления в блочном сценарии добавить сервис.png|центр|обрамить]]
global.sendToTelegram(["Показания датчика температуры 1 : " + Hub.getCharacteristicValue(13,15), "Показания датчика температуры 2 : " + Hub.getCharacteristicValue(16,19)])
[[Файл:020 Телеграм уведомления в блочном сценарии отправить.png|центр|обрамить]]
[[Файл:021 Телеграм уведомления в блочном сценарии выбор бота.png|центр|обрамить]]
[[Файл:022 Телеграм уведомления в блочном сценарии выбор клиента.png|центр|обрамить]]
[[Файл:023 Телеграм уведомления в блочном сценарии создание сообщения.png|центр|обрамить]]


</syntaxhighlight>
== Форматирование сообщений ==
Для отправки сообщений в телеграм, вам доступно три варианта форматирования: Markdown, Markdown V2 и HTML


== Уведомления в Telegram из блочных сценариев ==
Переключение вариантов форматирования, доступно в экспертном разделе настроек вашего сервиса уведомлений
Глобальные сценарии используются в блочных через вызов функции.
[[Файл:024 Телеграм экспертные настройки.png|центр|обрамить]]
И выбрать вариант форматирования
[[Файл:025 Телеграм выбор форматирования.png|центр|обрамить]]
Как правильно оформлять текст для каждого типа форматирования, можно посмотреть в официальной документации Телеграм:


Для этого переходим в раздел Блочных сценариев и создаем новый блочный сценарий или добавляем уже в существующий, отправку уведомлений в телеграм:
* [https://core.telegram.org/bots/api#html-style Для форматирования HTML]
[[Файл:Scenario tg2.png|центр|обрамить]]
* [https://core.telegram.org/bots/api#markdown-style Для форматирования Markdown]
[[Файл:Scenario tg4.png|центр|обрамить]]
* [https://core.telegram.org/bots/api#markdownv2-style Для форматирования Markdown V2]


== Передача данных датчика в Telegram ==
== Использование уведомлений в телеграм в блоках кода ==
Если вы хотите что-то посложнее, например отправить данные датчика или что-то подобное, то можно использовать данные характеристики устройства.  
В блоке кода, уведомлениями можно пользоваться по аналогии с другими сервисами уведомлений. В качестве бонуса, есть опция отправки сообщений без уведомлений (тихий режим)


Например отправка состояния открытия окна будет выглядеть в виде такой команды:<syntaxhighlight lang="js">
Для отправки, используются идентификаторы сервиса (в данных примерах это Telegram_1) и клиентов (они прописываются через запятую после указания сервиса. Если идентификаторы клиентов не указаны - сообщение отправится всем клиентам этого сервиса
global.sendToTelegram("Состояние окна: " + Hub.getCharacteristic(1154, 16).format())
[[Файл:030 Телеграм где брать идентификаторы сервиса и клиентов.png|центр|обрамить]]
</syntaxhighlight>где цифра 1154 - это [[Аксессуары, сервисы и характеристики#Идентификаторы аксессуара, сервиса и характеристики|ID аксессуара]] Окно в хабе, а цифра 16 - это номер характеристики "Целевая позиция" у Окна.


Чтобы не напрягаться с поиском того, как называется сервис или характеристика для использования в коде (даже с авто-подстановкой), а также какие у них идентификаторы, достаточно зайти в настройки устройства и нажать кнопку информации у нужной характеристики
[[Файл:Tg23.jpg|центр|обрамить]]
И там будут нужные вам названия сервисов и характеристик для указания в коде, а также идентификаторы всех уровней.
[[Файл:Tg24.jpg|центр|обрамить]]


== Отправка фото в Телеграм ==
Отправить текст всем клиентам<syntaxhighlight lang="js">
Если вам необходимо отправлять фото в телеграм, то нужно дополнить глобальный сценарий еще одной функцией
Notify.text("Тест отправки всем").to("Telegram_1").silent(false).send();
<syntaxhighlight lang="js" line="1">
</syntaxhighlight>Отправить текст одному конкретному клиенту с идентификатором 1<syntaxhighlight lang="js">Notify.text("Тест отправки в Телеграм").to("Telegram_1", 1).silent(false).send();</syntaxhighlight>
let chatIDs = ["777777777"];
let token = "666666666:AABBCCddEeffggeeHH-IIJJkKLlMmnno_oP"


function sendToTelegram(text, notify) {
Отправить текст нескольким клиентам<syntaxhighlight lang="js">Notify.text("Тест отправки на клиентов 1 и 2").to("Telegram_1", 1, 2).silent(false).send();</syntaxhighlight>
    try {
        if (!Array.isArray(text))
            text = [text];


        chatIDs.forEach(function (chatID) {
Отправить показания датчика<syntaxhighlight lang="js">Notify.text("Показания датчика температуры: {}", Hub.getCharacteristicValue(3,15)).to("Telegram_1", 1, 2).silent(false).send();</syntaxhighlight>Отправить показания нескольких датчиков<syntaxhighlight lang="js">
            HttpClient.POST("https://api.telegram.org")
Notify.text("Показания датчика температуры 1 : {}, Показания датчика температуры 2 : {}", Hub.getCharacteristicValue(3,15),Hub.getCharacteristicValue(16,19)).to("Telegram_1", 1, 2).silent(false).send();
                .path("bot" + token)
</syntaxhighlight>Отправить показания нескольких датчиков в несколько строк (используется \n для перевода строки)<syntaxhighlight lang="js">
                .path("sendMessage")
Notify.text("Показания датчика температуры 1 : {}\nПоказания датчика температуры 2 : {}", Hub.getCharacteristicValue(3,15),Hub.getCharacteristicValue(16,19)).to("Telegram_1", 1, 2).silent(false).send();
                .queryString("chat_id", chatID)
</syntaxhighlight>
                .queryString("text", text.join("\n"))
Отправка снапшота с камеры в тихом режиме<syntaxhighlight lang="js">
                .queryString("parse_mode", "Markdown")
let snapshot = Hub.getAccessory(2037).getSnapshot()
                .queryString("disable_notification", notify == null ? false : !notify)
if (snapshot != null)  
                .send()
{
        })
    Notify.text("Теcт отправки снапшота").to("Telegram_1", 1, 2, 3).image(snapshot).silent(true).send();
    } catch (e) {
        log.error(e.message);
    }
}
}
</syntaxhighlight>


function sendPhotoToTelegram(binary,caption) {
== Передача данных датчика в Telegram ==
    try {
Если вы хотите что-то посложнее, например отправить данные датчика или что-то подобное, то можно использовать данные характеристики устройства.  
        if (!caption) {caption = ""}
        chatIDs.forEach(function (chatID) {
            HttpClient.POST('https://api.telegram.org')
                .path("bot" + token)
                .path("sendPhoto")
                .queryString("chat_id", chatID)
                .queryString('caption', caption)
                .fieldMultipart('photo', binary)
                .send();
        })
    } catch (e) {
        log.error(e.message);
    }
}
sendToTelegram(["*Мой город*", "Хаб запущен"])
</syntaxhighlight>[https://wiki.spruthub.ru/images/e/e1/%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0_%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D1%84%D0%BE%D1%82%D0%BE_%D0%B2_Telegram.json Скачать шаблон сценария]{{QuoteYellow | В коде необходимо заменить "777777777" на ID которые вы получили от бота на Шаге 4 и заменить токен 666666666:AABBCCddEeffggeeHH-IIJJkKLlMmnno_oP на токен, который вы получили на Шаге 3}}А отправка фото, осуществляется следующим блоком кода в блочном сценарии<syntaxhighlight lang="js">
let snapshot = HttpClient.GET("[АДРЕС_ИЗОБРАЖЕНИЯ]").send().getBinary();
global.sendPhotoToTelegram(snapshot,"Изображение с камеры");
</syntaxhighlight>Где в данном примере, [АДРЕС_ИЗОБРАЖЕНИЯ] - это URL для картинки с вашей камеры видеонаблюдения, если она умеет отдавать статичные картинки.


Стандартная ссылка для подобных картинок: {{Color|blue|'''http://[ВАШ_ЛОГИН]:[ВАШ_ПАРОЛЬ]@[IP_АДРЕС_КАМЕРЫ]:[ПОРТ]/cgi-bin/snapshot.cgi'''}} но она может быть другой, или ваша камера может не уметь показывать статичные картинки.
Например отправка состояния открытия окна будет выглядеть в виде такой команды:<syntaxhighlight lang="js">
Notify.text("Показания датчика температуры: {}", Hub.getCharacteristicValue(3,15)).to("Telegram_1", 1, 2).silent(false).send();
</syntaxhighlight>где цифра 3 - это [[Аксессуары, сервисы и характеристики#Идентификаторы аксессуара, сервиса и характеристики|ID аксессуара]] Датчик температуры, а цифра 15 - это номер характеристики "Температура" у датчика.


Главное для использования этого варианта отправки картинок, чтобы она была доступна из хаба по обычной ссылке на сайт.
Чтобы найти идентификаторы аксессуара и характеристики, достаточно зайти в настройки устройства
 
[[Файл:026 Телеграм отправка данных устройств настройки.png|центр|обрамить]]
== Отправка фото в Телеграм с подключенной к Sprut.hub камеры ==
И найти идентификаторы аксессуара и характеристики
Осуществляется с использованием отправки фото в Телеграм через глобальную функцию описанную выше.
[[Файл:029 Телеграм отправка данных устройств идентификаторы full.png|центр|обрамить]]
 
Вызов в блочном или логическом сценарии: <syntaxhighlight lang="js">
global.sendPhotoToTelegram(Hub.getAccessory(1291).getSnapshot(), "текст под картинкой", "")
</syntaxhighlight>где 1291 это идентификатор подключенной к Sprut.hub камеры
 
== Универсальный вариант для чатов, групп и каналов с отправкой в конкретный топик группы ==
Номер топика в супергруппе можно получить скопировав ссылку на любое сообщение в топике. Она будет выглядеть как:
 
https://t.me/c/123456789/2/17 - где: 
 
* 123456789 - идентификатор группы (чтобы добавить в код, нужно в начало идентификатора добавить -100 чтобы получилось -100123456789)
* 2 - идентификатор топика
* 17 - идентификатор сообщения
 
Идентификатор чата с ботом вы получили на [[Уведомления в Telegram (Телеграм)#Создание своего бота в Telegram|шаге 4]]  
 
Идентификатор канала, в который бот должен отправлять сообщения вы так же получили на [[Уведомления в Telegram (Телеграм)#Создание своего бота в Telegram|шаге 4]]
 
В итоге мы получаем три места, куда бот будет отправлять сообщения: чат с ботом, канал и конкретный топик в супергруппе. Где:
 
* -100123456789 - это ID супергруппы
* -100987654321 - это ID канала
* 50506060 - это ID чата с ботом
{{QuoteRed|Если у вас несколько каналов и чатов, необходимо в переменной chatIDs указывать сначала каналы и группы (со значком "-" в начале), а потом уже ID чатов}}
Глобальный сценарий будет выглядеть таким образом:<syntaxhighlight lang="js" line="1">
let chatIDs = ["-100123456789","-100987654321","50506060"];
let token = "666666666:AABBCCddEeffggeeHH-IIJJkKLlMmnno_oP"
 
function sendToTelegram(text,topic,notify) {
    try {
        if (!Array.isArray(text))
            text = [text];
 
        chatIDs.forEach(function (chatID) {
            if (chatID.indexOf("-")) {topic = ""}
            HttpClient.POST("https://api.telegram.org")
                .path("bot" + token)
                .path("sendMessage")
                .queryString("chat_id", chatID)
                .queryString("message_thread_id", topic)
                .queryString("text", text.join("\n"))
                .queryString("parse_mode", "Markdown")
                .queryString("disable_notification", notify == null ? false : !notify)
                .send()
        })
    } catch (e) {
        log.error(e.message);
    }
}
</syntaxhighlight>Отправка сообщений


Если нужно отправить сообщение в чат с ботом, канал и топик General супегруппы <syntaxhighlight lang="js">
== Отправка уведомлений в телеграм полностью с помощью блоков кода и глобального сценария ==
global.sendToTelegram("Сообщение в канал, чат и топик General")
Предыдущая реализация уведомлений в Телеграм с помощью глобальных сценариев и полностью с помощью кода - [[Отправка уведомлений в Telegram полностью через сценарии в виде кода|описана в этой статье]]
</syntaxhighlight>Если нужно отправить сообщение в чат с ботом, канал и топик с индексом 2 супергруппы, где цифра 2 после запятой - ID топика в супергруппе <syntaxhighlight lang="js">
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__
global.sendToTelegram("Сообщение в канал, чат и топик номер 2",2)
</syntaxhighlight>__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__

Текущая версия от 21:29, 29 августа 2025

Для получения уведомлений о событиях Sprut.hub через бота в Telegram можно использовать сервис уведомлений или решение с использованием кода (выбор за вами)

Если у вас нет своего бота, вам необходимо его создать.

Именно этот бот будет присылать вам сообщения, которые вы будете отправлять из Sprut.hub.

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

Создание сервиса уведомлений Telegram

Необходимо перейти в раздел "Уведомления" в веб интерфейсе Sprut.hub и создать новый сервис уведомлений

Далее выбрать Telegram

Далее перейти в настройки нового сервиса

В настройках необходимо перейти в раздел управления вашим ботом (откроется диалог с официальным ботом Telegram @botfather)

Создание своего бота в Telegram

Если вы не перешли из настроек сервиса уведомлений, то вы можете в Telegram в поиске вбить @BotFather (это официальный бот для создания ботов)


После этого необходимо:

Шаг 1: Нажмите «Запустить» для активации бота BotFather.

Шаг 2: Открыть меню управления ботами (кнопка Open)

Шаг 2: Нажать "Create a New Bot"

Шаг 3: Дать имя своему боту — например "Бот для умного дома" и присвоить никнейм бота, по которому вы сможете его найти. Он должен быть уникальным и заканчиваться на слово «bot».

Шаг 4: Нажать кнопку "Create bot"

Шаг 5: Перейти в настройки вашего бота

Шаг 6: Отключить Privacy Mode в группах, чтобы бот мог видеть сообщения в группах

Шаг 7: Вернитесь в настройки, скопируйте и сохраните токен вашего бота для дальнейшего использования в хабе (Нажав синюю кнопку Copy)

Окончательная настройка бота в сервисе уведомлений Telegram

После создания бота, вам необходимо вернуться в веб интерфейса хаба и вставить скопированный на предыдущем этапе токен бота в соответствующее поле. После, нажмите кнопку "Авторизоваться"

Добавление чатов, групп и супергрупп в сервис уведомлений

После настройки вашего бота, вам необходимо добавить клиентов сервиса уведомлений, которые будут их получать. Для этого необходимо начать диалог с ботом, чтобы получать личные уведомления. Это делается с помощью отправки кода в диалоге с ботом.

Необходимо нажать на строку "Отправьте код...." и у вас откроется диалог с вашим ботом.

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

Код обновляется после каждого использования

Отправка сообщений в телеграм группы и супергруппы

Для каждого топика супергруппы - необходимо отправлять свой код. При этом в вашем хабе создается отдельный клиент уведомлений для каждого топика супергруппы

Для отправки сообщений в группы и супергруппы (в определенные топики), вам необходимо:

  1. Добавить бота в группу или супергруппу
  2. Открыть настройки сервиса уведомлений Telegram
  3. Отправить сообщение в кодом в группе или в нужном топике супергруппы
  4. Группа будет автоматически добавлена в список клиентов уведомлений

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

Если вы хотите, чтобы бот отправлял сообщения в ваш канал и его сообщения могли читать несколько пользователей, то вы должны добавить бота в этот канал с правами администратора и возможностью отправлять сообщения

Далее вам необходимо узнать chatID вашего канала. Для этого вам скопировать ссылку на любое сообщение из канала или чата. Она будет выглядеть примерно так: https://t.me/c/2123456789/23 - где 2123456789 - это идентификатор вашего чата или канала. Для использования в сценариях, вам нужно к этой цифре добавить -100 если это публичный чат или канал, или просто знак минуса "-" если это приватный чат (которые обычно начинаются на цифру 4). Если у вас публичный канал или чат - ссылка на сообщение будет выглядеть как https://t.me/chat_username. Тогда вам придется воспользоваться приложением Telegram для компьютера, включить в настройках экспериментальные функции и тогда у вас в карточке каждого пользователя или чата будет виден их ID. К чатам так же необходимо будет добавлять -100 если они публичные или когда то были публичными, и просто "-" если они всегда были частными.

Или можно воспользоваться Web версией Telegram и использовать ее так, как описано в этой статье.

После этого, вам необходимо вручную добавить нового клиента сервиса уведомлений.

Для этого необходимо создать нового клиента и вставить туда полученный ID канала

После этого ваш канал появится в списке клиентов для уведомлений

Использование уведомлений в телеграм из сценариев

В блочном сценарии, вам необходимо в блоке Тогда блочного сценария, добавить сервис уведомлений, выбрать там Телеграм и выбрать клиента, которому вы хотите отправить уведомления

Форматирование сообщений

Для отправки сообщений в телеграм, вам доступно три варианта форматирования: Markdown, Markdown V2 и HTML

Переключение вариантов форматирования, доступно в экспертном разделе настроек вашего сервиса уведомлений

И выбрать вариант форматирования

Как правильно оформлять текст для каждого типа форматирования, можно посмотреть в официальной документации Телеграм:

Использование уведомлений в телеграм в блоках кода

В блоке кода, уведомлениями можно пользоваться по аналогии с другими сервисами уведомлений. В качестве бонуса, есть опция отправки сообщений без уведомлений (тихий режим)

Для отправки, используются идентификаторы сервиса (в данных примерах это Telegram_1) и клиентов (они прописываются через запятую после указания сервиса. Если идентификаторы клиентов не указаны - сообщение отправится всем клиентам этого сервиса


Отправить текст всем клиентам

Notify.text("Тест отправки всем").to("Telegram_1").silent(false).send();

Отправить текст одному конкретному клиенту с идентификатором 1

Notify.text("Тест отправки в Телеграм").to("Telegram_1", 1).silent(false).send();

Отправить текст нескольким клиентам

Notify.text("Тест отправки на клиентов 1 и 2").to("Telegram_1", 1, 2).silent(false).send();

Отправить показания датчика

Notify.text("Показания датчика температуры: {}", Hub.getCharacteristicValue(3,15)).to("Telegram_1", 1, 2).silent(false).send();

Отправить показания нескольких датчиков

Notify.text("Показания датчика температуры 1 : {}, Показания датчика температуры 2 : {}", Hub.getCharacteristicValue(3,15),Hub.getCharacteristicValue(16,19)).to("Telegram_1", 1, 2).silent(false).send();

Отправить показания нескольких датчиков в несколько строк (используется \n для перевода строки)

Notify.text("Показания датчика температуры 1 : {}\nПоказания датчика температуры 2 : {}", Hub.getCharacteristicValue(3,15),Hub.getCharacteristicValue(16,19)).to("Telegram_1", 1, 2).silent(false).send();

Отправка снапшота с камеры в тихом режиме

let snapshot = Hub.getAccessory(2037).getSnapshot()
if (snapshot != null) 
{
    Notify.text("Теcт отправки снапшота").to("Telegram_1", 1, 2, 3).image(snapshot).silent(true).send();
}

Передача данных датчика в Telegram

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

Например отправка состояния открытия окна будет выглядеть в виде такой команды:

Notify.text("Показания датчика температуры: {}", Hub.getCharacteristicValue(3,15)).to("Telegram_1", 1, 2).silent(false).send();

где цифра 3 - это ID аксессуара Датчик температуры, а цифра 15 - это номер характеристики "Температура" у датчика.

Чтобы найти идентификаторы аксессуара и характеристики, достаточно зайти в настройки устройства

И найти идентификаторы аксессуара и характеристики

Отправка уведомлений в телеграм полностью с помощью блоков кода и глобального сценария

Предыдущая реализация уведомлений в Телеграм с помощью глобальных сценариев и полностью с помощью кода - описана в этой статье