FreeScout для провайдера: 16 модулей, которые мы написали за восемь месяцев, и почему ушли на свой helpdesk
Как мы вели поддержку интернет-провайдера во FreeScout: 17 тысяч обращений, биллинг в карточке, ИИ на Claude, голосовая почта. Исходники модулей — на GitHub.
Поддержка интернет-провайдера устроена просто и неприятно одновременно. Клиент пишет в чат, во ВКонтакте, в Telegram, на почту, оставляет заявку на сайте — и звонит на голосовую почту. Оператору в этот момент нужен не «тикет», а ответ на три вопроса: кто это, что у него с балансом и тарифом, почему нет интернета.
С ноября 2025 года вся поддержка нашего провайдера жила во FreeScout — открытом helpdesk на Laravel. Готового модуля «биллинг провайдера в карточке обращения» там, конечно, нет. Мы написали его сами, потом ещё пятнадцать. Сегодня выкладываем на GitHub двенадцать живых модулей из шестнадцати и заодно рассказываем, как это работало и почему мы всё-таки ушли.
Коротко весь кейс — в ролике на полторы минуты:
Подкаст: обсуждаем кейс
Разговор о проекте на четыре минуты — если удобнее слушать, чем читать.
Масштаб: что прошло через систему
Цифры из базы FreeScout на момент остановки:
- 17 751 обращение и 42 156 сообщений — с ноября 2025 по июнь 2026;
- 10 835 клиентов, 25 сотрудников, 6 почтовых ящиков;
- почти 14,4 тысячи обращений — голосовая почта (это четыре из пяти);
- чат на сайте — 352, Telegram — 230, ВКонтакте — 209, почта — 179, форма — 27.
Вывод, который сначала удивил: для регионального провайдера главный «чат» — это телефонная голосовая почта. Люди не хотят набирать текст, они хотят проговорить проблему. Поэтому именно её мы автоматизировали глубже всего.
Как всё соединено
flowchart LR
subgraph IN["Откуда приходит обращение"]
M["Почта"]
C["Чат на сайте"]
F["Форма"]
V["ВКонтакте"]
T["Telegram"]
P["Голосовая почта"]
end
IN --> FS["FreeScout<br/>+ наши модули каналов"]
FS --> S["Панель абонента<br/>(SmitBilling)"]
S --> B[("Биллинг<br/>REST API")]
FS --> AI["ClaudeAI:<br/>подсказка оператору,<br/>черновик ответа"]
FS --> KB["База знаний<br/>оператора"]
FS --> O["Оператор"]
S --> O
AI --> O
KB --> O
Идея одна: всё, что оператору нужно знать о клиенте, он видит в карточке обращения — без переключения между окнами. Модули делятся на четыре группы.
Четыре группы модулей
1. Откуда приходят обращения
- VkIntegration — канал ВКонтакте. Гибрид: PHP-модуль внутри FreeScout и мост на Python, который принимает события VK и отправляет в FreeScout.
- VoiceMail — голосовая почта (о ней ниже).
- AIFormLabel — метка у обращений из чата-виджета и формы на сайте.
2. Что оператор видит в карточке
- SmitBilling — боковая панель: договор, тариф, баланс, услуги, адрес, телефоны, статус. Кнопки «Обновить», «Проверить связь» и «Подсказка ИИ».
- CarbonBilling и AidaBilling — то же для двух прежних биллингов (в репозиторий не вошли). Да, три поколения биллинга — три модуля: копировать панель было быстрее, чем придумывать общий слой. Старые два теперь музейные.
- AidaSessions — журнал ИИ-диалогов прямо внутри helpdesk: оператор видит, что бот уже говорил клиенту, до того как тот пришёл к человеку.
- KnowledgeBase — внутренняя база знаний оператора: карточки сценариев (нет интернета, горит LOS, медиаконвертер, низкая скорость, роутер, оплата, подключение, расторжение), дерево решений, шаблоны диалогов и поиск.
3. ИИ
- ClaudeAI — помощник на Claude API: подсказки оператору и черновики ответов клиенту (отправляет всегда человек). Промпты лежат в файлах (
customer.txtдля клиента,operator.txtдля оператора), модель, температура и лимиты — в настройках. В промпт подставляются данные клиента из биллинга, поэтому ассистент не переспрашивает то, что система и так знает. - SatRatingsChat — просьба оценить ответ в Telegram и ВКонтакте после ответа оператора; работает поверх платного модуля Satisfaction Ratings.
4. Гигиена и удобство
- SystemFilter — автоудаление мусора: отчёты о недоставке, автоответчики, DMARC-отчёты. Без него очередь поддержки заполняется письмами, которые никто не писал.
- BalanceMonitor — балансы внешних сервисов (облако, API языковой модели, телефония) в шапке для администраторов, красным — если пора пополнить. Тот же блок попадает в ежедневный отчёт в Telegram.
- SmitUI — оформление: тёмная тема, мобильная шапка, «режим монтажника» с урезанным интерфейсом, стили для бейджей каналов.
- UrgencyButton — выбор срочности для нескольких обращений сразу. Честно: это заготовка, серверной части в модуле нет (см. README).
- AmoCRMSync — события обращений во внешний обработчик для AmoCRM. Устарел: AmoCRM мы больше не используем (в репозиторий не вошёл).
Самое интересное: голосовая почта
Раз она даёт четыре обращения из пяти, здесь автоматика окупилась лучше всего. Цепочка такая:
sequenceDiagram
participant K as Клиент
participant A as АТС
participant FS as FreeScout
participant VM as Модуль VoiceMail
participant B as Биллинг
participant CRM as CRM
K->>A: звонит, слушает меню, оставляет сообщение
A->>FS: письмо с записью и расшифровкой
FS->>VM: новое обращение в ящике «Звонки»
VM->>VM: отсеять «пустые» записи
VM->>VM: ИИ приводит текст в порядок, придумывает тему
VM->>VM: определить тип: поддержка или подключение
VM->>B: найти абонента по номеру телефона
VM->>FS: обращение в нужном ящике + теги по номеру и теме
VM->>CRM: для подключения — лид и задача «связаться»
VM->>K: SMS: обращение принято (с номером)
VM->>FS: исходная карточка голосовой почты закрывается

