Код абонентской функциии (featurecode)

Описание

Код абонентской функции (сокр. КАФ) - внутренний телефонный номер, определяющий доступ к различным внутренним сервисным функциям: IVR, конференция, перехват звонка, и т.д.
Является частью процесса маршрутизации звонков, применяется на финальном его этапе. Некоторые КАФ могут перезапускать процесс маршрутизации с измененными параметрами и новыми атрибутами.

Ограничения

  • Коллекция недоступна в мастер-домене.

Поля

Структура сущности
{
  "id": uuid,
  "prefix": str,
  "type": str,
  "extension": str,
  "priority": int,
  "opts": {
    "title": str,
    "comment": str
  },
  "ext": {
    "ct": date,
    "lwt": date
  }
}
Table 1. Поля
Спецификация Описание

Поле: id
Режим: inout
Тип: uuid
По умолчанию: generated

Идентификатор. Может быть задан при создании, иначе генерируется системой.

Поле: prefix
Режим: in
Тип: str
По умолчанию: required

Префикс номера КАФ.
При попадании звонка в КАФ производится поиск всех КАФ, префикс которых соответствует набранному номеру. Если приоритеты этих КАФ совпадают, то применяется КАФ с более длинным префиксом (long-hunting).

Поле: type
Режим: in
Тип: str
По умолчанию: required

Тип кода абонентских функций.
Большинство типов КАФ использует параметры.
Параметр остаток вычисляется как окончание набранного номера после номера КАФ. Например, набран номер 123456, собственный номер КАФ – 123, значит параметр для него - 456.

Поле: extension
Режим: in
Тип: str
По умолчанию: empty

Дополнительный параметр. Для типа ivr – код IVR сценария, для типа hunt – номер hunt применяемый в приоритете перед остатком, для типа replaceнабор дополнительных опций.

Поле: priority
Режим: in
Тип: int
По умолчанию: 1000

Приоритет кода абонентских функций.
Применяется в случае, если номеру соответствуют несколько различных КАФ. Чем меньше значение, тем выше приоритет.

Поле: opts
Режим: in
Тип: object
Составное поле

Поле: opts.title
Режим: in
Тип: str
По умолчанию: empty

Произвольный заголовок

Поле: opts.comment
Режим: in
Тип: str
По умолчанию: empty

Произвольный комментарий

Поле: ext
Режим: inout
Тип: object
Составное поле

Позволяет расширять состав произвольными ключами и значениями

Поле: ext.ct
Режим: out
Тип: date
По умолчанию: generated

Время создания объекта

Поле: ext.lwt
Режим: out
Тип: date
По умолчанию: generated

Время последней модификации объекта

Тип кода абонентских функций

Table 2. Тип кода абонентских функций
Значение Описание

"pickup"

Перехват звонка, поступившего на учетную запись, доступную по указанному номеру.
Номер вычисляется как остаток. Поле 'extension' не применяется.

"grouppickup"

Перехват звонка на основании присутствия вызываемой учетной записи SIP-пользователя и перехватывающей учетной записи SIP-пользователя в одном групповом номере.
Перехвату подлежит любой звонок, находящийся в состоянии вызова абонента, даже если поступил не на групповой номер, а индивидуально.
Ни остаток, ни поле 'extension' не применяются.

"conference"

Маршрутизация на сервис конференций.
Номер конференц-комнаты вычисляется как остаток. Поле 'extension' не применяется.

"ivr"

Маршрутизация на сервис IVR.
Код сценария IVR указывается в поле 'extension' КАФ. Остаток не применяется.

"queue"

Маршрутизация в персональную очередь.
Номер абонента берется как остаток. Поле 'extension' не применяется.

"hunt"

Маршрутизация на сервис hunt-групп и очередей.
Номер hunt-группы ('phonenumber') указывается в поле 'extension' КАФ, если там пусто, то берется как остаток.

"voicemail"

Управление ящиком голосовой почты, прослушивание голосовых сообщений.
Номер голосового ящика вычисляется как остаток. Поле 'extension' не применяется.
Вызов номера без добавления в конец номера ящика не обслуживается сервисом, о чем производится уведомление.

Номер сервиса голосовой почты вместе с номером ящика, добавленным в виде остатка, может быть указан при настройке MWI (Message-waiting indicator) в телефонном аппарате абонента.
В этом случае телефоном будет осуществлена подписка, и сервер будет уведомлять телефон при поступлении новых сообщений в соответствующий голосовой ящик.

