No connection to the server

Система ведёт учёт хостинг-абонементов: кто платит, сколько, когда следующий платёж, сходится ли это с биллингом и что клиенту отправляли. Одна строка таблицы — один абонемент, он же один пользователь панели HestiaCP.

Руководство намеренно только на русском: язык интерфейса переключается, а этот текст — нет.

1. Вход

Вход — кнопкой «Войти через GitLab», своей учётной записью gitlab.uco.co.il. Паролей у системы нет: учётные записи и пароли живут в GitLab.

Доступ есть только у участников группы bytecraft-hosting в GitLab. Если после входа появляется «Нет доступа» — вход прошёл, но учётка не в группе: попросите владельца группы добавить вас и войдите снова. Исключение из группы снимает доступ при следующем входе.

2. Список клиентов

Главный экран. Строка открывается кликом в любом месте, кроме ссылок внутри неё — ссылки на задачу и на счёт ведут наружу, в свою систему.

Поиск и фильтры

Поиск ищет по логину, компании, имени и почте. Панель «Фильтры» раскрывает остальное: сервер, тип оплаты (мультиселект), источник, страна, статус, диапазон дат платежа и три галочки — «Только расхождения», «Без ссылки на счёт», «Без ссылки на задачу».

Состояние фильтров живёт в адресе страницы. Настроенную выборку можно скопировать из адресной строки и переслать — откроется ровно та же таблица. «Сбросить фильтры» возвращает вид по умолчанию.

Статус

  • Активен — пользователь есть в панели и работает.
  • Не активен — пропал из панели при синхронизации либо отключён вручную. Запись остаётся.
  • Удалён — убран руками. В обычную выборку не попадает: чтобы увидеть, выберите статус «Удалён» или «все».

По умолчанию показываются живые записи — активные и неактивные, без удалённых.

Колонки и суммы

Кнопка «Колонки» скрывает и показывает столбцы, выбор запоминается и переживает перезагрузку. Заголовок кликается — сортировка уходит на сервер, повторный клик меняет направление. Сортируются не все колонки: у вычисляемых сортировки нет.

«Видно» в шапке — сумма по текущей выборке, а не по всей базе. Меняете фильтр — меняется и она.

3. Карточка клиента

Четыре вкладки: Детали, Изменения, Платежи, Сообщения. У новой записи видна только первая — остальным пока нечего показывать.

Два источника записей

Записи из HestiaCP заводит синхронизация. У них логин не редактируется и нет кнопки удаления — в карточке об этом написано «ведётся в HestiaCP». Записи, заведённые вручную, правятся целиком.

Обратно в панель уходят только имя и контакт — поля с пометкой «уходит в HestiaCP». Платёжные данные в панель не пишутся никогда. Если панель отклонит изменение, запись всё равно сохранится локально, а сверху появится предупреждение: потерять правку хуже, чем разойтись с панелью.

Суммы и даты

«Сумма платежа» — месячная. Счёт всегда годовой и считается из неё: двенадцать месяцев со скидкой 10%, то есть «сумма × 12 × 0,9». В карточке годовой суммы нет намеренно, чтобы не путать, что именно вы правите.

Дата в карточке одна — дата следующего платежа. Прошлые оплаты живут на вкладке «Платежи»: своего поля у них нет.

Сохранение

Уходят только изменённые поля, а не форма целиком — иначе сохранение затирало бы то, что параллельно записала синхронизация. Если ничего не менялось, система так и скажет и никуда не пойдёт. Каждая правка попадает на вкладку «Изменения» с автором, полем, старым и новым значением.

4. Создание, удаление и слияние

«Добавить клиента» заводит запись вручную. Обязательны логин и страна; страна определяет и систему биллинга, и язык писем — отдельно их выбирать не нужно.

Удаление мягкое: запись пропадает из обычной выборки, но остаётся в базе вместе со всей историей. Найти её можно фильтром по статусу «Удалён». Записи из HestiaCP не удаляются вовсе — если пользователь исчез из панели, синхронизация сама пометит запись неактивной.

Слияние нужно, когда один клиент завёлся дважды. В диалоге выбираются цель (остаётся) и источник (уходит в архив), а система показывает предпросмотр результата до того, как что-то произойдёт. Правило простое: непустые значения цели побеждают, пустые поля берутся из источника. Кнопка «Поменять местами» меняет роли, если вы выбрали их наоборот.

5. Сверка с биллингом

Сверка отвечает на один вопрос: то, что записано у нас, совпадает ли с тем, что происходит в биллинге. Маршрут выбирается типом оплаты: у подписок проверяется автосписание, у остальных — оплаченный счёт.

  • — оплачено: счёт или автосписание найдены в биллинге.
  • — срок ещё далеко, текущий период оплачен. Счёт на следующий год пока не нужен.
  • — до срока 30 дней или меньше: проформа выставлена, ждём оплату.
  • — срок прошёл, оплаты нет. Это должник, по нему идёт цепочка напоминаний.
  • — документ нашёлся, но сумма другая. В подсказке указаны обе; частая причина — счёт выписан на месяц, а не на год, или в карточке старая цена.
  • — сумма сходится, но документ выписан вне периода оплаты.
  • — у подписки нет активного автосписания. Самый важный случай: клиент числится подписчиком, но деньги не списываются, и заметить это иначе нечем.
  • — тип оплаты деньгами через биллинг не ходит (QA, Free, Check и подобные). Это не пропуск, а решение.
  • — до биллинга не достучались либо не разобрали ссылку на клиента. Прошлый результат при этом не портится.
  • — запись ещё не сверялась.