Что здесь стоит скопировать в любой helpdesk, даже без наших модулей:
- Отсев мусора до человека. Часть голосовых — это молчание, гудки и обрывки. Модуль проверяет текст и закрывает такие карточки сам.
- ИИ — редактор, а не решатель. Он только приводит расшифровку в читаемый вид и формулирует тему; решение «поддержка это или подключение» принимает набор простых правил по ключевым словам, а теги и воронка зависят от номера, на который позвонили.
- Абонент находится по номеру телефона. Оператор открывает обращение, а в нём уже панель с балансом и тарифом.
- Клиент получает подтверждение. Одна SMS с номером обращения снимает половину повторных звонков.
Как это выглядит
Снимки сделаны на отдельной копии FreeScout с выдуманными клиентами и вымышленной базой: боевые данные в публикацию не попадают.









Исходники
Двенадцать модулей — в одном репозитории, у каждого свой README: что делает, где настраивается, что заменить под себя. Лицензия — AGPL-3.0, как и у самого FreeScout. Четыре остальных мы не публикуем: оба прежних биллинга и AmoCRM (ими давно никто не пользуется) и заготовку метки голосовой почты, которая так и не заработала.
| Модуль | Что делает | Статус |
|---|---|---|
| SmitBilling | данные абонента из биллинга в карточке | рабочий |
| ClaudeAI | подсказки оператору и черновики ответов на Claude | рабочий |
| KnowledgeBase | база знаний оператора: сценарии и деревья решений | рабочий |
| AidaSessions | журнал ИИ-диалогов в helpdesk | рабочий, под нашу базу |
| VkIntegration | канал ВКонтакте с мостом на Python | рабочий |
| VoiceMail | голосовая почта → обращение и лид | рабочий, под нашу установку |
| SatRatingsChat | оценки ответа в Telegram и ВКонтакте | рабочий |
| BalanceMonitor | балансы сервисов в шапке | рабочий |
| SystemFilter | автоудаление системных писем | рабочий |
| SmitUI | оформление, режим монтажника | рабочий, без картинок |
| UrgencyButton | срочность для нескольких обращений | заготовка |
| AIFormLabel | метка чата и формы | рабочий |
Чего в репозитории нет. Платные и чужие модули (Kanban, Reports, CRM, Telegram Integration, White Label, вход через OpenID и другие) мы не публикуем: у них свои лицензии. Нет и картинок оформления. Адреса, внутренние номера телефонов и идентификаторы воронок заменены заглушками, а ключи везде берутся из .env или из настроек FreeScout. Модули написаны под нашу установку: это образцы, а не «поставил и работает».
Что не получилось и чему научились
- Обновление FreeScout стёрло наши шаблоны. При переходе с 1.8.207 на 1.8.221 встроенный обновлятор молча переписал пять наших blade-шаблонов — страницу входа в нашем оформлении, два экрана восстановления пароля и две кнопки администратора. Теперь правило: перед обновлением снимать архив, после — сравнивать все шаблоны. Заодно оказалось, что лимит памяти вшит в сам скрипт обновления, а production-режим требует флага
--force. - Три биллинга — три модуля. Копипаст панели абонента для каждого поколения биллинга быстро превратился в три почти одинаковых кода. В следующий раз нужен один адаптер и по драйверу на каждый биллинг.
- Свои модули живут рядом с чужими. В папке
Modulesу нас было почти пятьдесят модулей: шестнадцать наших, остальные — платные от FreeScout и общественные. Каждое обновление — гадание, что сломается. Хорошая привычка: отдельный список «наше / не наше» и тест после каждого апдейта. - Ключи не место в коде. Перед публикацией мы перебрали каждый файл, вынесли в
.envвсё, что туда не попало, и отдали код на независимую проверку: она нашла и забытые фамилии сотрудников, и реальные номера, и открытые без авторизации служебные адреса. Если собираетесь выкладывать модули в открытый доступ — делайте такой аудит заранее, а не в день релиза.
Почему ушли
FreeScout отлично справился с главным: помог за несколько месяцев понять, что на самом деле нужно оператору поддержки провайдера. Но к лету 2026 стало видно, что мы строим внутри helpdesk второй биллинг — с данными абонента, балансом, блокировками, обещанным платежом и статусами. Каждый новый канал означал ещё один модуль, ещё один мост, ещё один сервер с базой, которую надо обновлять и бэкапить.
В июне мы перенесли историю в собственную Поддержку внутри СмИТ Биллинга: около 17,7 тысячи обращений и 41 тысячу сообщений, тикеты привязываются к абоненту сразу, без отдельной панели. 8 октября 2026 года FreeScout выключили окончательно. Как устроена новая Поддержка — в документации, а весь биллинг целиком — в обзоре СмИТ Биллинга 3.9.
Для кого FreeScout с самописными модулями остаётся хорошим выбором:
- вашего продукта нет «рядом» — helpdesk и есть основная система поддержки;
- каналов немного, а данных о клиенте — на один запрос во внешнюю систему;
- есть кому поддерживать PHP и следить за обновлениями.
А если ваш продукт — это система, в которой уже лежат данные клиента, поддержка внутри неё выигрывает: нечего синхронизировать.
Читайте также
Сайт провайдера, где клиент оставляет заявку голосом, а маркетолог правит цены из Telegramтот же провайдер с другой стороны: заявку голосом принимает сайт и сам заводит её в биллинге
Telegram вместо CRM: когда это работает, а когда вы теряете деньгикогда хватает рабочей группы в мессенджере, а когда пора заводить систему вроде helpdesk
Бот ответил, а клиент получил ерунду: как следить за AI в работечто проверять, когда ИИ уже отвечает клиентам: тот же принцип, что у черновиков ClaudeAI
Мост MAX ↔ Telegram: ведём клиентов из MAX прямо внутри Telegramещё один канал в одно окно: клиенты из MAX приходят прямо в TelegramХотите понять, где у вас теряются обращения и заявки — между сайтом, мессенджерами и ответом менеджера? Бот разберёт путь клиента по пунктам и покажет дыры.
🔎 Найти, где утекают заявкиБесплатно, в Telegram-боте @uspeshnyybot








Комментарии
Войдите через Telegram, чтобы оставить комментарий:
Пока нет комментариев. Будьте первым.