Счёт оплачен в понедельник, менеджер узнал об этом в среду, потому что «интеграция вроде была». Так выглядит обмен событиями, собранный наспех: запрос ушёл в одну сторону, ответ никто не проверил, повторить некому. Я берусь за такую связку и довожу её до состояния, в котором на вопрос «дошло ли событие» отвечает журнал, а не переписка в чате.
Работаю этапами. Сперва смотрю, что у вас уже есть: какие сервисы обмениваются данными, какие поля действительно нужны принимающей стороне, где события теряются сейчас. Потом ставлю приёмник и очередь, затем маршруты оповещений, и только в конце берусь за тексты сообщений — формулировки проще подбирать, когда перед глазами настоящие события, а не выдуманные примеры.
Отдельно о надёжности, и это не украшение сметы. Вебхук без проверки подписи не принимается — иначе событие может прислать кто угодно. Если принимающая сторона молчит, событие не пропадает: оно ждёт в очереди и повторяется, пока не будет принято либо честно помечено недоставленным. Одно и то же событие, пришедшее дважды, обрабатывается один раз — по ключу, а не по совпадению времени. Секреты и токены хранятся вне кода и не попадают в журнал. В уведомления не выносятся персональные данные и содержимое документов: в сообщении есть ссылка и номер, остальное сотрудник открывает у себя, под своим доступом.
Состав работы:
— разбор событий и решение, на какие из них вообще стоит реагировать;
— приём вебхуков с обязательной проверкой подписи;
— очередь и повторные попытки при сбое принимающей стороны;
— защита от двойной обработки одного события;
— доставка в почту и в мессенджер команды, с разными получателями по темам;
— шаблоны сообщений, написанные для человека, а не для отладки;
— журнал доставки с поиском по событию и кнопкой ручного повтора;
— наблюдение за очередью и сигнал, когда она перестала разгружаться;
— инструкция для команды: что делать, если сообщение не пришло.
Работаю этапами. Сперва смотрю, что у вас уже есть: какие сервисы обмениваются данными, какие поля действительно нужны принимающей стороне, где события теряются сейчас. Потом ставлю приёмник и очередь, затем маршруты оповещений, и только в конце берусь за тексты сообщений — формулировки проще подбирать, когда перед глазами настоящие события, а не выдуманные примеры.
Отдельно о надёжности, и это не украшение сметы. Вебхук без проверки подписи не принимается — иначе событие может прислать кто угодно. Если принимающая сторона молчит, событие не пропадает: оно ждёт в очереди и повторяется, пока не будет принято либо честно помечено недоставленным. Одно и то же событие, пришедшее дважды, обрабатывается один раз — по ключу, а не по совпадению времени. Секреты и токены хранятся вне кода и не попадают в журнал. В уведомления не выносятся персональные данные и содержимое документов: в сообщении есть ссылка и номер, остальное сотрудник открывает у себя, под своим доступом.
Состав работы:
— разбор событий и решение, на какие из них вообще стоит реагировать;
— приём вебхуков с обязательной проверкой подписи;
— очередь и повторные попытки при сбое принимающей стороны;
— защита от двойной обработки одного события;
— доставка в почту и в мессенджер команды, с разными получателями по темам;
— шаблоны сообщений, написанные для человека, а не для отладки;
— журнал доставки с поиском по событию и кнопкой ручного повтора;
— наблюдение за очередью и сигнал, когда она перестала разгружаться;
— инструкция для команды: что делать, если сообщение не пришло.