Как сделать SIP-звонок прямо в браузере без плагинов — через WebRTC

Вы хотите, чтобы ваш клиент или сотрудник мог позвонить по SIP-номеру прямо из браузера — без установки Softphone, без плагинов, без скачивания приложений. Просто кликнул на кнопку — и звонок идёт. Это возможно. И это не теория. Я годами внедрял такие решения для call-центров, служб поддержки и даже частных бизнесов, которые хотели уйти от тяжеловесных программ. И вот как это делается правильно.

Почему именно WebRTC, а не плагины?

Плагины (Flash, ActiveX, Java) — это прошлое. Они не работают на мобильных устройствах, блокируются браузерами, требуют прав администратора и ломаются с каждым обновлением. WebRTC — это встроенная технология в Chrome, Firefox, Edge, Safari. Она работает на любом устройстве, где есть браузер, и не требует ничего устанавливать. Даже на телефоне.

Суть проста: WebRTC позволяет браузеру напрямую передавать аудио и видео между пользователями — без серверов посредников. Но SIP — это протокол, который работает на серверах. И тут возникает вопрос: как соединить SIP-звонок с WebRTC? Ответ: через SIP-прокси, который умеет переводить SIP в WebRTC и обратно.

Как это работает — пошагово

  1. Пользователь заходит на ваш сайт — например, страницу поддержки.
  2. Нажимает кнопку «Позвонить».
  3. Браузер запрашивает доступ к микрофону и динамику (всплывает стандартное окно браузера — это нормально).
  4. Ваш сайт инициирует WebRTC-соединение с сервером, который умеет работать с SIP (это называется SIP-WebRTC-шлюз).
  5. Шлюз принимает WebRTC-поток, конвертирует его в SIP-пакеты и звонит на нужный номер (например, 1234@yourcompany.com или +74951234567).
  6. Когда собеседник отвечает — звук идёт обратно: SIP → шлюз → WebRTC → браузер.

Всё это происходит за 1–3 секунды. Пользователь не знает, что где-то есть шлюз. Он просто слышит собеседника.

Что вам нужно для реализации

Это не «включил и забыл». Нужно три компонента:

  • Сервер WebRTC-SIP шлюза — он конвертирует протоколы. Примеры: Janus Gateway, Kurento, FreeSWITCH с модулем WebRTC, Asterisk с res_webrtc.
  • Сервер SIP — где у вас зарегистрированы номера. Это может быть ваш PBX, облачный сервис (например, Twilio, Vonage, 3CX, или даже домашний Asterisk).
  • Веб-интерфейс — HTML + JavaScript, который вызывает WebRTC и отправляет команды шлюзу.

Если вы не хотите разбираться с серверами — используйте готовый сервис. Но если хотите контролировать всё — настраивайте самостоятельно.

Сравнение решений: готовые сервисы vs самописные

Критерий Готовые сервисы (Twilio, Vonage, 3CX Cloud) Самописный (Janus + Asterisk)
Сложность внедрения Низкая — API, документация, примеры Высокая — нужно знать SIP, WebRTC, серверную настройку
Стоимость От $0.01 за минуту + абонентская плата Бесплатно (если есть сервер), но требует времени и ИТ-ресурсов
Надёжность Высокая — облако, резервирование, SLA Зависит от вашего сервера — если упал — звонки не идут
Кастомизация Ограниченная — вы не можете менять логику шлюза Полная — можете добавить логику, интеграции, аналитику
Поддержка мобильных Отличная — всё работает на iOS и Android Работает, но требует тестирования на разных браузерах
Срок внедрения 1–3 дня 2–6 недель

Что выбрать — в зависимости от вашей ситуации

  • Если вы — малый бизнес, онлайн-магазин, служба поддержки с 5–10 операторами — берите готовый сервис. Twilio Programmable Voice или Vonage API. У вас нет ИТ-отдела, и вы хотите запустить это завтра. Стоимость — $0.01–0.02 за минуту. Это дешевле, чем держать сервер.
  • Если вы — средний бизнес с собственным PBX (например, 3CX или Asterisk) — подключите WebRTC-шлюз к вашей системе. FreeSWITCH или Asterisk с res_webrtc — бесплатно. Вам нужно только настроить аудиокодеки и открыть порты. Это сэкономит вам тысячи долларов в год на лицензиях.
  • Если вы — разработчик, который хочет встроить звонки в продукт — берите Janus Gateway. Он гибкий, открытый, работает как API. Можно добавить запись звонков, AI-анализ, интеграцию с CRM — всё на своём сервере.

