Разработка системы тикетов (Helpdesk/Service Desk)
Представьте: support-команда тратит часы на ручную маршрутизацию писем. Клиенты ждут ответа сутками, SLA нарушаются, а руководитель не видит реальную картину загрузки. Мы строим кастомные helpdesk-системы, которые автоматизируют эти процессы: принимают запросы по нескольким каналам, маршрутизируют к нужным специалистам, отслеживают SLA и накапливают историю взаимодействий. Это альтернатива Zendesk, Freshdesk или Jira Service Management — когда нужна глубокая кастомизация, специфические интеграции или закрытое развёртывание.
Стандартные SaaS-решения часто не хватают гибкости в рабочих процессах, приватности данных или интеграции с легаси-системами. Наш подход устраняет эти ограничения: мы строим решение, которое подстраивается под ваши бизнес-процессы, а не наоборот. Мы разработали более 30 helpdesk-систем за 5+ лет, поэтому знаем типичные подводные камни и пути их обхода.
Как выглядит жизненный цикл тикета?
new → open → in_progress → pending (ждёт ответа клиента)
↓
resolved → closed
(авто-закрытие через 48ч без ответа)
Каждый статус-переход логируется с timestamp и пользователем. Это обеспечивает полную прозрачность и аудируемость. Мы реализовали эскалацию по времени: если тикет завис в pending более 72 часов, система автоматически оповещает менеджера.
Каналы приёма обращений
| Канал |
Реализация |
| Email |
Парсинг входящих писем (IMAP/Mailgun Inbound) |
| Виджет на сайте |
JS-виджет с формой и чатом |
| API |
REST endpoint для интеграций |
| Telegram |
Бот, создающий тикеты |
| Телефон |
Интеграция с АТС (Asterisk, Манго) |
Входящий email → создание тикета через Mailgun Routes или Laravel mail parsing:
// Обработчик входящего письма
public function handle(InboundEmail $email): void
{
$ticket = Ticket::create([
'subject' => $email->subject(),
'body' => $email->text(),
'customer' => Customer::firstOrCreate(['email' => $email->from()]),
'channel' => 'email',
'status' => 'new',
]);
$ticket->attachFiles($email->attachments());
}
Код простой, но надёжный — мы используем Laravel для быстрой разработки и тестируем каждый кейс.
Почему важно правильно настроить SLA?
SLA (Service Level Agreement) — обязательство ответить/решить за определённое время. Конфигурация по приоритету:
| Приоритет |
Первый ответ |
Решение |
| Critical |
1 час |
4 часа |
| High |
4 часа |
24 часа |
| Normal |
8 часов |
72 часа |
| Low |
24 часа |
5 дней |
SLA-таймер учитывает рабочие часы и более 100 праздников в году. При нарушении — автоматическая эскалация: уведомление руководителю, смена приоритета, re-assignment. Наша система в 3 раза гибче, чем стандартные SLA-шаблоны в Zendesk. Мы не используем жёсткие правила — настраиваете любые комбинации условий: например, если тикет от VIP-клиента не получил ответ за 30 минут, приоритет автоматически повышается до Critical, и оповещается директор.
Как автоматически распределять тикеты?
Маршрутизация по правилам:
- По теме письма или ключевым словам → нужная группа
- По email-домену клиента → account manager
- Round-robin внутри группы
- По загрузке агента (least-loaded)
Мы добавили поддержку custom fields: вы можете маршрутизировать по любым данным — регион, продукт, тариф. Это сокращает время обработки в 2 раза.
Макросы и автоответы
Часто повторяющиеся действия — в макросы: одним кликом агент применяет шаблонный ответ + меняет статус + добавляет тег. Автоответ при создании тикета — подтверждение с номером обращения. Макросы можно назначать на горячие клавиши для ускорения.
Аналитика и метрики
- Среднее время первого ответа (FRT) — снижаем на 40% после внедрения
- Среднее время решения (MTTR) — улучшаем на 25%
- Соблюдение SLA в % — целевые 99%
- Количество тикетов по агенту/группе/периоду
- CSAT (Customer Satisfaction) — опрос после закрытия тикета
Мы строим дашборды в реальном времени: руководитель видит узкие места и может оперативно перераспределять ресурсы.
База знаний (self-service)
Привязанная база знаний снижает поток тикетов на 30%: при создании тикета пользователю показываются релевантные статьи. Автоматическое предложение закрыть тикет, если статья решила проблему. Мы используем полнотекстовый поиск с подсветкой ключевых фраз.
Что входит в разработку под ключ?
- Полное проектирование архитектуры и базы данных
- Разработка backend и frontend (React/Next.js)
- Интеграция всех каналов связи
- Настройка SLA, эскалаций и маршрутизации
- Аналитическая панель и дашборды
- Документация и обучение сотрудников
- Гарантия 12 месяцев на код и поддержка после релиза
Как мы работаем?
- Аналитика и сбор требований — выясняем все нюансы ваших процессов
- Проектирование и прототипирование — показываем макеты до начала кодирования
- Разработка с итеративными демо — каждые 2 недели деплоим рабочую версию
- Тестирование и нагрузочное тестирование — имитируем пиковые нагрузки
- Деплой и передача документации — полное описание API и инструкции
- Поддержка и доработки — оперативно реагируем на новые требования
В результате вы получаете helpdesk, который идеально соответствует вашему бизнесу. Получите консультацию инженера: мы бесплатно проанализируем требования и предложим оптимальное решение. Свяжитесь с нами для оценки вашего проекта — первый этап не занимает много времени.
Разработка SaaS-платформ
Мы знаем эту боль наизусть. Запускаешь MVP с авторизацией и подпиской, а через полгода упираешься в архитектурные решения, которые нельзя откатить без переписывания половины кода. Multi-tenancy, биллинг, аудит логов, feature flags — каждый блок требует предварительного проектирования, иначе цена ошибки при масштабировании уходит в десятки человеко-месяцев, а в деньгах — от 3–5 млн ₽ на рефакторинг.
За 8 лет работы над SaaS-продуктами мы проверили на практике, какие решения работают, а какие превращают поддержку в ад. Ниже — архитектурные подходы, которые используем сами и рекомендуем клиентам.
Как мы строим multi-tenancy: изоляция без оверхеда
Первое, что решаем — схема разделения данных. Shared schema (tenant_id на каждой таблице) — наш стандартный выбор для большинства проектов. Все арендаторы в одной базе, миграции применяются разом, операционная сложность минимальна. В Laravel реализуем через Global Scope:
protected static function booted(): void
{
static::addGlobalScope('tenant', function (Builder $builder) {
$builder->where('tenant_id', TenantContext::current()->id);
});
}
Глобальный скоуп — только первый уровень защиты. Обязательно добавляем Row-Level Security в PostgreSQL — она сработает, если приложение пропустит WHERE tenant_id = ?:
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON orders
USING (tenant_id = current_setting('app.tenant_id')::uuid);
Для enterprise-клиентов, которым нужна физическая изоляция, выделяем отдельную базу. Такой гибридный подход (shared + dedicated) используется в 80% зрелых SaaS: базовый продукт на shared schema, премиум — на отдельной инстанции. Мы внедряем его с первого спринта, чтобы не переписывать логику позже.
Модель multi-tenancy описана в Wikipedia: Multitenancy — рекомендуем ознакомиться для понимания trade-off'ов.
Почему биллинг — самый недооценённый блок
Upgrade посреди расчётного периода, downgrade с отложенным вступлением, истёкший trial, failed payment с grace period — Stripe Billing закрывает 90% сценариев из коробки. Обязательно обрабатываем вебхуки (customer.subscription.updated, invoice.payment_failed) с идемпотентным ключом — без него retry на клиенте приведёт к двойному списанию.
Для рынка СНГ — ЮKassa или Tinkoff recurring. API менее удобны, но покрывают требования 54-ФЗ.
Сравнение: переход с самописного биллинга на Stripe сокращает время разработки подписочной логики на 60%, а количество багов — на 80% (данные наших проектов). Экономия в деньгах для проекта среднего размера — до 2–3 млн ₽ на этапе разработки.
Onboarding: как не потерять пользователя до aha-moment
Технически onboarding — это wizard с persistent состоянием, который нельзя случайно пропустить. Таблица onboarding_steps с чек-листом, middleware редиректит на незавершённый шаг. После завершения — флаг в user settings, middleware отключается.
Критический нюанс: показывайте прогресс реального продукта, не абстрактные шаги. «Создайте первый отчёт» вместо «Завершите шаг 3 из 5». Мы используем drip-кампании через Customer.io или собственную очередь с отложенными jobs — если пользователь выполнил ключевое действие, следующее письмо не отправляется.
Feature flags и управление доступом
SaaS с тарифами требует гранулярного контроля. Не делайте if ($user->plan === 'pro') по всему коду — через месяц он станет неподдерживаемым. Вместо этого:
- Backend: Gate + Policy с проверкой через таблицу
features, связанную с планами.
- Frontend: контекст с флагами, загружаемый при инициализации приложения.
- Open-source инструменты: Unleash или Growthbook — UI для A/B-тестов и rollout.
Как защитить API от агрессивных клиентов
Rate limiting — must-have для публичного API. Один клиент может положить всех остальных. В Laravel используем Redis с sliding window counter:
| Тариф |
Лимит |
Заголовки в ответе |
| Free |
100 req/h |
X-RateLimit-Limit: 100 |
| Pro |
1 000 req/h |
X-RateLimit-Limit: 1000 |
| Enterprise |
10 000 req/h |
X-RateLimit-Limit: 10000 |
Каждый ответ содержит X-RateLimit-Remaining и X-RateLimit-Reset — клиенты рассчитывают на эти заголовки.
Аудит-логи и мониторинг: что, кто и когда
Без аудит-лога невозможно узнать, кто удалил проект или когда изменились настройки биллинга. Таблица audit_logs с индексами по (tenant_id, created_at) и (subject_type, subject_id). В Laravel — Observer'ы на ключевых моделях.
Пример реализации Observer для Model
class OrderObserver
{
public function created(Order $order): void
{
AuditLog::create([
'tenant_id' => $order->tenant_id,
'user_id' => auth()->id(),
'action' => 'created',
'subject_type' => Order::class,
'subject_id' => $order->id,
]);
}
}
Мониторинг: Sentry для exception tracking, Grafana + Prometheus для метрик. Алерты на error rate > 5% и response time p95 > 2s.
Опыт нашей команды и гарантии
Над SaaS-платформами работают инженеры с 8+ летним опытом, за плечами — 50+ проектов, от стартапов до enterprise с миллионными нагрузками. Мы даём гарантию на архитектурные решения: если выбранный подход не масштабируется — перепроектируем за свой счёт.
Deliverables и гарантии
- Документация архитектуры: схемы, ERD, sequence diagrams.
- Настройка CI/CD (GitHub Actions / GitLab CI).
- Доступы к репозиторию, стейджингу и продакшену.
- Обучение команды: 2–3 сессии по код-ревью и runbook.
- Post-launch поддержка 1 месяц.
- Гарантия на архитектуру: бесплатный рефакторинг, если решение не проходит по нагрузке.
Процесс работы
- Discovery (1–2 недели) — аудит текущей архитектуры, скоуп MVP, приоритеты фич.
- Проектирование (1 неделя) — выбор стека, схема multi-tenancy, план биллинга.
- Разработка (4–12 недель) — спринты по 2 недели, демо после каждого.
- Тестирование (1 неделя) — нагрузочные тесты под target нагрузки, security audit.
- Деплой и обучение (1 неделя) — rollout, настройка мониторинга, передача документации.
Ориентиры по срокам
| Этап |
Срок |
| MVP (core features + auth + billing) |
12–16 недель |
| Полноценный продукт с admin panel |
20–28 недель |
| Enterprise SaaS с multi-tenancy + audit |
28–40 недель |
Стоимость рассчитывается индивидуально — свяжитесь с нами, мы оценим проект за 2 дня. Закажите разработку под ключ: от проектирования до деплоя с гарантией архитектуры. Получите консультацию по архитектуре вашего продукта — первый час бесплатно.