Web-телефон на jquery

Примечание

Технология WebRTC работает стабильно только на Chromium-подобных браузерах: Google Chrome, Яндекс Браузер, Microsoft Edge, Chromium.

Демонстрационная страница web-телефона: https://operator/phone/phone_v2.html

Минимальный код для подключения web-телефона

Загружаем необходимые компоненты:

<script src="https://operator/phone/js/jquery-2.2.4.min.js"></script>

<script src="https://operator/phone/js/vertojs/dist/verto.js"></script>

<script src="https://operator/phone/js/jquery.phone.webrtc.js"></script>

Определяем элемент страницы, к которой привязываем web-телефон:

<div id='phoneID'></div>

Код, размещаемый внизу страницы

<script>
    /* Делаем переадресацию на https, некоторые браузеры не поддерживают нешифрованный трафик */

    if (window.location.protocol != "https:")
       window.location.href = "https:" + window.location.href.substring(window.location.protocol.length);

    /* Параметры подключения web-телефона:
        обязательные:
            host_source_link - адрес сервера телефонии,
            wss - адрес подключения к вебсокету

        дополнительные:
            login - логин,
            password - пароль,
            autologin - автоматическая регистрация телефона при значении true, иначе - необходимо нажать кнопку "Включить"
    */

    /*Задаем настройки web-телефона*/
    settings = {
        host_source_link: 'https://pbx.runtel.org',
        wss: 'wss://<domain or host name>:8086',
        login: 'uid@domain',
        password: 'password',
        autologin: true
    }

    /* Загружаем плагин web-телефона */
    $Phone = $("#phoneID").phone(settings);
</script>

События web-телефона:

Вешаем колбэки на события:

login - событие на регистрацию, возвращает код клиента и Доменное имя, необходимы для запроса статистики,

incall - событие на входящий вызов, возвращает входящий номер клиента и имя звонящего,

answer - событие на ответ оператора, возвращает входящий номер клиента

Пример кода

$Phone.on('login', function(evt, domain, session){
    console.log(JSON.stringify({domain: domain, session: session}));
});

$Phone.on('incall', function(evt, number, name){
    console.log(JSON.stringify({number: number, name: name}));
});

$Phone.on('answer', function(evt, number){
    console.log(JSON.stringify({number: number}));
});

Звонок по клику, через web-телефон:

html:

<div id="phoneID"></div>
<a rel="phone" href="4951343060">+7 495 134-30-60</a>

js:

$('a[rel="phone"][href]').on('click', function(evt) {
    evt.preventDefault();
    $("#phoneID").find('#phone').data('phone').call($(this).attr('href'));
}); // для заполнения и вызова

Серверные методы (/api/verto/)

Помимо медиа-соединения с FreeSWITCH, виджет обращается к вспомогательному REST-эндпоинту POST {{v2_host}}/api/verto/ (заголовок Verto-Session-Id: <session_id>) для операций, не связанных с передачей звука: статусы, адресная книга, история вызовов, профиль, переводы.

Конверт запроса: {"action": "...", "obj": "...", "params": {"login": "uid@domain", ...}}.

Действие

Параметры (params)

Описание

user_status_list

login

Список статусов домена (алиас: agent_status_list)

user_status

login

Текущий статус агента

user_change_status

login, status_id

Сменить статус агента

address_book

login, limit, offset, sort

Адресная книга домена (с пагинацией)

cdr

login

История вызовов (до 100 за год)

get_tz

login

Часовой пояс домена

get_device_id

login

Получить ID устройства

set_device_id

login, device_id

Сохранить ID устройства

get_profile

login

Профиль телефона и флаги

get_verto_mode

login, channels_for_check

Режим, активные сессии и статусы каналов

set_transfer_uuid

login, current_call_uuid, current_session_uuid, is_blind, transfered_number, target_number

Зафиксировать перевод вызова (слепой/консультативный)

Настройки телефона пользователя

Действие get_profile возвращает настройки телефона пользователя (модель DomainPhoneParams):

Поле

Тип

Описание

auto_login

Boolean

Автоматическая регистрация при загрузке

wss

String

Персональный WSS (переопределяет базовый)

device_id

String

Идентификатор устройства (CTI, браузер)

func_key_list

List

Функциональные клавиши (тип 0 — быстрый набор, 1 — перевод вызова)

ice_server_list

List

STUN/TURN-серверы для WebRTC ICE

auto_answer

Integer

Секунд до автоответа (0 — выключен)

Дополнительно в ответе передаются настройки CTI домена (кнопки перевода/видео/подслушивания, горячие клавиши, порядок поиска имени звонящего и т.д.) и адреса подключения: базовый wss://<домен>:8086 и персональный (если задан в профиле).

Примечание

Режим многовкладочного телефона задаётся настройкой verto_mode: 0 — активен в последней открытой вкладке, 1 — в первой (основной).