{"id":44769629,"url":"https://github.com/kai-zer-ru/max-notify-ha","last_synced_at":"2026-05-03T13:02:33.198Z","repository":{"id":337783377,"uuid":"1155131457","full_name":"kai-zer-ru/max-notify-ha","owner":"kai-zer-ru","description":"MaxNotify - интеграция для отправки сообщений в мессенджер MAX из Home Assistant","archived":false,"fork":false,"pushed_at":"2026-04-17T12:39:00.000Z","size":992,"stargazers_count":41,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-04-17T14:29:53.360Z","etag":null,"topics":["homeassistant","homeassistant-integration","max"],"latest_commit_sha":null,"homepage":"https://kai-zer.ru","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kai-zer-ru.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://dzen.ru/kai_zer_ru?donate=true","https://t.me/boost/kai_zer_ru_public","https://www.tbank.ru/rm/r_wKLcbFgjYa.ncgWMwrHSA/vyQvd5941/"]}},"created_at":"2026-02-11T06:44:46.000Z","updated_at":"2026-04-15T15:11:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kai-zer-ru/max-notify-ha","commit_stats":null,"previous_names":["kai-zer-ru/max-notify-ha"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/kai-zer-ru/max-notify-ha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kai-zer-ru%2Fmax-notify-ha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kai-zer-ru%2Fmax-notify-ha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kai-zer-ru%2Fmax-notify-ha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kai-zer-ru%2Fmax-notify-ha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kai-zer-ru","download_url":"https://codeload.github.com/kai-zer-ru/max-notify-ha/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kai-zer-ru%2Fmax-notify-ha/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32569714,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["homeassistant","homeassistant-integration","max"],"created_at":"2026-02-16T05:02:20.342Z","updated_at":"2026-05-03T13:02:33.188Z","avatar_url":"https://github.com/kai-zer-ru.png","language":"Python","funding_links":["https://dzen.ru/kai_zer_ru?donate=true","https://t.me/boost/kai_zer_ru_public","https://www.tbank.ru/rm/r_wKLcbFgjYa.ncgWMwrHSA/vyQvd5941/"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\".images/logo.png\" alt=\"MaxNotify\" width=\"480\"\u003e\n\u003c/p\u003e\n\n# MaxNotify для Home Assistant\n\n**MaxNotify** подключает мессенджер **Max** к Home Assistant: можно отправлять сообщения, фото, файлы и видео в чаты и (по желанию) реагировать на входящие сообщения и нажатия кнопок в сценариях. Настройка выполняется через интерфейс Home Assistant, без правки конфигурационных файлов для самой интеграции.\n\nИнтеграция умеет работать **двумя способами**: с **официальным API** платформы Max и через сервис **notify.a161.ru** (упрощённый вариант для тех, кто им пользуется). Оба варианта настраиваются в мастере при добавлении записи.\n\n**Текущая версия интеграции:** 2.0.0. **Поддерживается Home Assistant** не ниже **2026.2.0** (более старые выпуски могут работать некорректно).\n\n---\n\n## Содержание\n\n- [Сообщество и поддержка](#сообщество-и-поддержка)\n- [Важно знать про Max и про notify.a161.ru](#важно-знать)\n- [Что умеет интеграция](#что-умеет)\n- [Что понадобится заранее](#что-понадобится)\n- [Установка](#установка)\n- [Первичная настройка](#первичная-настройка)\n- [Приём сообщений и сценарии](#приём-сообщений)\n- [Кнопки под сообщением](#кнопки)\n- [Действия Home Assistant (сервисы)](#действия-home-assistant)\n- [Удаление сообщений (подробно)](#удаление-сообщений-подробно)\n- [Подробные примеры автоматизаций](#подробные-примеры-автоматизаций)\n- [Краткий журнал возможностей (по истории коммитов)](#краткий-журнал-возможностей-по-истории-коммитов)\n- [Если что-то не работает: журнал](#если-что-то-не-работает-журнал)\n- [Где взять токен и ID чата](#где-взять-токен-и-id)\n- [Для разработчиков](#для-разработчиков)\n- [Полезные ссылки](#полезные-ссылки)\n\n[![HACS](https://img.shields.io/badge/HACS-Default-orange.svg)](https://github.com/hacs/integration)\n[![GitHub](https://img.shields.io/badge/GitHub-kai--zer--ru%2Fmax--notify--ha-blue?logo=github)](https://github.com/kai-zer-ru/max-notify-ha)\n[![Поддержать](https://img.shields.io/badge/донат-Tinkoff-FFDD2D.svg)](https://www.tbank.ru/rm/r_wKLcbFgjYa.ncgWMwrHSA/vyQvd5941/)\n\n---\n\n## Сообщество и поддержка\n\nНовости, обновления и помощь по теме:\n\n- **Telegram** — [@kai_zer_ru_ha](https://t.me/kai_zer_ru_ha)\n- **Max** — [kai_zer_ru_ha](https://max.ru/id251603503331_biz)\n- **Дзен** — [kai_zer_ru_ha](https://dzen.ru/kai_zer_ru_ha)\n- **VK** — [kai_zer_ru_ha](https://vk.com/kai_zer_ru_ha)\n- **Обсуждение** - [Чат в Max](https://max.ru/join/KoCsTSA3VGOCiIFdSAW0myVJEwXZi-rt9fTfGxdgk6A)\n- **Поддержка автора** - [Т-Банк](https://www.tbank.ru/rm/r_wKLcbFgjYa.ncgWMwrHSA/vyQvd5941/)\n\n---\n\n## Важно знать\n\n### Регистрация бота в Max\n\nСейчас регистрация разработчика и выпуск бота на платформе Max ориентированы на **ИП и организации**. Это правила самой платформы, а не интеграции. Для работы через **официальный API** вам нужен бот и токен из кабинета разработчика.\n\n### Сервис notify.a161.ru\n\nИнтеграция **может** работать через прокси [notify.a161.ru](https://notify.a161.ru/) и бота в Max — те же идеи (отправка, приём, кнопки), но с **ограничениями этого сервиса** и без ответственности автора MaxNotify за стабильность чужого сайта. Подключение такого режима — **на ваше усмотрение и риск**.\n\nКратко, как этот режим устроен в MaxNotify (**это единственное место, где перечислены все отличия**; дальше по тексту — только отсылки сюда, без повторов):\n\n- **Чаты:** поддерживаются **личные** (положительный ID) и **групповые** (отрицательный ID), как в мессенджере Max: отправка и приём в группе — если это позволяет [сервис](https://notify.a161.ru/). Несколько получателей к одной записи — через **Добавить чат** (как у официального API). Другой токен или полностью отдельная связка настроек — **отдельная** запись MaxNotify.\n- **Slash-команды:** добавить команды бота через API Max в этом режиме нельзя; входящие сообщения вида `/команда` всё равно обрабатываются — в событии **`max_notify_received`** поле **`command`** без ведущего `/` (как при работе через официальный API).\n- Приём входящих — только **опрос сервера (Polling)**, не WebHook.\n- Перед отправкой файлов интеграция проверяет размер **до 10 МБ** на файл.\n- Если долго не было ни входящих сообщений, ни исходящих **с кнопками**, интеграция может **сама переключить приём на «только отправка»** (чтобы снова слушать чат, включите приём в настройках записи).\n- Между исходящими запросами к одной записи выдерживается пауза **около 1 секунды**.\n- **Удаление сообщений:** по **`message_id`** или списку **`message_ids`** — поддерживается. **Удаление по дате**, по **интервалу «начало / конец периода для поиска»** и действие **«удалить последнее исходящее»** для notify.a161.ru **не поддерживаются** (эти режимы есть только у **официального API**). При вызове недоступной операции Home Assistant покажет **переведённую ошибку**, запрос к сервису уходит не будет.\n\nШаги мастера — в разделе [Первичная настройка → notify.a161.ru](#notifya161ru).\n\n### Токен\n\nТокен вы получаете у выбранного способа подключения (официальный кабинет Max или бот notify.a161.ru). В описании интеграции считается, что это **долгоживущий** токен: отдельные сценарии смены пароля и срока жизни здесь не расписываются.\n\n---\n\n## Что умеет\n\n- **Отправка** текста, фото, документов и видео в Max через **службу MaxNotify** (действия `max_notify.send_message`, `send_photo`, `send_document`, `send_video` и т.д. в сценариях или вручную в **Инструментах разработчика**).\n- **Одно сообщение с несколькими вложениями** — в интерфейсе действий можно передать список файлов; на стороне интеграции действует общий лимит платформы (**до 12 вложений на сообщение**, включая inline-клавиатуру), как у официального API Max.\n- **Приём** (если включён): новые сообщения и нажатия кнопок попадают в Home Assistant как событие **`max_notify_received`** — на него можно повесить сценарии.\n- **Сообщения вида `/команда` (slash):** из текста входящего сообщения в событии заполняется поле **`command`** (без ведущего `/`), плюс **`args`** — остаток строки; так можно строить сценарии на команды в чате. Для записи с **официальным API** в настройках интеграции дополнительно можно задать список slash-команд бота и **синхронизировать** его с платформой Max. У **notify.a161.ru** синхронизации команд с бэкендом Max нет, но разбор `/команда` в пришедшем тексте при включённом приёме сохраняется.\n- **Кнопки** под сообщением: задаются в настройках записи и/или в действии отправки; по нажатию можно запускать автоматизации.\n- **Рассылка одним действием** всем добавленным чатам во **всех** записях MaxNotify — действие **`max_notify.send_text_to_all`**.\n- Настройка через **Настройки → Устройства и службы**; YAML нужен только если вы сами пишете сценарии.\n\nУ **официального API** есть **Long Polling** и **WebHook**; у **notify.a161.ru** вместо них только **Polling** для приёма. **Группы** поддерживаются в обоих типах подключения; остальные ограничения notify.a161.ru — в разделе [Сервис notify.a161.ru](#сервис-notifya161ru).\n\n---\n\n## Что понадобится\n\n- Установленный Home Assistant не ниже **2026.2.0**.\n- Для **официального API**: бот в Max и **токен** из раздела интеграции (например [business.max.ru](https://business.max.ru/self/#/chat-bots) / документация разработчика).\n- Для **notify.a161.ru**: **user_id** и **токен** (36 символов), как выдаёт сервис [notify.a161.ru](https://notify.a161.ru/).\n\n---\n\n## Установка\n\n### Через HACS (рекомендуется)\n\n[![Открыть репозиторий в HACS](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=kai-zer-ru\u0026repository=max-notify-ha\u0026category=integration)\n\nЕсли кнопка не сработала: **HACS** → **Интеграции** → вверху списка откройте меню (**⋯**) → **Пользовательские репозитории** → URL `https://github.com/kai-zer-ru/max-notify-ha`, категория **Интеграция**. Установите **MaxNotify** и **перезапустите** Home Assistant.\n\n### Вручную\n\nСкопируйте папку `custom_components/max_notify` из этого репозитория в каталог `config/custom_components/` вашего Home Assistant и перезапустите систему.\n\nПосле установки: **Настройки** → **Устройства и службы** → **Добавить интеграцию** → найдите **MaxNotify**.\n\n---\n\n## Первичная настройка\n\nПри добавлении записи сначала выберите **тип подключения** в списке.\n\n### Официальный API Max (platform-api.max.ru)\n\n1. Укажите **токен** бота — интеграция проверит его через сеть.\n2. Выберите **формат текста**: обычный текст, Markdown или HTML (как позволяет API Max).\n3. Выберите **режим приёма**:\n   - **Только отправка** — входящие сообщения не обрабатываются.\n   - **Длинный опрос (Long Polling)** — Home Assistant сам опрашивает сервер Max, **внешний адрес не нужен**.\n   - **WebHook** — сервер Max вызывает **URL вебхука** вашего Home Assistant по **HTTPS** (входящие запросы к интеграции). Нужен **доступный из интернета** адрес (не только «домашний» `http://192.168.…`). Его задают в **Настройки → Система → Сеть**; часто используют облачный доступ Home Assistant или обратный прокси с сертификатом. В карточке интеграции показывается адрес вебхука; при желании задаётся **секрет** (проверка заголовка запроса).\n4. Если включён приём не «только отправка», можно настроить **кнопки** клавиатуры (ряды, подписи, ссылка или «callback» для сценариев).\n5. Добавьте **чат**: укажите номер получателя. **Положительное число** — личный диалог, **отрицательное** — группа. Дополнительные чаты добавляются через меню записи (**Добавить чат**).\n\nПозже токен и формат можно изменить в **Перенастроить**; список чатов — в настройках записи.\n\n### notify.a161.ru\n\n1. Получите на [notify.a161.ru](https://notify.a161.ru/) **user_id** и **токен** (36 символов).\n2. Введите токен, формат сообщений и режим: **только отправка** или **Polling** (опрос очереди входящих).\n3. Для Polling укажите **интервал опроса** и **период неактивности** (1–3 суток); правило автопереключения на «только отправка» — в [блоке про сервис](#сервис-notifya161ru).\n4. Укажите ID получателя: **положительный** — личный чат, **отрицательный** — группа (как у официального API). Дополнительные чаты — **Добавить чат** в карточке записи. Чтобы полностью сменить токен или «основную» связку, используйте **Перенастроить** или новую запись.\n\n---\n\n## Приём сообщений\n\nКогда приём включён, Home Assistant получает событие **`max_notify_received`**. Его можно использовать в **Сценариях** с триггером **Событие**.\n\nОсновные поля (для ответа в тот же чат удобны **`config_entry_id`** и **`recipient_id`**):\n\n| Поле | Зачем нужно |\n|------|-------------|\n| `update_type` | Тип: новое сообщение или нажатие кнопки |\n| `config_entry_id` | Какая запись MaxNotify |\n| `recipient_id` | Куда отвечать (**тот же номер**, что при добавлении чата): положительный — личный чат, отрицательный — группа |\n| `text` | Текст сообщения |\n| `command` | Если сообщение похоже на команду (например `/start`) |\n| `callback_data` | Данные нажатой кнопки |\n| `message_id` | Номер сообщения (удобно для удаления или правки) |\n| `event_id` | Уникальный ключ события (в т.ч. чтобы не сработать дважды) |\n\nДополнительно в событии могут быть поля вроде `user_id` и `chat_id` в формате API Max; для новых сценариев ориентируйтесь на **`recipient_id`**.\n\n**Официальный API:** пока у бота активна подписка **WebHook**, **Long Polling** со стороны Max недоступен — в интерфейсе это учтено: сначала переключите режим, если нужно сменить способ приёма. Несколько записей с **одним и тем же** токеном не могут одновременно конфликтовать (например WebHook в одной и Long Polling в другой) — мастер настройки это блокирует.\n\nНа стороне платформы Max для **long polling** действуют ограничения (в т.ч. не более **2 запросов в секунду** к очереди обновлений, таймаут long poll **30 с**, размер выборки до **100** событий; подробности — в [документации подписок](https://dev.max.ru/docs-api/methods/POST/subscriptions)). Интеграция выдерживает паузу между запросами long polling и использует согласованный таймаут; для стабильной работы в продакшене по-прежнему рекомендуется **WebHook**, если у Home Assistant есть **публичный HTTPS** (см. [Сеть](https://www.home-assistant.io/docs/configuration/basic/) в документации HA). Переключение на WebHook **не ломает** существующие сценарии на событие **`max_notify_received`**, если внешний URL корректно указан в настройках системы.\n\n**Если пропал внешний HTTPS** для WebHook: при загрузке интеграция может **снять подписку** в Max и перевести запись в безопасный режим, а в Home Assistant появится **заметка о проблеме** с подсказкой проверить сеть.\n\n**notify.a161.ru:** входящие только через **Polling**; остальные ограничения — в [блоке про сервис](#сервис-notifya161ru).\n\n**Группы (официальный API и notify.a161.ru):** бота добавляют в группу и по правилам Max выдают ему нужные права (часто **администратор**), иначе события из группы могут не приходить. ID группы — **отрицательный** `recipient_id`. Для notify.a161.ru дополнительные нюансы — [в блоке про сервис](#сервис-notifya161ru).\n\n---\n\n## Кнопки\n\n- В **настройках записи** задаётся постоянная клавиатура (если включён приём не «только отправка» — для официального API это Long Polling или WebHook, для notify.a161 — Polling).\n- В **действии отправки сообщения** можно добавить свои кнопки или отключить прикрепление сохранённой клавиатуры.\n- Тип **ссылка** открывает сайт; адрес должен начинаться с `http://` или `https://`.\n- Для кнопок «callback» в сценарии фильтруйте событие по **`callback_data`**.\n\n---\n\n## Действия Home Assistant\n\nВсе действия начинаются с **`max_notify.`** (в интерфейсе — в списке действий службы MaxNotify).\n\n**Формат сообщений** — в **расширенных параметрах** действия (блок обычно свёрнут): поле **`format`** — **`text`**, **`markdown`** или **`html`**, как при настройке записи. Оно задаёт разметку **текста сообщения**, **подписи** к фото/файлу/видео и текста при **правке сообщения** (`edit_message`). Если не указать, используется формат, выбранный в настройках интеграции.\n\n**Пользовательские кнопки** — тоже в расширенных параметрах:\n\n- **`send_keyboard`** — прикладывать ли к этому отправлению **клавиатуру из настроек записи** (по умолчанию вкл.). Выключите, если нужен только текст или только свои кнопки.\n- **`buttons`** — **своя** inline-клавиатура **только для этого вызова**: ряды кнопок (тип callback / message / **link** с URL `http`/`https`). Можно комбинировать с сохранённой клавиатурой, если **`send_keyboard`** включён. Готовые примеры структуры — в **[AUTOMATIONS.md](AUTOMATIONS.md)** и в подсказке к полю в UI.\n\n| Действие | Назначение |\n|----------|------------|\n| **send_message** | Текст, при необходимости **заголовок**; в расширенных — **формат**, **`send_keyboard`**, **`buttons`**. Получателя указывают **сущностью чата Max** (создаётся интеграцией) либо вручную: запись MaxNotify + `recipient_id` в расширенных полях. |\n| **send_text_to_all** | Тот же текст **во все добавленные чаты** всех записей MaxNotify (записи без ни одного чата пропускаются). В расширенных — **формат**, **`send_keyboard`**, **`buttons`**. |\n| **send_photo** | Фото: файл на диске Home Assistant или ссылка; можно несколько файлов; **подпись**; в расширенных — **формат**, клавиатура, **`buttons`**, повторы при обработке вложения на стороне Max. |\n| **send_document** | Один файл-документ за вызов (только поле **`file`**, не **`files`**); подпись, формат, клавиатура и **`buttons`** — как у фото. |\n| **send_video** | Видео (форматы вроде mp4, mov, webm, mkv). |\n| **delete_message** | Удаление по ID, списку ID, **дате (календарный день)** или **интервалу периода**. Подробно — [ниже](#удаление-сообщений-подробно). |\n| **delete_last_outgoing_message** | Найти и удалить последнее **исходящее** сообщение бота в **групповом** чате. **Только официальный API Max**; у notify.a161.ru недоступно. В личных чатах официальный API не отдаёт историю по `recipient_id` — используйте явный `message_id`. |\n| **edit_message** | Изменить текст (**в т.ч. формат** в расширенных), кнопки сообщения или снять их (**`remove_buttons`**). |\n\nВ расширенных параметрах у **медиа**-действий дополнительно при необходимости задаются **авторизация для скачивания по ссылке** (Basic / Digest / Bearer), **отключение проверки SSL** (только если понимаете риск), число **повторов** отправки, пока вложение «готовится» на сервере.\n\n---\n\n## Удаление сообщений (подробно)\n\nДействие **`max_notify.delete_message`** объединяет несколько режимов. Ошибки валидации выводятся в интерфейсе Home Assistant **с переводом** (русский / английский и др., см. `translations/` интеграции).\n\n### Приоритет полей (сверху вниз)\n\nЕсли задано несколько способов, используется **только верхний по списку**, остальные игнорируются:\n\n1. **`message_id`** (один или несколько через запятую в одном поле)\n2. **`message_ids`**\n3. **`date`** — один календарный день в **локальной** зоне Home Assistant (00:00:00–23:59:59)\n4. Пара полей периода: **`from`** и **`to`** (в UI: «Начало периода для поиска» / «Конец периода для поиска»)\n\n### Период и дата\n\n- **Интервал:** нужно указать **оба** поля начала и конца **или** ни одного (если удаляете только по ID / дате). Одна граница без второй — ошибка.\n- **Поле «Дата»:** только **дата без времени** (или Unix timestamp — берётся календарный день момента). Если в значении указано время — ошибка.\n- **Форматы даты и времени** (для `from` / `to` и для «Даты» как даты): `2026-10-23`, `2026.10.23`, `2026/10/23`, `23.10.2026`, `23-10-2026`, `23/10/2026`; с временем — через пробел или `T`, время с `:` или `-` (например `2026-10-23 00:00:00`, `23.10.2026 00-00-00`). Допускается Unix timestamp. Неверный формат — ошибка.\n\n### Официальный API и notify.a161.ru\n\n| Возможность | Официальный API | notify.a161.ru |\n|-------------|-----------------|----------------|\n| Удаление по `message_id` / `message_ids` | Да | Да |\n| Удаление по **дате** или **интервалу** (поиск в API, затем удаление **по одному** `message_id` на запрос) | Да | **Нет** (будет сообщение об ошибке) |\n| Действие **`delete_last_outgoing_message`** | Да (группы) | **Нет** |\n\nУ **официального API** при запросе списка сообщений за период в query передаётся **`count`** (не дублируется запрос с `limit`).\n\n**Лимит частоты:** на экземпляр Home Assistant действует **общее** ограничение **не более 30 исходящих HTTP-запросов в секунду** ко всем конечным точкам API Max и notify.a161.ru (отправка, удаление, правка, опрос `/updates`, подписки WebHook и т.д.). Скачивание медиа по произвольным URL в настройках вложений в это ограничение **не входит**.\n\n### Ответ действия\n\nПри вызове из UI в ответе может быть объект **`deleted`** — сколько сообщений успешно удалено.\n\n### Пример вызова вручную (notify.a161.ru, только по ID)\n\n```text\nDELETE https://notify.a161.ru/messages?message_id=mid.\u003cваш_id\u003e\nAuthorization: \u003cтокен из настроек записи\u003e\n```\n\nПодробные YAML-примеры — в **[AUTOMATIONS.md](AUTOMATIONS.md)**.\n\n---\n\n## Подробные примеры автоматизаций\n\nГотовые фрагменты YAML (ответ на команду, нажатие кнопки, все параметры действий) собраны в файле **[AUTOMATIONS.md](AUTOMATIONS.md)**.\n\n---\n\n## Если что-то не работает: журнал\n\nЧтобы в журнале появлялись подробные сообщения интеграции, в `configuration.yaml` можно добавить:\n\n```yaml\nlogger:\n  default: warning\n  logs:\n    custom_components.max_notify: debug\n```\n\nПерезагрузите Home Assistant и откройте **Настройки → Система → Журнал**; при необходимости используйте просмотр полного журнала из меню журнала.\n\n---\n\n## Где взять токен и ID\n\n- **Токен официального бота:** кабинет разработчика Max → ваш бот → раздел про интеграцию / API.\n- **User ID и Chat ID:** например бот [CHECK ID](https://max.ru/id222312277810_1_bot) в Max (по пересланному сообщению) или API со списком чатов в [документации Max](https://dev.max.ru/docs-api).\n\n---\n\n## Для разработчиков\n\nОписание данных от операторов API и оформление изменений в репозитории: **[docs/README.md](docs/README.md)**.\n\nСпособности бэкенда по типу интеграции задаются в **`IntegrationCapabilities`** (см. **[docs/PROVIDER_SPEC.md](docs/PROVIDER_SPEC.md)**), в том числе:\n\n- **`supports_delete_message`** — удаление по известному `message_id`;\n- **`supports_delete_message_by_period`** — поиск по дате/интервалу и удаление найденных сообщений (по одному HTTP DELETE на сообщение);\n- **`supports_delete_last_outgoing_message`** — служба «последнее исходящее».\n\nДля **notify.a161.ru** последние два флага выключены.\n\n**Сенсоры ID сообщений:** при появлении нескольких чатов на запись идентификаторы сообщений привязаны к чату; старые сенсоры с прежним `unique_id` могут остаться в системе помеченными как устаревшие — см. журнал и карточку устройства.\n\n---\n\n## Краткий журнал возможностей (по истории коммитов)\n\nНиже — то, что по смыслу добавлялось в ветке 2.x и релизах 1.4.x, если это не продублировано выше по тексту:\n\n- **Версия 2.0.0** — архитектура по **провайдерам** (официальный API и notify.a161.ru), общий код исходящих запросов.\n- **Сенсоры ID сообщений:** перестали создаваться **устаревшие дубликаты по каждому чату** (отдельный `unique_id` на получателя); остаются актуальные сенсоры по чату и **два глобальных устаревших** на запись интеграции (для совместимости с прошлыми версиями). Ранее созданные лишние сущности при желании удалите из реестра объектов вручную.\n- **Удаление** — по ID/списку; по дате и интервалу (список через GET /messages, затем удаления по одному id) и **удаление последнего исходящего** в группе — для официального API; ограничения a161 — в таблице выше; **глобально до 30 исходящих запросов/с** к API.\n- **Несколько вложений** в одном сообщении (лимит платформы, до **12** с учётом клавиатуры); исправления приёма и отправки вложений.\n- **Slash-команды** — поля `command` / `args` в `max_notify_received`; синхронизация команд с Max — только официальный API.\n- **`send_text_to_all`** — рассылка текста во все чаты всех записей.\n- **Формат текста** (`text` / `markdown` / `html`) в сервисах отправки и правки.\n- **notify.a161.ru** — polling **GET /updates**, интервал опроса и **период неактивности** (автопереход в «только отправка»); пауза **~1 с** между исходящими запросами; лимит файла **10 МБ**; при сбоях polling — запись в **ремонты** и подсказки в логах (в т.ч. **curl** на уровне debug).\n- **Медиа по URL** — опциональная **авторизация** (Basic, Digest, Bearer) и опция **отключения проверки SSL** для загрузки по ссылке.\n- **WebHook vs Long Polling** — взаимное исключение на один токен; WebHook только при **HTTPS** в настройках HA; при потере HTTPS подписка может быть снята.\n- **Групповые чаты a161** — исправления добавления и работы с отрицательным `recipient_id`.\n- **Порядок полей в UI** сервисов, **format** в `edit_message` как выпадающий список, единый стиль `services.yaml`.\n- **SSL** — доработки проверки (в т.ч. wildcard).\n- **Совместимость** — при загрузке проверяется **минимальная версия** Home Assistant (см. в начале README).\n- **Сеть и таймауты** — улучшена обработка обрывов при вызовах API Max; для загрузки медиа по URL заданы **согласованные таймауты** чтения.\n\n---\n\n## Полезные ссылки\n\n- [Репозиторий MaxNotify](https://github.com/kai-zer-ru/max-notify-ha)\n- [Документация API Max](https://dev.max.ru/docs-api)\n- [Портал разработчика Max](https://dev.max.ru/)\n- [Канал в Telegram](https://t.me/kai_zer_ru_ha)\n- [Канал в Max](https://max.ru/id251603503331_biz)\n- [Поддержать проект (Тинькофф)](https://www.tbank.ru/rm/r_wKLcbFgjYa.ncgWMwrHSA/vyQvd5941/)\n- [Группа в VK](https://vk.com/kai_zer_ru_ha)\n- [Обсуждение в Max](https://max.ru/join/KoCsTSA3VGOCiIFdSAW0myVJEwXZi-rt9fTfGxdgk6A)\n\n---\n\n[![Star History Chart](https://api.star-history.com/svg?repos=kai-zer-ru/max-notify-ha\u0026type=date\u0026theme=dark)](https://star-history.com/#kai-zer-ru/max-notify-ha\u0026type=date)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkai-zer-ru%2Fmax-notify-ha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkai-zer-ru%2Fmax-notify-ha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkai-zer-ru%2Fmax-notify-ha/lists"}