3CX API

REST API для 3CX

Наша компания предлагает REST API для 3CX собственной разработки (за ценами обращайтесь по телефону или e-mail). Особенность нашего предложения в том, что набор http-запросов, логика, а также формат ответов могут составляться индивидуально под задачу клиента.

Непосредственно сама компания 3СХ предоставляет программное API, которое работает только на сервере, на котором установлена АТС 3CX. Программное API от 3CX достаточно обширное, и с его помощью можно решать очень широкий круг задач. Наша компания разработала веб-службу, которая запускается на сервере, где установлена 3CX. Эта служба получает http-запросы, отрабатывает их с использованием программного API 3СХ и в формате json предоставляет ответы на полученные http-запросы.

Мы включили в базовую версию нашего REST API наиболее востребованные запросы к 3CX. Но конкретные задачи клиентов могут требовать реализации более специфичных запросов к 3CX. Мы готовы по заявке клиента разработать и внедрить REST API, решающее индивидуальные задачи компании, использующей 3CX.

Вы можете прямо сейчас протестировать команды предлагаемого REST API. Для этого воспользуйтесь демо-ключом qRQi5xQj8SvI и описанием запросов, приведенным ниже. URL запроса: https://demo-pbx.3cx.ru/webapi/qRQi5xQj8SvI/. Для тестирования доступны только команды, которые получают информацию с АТС 3CX. Команды, которые изменяют те или иные параметры в предлагаемом тесте недоступны.

 

Список GET-запросов

Получить текущее количество вызовов, проходящих через АТС
pbx.calls.get

 

Получить подробную информацию обо всех текущих активных соединениях
pbx.ac.get

ответ:
count – суммарное количество активных соединений (вызовов, проходящих через АТС)
AConnByCallID – список активных соединений:

callID – ID звонка
direction – направление вызова. Возможные значения:

    • FromExternal – звонок пришел с внешней линии, но пока еще никуда не распределен
    • FromInternal – звонок пришел c внутреннего номера, но пока еще никуда не распределен
    • Inbound – звонок с внешней линии на внутренний номер
    • Outbound – звонок с внутреннего номера на внешнюю линию
    • External – звонок с внешней линии на внешнюю линию
    • Internal - звонок с внутреннего номера на внутренний

did – для звонка с внешней линии название DID-правила, если таковое есть
AConnList – список составляющих звеньев звонка (см. описание программного API 3CX, ActiveConnection Interface)

 

Получить подробную информацию обо всех текущих звонках. Информация, по сути, близка той, которую предоставляет предыдущая команда pbx.calls.get?key={секретный ключ}, только информация предоставляется несколько в ином срезе и логике.
pbx.callsinfo.get

ответ:
count – суммарное количество звонков
callsInfo – список звонков, проходящих через АТС в данный момент

callID – ID звонка
state – состояние звонка: Unknown, Initiating, Routing, Talking, Transferring, Rerouting
startedAt
– время начала звонка
answeredAt
– время начала разговора (может быть равно null)
did – для звонка с внешней линии название DID-правила, если таковое есть
owner – информация о владельце звонка. Соответствует данным из класса OMCallCollector.ActiveConnectionFields
talkTo – информация с кем разговаривает владелец звонка (если разговаривает), список. Соответствует данным из класса OMCallCollector.ActiveConnectionFields
routingTo – информация на кого направляется вызов (если направляется), список. Соответствует данным из класса OMCallCollector.ActiveConnectionFields

Описание класса OMCallCollector.ActiveConnectionFields смотрите в документации по API 3CX. Также там смотрите описание свойства PhoneSystem.CallStorage, которое является первичным источником всей информации, предоставляемой для реализации данной команды. В архиве с документацией вы найдете примеры на C#, использующие данные сущности.

 

Получить список всех добавочных номеров пользователей
all.ext.get

 

Получить список всех зарегистрированных добавочных номеров пользователей
all.registered.get

 

Получить список всех групп вызова
all.group.get

 

Получить список всех очередей вызова
all.queue.get

 

Получить список всех IVR
all.ivr.get

 

Получить список всех внешних линий (тракнов)
all.line.get

 

Получить список всех групп добавочных номеров
all.extgroup.get

 

Получить информационные поля добавочного номера пользователя
ext.info.get?num={номер добавочного}

 

Получить статусы добавочного номера пользователя
ext.state.get?num={номер добавочного}

ответ:
num - добавочный номер пользователя
registered - зарегистрирован или нет данный добавочный на АТС
status - Free - абонент не находится в разговоре, Busy - абонент в разговоре или ему поступает звонк или совершает звонок
fwdName - текущий статус переадресации
qGlobalStatus - глобальный статус входа/выхода из всех очередей
qStatus - статусы входа/выхода из конкретных очередей (num - номер очереди, status - статус)

 

Получить список всех операторов очереди
queue.members.get?num={номер очереди}

 

Получить список всех менеджеров очереди
queue.managers.get?num={номер очереди}

 

 Получить список всех свободных операторов очереди
queue.free.get?num={номер очереди}

 

Получить список всех операторов очереди, которые находятся в разговоре
queue.talk.get?num={номер очереди}

 

Узнать есть ли хотя бы одни свободный оператор очереди, готовый принять звонок
queue.isfree.get?num={номер очереди}

 

Получить список всех операторов группы вызова
group.members.get?num={номер группы вызова}

 

Получить список всех свободных операторов группы вызова
group.free.get?num={номер группы вызова}

 