Для прослушивания голосовых сообщений необходимо осуществить вызов на сервисный номер управления голосовым ящиком с добавлением в конец номера почтового ящика.
При наличии непрослушанных сообщений начнется их последовательное воспроизведение. После воспроизведения сообщения оно автоматически переводится в категорию прослушанных сообщений.
При остутствии новых сообщений сервис предложит воспроизвести старые (ранее прослушанные) сообщения.
Во время прослушивания сообщений возможно управление сервисом путем отправки DTMF сигналов:
2 - переход к прослушанным сообщениям (только при воспроизведении новых сообщений);
4 - воспроизведение предыдущего сообщения;
5 - повторное воспроизведение текущего сообщения;
6 - переход к следующему сообщению;
8 - удаление текущего сообщения;
9 - очистка ящика (раздельно для новых сообщений и для ранее прослушанных сообщений);
0 - вызвать абонента-отправителя сообщения;
# - переход в начало (при воспроизведении ранее прослушанных сообщений - проверка наличия новых сообщений и переход к их воспроизведению);
* - воспроизведение инструкции по управлению разделом.

Сервис реализован с помощью встроенного скрытого IVR-сценария с преднастроенным кодом voicemail, содержащим компоненты 'Голосовая почта' и 'Воспроизведение'.
Сценарий использует звуковые файлы, размещенные в каталоге :SYNC/common/voicemail.

Сервис может быть кастомизирован путем создания в домене IVR-сценария с кодом voicemail.
Каждый домен использует собственный сценарий, при его отсутствии — сценарий родительского домена или его предков, а при их отсутствии вплоть до мастер-домена - встроенный скрытый сценарий.

Для ограничения доступа к ящикам других пользователей доступны 3 схемы:
* Ограничение правилами маршрутизации звонков, в которых различаются fromnumber и расширение. Примеры настройки для сервисного номера управления почтой '92':
to_number ⇒ '*92{F}' - сопоставление с набираемым номером.
fromnumber ⇒ '{tab:a}', tonumber ⇒ '*92{tab:a}', в таблице 'a' ⇒ /reg/^.
$ - сопоставление частей номеров из двух полей.
* fromnumber ⇒ '{tab:a}', tonumber ⇒ '*92{tab:b}', в таблице 'a' ⇒ /reg/%.$, 'b' ⇒ '/tab/a' - сопоставление частей номеров из двух полей;
* Организация управления ящиками через кастомный сценарий, гибко определяющие фильтры и правила доступа.
* Создание индивидуальных правил маршрутизации на номера ящиков (неоптимально для большого количества ящиков).
В любом случае рекомендуется назначать пользователям голосовые ящики, совпадающими с их личными номерами.

"voicemail_send"

Запись и отправка голосового сообщения.
Номер голосового ящика вычисляется как остаток. Поле 'extension' не применяется.
Вызов номера без добавления в конец номера ящика не обслуживается сервисом, о чем производится уведомление.

Для отправки голосового сообщения необходимо осуществить вызов на сервисный номер отправки голосового сообщения с добавлением в конец номера почтового ящика адресата.
После звукового сигнала продиктовать сообщение. Прервать запись можно отправкой любого DTMF сигнала, либо дождавшись автоматического завершения записи анализатором тишины (3 секунды).

Сервис реализован с помощью встроенного скрытого IVR-сценария с преднастроенным кодом voicemail_send, содержащим компоненты 'Голосовая почта' и 'Воспроизведение'.
Сценарий использует звуковые файлы, размещенные в каталоге :SYNC/common/voicemail.

Сервис может быть кастомизирован путем создания в домене IVR-сценария с кодом voicemail_send.
Каждый домен использует собственный сценарий, при его отсутствии — сценарий родительского домена или его предков, а при их отсутствии вплоть до мастер-домена - встроенный скрытый сценарий.

"parking_put"

Постановка вызова на парковку.
Номер парковочного места вычисляется как остаток. Поле 'extension' не применяется.
Если номер парковочного места не передан в виде остатка номера, либо парковочное место занято, то сервис предлагает ввести номер парковочного места с помощью DTMF.

Для постановки абонента на парковку необходимо поставить звонок на удержание и осуществить вызов на сервисный номер постановки на парковку с добавлением в конец номера парковочного места.
Дождаться подтверждения, что вызов размещен на парковке, после чего осуществить перевод подменой.