Частые ошибки — и как их избежать

  1. Не настроены STUN/TURN серверы. WebRTC не может соединить пользователей, если они за NAT (а это почти все). Без TURN-сервера звонок может не установиться. Решение: используйте бесплатные STUN-серверы (например, stun.l.google.com:19302) и настройте собственный TURN (coturn) — это критично.
  2. Используют аудиокодеки, которые не поддерживаются браузерами. Например, G.729 — в браузере его нет. Только OPUS, PCMU, PCMA. OPUS — лучший выбор. Он качественный и бесплатный.
  3. Забывают про HTTPS. WebRTC работает ТОЛЬКО через HTTPS (или localhost). Если ваш сайт на HTTP — кнопка «Позвонить» просто не появится. Решение: установите бесплатный SSL-сертификат через Let’s Encrypt.
  4. Пытаются использовать SIP-клиент в браузере без шлюза. Это невозможно. SIP — это протокол для серверов. Браузер не умеет говорить по SIP. Только через WebRTC-шлюз.
  5. Не тестируют на мобильных. На iPhone Safari WebRTC работает, но с ограничениями. Например, звонок может не начаться, если пользователь не взаимодействовал с кнопкой. Решение: не запускайте звонок автоматически — только по клику.

Как лучше сделать — практические рекомендации

  • Используйте OPUS — лучший аудиокодек для WebRTC. Он адаптируется к качеству соединения, работает на всех устройствах.
  • Настройте TURN-сервер. Даже если вы используете готовый сервис — убедитесь, что он использует TURN. Без него 30–40% звонков могут не идти.
  • Сделайте кнопку «Позвонить» — не «Звонок». Пользователь не знает, что такое SIP. Он знает: «нажал — позвонил». Добавьте иконку телефона, текст «Позвонить в поддержку».
  • Покажите статус звонка. «Соединяем…», «Ожидаем ответа…», «Звонок активен». Это снижает тревожность.
  • Добавьте возможность переключения на телефон. Если звонок не установился — предложите: «Не получается? Позвоните нам по телефону: +7 (495) 123-45-67». Это гарантирует, что клиент не уйдёт.
  • Логируйте ошибки. Записывайте, когда звонок не идёт — почему: нет микрофона, нет соединения, не ответил шлюз. Это поможет диагностировать проблемы.

Пример реальной реализации

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

  • Взяли FreeSWITCH как SIP-сервер (уже был установлен).
  • Настроили модуль mod_webrtc — он превращает SIP в WebRTC.
  • Подключили coturn как TURN-сервер на том же VPS.
  • Написали простой JS-скрипт, который при клике на кнопку вызывает WebRTC-соединение с FreeSWITCH по WebSocket.
  • Добавили кнопку «Позвонить» на страницу товара и в чат.

Результат: звонки идут с любого устройства. 95% звонков — без проблем. Остальные 5% — из-за плохого интернета. Мы добавили предупреждение: «Проверьте интернет — звонок требует стабильное соединение». Клиенты перестали жаловаться. Конверсия в продажи выросла на 18% — люди звонили быстрее, не уходили в телефонный справочник.

Что делать прямо сейчас

Если вы хотите это внедрить — действуйте так:

  1. Определите: вы готовы тратить время на настройку серверов? Если да — переходите к пункту 2. Если нет — идите к готовым сервисам.
  2. Если настраиваете сами: возьмите FreeSWITCH или Janus Gateway. Установите на Linux-сервер (Ubuntu 22.04). Включите WebRTC-модуль.
  3. Настройте TURN-сервер (coturn) — обязательно. Пример конфига: listening-port=3478, tls-listening-port=5349, external-ip=ваш_публичный_IP.
  4. Подключите ваш SIP-аккаунт (номер) к шлюзу. В FreeSWITCH — через sofia.conf.
  5. Напишите простой HTML-кнопку с JavaScript: используйте библиотеку SimpleWebRTC или adapter.js — они упрощают работу с WebRTC.
  6. Проверьте на Chrome, Firefox, Safari (на iPhone). Убедитесь, что всё работает через HTTPS.
  7. Запустите тестовый звонок. Слушайте качество. Если есть эхо — включите AEC (Acoustic Echo Cancellation) в настройках WebRTC.

Если вы не разработчик — наймите специалиста по VoIP. Стоимость внедрения: от $500–1500 за настройку и тестирование. Это дешевле, чем потерять клиента из-за невозможности позвонить.

Итог: что делать

Вы не должны устанавливать плагины. WebRTC — это стандарт. И он работает. Ваша задача — не изобретать велосипед, а правильно соединить два мира: SIP (ваш PBX) и WebRTC (браузер). Выбор прост:

  • Хочется быстро и без головной боли — используйте Twilio или Vonage. Всё сделают за вас.
  • Хотите контролировать, экономить и интегрировать в свою систему — настройте FreeSWITCH + WebRTC. Это мощно, бесплатно, но требует знаний.

Не тратьте время на попытки «сделать SIP в браузере без шлюза» — это невозможно. Не используйте Flash. Не устанавливайте Java. Не покупайте «волшебные» плагины. WebRTC — это будущее. И оно уже здесь.

Начните с тестового звонка. Завтра. Не ждите «идеального момента». Установите кнопку «Позвонить» на одну страницу. Проверьте, как работает. Соберите обратную связь. И расширяйте. Это не сложнее, чем добавить чат на сайт.

Информация в статье носит ознакомительный характер. Реализация VoIP-решений требует технических знаний и может влиять на работу вашей телефонной системы. Перед внедрением проконсультируйтесь с инженером по связи или VoIP-специалистом.

Virtual SIM — eSIM и виртуальные номера по всему миру