README
¶
MX Proxy 2.3
Авторизация
Авторизация пользователя и приложения
Для авторизации используется протокол Resource Owner Password Credentials Grant.
POST /auth HTTP/1.1
Authorization: Basic Y2xpZW50NzY2NDpNbXgwT2xXRURJRGhQR2dHcExRRnhCd3BDU1BwOUlJWQ==
Content-Type: application/x-www-form-urlencoded; charset=utf-8
username=dmitrys%40xyzrd.com&password=78561&grant_type=password
Логин пользователя указывается в username
, пароль - в password
. grant_type
должен содержать строку password
. В заголовке запроса передается HTTP Basic авторизация приложения (client_id
:secret
). Последние должны быть зарегистрированы в конфигурации сервера.
В ответ возвращается токен, который потом используется для обращения к другим функциям API:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: MXProxy/2.0
{
"token_type": "Bearer",
"access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Im92dGU0ZSJ9.eyJleHAiOjE1MDQ2MzI1MzgsImlhdCI6MTUwNDYyODkyOCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMCIsImp0aSI6Ik5acGo2Q1MwIiwic3ViIjoiZG1pdHJ5c0B4eXpyZC5jb20ifQ.zXd9STR6CVuplm8jHoBG2mkB2TUaAdr2QJj_JKItqxbfSVivM5WalWX7Z6SrX_ANtqQSj3bGmW68GGg7_zal0Q",
"expires_in": 3600
}
Токен действителен ограниченное количество времени, которое указывается в expires_in
в секундах.
Авторизация пользователя Azure AD
Для авторизации пользователя Azure AD в заголовке запроса передается токен с идентификатором пользователя:
POST /auth HTTP/1.1
Authorization: Bearer <azure_id_token>
В ответ возвращается токен, который потом используется для обращения к другим функциям API:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: MXProxy/2.0
{
"token_type": "Bearer",
"access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Im92dGU0ZSJ9.eyJleHAiOjE1MDQ2MzI1MzgsImlhdCI6MTUwNDYyODkyOCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMCIsImp0aSI6Ik5acGo2Q1MwIiwic3ViIjoiZG1pdHJ5c0B4eXpyZC5jb20ifQ.zXd9STR6CVuplm8jHoBG2mkB2TUaAdr2QJj_JKItqxbfSVivM5WalWX7Z6SrX_ANtqQSj3bGmW68GGg7_zal0Q",
"expires_in": 3600
}
Токен действителен ограниченное количество времени, которое указывается в expires_in
в секундах.
Информация об авторизованном пользователе MX
GET /auth HTTP/1.1
Authorization: Bearer <token>
Возвращает информацию об авторизованном пользователе:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"mx": "63022",
"ext": "3044",
"jid": "43884851428118509",
"softPhonePwd": "EqNe45DYvZH2va1gesL7AA1ldtP04j4a"
}
Удаление пользователя
DELETE /auth/logout HTTP/1.1
Authorization: Bearer <token>
Останавливает соединение с сервером MX для данного пользователя и удаляет его из списка активных соединений.
Список контактов
GET /contacts HTTP/1.1
Authorization: Bearer <token>
Возвращает список контактов сервера MX. Контакты упорядочены по внутреннему номеру (ext
):
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"contacts": [
{
"jid": "43884852633771555",
"firstName": "SMS",
"lastName": "Gateway C73",
"ext": "3010"
},
{
"jid": "43884851338921185",
"firstName": "mxflex",
"lastName": "mxflex",
"ext": "3042"
},
{
"jid": "43884852654574210",
"firstName": "Ilia",
"lastName": "Test",
"ext": "3043"
},
{
"jid": "43884851428118509",
"firstName": "Peter",
"lastName": "Hyde",
"ext": "3044",
"homePhone": "+1-202-555-0104",
"cellPhone": "+1-512-555-0136",
"email": "peterh@xyzrd.com",
"did": "15125550136"
},
{
"jid": "43884850646482261",
"firstName": "Mike",
"lastName": "Flynn",
"ext": "3055",
"homePhone": "+1-202-555-0104",
"cellPhone": "+1-512-555-0136",
"email": "mikef@xyzrd.com"
},
{
"jid": "43884850557879186",
"firstName": "Test",
"lastName": "One",
"ext": "3080"
},
{
"jid": "43884851776746473",
"firstName": "Test",
"lastName": "Two",
"ext": "3081"
},
{
"jid": "43884852542754454",
"firstName": "Test",
"lastName": "Three",
"ext": "3082"
},
{
"jid": "43884852535898307",
"firstName": "dstest1",
"lastName": "dstest1",
"ext": "3091"
},
{
"jid": "43884850939404214",
"firstName": "dstest2",
"lastName": "dstest2",
"ext": "3092",
"cellPhone": "16693507465",
"did": "16693507465"
},
{
"jid": "43884850647480796",
"firstName": "Test",
"lastName": "Admin",
"ext": "3093"
},
{
"jid": "43884852355777349",
"firstName": "Zultys",
"lastName": "Test",
"ext": "3094"
},
{
"jid": "43884851147406145",
"firstName": "Dmitry",
"lastName": "Sedykh",
"ext": "3095",
"cellPhone": "+79031744445",
"email": "dmitrys@xyzrd.com"
},
{
"jid": "43884851851343044",
"firstName": "Sergey",
"lastName": "Kananykhin",
"ext": "3096"
},
{
"jid": "43884851514905017",
"firstName": "Test",
"lastName": "Zultys",
"ext": "3097"
},
{
"jid": "43884851324615074",
"firstName": "John",
"lastName": "Smith",
"ext": "3098",
"cellPhone": "12035160992",
"did": "12035160992"
},
{
"jid": "43884852031096113",
"firstName": "Maxim",
"lastName": "Donchenko",
"ext": "3099",
"cellPhone": "+420720961083"
}
]
}
У контакта поддерживаются следующие поля: jid
, firstName
, lastName
, ext
, homePhone
, cellPhone
, email
, homeSystem
, did
, exchangeId
. Поля с пустыми значениями могут быть опущены.
Список звонков пользователя
GET /calls?timestamp=1503223469 HTTP/1.1
Authorization: Bearer <token>
Возвращает лог пользовательских звонков, упорядоченный по идентификатору (record_id
). Необязательный параметра в URL timestamp
позволяет задать фильтрацию списка: выводиться будут только те звонки, которые были совершены после указанной даты. timestamp
может быть указан как в числовом виде (1503223469
), так и виде строки (2017-09-03T00:00:00Z
).
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"callLog": [
{
"missed": true,
"direction": "incoming",
"record_id": 973,
"gcid": "63022-00-0000D-3B9",
"connectTimestamp": 1503223469,
"disconnectTimestamp": 1503223472,
"callingPartyNo": "3044",
"originalCalledPartyNo": "3095",
"firstName": "Peter",
"lastName": "Hyde",
"ext": "3044",
"callType": 1,
"legType": 1,
"selfLegType": 9
},
{
"direction": "outgoing",
"record_id": 975,
"gcid": "63022-00-0000D-3BB",
"disconnectTimestamp": 1503258153,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 976,
"gcid": "63022-00-0000D-3BC",
"disconnectTimestamp": 1503264934,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1047,
"gcid": "63022-00-0000D-3F8",
"disconnectTimestamp": 1503472515,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1138,
"gcid": "63022-00-0000D-444",
"disconnectTimestamp": 1503961073,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1139,
"gcid": "63022-00-0000D-445",
"disconnectTimestamp": 1503961572,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1140,
"gcid": "63022-00-0000D-446",
"disconnectTimestamp": 1503961749,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1141,
"gcid": "63022-00-0000D-447",
"disconnectTimestamp": 1503963185,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1142,
"gcid": "63022-00-0000D-448",
"disconnectTimestamp": 1503963904,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1143,
"gcid": "63022-00-0000D-449",
"disconnectTimestamp": 1503964356,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1158,
"gcid": "63022-00-0000D-458",
"disconnectTimestamp": 1504115834,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1159,
"gcid": "63022-00-0000D-459",
"disconnectTimestamp": 1504122163,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1169,
"gcid": "63022-00-0000D-463",
"disconnectTimestamp": 1504189334,
"callingPartyNo": "3095",
"originalCalledPartyNo": "3044",
"firstName": "Peter",
"lastName": "Hyde",
"extension": "3044",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1186,
"gcid": "63022-00-0000D-474",
"disconnectTimestamp": 1504263779,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "+79031744445",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1187,
"gcid": "63022-00-0000D-475",
"disconnectTimestamp": 1504263810,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "+74992549993",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1188,
"gcid": "63022-00-0000D-476",
"disconnectTimestamp": 1504263972,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "+74992549993",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"missed": true,
"direction": "incoming",
"record_id": 1190,
"gcid": "63022-00-0000D-478",
"connectTimestamp": 1504522727,
"disconnectTimestamp": 1504522740,
"callingPartyNo": "3044",
"originalCalledPartyNo": "3095",
"firstName": "Peter",
"lastName": "Hyde",
"ext": "3044",
"callType": 1,
"legType": 1,
"selfLegType": 9
},
{
"direction": "incoming",
"record_id": 1192,
"gcid": "63022-00-0000D-478",
"connectTimestamp": 1504522742,
"disconnectTimestamp": 1504522747,
"callingPartyNo": "3044",
"originalCalledPartyNo": "voicemail.3095",
"firstName": "Peter",
"lastName": "Hyde",
"ext": "3044",
"callType": 1,
"legType": 1,
"selfLegType": 3
},
{
"missed": true,
"direction": "incoming",
"record_id": 1193,
"gcid": "63022-00-0000D-47A",
"connectTimestamp": 1504523032,
"disconnectTimestamp": 1504523045,
"callingPartyNo": "3044",
"originalCalledPartyNo": "3095",
"firstName": "Peter",
"lastName": "Hyde",
"ext": "3044",
"callType": 1,
"legType": 1,
"selfLegType": 9
},
{
"direction": "incoming",
"record_id": 1195,
"gcid": "63022-00-0000D-47A",
"connectTimestamp": 1504523045,
"disconnectTimestamp": 1504523053,
"callingPartyNo": "3044",
"originalCalledPartyNo": "voicemail.3095",
"firstName": "Peter",
"lastName": "Hyde",
"ext": "3044",
"callType": 1,
"legType": 1,
"selfLegType": 3
},
{
"missed": true,
"direction": "incoming",
"record_id": 1207,
"gcid": "63022-00-0000D-486",
"connectTimestamp": 1504524355,
"disconnectTimestamp": 1504524367,
"callingPartyNo": "3044",
"originalCalledPartyNo": "3095",
"firstName": "Peter",
"lastName": "Hyde",
"ext": "3044",
"callType": 1,
"legType": 1,
"selfLegType": 9
},
{
"direction": "incoming",
"record_id": 1209,
"gcid": "63022-00-0000D-486",
"connectTimestamp": 1504524370,
"disconnectTimestamp": 1504524373,
"callingPartyNo": "3044",
"originalCalledPartyNo": "voicemail.3095",
"firstName": "Peter",
"lastName": "Hyde",
"ext": "3044",
"callType": 1,
"legType": 1,
"selfLegType": 3
},
{
"direction": "outgoing",
"record_id": 1286,
"gcid": "63022-00-0000D-4D4",
"disconnectTimestamp": 1504626178,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1287,
"gcid": "63022-00-0000D-4D5",
"disconnectTimestamp": 1504626217,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1289,
"gcid": "63022-00-0000D-4D7",
"disconnectTimestamp": 1504626312,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1295,
"gcid": "63022-00-0000D-4DD",
"disconnectTimestamp": 1504626448,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
},
{
"direction": "outgoing",
"record_id": 1301,
"gcid": "63022-00-0000D-4E3",
"disconnectTimestamp": 1504626848,
"callingPartyNo": "79031744445",
"originalCalledPartyNo": "79031744437",
"callType": 1,
"legType": 1,
"selfLegType": 1
}
]
}
Полный список возможных полей: missed
(bool), direction
, record_id
(number), gcid
, connectTimestamp
(timestamp), disconnectTimestamp
(timestamp), callingPartyNo
, originalCalledPartyNo
, firstName
, lastName
, ext
, serviceName
, serviceExtension
, callType
(number), legType
(number), selfLegType
(number), monitorType
(number). Пустые поля могут быть опущены.
К сожалению, сервер MX не предоставляет возможности определить, что список отдан полностью, поэтому это делается чисто эвристическим способом: обычно ответ разбивается сервером на группы по 21 звонку, поэтому проверяется, что последняя группа содержит меньше 21 звонка. Если вдруг случается, что в последней группе ровно 21 звонок, то ответ придется ждать до окончания таймаута ожидания (2 минуты по умолчанию).
Список сервисов
GET /services HTTP/1.1
Authorization: Bearer <token>
В ответ возвращает список сервисов:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 917
{
"services": [
{
"id": "3502649365667727804",
"name": "TESTIVR",
"type": "AA",
"ext": "3777"
},
{
"id": "3458764515081031672",
"name": "park",
"type": "ParkServer",
"ext": "*77"
},
{
"id": "3458764513956069980",
"name": "voicemail",
"type": "VM",
"ext": "*86"
},
{
"id": "3502649365616396596",
"name": "HoldForPush",
"type": "AA",
"ext": "3799"
},
{
"id": "3458764515541333316",
"name": "bind",
"type": "BindServer",
"ext": "*27"
},
{
"id": "3502649364391454199",
"name": "AAA_1",
"type": "AdvancedACD",
"ext": "3999"
}
]
}
Режим звонков
PATCH /calls HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{"remote":true,"device":"79031744445"}
Устанавливает режим звонков (remote
или local
):
{
"remote": true,
"deviceName": "phone",
"ringDelay": 1,
"vmDelay": 30
}
Опциональные параметры:
ringDelay
- если не указано, то1
vmDelay
- если не указано, то30
В ответ возвращается полный список параметров, использованных при установке режима:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"callMode": {
"remote": true,
"device": "79031744445",
"ringDelay": 1,
"vmDelay": 30
}
}
Назначение устройства для звонка
PATCH /calls/{name} HTTP/1.1
Authorization: Bearer <token>
Серверный звонок
POST /calls HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{"from":"79031744445","to":"79031744437"}
Осуществляет серверный звонок с/на указанный в запросе номер:
{
"from": "79031744445",
"to": "79031744437",
"device": "dmitrys"
}
Опциональные параметры:
- если
device
указан, то происходит вызов назначения устройства.
В ответ возвращается информация о звонке:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"makeCall": {
"callId": 123,
"deviceId": "79031744445",
"calledDevice": "79031744437"
}
}
Перехват звонка для SIP устройства
PUT /calls/123 HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{"device":"sipPhone","timeout":30}
Позволяет перехватить ответ на звонок на SIP устройство:
{
"device": "sipPhone",
"timeout": 30,
"assign": true
}
Опциональные параметры:
timeout
по умолчанию равен30
.- если
assign
указан, то происходит вызов назначения устройства.
В ответ возвращается полный список параметров или ошибка, если не удалось перехватить звонок.
Перенаправление звонка
POST /calls/123 HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{"device":"sipPhone","to":"12345"}
Позволяет перенаправить звонок на другое устройство:
{
"callId": 123,
"device": "sipPhone",
"to": "12345"
}
В ответ возвращается полный список параметров или ошибка с таймаутом.
Сброс звонка
DELETE /calls/123 HTTP/1.1
Authorization: Bearer <token>
Позволяет сбросить звонок.
В ответ возвращается ответ с информацией о сброшенном звонке:
{"connectionCleared": {...}}
Блокировка звонка
PUT /calls/123/hold HTTP/1.1
Authorization: Bearer <token>
Позволяет заблокировать звонок.
В ответ возвращается ответ с информацией о блокированном звонке:
{"held": {...}}
Разблокировка звонка
PUT /calls/123/unhold HTTP/1.1
Authorization: Bearer <token>
Позволяет разблокировать звонок.
В ответ возвращается ответ с информацией о разблокированном звонке:
{"retrieved": {...}}
Информация о звонке
GET /calls/123 HTTP/1.1
Authorization: Bearer <token>
Позволяет получить информацию о звонке.
В ответ возвращается ответ с информацией о звонке:
{"callInfo": {...}}
Если такого звонка не было, он уже отвечен или завершен, то возвращается ошибка 404.
Запись звонка
POST /calls/<id>/record HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{"deviceID":"sipPhone","groupID":"12345"}
Возвращает пустой ответ или ошибку.
Остановка записи звонка
POST /calls/<id>/record/stop HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{"deviceID":"sipPhone","groupID":"12345"}
Возвращает пустой ответ или ошибку.
Список голосовых сообщений пользователя (голосовая почта)
GET /voicemails HTTP/1.1
Authorization: Bearer <token>
В качестве дополнительного параметра в запросе можно указать тип "media" (VoiceMail или Recording):
GET /voicemails?media=VoiceMail
.
Возвращает список голосовых сообщений пользователя, упорядоченных по идентификатору.
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"voiceMails": [
{
"from": "3095",
"fromName": "Dmitry Sedykh",
"to": "3095",
"ownerType": "user",
"id": "82",
"mediaType": "VoiceMail",
"received": 1502213652,
"duration": 29,
"read": true,
"note": "text note"
},
{
"from": "3044",
"fromName": "Peter Hyde",
"callerName": "Peter Hyde",
"to": "3095",
"ownerType": "user",
"id": "117",
"mediaType": "VoiceMail",
"received": 1502565440,
"duration": 7
}
]
}
Поддерживаемые поля: from
, fromName
, callerName
, to
, ownerType
, id
, received
(timestamp), duration
(number), read
(bool), mediaType
, note
. Пустые поля могут быть опущены.
Файл с голосовым сообщением
GET /voicemails/82 HTTP/1.1
Authorization: Bearer <token>
Идентификатор голосового сообщения задается в URL запроса. В ответ возвращается содержимое файла с голосовым сообщением:
HTTP/1.1 200 OK
Content-Disposition: attachment; filename="u00043884851147406145/m0020.wav"
Content-Type: audio/wave
<data>
В качестве дополнительного параметра в запросе можно указать тип "media" (VoiceMail или Recording):
GET /voicemails/<id>?media=Recording
.
Удаление голосового сообщения
DELETE /voicemails/82 HTTP/1.1
Authorization: Bearer <token>
Идентификатор голосового сообщения задается в URL запроса.
В качестве дополнительного параметра в запросе можно указать тип "media" (VoiceMail или Recording):
DELETE /voicemails/<id>?media=VoiceMail
.
Заметки и статус голосового сообщения
PATCH /voicemails/82 HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{"note":"text note"}
Идентификатор голосового сообщения задается в URL запроса.
В качестве дополнительного параметра в запросе можно указать тип "media" (VoiceMail или Recording):
PATCH /voicemails/<id>?media=VoiceMail
.
Задает метку о прочтении и/или комментарий к голосовому сообщению:
{
"note": "text note",
"read": true
}
Параметры:
note
- текст заметкиread
- флаг прочтения
Параметры являются не обязательными, но хотя бы один из них должен быть указан. Если параметр не указан, то значение по умолчанию не используется и данное действие просто не выполняется.
В ответ возвращает список использованных параметров:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"vm": {
"note": "text note"
}
}
Серверная информация о конференция
GET /conferences/info HTTP/1.1
Authorization: Bearer <token>
Возвращает настройки сервера конференций:
{
"conferences": {
"ext": "",
"did": "",
"subject": "Conference Call: %Date% @ %Time% - %Subject%",
"body": "Please join my conference call\n\nSubject: %Subject%\n\nDate: %Date%\nTime: %Time% %Timezone%\nDuration: %Duration%\n\nAt the scheduled date and time please call - %DID%\nInternal participants please call - %Extension%-%ID%\n\nIf prompted, enter the following Conference ID: %ID%, followed by # key.",
"meeting": "View the MXmeeting web conference session at: http://\u003cinsert your domain name here\u003e/join?id=%ID%"
}
}
Список конференций
GET /conferences HTTP/1.1
Authorization: Bearer <token>
Возвращает список зарегистрированных конференций:
{
"conferences": [
{
"Id": "",
"ownerId": 0,
"name": "",
"accessId": 0,
"type": "",
"startDate": 0,
"duration": 0,
"waitForOwner": false,
"delOnOwnerLeave": false,
"ws": "",
"wsType": ""
}
]
}
Удаление конференции
DELETE /conferences/<id> HTTP/1.1
Authorization: Bearer <token>
Создание конференции
POST /conferences HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{
"Id": "",
"ownerId": 43892779647572507,
"name": "Test Conf",
"accessId": 47281964,
"type": "Once",
"startDate": 1516021200,
"duration": 30,
"waitForOwner": false,
"delOnOwnerLeave": false,
"ws": "None",
"wsType": "Undefined"
}
Изменение конференции
PUT /conferences/<id> HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{
"Id": "",
"ownerId": 43892779647572507,
"name": "Test Conf",
"accessId": 47281964,
"type": "Once",
"startDate": 1516021200,
"duration": 30,
"waitForOwner": false,
"delOnOwnerLeave": false,
"ws": "None",
"wsType": "Undefined"
}
Присоединение к конференции
POST /conferences/<id> HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{
"accessId": 47281964,
}
Пока возвращается только ошибка. В случае удачного выполнения команды ответ пустой. В дальнейшем будет расширено.
Создание конференции из звонка
POST /calls/<id>/conference HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json; charset=utf-8
{
"ownerCallId": 43,
}
Пока возвращается только ошибка. В случае удачного выполнения команды ответ пустой. В дальнейшем будет расширено.
Регистрация токена устройства
PUT /tokens/apn/com.connector73.vialer.voip/7C179108B7BF759DED2D9CBED7969DE6623D34E200E46387E7D713917E0F3EB8 HTTP/1.1
Authorization: Bearer <token>
В запроса передаются тип токена (apn
или fcm
), идентификатор приложения или темы для уведомления, а так же сам токен.
Удаление токена устройства
DELETE /tokens/apn/com.connector73.vialer.voip/7C179108B7BF759DED2D9CBED7969DE6623D34E200E46387E7D713917E0F3EB8 HTTP/1.1
Authorization: Bearer <token>
В запроса передаются тип токена (apn
или fcm
), идентификатор приложения или темы для уведомления, а так же сам токен.
Файл конфигурации
provisioning
- задает адрес для авторизации пользователя и получения информации о настройках сервера MX. По умолчанию используется адрес https://config.connector73.net/config, поэтому задавать данное значение имеет смысл только в том случае, если вы хотите его переопределить.apps
- задает список идентификаторов приложенияclient-id
и секретной строкиsecret
для авторизации приложений OAuth2. Раздел является обязательным и не может быть пустым. Подробнее об используемой авторизации приложений смотри Resource Owner Password Credentials Grant.logName
- задает полный путь для доступа к файлу с логом. Если задан, то лог будет доступен по запросуGET /debug/log
.voip
раздел используется для настройки Voice over IP Push:apnTTL
- время жизни пуш-клиентов для APNS, после которого они пересоздаются (для MS Azure); По умолчанию 10 минтут;apn
- список имен файлов с сертификатами для Apple VoIP Push и паролей для их открытия;fcm
- список идентификаторов приложений и ключей для отправки уведомлений через Google Firebase Cloud Messages.
jwt
задает настройки для токенов авторизации:tokenTTL
- задает время валидности токена авторизации. По умолчанию - один час.signKeyTTL
- задает время жизни ключа для подписи токена, после которого ключ автоматически меняется. По умолчанию - 6 часов.
Пример конфигурационного файла:
[apps]
client1 = "client-secret"
[voip]
apnTTL = "3m50s"
[voip.apn]
"certificate.p12" = "password"
[voip.fcm]
"app" = "AAAA0bHpCVQ:APA9...p7Yge"
Административный веб
Административный веб запускается по адресу http://localhost:8043
. Адрес можно переопределить в параметрах запуска.
На нем доступны следующие данные:
GET /apps
- возвращает список идентификаторов зарегистрированных приложенийGET /connections
- возвращает список активных соединений с серверами МХGET /tokens
- возвращает список зарегистрированных токенов устройствGET /users
- возвращает список зарегистрированных пользователейPOST /users
- удаляет пользователя и разрегистрирует его токены; логин пользователя передается в виде значения поля формыlogin
curl localhost:8043/users
{
"users": {
"dmitrys@xyzrd.com": {
"host": "10.0.0.1:7778",
"login": "dmitrys",
"password": "xxxxx"
}
}
}
curl localhost:8043/users -d login=dmitrys@xyzrd.com
{
"userLogout": "dmitrys@xyzrd.com"
}
Documentation
¶
There is no documentation for this package.