Перейти к содержимому страницы
Переключить меню
Переключить меню настроек
Переключить персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.

Управление звонками через API: различия между версиями

Материал из Платформа Эра. Документации
м Исправление орфографии (ссылки и код не затронуты)
 
(не показано 28 промежуточных версий 1 участника)
Строка 4: Строка 4:
Под управлением звонками в рамках данной статьи подразумевается следующий набор функционала:
Под управлением звонками в рамках данной статьи подразумевается следующий набор функционала:


* Получение внешней системой данных о совершаемых звонках
* Получение внешней системой данных о производимых вызовах в реальном времени
* Возможность инициирования нового исходящего звонка
* Возможность инициирования нового исходящего вызова
* Возможность соверешения перевода
* Возможность совершения перевода
* Возможность перевода звонка в конференцию
* Возможность преобразования вызова в конференцию
* Возможность постановки и снятия звонка с удержания
* Возможность постановки и снятия вызова с удержания
* Возможность отправки DTMF-сигналов
* Возможность отправки DTMF-сигналов
* Возможность завершения звонка
* Возможность завершения вызова
* Возможность принятия звонка
* Возможность принятия вызова (подъема трубки)


Кроме этих основных функций, также крайне полезно иметь возможность прослушивания и скачивания записи разговора из внешней системы.
Кроме этих основных функций, также крайне полезно иметь возможность прослушивания и скачивания записи разговора из внешней системы.


В рамках платформы Эра существует три основных подхода к интеграции, позволяющие реализовать описанный функционал:
Основной подход к интеграции внешних систем - комбинирование WebSocket и REST API.


* Интеграция по WebSocket - внешняя система и платформа обмениваются сообщениями в реальном времени
Платформа эра отправляет внешней системе события с помощью WebSocket. Внешняя же система обрабатывает события, и направляет запросы через WebSocket или напрямую в REST API.
* Интеграция методом REST API Long Polling - внешняя система периодически запрашивает данные платформы и отправляет команды в одностороннем порядке
* Интеграция с помощью механизма Webhook - каждая из систем вызывает сервисы другой
<blockquote>При этом внешняя система может использовать комбинированный подход, например получая события из WebSocket, и отправляя команды с помощью REST API.


Последний вариант с Webhook не является штатным решением, однако может быть реализован при помощи инструментов платформы. Наиболее удобным вариантом является разработка собственных сервисов, обрабатывающих события платформы и перенаправляющих их во внешние системы. Разработке на платформе посвещен [[:Категория:Курс Разработка приложений|отдельный курс]].</blockquote>В рамках данной статьи будут рассмотрены интеграционные возможности WebSocket и Long Polling.
Также, возможна интеграция с помощью механизма Webhook - каждая из систем может вызывать сервисы другой, однако такой вариант интеграции является проектным решением и должен реализовываться вручную.