Сервис реализован с помощью встроенных скрытых IVR-сценариев с преднастроенными кодами parking_put и parking_wait, содержащим компоненты 'Парковка' и 'Воспроизведение'.
Сценарий 'parking_put' осуществляет определение номера парковочного места и размещает вызов на парковке, после чего передеает управление сценарию parking_wait, который воспроизводит мелодию ожидания.
Сценарии используют звуковые файлы, размещенные в каталоге :SYNC/common/parking.

Сервис может быть кастомизирован путем создания в домене IVR-сценария с соответствующим кодом.
Так, для замены мелодии ожидания достаточно создать в домене IVR-сценарий с кодом parking_wait.
Каждый домен использует собственный сценарий, при его отсутствии — сценарий родительского домена или его предков, а при их отсутствии вплоть до мастер-домена - встроенный скрытый сценарий.

"parking_get"

Взятие вызова с парковки.
Номер парковочного места вычисляется как остаток. Поле 'extension' не применяется.
Если номер парковочного места не передан в виде остатка номера, либо парковочное место занято, то сервис предлагает ввести номер парковочного места с помощью DTMF.

Для взятия абонента с парковки необходимо вызвать сервисный номер взятия с парковки с добавлением в конец номера парковочного места.
В случае успешного обнаружения ожидающего на парковке звонка произойдет автоматический перевод вызова на ожидающего абонента.

Сервис реализован с помощью встроенного скрытого IVR-сценария с преднастроенным кодом parking_get.
Сценарии используют звуковые файлы, размещенные в каталоге :SYNC/common/parking.

Сервис может быть кастомизирован путем создания в домене IVR-сценария с кодом parking_get.
Каждый домен использует собственный сценарий, при его отсутствии — сценарий родительского домена или его предков, а при их отсутствии вплоть до мастер-домена - встроенный скрытый сценарий.

"intercom"

