09

Порядок реализации

Пошаговый план от первого звонка между двумя телефонами до полноценной продакшен-системы.

ФАЗА 1
Первый звонок

Установка FreeSWITCH, регистрация двух софтфонов и первый звонок между ними. Минимальная рабочая система.

Что делаем:
— Устанавливаем FreeSWITCH из пакетов или исходников
— Создаём два SIP-аккаунта (extensions) в конфигурации
— Регистрируем софтфоны (любой SIP-клиент)
— Совершаем звонок между двумя внутренними номерами

Чему учимся: SIP-регистрация, базовый call flow (INVITE → 200 OK → ACK → BYE), dialplan, профили пользователей.

Разблокируем: внутренние звонки

ФАЗА 2
Программное управление

Пишем Go-клиент для ESL (Event Socket Library) — программный контроль над звонками.

Что делаем:
— Подключаемся к FreeSWITCH через ESL (inbound-режим)
— Слушаем события: новый звонок, ответ, завершение
— Управляем звонками из кода: ответить, положить трубку, перевести
— Originate — инициация звонка из Go-кода

Чему учимся: протокол ESL, событийная архитектура (event-driven), команды FreeSWITCH API, управление каналами.

Разблокируем: API управления звонками

ФАЗА 3
WebRTC

Добавляем веб-клиент на SIP.js — звонки прямо из браузера без установки ПО.

Что делаем:
— Настраиваем WebSocket-транспорт в FreeSWITCH (mod_verto или WSS для SIP)
— Подключаем библиотеку SIP.js на веб-странице
— Реализуем входящие и исходящие звонки из браузера
— Настраиваем TLS-сертификаты (WebRTC требует HTTPS)

Чему учимся: SIP over WebSocket, SRTP-шифрование, ICE/STUN/TURN, кодек Opus, взаимодействие WebRTC и SIP.

Разблокируем: звонки из браузера

ФАЗА 4
REST API

Создаём полноценный Go REST API для управления пользователями, расширениями и правилами маршрутизации.

Что делаем:
— Проектируем схему базы данных: пользователи, расширения (extensions), правила маршрутизации
— REST API: CRUD для пользователей и настроек
— Синхронизация конфигурации FreeSWITCH через mod_xml_curl или ESL
— Аутентификация и авторизация API (JWT)

Чему учимся: проектирование API, схема БД для телефонии, провижининг (provisioning), динамическая конфигурация.

Разблокируем: админ-панель, автоматический провижининг

ФАЗА 5
SIP-транк

Подключаем SIP-провайдера для звонков на реальные телефонные номера (PSTN).

Что делаем:
— Выбираем SIP-провайдера (trunk provider) и регистрируемся
— Настраиваем SIP-транк (gateway) в FreeSWITCH
— Маршрутизация исходящих звонков через транк
— Приём входящих звонков на DID-номера (Direct Inward Dialing)
— Настройка Caller ID (отображаемый номер)

Чему учимся: конфигурация транков, DID-номера, Caller ID, кодеки для WAN, аутентификация у провайдера (IP-based или credentials).

Разблокируем: связь с внешним миром (PSTN)

ФАЗА 6
IVR и очереди

Голосовые меню (IVR) на Lua-скриптах и очереди вызовов через mod_callcenter.

Что делаем:
— Создаём голосовое меню (IVR): «Нажмите 1 для продаж, 2 для поддержки»
— Пишем Lua-скрипты для логики IVR (условия, переходы, TTS)
— Настраиваем mod_callcenter: очереди, агенты, стратегии распределения
— Стратегии: round-robin, longest-idle, ring-all, skill-based routing

Чему учимся: dialplan-скриптинг (Lua), логика IVR, стратегии очередей, статусы агентов, music on hold.

Разблокируем: функции контакт-центра

ФАЗА 7
Запись и CDR

Запись звонков, сбор CDR (Call Detail Records) и построение дашбордов аналитики.

Что делаем:
— Включаем запись звонков (mod_recording) с хранением в файловой системе или S3
— Собираем CDR: время, длительность, номера, статус (mod_cdr_csv, mod_cdr_pg_csv)
— Сохраняем CDR в PostgreSQL для анализа
— Строим дашборд: количество звонков, среднее время ожидания, SLA

Чему учимся: медиа-хранилище, форматы записи, CDR-схемы, аналитика звонков, отчёты по качеству.

Разблокируем: мониторинг качества, аналитика

ФАЗА 8
Масштабирование

Добавляем Kamailio как SIP-прокси, кластеризуем FreeSWITCH и подключаем Homer для мониторинга.

Что делаем:
— Устанавливаем Kamailio перед FreeSWITCH: балансировка, маршрутизация, защита
— Кластер FreeSWITCH: несколько инстансов для отказоустойчивости и нагрузки
— Homer SIP Capture — сбор и визуализация SIP-трафика для отладки
— Health checks, автоматический failover, мониторинг (Prometheus + Grafana)

Чему учимся: SIP-проксирование, балансировка нагрузки, высокая доступность (HA), SIP capture, продакшен-мониторинг.

Разблокируем: продакшен-система

Каждая фаза самодостаточна

Вы можете остановиться после любой фазы и иметь полностью рабочую систему. Каждая следующая фаза строится на предыдущей, добавляя новые возможности. Начните с Фазы 1 — первый звонок можно совершить за один вечер.