Задача
Клініка працює в кількох системах: Spruce для листування з пацієнтами, GoHighLevel для заявок і первинного запису, DrChrono для медичних карток і служба підтримки, яка переїжджала із Zoho Desk у Zendesk. Персонал переносив дані між ними вручну.
Усе визначили два правила. Дані пацієнтів ніколи не залишають захищеного середовища, і кожну зміну в записі пацієнта можна відстежити згодом.
Фундамент
Усе працює у власному акаунті AWS клініки: n8n на власному сервері, база Postgres, шифровані ключі, журнал дій в акаунті та версійовані бекапи. Редактор n8n недоступний з інтернету, а кожен вхідний вебхук має бути підписаним.
Сповіщення, логи й журнал аудиту містять лише ідентифікатори записів, без даних пацієнтів. Усі тести проходять на синтетичних записах.
Що я побудував
Нові заявки зі Spruce у GoHighLevel, у роботі з липня 2026. Нова заявка пацієнта в Spruce з'являється в CRM без участі персоналу. База зберігає зв'язок між обома системами для 1 386 записів пацієнтів. Захист від дублів не дає створити ту саму людину двічі, коротка повторна спроба покриває контакти, які ще не доступні для читання, а заявка без запису в CRM через 24 години запускає сповіщення.
Переїзд служби підтримки із Zoho Desk у Zendesk. 14 299 тікетів і близько 35 700 повідомлень перенесено з початковими датами, відправниками й статусами.
- Я використав API імпорту Zendesk замість створення тікетів, тож жоден пацієнт не отримав сповіщення про старий тікет.
- Кожен лист став окремим коментарем, і старі розмови читаються так само, як раніше.
- Перший архівний блок показав, що завеликий запит мовчки провалюється цілою пачкою. Я перейшов на пачки за розміром даних, і частка успішних імпортів трималась на 99,6%.
- Результат я перевірив другим, незалежним підрахунком, а не звітом самого імпортера. Усі 199 активних тікетів перенесено без жодного збою.
Медичні картки в DrChrono. Тег у GoHighLevel створює або оновлює картку пацієнта в DrChrono і записує посилання на неї назад у CRM. Другий потік переносить фото страхових карток із CRM у картку. Обидва наскрізно протестовані на тестовому середовищі DrChrono, а перемикання на робочий акаунт чекає на доступи від клініки.
Найризикованішим був дубль картки. DrChrono приховує неактивних пацієнтів від звичайного пошуку, тож потік шукає за датою народження разом із неактивними записами. Якщо збіг неточний, він зупиняється й залишає нотатку персоналу, а не вгадує.
Як це залишається надійним
- Журнал аудиту, який неможливо переписати. Тригери бази блокують будь-яку зміну чи видалення рядків аудиту для будь-якої ролі, а воркфлоу можуть лише додавати рядки.
- Сім детекторів за розкладом. Підписана перевірка вебхуків кожні п'ять хвилин, контроль, що редактор лишається закритим, монітор збоїв з окремими класами сповіщень (відхилені доступи, сплески помилок, тиша в робочі години клініки, застряглі заявки), щоденний сигнал «живий» і щоденний бекап.
- Зміни у вікна обслуговування. Кожен реліз починається з бекапу й має відкат, а простій триває від 15 до 40 секунд.
Результати
- Синхронізація Spruce → GoHighLevel у роботі з липня 2026, зв'язано 1 386 записів пацієнтів.
- Перенесено 14 299 тікетів і близько 35 700 повідомлень без жодного сповіщення пацієнтам.
- Потоки DrChrono наскрізно протестовані на тестовому середовищі й готові до перемикання.