Вызов абонента в режиме интерком (задача #127).
Целевой номер берется из поля 'extension', а если там нет, то вычисляется как остаток. Далее инициируется новая итерация маршрутизации.
В режиме интеркома разрешаются только звонки по правилам с action = inside и insidepbx.
При попадании на переадресацию вызов сразу блокируется, чтобы исключить неожиданности.

"barge"

Вторжение к занятому абоненту (задача #141).
Целевой номер берется из поля 'extension', а если там нет, то вычисляется как остаток. Далее инициируется новая итерация маршрутизации.
В случае, если целевой абонент находится в состоянии разговора, происходит интерком-вызов (как следствие с автоматической постановкой текущего разговора на удержание), а если целевой абонент свободен, то происходит обычный вызов.

"callwaiting"

Маршрутизация на персональный номер абонента без применения его ограничения на количество одновременных вызовов.
Номер абонента берется как остаток. Поле 'extension' не применяется.

"replace"

Подмена плеча (задача #163).
Инициирует маршрутизацию на указанный номер с добавлением заголовка Replaces в INVITE с целью подмены.
Поле 'extension' содержит перечисление через запятую стратегий обнаружения подменяемого звонка и плеча:
* num - поиск диалога производится по номеру абонента как один из активных разговоров абонента. Номер берется как остаток (расширение). По номеру вычисляется учетная запись абонента (через маршрутизацию без переадресаций), для абонента обнаруживается активный разговор.
* callid - поиск диалога производится по callid активного звонка/плеча (альтернатива поиска по номеру). Значение callid может быть указано в качестве расширения номера (в т.ч. в кодировке base64), либо в заголовке Replaces или X-Era-Dest-Call-Id.
* base64 - значение CallID указано в кодировке base64.
* opposite - в качестве подменяемого принимается другое плечо обнаруженного диалога, а не указанный абонент/плечо.
* allsites - поиск разговора проводится на всех сайтах системы. Иначе только на текущем сайте.

"monitor"

Подслушивание. Подключение к существующему разговору в режиме подслушивания - инициатор слышит обоих абонентов, а его не слышит никто из участников разговора.
Все подключенные к прослушиванию одного разговора абоненты слышат друг друга. Также они слышат мелодии ожидания исходного разговора.
Поле 'extension' содержит перечисление через запятую стратегий обнаружения подменяемого звонка и плеча:
* num - поиск диалога производится по номеру абонента как один из активных разговоров абонента. Номер берется как остаток (расширение). По номеру вычисляется учетная запись абонента (через маршрутизацию без переадресаций), для абонента обнаруживается активный разговор.
* callid - поиск диалога производится по callid активного звонка/плеча (альтернатива поиска по номеру). Значение callid может быть указано в качестве расширения номера (в т.ч. в кодировке base64), либо в заголовке X-Era-Dest-Call-Id`.
* base64 - значение CallID указано в кодировке base64.
* allsites - поиск разговора проводится на всех сайтах системы. Иначе только на текущем сайте.
ВАЖНО! Возможность подключения к разговору определяется таблицей маршрутизации: доступ к номеру абонентской функции. Доступность номера абонента для звонка не является критерием наличия права на подключение.

"prompt"

Суфлер. Подключение к существующему разговору в режиме суфлирования - инициатор слышит обоих абонентов, а его слышит только один из участников разговора (суфлируемый).
Все подключенные к прослушиванию одного разговора абоненты слышат друг друга. Также они слышат мелодии ожидания исходного разговора.
Поле 'extension' содержит перечисление через запятую стратегий обнаружения подменяемого звонка и плеча:
* num - поиск диалога производится по номеру абонента как один из активных разговоров абонента. Номер берется как остаток (расширение). По номеру вычисляется учетная запись абонента (через маршрутизацию без переадресаций), для абонента обнаруживается активный разговор.
* callid - поиск диалога производится по callid активного звонка/плеча (альтернатива поиска по номеру). Значение callid может быть указано в качестве расширения номера (в т.ч. в кодировке base64), либо в заголовке X-Era-Dest-Call-Id.
* base64 - значение CallID указано в кодировке base64.
* opposite - в качестве суфлируемого абонента принимается другое плечо обнаруженного диалога, а не указанный абонент/плечо.
* allsites - поиск разговора проводится на всех сайтах системы. Иначе только на текущем сайте.
ВАЖНО! Возможность подключения к разговору определяется таблицей маршрутизации: доступ к номеру абонентской функции. Доступность номера абонента для звонка не является критерием наличия права на подключение.

"mesh"

Подключение к существующему разговору в режиме подслушивания - инициатор слышит обоих абонентов, и его слышат оба участника разговора.
Все подключенные к прослушиванию одного разговора абоненты слышат друг друга. Также они слышат мелодии ожидания исходного разговора.
Поле 'extension' содержит перечисление через запятую стратегий обнаружения подменяемого звонка и плеча:
* num - поиск диалога производится по номеру абонента как один из активных разговоров абонента. Номер берется как остаток (расширение). По номеру вычисляется учетная запись абонента (через маршрутизацию без переадресаций), для абонента обнаруживается активный разговор.
* callid - поиск диалога производится по callid активного звонка/плеча (альтернатива поиска по номеру). Значение callid может быть указано в качестве расширения номера (в т.ч. в кодировке base64), либо в заголовке X-Era-Dest-Call-Id.
* base64 - значение CallID указано в кодировке base64.
* allsites - поиск разговора проводится на всех сайтах системы. Иначе только на текущем сайте.
ВАЖНО! Возможность подключения к разговору определяется таблицей маршрутизации: доступ к номеру абонентской функции. Доступность номера абонента для звонка не является критерием наличия права на подключение.

"fax_to_email"

Получение факса и отправка на электронную почту.
Фактически маршрутизация на сервис приема факса и отправки файла на электронную почту, реализованный в IVR, который может быть заменен внутри домена.
Список почтовых ящиков получателей и параметры отправителя указываются в настройках домена в параметре fax_to_email.

Набор дополнительных опций для КАФ типа 'replace'

Table 3. Набор дополнительных опций для КАФ типа 'replace'
Значение Описание

"num"

Диалог обнаруживается по абоненту, которому принадлежит набранный номер

"callid"

Диалог обнаруживается по CallId, который вычисляется аналогично номеру как остаток после вырезания номера КАФ. Если указанное значение пусто, то анализируется содержимое заголовка X-R-Replaces-Call-Id запроса INVITE.

"opposite"

Признак подмены противоположного плеча относительно найденного по указанному номеру/CallId

"allsites"

Признак поиска звонка на всех сайтах

"base64"

Признак кодировки CallId из username в Base64

См. также

Логические роли

  • b2b проводит маршрутизацию и применение КАФ.

  • mdc и sdc производит поиск КАФ.