Кнопка «Проверить снова» в карточке сверяет одну запись немедленно. Галочка «Только расхождения» в фильтрах оставляет в таблице лишь те, где что-то не сошлось.

6. Рассылки и сообщения

Цепочка напоминаний привязана к дате платежа и состоит из шести шагов:

  • −30 Проформа — выписывается счёт и уходит клиенту.
  • −10 Напоминание.
  • 0 Срок оплаты.
  • +15 Просрочка.
  • +30 Второе напоминание.
  • +45 Последнее предупреждение.

Отдельно стоит шаг «Списание не прошло» — он уходит подпискам, когда автосписание отклонили, и несёт ссылку на замену карты.

Флажок «Напоминания включены»

Пока он снят, клиенту не уходит ничего. Это рубильник на каждой записи, и снятое положение — состояние по умолчанию. Включать имеет смысл по одному, наблюдая за журналом: отправленное письмо не отзывается.

Отправка вручную

Кнопка «Отправить сообщение» в карточке умеет две вещи: повторить шаг цепочки (текст берётся из шаблона) и отправить произвольное сообщение (текст пишете вы, токены в нём тоже работают). Каналы выбираются галочками; без выбранного канала кнопка не нажимается.

Пользуйтесь предпросмотром. Он собирает сообщение ровно так, как оно уйдёт, и ничего не отправляет. Если данных не хватает — например, счёт ещё не выписан и подставить нечего, — система откажется собирать сообщение и назовёт, чего нет. Это сделано намеренно: письмо с пустым номером счёта хуже неотправленного.

Вкладка «Сообщения»

Журнал отправок: дата, канал, шаг, статус, адрес и тема. Клик по теме разворачивает полный текст того, что ушло — он сохраняется целиком, потому что через месяц шаблон будет другим, а знать, что именно получил клиент, всё равно понадобится.

Статусы: sent — доставлено отправителю; queued — не ушло, будет три попытки с нарастающими паузами, причина видна тут же; failed — попытки исчерпаны. Один шаг в одном платёжном цикле отправляется один раз, даже если прогон повторится.

7. Шаблоны

Раздел «Шаблоны» в меню. Шаблон определяется тройкой «шаг × канал × страна». Отдельного выбора языка нет: израильским клиентам пишем на иврите, болгарским — по-английски, и это следует из страны записи.

В тексте работают токены вида {{firstName}}, {{amount}}, {{nextPayDate}} — полный список кнопками под полем, клик вставляет токен в текст. Опечатка в имени токена не проходит молча: система откажется собрать сообщение и назовёт неизвестное имя.

«Предпросмотр на клиенте» подставляет данные конкретной записи — введите её логин и посмотрите, что получится. Переключатель «Шаг включён» выключает шаг целиком, не удаляя текст.

8. Отключение хостинга

Кнопка «Отключить в Hestia» останавливает хостинг клиента — его сайт перестаёт открываться. Это единственное действие во всей системе, которое видит клиент, поэтому оно всегда ручное: ни один шаг цепочки напоминаний сюда не ведёт, включая «+45 Последнее предупреждение».

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

9. Что происходит само

  • Синхронизация с HestiaCP — раз в час. Заводит новых пользователей панели, обновляет данные, пропавших помечает неактивными. Кнопка «Синхронизация» в шапке запускает её немедленно; рядом видно, чем кончился прошлый прогон по каждому серверу.
  • Сверка с биллингом — ночью, по всем записям.
  • Рассылка — раз в сутки утром, только по записям с включёнными напоминаниями.
  • Разбор очереди отправки — каждые десять минут: повторяет то, что не ушло с первого раза.

10. Чего система не делает

Знать границы полезнее, чем гадать о них.

  • Не отключает хостинг сама. Никогда и ни при какой просрочке.
  • Не пишет платёжные данные в HestiaCP. Суммы, даты и типы оплаты живут только здесь.
  • Не заводит записи HestiaCP руками. Они приходят только синхронизацией.
  • Не удаляет ничего насовсем. Удаление мягкое, история остаётся.
  • Не отправляет неполное сообщение. Если подставить нечего — откажется и скажет, чего не хватает.

11. ИИ-ассистент

Ассистент (Claude и любой другой клиент по протоколу MCP) работает с таблицей от вашего имени: видит ровно то, что видите вы, и пишет в журнал изменений вашим именем, а не безличным «mcp». Доступ выдаёте вы сами на странице «Интеграции» и там же отзываете.

Адрес сервера один: https://mcp-hosting.s.ai-dev.co.il/mcp. Подключиться можно двумя способами.

  • Claude в браузере — Settings → Connectors → Add custom connector, адрес сервера, вход и кнопка «Разрешить» на экране согласия. Токен вы не видите: его выдаёт и хранит сам клиент, а подключение появляется на вкладке «Подключённые приложения».
  • Claude Code или скрипт — выпустите личный токен на вкладке «Токены» и передайте его заголовком Authorization: Bearer. Значение показывается один раз: на сервере остаётся только отпечаток.

Права выбираете вы. Токен только сужает доступ и никогда не расширяет: «смотреть» отдельно, «править» отдельно, отправка сообщений и отключение хостинга — каждое своим правом. Инструмент, на который права нет, ассистент даже не увидит.

Что нельзя отменить — требует подтверждения. Слияние записей, отправка сообщения и отключение хостинга по умолчанию только показывают, что произойдёт; чтобы выполнить их на самом деле, ассистент должен повторить вызов с явным подтверждением. Создавать и удалять записи через ассистента нельзя вовсе.

Отзыв действует сразу: следующий же вызов ассистента получит отказ. Доступ, которым не пользовались полгода, отзывается сам.