max-notify-ha
Тип проекта: личный проект
MaxNotify - интеграция для отправки сообщений в мессенджер MAX из Home Assistant
Релиз: v1.4.7 (10.04.2026)
[1.4.7] — 2026-04-10
Добавлено
- Для режима
notify.a161.ruдобавлен полноценный приём входящих через Polling updates queue:- выбор режима приёма «Только отправка / Polling» в мастере и в настройках;
- новый шаг настройки интервала опроса
/updates(updates_interval, диапазон 2-30 секунд, по умолчанию 5 секунд).
- В сервисы отправки медиа добавлена опция
url_basic_auth(форматлогин:пароль) для скачивания файлов по URL с BasicAuth:max_notify.send_photomax_notify.send_documentmax_notify.send_video
- Для URL вида
http://логин:пароль@host/...учётные данные также поддерживаются автоматически.
Изменено
- Для
notify.a161.ruдобавлена отправка inline-кнопок для текста и при отправке фото/документов/видео (где поддерживается API сервиса). - Сенсор последнего входящего сообщения теперь создаётся по режиму приёма, а не только по типу интеграции: при включённом приёме (в т.ч.
notify.a161.ru+ polling) сенсор входящих доступен. - Интерфейс, переводы, manifest, HACS и документация унифицированы по новому названию: MaxNotify (вместо Max Notify).
- В
READMEиservices.yamlобновлены описания сервисов и добавлены пояснения поurl_basic_auth.
Улучшено
- Для
notify.a161.ruрасширена совместимость с форматами ответов/updates(reply/result/data, list/dict/string) с нормализацией во внутренний формат события. - Улучшена дедупликация callback-событий: приоритет ключа по
callback_id, что снижает риск дублей. - Повышена устойчивость жизненного цикла интеграции:
- более безопасный перезапуск polling при reload/reconfigure;
- защита от накопления duplicate update listeners;
- thread-safe планирование reload через
hass.add_job(...).
Автоматическое поведение для notify.a161.ru
- Добавлена защитная логика для режима polling без кнопок:
- если включён polling, но кнопки не настроены, запускается grace-период;
- при отсутствии отправок с кнопками в течение 24 часов режим автоматически переводится в «Только отправка»;
- запись интеграции переименовывается под новый режим, в Home Assistant создаётся уведомление.
Ссылки
- Изменения относительно прошлой версии: v1.4.6…v1.4.7
Релиз: v1.4.6 (07.04.2026)
[1.4.6] — 2026-04-07
Исправлено
- Исправлена ошибка, из-за которой отправка могла падать при сетевых таймаутах/кратковременных проблемах соединения с API Max.
Теперь для сетевых ошибок и таймаутов добавлены повторные попытки с задержками.
Добавлено
- В сервисы отправки медиа добавлена опция
disable_ssl(отключение проверки SSL для конкретного вызова):max_notify.send_photomax_notify.send_videomax_notify.send_document
- Опция полезна для источников с self-signed или некорректными сертификатами.
Улучшено
- Унифицирован таймаут чтения файлов по URL для отправки медиа (единый timeout вместо разных значений в отдельных ветках).
- Исправлены и унифицированы тексты раздела «Кнопки» в переводах и сервисных описаниях (RU/EN), чтобы форматы кнопок были описаны одинаково и без неоднозначностей.
Совместимость с Home Assistant
- Улучшена проверка минимальной версии Home Assistant:
- в мастере настройки при несовместимой версии показывается понятная ошибка с требуемой версией из
manifest.json; - при загрузке уже существующей записи интеграции добавлена жесткая runtime-проверка: несовместимая запись не загружается;
- при несовместимости создается запись в Repairs с пояснением;
- если для записи был включен WebHook (official API), интеграция пытается снять подписку WebHook в API Max перед блокировкой загрузки.
- в мастере настройки при несовместимой версии показывается понятная ошибка с требуемой версией из
Ссылки
- Изменения относительно прошлой версии: v1.4.5…v1.4.6
Релиз: v1.4.5 (06.04.2026)
[1.4.5] — 2026-04-06
Интерфейс вызова сервисов
- В формах сервисов Max Notify (отправка текста, фото, документа, видео, удаление и правка сообщения) поле «Сущность уведомления» снова показывает доступные цели: у фильтра списка оставлен только домен
notify(без привязки кintegrationв селекторе Home Assistant). В списке могут отображаться и другие службыnotify.*(другие интеграции или YAML вродеnotifyчерезrestна notify.a161.ru) — нужно выбирать сущность именно этой интеграции Max Notify. - Режим
notify.a161.ruи записи без сохранённого типа в данных, но с заголовком, содержащимnotify.a161.ru, снова однозначно определяются как этот режим во всех проверках, где это важно.
Официальный API Max: WebHook, HTTPS и режимы приёма
- WebHook предполагает, что у Home Assistant настроен внешний HTTPS-URL (доступ из интернета для серверов Max). Подробно — в README (раздел «Сеть», сценарии с Nabu Casa / reverse proxy).
- При каждой загрузке интеграции выполняется проверка: если выбран приём WebHook, но собрать корректный внешний HTTPS-вебхук нельзя, интеграция снимает подписки WebHook в Max, переводит запись в режим «Только отправка», очищает секрет вебхука, обновляет заголовок записи и создаёт запись о проблеме (repair) с подсказкой проверить Настройки → Система → Сеть.
- В журнал (INFO) при старте официальной записи добавлена строка диагностики: доступен ли HTTPS для вебхука, итоговый URL и заданные внешний/внутренний адреса.
- Один и тот же токен бота нельзя использовать одновременно для Long Polling на одной записи интеграции и WebHook на другой: конфликтующий режим скрыт в мастере, при сохранении настроек показывается ошибка. В одной записи по-прежнему можно переключать режим (снятие подписок при необходимости).
- Поля ввода токена и секретов в мастере настроены так, чтобы браузер по возможности не предлагал сохранить пароль (autocomplete off).
Режим notify.a161.ru
- Для видео улучшены повторные попытки отправки при необходимости (согласно логике сервиса).
Документация и переводы
- README и тексты интерфейса (RU/EN) обновлены под новое поведение WebHook и сети.
Ссылки
- Изменения относительно прошлой версии: v1.4.4…v1.4.5
Релиз: v1.4.4 (05.04.2026)
[1.4.4] — 2026-04-04
Официальный API Max: кнопки-ссылки
- В клавиатуре сообщения можно задать кнопки типа «ссылка» (
link): подпись и URL, по нажатию открывается сайт в браузере. - В URL допускаются только протоколы http и https (требование API). Иначе в Home Assistant показывается понятная ошибка валидации, а не сырой ответ сервера.
- Настройка через UI: при добавлении/редактировании кнопки выбирается тип «Ссылка» и поле URL; в сервисах — поле
urlу кнопки сtype: link(см. README и подсказки в формах).
Режим notify.a161.ru
- Лимит размера файла перед загрузкой унифицирован: до 10 МБ для фото, документов и видео (одна проверка для всех типов вложений).
- Между успешными исходящими сообщениями для одной записи интеграции выдерживается пауза не менее 1 секунды — снижает нагрузку на API, если из автоматизаций подряд уходит много отдельных сообщений. На официальный API Max это не распространяется.
Документация
- README, services.yaml и переводы интерфейса обновлены: кнопки
link, лимит 10 МБ и пауза 1 с дляnotify.a161.ru.
Ссылки
- Изменения относительно прошлой версии: v1.4.3…v1.4.4
Релиз: v1.4.3 (04.04.2026)
[1.4.3] — 2026-04-03
Режим notify.a161.ru: возможности и лимиты
- Видео — доступен сервис
max_notify.send_video(как у официального API, с учётом ограничений сервиса). Перед загрузкой проверяется размер до 10 МБ; при превышении в интерфейсе Home Assistant показывается понятная ошибка. - Удаление и правка сообщений — сервисы
max_notify.delete_messageиmax_notify.edit_messageбольше не блокируются для этого режима: запросы уходят на APInotify.a161.ru(без версииv=в URL, как ожидает сервис). Фактическая поддержка операций зависит от сервиса; по ответу сервера видно успех или ошибку. - Фото и документы — при слишком большом файле вместо только записи в журнал показывается ошибка валидации в UI (лимит порядка 4 МБ). Для ожидания обработки вложения на стороне сервера (
attachment.not.ready) используются повторы с паузами и параметрcount_requests— в том числе дляnotify.a161.ru(фото, документ, видео), а не только одна попытка. - Текст с кнопками в вызове — для
notify.a161.ruпо-прежнему уходит только текст; inline-клавиатура и кнопки из настроек не отправляются в API (поведение явно зафиксировано в коде и логах).
Интерфейс настройки (мастер и опции)
- Для
notify.a161.ruубраны шаги с настройкой клавиатуры к сообщениям (и при первой настройке, и при открытии шестерёнки / Перенастроить): остаются токен, формат сообщений и при первичной настройке — user_id. - Записи, у которых в данных не был сохранён тип интеграции, но заголовок содержит
notify.a161.ru, снова распознаются как этот режим; при сохранении настроек тип записывается в конфигурацию.
Сенсоры
- Для
notify.a161.ruне создаётся сенсор последнего входящего сообщения (входящие обновления Max для этого режима недоступны). Сенсор последнего исходящего сообщения сохраняется.
Документация
- README обновлён: актуальный список возможностей и ограничений
notify.a161.ru, описаниеcount_requests, разделы поsend_video,delete_message,edit_message, пояснение про настройки без мастера кнопок.
Ссылки
- Изменения относительно прошлой версии: v1.4.2…v1.4.3
Релиз: v1.4.2 (03.04.2026)
[1.4.2] — 2026-04-03
Новое и улучшено
- Режим
notify.a161.ru: фото и файлы — доступны сервисыmax_notify.send_photoиmax_notify.send_document(путь/URL к файлу и при необходимости подпись). Ограничения по размеру и форматам задаёт сторона сервиса (в интеграции проверяется лимит порядка 4 МБ до загрузки). Поведение официального APIplatform-api.max.ruпри отправке изображений и документов не менялось. - Интерфейс «Добавить чат» — если в списке выбрана интеграция с
notify.a161.ru, вместо ошибки показывается понятное сообщение: в этом режиме нельзя добавлять чаты к записи, для другого получателя нужна новая интеграция Max Notify. - Совместимость с ответами API
notify.a161.ruпри загрузке: корректная обработка ответов без ожидаемого заголовкаContent-Type: application/jsonи разных форм ответа после загрузки файла (в том числе с полямиtokenиfileId).
По-прежнему для notify.a161.ru
- Не поддерживаются видео (
send_video), редактирование и удаление сообщений. - Клавиатура и свои кнопки в вызовах сервисов для этого режима не работают; при отправке медиа кнопки из вызова игнорируются (как и раньше для текста).
- Сервис по-прежнему может отвечать пустым телом без
message_id.
Документация
- В README обновлены ограничения и возможности режима
notify.a161.ru, описания сервисовsend_photo/send_document.
Ссылки
- Изменения относительно прошлой версии: v1.4.1…v1.4.2
Релиз: v1.4.1 (01.04.2026)
[1.4.1] — 2026-04-01
Изменено
- Для сервиса
notify.a161.ruдобавлена отправка в группы
Ссылки
- Изменения относительно прошлой версии: v1.4.0…v1.4.1
Релиз: v1.4.0 (27.03.2026)
[1.4.0] — 2026-03-27
Новое
- Добавлен новый режим подключения через сторонний сервис
notify.a161.ru(выбор типа интеграции на первом шаге настройки):- отдельная ветка мастера настройки;
- отдельные поля/подсказки в UI;
- отдельные переводы (RU/EN);
- валидация токена формата сервиса (36 символов).
- Для пользовательских кнопок в сервисах добавлен новый удобный формат многорядной раскладки:
- каждый объект верхнего списка трактуется как отдельный ряд;
- старые форматы полностью сохранены (обратная совместимость).
Изменено
- Логика отправки сообщений теперь учитывает тип интеграции:
- официальный режим использует
platform-api.max.ru; - режим стороннего сервиса использует
notify.a161.ru.
- официальный режим использует
- В документации (README, AUTOMATIONS, сервисные примеры) разделены сценарии для официального API и стороннего сервиса.
- Для видео на официальном API увеличены задержка и окно повторов при ожидании обработки вложений — стабильнее для больших файлов.
Ограничения режима notify.a161.ru
- Поддерживается только отправка текстовых сообщений.
- Поддержка inline-кнопок (
buttons,send_keyboard) в этом режиме отключена. - Не поддерживаются сервисы:
- отправка фото/документов/видео;
- редактирование сообщений;
- удаление сообщений.
- При отправке сервис может возвращать пустой HTTP-ответ без тела (без
message_id).
Улучшено в диагностике
- После успешной отправки текста в лог пишется полный ответ сервера.
- Добавлена попытка извлечь
message_idиз ответа с явным логом результата (найден / не найден).
Ссылки
- Изменения относительно прошлой версии: v1.3.1…v1.4.0
Релиз: v1.3.1 (23.03.2026)
[1.3.1] — 2026-03-23
Важно: как теперь работают кнопки под сообщением
С 1.3.1 правила одинаковые для текста, фото, документа, видео и для редактирования сообщения (когда вы задаёте поле с кнопками):
- Если включено «Отправлять клавиатуру» (так по умолчанию):
не указали свои кнопки в вызове — к сообщению подставляется стандартная клавиатура из настроек интеграции; указали непустые свои кнопки — к сообщению идут только они, без склейки со стандартной; указали кнопки, но список пустой — снова используется стандартная клавиатура из настроек. - Если «Отправлять клавиатуру» выключено: стандартная клавиатура не подставляется; прикрепляются лишь явно заданные в вызове кнопки (если они не пустые).
Так проще предсказать результат в автоматизациях и не зависеть от того, какой именно сервис вы вызываете.
Улучшено в интерфейсе Home Assistant
- Для фото, документа, видео и редактирования сообщения в формах сервисов появились названия и пояснения к переключателю «Отправлять клавиатуру» (русский и английский).
- Тексты подсказок для кнопок и клавиатуры приведены в соответствие с описанной выше логикой.
Ссылки
- Изменения относительно прошлой версии: v1.3.0…v1.3.1
Релиз: v1.3.0 (22.03.2026)
[1.3.0] — 2026-03-22
Важно: обязательно обновиться, если включён Long Polling
При приёме сообщений режимом Long Polling в прошлых версиях Home Assistant мог долго ждать завершения загрузки или писать в лог предупреждение о таймауте при старте — как будто интеграция «висит» на этапе настройки.
В 1.3.0 опрос сервера Max перенесён так, что он не блокирует запуск Home Assistant: после обновления система должна нормально дозагружаться, а входящие сообщения по-прежнему обрабатываются.
Новое
- Удаление сообщения — отдельное действие сервиса: указали идентификатор сообщения и нужный чат/интеграцию, сообщение удаляется в Max. Удобно для автоматизаций «убрать старое меню».
- Редактирование сообщения — можно изменить текст, формат (обычный текст, Markdown или HTML), заменить или убрать кнопки под сообщением.
- Свои кнопки к любой отправке — при отправке текста, фото, документа или видео в дополнительных полях можно задать кнопки, которых нет в настройках интеграции (например, одноразовое меню для сценария). Они добавляются к уже настроенной клавиатуре, если она к сообщению прикрепляется.
- Больше попыток для тяжёлых файлов — для фото, документа и видео можно указать, сколько раз повторять отправку, если сервер не сразу принял большой файл. Сами паузы между попытками работают предсказуемее.
- Два сенсора на каждую интеграцию — отдельно запоминается последнее отправленное из Home Assistant сообщение и последнее входящее (по данным приёма). Идентификатор в интерфейсе показывается без префикса
mid., чтобы проще копировать в автоматизации. - Примеры автоматизаций — в репозитории добавлен отдельный файл с примерами вызовов сервисов и разбора входящих событий; в основном описании (README) есть на него ссылка.
Улучшено
- В событии о входящем сообщении чаще и надёжнее передаётся идентификатор сообщения; для продвинутых сценариев доступны полные данные, которые прислал Max (чтобы ничего не «терялось» в упрощённом виде).
- Подписи к полям и сообщения об ошибках в интерфейсе Home Assistant дополнены там, где появились новые действия (в том числе на русском и английском).
Ссылки
- Изменения относительно прошлой версии: v1.2.2…v1.3.0
Релиз: v1.2.2 (05.03.2026)
[1.2.2] — 2026-03-05
Изменено
-
Отправка по
recipient_idпри наличии сущности- Изменена приоритетность цели для сервиса
max_notify.send_message: если в вызове указаны дополнительные идентификаторы (recipient_id,chat_id,user_id), они имеют приоритет надentity_id. - Это позволяет использовать заранее настроенную сущность
notify.max_notify_...как «интеграцию по умолчанию», но при этом в конкретном вызове сервиса переопределять получателя черезrecipient_id(например, отправить сообщение в личный чат при наличии группового notify).
- Изменена приоритетность цели для сервиса
-
Прямая отправка сообщений без сущности notify
- Добавлена возможность отправлять сообщения напрямую по
recipient_id/chat_id/user_idдаже если для указанных ID нет соответствующей сущностиnotify.max_notify_.... - В обработчике сервиса при наличии явных ID и отсутствии
buttonsсообщение формируется и отправляется напрямую через новый вспомогательный методsend_plain_message, минуя поиск сущностей в реестре Home Assistant.
- Добавлена возможность отправлять сообщения напрямую по
-
Улучшение UI форм сервисов
- Для полей
messageиtitleсервисаsend_message, а такжеcaptionвsend_photo,send_videoиsend_documentвключён многострочный ввод (multiline: true) вservices.yamlдля более удобного редактирования текста в интерфейсе Home Assistant.
- Для полей
-
Уточнён текст ошибок и локализация
- Сообщение об ошибке
missing_targetобновлено: теперь явно указывается, что можно использоватьrecipient_id,chat_idилиuser_idв связке сentity_idилиconfig_entry_id. - Для случая, когда по переданному
recipient_id/chat_id/user_idне удаётся определить получателя, добавлена локализованная ошибкаplain_recipient_not_resolved, которая отображается в интерфейсе Home Assistant при вызове сервиса. - Для новых и существующих ошибок (
invalid_notify_entity,missing_target,invalid_config_entry,missing_config_entry_id,no_matching_entities,plain_recipient_not_resolved) добавлены записи в секцииexceptionsпереводов (en/ru) в формате, поддерживаемом Home Assistant.
- Сообщение об ошибке
Релиз: v1.2.1 (05.03.2026)
[1.2.1] — 2026-03-05
Добавлено
-
Единый идентификатор получателя (
recipient_id)
Для всех сервисовmax_notify.send_message,send_photo,send_document,send_videoдобавлен параметрrecipient_id(в схемах, обработчиках и UI):- положительное число — личный чат (User ID);
- отрицательное число — групповой чат (Chat ID).
В событииmax_notify_receivedдобавлено полеrecipient_idс тем же смыслом, что и при настройке чата. Это позволяет в автоматизациях просто передаватьrecipient_idобратно в сервис, чтобы ответить «в тот же чат», независимо от типа (личка или группа).
-
Логирование и отладка
Добавлены подробные DEBUG-логи:async_process_update: логируются entry_id, тип апдейта, ключ дедупликации и «сырое» тело update (ограниченное по длине);- polling GET /updates: marker, параметры запроса, количество полученных обновлений, новый marker;
- регистрация сервисов (
register_send_message_service,_ensure_service_registered), выбор действия в меню опций/кнопок, длина webhook-секрета; - отправка сообщений/медиа: параметры получателей, длина текста, количество попыток и успех/ошибки Max API; при 5 неудачных попытках создаётся persistent_notification в HA с деталями ошибки.
Изменено
-
- В таблицу
max_notify_receivedдобавлено полеrecipient_idи пояснение, что оно рекомендуется для автоматизаций;chat_idиuser_idпомечены как низкоуровневые. - Примеры автоматизаций переписаны на использование
recipient_id(одна строка вместоchooseс проверкой знакаchat_id). - В описании сервиса
max_notify.send_messageдобавлен параметрrecipient_idи уточнено, что в «Дополнительно» можно использовать связкуconfig_entry_id + recipient_id.
- В таблицу
-
Сервисы и схемы
- В
schemas.pyдобавленCONF_RECIPIENT_IDво все схемы сервисов (send_message, send_photo, send_document, send_video). - В
services.pyреализован разборrecipient_idпо знаку на списки chat_ids/user_ids в обработчиках отправки сообщения, фото/документа и видео; добавлены DEBUG-логи_resolve_entity_ids, async_send_message_handler,_send_photo_or_document,_send_video. - В
services.yamlв блокахadvancedвсех четырёх сервисов добавлено полеrecipient_id(пример: положительный User ID, отрицательный Chat ID).
- В
-
Переводы
- Для всех сервисов добавлены локализованные описания поля
recipient_id(en/ru). - Поля
chat_idиuser_idв переводах помечены как устаревшие в контексте send_message (name с пометкой(deprecated)/(устарело)и описание с рекомендацией использоватьrecipient_id).
- Для всех сервисов добавлены локализованные описания поля
-
Улучшенная отправка сообщений
Вnotify.pyдобавлена повторная отправка сообщений в Max с экспоненциальной задержкой и финальным уведомлением:- до 5 попыток с логированием и паузами 1/2/4/8 секунд между ними;
- при окончательном провале создаётся
persistent_notificationв Home Assistant с информацией об ошибке и URL запроса.
Технические детали
- В
updates.py:- из
updateтеперь формируется полеrecipient_id(user_id для лички, отрицательный chat_id для группы); - для
message_callbackпри отсутствии/командытекстовая команда берётся изcallback_data— это унифицирует обработку кнопок и текстовых команд по полюcommand.
- из
- Добавлены DEBUG-логи в ключевые точки: регистрация сервисов, настройка webhook, генерация уникального имени записи, polling /updates и обработка каждого update.
Релиз: v1.2.0 (16.02.2026)
[1.2.0] — 2026-02
Добавлено
-
Приём сообщений от бота Max
- Режим приёма в настройках: Только отправка, Long Polling (опрос API) или Webhook (HTTPS-URL). При Webhook отображается URL для подписки, опционально — секрет (заголовок
X-Max-Bot-Api-Secret). - Событие
max_notify_received: при входящем сообщении или нажатии inline-кнопки. Вevent.data—update_type(message_created / message_callback),config_entry_id,user_id,chat_id,text,command,args,callback_data,event_id. - Long Polling: цикл GET /updates с маркером, таймаут и лимит из const. Запуск/остановка при setup/unload записи.
- Webhook: HTTP-представление
MaxNotifyWebhookView, регистрация/отмена URL при смене режима.
- Режим приёма в настройках: Только отправка, Long Polling (опрос API) или Webhook (HTTPS-URL). При Webhook отображается URL для подписки, опционально — секрет (заголовок
-
Кнопки клавиатуры (inline-кнопки)
- В config flow (при Polling/Webhook): шаг после секрета — меню «Кнопки клавиатуры»: добавить / удалить кнопку или продолжить. Кнопка: ряд, тип (callback / message), подпись, payload (для callback). Сохранение в
options.buttons. - В options flow: меню кнопок с действиями «Добавить кнопку», «Редактировать кнопку», «Удалить кнопку», «Завершить». Шаги выбора кнопки для редактирования и форма редактирования (ряд, тип, подпись, payload). Пояснение в переводах: payload приходит в событии как
callback_dataдля триггеров автоматизаций. - Отправка сообщений с кнопками: в
notify.py—send_message_with_buttons()и_normalize_buttons_for_api(); POST /messages сattachments: [{ type: "inline_keyboard", payload: { buttons } }]. - Сервис
max_notify.send_message: параметрbuttons(список рядов кнопок; при использовании —config_entry_idиchat_id/user_id). Параметрsend_keyboard(по умолчанию true): при true и отсутствииbuttonsк сообщению подмешивается клавиатура изentry.options.buttons. - Схема сервиса вынесена в
schemas.py(SERVICE_SEND_MESSAGE_SCHEMA с buttons и send_keyboard).
- В config flow (при Polling/Webhook): шаг после секрета — меню «Кнопки клавиатуры»: добавить / удалить кнопку или продолжить. Кнопка: ряд, тип (callback / message), подпись, payload (для callback). Сохранение в
-
Дедупликация входящих обновлений
- Ключ дедупликации:
update_id/idиз API или для message_callback — (chat_id, user_id, payload); для остальных — (update_type, timestamp, message_id). Окно для message_callback 3 с, для остальных 15 с. Блокировка (asyncio.Lock) при проверке/записи, чтобы при нескольких доставках одного нажатия уходило одно событие. - В событие добавлено поле
event_id(тот же ключ) для отсечения дублей в автоматизациях при необходимости.
- Ключ дедупликации:
-
Локализация и UI сервисов
- Полные переводы полей сервисов (name + description) для
send_message,send_photo,send_document,send_video: entity_id, message, title, send_keyboard, config_entry_id, chat_id, user_id, file, caption, notify, advanced (Дополнительно / Advanced) в en/ru и strings.json. - В
services.yamlдля send_message в блоке advanced добавлено поле send_keyboard (boolean, default true).
- Полные переводы полей сервисов (name + description) для
-
Вспомогательные модули
- api.py — проверка токена
validate_token()(GET /me). - helpers.py —
normalize_buttons(),buttons_display_str(),buttons_choice_list(),get_unique_entry_title(). - translations.py —
get_menu_labels(),get_option_labels(),get_receive_mode_title()для config/options flow. - webhook.py — расчёт URL webhook,
MaxNotifyWebhookView,register_webhook/unregister_webhook.
- api.py — проверка токена
Изменено
- manifest.json — версия 1.2.0.
- init.py — при setup entry: при режиме Polling запуск
start_polling(), при Webhook — регистрация представления иregister_webhook(). При unload —stop_polling()илиunregister_webhook(). - config_flow.py — первый шаг дополнен выбором режима приёма (receive_mode). При «Только отправка» — сразу шаг добавления чата; при Polling/Webhook — шаг секрета и меню кнопок, затем чат. Создание entry с
options: receive_mode, webhook_secret, buttons; заголовок записи с учётом режима и уникальности. Валидация токена перенесена вapi.validate_token. Options flow: форма init с полями receive_mode и webhook_secret; при Polling/Webhook переход в меню кнопок (add/edit/remove), сохранение options с buttons и обновление заголовка. - const.py — добавлены константы приёма (CONF_RECEIVE_MODE, CONF_WEBHOOK_SECRET, RECEIVE_MODE_, WEBHOOK_, POLLING_), типы обновлений и событие (EVENT_MAX_NOTIFY_RECEIVED), кнопки (CONF_BUTTONS, CONF_BUTTON_, CONF_ACTION, CONF_SEND_KEYBOARD), пути API (API_PATH_UPDATES, API_PATH_SUBSCRIPTIONS).
- notify.py — добавлены
_normalize_buttons_for_api()иsend_message_with_buttons()для отправки сообщения с inline_keyboard. - services.py — схемы сервисов импортируются из
schemas.py. Обработчик send_message: при наличииbuttons— отправка черезsend_message_with_buttonsпо config_entry_id и chat_id/user_id; иначе приsend_keyboard: trueразделение получателей на тех, кому подмешивается клавиатура из options, и остальных; вызов send_message_with_buttons для первых и notify.send_message для вторых. - README.md — переработан: краткие разделы «Возможности», «Требования», «Установка», «Настройка»; «Приём сообщений» (режимы, данные события, групповые чаты, примеры ответа и кнопок); «Кнопки клавиатуры»; «Сервисы» (таблицы и примеры); «Токен и ID», «Ссылки». Удалены дубли и лишние примеры.
Технические детали
- Новые файлы:
api.py,helpers.py,schemas.py,translations.py,updates.py,webhook.py. - В updates.py: парсинг update (message_created / message_callback), извлечение user_id из callback для message_callback, callback_data из update.callback; allowlist событий по options.buttons (при непустых кнопках — все события разрешены); дедупликация в цикле polling и в async_process_update с блокировкой.
- Subentries и unique_id при создании entry не используются для блокировки дубликата по токену (убрана проверка async_set_unique_id / _abort_if_unique_id_configured в первом шаге).
Релиз: v1.1.1 (11.02.2026)
[1.1.1] — 2026-02
Добавлено
- Соответствие HACS: в manifest добавлены
issue_tracker(ссылка на issues репозитория) иcodeowners(["@kai-zer-ru"]) для публикации в HACS. - Параметр notify в сервисах: в схемы send_message, send_photo, send_document, send_video добавлен опциональный параметр
notify(по умолчанию true); в переводах (ru/en) — поляfields.notifyдля всех четырёх сервисов.
Изменено
- manifest.json: version 1.1.1, добавлены issue_tracker и codeowners.
- notify.py: в
upload_image_and_sendиupload_video_and_sendдобавлен параметрnotify; логика передачиnotify: falseв API закомментирована (клиент Max не отключает push/звук). - services.py: логика установки/сброса
_notify_paramи передача notify в вызовы upload закомментированы; в сущности (async_send_message) закомментировано чтение _notify_param и добавление payload["notify"] = False. - services.yaml: блок поля notify во всех четырёх сервисах закомментирован — в диалоге вызова сервиса поле не отображается.
Технические детали
- Параметр notify остаётся в Python-схемах (vol.Optional("notify", default=True)); при поддержке «тихой» отправки на стороне Max достаточно раскомментировать код и блоки в services.yaml.
Релиз: v1.1.0 (11.02.2026)
[1.1.0] — 2026-02
Добавлено
-
Формат сообщений (text / markdown / html)
В первом шаге настройки добавлен выбор формата сообщений (Текст, Markdown, HTML) — соответствует параметруformatв API Max. Значение сохраняется в config entry и передаётся при отправке текста (notify, send_message), подписей к фото, документам и видео. -
Перенастройка интеграции
- Шаг async_step_reconfigure: меню интеграции ⋮ → Перенастроить. Форма с необязательным новым API-токеном (пусто = оставить текущий) и выбором формата сообщений; при отправке — обновление entry.data и перезагрузка интеграции.
- Options Flow (шестерёнка рядом с названием интеграции): та же форма изменения токена и формата, открывается по клику на шестерёнку. Реализован класс
MaxNotifyOptionsFlowиasync_get_options_flow()в config flow.
-
Минимальная версия Home Assistant
В manifest указанаminimum_ha_version": "2026.2.0"(ранее 2025.2.0).
Изменено
- config_flow.py: первый шаг (user) сохраняет и передаёт в data поле
CONF_MESSAGE_FORMAT; при создании entry в data записываютсяCONF_ACCESS_TOKENиCONF_MESSAGE_FORMAT. - notify.py: при формировании payload для отправки сообщений (текст, фото, видео) в API передаётся
"format": msg_format, если выбран не текст (значение берётся изentry.data). - const.py: добавлена константа
CONF_MESSAGE_FORMAT. - README.md: описание выбора формата при настройке, блок «Формат сообщений», способы перенастройки (шестерёнка и ⋮ → Перенастроить).
- strings.json, translations (ru/en): строки для шага user (message_format), шага reconfigure, abort.reconfigure_successful, options.step.init.
Технические детали
- Версия в manifest: 1.1.0.
- Новые импорты в config_flow:
ConfigEntry,OptionsFlow. - Схемы перенастройки и options сохраняют введённые значения при ошибке валидации токена (suggested values из user_input).
Релиз: v1.0.0 (11.02.2026)
[1.0.0] — первый релиз
Добавлено
Интеграция с мессенджером Max (официальный API platform-api.max.ru):
-
Настройка через UI (Config Flow)
- Ввод токена бота с проверкой через GET /me.
- Добавление получателей одним полем «ID получателя»: положительное число — личный чат (User ID), отрицательное — группа (Chat ID).
- Subentries: добавление нескольких чатов через страницу интеграции («Добавить чат»).
-
Сервисы
max_notify.send_message— отправка текста (message, title, entity_id или config_entry_id + chat_id/user_id).max_notify.send_photo— отправка фото по локальному пути или URL (caption, entity_id / доп. параметры).max_notify.send_document— отправка файла как документ (путь или URL).max_notify.send_video— отправка видео (mp4, mov, webm, mkv) по пути или URL.
-
Платформа notify
- Сущности
notify.max_...для каждого настроенного получателя. - Отправка сообщений через действие «Уведомление» в автоматизациях и сценариях.
- Сущности
-
Работа с медиа по документации Max
- Загрузка через POST /uploads (type=image, file, video).
- Прикрепление медиа: type + payload (объект с token из ответа загрузки).
- Для видео: токен из первого ответа (POST /uploads), загрузка на CDN, ответ retval (XML).
- Пауза после загрузки и повтор при
attachment.not.readyс увеличивающимся интервалом (фото/документ и видео). - Парсинг ответа загрузки без зависимости от Content-Type (CDN может не отдавать application/json).
-
Получатели
- Разрешение user_id → chat_id диалога через GET /chats для личных сообщений.
- Выбор получателя: entity_id или config_entry_id + chat_id / user_id в расширенных параметрах сервисов.
-
Локализация
- Русский и английский (translations/ru.json, en.json), строки конфигурации и сервисов.
-
Документация и упаковка
- README с описанием установки (HACS и вручную), настройки, сервисов, получения токена и ID.
- manifest.json (version 1.0.0, documentation, minimum_ha_version 2025.2.0).
- hacs.json для установки через HACS.
- .gitignore для Python/IDE/OS.
Технические детали
- Файлы интеграции:
__init__.py,config_flow.py,const.py,manifest.json,notify.py,services.py,services.yaml,strings.json,translations/en.json,translations/ru.json. - Константы: задержки и интервалы повторов вынесены в const.py (FILE_UPLOAD_DELAY, FILE_READY_RETRY_DELAYS, VIDEO_*).
- Общая логика: отправка сообщения с вложением и повторами вынесена в
_post_message_with_retry()в notify.py.