Перейти к содержанию

Автоматизация сообщений

Передача обращения сделала каждое действие явным. Автоматизация сообщений требует такой же модели: событие не должно немедленно означать отправку. Нужны условия допустимости, ключ операции, окно, остановка и обработка неизвестного результата. В этом уроке составим правило AUTO-01 для синтетической месячной SEO-подборки контакта R002.

Никакого планировщика или провайдера нет. Папка lesson-14 архива серии содержит карту ожидаемых веток, не программу. Все события вымышлены, сообщения не отправляются. R001 остаётся unsubscribed и не включается в редакционные действия; отдельное обращение сохраняется независимо.

Событие и кандидат

Введём событие EV-SEO-N02: в учебной модели доступен материал N02 о странице товара при отсутствии запаса. Его тема seo совпадает с предпочтением R002. Это кандидат для месячной подборки, не отдельное срочное письмо. Публичное назначение использует вымышленный домен, а available_in_model описывает только сценарий. Настоящая публикация статьи не выполняется этим правилом.

Вход события содержит ID, предмет, тему и версию редакционного пакета. Подписка хранится отдельно и проверяется по актуальному срезу. Если событие пришло повторно, его ID остаётся тем же. Если меняется содержание материала, версия пакета меняется с объяснением. Эти объекты не следует смешивать: дубль уведомления и существенное обновление статьи требуют разных решений.

Шаг Условие Ожидаемый результат
Получить событие ID и тема известны Кандидат N02
Выбрать контакт confirmed, seo, monthly R002
Проверить окно Месячный слот допустим Подготовить задачу
Перед действием Нет нового запрета Разрешить только актуальную операцию
Неясное принятие Результат провайдера неизвестен Сверка, не слепой повтор

Ключ и повтор

Ключ операции модели: контакт R002, цель lesson_updates, выпуск MONTH-01. Один выпуск может включать несколько подходящих материалов, но не создавать по письму на каждое событие. Если EV-SEO-N02 повторилось, оно не добавляет вторую одинаковую карточку. Это ожидаемое правило идемпотентности на уровне предмета, не доказанная гарантия будущей системы.

В приложении задача имеет состояние planned_local. Оно не означает запись в настоящей очереди. Нет ID API, времени приёма и факта передачи. Если будущая реализация сохранит задачу, понадобятся согласованное хранение, проверка ключа и права действия. В этой серии технические программы не запускаются, поэтому нельзя объявить защиту от дублей проверенной.

Повтор запроса к провайдеру особенно сложен при тайм-ауте после возможного принятия. Может быть неизвестно, создано ли сообщение. Простое увеличение счётчика попытки не делает повтор безопасным. Модель unknown_acceptance требует сверить операцию по возможностям выбранного сервиса или передать решение человеку. Не обещаем «ровно одно письмо» без технического основания и документации конкретной интеграции.

Если провайдер в будущем поддерживает ключ идемпотентности, его смысл и срок нужно проверить отдельно. В нашем правиле такой сервис не выбран. Поэтому таблица не содержит выдуманного HTTP-заголовка, гарантии или результата API. Предметная карта показывает потребность, а не заменяет документацию. Это позволяет подготовить автоматизацию без ложного впечатления готового работающего продукта.

Остановка и актуальность

Перед предполагаемым действием заново читаются состояние подписки, тема, частота и запрет. В альтернативной ветке R002 отписался после подготовки месячной задачи. Тогда она отменяется. Это отдельный синтетический вариант, который не меняет основной текущий срез уроков: в нём R002 остаётся confirmed. Разделение основной цепочки и варианта важно для последующих глав.

Если N02 снят с модельного выпуска, карточка удаляется из подготовленной подборки. Если после этого материалов нет, письмо не отправляется только ради соблюдения календаря. Обещание «не чаще» задаёт верхнюю частоту, а не обязанность присылать пустое сообщение. Человек подписался на полезные уроки, а не на внутренний таймер редакции.

Если тема R002 изменилась, весь выпуск пересматривается по актуальному выбору. Старый снимок сегмента может храниться для объяснения подготовки, но не определяет право дальнейшего действия. Именно поэтому правило отбора пятого урока было вычисляемым. Автоматизация использует процесс, а не отменяет его ради скорости.

Запрет может поступить из доставки, отписки или административной остановки. Причина сохраняется, но для выполнения шага важен итоговый запрет в его области. AUTO-01 относится к lesson_updates; оно не обрабатывает сервисное обращение CASE-01. Смешение целей создало бы риск, что новый ответ по вопросу неожиданно возобновит редакционную рассылку.

Обслуживание правила

У автоматизации есть владелец Ольга и версия 1. Он отвечает за объяснение условия и пересмотр при изменении обещания. Будущий технический оператор будет отвечать за интеграцию, но сейчас не назначен. Нельзя считать безличное «система сама» достаточной ответственностью: при неправильном условии потребуется остановить процесс и определить затронутые задачи.

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

Отдельно запишем ручную остановку всей автоматизации. Поле enabled в нашей лаборатории ложное с самого начала. Будущий выключатель должен предотвращать новое внешнее действие и не скрывать уже принятые операции. Остановка процесса и отмена каждого сообщения — связанные, но разные задачи. Без реального сервиса мы можем только сформулировать ожидаемый порядок.

Ожидаемый результат

В artifact.md описаны основной путь, повтор события, альтернативная отписка и неизвестное принятие. after.json добавляет AUTO-01 с enabled:false, контактным ключом и локальной задачей. Предыдущие состояния сохраняются, ни письмо, ни очередь не исполняются. Результат урока — объяснимая модель автоматизации, которую можно передать для будущей реализации.

Проверьте изменённый вариант: два разных материала seo пришли в один месяц. Правильная модель объединяет их в один согласованный выпуск при подходящем содержании, а не игнорирует обещание частоты. Если один материал не соответствует выбранной цели, его исключают. Так автоматизация усиливает последовательный редакционный процесс, сохраняя выбор человека и честность ожидаемых результатов.