[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"content-post-odin-dvizhok-vmesto-zooparka":3},{"post":4,"related":139,"status":10},{"id":5,"title":6,"slug":7,"excerpt":8,"cover_alt":9,"cover_position":10,"reading_time":11,"seo_title":12,"seo_description":13,"date_published":14,"date_modified":10,"source_lead":10,"tag":15,"blocks":19,"cover":136},"ef54871a-190a-4474-9da1-f849b461ae3c","Один движок вместо зоопарка подписок","odin-dvizhok-vmesto-zooparka","CRM, рассылки, конструктор ботов, платформа автоматизации, аналитика - пять подписок и пять расходящихся копий базы клиентов. Рассказываю, как я собрал всё это внутри одной системы, что действительно стало проще, и честно - в каких случаях так делать не надо.","Спутанные кабели к пяти блокам слева и один монолитный блок справа",null,3,"CMS как единый движок: очереди, рассылки, боты и ИИ в одной админке","Как я собрал маркетинг, рассылки, ботов и ИИ-обработку внутри одной системы вместо пяти подписок - и в каких случаях так делать не надо.","2026-08-27T17:07:48.000Z",{"name":16,"slug":17,"color":18},"Инструменты","instrumenty","#3F7300",[20,26,30,35,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119],{"sort":21,"collection":22,"item":23},1,"block_text",{"body":24,"is_lead":25,"footnote":10},"Типичный набор небольшой компании: CRM, сервис рассылок, конструктор чат-ботов, платформа автоматизации, где-то отдельно аналитика. Пять подписок, пять личных кабинетов, пять счетов - и, что хуже, пять копий базы клиентов, которые расходятся между собой.",false,{"sort":27,"collection":22,"item":28},2,{"body":29,"is_lead":25,"footnote":10},"Я собрал всё это внутри одной системы - той же, где лежит контент моего сайта. Расскажу, как это выглядит, что действительно стало проще, и честно - когда так делать не стоит.",{"sort":11,"collection":31,"item":32},"block_heading",{"heading":33,"level":34},"Что было и что стало","h2",{"sort":36,"collection":22,"item":37},4,{"body":38,"is_lead":25,"footnote":10},"Раньше сайт работал в связке с отдельной платформой автоматизации: она принимала заявки, считала оценку задачи, вела бота. Платформа хорошая, но это отдельная система со своей логикой, своими секретами и своим кабинетом, а данные при этом жили в другом месте.",{"sort":40,"collection":22,"item":41},5,{"body":42,"is_lead":25,"footnote":10},"Сейчас движок один - административная система, в которой и так лежат статьи, услуги и заявки. В ней же: очереди отправки, задания по расписанию, обращения к языковым моделям, боты, рассылки, журнал сбоев и генерация обложек для статей.",{"sort":44,"collection":22,"item":45},6,{"body":46,"is_lead":25,"footnote":10},"Главный выигрыш не в экономии на подписках, хотя она есть. Он в том, что у клиента одна карточка. Не \"контакт в CRM, подписчик в рассылке и пользователь в боте, которых надо как-то сопоставлять\", а одна запись, к которой привязано всё.",{"sort":48,"collection":31,"item":49},7,{"heading":50,"level":34},"Как это устроено внутри",{"sort":52,"collection":22,"item":53},8,{"body":54,"is_lead":25,"footnote":10},"Несколько решений, которые оказались важнее остальных.",{"sort":56,"collection":22,"item":57},9,{"body":58,"is_lead":25,"footnote":10},"**Очередь - это таблица.** Одна строка - одно сообщение одному человеку. Не \"рассылка на 500 адресов\", а 500 строк с собственным статусом. Отправкой занимается процесс по расписанию, который берёт готовые к отправке и обрабатывает их.",{"sort":60,"collection":22,"item":61},10,{"body":62,"is_lead":25,"footnote":10},"Звучит избыточно, пока не случается первый сбой. Тогда выясняется, что вы точно знаете, кому дошло, кому нет и почему, можете повторить только неудавшиеся и не рискуете отправить всё заново. Ещё это защищает от классической аварии, когда одно битое сообщение встаёт в голову очереди и намертво блокирует остальные, - у каждого сообщения своя судьба.",{"sort":64,"collection":22,"item":65},11,{"body":66,"is_lead":25,"footnote":10},"**Никаких производных полей.** У рассылки нет счётчика \"отправлено\". Прогресс считается по доставкам, каждый раз заново. Так же со статусом человека в воронке: он не хранится, а выводится из истории.",{"sort":68,"collection":22,"item":69},12,{"body":70,"is_lead":25,"footnote":10},"Соблазн завести счётчик огромный - это же быстрее. Но любое дублирование состояния рано или поздно расходится с реальностью, и вы получаете рассылку, которая по счётчику завершена, а по факту нет. Считать заново дешевле, чем чинить рассинхронизацию.",{"sort":72,"collection":22,"item":73},13,{"body":74,"is_lead":25,"footnote":10},"**Секреты разложены по границе \"кто это правит\".** В админке живёт только то, что я меняю сам: ключ и адрес поставщика моделей, токены ботов, стиль генерации обложек. Технические связки - вроде общего пароля между сайтом и системой - лежат в переменных окружения. Логика простая: если это можно поправить в админке между делом, значит, однажды я это и сломаю между делом.",{"sort":76,"collection":22,"item":77},14,{"body":78,"is_lead":25,"footnote":10},"**Всё именуется одинаково.** Каждый процесс называется по шаблону \"область: что делает\" и лежит в папке своей области. Через полгода это единственное, что позволяет найти нужное среди нескольких десятков процессов.",{"sort":80,"collection":31,"item":81},15,{"heading":82,"level":34},"Что это дало на практике",{"sort":84,"collection":22,"item":85},16,{"body":86,"is_lead":25,"footnote":10},"Самый показательный пример - публикация статьи. Я перевожу статью в статус \"опубликована\". Дальше без моего участия: встроенный ИИ-помощник формулирует сюжет обложки, задание уходит в очередь картинок, генератор рисует, файл прикрепляется к статье, статья расходится по внешним площадкам, я получаю уведомление о результате.",{"sort":88,"collection":22,"item":89},17,{"body":90,"is_lead":25,"footnote":10},"Раньше это был час ручной работы, разложенный по четырём интерфейсам. Сейчас одно действие. И, что важнее, вся эта логика лежит в одном месте - если завтра понадобится добавить площадку, я добавлю её там же, а не в пятом сервисе.",{"sort":92,"collection":31,"item":93},18,{"heading":94,"level":34},"Когда так делать не надо",{"sort":96,"collection":22,"item":97},19,{"body":98,"is_lead":25,"footnote":10},"Честная часть, без которой рассказ получится рекламным.",{"sort":100,"collection":22,"item":101},20,{"body":102,"is_lead":25,"footnote":10},"**Если у вас есть команда.** Разделение по инструментам - это ещё и разделение ответственности. Маркетолог в своём сервисе рассылок никого не сломает. Тот же маркетолог в общем движке может сломать многое.",{"sort":104,"collection":22,"item":105},21,{"body":106,"is_lead":25,"footnote":10},"**Если процессы сложные и их много.** Специализированные платформы автоматизации существуют не зря: у них лучше визуальный редактор, история запусков, отладка. Я отказался от такой платформы для маленького личного сайта - но на большом проекте продолжаю её использовать и не собираюсь переносить полторы сотни сценариев в админку.",{"sort":108,"collection":22,"item":109},22,{"body":110,"is_lead":25,"footnote":10},"**Если у вас нет инженера.** Это конструктор, а не готовый продукт. Собрать очередь с диспетчером и сторожем - работа на несколько дней, а поддерживать её потом придётся самому. Пять подписок стоят денег, но не требуют вашего времени.",{"sort":112,"collection":22,"item":113},23,{"body":114,"is_lead":25,"footnote":10},"Мой случай - предельный: один человек, много автоматизации, полный контроль и желание не платить за пять кабинетов. Для компании из десяти человек ответ будет другим.",{"sort":116,"collection":31,"item":117},24,{"heading":118,"level":34},"Что забрать себе",{"sort":120,"collection":121,"item":122},25,"block_list",{"list_style":123,"items":124},"dash",[125,128,130,132,134],{"lead":126,"text":127,"highlight":25},"","Считайте не стоимость подписок, а стоимость рассинхронизации. Обычно она больше.",{"lead":126,"text":129,"highlight":25},"Очередь из отдельных сообщений вместо одной большой задачи - самое дешёвое решение, которое окупается на первом же сбое.",{"lead":126,"text":131,"highlight":25},"Не храните то, что можно посчитать. Счётчики врут.",{"lead":126,"text":133,"highlight":25},"Разделите настройки на \"правит человек\" и \"правит инженер\" и держите их в разных местах.",{"lead":126,"text":135,"highlight":25},"Единый движок - это выбор в пользу контроля и против удобства делегирования. Если делегировать некому, выбор очевиден. Если есть кому - подумайте дважды.",{"id":137,"modified_on":138},"5babb401-3bb1-4fbd-9b85-aac3a77ccf2d","2026-08-27T18:13:24.243Z",[140,260,352],{"id":141,"title":142,"slug":143,"excerpt":144,"cover_alt":145,"cover_position":10,"reading_time":11,"seo_title":146,"seo_description":147,"date_published":148,"date_modified":10,"source_lead":10,"tag":149,"blocks":150,"cover":257},"a3bdafa1-370e-4669-a460-69d658ee9330","Локально или в облаке: где своё железо реально выигрывает у API","lokalno-ili-v-oblake","Одна и та же задача на одном и том же сервере: в первом варианте 25 секунд речи обрабатывались две минуты, во втором - за десять секунд. Разбираю на замерах, где локальная модель реально выигрывает у облачного API, а где это самообман, и по какому фильтру я прохожу эту развилку.","Весы: монолитный блок против лёгкой формы из тонких линий","Локальные модели или облачный API: как выбрать на реальных замерах","Где локальная модель дешевле и лучше облачного API, а где это самообман. Реальные замеры на распознавании речи: RTF 5 против 0,12 и 208-кратная скорость на Neural Engine.","2026-08-27T17:42:48.000Z",{"name":16,"slug":17,"color":18},[151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,206,209,212,215,226,229,240,243,245],{"sort":21,"collection":22,"item":152},{"body":153,"is_lead":25,"footnote":10},"Вопрос \"локальная модель или облачный API\" почти всегда обсуждают идеологически: одни за приватность, другие за удобство. Между тем это обычная инженерная развилка, у которой есть числовой ответ - разный для разных задач.",{"sort":27,"collection":22,"item":155},{"body":156,"is_lead":25,"footnote":10},"У меня накопились замеры на одной задаче, где я прошёл оба пути до конца, - распознавание речи. Расскажу, что получилось, и заодно сформулирую фильтр, по которому эту развилку стоит проходить в любом другом проекте.",{"sort":11,"collection":31,"item":158},{"heading":159,"level":34},"Задача",{"sort":36,"collection":22,"item":161},{"body":162,"is_lead":25,"footnote":10},"Голосовой ввод на сайте и в личных инструментах: человек говорит, получает готовый текст. К этому же классу относится расшифровка звонков и встреч - обычно самый первый реальный ИИ-проект в компании, потому что польза очевидна и данные уже есть.",{"sort":40,"collection":22,"item":164},{"body":165,"is_lead":25,"footnote":10},"Требования были такие: русский язык, приемлемая задержка, и аудио не должно уезжать в чужие руки без необходимости. Последнее - не паранойя: в звонках клиентов лежат персональные данные, и отправка их наружу превращает техническую задачу в юридическую.",{"sort":44,"collection":31,"item":167},{"heading":168,"level":34},"Первый заход: сделать красиво",{"sort":48,"collection":22,"item":170},{"body":171,"is_lead":25,"footnote":10},"Первым делом я взял готовую потоковую обёртку - из тех, что показывают текст прямо во время речи, слово за словом. Выглядит эффектно, и на демо-роликах всё летает.",{"sort":52,"collection":22,"item":173},{"body":174,"is_lead":25,"footnote":10},"На процессорном сервере она дала показатель реального времени около 5. Расшифровка означает следующее: 25 секунд речи обрабатываются две минуты. Пользоваться этим нельзя.",{"sort":56,"collection":22,"item":176},{"body":177,"is_lead":25,"footnote":10},"Важно, что дело было не в железе - это отдельный сервер с быстрыми ядрами, взятый специально под задачу. Дело в подходе: потоковое распознавание постоянно пересчитывает уже сказанное, чтобы уточнить гипотезу, и на процессоре эта переработка съедает всё.",{"sort":60,"collection":31,"item":179},{"heading":180,"level":34},"Второй заход: сделать просто",{"sort":64,"collection":22,"item":182},{"body":183,"is_lead":25,"footnote":10},"Я выбросил потоковость и сделал скучно: человек говорит целиком, запись уходит на сервер одним куском, модель распознаёт её за один проход.",{"sort":68,"collection":22,"item":185},{"body":186,"is_lead":25,"footnote":10},"Показатель реального времени - 0,26. Сорок секунд речи обрабатываются за десять. После настройки - 0,12, то есть быстрее реального времени в восемь раз.",{"sort":72,"collection":22,"item":188},{"body":189,"is_lead":25,"footnote":10},"Заодно ушла вторая проблема, о которой я не думал заранее: потоковая выдача даёт рваный текст. Пока модель уточняет гипотезу, фраза на экране дёргается и переписывается. На записи целиком результат сразу чистый.",{"sort":76,"collection":31,"item":191},{"heading":192,"level":34},"Третий заход: посчитать на своём железе",{"sort":80,"collection":22,"item":194},{"body":195,"is_lead":25,"footnote":10},"Отдельная история - обработка на ноутбуке. На современном Маке есть отдельный ускоритель для нейросетей, и модель, собранная под него, показывает 208-кратную скорость относительно реального времени. Часовой разговор расшифровывается за считанные секунды, разделение на говорящих - примерно так же быстро.",{"sort":84,"collection":22,"item":197},{"body":198,"is_lead":25,"footnote":10},"Здесь же я собрал грабли, которые стоит знать заранее:",{"sort":88,"collection":121,"item":200},{"list_style":123,"items":201},[202,204],{"lead":126,"text":203,"highlight":25},"Безвентиляторный ноутбук перегревается, если гнать распознавание и разделение говорящих одновременно. Последовательно - те же секунды, но без троттлинга. Параллелить на одном ускорителе бессмысленно.",{"lead":126,"text":205,"highlight":25},"Затравка модели (список терминов, чтобы правильно писала специальные слова) должна быть обычной фразой, а не списком. Список, начинающийся со слова \"Термины:\", модель вставляла прямо в расшифровку, а на плохом звуке зацикливалась и повторяла его. Модель затравку продолжает, а не исполняет. После переписывания живым предложением мусор исчез, и скорость выросла втрое.",{"sort":92,"collection":31,"item":207},{"heading":208,"level":34},"Фильтр: когда локально выигрывает",{"sort":96,"collection":22,"item":210},{"body":211,"is_lead":25,"footnote":10},"Из этой и соседних задач сложилось правило, по которому я развилку прохожу.",{"sort":100,"collection":22,"item":213},{"body":214,"is_lead":25,"footnote":10},"**Локально выигрывает, когда:**",{"sort":104,"collection":121,"item":216},{"list_style":123,"items":217},[218,220,222,224],{"lead":126,"text":219,"highlight":25},"нагрузка постоянная и предсказуемая - расшифровка всех звонков, обработка всех документов;",{"lead":126,"text":221,"highlight":25},"данные чувствительные и их отправка наружу создаёт отдельную юридическую задачу;",{"lead":126,"text":223,"highlight":25},"задача узкая, и под неё есть небольшая специализированная модель;",{"lead":126,"text":225,"highlight":25},"нужна независимость от чужой доступности, тарифов и геополитики.",{"sort":108,"collection":22,"item":227},{"body":228,"is_lead":25,"footnote":10},"**Облако выигрывает, когда:**",{"sort":112,"collection":121,"item":230},{"list_style":123,"items":231},[232,234,236,238],{"lead":126,"text":233,"highlight":25},"нагрузка редкая или рваная - железо будет простаивать;",{"lead":126,"text":235,"highlight":25},"задача требует рассуждений, а не распознавания: разбор смысла, написание текста, принятие решений;",{"lead":126,"text":237,"highlight":25},"вам нужен лучший результат сегодня, а не приемлемый;",{"lead":126,"text":239,"highlight":25},"вы ещё проверяете гипотезу и не знаете, взлетит ли вообще.",{"sort":116,"collection":22,"item":241},{"body":242,"is_lead":25,"footnote":10},"Практически это чаще всего означает гибрид, и у меня он именно такой: распознавание речи - локально, на своём железе, а причёсывание расшифровки в читаемый текст - облачной моделью. Аудио наружу не уходит, а за интеллект платится там, где он действительно нужен.",{"sort":120,"collection":31,"item":244},{"heading":118,"level":34},{"sort":246,"collection":121,"item":247},26,{"list_style":123,"items":248},[249,251,253,255],{"lead":126,"text":250,"highlight":25},"Развилка решается замером, а не убеждениями. Полдня на прототип обоих вариантов окупаются.",{"lead":126,"text":252,"highlight":25},"Красивое решение и работающее - разные вещи. Потоковая выдача выглядит лучше, а даёт хуже и медленнее.",{"lead":126,"text":254,"highlight":25},"Считайте не стоимость запроса, а стоимость месяца при вашей нагрузке. При постоянном потоке своё железо окупается быстро, при редких обращениях не окупается никогда.",{"lead":126,"text":256,"highlight":25},"Гибрид - нормальный ответ. Тяжёлое и однообразное держите у себя, интеллект берите в облаке.",{"id":258,"modified_on":259},"64bd6f0e-23d1-44b4-9f73-ecf6098c1280","2026-08-27T18:12:51.408Z",{"id":261,"title":262,"slug":263,"excerpt":264,"cover_alt":265,"cover_position":10,"reading_time":11,"seo_title":266,"seo_description":267,"date_published":268,"date_modified":10,"source_lead":10,"tag":269,"blocks":270,"cover":349},"b4b00a32-20a6-4557-b217-16867693b50b","Работает, но врёт: как геоблокировки ломают ИИ-систему незаметно","geobloki-i-tihie-otkazy","Поиск в системе не работал минимум три недели, а мониторинг был зелёный: ИИ-агент съедал ошибку инструмента и спокойно отвечал по памяти. Разбираю класс поломок, при которых всё \"работает\", - блокировки по географии, тихие отказы и то, как их вообще заметить.","Ровный ряд горящих индикаторов и оборванный кабель за панелью","Геоблокировки и ИИ-сервисы: тихие отказы, которые не видно в мониторинге","Поиск не работал три недели, а система считала запуски успешными: ИИ-агент съедал ошибку инструмента и отвечал по памяти. Как ловить тихие отказы и что делать с блокировками по IP.","2026-08-27T17:35:48.000Z",{"name":16,"slug":17,"color":18},[271,274,277,280,283,286,289,292,295,298,301,304,307,310,313,316,319,322,325,328,331,334,336],{"sort":21,"collection":22,"item":272},{"body":273,"is_lead":25,"footnote":10},"Самая дорогая поломка - не та, при которой всё падает. Падение видно сразу, его чинят за час. Дорого стоит поломка, при которой система продолжает отвечать, отчётность зелёная, а результат тихо стал хуже.",{"sort":27,"collection":22,"item":275},{"body":276,"is_lead":25,"footnote":10},"Расскажу про класс таких поломок, с которым в России теперь сталкивается любой, кто строит ИИ-системы: отказ внешнего сервиса по географическому признаку.",{"sort":11,"collection":31,"item":278},{"heading":279,"level":34},"Что случилось",{"sort":36,"collection":22,"item":281},{"body":282,"is_lead":25,"footnote":10},"В одной системе ИИ-ассистент умеет искать в интернете - это отдельный инструмент, который он вызывает, когда своих знаний не хватает. Я полез в журналы по другому поводу и от нечего делать посмотрел статистику вызовов поиска.",{"sort":40,"collection":22,"item":284},{"body":285,"is_lead":25,"footnote":10},"За всё окно хранения журналов - две недели, 335 вызовов - успешных не было ни одного. Ноль. Поиск был мёртв как минимум с начала месяца.",{"sort":44,"collection":22,"item":287},{"body":288,"is_lead":25,"footnote":10},"При этом в системе не горело ничего. Запуски числились успешными, пользователи не жаловались, поддержка была спокойна. Причина проста и от этого неприятна: ИИ-агент устроен так, что ошибку инструмента он обрабатывает сам. Инструмент не ответил - агент пожал плечами и ответил по памяти. Формально диалог завершён успешно. Фактически человек получил ответ без свежих данных и не узнал об этом.",{"sort":48,"collection":31,"item":290},{"heading":291,"level":34},"Почему это гео, а не сломанный ключ",{"sort":52,"collection":22,"item":293},{"body":294,"is_lead":25,"footnote":10},"Дальше началась диагностика, которая заняла бы дни, если бы не одна привычка: при странном отказе внешнего сервиса первым делом сравнить его поведение из разных точек.",{"sort":56,"collection":22,"item":296},{"body":297,"is_lead":25,"footnote":10},"Сервис отвечал кодом 403 и html-страницей балансировщика вместо нормального json. С зарубежного адреса тот же самый ключ давал 200. С двух независимых российских адресов - 403. Запрос вообще без ключа с тех же российских адресов получал аккуратный 401 в json - то есть сеть проходит, адрес не забанен, отвечает именно приложение. Режется конкретно аутентифицированный вызов.",{"sort":60,"collection":22,"item":299},{"body":300,"is_lead":25,"footnote":10},"Это важное различение. Битый ключ даёт 401 и внятное сообщение. Гео даёт 403 и страницу-заглушку. Разница в одну цифру, а выводы противоположные: в первом случае перевыпускаете ключ, во втором перевыпуск не поможет никогда.",{"sort":64,"collection":22,"item":302},{"body":303,"is_lead":25,"footnote":10},"Отдельная ловушка того же семейства: один известный шлюз к языковым моделям отвечает на запросы из дата-центров кодом 403 с формулировкой про политику безопасности, а в другом сценарии - кодом 401. То есть 401 от него с сервера - это не протухший ключ, а тот же самый блок. Я потратил на эту догадку время дважды и теперь держу её записанной.",{"sort":68,"collection":31,"item":305},{"heading":306,"level":34},"Масштаб проблемы шире, чем кажется",{"sort":72,"collection":22,"item":308},{"body":309,"is_lead":25,"footnote":10},"Проверка соседних сервисов с тех же адресов дала пёструю картину: часть поисковых API режет российские адреса наглухо, часть работает без вопросов. Отдельная история - мессенджеры: исходящие в один популярный мессенджер из российского облака стабильно упираются в таймаут. У этого есть красивое следствие: если алерты о сбоях настроены туда же, то оповещатель падает на отправке оповещения. Про аварии не узнаёт никто, и мониторинг снова зелёный.",{"sort":76,"collection":22,"item":311},{"body":312,"is_lead":25,"footnote":10},"Общий вывод простой: в 2026 году доступность внешнего сервиса - это не константа, а переменная, зависящая от того, откуда вы вышли в интернет. Причём меняется она без предупреждения и без письма на почту.",{"sort":80,"collection":31,"item":314},{"heading":315,"level":34},"Что с этим делать",{"sort":84,"collection":22,"item":317},{"body":318,"is_lead":25,"footnote":10},"**Считать внешний сервис ненадёжным по умолчанию.** Не потому, что он плохой, а потому, что канал до него вам не принадлежит.",{"sort":88,"collection":22,"item":320},{"body":321,"is_lead":25,"footnote":10},"**Ловить тихие отказы отдельно.** Мониторинг \"процесс завершился успешно\" здесь бесполезен. Нужны метрики результата: сколько вызовов инструмента вернули данные, а не ошибку; какая доля ответов агента опиралась на поиск. Хорошая проверка на здравый смысл - раз в месяц открыть журналы и посмотреть, что вообще происходит внутри успешных запусков.",{"sort":92,"collection":22,"item":323},{"body":324,"is_lead":25,"footnote":10},"**Не гасить ошибки внутри агента молча.** Если инструмент не ответил, это должно попадать в журнал сбоев и в оповещения, даже если агент справился без него. Умение агента выкручиваться - достоинство для пользователя и катастрофа для эксплуатации.",{"sort":96,"collection":22,"item":326},{"body":327,"is_lead":25,"footnote":10},"**Держать канал наружу отдельным узлом.** У меня весь исходящий трафик к зарубежным сервисам идёт через один управляемый шлюз. Когда точка выхода перестаёт работать, я меняю её в одном месте, а не в пятнадцати интеграциях. За последний год я менял её дважды - оба раза внезапно.",{"sort":100,"collection":22,"item":329},{"body":330,"is_lead":25,"footnote":10},"**Иметь запасного поставщика.** Не абстрактно, а конкретно: проверенный и настроенный второй сервис того же назначения, на который переключаются одной настройкой.",{"sort":104,"collection":22,"item":332},{"body":333,"is_lead":25,"footnote":10},"**Не строить алерты на канале, который может отвалиться.** Оповещения о сбоях должны идти по маршруту, независимому от того, что они охраняют.",{"sort":108,"collection":31,"item":335},{"heading":118,"level":34},{"sort":112,"collection":121,"item":337},{"list_style":123,"items":338},[339,341,343,345,347],{"lead":126,"text":340,"highlight":25},"Успешный запуск не равно полученный результат. Особенно у ИИ-агентов: они умеют молча работать без инструментов.",{"lead":126,"text":342,"highlight":25},"При странной ошибке от внешнего сервиса сравните ответ с другой точки выхода до того, как перевыпускать ключи.",{"lead":126,"text":344,"highlight":25},"403 со страницей-заглушкой и 401 в json - разные диагнозы. Смотрите не только на код, но и на формат ответа.",{"lead":126,"text":346,"highlight":25},"Точка выхода в интернет - это архитектурный элемент. Заложите её отдельно, чтобы менять в одном месте.",{"lead":126,"text":348,"highlight":25},"Канал оповещений о сбоях не должен зависеть от того же, что ломается.",{"id":350,"modified_on":351},"9f4b69c4-2c6f-438a-abc2-5de5ab33ab96","2026-08-27T18:12:56.230Z",{"id":353,"title":354,"slug":355,"excerpt":356,"cover_alt":357,"cover_position":10,"reading_time":11,"seo_title":358,"seo_description":359,"date_published":360,"date_modified":10,"source_lead":10,"tag":361,"blocks":362,"cover":460},"e72b3463-3c8c-4645-84c6-09dfee440a20","Почему письма уходят в спам: SPF, DKIM и DMARC простыми словами","pochemu-pisma-uhodyat-v-spam","У моего домена почта работала, письма отправлялись, всё выглядело нормально - а двух из трёх записей, отвечающих за доверие к отправителю, не было вовсе. Объясняю SPF, DKIM и DMARC человеческим языком: что каждая делает, в каком порядке ставить и как проверить результат за две минуты.","Три конверта проходят через арки-штампы, четвёртый отложен в тень","SPF, DKIM, DMARC: как настроить, чтобы письма доходили","Три записи в DNS, без которых рассылка и даже обычные письма уезжают в спам. Что каждая означает, в каком порядке их ставить и как проверить результат за две минуты.","2026-08-27T17:21:48.000Z",{"name":16,"slug":17,"color":18},[363,366,369,372,375,378,381,384,387,390,393,396,399,402,405,408,411,414,417,420,423,426,429,432,441,444,446],{"sort":21,"collection":22,"item":364},{"body":365,"is_lead":25,"footnote":10},"Я собирался включить на своём сайте почтовую рассылку и по привычке начал с проверки домена. Оказалось, что у него настроены только базовые вещи: почта работает, письма отправляются, всё выглядит нормально. Двух из трёх записей, отвечающих за доверие к отправителю, не было вовсе.",{"sort":27,"collection":22,"item":367},{"body":368,"is_lead":25,"footnote":10},"Это типичная ситуация. Почта \"просто работает\" ровно до того момента, когда вы начинаете отправлять что-то массовое или важное - и тогда выясняется, что половина писем не доходит, а вы об этом не знаете, потому что уведомлений о попадании в спам не бывает.",{"sort":11,"collection":22,"item":370},{"body":371,"is_lead":25,"footnote":10},"Разберу три записи по-человечески, без RFC.",{"sort":36,"collection":31,"item":373},{"heading":374,"level":34},"SPF: кому разрешено писать от вашего имени",{"sort":40,"collection":22,"item":376},{"body":377,"is_lead":25,"footnote":10},"Представьте, что кто угодно может отправить бумажное письмо на бланке вашей компании. Примерно так устроена почта по умолчанию: адрес отправителя в письме - это просто текст, его можно написать любой.",{"sort":44,"collection":22,"item":379},{"body":380,"is_lead":25,"footnote":10},"SPF - это список: с каких серверов разрешено отправлять письма от вашего домена. Он лежит в настройках домена, и почтовые системы его проверяют. Пришло письмо от вас с сервера, которого нет в списке, - повод для подозрений.",{"sort":48,"collection":22,"item":382},{"body":383,"is_lead":25,"footnote":10},"Эта запись есть почти у всех, потому что хостинг обычно ставит её сам при подключении почты. Дальше начинается то, что сам себя не поставит.",{"sort":52,"collection":31,"item":385},{"heading":386,"level":34},"DKIM: подпись, которую нельзя подделать",{"sort":56,"collection":22,"item":388},{"body":389,"is_lead":25,"footnote":10},"SPF говорит \"письмо пришло с правильного сервера\". DKIM говорит \"письмо действительно ваше и его не меняли по дороге\": исходящая почта подписывается криптографической подписью, а проверить её можно открытым ключом, который лежит в настройках домена.",{"sort":60,"collection":22,"item":391},{"body":392,"is_lead":25,"footnote":10},"Разница практическая. SPF ломается при пересылке письма: адрес отправителя остался ваш, а сервер уже чужой. DKIM пересылку переживает, потому что подпись живёт в самом письме.",{"sort":64,"collection":22,"item":394},{"body":395,"is_lead":25,"footnote":10},"Именно этой записи у меня не было. И тут выяснилась деталь, из-за которой её и не бывает у многих: на моём хостинге DKIM не включается кнопкой в панели - его включает поддержка по обращению. Пишете тикет, просите подписывать исходящую почту, и запись появляется в настройках домена сама. Пять минут работы и ноль рублей, но об этом надо знать.",{"sort":68,"collection":31,"item":397},{"heading":398,"level":34},"DMARC: что делать с письмами, которые не прошли проверку",{"sort":72,"collection":22,"item":400},{"body":401,"is_lead":25,"footnote":10},"Первые две записи описывают, как проверить письмо. DMARC отвечает на следующий вопрос: а что делать, если проверка не прошла?",{"sort":76,"collection":22,"item":403},{"body":404,"is_lead":25,"footnote":10},"Вариантов три: ничего не делать и просто наблюдать, отправить в спам или отклонить совсем. Плюс адрес, на который почтовые системы будут присылать отчёты - кто и откуда шлёт письма от вашего имени.",{"sort":80,"collection":22,"item":406},{"body":407,"is_lead":25,"footnote":10},"Порядок здесь важен, и его нарушение - главная ошибка самостоятельной настройки. Нельзя начинать со строгого режима: если DKIM не настроен или какой-то ваш сервис шлёт письма мимо списка, вы своими руками отправите в спам собственную почту.",{"sort":84,"collection":22,"item":409},{"body":410,"is_lead":25,"footnote":10},"Правильная последовательность: сначала мягкий режим наблюдения с отчётами, потом настройка DKIM, потом проверка боем, и только потом ужесточение. Я именно так и делал: поставил DMARC, добился DKIM, убедился, что обе проверки проходят, и после этого поднял режим до отправки подозрительного в спам.",{"sort":88,"collection":31,"item":412},{"heading":413,"level":34},"Как проверить за две минуты",{"sort":92,"collection":22,"item":415},{"body":416,"is_lead":25,"footnote":10},"Не надо ставить инструменты и разбираться в заголовках. Есть бесплатные сервисы-автоответчики: вы отправляете письмо со своего рабочего адреса на специальный адрес и получаете в ответ полный разбор - прошёл ли SPF, прошёл ли DKIM, что видит принимающая сторона.",{"sort":96,"collection":22,"item":418},{"body":419,"is_lead":25,"footnote":10},"Я пользуюсь таким после каждого изменения. Ответ приходит за минуту, и в нём прямым текстом написано pass или fail по каждому пункту. Это единственный способ убедиться, что вы настроили не то, что хотели, а то, что получилось.",{"sort":100,"collection":22,"item":421},{"body":422,"is_lead":25,"footnote":10},"Отдельная грабля, если правите настройки домена через программный интерфейс хостинга, а не руками: у некоторых провайдеров операция изменения записей перезаписывает всю группу целиком и молча удаляет то, что вы не передали. После любой такой правки проверяйте, на месте ли записи почты и адреса сайта. Я проверяю всегда.",{"sort":104,"collection":31,"item":424},{"heading":425,"level":34},"Бонус: аватар отправителя",{"sort":108,"collection":22,"item":427},{"body":428,"is_lead":25,"footnote":10},"Раз уж речь о доверии к письму - вопрос, который мне задают чаще, чем про DKIM: как сделать, чтобы рядом с письмом показывалась картинка компании, а не серый кружок с буквой.",{"sort":112,"collection":22,"item":430},{"body":431,"is_lead":25,"footnote":10},"Ответ неприятный и разный для разных почт:",{"sort":116,"collection":121,"item":433},{"list_style":123,"items":434},[435,437,439],{"lead":126,"text":436,"highlight":25},"В Gmail единственный официальный путь - технология BIMI, а она требует сертификата, подтверждающего права на товарный знак. Это от 1000 долларов в год и обязательный зарегистрированный знак. Для индивидуального предпринимателя без товарного знака - недоступно в принципе.",{"lead":126,"text":438,"highlight":25},"В Mail.ru делается бесплатно через кабинет почтмейстера: подтверждаете домен записью в его настройках и загружаете картинку. Требования простые - квадрат, непрозрачный фон, читаемость в мелком размере.",{"lead":126,"text":440,"highlight":25},"В Яндексе встроенного способа нет, работает сервис глобальных аватаров, привязанный к адресу отправителя.",{"sort":120,"collection":22,"item":442},{"body":443,"is_lead":25,"footnote":10},"Но заниматься этим стоит только после того, как настроены DKIM и DMARC. Без них у вас проблема не с картинкой, а с тем, что красивое письмо просто не увидят.",{"sort":246,"collection":31,"item":445},{"heading":118,"level":34},{"sort":447,"collection":121,"item":448},27,{"list_style":123,"items":449},[450,452,454,456,458],{"lead":126,"text":451,"highlight":25},"Три записи, в этом порядке: SPF (обычно уже есть), DKIM (чаще всего нет), DMARC (почти никогда нет).",{"lead":126,"text":453,"highlight":25},"DMARC начинать с режима наблюдения, ужесточать после того, как DKIM подтверждён проверкой.",{"lead":126,"text":455,"highlight":25},"Проверять результат письмом на сервис-автоответчик, а не глазами по документации.",{"lead":126,"text":457,"highlight":25},"Если DKIM не включается из панели - это не значит, что его нет. Напишите в поддержку хостинга, обычно это одна заявка.",{"lead":126,"text":459,"highlight":25},"Всё вместе занимает час и не стоит ничего. Один этот час решает большую часть вопросов \"почему нашу рассылку никто не читает\".",{"id":461,"modified_on":462},"2191cc54-9d87-49bc-bd39-b656d1a2a18f","2026-08-27T18:13:09.511Z"]