Управление своими звонками (calls)
- Обзор
- Запросы
- Получение списка звонков (GET)
- Инициация нового звонка (POST)
- Инициация нового звонка (INVITE)
- Поиск идентификатора звонка (LOOKUP)
- Получение информации о звонке (GET)
- Перевод звонка на номер (REFER)
- Перевод звонка с подменой (REFERREPLACES)
- Преобразование звонка в конференцию (SWITCHCONF)
- Перевод звонка в конференцию (REFERCONF)
- Отправка события управления устройством одной из сторон (NOTIFY)
- Отправка DTMF-символа одной из сторон (SEND_DTMF)
- Запуск/остановка стенографирования одной из сторон (SETUP_ASR)
- Запуск/остановка (добавление/удаление) канала записи диалога (SETUP_RECORD)
- Управление метками диалога (SETUP_BINDINGS)
- Завершение звонка (DELETE)
- См. также
Обзор
Управляет существующими активными звонками (диалогами B2B) посредством команд API (без использования инициатив со стороны SIP-устройств).
Управлению доступны любые звонки: инициированные как через API, так и с SIP-устройств и сервисов SIP-UA. В отличие от API /rest/v1/uc/calls текущий endpoint предоставляет доступ только к тем диалогам, где одним из участников является учетная запись SIP-пользователя, принадлежащая пользователю, который выполняюет API-запрос.
Обслуживание запросов производится ролью mware.
Для работы требуется наличие роли callstore.
Запросы
HTTP verb | Endpoint | Описание |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Отправка события управления устройством одной из сторон (NOTIFY) |
|
|
|
|
|
Запуск/остановка стенографирования одной из сторон (SETUP_ASR) |
|
|
Запуск/остановка (добавление/удаление) канала записи диалога (SETUP_RECORD) |
|
|
|
|
|
Получение списка звонков (GET)
Возвращает список активных диалогов в пределах текущего домена.
У любого диалога есть две стороны: вызывающая (A
) и вызываемая (B
). Абонентов, представляющих сторону B
, может быть один или несколько в зависимости от состояния диалога.
Диалог относится к домену, если хотя бы один из его абонентов (плеч диалога) принадлежит домену (является учетной записью провайдера, SIP-пользователя, конференцией или сценарием IVR).
Результат выполнения запроса проходит дополнительную фильтрацию. Возвращаются только те диалоги, одним из участников которых является авторизованный пользователь (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Фильтр по значениям полей. |
|
|
Список полей для вывода. Доступные поля для выдачи: |
|
|
Смещение в списке ресурсов, подлежащих выдаче. |
|
|
Максимальное количество ресурсов в списке. |
|
|
Порядок сортировки ресурсов в списке. |
|
|
Преобразование в плоский вид составных полей. |
|
|
Возврат лишь количества элементов. |
GET /rest/v1/user/sip/calls?offset=0&limit=1 HTTP/1.1
Ответ
Возвращает список объектов, каждый из которых представляет собой отдельный диалог. Состав возвращаемых полей ограничен: acallid, callids, dialogid, esgdlg, esgcallid, inviteid, status, legs, localuri, remoteuri, site, startts, uris, opts
.
При указании других полей в параметре mask
они будут проигнорированы.
Поле | Описание |
---|---|
|
Call-Id инициирующей стороны диалога. Содержится в соответствующем заголовке инициирующего SIP-запроса INVITE. |
|
Список всех Call-Id активных участников диалога. Каждая сторона диалога имеет свой Call-Id, каждый вызываемый форк имеет уникальный Call-Id. |
|
Идентификатор активного диалога, применяемый при формировании endpoint. Уникален в рантайме, однако не является глобально уникальным и может повторяться через некоторое время в рамках одной и той же системы. |
|
Идентификатор диалога роли esg. Имеет непустое значение только в том случае, если диалог создан на основании внешнего входящего звонка с учетной записи провайдера. Может использоваться в качестве идентификатора сессии обслуживания внешнего абонента, поскольку в ходе перевода звонка диалог esg не изменяется. |
|
CallId внешнего абонента, скрытый за ролью esg. Имеет непустое значение только в том случае, если диалог создан на основании внешнего входящего звонка с учетной записи провайдера. |
|
Глобально уникальный идентификатор вызова, приводящего к диалогу. Формируется при поступлении в систему SIP-запроса INVITE и существует вплоть до завершения диалога. Присутствует во всех событиях CDR класса callevents. |
|
Генеральное состояние диалога. Варианты значений:
На деле машина состояний диалога имеет гораздо больше состояний, но все они укладываются в генеральные состояния. |
|
Список плеч диалога.
Каждый диалог всегда имеет ровно одного инициатора (вызывающая сторона
В генеральном состоянии
Каждый элемент списка является объектом. |
|
Строковое представление URI из заголовка Формат: |
|
Строковое представление URI из заголовка Формат: |
|
Название сайта, серверы которого обслуживают диалог. |
|
Тайм-штамп времени поступления инициирующего SIP-запроса INVITE в систему. Является представлением момента времени и может быть преобразован к конкретной дате в любом часовом поясе. Например, |
|
Список всех URI, участвующих в звонке. Каждый SIP-пользователь, являющийся абонентом диалога, имеет два URI, один из которых указан через |
|
Объект с дополнительными параметрами диалога. Содержит:
|
Поле | Описание |
---|---|
|
Call-Id плеча. Содержится в соответствующем заголовке SIP-запроса INVITE (полученного или отправленного). |
|
Ограничение времени вызова абонента в миллисекундах. Имеет значение только для плеча стороны |
|
Строковое представление local URI. Для плеча стороны Формат: |
|
Строковое представление remote URI. Для плеча стороны Формат: |
|
Код стороны диалога:
|
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
[
{
"acallid": "3113017065@192.168.0.149",
"callids": [
"rB2-002-484FD3-01-3113017065@192.168.0.149",
"3113017065@192.168.0.149"
],
"dialogid": "rDlg-002-484FD3",
"esgdlg": "",
"esgcallid": "",
"inviteid": "357924f1-0623-b685-c105-b80000000002",
"legs": [
{
"callid": "3113017065@192.168.0.149",
"expirets": "undefined",
"localuri": "<sip:sip3@test.rootdomain.ru>",
"remoteuri": "<sip:sip2@test.rootdomain.ru>",
"side": "a"
},
{
"callid": "rB2-002-484FD3-01-3113017065@192.168.0.149",
"expirets": 30000,
"localuri": "<sip:12@test.rootdomain.ru>",
"remoteuri": "<sip:sip3@test.rootdomain.ru>",
"side": "b"
}
],
"localuri": "<sip:sip3@test.rootdomain.ru>",
"opts": {
"referred-by": "<sip:sip1@test.rootdomain.ru>"
},
"remoteuri": "<sip:sip2@test.rootdomain.ru>",
"site": "SITE1",
"startts": 1571747612067,
"status": "forking",
"uris": [
"<sip:12@test.rootdomain.ru>",
"<sip:sip3@test.rootdomain.ru>",
"<sip:sip3@test.rootdomain.ru>",
"<sip:sip2@test.rootdomain.ru>"
]
}
]
Инициация нового звонка (POST)
Инициирует вызов абонента X (номер в поле from
) в режиме интерком, после ответа производит его перевод (SIP-запрос REFER) на абонента Y (номер в поле to
).
Для инициации режима интерком-вызова в системе должен существовать featurecode соответствующего типа и быть доступен в маршрутизации как минимум для абонентов по направлению к самим себе, а также для абонента 100 (callmanager).
Операция проводится через запуск скрытого служебного сценария, осуществляющего подготовленный дозвон до инициатора
(компонент сценария Исходящий звонок)
с передачей управления специально подготовленному скрытому IVR-сценарию с компонентом Перевод на номер.
В качестве номера для перевода подставляется указанный номер to
.
Схема процесса: IVR→X, IVR REFER Y, X→Y
.
Запрос выполняется асинхронно. Ответ на запрос возвращается в момент, определяемый параметром response_mode
.
Контекст процесса инициации вызова постепенно наполняется данными о звонке по мере его выполнения.
Содержание данных в ответе соответствует моменту его возврата – чем более поздняя точка процесса выбрана, тем больше данных и точнее результат.
События CDR целевого звонка могут быть получены из интерфейса подписки на события системы.
Абонент, от имени которого заказан исходящий звонок, после снятия трубки слышит все сигналы КПВ организованного исходящего вызова.
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы авторизованный пользователь был инициатором нового вызова. То есть указанное значение параметра "from" относилось к авторизованному пользователю (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание | ||
---|---|---|---|---|
|
|
Режим указания стороны X инициатора создаваемого вызова. Возможные варианты:
|
||
|
|
В зависимости от режима ( |
||
|
|
Номер вызываемого абонента Y. Позволяет задавать символы “'” и “,”. Первый такой символ выделяет оставшуюся последовательность в качестве донабора DTMF после получения ответа, а каждый последующий такой символ обеспечивают паузу в 1 секунду в наборе DTMF. |
||
|
|
Номер инициатора первого вызова. Отображается абоненту X. По умолчанию используется значение поля |
||
|
|
Имя инициатора первого вызова. По умолчанию |
||
|
|
Таймаут первого вызова в сеундах. Является ограничением стандартного время вызова. По умолчанию 30 сек. |
||
|
|
Метка, привязываемая к звонку. По умолчанию не назначается. |
||
|
|
Режим возврата ответа. Чем больше значение, тем позже отправляется ответ, и тем больше контекстной информации в ответе содержится. Возможные варианты:
По умолчанию |
||
|
|
Выключатель режима intercom для вызова абонента. По умолчанию выключено.
|
POST /rest/v1/user/sip/calls HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"from": "14",
"to": "16",
"mode": "number",
"callerid": "100",
"callername": "callmanager",
"calltimeout": 30,
"use_intercom": true,
"binding": "sample_binding",
"response_mode": 5
}
Ответ
Поле | Описание |
---|---|
|
Итоговый результат по операции. Варианты значений. |
|
Call-Id инициирующего автоматического звонка IVR→X (отличается от CallId плеч целевого диалога). Присутствует в любом случае. |
|
Call-Id звонка, поступившего в систему от абонента X к абоненту Y после обработки SIP-запроса REFER. Это Call-Id плеча |
|
Response-Line последнего полученного ответа от абонента Y, по результатам которого сформирован ответ на запрос. При некоторых неудачных результатах операции может отсутствовать. |
|
Идентификатор целевого диалога X→Y. При некоторых неудачных результатах операции может отсутствовать. Также может отсутствовать если длительность диалога 0 секунд. |
Значение | Описание |
---|---|
|
Ответ сформирован на этапе, где не выявлено проблем для успешного создания диалога X→Y. Например, для
|
|
Вызов IVR→X завершился неудачей ( В случае, если неудачный ответ получен от абонента X, результат не содержит информации о диалоге X→Y, поля |
|
Вызов IVR→X завершился переадресацией SIP-UA ( Значение является гипотетическим, поскольку обработкой |
|
Вызов IVR→X после предварительного ответа завершился таймаутом. Значение является гипотетическим, поскольку при отсутствии финального ответа сервер (роль b2b), завершает вызов автоматической эмуляцией ответа |
|
Не получен ответ от абонента X, либо другая неожиданная ситуация. В ответе могут отсутствовать поля |
|
Абонент X удачно ответил на вызов IVR→X, состояние вызова X→Y неизвестно из-за отсутствия или неизвестного содержания SIP-запросов NOTIFY в диалоге, обслужившим REFER. |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"result": "ok",
"ivrcallid": "rIV-006-J8zgklJrGuVxZSlo1ZUWOjjJyl1",
"acallid": "3099649154@192.168.0.149",
"dialogid": "rDlg-002-6FpTv2",
"last_response": "SIP/2.0 100 Trying"
}
Поиск идентификатора звонка (LOOKUP)
Производит поиск ресурса (активного диалога) по указанному ключу.
Возвращается список идентификаторов обнаруженных диалогов, подходящих по условиям поиска.
Применение поисковых полей производится по одному в порядке убывания приоритета в приведенной ниже таблице. Поисковые поля содержат в описании "Значение для поиска". Множественный возврат возможен, например, в случае поиска по логину SIP-пользователя, если он участвует в нескольких диалогах.
Результат выполнения запроса проходит дополнительную фильтрацию. Обнаруживаются только те диалоги, одним из участников которых является авторизованный пользователь (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Параметр | Тип | Описание |
---|---|---|
|
|
Значение для поиска. Идентификатор диалога, применяемый при формировании endpoint. Уникален в рантайме, однако не является глобально уникальным и может повторяться через некоторое время в рамках одной и той же системы. Например, |
|
|
Значение для поиска. Глобально уникальный идентификатор вызова, приводящего к диалогу. Формируется при поступлении в систему SIP-запроса INVITE и существует вплоть до завершения диалога. Присутствует во всех событиях CDR класса callevents. Например |
|
|
Значение для поиска. Идентификатор звонка Например, |
|
|
Значение для поиска. SIP URI: |
|
|
Значение для поиска. Номер телефона или логин SIP-пользователя, используемые в качестве Может использовать дополнительный параметр
По умолчанию Обнаруживаются диалоги, где одной из сторон выступает указанный абонент текущего домена.
Поиск производится аналогично |
|
|
Значение для поиска. Идентификатор учетной записи SIP-пользователя. |
|
|
Значение для поиска. Логин учетной записи SIP-пользователя. |
|
|
Значение для поиска. Номер телефона учетной записи SIP-пользователя. |
|
|
Значение для поиска. Идентификатор учетной записи пользователя системы. Если имеет место привязка учетных записей SIP-пользователей к пользователю системы, то обнаруживаются диалоги, где один из этих SIP-пользователей является одним из абонентов. |
LOOKUP /rest/v1/user/sip/calls HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"callid": "rB2-002-XPhrjh-01-3587482024@192.168.0.146"
}
Получение информации о звонке (GET)
Возвращает информацию о диалоге.
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанный диалог имел в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Идентификатор диалога, подлежащего переводу (master). Передается как часть Endpoint URI. |
|
|
Список полей для вывода. |
|
|
Преобразование в плоский вид составных полей. |
GET /rest/v1/user/sip/calls/rDlg-002-484FD3 HTTP/1.1
Ответ
Возвращает объект с представлением диалога.
Поле | Описание |
---|---|
|
Call-Id инициирующей стороны диалога. Содержится в соответствующем заголовке инициирующего SIP-запроса INVITE. |
|
Список всех Call-Id активных участников диалога. Каждая сторона диалога имеет свой Call-Id, каждый вызываемый форк имеет уникальный Call-Id. |
|
Идентификатор активного диалога, применяемый при формировании endpoint. Уникален в рантайме, однако не является глобально уникальным и может повторяться через некоторое время в рамках одной и той же системы. |
|
Идентификатор диалога роли esg. Имеет непустое значение только в том случае, если диалог создан на основании внешнего входящего звонка с учетной записи провайдера. Может использоваться в качестве идентификатора сессии обслуживания внешнего абонента, поскольку в ходе перевода звонка диалог esg не изменяется. |
|
CallId внешнего абонента, скрытый за ролью esg. Имеет непустое значение только в том случае, если диалог создан на основании внешнего входящего звонка с учетной записи провайдера. |
|
Глобально уникальный идентификатор вызова, приводящего к диалогу. Формируется при поступлении в систему SIP-запроса INVITE и существует вплоть до завершения диалога. Присутствует во всех событиях CDR класса callevents. |
|
Генеральное состояние диалога. Варианты значений:
На деле машина состояний диалога имеет гораздо больше состояний, но все они укладываются в генеральные состояния. |
|
Список плеч диалога.
Каждый диалог всегда имеет ровно одного инициатора (вызывающая сторона
В генеральном состоянии
Каждый элемент списка является объектом. |
|
Строковое представление URI из заголовка Формат: |
|
Строковое представление URI из заголовка Формат: |
|
Название сайта, серверы которого обслуживают диалог. |
|
Тайм-штамп времени поступления инициирующего SIP-запроса INVITE в систему. Является представлением момента времени и может быть преобразован к конкретной дате в любом часовом поясе. Например, |
|
Список всех URI, участвующих в звонке. Каждый SIP-пользователь, являющийся абонентом диалога, имеет два URI, один из которых указан через |
|
Объект с дополнительными параметрами диалога. Содержит:
|
Поле | Описание |
---|---|
|
Call-Id плеча. Содержится в соответствующем заголовке SIP-запроса INVITE (полученного или отправленного). |
|
Ограничение времени вызова абонента в миллисекундах. Имеет значение только для плеча стороны |
|
Строковое представление local URI. Для плеча стороны Формат: |
|
Строковое представление remote URI. Для плеча стороны Формат: |
|
Код стороны диалога:
|
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"acallid": "3113017065@192.168.0.149",
"callids": [
"rB2-002-484FD3-01-3113017065@192.168.0.149",
"3113017065@192.168.0.149"
],
"dialogid": "rDlg-002-484FD3",
"esgdlg": "",
"esgcallid": "",
"inviteid": "357924f1-0623-b685-c105-b80000000002",
"legs": [
{
"callid": "3113017065@192.168.0.149",
"expirets": "undefined",
"localuri": "<sip:sip3@test.rootdomain.ru>",
"remoteuri": "<sip:sip2@test.rootdomain.ru>",
"side": "a"
},
{
"callid": "rB2-002-484FD3-01-3113017065@192.168.0.149",
"expirets": 30000,
"localuri": "<sip:12@test.rootdomain.ru>",
"remoteuri": "<sip:sip3@test.rootdomain.ru>",
"side": "b"
}
],
"localuri": "<sip:sip3@test.rootdomain.ru>",
"opts": {
"referred-by": "<sip:sip1@test.rootdomain.ru>"
},
"remoteuri": "<sip:sip2@test.rootdomain.ru>",
"site": "SITE1",
"startts": 1571747612067,
"status": "forking",
"uris": [
"<sip:12@test.rootdomain.ru>",
"<sip:sip3@test.rootdomain.ru>",
"<sip:sip3@test.rootdomain.ru>",
"<sip:sip2@test.rootdomain.ru>"
]
}
Перевод звонка на номер (REFER)
Производит перевод звонка – абонента диалога (оппонента) – на указанный номер.
Действует для любого активного диалога в текущем домене.
Существуют стандартные ограничения при переводе диалога, находящегося в состоянии status=forking
.
Схема процесса: X-Y | IVR→Y, IVR REFER Z, Y→Z
.
Операция проводится через запуск скрытого служебного сценария, осуществляющего подготовленный дозвон до указанного абонента с подменой конкретного указанного диалога
(компонент сценариев Дозвон с установленными заголовками Replaces и Referred-By),
и последующую передачу управления специально подготовленному скрытому IVR сценарию с компонентом Перевод на номер.
В качестве номера для перевода подставляется указанный номер referto
.
В случае неудачи при переводе следующий компонент сценария переводит вызов обратно на номер инициатора перевода.
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанный диалог имел в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Идентификатор диалога, подлежащего переводу. Передается как часть Endpoint URI. |
|
|
Сторона диалога инициирующая перевод звонка. На основании значения вычисляется оппозитная сторона, которую следует перевести. Именно ей отправляется SIP-запрос INVITE с Replaces из IVR и последующий SIP-запрос REFER. |
|
|
Номер, на который осуществляется перевод абонента. Позволяет задавать символы “'” и “,”. Первый такой символ выделяет оставшуюся последовательность в качестве донабора DTMF после получения ответа, а каждый последующий такой символ обеспечивают паузу в 1 секунду в наборе DTMF. |
|
|
Режим возврата ответа. Чем больше значение, тем позже отправляется ответ, и тем больше контекстной информации в ответе содержится. Возможные варианты:
По умолчанию |
|
|
Метка, привязываемая к подменяющему звонку и следом к переводному звонку. По умолчанию не назначается. |
REFER /rest/v1/user/sip/calls/rDlg-002-WOabz0 HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"referto": "13",
"by": "<sip:11@test.rootdomain.ru>",
"response_mode": 3
}
Ответ
Поле | Описание |
---|---|
|
Идентификатор диалога, подлежащего переводу. Совпадает с идентификатором в endpoint или переходит без изменений из параметров запроса. |
|
Итоговый результат по операции. Варианты значений. |
|
Call-Id инициирующего автоматического звонка IVR→Y (отличается от CallId плеч целевого диалога). Присутствует в любом случае. |
|
Call-Id звонка, поступившего в систему от абонента Y к абоненту Z после обработки SIP-запроса REFER. Это Call-Id плеча |
|
Response-Line последнего полученного ответа от абонента Z, по результатам которого сформирован ответ на запрос. При некоторых неудачных результатах операции может отсутствовать. |
|
Идентификатор целевого диалога Y→Z. При некоторых неудачных результатах операции может отсутствовать. Также может отсутствовать если длительность диалога 0 секунд. |
Значение | Описание |
---|---|
|
Ответ сформирован на этапе, где не выявлено проблем для успешного создания диалога Y→Z. Например, для
|
|
Вызов IVR→Y завершился неудачей ( В случае, если неудачный ответ получен от абонента Y, результат не содержит информации о диалоге Y→Z, поля |
|
Вызов IVR→Y завершился переадресацией SIP-UA ( Значение является гипотетическим, поскольку обработкой |
|
Вызов IVR→Y после предварительного ответа завершился таймаутом. Значение является гипотетическим, поскольку при отсутствии финального ответа сервер (роль b2b), завершает вызов автоматической эмуляцией ответа |
|
Не получен ответ от абонента Y, либо другая неожиданная ситуация. В ответе могут отсутствовать поля |
|
Абонент Y удачно ответил на вызов IVR→Y, состояние вызова Y→Z неизвестно из-за отсутствия или неизвестного содержания SIP-запросов NOTIFY в диалоге, обслужившим REFER. |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"dialogid": "rDlg-002-WOabz0",
"result": "ok",
"ivrcallid": "rIV-006-5avZy6B3IC5nivAvVS5B6n4prqT",
"new_acallid": "1920460747@192.168.0.149",
"new_dialogid": "rDlg-002-JKNked",
"new_last_response": "SIP/2.0 180 Ringing"
}
Перевод звонка с подменой (REFERREPLACES)
Производит соединение абонентов двух различных активных диалогов текущего домена.
Абонент соединяет двух своих оппонентов в разных активных диалогах, а сам освобождается в соответствии с протоколом SIP (в частности, SIP-UA, получивший INVITE с Replaces, производит отправку BYE в сторону оппонента в подменяемом диалоге).
Схема процесса в общем виде: X-Y, P-Q | IVR→Y, IVR REFER+REPLACES Q, Y→Q
.
Cхема процесса основного кейса: X-Y, X-Z | IVR→Y, IVR REFER+REPLACES Z, Y→Z
.
Поскольку участвуют два звонка, то название каждого из параметров содержит префикс: "master"
или "slave"
.
Операция проводится через запуск скрытого служебного сценария, осуществляющего подготовленный дозвон до абонента одного диалога с подменой (компонент сценария "Дозвон" с установленными заголовками Replaces и Referred-By), последующей передачей управления специально подготовленному скрытому IVR сценарию с компонентом "Перевод с подменой". В качестве цели для перевода подставляется идентификатор второго указанного диалога (slave).
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанные диалоги имели в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Идентификатор диалога, подлежащего переводу (master). Передается как часть Endpoint URI. |
|
|
Сторона master-диалога инициирующая перевод звонка. На основании значения вычисляется оппозитная сторона, которую следует перевести. Именно ей отправляется SIP-запрос INVITE с Replaces из IVR и последующий SIP-запрос REFER. |
|
|
Идентификатор диалога, подлежащего подмене (slave). Существуют и другие способы указания slave-диалога, альтернативные этому.
Все способы указания диалога перечислены ниже в порядке убывания приоритета с кратким описанием.
Подробно о них см. в параметрах операции поиска звонка с добавлением префикса
|
|
|
Сторона slave-диалога, подлежащая подмене. На основании значения вычисляется оппозитная сторона, у которой следует подменить плечо. Именно на нее нацеливается REFER с Replaces и как следствие ей отправляется SIP-запрос INVITE с Replaces от Y. |
|
|
Режим возврата ответа. Чем больше значение, тем позже отправляется ответ, и тем больше контекстной информации в ответе содержится. Возможные варианты:
По умолчанию |
|
|
Метка, привязываемая к подменяющему звонку и следом к переводному подменяющему звонку. По умолчанию не назначается. |
REFERREPLACES /rest/v1/user/sip/calls/rDlg-002-HKO7cn HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"masterby": "1771996496@192.168.0.147",
"slavedialogid": "rDlg-002-YWR7ts",
"slaveby": "2622745275@192.168.0.149",
"response_mode": 4
}
Ответ
Поле | Описание |
---|---|
|
Идентификатор диалога, подлежащего переводу (master). Совпадает с идентификатором в endpoint или переходит без изменений из параметров запроса. |
|
Идентификатор диалога, подлежащего подмене (slave). Переходит без изменений из параметров запроса. |
|
Итоговый результат по операции. Варианты значений. |
|
Call-Id инициирующего автоматического звонка IVR→Y (отличается от CallId плеч целевого диалога). Присутствует в любом случае. |
|
Call-Id звонка, поступившего в систему от абонента Y к абоненту Z после обработки SIP-запроса REFER. Это Call-Id плеча |
|
Response-Line последнего полученного ответа от абонента Z, по результатам которого сформирован ответ на запрос. При некоторых неудачных результатах операции может отсутствовать. |
|
Идентификатор целевого диалога Y→Z. При некоторых неудачных результатах операции может отсутствовать. Также может отсутствовать если длительность диалога 0 секунд. |
Значение | Описание |
---|---|
|
Ответ сформирован на этапе, где не выявлено проблем для успешного создания диалога Y→Z. Например, для
|
|
Вызов IVR→Y завершился неудачей ( В случае, если неудачный ответ получен от абонента Y, результат не содержит информации о диалоге Y→Q, поля |
|
Вызов IVR→Y завершился переадресацией SIP-UA ( Значение является гипотетическим, поскольку обработкой |
|
Вызов IVR→Y после предварительного ответа завершился таймаутом. Значение является гипотетическим, поскольку при отсутствии финального ответа сервер (роль b2b), завершает вызов автоматической эмуляцией ответа |
|
Не получен ответ от абонента Y, либо другая неожиданная ситуация. В ответе могут отсутствовать поля |
|
Абонент Y удачно ответил на вызов IVR→Y, состояние вызова Y→Q неизвестно из-за отсутствия или неизвестного содержания SIP-запросов NOTIFY в диалоге, обслужившим REFER. |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"masterdialogid": "rDlg-002-HKO7cn",
"slavedialogid": "rDlg-002-YWR7ts",
"result": "ok",
"ivrcallid": "rIV-006-OCXV3CJPkbUUlFx6v8O00kjTm22",
"new_acallid": "3762659316@192.168.0.146",
"new_dialogid": "rDlg-002-RqNtEp",
"new_last_response": "SIP/2.0 200 OK"
}
Преобразование звонка в конференцию (SWITCHCONF)
Производит мягкое переключение обоих абонентов указанного диалога в конференц-комнату. Оба абонентских устройства получают SIP-запросы INVITE с Replaces, соединяются с IVR, которые их переводят на конференц-комнату с помощью SIP-запросов REFER. Абоненты могут находиться в разных доменах. Конференция будет создана в домене, в котором производится API-запрос преобразования (или исполняется сценарий, производящий операцию).
Операция проводится через запуск скрытых служебных сценариев – по одному для каждого из абонентов, осуществляющих подготовленный дозвон до соответствующего абонента диалога
с подменой (компонент сценария Исходящий звонок с установленными заголовками Replaces и Referred-By),
с последующей передачей управления специально подготовленному скрытому IVR-сценарию с компонентом Перевод на номер.
В качестве цели для перевода подставляется номер конференц-комнаты вместе с КАФ (featurecode типа conf
).
Номер для перевода может быть указан в параметре запроса referto
, в противном случае вычисляется автоматически – маршрутизация должна быть настроена.
Схема процесса: X-Y | IVR1→X, IVR2→Y, IVR1 REFER CONF, IVR2 REFER CONF, X→CONF, Y→CONF
.
Параметр запроса by
указывает произвольный username или номер в текущем домене, от имени которого производится перевод обоих абонентов диалога в конференцию.
Фактически необходимо использовать, если маршрутизация особенная, и не для всех открыт доступ к featurecode конференции.
Чтобы при получении одним абонентом INVITE с Replaces другой абонент не отвалился по BYE
(получившая сторона отправляет BYE оппоненту подмененного диалога согласно протоколу SIP, а роль b2b пробрасывает его сквозь себя),
роль b2b получает команду на временную паузу диалога (фактически, блокировка переотправки BYE – вместо этого при получении BYE запускается отложенная асинхронная операция отправки BYE на 3 секунды).
После получения SIP-ответов 2xx
от обоих абонентов на INVITE с Replaces, диалог выводится из паузы.
В нормальной ситуации он к этому времени уже не существует.
В случае неудачи исходный разговор не восстанавливается. Теоретически возможна ситуация, когда одному абоненту удастся дозвониться до конференц-комнаты, а второму нет. В этом случае один получит отбой, а второй окажется в конференции наедине с собой.
Диалог, абонентом которого является конференция (username = "conf-…"
), преобразовывать в конференцию не разрешается
(не связано со сложностями реализации, просто стоит внешнее ограничение, чтобы не повисали пустые конференции, связанные между собой).
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанный диалог имел в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Идентификатор диалога, подлежащего переводу (master). Передается как часть Endpoint URI. |
|
|
Полный номер конференции вместе с префиксом КАФ. Параметр необязательный. При его отсутствии генерируется случайный 8-значный номер конференц-комнаты, а в качестве префикса применяется префикс первого обнаруженного в домене featurecode с типом |
|
|
Номер или username абонента, от имени которого следует осуществлять перевод в конференц-комнату. Параметр необязательный. Значение по умолчанию: Для указанного абонента должен быть доступным маршрут до конференц-комнаты (правила маршрутизации определяются сущностями route и vectorrule). |
|
|
Режим возврата ответа. Чем больше значение, тем позже отправляется ответ, и тем больше контекстной информации в ответе содержится. Возможные варианты:
По умолчанию |
|
|
Метка, привязываемая к подменяющему звонку и следом к переводному звонку. По умолчанию не назначается. |
SWITCHCONF /rest/v1/user/sip/calls/rDlg-002-Maw6qN HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"referto":"*99358",
"by":"sip3",
"response_mode": 4
}
Ответ
Поле | Описание |
---|---|
|
Идентификатор диалога, подлежащего преобразованию в конференцию. Совпадает с идентификатором в endpoint или переходит без изменений из параметров запроса. |
|
Строка с номером, применяемым для перевода на конференцию. Указывает сгенерированный системой полный номер с префиксом, либо указанный в запросе в поле |
|
Итоговый результат по операции. Варианты значений. |
|
Идентификатор конференции, в которую перенаправлены абоненты. |
|
Call-Id инициирующего автоматического звонка IVR1→X (отличается от CallId плеч целевого диалога с конференцией). Присутствует в любом случае. |
|
Call-Id звонка, поступившего в систему от абонента Y к абоненту Z после обработки SIP-запроса REFER. Это Call-Id плеча |
|
Response-Line последнего полученного ответа от абонента Z, по результатам которого сформирован ответ на запрос. При некоторых неудачных результатах операции может отсутствовать. |
|
Идентификатор целевого диалога Y→Z. При некоторых неудачных результатах операции может отсутствовать. Также может отсутствовать если длительность диалога 0 секунд. |
|
Call-Id инициирующего автоматического звонка IVR2→Y (отличается от CallId плеч целевого диалога с конференцией). Присутствует в любом случае. |
|
Call-Id звонка, поступившего в систему от абонента Y к абоненту Z после обработки SIP-запроса REFER. Это Call-Id плеча |
|
Response-Line последнего полученного ответа от абонента Z, по результатам которого сформирован ответ на запрос. При некоторых неудачных результатах операции может отсутствовать. |
|
Идентификатор целевого диалога Y→Z. При некоторых неудачных результатах операции может отсутствовать. Также может отсутствовать если длительность диалога 0 секунд. |
Значение | Описание |
---|---|
|
Ответ сформирован на этапе, где не выявлено проблем для успешного создания диалога Y→Z. Например, для
|
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"dialogid": "rDlg-002-Maw6qN",
"referto": "*99358",
"result": "ok",
"confid": "rCF-005-ZIzwBi",
"x_ivrcallid": "rIV-006-D0qaTIsaTzBoWDHiAYgCIOo7odO",
"x_new_acallid": "27142922@192.168.0.149",
"x_new_dialogid": "rDlg-002-UTx2LP",
"x_new_last_response": "SIP/2.0 200 OK",
"y_ivrcallid": "rIV-006-TTBdJOR0ifh8HYiE9sVwqqJ31HW",
"y_new_acallid": "817803971@192.168.0.147",
"y_new_dialogid": "rDlg-002-XVRAsk",
"y_new_last_response": "SIP/2.0 200 OK"
}
Перевод звонка в конференцию (REFERCONF)
Производит перевод указанного звонка (оппонента в диалоге) на существующую конференцию. Это аналог операции перевод на номер с автоматическим поиском конференции, вычислением и подстановкой номера конференции для маршрутизации.
Операция проводится через запуск скрытого служебного сценария, осуществляющего подготовленный дозвон до указанного абонента с подменой конкретного указанного диалога (компонент сценария "Дозвон" с установленными заголовками Replaces и Referred-By) и последующей передачей управления специально подготовленному скрытому IVR сценарию с компонентом "Перевод на номер". В качестве номера для перевода подставляется номер обнаруженной конференции, как featurecode + confroomnum. В случае неудачи перевода следующий компонент переводит абонента обратно на номер переводившего.
Схема процесса: X→CONF (hold), X→Y | IVR→Y, IVR REFER CONF, Y→CONF
.
Перевод осуществляется в домене конференции. Если вдруг выполнение запроса производится в другом домене относительно конференции, то возвращается ошибка. Это возможно в том случае, если в конференции участвует абонент из другого домена, и указание конференции производится путем ссылки на его диалог.
После успешного завершения операции переводивший абонент X остается в режиме удержания конференции. Для возврата к ней ему требуется снять ее с удержания, пользуясь командами своего SIP-устройства.
Альтернативный данной операции подход – пользоваться методом "Перевод на номер", указывая номер, по которому доступна конкретная конференц-комната.
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанный диалог имел в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Идентификатор диалога, подлежащего переводу в конференцию. Передается как часть Endpoint URI. |
|
|
Сторона диалога, инициирующая перевод звонка в конференцию. На основании значения вычисляется оппозитная сторона, которую следует перевести. Именно ей отправляется SIP-запрос INVITE с Replaces из IVR и последующий SIP-запрос REFER. |
|
|
Идентификатор диалога, одним из участников которого является конференция – назначение перевода. Это один из возможных способов указания конференции, являющейся целью перевода. Существуют и другие способы указания конференции, альтернативные этому.
Все способы указания конференции перечислены ниже в порядке убывания приоритета с кратким описанием.
Подробно о них см. в параметрах операции поиска звонка с добавлением префикса
|
|
|
Режим возврата ответа. Чем больше значение, тем позже отправляется ответ, и тем больше контекстной информации в ответе содержится. Возможные варианты:
По умолчанию |
|
|
Метка, привязываемая к подменяющему звонку и следом к переводному звонку. По умолчанию не назначается. |
REFERCONF /rest/v1/user/sip/calls/rDlg-002-96Ptom HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"by": "2362769183@192.168.0.203",
"referdialogid": "rDlg-002-96Ptom",
"response_mode": 3
}
Ответ
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"dialogid": "rDlg-002-96Ptom",
"result": "ok",
"ivrcallid": "rIV-006-1pq2q9apUWvHHJRXiImXOlPrOOC",
"new_acallid": "1920460747@192.168.0.149",
"new_dialogid": "rDlg-002-Uf38zV",
"new_last_response": "SIP/2.0 180 Ringing"
}
Отправка события управления устройством одной из сторон (NOTIFY)
Реализует софтверное управление устройством абонента по инициативе сервера.
Производит отправку запроса NOTIFY с сообщением о событии на устройство указанного абонента. В частности, это может быть использовано для управления устройством в соответствии с расширением Cisco Broadsoft (https://pubhub.devnetcloud.com/media/broadsoft-docs/docs/pdf/BW-SIPAccessSideExtensionsInterfaceSpec.pdf) В зависимости от типа сообщения устройство может:
-
ответить на звонок (
talk
), -
перейти в режим удержания (
hold
), -
выйти из режима удержания (
talk
), -
объединить удерживаемых абонентов в управляемой телефоном конференции (
conference
) -
прочее
Операция проводится в режиме вызова для вызываемой стороны (talk
), либо в режиме диалога для любой из сторон.
В соответствии с RFC3265 поддерживаемые события перечисляются устройством в заголовке Allow-Events
в запросе INVITE
или в ответе 1xx
/2xx
.
Если устройство не поддерживает расширение, то оно не отправляет соответствующие значения в заголовке, и на этом основании сервер блокирует отправку NOTIFY
-запроса.
Отправка сообщения асинхронная, итоговый результат работы не сообщается. Успешный ответ означает лишь факт отправки запроса.
Сервер не применяет расширения самостоятельно, но предоставляет возможность внешним по отношению к системе образом использовать их функциональность через API и сценарии. Состав поддерживаемых расширений определяется устройством. Качество поддержки расширения устройствами системой не гарантируется. В качестве рекомендации: использовать метод только в опциональном режиме и в случае, когда достоверно известно что все используемые устройства поддерживают метод и не предвидится иное.
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанный диалог имел в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Идентификатор диалога, подлежащего переводу в конференцию. Передается как часть Endpoint URI. |
|
|
Сторона диалога, управление устройством которой производится, |
|
|
Название события для управления устройством ( |
NOTIFY /rest/v1/user/sip/calls/rDlg-002-WOabz0 HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"callid": "4139247432@192.168.0.149",
"event": "talk"
}
Отправка DTMF-символа одной из сторон (SEND_DTMF)
Реализует отправку DTMF символов в указанное плечо указанного диалога. Поддерживается отправка последовательностей. Ответ на запрос поступает сразу, но в плече возникает очередь отправки отдельных символов. Та же очередь используется при поступлении нескольких запросов.
Позволяет задавать последовательность DTMF символов, включающую символы '
и ,
. Каждый такой символ обеспечивают паузу в 1 секунду в наборе DTMF.
В зависимости от указанного протокола (proto
):
* sipinfo
- производит отправку запроса INFO с передачей DTMF символа.
* rfc2833
- производит отправку RTP пакетов согласно протоколу RFC-2833.
Отправка сообщения асинхронная, итоговый результат работы не сообщается. Успешный ответ означает лишь факт отправки запроса или серии RTP-пакетов.
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанный диалог имел в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Идентификатор диалога, подлежащего переводу в конференцию. Передается как часть Endpoint URI. |
|
|
Сторона диалога, в которую необходимо направить DTMF-символ, |
|
|
Альтернативное указание стороны диалога ( |
|
|
Признак взятия другой стороны относительно указанной. |
|
|
Выбор режима отправки DTMF-символа ( |
|
|
DTMF-символ для отправки ( |
SEND_DTMF /rest/v1/user/sip/calls/rDlg-002-WOabz0 HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"dtmf": "2",
"proto": "rfc2833",
"callid": "4139247432@192.168.0.149"
}
Запуск/остановка стенографирования одной из сторон (SETUP_ASR)
Включает/выключает запись и распознавание в текст указанного плеча указанного диалога.
Успешный ответ на операцию включения означает лишь факт отправки запроса или серии RTP-пакетов.
При выключении режима ответ на запрос задерживается на несколько секунд до завершения сессии распознавания.
Для получения событий о результате по мере распознавания можно воспользоваться websocket api.
Режим работает при установленной и настроенной подсистеме стенографирования речи (мастер-домен, settings.record_asr_options)
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанный диалог имел в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Идентификатор диалога, подлежащего переводу в конференцию. Передается как часть Endpoint URI. |
|
|
Операция: |
|
|
Указание уникального имени слоя. Поддерживается одновременно несколько слоев, при указании существующего слоя происходит его замещение. Для того, чтобы остановить запись и распознавание, также требуется указать существующий слой. |
|
|
Сторона диалога, которую необходимо отправить на стенографирование, |
|
|
Альтернативное указание стороны диалога ( |
|
|
Признак взятия другой стороны относительно указанной. |
|
|
Для операции остановки устанавливает режим ожидания и возврата итогового текста. В случае true (по умолчанию) ответ задерживается на 2-3 секунды. |
SETUP_ASR /rest/v1/user/sip/calls/rDlg-002-WOabz0 HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"layer": "default",
"side": "b"
}
Запуск/остановка (добавление/удаление) канала записи диалога (SETUP_RECORD)
Включает/выключает канал записи указанного диалога.
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанный диалог имел в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Идентификатор диалога, подлежащего переводу в конференцию. Передается как часть Endpoint URI. |
|
|
Операция: |
|
|
Указание уникального имени слоя. Поддерживается одновременно несколько слоев, при указании существующего слоя происходит его замещение. Для того, чтобы остановить запись и распознавание, также требуется указать существующий слой. |
|
|
Сторона диалога, которую необходимо поставить на запись, |
|
|
Альтернативное указание стороны диалога ( |
SETUP_RECORD /rest/v1/user/sip/calls/rDlg-002-WOabz0 HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"layer": "default"
}
Управление метками диалога (SETUP_BINDINGS)
Осуществляет управление метками указанного диалога.
Метки диалога - строковые значения, привязанные к конкретным разговорам/диалогам, устанавливаемые через API или сценариями. Метки доступны в любой момент жизненного цикла разговора вплоть до его завершения. Метки сохраняются при переводе звонка и передаются в новый переведенный разговор.
На метках основана привязка к сеансам обслуживания в КЦ (название "seance_…"), а также механизм post call survey (название "PCS:…").
В компоненте сценария Операция управление метками доступно через отдельную группу команд (метки).
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанный диалог имел в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Идентификатор диалога, подлежащего переводу в конференцию. Передается как часть Endpoint URI. |
|
|
Операция:
|
|
|
Указание метки или списка меток. |
SETUP_BINDINGS /rest/v1/user/sip/calls/rDlg-002-WOabz0 HTTP/1.1
Content-Type: application/json; charset=utf-8
{
"command": "add",
"label": ["aaa", "bbb"]
}
Завершение звонка (DELETE)
Завершает диалог. Сервер выступает инициатором разрыва для обоих абонентов (отправляет SIP-запрос BYE обоим абонентам). Если диалог находится в состоянии вызова, то всем вызываемым абонентам отправляется SIP-запрос CANCEL.
В текущей версии завершение носит внешний характер без указания в событиях класса callevents
признака привязки к действиям стороны A или стороны B.
Запрос проходит предварительную фильтрацию. Для допуска к выполнению необходимо, чтобы указанный диалог имел в качестве одного из участников авторизованного пользователя (через любую из принадлежащих ему учетных записей sipuser).
См. также
-
API /rest/v1/uc/calls с доступом к произвольным звонкам домена без ограничений по пользователям.
-
API /rest/v1/uc/conferences_by_participation для управления конференциями домена с участием авторизованного пользователя.
-
Роль b2b.
-
Роль mware.
-
Роль callstore.