Получить список членов группы добавочных номеров
extgroup.members.get?name={имя группы добавочных номеров}

 

Совершить звонок
makecall?first={номер первого плеча вызова}&second={номер второго плеча вызова}

 

У добавочного номера пользователя сменить статус переадресации
ext.fwd.set?num={номер добавочного}&status={название статуса переадресации на английском}&message={сообщение для статуса – необязательный параметр}

ответ: успешно/неуспешно завершилось выполнение команды, команда завершается неуспехом, если переданы некорректные данные (добавочный номер пользователя и/или название статуса)

 

У добавочного номера пользователя установить опцию глобального входа/выхода из всех очередей
ext.queueglobal.set?num={номер добавочного}&log={on/off}

ответ: успешно/неуспешно завершилось выполнение команды
Если за глобальный вход/выход из очередей отвечают статусы переадресации, то результат будет false – вход/выход из очередей не произойдет. В этом случае используйте смену статуса переадресации.

 

Ввести/вывести оператора очереди в конкретную очередь
ext.queue.set?num={номер добавочного}&queue={номер очереди}&log={on/off}

ответ: успешно/неуспешно завершилось выполнение команды. Команда завершается неуспехом, если переданы некорректные данные (добавочный номер пользователя и/или номер очереди)

 

Задать опции добавочного номера пользователя
ext.options.set?num={номер добавочного}&enabled={on/off}&external={on/off} &recording={off/external/all}

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

Значение опций:
enabled – включен или выключен добавочный номер
external – разрешены ли звонки на внешние номера
recording – режим записи разговоров (выключено/только внешние вызовы/все вызовы)

 

Получить список ID контактов из адресной книги 3CX, удовлетворяющих запросу.
contact.find?num={номер телефона}&min_len={длина для сравнения – необязательный}

Сравниваются последние цифры телефонного номера согласно значению min_len:
> длины num – только точное совпадение (в т.ч. и когда параметр не указан)
== длине num или 0 – окончание телефона в базе контактов должно совпадать с num
< длины num – самый длинный совпадающий конец номера >= min_len

 

Получить поля контакта из адресной книги 3CX (имя, фамилия, организация, почта, телефоны).
contact.get?id={id контакта}

 

В адресной книге 3CX по id контакта задать его данные (все поля, кроме id, необязательные).
contact.update?id={обязательный параметр}&firstname={}&lastname={}&company={}&crmcontactdata={}&tag={}&phone={}&data0={}&data1={}&data2={}&data3={}&data4={}&data5={}&data6={}&data7={}&data8={}&data9={}

Соответствие параметров запроса полям в контакте:
phone: Mobile
data0: Mobile2
data1: Home
data2: Home2
data3: Business
data4: Business2
data5: Email
data6: Other
data7: Businessfax
data8: Homefax
data9: Pager

 

Создать новый контакт в адресной книге 3CX.
contact.new

Возвращает id созданного контакта. В качестве необязательных параметров можно передать необязательные поля из команды contact.update.

 

Удалить контакт из адресной книги 3CX.
contact.del?id={id контакта}

 

Задать опции (поля) пользователя (добавочного номера). Все поля, кроме num, необязательные.
ext.update?num={обязательный параметр}&firstname={}&lastname={}&email={}&mobile={}&authid={}&authpass={}&callerid={}& enabled={0/1}&deliveraudio={0/1}&recordcalls={0/1/2}&sipid={}&reinvite={0/1}&replaces={0/1}&vmemail={0/1/2/3}&vmenabled={0/1}&vmpin={}&vmplaycallerid={0/1}&vmplaydatetime={0/1/2}&internal={0/1}&noanswertimeout={}

Комментарии к параметрам запроса:
callerid: исходящий Caller ID
enabled: включен или отключен добавочный номер
deliveraudio: проксировать аудиопоток через АТС
recordcalls: 0 – не записывать звонки, 1 – записывать только внешние, 2 – записывать все
reinvite: поддерживает метод Re-Invite
replaces: поддерживает заголовок 'Replaces'
vmemail: опция голосовой почты: 0 – без уведомления, 1 – текстовое e-mail уведомление, 2 – отправить голосовое сообщение как вложение, 3 – отправить голосовое сообщение как вложение и удалить из ящика
vmenabled: включена или выключена голосовая почта
vmplaycallerid: голосовая почта: воспроизвести Caller ID
vmplaydatetime: 0 – не воспроизводить дату и время, 1 – воспроизводить в формате AM/PM, 2 – воспроизводить в 24-х часовом формате
internal: 0 – разрешены все звонки, 1 – разрешены только внутренние звонки

 

Создать новый добавочный номер (пользователя).
ext.new?num={добавочный номер}

В качестве необязательных параметров можно передать необязательные поля из команды ext.update.

 

Удалить добавочный номер (пользователя).
ext.del?num={добавочный номер}

 

Задать членов группы вызова.
group.members.set?num={номер группы вызова}&members={через запятую список членов группы вызова}

 

Задать агентов очереди вызова.
queue.agents.set?num={номер очереди}&agents={через запятую список агентов очереди}

 

Задать менеджеров очереди вызова.
queue.managers.set?num={номер очереди}&managers={через запятую список менеджеров очереди}

 

Список POST-запросов

Запрос в базу данных 3СХ ‘database_single’.
query

Body (JSON), пример: {"query":"select recording_url, cl_participants_id from recordings where recording_url like '101%';", "count":3}

count – максимальное количество строк в ответе. Если не задано или 0, то равно 100.