Дополнительные действия
Bigmanekb (обсуждение | вклад) |
Permadm (обсуждение | вклад) Опечатки |
||
| Строка 1: | Строка 1: | ||
Для получения уведомлений о событиях Sprut.hub через бота в Telegram можно использовать сервис уведомлений или решение с | Для получения уведомлений о событиях Sprut.hub через бота в Telegram можно использовать сервис уведомлений или решение с использованием кода (выбор за вами) | ||
Если у вас нет своего бота, вам необходимо его создать. | Если у вас нет своего бота, вам необходимо его создать. | ||
Именно этот бот | Именно этот бот будет присылать вам сообщения, которые вы будете отправлять из Sprut.hub. | ||
Если вы хотите, чтобы сообщения приходили в ваш канал, который будут читать несколько пользователей, то вам потребуется выяснить ID канала, куда будут присылаться сообщения от бота и указать его. Личные уведомления и группы с супергруппами | Если вы хотите, чтобы сообщения приходили в ваш канал, который будут читать несколько пользователей, то вам потребуется выяснить ID канала, куда будут присылаться сообщения от бота и указать его. Личные уведомления и группы с супергруппами могут добавляться в уведомления автоматически. | ||
== Создание сервиса уведомлений Telegram == | == Создание сервиса уведомлений Telegram == | ||
| Строка 23: | Строка 23: | ||
После этого | После этого необходимо: | ||
'''Шаг 1:''' Нажмите «Запустить» для активации бота BotFather. | '''Шаг 1:''' Нажмите «Запустить» для активации бота BotFather. | ||
Версия от 04:19, 18 августа 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
После создания бота, вам необходимо вернуться в веб интерфейса хаба и вставить скопированный на предыдущем этапе токен бота в соответствующее поле. После, нажмите кнопку "Авторизоваться"

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

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

Код обновляется после каждого использования
Отправка сообщений в телеграм группы и супергруппы
Для отправки сообщений в группы и супергруппы (в определенные топики), вам необходимо:
- Добавить бота в группу или супергруппу
- Открыть настройки сервиса уведомлений Telegram
- Отправить сообщение в кодом в группе или в нужном топике супергруппы
- Группа будет автоматически добавлена в список клиентов уведомлений
Для каждого топика супергруппы - необходимо отправлять свой код. При этом в вашем хабе создается отдельный клиент уведомлений для каждого топика супергруппы
Отправка сообщений в каналы
Если вы хотите, чтобы бот отправлял сообщения в ваш канал и его сообщения могли читать несколько пользователей, то вы должны добавить бота в этот канал с правами администратора и возможностью отправлять сообщения
Далее вам необходимо узнать chatID вашего канала. Для этого вам нужно подключиться к этому боту и переслать ему любое сообщение из нужного канала, чтобы он вам сообщил ID вашего канала, из которого вы переслали сообщение.
После этого, вам необходимо вручную добавить нового клиента сервиса уведомлений.
Для этого необходимо создать нового клиента и вставить туда полученный ID канала


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





Форматирование сообщений
Для отправки сообщений в телеграм, вам доступно три варианта форматирования: Markdown, Markdown V2 и HTML
Переключение вариантов форматирования, доступно в экспертном разделе настроек вашего сервиса уведомлений

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

