Общее описание
Если у абонента есть несколько терминалов, например, стационарный телефон и мобильный телефон, то он может все свои терминалы (разные SIP-контакты) зарегистрировать под одним публичным номером. Публичный номер будет известен другим абонентам, и по публичному номеру будут поступать входящие вызовы. Привязка нескольких частных контактов к одному публичному называется форкингом (forking).
На уровне SIP-адаптера форкинг работает в рамках одного абонентского интерфейса. Один абонент может под одним аккаунтом зарегистрировать несколько контактов (одной регистрацией или несколькими).
Принцип работы
Если есть несколько зарегистрированных контактов, то входящий вызов в зависимости от выбранного режима поступает одновременно или последовательно на все контакты.
Переход на следующий контакт/контакты выполняется по получению неуспешного ответа или истечении тайм-аута (таймер "find-me").
Исходящие звонки разрешены с любого контакта в любом режиме.
Абонент считается занятым, если по какому-либо контакту есть соединение или идет установка соединения, то есть работа интерфейса с несколькими зарегистрированными контактами в системе ничем не отличается от работы интерфейса с одним контактом.
Пример зарегистрированного абонента с несколькими контактами:
ecss-root@[ecss_mycelium@alex]:/# domain/d.408/sip/user/info sip.test 900000@sip.test 1 users information read ... [**********************************************************************] 6ms Executed on the pa_sip@alex ---------------------------------------------------------------------------------------------------------------------------------------------- | User | Is active | Group | Login | Registration | Extended information | |-----------------+-----------+----------+-------+--------------------------------------------------------------------+----------------------| | 900000@sip.test | true | sip.test | | q=1.0; <sip:900000@192.168.23.166:5064>;expires=65 | | | | | | | q=0.8; <sip:900000@192.168.23.166:5062;transport=udp>;expires=9003 | | ----------------------------------------------------------------------------------------------------------------------------------------------
Режим форкинга
Выбор режима работы форкинга выполняется для абонента или группы абонентов следующей командой:
domain/<DOMAIN>/sip/user/set <GROUP> <SIP_URI> fork-mode <MODE> <ALLOW-REPEAT-IP> <PREVIOUS-CONTINUE>
где
<DOMAIN> - имя виртуальной АТС;
<GROUP> - имя группы интерфейсов, логическая привязка интерфейсов в определенной виртуальной АТС;
<SIP_URI> - SIP URI абонента, задается в виде: username@host, где username – имя/номер абонента; host – домен регистрации;
Список может быть задан диапазоном {a-b} или перечислением {a,b}, где a,b – натуральные числа.
Пример. Интерфейсы 1111@eltex.local, 1112@eltex.local, 1113@eltex.local можно задать в виде 111{1-3}@eltex.local или 111{1,2,3}@eltex.local или {1111,1112,1113}@eltex.local.
<MODE> - режим форкинга:
- all-contacts - запрос на установление соединения (INVITE) отправляется одновременно на все зарегистрированные контакты. С первым ответившим контактом устанавливается диалог, вызовы на остальные контакты завершаются;
- find-me-one-by-one - последовательный перебор контактов по списку. Если контакт не отвечает по истечении таймера "find-me" (контакту отправляется CANCEL) или приходит неуспешный ответ, запрос перенаправляется на следующий контакт;
- find-me-with-q - последовательный перебор с учетом приоритета. Сначала выполняется запрос на все контакты самого старшего приоритета, затем на контакты со следующим приоритетом и так далее. Если в списке контакты только одного приоритета, то работа аналогична режиму "all-contacts". Если все имеют разный приоритет, то аналогично режиму "find-me-one-by-one";
- disable - отключение форкинга. Запрос на установление соединения (INVITE) будет отправляться только на первый контакт в списке, наличие остальных контактов игнорируется. Совершать вызовы разрешено со всех зарегистрированных контактов.
<ALLOW-REPEAT-IP> - будет ли перезаписываться старый контакт новым, если изменился только порт:
- allow-repeat-ip - существующий контакт будет сохраняться;
- disallow-repeat-ip - существующий контакт будет перезаписываться;
Примечание: параметр обязателен для всех режимов, кроме операции отключения (disable)
<PREVIOUS-CONTINUE> - свойство режимов find-me (для all-contacts не применяется):
- previous-continue - при переходе к следующему контакту (группе контактов с одним приоритетом) вызов предыдущего (предыдущих) продолжается;
- previous-stop - при переходе к следующему контакту (группе контактов с одним приоритетом) вызов предыдущего (предыдущих) отменяется
Примечание: параметр обязателен для режимов find-me-one-by-one и find-me-with-q
Список контактов формируется при регистрации в порядке убывания приоритета (параметр контакта "q"), равнозначные - в порядке получения регистраций. Если в регистрации приоритет контакта не указан, то он принимается равным 1.
Значения приоритетов - число от 0 (низкий) до 1 (высокий).
Назначить приоритет контакту на уровне системы нельзя, приоритет контакта указывает пользователь в запросе регистрации.
Таймер "find-me"
Таймер "find-me" определяет интервал времени, в течение которого контакт должен ответить на поступивший вызов, по истечении таймера вызов передается следующему контакту SIP-аккаунта. Значение устанавливается в секундах, по умолчанию 5 секунд.
Команда для изменения значения таймера "find-me":
domain/<DOMAIN>/timers/sip/set find-me <VALUE>
где
<DOMAIN> - имя виртуальной АТС;
<VALUE> - значение таймера "find-me".
Пример:
admin@[mycelium@ecss1]:/# domain/d.408/timers/sip/set find-me 5 Property "find_me" successfully changed from: 7 to 5. ... admin@[mycelium@ecss1]:/# domain/d.408/timers/sip/info ----------------------------- | Property |Domain|Value| |--------------+------+-----| |find_me |d.408 |5 | ...