Порядок реализации
Пошаговый план от первого звонка между двумя телефонами до полноценной продакшен-системы.
Установка FreeSWITCH, регистрация двух софтфонов и первый звонок между ними. Минимальная рабочая система.
Что делаем:
— Устанавливаем FreeSWITCH из пакетов или исходников
— Создаём два SIP-аккаунта (extensions) в конфигурации
— Регистрируем софтфоны (любой SIP-клиент)
— Совершаем звонок между двумя внутренними номерами
Чему учимся: SIP-регистрация, базовый call flow (INVITE → 200 OK → ACK → BYE), dialplan, профили пользователей.
Разблокируем: внутренние звонки
Пишем Go-клиент для ESL (Event Socket Library) — программный контроль над звонками.
Что делаем:
— Подключаемся к FreeSWITCH через ESL (inbound-режим)
— Слушаем события: новый звонок, ответ, завершение
— Управляем звонками из кода: ответить, положить трубку, перевести
— Originate — инициация звонка из Go-кода
Чему учимся: протокол ESL, событийная архитектура (event-driven), команды FreeSWITCH API, управление каналами.
Разблокируем: API управления звонками
Добавляем веб-клиент на SIP.js — звонки прямо из браузера без установки ПО.
Что делаем:
— Настраиваем WebSocket-транспорт в FreeSWITCH (mod_verto или WSS для SIP)
— Подключаем библиотеку SIP.js на веб-странице
— Реализуем входящие и исходящие звонки из браузера
— Настраиваем TLS-сертификаты (WebRTC требует HTTPS)
Чему учимся: SIP over WebSocket, SRTP-шифрование, ICE/STUN/TURN, кодек Opus, взаимодействие WebRTC и SIP.
Разблокируем: звонки из браузера
Создаём полноценный Go REST API для управления пользователями, расширениями и правилами маршрутизации.
Что делаем:
— Проектируем схему базы данных: пользователи, расширения (extensions), правила маршрутизации
— REST API: CRUD для пользователей и настроек
— Синхронизация конфигурации FreeSWITCH через mod_xml_curl или ESL
— Аутентификация и авторизация API (JWT)
Чему учимся: проектирование API, схема БД для телефонии, провижининг (provisioning), динамическая конфигурация.
Разблокируем: админ-панель, автоматический провижининг
Подключаем SIP-провайдера для звонков на реальные телефонные номера (PSTN).
Что делаем:
— Выбираем SIP-провайдера (trunk provider) и регистрируемся
— Настраиваем SIP-транк (gateway) в FreeSWITCH
— Маршрутизация исходящих звонков через транк
— Приём входящих звонков на DID-номера (Direct Inward Dialing)
— Настройка Caller ID (отображаемый номер)
Чему учимся: конфигурация транков, DID-номера, Caller ID, кодеки для WAN, аутентификация у провайдера (IP-based или credentials).
Разблокируем: связь с внешним миром (PSTN)
Голосовые меню (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.
Разблокируем: функции контакт-центра
Запись звонков, сбор CDR (Call Detail Records) и построение дашбордов аналитики.
Что делаем:
— Включаем запись звонков (mod_recording) с хранением в файловой системе или S3
— Собираем CDR: время, длительность, номера, статус (mod_cdr_csv, mod_cdr_pg_csv)
— Сохраняем CDR в PostgreSQL для анализа
— Строим дашборд: количество звонков, среднее время ожидания, SLA
Чему учимся: медиа-хранилище, форматы записи, CDR-схемы, аналитика звонков, отчёты по качеству.
Разблокируем: мониторинг качества, аналитика
Добавляем Kamailio как SIP-прокси, кластеризуем FreeSWITCH и подключаем Homer для мониторинга.
Что делаем:
— Устанавливаем Kamailio перед FreeSWITCH: балансировка, маршрутизация, защита
— Кластер FreeSWITCH: несколько инстансов для отказоустойчивости и нагрузки
— Homer SIP Capture — сбор и визуализация SIP-трафика для отладки
— Health checks, автоматический failover, мониторинг (Prometheus + Grafana)
Чему учимся: SIP-проксирование, балансировка нагрузки, высокая доступность (HA), SIP capture, продакшен-мониторинг.
Разблокируем: продакшен-система
Вы можете остановиться после любой фазы и иметь полностью рабочую систему. Каждая следующая фаза строится на предыдущей, добавляя новые возможности. Начните с Фазы 1 — первый звонок можно совершить за один вечер.