Как правильно оформлять текст для каждого типа форматирования, можно посмотреть в официальной документации Телеграм:
Использование уведомлений в телеграм в блоках кода
В блоке кода, уведомлениями можно пользоваться по аналогии с другими сервисами уведомлений. В качестве бонуса, есть опция отправки сообщений без уведомлений (тихий режим)
Отправить текст всем клиентам
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(13,15)).to("Telegram_1", 1, 2).silent(false).send();
Отправить показания нескольких датчиков
Notify.text("Показания датчика температуры 1 : {}, Показания датчика температуры 2 : {}", Hub.getCharacteristicValue(13,15),Hub.getCharacteristicValue(16,19)).to("Telegram_1", 1, 2).silent(false).send();
Отправить показания нескольких датчиков в несколько строк (используется \n для перевода строки)
Notify.text("Показания датчика температуры 1 : {}\nПоказания датчика температуры 2 : {}", Hub.getCharacteristicValue(13,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 полностью через сценарии в виде кода
Теперь вам необходимо настроить его работу в Sprut.hub. Для этого необходимо создать глобальный сценарий в виде кода. Идем в "Сценарии" - "Глобальные" и создаем там новый сценарий

После этого - вставляем в блок кода сценария следующий код:
let chatIDs = ["777777777", "888888888", "-123123123123"];
// 777777777 и 888888888 - ID чатов, в которые будут отправляться сообщения
// -123123123123 - ID канала, куда вы можете добавить бота, чтобы сообщения от него приходили группе людей
// let chatIDs = ["777777777"] // первая строка будет выглядеть так, если вам нужно отправлять только в один чат
let token = "666666666:AABBCCddEeffggeeHH-IIJJkKLlMmnno_oP"
function sendToTelegram(text, notify) {
try {
if (!Array.isArray(text))
text = [text];
chatIDs.forEach(function (chatID) {
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(["*Мой город*", "Хаб запущен"])
В коде необходимо заменить "777777777" и другие ID на те ID, которые вы получили от бота на Шаге 4 и заменить токен 666666666:AABBCCddEeffggeeHH-IIJJkKLlMmnno_oP на токен, который вы получили на Шаге 3
После этого сохраняем сценарий
Дополнительные настройки отправки сообщений
В этот же глобальный сценарий, после функции sendToTelegram, вы можете добавить дополнительную строку, которая будет уведомлять вас о запуске хаба вызывая функцию выше:
sendToTelegram(["*Мой город*", "Хаб запущен"])
Вызов функции отправки сообщений из блочных сценариев, производится через добавление в блоке кода блочного сценария (в раздел "Тогда" или "Иначе") следующей команды:
global.sendToTelegram("Сообщение")
Если вам нужен перевод на новую строку, то код будет выглядеть вот так
global.sendToTelegram(["*Нижний Новгород*, хаб запущен", "вторая строка"])
Если вы хотите, чтобы приходили "тихие" уведомления в телеграм, то строка кода будет выглядеть вот так:
global.sendToTelegram(["*Нижний Новгород*, хаб запущен", "вторая строка"], false)
Также можно оформлять текст с помощью разных "плюшек" в виде различного форматирования текста:
global.sendToTelegram("*выделение жирным*")
global.sendToTelegram("__выделение подчеркнутым__")
global.sendToTelegram("_наклонный текст_")
global.sendToTelegram("Текст с емоджи 😄")
** Эмоджи можно скопировать из любого приложения, которое их поддерживает и вставить в код сценария. Как текст.
global.sendToTelegram("[Инструкции живут тут](https://spruthub.ru/news)") - это отправка ссылки
Если вам нужно отправить в телеграм значение какого либо устройства, то можно использовать следующий синтаксис:
global.sendToTelegram("Состояние сигнализации: " + Hub.getCharacteristic(2, 13).format())
где 2 - это идентификатор аксессуара, а 13 это идентификатор характеристики Для отправки в одном сообщении состояний нескольких устройств в одну строку
global.sendToTelegram("Показания датчика температуры 1 : " + Hub.getCharacteristicValue(13,15) + " Показания датчика температуры 2 : " + Hub.getCharacteristicValue(16,19))
Для отправки в одном сообщении состояний нескольких устройств в две строки, где добавляются квадратные скобки [], а перевод строки осуществляется с помощью запятой
global.sendToTelegram(["Показания датчика температуры 1 : " + Hub.getCharacteristicValue(13,15), "Показания датчика температуры 2 : " + Hub.getCharacteristicValue(16,19)])
Уведомления в Telegram из блочных сценариев
Глобальные сценарии используются в блочных через вызов функции.
Для этого переходим в раздел Блочных сценариев и создаем новый блочный сценарий или добавляем уже в существующий, отправку уведомлений в телеграм:


Передача данных датчика в Telegram
Если вы хотите что-то посложнее, например отправить данные датчика или что-то подобное, то можно использовать данные характеристики устройства.
Например отправка состояния открытия окна будет выглядеть в виде такой команды:
global.sendToTelegram("Состояние окна: " + Hub.getCharacteristic(1154, 16).format())
где цифра 1154 - это ID аксессуара Окно в хабе, а цифра 16 - это номер характеристики "Целевая позиция" у Окна.
Чтобы не напрягаться с поиском того, как называется сервис или характеристика для использования в коде (даже с авто-подстановкой), а также какие у них идентификаторы, достаточно зайти в настройки устройства и нажать кнопку информации у нужной характеристики

И там будут нужные вам названия сервисов и характеристик для указания в коде, а также идентификаторы всех уровней.

Отправка фото в Телеграм
Если вам необходимо отправлять фото в телеграм, то нужно дополнить глобальный сценарий еще одной функцией
let chatIDs = ["777777777"];
let token = "666666666:AABBCCddEeffggeeHH-IIJJkKLlMmnno_oP"
function sendToTelegram(text, notify) {
try {
if (!Array.isArray(text))
text = [text];
chatIDs.forEach(function (chatID) {
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);
}
}
function sendPhotoToTelegram(binary,caption) {
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(["*Мой город*", "Хаб запущен"])
В коде необходимо заменить "777777777" на ID которые вы получили от бота на Шаге 4 и заменить токен 666666666:AABBCCddEeffggeeHH-IIJJkKLlMmnno_oP на токен, который вы получили на Шаге 3
А отправка фото, осуществляется следующим блоком кода в блочном сценарии
let snapshot = HttpClient.GET("[АДРЕС_ИЗОБРАЖЕНИЯ]").send().getBinary();
if(snapshot != null) {
global.sendPhotoToTelegram(snapshot,"Изображение с камеры");
}
Где в данном примере, [АДРЕС_ИЗОБРАЖЕНИЯ] - это URL для картинки с вашей камеры видеонаблюдения, если она умеет отдавать статичные картинки.
Стандартная ссылка для подобных картинок: http://[ВАШ_ЛОГИН]:[ВАШ_ПАРОЛЬ]@[IP_АДРЕС_КАМЕРЫ]:[ПОРТ]/cgi-bin/snapshot.cgi
но она может быть другой, или ваша камера может не уметь показывать статичные картинки.
Главное для использования этого варианта отправки картинок, чтобы она была доступна из хаба по обычной ссылке на сайт.
Отправка фото в Телеграм с подключенной к Sprut.hub камеры
Осуществляется с использованием отправки фото в Телеграм через глобальную функцию описанную выше.
Вызов в блочном или логическом сценарии:
let snapshot = Hub.getAccessory(1291).getSnapshot()
if (snapshot != null) {
global.sendPhotoToTelegram(snapshot, "текст под картинкой", "")
}
где 1291 это идентификатор подключенной к Sprut.hub камеры
Универсальный вариант для чатов, групп и каналов с отправкой в конкретный топик группы
Номер топика в супергруппе можно получить скопировав ссылку на любое сообщение в топике. Она будет выглядеть как:
https://t.me/c/123456789/2/17 - где:
- 123456789 - идентификатор группы (чтобы добавить в код, нужно в начало идентификатора добавить -100 чтобы получилось -100123456789)
- 2 - идентификатор топика
- 17 - идентификатор сообщения
Идентификатор чата с ботом вы получили на шаге 4
Идентификатор канала, в который бот должен отправлять сообщения вы так же получили на шаге 4
В итоге мы получаем три места, куда бот будет отправлять сообщения: чат с ботом, канал и конкретный топик в супергруппе. Где:
- -100123456789 - это ID супергруппы
- -100987654321 - это ID канала
- 50506060 - это ID чата с ботом
Если у вас несколько каналов и чатов, необходимо в переменной chatIDs указывать сначала каналы и группы (со значком "-" в начале), а потом уже ID чатов
Глобальный сценарий будет выглядеть таким образом:
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);
}
}
Отправка сообщений Если нужно отправить сообщение в чат с ботом, канал и топик General супегруппы
global.sendToTelegram("Сообщение в канал, чат и топик General")
Если нужно отправить сообщение в чат с ботом, канал и топик с индексом 2 супергруппы, где цифра 2 после запятой - ID топика в супергруппе
global.sendToTelegram("Сообщение в канал, чат и топик номер 2",2)