Звонок на мобильный телефон через SIP сервер¶
Описание¶
SIP звонок на мобильный телефон является частным случаем звонков между браузером и SIP-устройством, при этом SIP-сервер либо сам предоставляет услуги GSM/PSTN шлюза, либо соединяется с таковым в процессе звонка.
Поддерживаемые платформы и браузеры¶
Chrome | Firefox | Safari | Edge | |
---|---|---|---|---|
Windows | ✅ | ✅ | ❌ | ✅ |
Mac OS | ✅ | ✅ | ✅ | ✅ |
Android | ✅ | ✅ | ❌ | ✅ |
iOS | ✅ | ✅ | ✅ | ✅ |
Поддерживаемые протоколы¶
- WebRTC
- RTP
- SIP
Поддерживаемые кодеки¶
- H.264
- VP8
- G.711
- Speex
- G.729
- Opus
Поддерживаемые SIP функции¶
- DTMF
- Удержание звонка
- Перевод звонка
SIP функции управляются при помощи WebSDK.
Схема работы¶
- Браузер начинает звонок
- WCS соединяется с SIP-сервером
- SIP-сервер соединяется с GSM/PSTN шлюзом
- GSM/PSTN шлюз соединяется с телефоном
- Браузер и телефон обмениваются аудиопотоками
Краткое руководство по тестированию¶
- Для тестирования используем:
- SIP-аккаунт;
- веб-приложение Phone UI для совершения звонка;
-
мобильный телефон для ответа на звонок.
-
Откройте веб-приложение Phone UI. Нажмите
Log in
и введите данные SIP-аккаунта:
-
Введите номер мобильного телефона и нажмите
Voice call
. Начнется дозвон:
-
На экране мобильного телефона отображается входящий вызов:
-
Примите звонок на мобильном телефоне:
-
В браузере также отображается установленное соединение:
-
Для завершения звонка нажмите кнопку
Hangup
Последовательность выполнения операций¶
Ниже описана последовательность вызовов при использовании примера Phone для создания звонка
-
Создание звонка
Session.createCall()
,Call.call()
code
-
Отправка
SIP INVITE
на SIP-сервер -
Отправка
SIP INVITE
на GSM/PSTN шлюз -
Установка соединения с мобильным терминалом
-
Получение подтверждения от GSM/PSTN шлюза
-
Получение подтверждения от SIP-сервера
-
Получение от сервера события, подтверждающего успешное соединение
CALL_STATUS.ESTABLISHED
code
-
Стороны звонка обмениваются аудиопотоком
-
Завершение звонка
Call.hangup()
code
Phone.prototype.hangup = function () { trace("Phone - hangup " + this.currentCall.id() + " status " + this.currentCall.status()); this.hideFlashAccess(); if (this.currentCall.status() == CALL_STATUS.PENDING) { this.callStatusListener(this.currentCall); } else { this.currentCall.hangup(); } this.flashphonerListener.onHangup(); };
-
Отправка
SIP BYE
на SIP-сервер -
Отправка
SIP BYE
на GSM/PSTN шлюз -
Получение подтверждения от GSM/PSTN шлюза
-
Получение подтверждения от SIP-сервера