= Интеграция с помощью WebSocket =
В рамках данной статьи будут рассмотрены базовые инструменты интеграции, для реализации проектных решений рекомендуется обратиться к материалам [[:Категория:Курс Разработка приложений|курса по разработке приложений]], в частности к [[Разработка сервисов|разработке сервисов]].
Детальное описание WebSocket API можно найти на [https://vendor.era-platform.ru/docs/era/latest/api/websocket/websocket_api_concepts.html ресурсе Vendor].
 
Интеграция данным способом подразумевает обмен сообщениями между двумя системами.
= Получение событий с помощью WebSocket =
<blockquote>На [https://vendor.era-platform.ru/docs/era/latest/api/websocket/websocket_api_concepts.html ресурсе Vendor] доступно полное описание WebSocket API, которое включает форматы данных, описание настройки прав и доступные виды запросов.</blockquote>Интеграция данным способом подразумевает обмен сообщениями между двумя системами.


В рамках платформы существует два подхода к использования WebSocket API:
В рамках платформы существует два подхода к использования WebSocket API:
Строка 36: Строка 34:
Общий подход интеграции выглядит таким образом:
Общий подход интеграции выглядит таким образом:


* Внешняя система подписывается на события callevents
* Внешняя система подписывается на события callevents и/или ccsevents
* Платформа Эра отправляет подписавшейся системе события звонков
* Платформа Эра отправляет подписавшейся системе события звонков
* Внешняя система получает события, обрабатывает их, отображает результат пользователю (опционально)
* Внешняя система получает события, обрабатывает их, отображает результат пользователю (опционально)
* При необходимости управления звонком, внешняя система отправляет WebSocket-сообщение через REST API к объекту /uc/calls
* При необходимости управления звонком, внешняя система осуществляет вызовы REST API /rest/v1/uc/calls
 
[[Файл:Схема интеграции WebSocket + REST.png|центр|876x876пкс]]
[[Файл:Интеграция звонков через WebSocket.png|центр|безрамки|816x816пкс]]
[[Файл:CallEvents schema.svg|мини|Схема событий звонка|582x582px]]
[[Файл:CallEvents schema.svg|мини|Схема событий звонка]]


=== Получение данных и событий звонков ===
=== Получение данных и событий звонков ===
Получение данных осуществляется при помощи подписки (subscr) на события '''callevents:'''<syntaxhighlight lang="json">
Получение данных осуществляется при помощи подписки ([https://vendor.era-platform.ru/docs/era/latest/api/websocket/user/subscr.html subscr]) на события '''callevents:'''<syntaxhighlight lang="json">
[
[
   "subscribe",
   "subscribe",
Строка 57: Строка 54:
]
]
</syntaxhighlight>Набор объектов (абонентов), по которым будут поступать события зависит от фильтра objects, типа используемого WebSocket API и набора прав учетной записи.  
</syntaxhighlight>Набор объектов (абонентов), по которым будут поступать события зависит от фильтра objects, типа используемого WebSocket API и набора прав учетной записи.  
После подписки, платформа автоматически начнет присылать события, связанные с изменениями звонков - начало и окончание диалога, изменение состояния звонка, переводы, удержания и т.д.


Описание всех событий звонков, их структуры и свойств можно найти на [https://vendor.era-platform.ru/docs/era/latest/events/event_classes/callevents/index.html ресурсе Vendor].  
Описание всех событий звонков, их структуры и свойств можно найти на [https://vendor.era-platform.ru/docs/era/latest/events/event_classes/callevents/index.html ресурсе Vendor].  


Внешняя система должна получать и обрабатывать эти события. В зависимости от бизнес-целей интеграции, данные о звонках и их состояниях могут быть сохранены во внешней системе, выведены пользователю в CTI-панели и т.д.
В следующей таблице описаны '''некоторые''' полезные события, их свойства и примеры, как внешняя система может на них реагировать. Рекомендуется изучить все доступные события и их свойства, так как для разных систем и бизнес-задач может понадобиться разный набор данных. 
{| class="wikitable"
|+События интеграции звонка
!Событие
!Свойства события
!Комментарий
|-
|[https://vendor.era-platform.ru/docs/era/latest/events/event_classes/callevents/invite.html invite]
|
* invitets / invitedt - timestamp или дата-время начала вызова
* cid - идентификатор вызова
* connectionid - идентификатор вызова в формате продуктового слоя
* fromusername - usrname стороны А (From)
* fromouter - является ли сторона А внешним абонентом
* isreferred - является ли звонок переведенным
* callednum - Набранный номер (To)
|Событие поступления вызова (дозвона).
Внешняя система создает звонок с идентификатором=cid, и временем начала звонка=tinvitets.
Направление звонка определяется параметром fromouter.
Пользователю должен быть отображен интерфейс дозвона (входящего или исходящего), а также кнопки управления в зависимости от направления звонка.
|-
|[https://vendor.era-platform.ru/docs/era/latest/events/event_classes/callevents/dlg_start.html dlg_start]
|
* eventts - время начала разговора
* cid - идентификатор вызова
* anumber - номер стороны А
* bnumber - номер стороны Б
* aouter - является ли сторона А внешним абонентом
* bouter - является ли сторона Б внешним абонентом
|Начало диалога, после ответа стороны Б.
Внешняя система обновляет данные звонка по его cid. Начинается диалог с абонентом, соответственно можно запустить таймер диалога, а также обновить доступный набор кнопок управления.
|-
|[https://vendor.era-platform.ru/docs/era/latest/events/event_classes/callevents/dlg_stop.html dlg_stop]
|
* eventts - время завершения разговора
* cid - идентификатор вызова
* stoptype - тип завершения звонка
* stopreason - причина завершения звонка
* stopside - сторона, завершившая звонок
|Завершение диалога одной из сторон.
Внешняя система обновляет данные звонка по его cid, а также завершает звонок в интерфейсе пользователя. Таймер звонка останавливается и пропадает, кнопки управления звонком должны быть недоступны и скрыты.
|-
|[https://vendor.era-platform.ru/docs/era/latest/events/event_classes/callevents/dlg_binding.html dlg_binding]
|
* cid - идентификатор звонка
* dlgbinding - значение привязки (метки)
|К звонку была привязана метка для связи с другой сущностью. Или любое другое действие по изменению состава меток.
Внешняя система может ориентироваться на привязку меток к диалогу для построения связей между несколькими звонками в одной цепочке (например, цепочка переводов одного абонента между разными операторами).
Если у значения метки есть префикс seance_, то значения этого префикса у одной цепочки вызовов будут соблюдать.
Данное событие полезно для улучшения связности звонков во внешней системе и построения статистики.
|-
|[https://vendor.era-platform.ru/docs/era/latest/events/event_classes/callevents/hold.html hold]
|
* cid - идентификатор звонка
* xcallid - идентификатор стороны, установившей hold
|Пользователь поставил вызов на удержание.
Внешняя система должна скрыть кнопку постановки на удержание и отобразить кнопку возврата вызова с удержания
|-
|[https://vendor.era-platform.ru/docs/era/latest/events/event_classes/callevents/unhold.html unhold]
|
* cid - идентификатор звонка
* xcallid - идентификатор стороны, установившей hold
|Пользователь снял вызов с удержания.
Внешняя система должна скрыть кнопку снятия с удержания и отобразить кнопку постановки на удержание
|-
|[https://vendor.era-platform.ru/docs/era/latest/events/event_classes/callevents/referring_invite.html referring_invite]
|
* cid - идентификатор звонка
* referredside - сторона, инициировавшая перевод
* new_cid - cid нового звонка
* new_connid - connectionid нового звонка
|Был совершен перевод.
Внешняя система может скрыть кнопку завершения перевода, или другие кнопки управления звонком.
Для повышения связанности данных, можно сохранить идентификатор следующего звонка в цепочке.
|-
|[https://vendor.era-platform.ru/docs/era/latest/events/event_classes/callevents/records_moved.html records_moved]
|
* cid - идентификатор звонка
* aisrec - Признак записи средствами медиашлюза в домене стороны А.
* bisrec - Признак записи средствами медиашлюза в домене стороны Б.
* areclink - Ключ/ссылка для скачивания записи разговора из хранилища в домене стороны А.
* breclink - Ключ/ссылка для скачивания записи разговора из хранилища в домене стороны Б.
|Запись разговора обработана, перенесена и доступна для загрузки.
Процесс работы с записями разговоров описан в следующем пункте статьи.
|}
=== Получение записей разговоров ===
Процесс загрузки записи разговора внешней системой (или пользователем внешней системы) происходит следующим образом:
# При получении события records_moved внешняя система сохраняет reclink - внутреннюю ссылку на запись разговора
# При необходимости прослушивания или скачивания записи - внешняя система вызывает один из доступных методов генерации внешней ссылки
# Платформа Эра генерирует временную публичную ссылку на запись разговора и передает её внешней системе
# Внешняя система скачивает запись / передает ссылку пользователю для загрузки / активирует плеер для прослушивания
Для генерации внешней ссылки можно использоваться одним из следующих методов:
* [https://vendor.era-platform.ru/docs/era/latest/api/api/admin/callrecords.html REST API /api/admin/v1/callrecords]
* [https://vendor.era-platform.ru/docs/era/latest/api/websocket/token/callrecord.html WebSocket callrecord message]
=== Управление звонками через WebSocket ===
= Работа со звонками через REST API =
[[Файл:REST-Sandbox.png|мини|REST Sandbox]]
Для работы со звонками через REST используется эндпойнт '''/rest/v1/uc/calls'''.
Примеры авторизации и выполнения REST API запросов можно посмотреть в [[Примеры API запросов|данной статье]].
Кроме прямых HTTP-вызовов API, можно также пользоваться возможностью [https://vendor.era-platform.ru/docs/era/latest/api/websocket/user/rest.html отправки REST-запросов через WebSocket].
Эндпойнт uc/calls поддерживает [https://vendor.era-platform.ru/docs/era/latest/api/rest/v1/uc/calls.html следующий набор операций].
Также, полезным инструментом в тестировании REST API будет REST Sandbox, который можно найти в приложении Builder.
=== Управление звонком ===
=== Управление звонком ===
При работе с WebSocket есть два подхода к отправке запросов на управление звонком:
[[Файл:Пример кастомного типа запросов в Postman.png|мини|Пример кастомного типа запросов в Postman]]
Эндпойнт '''/rest/v1/uc/calls''' предоставляет широкий набор методов для управления вызовом.
 
Для некоторых операций используются кастомные типы HTTP-запросов, не входящие в стандартный RFC. Все отладочные утилиты и библиотеки для работы с HTTP поддерживают указание кастомных типов запросов.
 
Далее, приведем сокращенную версию таблицы выше, с комментариями по '''основным''' кейсам управления звонком:
{| class="wikitable"
!HTTP verb
!Endpoint
!Описание
|-
|<code>POST</code>
|<code>/rest/v1/uc/calls</code>
|Инициация нового звонка (POST). Используется для инициирования нового звонка между оператором и абонентом
|-
|<code>INVITEBYIVR</code>
|<code>/rest/v1/uc/calls</code>
|Инициация нового звонка с обслуживанием в IVR (INVITEBYIVR). Используется для инициирования нового звонка между IVR и абонентом
|-
|<code>REFER</code>
|<code>/rest/v1/uc/calls/<id></code>
|Перевод звонка на номер (REFER). Осуществляет "слепой" перевод на указанный номер.
|-
|<code>SWITCHCONF</code>
|<code>/rest/v1/uc/calls/<id></code>
|Преобразование звонка в конференцию (SWITCHCONF). Создает новую конференцию из диалога
|-
|<code>REFERCONF</code>
|<code>/rest/v1/uc/calls/<id></code>
|Перевод звонка в конференцию (REFERCONF). Переводит абонента в указанную конференцию
|-
|<code>NOTIFY</code>
|<code>/rest/v1/uc/calls/<id></code>
|Отправка события управления устройством (NOTIFY). Используется для выполнения операций над звонком, выполняемых с SIP-устройства - поднятие трубки, удержание и т.д.
Поддерживаемый функционал напрямую зависит от производителя и модели конечного устройства.
|-
|<code>SEND_DTMF</code>
|<code>/rest/v1/uc/calls/<id></code>
|Отправка DTMF сигнала в плечо (SEND_DTMF). Позволяет отправлять цифры числового набора
|-
|<code>SETUP_RECORD</code>
|<code>/rest/v1/uc/calls/<id></code>
|Включение/выключение (добавление/удаление) канала записи диалога, а также управление паузой основной записи (SETUP_RECORD)
|-
|<code>SETUP_BINDINGS</code>
|<code>/rest/v1/uc/calls/<id></code>
|Управление метками диалога (SETUP_BINDINGS)
|-
|<code>STOP_HOLD_MELODY</code>
|<code>/rest/v1/uc/calls/<id></code>
|Остановка мелодии ожидания (STOP_HOLD_MELODY)
|-
|<code>DELETE</code>
|<code>/rest/v1/uc/calls/<id></code>
|Завершение звонка (DELETE)
|}
Более полную информацию по доступным методам управления, можно изучить на [https://vendor.era-platform.ru/docs/era/latest/api/rest/v1/uc/calls.html#endpoints ресурсе Vendor].
 
Например, для осуществления исходящего звонка необходимо выполнить следующий запрос:<syntaxhighlight lang="http">
POST /rest/v1/uc/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
}
</syntaxhighlight>


Вызов сервисов
[[Категория:Интеграция с внешними системами]]
[[Категория:Интеграция с внешними системами]]
[[Категория:Практика]]

Текущая версия от 21:21, 27 октября 2026

Общая информация

В рамках данной статьи будет рассмотрены способы интеграции управления звонками из внешней системы (CRM, SD и т.д.).

Под управлением звонками в рамках данной статьи подразумевается следующий набор функционала:

  • Получение внешней системой данных о производимых вызовах в реальном времени
  • Возможность инициирования нового исходящего вызова
  • Возможность совершения перевода
  • Возможность преобразования вызова в конференцию
  • Возможность постановки и снятия вызова с удержания
  • Возможность отправки DTMF-сигналов
  • Возможность завершения вызова
  • Возможность принятия вызова (подъема трубки)

Кроме этих основных функций, также крайне полезно иметь возможность прослушивания и скачивания записи разговора из внешней системы.

Основной подход к интеграции внешних систем - комбинирование WebSocket и REST API.

Платформа эра отправляет внешней системе события с помощью WebSocket. Внешняя же система обрабатывает события, и направляет запросы через WebSocket или напрямую в REST API.

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

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

Получение событий с помощью WebSocket

На ресурсе Vendor доступно полное описание WebSocket API, которое включает форматы данных, описание настройки прав и доступные виды запросов.

Интеграция данным способом подразумевает обмен сообщениями между двумя системами.

В рамках платформы существует два подхода к использования WebSocket API:

  • Token-API - для интеграции server-server. В рамках обмена сообщениями передаются события по всем пользователям
  • User-API - для интеграции client-server. В рамках обмена сообщениями передаются события конкретного пользователя

Набор доступных API также отличается, однако методы и события работы со звонками доступны везде.

Общий подход интеграции выглядит таким образом:

  • Внешняя система подписывается на события callevents и/или ccsevents
  • Платформа Эра отправляет подписавшейся системе события звонков
  • Внешняя система получает события, обрабатывает их, отображает результат пользователю (опционально)
  • При необходимости управления звонком, внешняя система осуществляет вызовы REST API /rest/v1/uc/calls
Схема событий звонка

Получение данных и событий звонков

Получение данных осуществляется при помощи подписки (subscr) на события callevents:

[
  "subscribe",
  {
    "qid": 0.105938272,
    "id": "bcdebcde-bcde-bcde-bcde-bcdebcdebcde",
    "events": ["callevents.*"],
    "objects": ["11"],
    "expires": 300
  }
]

Набор объектов (абонентов), по которым будут поступать события зависит от фильтра objects, типа используемого WebSocket API и набора прав учетной записи.

После подписки, платформа автоматически начнет присылать события, связанные с изменениями звонков - начало и окончание диалога, изменение состояния звонка, переводы, удержания и т.д.

Описание всех событий звонков, их структуры и свойств можно найти на ресурсе Vendor.

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

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

События интеграции звонка
Событие Свойства события Комментарий
invite
  • invitets / invitedt - timestamp или дата-время начала вызова
  • cid - идентификатор вызова
  • connectionid - идентификатор вызова в формате продуктового слоя
  • fromusername - usrname стороны А (From)
  • fromouter - является ли сторона А внешним абонентом
  • isreferred - является ли звонок переведенным
  • callednum - Набранный номер (To)
Событие поступления вызова (дозвона).

Внешняя система создает звонок с идентификатором=cid, и временем начала звонка=tinvitets.

Направление звонка определяется параметром fromouter.

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

dlg_start
  • eventts - время начала разговора
  • cid - идентификатор вызова
  • anumber - номер стороны А
  • bnumber - номер стороны Б
  • aouter - является ли сторона А внешним абонентом
  • bouter - является ли сторона Б внешним абонентом
Начало диалога, после ответа стороны Б.

Внешняя система обновляет данные звонка по его cid. Начинается диалог с абонентом, соответственно можно запустить таймер диалога, а также обновить доступный набор кнопок управления.

dlg_stop
  • eventts - время завершения разговора
  • cid - идентификатор вызова
  • stoptype - тип завершения звонка
  • stopreason - причина завершения звонка
  • stopside - сторона, завершившая звонок
Завершение диалога одной из сторон.

Внешняя система обновляет данные звонка по его cid, а также завершает звонок в интерфейсе пользователя. Таймер звонка останавливается и пропадает, кнопки управления звонком должны быть недоступны и скрыты.

dlg_binding
  • cid - идентификатор звонка
  • dlgbinding - значение привязки (метки)
К звонку была привязана метка для связи с другой сущностью. Или любое другое действие по изменению состава меток.

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

Если у значения метки есть префикс seance_, то значения этого префикса у одной цепочки вызовов будут соблюдать.

Данное событие полезно для улучшения связности звонков во внешней системе и построения статистики.

hold
  • cid - идентификатор звонка
  • xcallid - идентификатор стороны, установившей hold
Пользователь поставил вызов на удержание.

Внешняя система должна скрыть кнопку постановки на удержание и отобразить кнопку возврата вызова с удержания

unhold
  • cid - идентификатор звонка
  • xcallid - идентификатор стороны, установившей hold
Пользователь снял вызов с удержания.

Внешняя система должна скрыть кнопку снятия с удержания и отобразить кнопку постановки на удержание

referring_invite
  • cid - идентификатор звонка
  • referredside - сторона, инициировавшая перевод
  • new_cid - cid нового звонка
  • new_connid - connectionid нового звонка
Был совершен перевод.

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

records_moved
  • cid - идентификатор звонка
  • aisrec - Признак записи средствами медиашлюза в домене стороны А.
  • bisrec - Признак записи средствами медиашлюза в домене стороны Б.
  • areclink - Ключ/ссылка для скачивания записи разговора из хранилища в домене стороны А.
  • breclink - Ключ/ссылка для скачивания записи разговора из хранилища в домене стороны Б.
Запись разговора обработана, перенесена и доступна для загрузки.

Процесс работы с записями разговоров описан в следующем пункте статьи.

Получение записей разговоров

Процесс загрузки записи разговора внешней системой (или пользователем внешней системы) происходит следующим образом:

  1. При получении события records_moved внешняя система сохраняет reclink - внутреннюю ссылку на запись разговора
  2. При необходимости прослушивания или скачивания записи - внешняя система вызывает один из доступных методов генерации внешней ссылки
  3. Платформа Эра генерирует временную публичную ссылку на запись разговора и передает её внешней системе
  4. Внешняя система скачивает запись / передает ссылку пользователю для загрузки / активирует плеер для прослушивания

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

Управление звонками через WebSocket

Работа со звонками через REST API

REST Sandbox

Для работы со звонками через REST используется эндпойнт /rest/v1/uc/calls.

Примеры авторизации и выполнения REST API запросов можно посмотреть в данной статье.

Кроме прямых HTTP-вызовов API, можно также пользоваться возможностью отправки REST-запросов через WebSocket.

Эндпойнт uc/calls поддерживает следующий набор операций.

Также, полезным инструментом в тестировании REST API будет REST Sandbox, который можно найти в приложении Builder.

Управление звонком

Пример кастомного типа запросов в Postman

Эндпойнт /rest/v1/uc/calls предоставляет широкий набор методов для управления вызовом.

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

Далее, приведем сокращенную версию таблицы выше, с комментариями по основным кейсам управления звонком:

HTTP verb Endpoint Описание
POST /rest/v1/uc/calls Инициация нового звонка (POST). Используется для инициирования нового звонка между оператором и абонентом
INVITEBYIVR /rest/v1/uc/calls Инициация нового звонка с обслуживанием в IVR (INVITEBYIVR). Используется для инициирования нового звонка между IVR и абонентом
REFER /rest/v1/uc/calls/<id> Перевод звонка на номер (REFER). Осуществляет "слепой" перевод на указанный номер.
SWITCHCONF /rest/v1/uc/calls/<id> Преобразование звонка в конференцию (SWITCHCONF). Создает новую конференцию из диалога
REFERCONF /rest/v1/uc/calls/<id> Перевод звонка в конференцию (REFERCONF). Переводит абонента в указанную конференцию
NOTIFY /rest/v1/uc/calls/<id> Отправка события управления устройством (NOTIFY). Используется для выполнения операций над звонком, выполняемых с SIP-устройства - поднятие трубки, удержание и т.д.

Поддерживаемый функционал напрямую зависит от производителя и модели конечного устройства.

SEND_DTMF /rest/v1/uc/calls/<id> Отправка DTMF сигнала в плечо (SEND_DTMF). Позволяет отправлять цифры числового набора
SETUP_RECORD /rest/v1/uc/calls/<id> Включение/выключение (добавление/удаление) канала записи диалога, а также управление паузой основной записи (SETUP_RECORD)
SETUP_BINDINGS /rest/v1/uc/calls/<id> Управление метками диалога (SETUP_BINDINGS)
STOP_HOLD_MELODY /rest/v1/uc/calls/<id> Остановка мелодии ожидания (STOP_HOLD_MELODY)
DELETE /rest/v1/uc/calls/<id> Завершение звонка (DELETE)

Более полную информацию по доступным методам управления, можно изучить на ресурсе Vendor.

Например, для осуществления исходящего звонка необходимо выполнить следующий запрос:

POST /rest/v1/uc/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
}