Библиотека для API Виртуальной АТС от MANGO OFFICE
Установка
npm install mango-vpbx
Требования
NodeJS версии 8 или более
Уникальный код продукта ВАТС (API KEY)
Код продукта можно задать через переменную process.env.API_KEY
Или передать первый аргумент в конструктор
new VPBX('your-api-key-here', 'your-api-salt');
Уникальный ключ (API SALT)
Уникальный ключ можно задать через переменную process.env.API_SALT
Или передать второй аргумент в конструктор
new VPBX('your-api-key-here', 'your-api-salt');
Пример использования
const VPBX = ;const vpbx = ; { // звонок с внутреннего номера 5000 // на номер 74952129298 const json = from: extension: '5000' to_number: '74952129298' ; const success = await vpbx;};
Пример подключения в typescript
; ;
класс VPBX
Класс для API Виртуальной АТС от MANGO OFFICE
Создание нового экземпляра
const vpbx = apiKey apiSalt;
Параметр | Тип | Описание |
---|---|---|
[apiKey] | string |
Уникальный код вашей АТС |
[apiSalt] | string |
Ключ для создания подписи |
Методы
Список возможных json параметров их значений для вызова API методов доступен в официальной документации
Вызов методов возвращает промис, результат которого объект, содержащий свойства:
Параметр | Тип | Описание |
---|---|---|
success | boolean |
результат |
code | number |
код ответа ВАТС |
message | string |
сообщение |
метод call
Инициирование вызова от имени сотрудника
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
[json.command_id] | string |
идентификатор запроса |
json.from | object |
инициатор вызова |
json.from.extension | string |
добавочный номер сотрудника |
[json.from.number] | string |
номер телефона |
json.to_number | string |
вызываемый номер телефона |
[json.line_number] | string |
номер линии (АОН) |
[json.sip_headers] | object |
заголовки SIP |
[json.sip_headers.answer_after] | string |
автоответ через n секунд |
Пример использования
const json = from: extension: '5000' to_number: '74952129298';const success = await vpbx;
метод callGroup
Инициирование вызова от имени группы
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
[json.command_id] | string |
идентификатор запроса |
json.from | string |
добавочный номер группы |
json.to | string |
вызываемый номер телефона |
[json.line_number] | string |
номер линии (АОН) |
Пример использования
const json = from: '222' to_number: '74991102914' line_number: '74952129298';const success = await vpbx;
метод hangup
Завершение вызова
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
[json.command_id] | string |
идентификатор команды |
json.call_id | string |
идентификатор вызова, который необходимо завершить |
Пример использования
const json = call_id: 'NyAoNDk1KSAyMTItOTItOTgJ';const success = await vpbx;
метод sms
Отправка SMS
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
[json.command_id] | string |
идентификатор команды |
json.text | string |
текст сообщения |
json.from_extension | string |
внутренний номер сотрудника |
json.to_number | string |
номер вызываемого телефона |
[json.sms_sender] | string |
имя отправителя |
Пример использования
const json = from_extension: '5000' to_number: '74952129298' text: 'It works';const success = await vpbx;
метод recordingStart
Включение записи разговора
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
[json.command_id] | string |
идентификатор команды |
json.call_id | string |
идентификатор вызова |
json.call_party_number | string |
номер абонента участвующего в вызове, которого нужно начать записывать. |
Пример использования
const json = call_id: 'NyAoNDk1KSAyMTItOTItOTgJ' call_party_number: '5000';const success = await vpbx;
метод route
Маршрутизация вызова
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
[json.command_id] | string |
идентификатор команды |
json.call_id | string |
идентификатор вызова |
json.to_number | string |
новый номер назначения вызова |
[json.sip_headers] | object |
заголовки SIP |
[json.sip_headers.display_name] | string |
отображаемое имя |
Пример использования
const json = call_id: 'NyAoNDk1KSAyMTItOTItOTgJ' to_number: '101';const success = await vpbx;
метод transfer
Перевод вызова
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
[json.command_id] | string |
идентификатор команды |
json.call_id | string |
идентификатор вызова |
json.method | string |
тип перевода: blind - слепой, hold - консультативный |
json.to_number | string |
номер (цель) перевода |
json.initiator | string |
участник разговора, от имени которого выполняется перевод (например, "from.extension", "from.number", "to.extension", "to.number") |
Пример использования
const json = call_id: 'NyAoNDk1KSAyMTItOTItOTgJ' method: 'blind' to_number: '101' initiator: '5000';const success = await vpbx;
метод stats
Запрос статистики вызовов
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
json.date_from | string |
timestamp начала |
json.date_to | string |
timestamp конца |
[json.fields] | string |
список полей включаемые в выгрузку (через запятую). Возможные значения: "records, start, finish, answer, from_extension, from_number, to_extension, to_number, disconnect_reason, line_number, location, entry_id" |
[json.from] | object |
данные, относящиеся к вызывающему абоненту |
[json.from.extension] | string |
добавочный номер |
[json.from.number] | string |
номер телефона |
[json.to] | object |
данные, относящиеся к вызываемому абоненту |
[json.to.extension] | string |
добавочный номер |
[json.to.number] | string |
номер телефона |
[json.call_party] | object |
данные, относящиеся к вызываемому или вызывающему абоненту. Использование поля допустимо только без заполнения полей to и from |
[json.call_party.extension] | string |
добавочный номер |
[json.call_party.number] | string |
номер телефона |
[json.request_id] | string |
идентификатор запроса |
[json.incoming] | boolean |
фильтр - входящие |
[json.outgoing] | boolean |
фильтр - исходящие |
[json.fail] | boolean |
фильтр - неуспешные |
[json.success] | boolean |
фильтр - успешные |
Пример использования
const json = date_from: '1481630491' date_to: '1481734491';const success stats = await vpbx;
метод recording
Получение записи разговора
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
json.recording_id | string |
идентификатор записи разговора |
[json.folder] | string |
абсолютный путь до папки, для сохранения записи разговора |
[json.expires] | string, date, number |
время жизни ссылки на запись разговора ('MAX' = 1000 лет) |
Для скачивания записи разговора на диск необходимо задать свойство json.folder
Для получения ссылки на запись разговора необходимо задать свойство json.expires
Примеры использования
Скачивание записи разговора
const json = recording_id: 'MToxMjI3NTM6MzUwNzMxMDk4NTow' folder: 'C:/mango-vpbx/downloads/';const success recording = await vpbx;console; // => C:/mango-vpbx/downloads/date_time_name.mp3
Получение ссылки на запись разговора
const json = recording_id: 'MToxMjI3NTM6MzUwNzMxMDk4NTow' expires: 'MAX';const success recording = await vpbx;console; // => https://app.mango-office.ru/vpbx/queries/recording/link/MToxMjI3NTM6MzUwNzMxMDk4NTow/play/4unbf6zukwey1sdbn131nbvc6usianm4/33082514105/01578098d7854d7978773ed13ada3992358e2f09521e2be8726791e53392bd4d
метод users
Запрос списка сотрудников ВАТС
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
[json] | object |
параметры |
[json.extension] | string |
добавочный номер сотрудника |
Пример использования
const success users = await vpbx;
метод dctUserInfo
Запрос информации о посетителе сайта по динамическому номеру
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
json.number | string |
динамический номер |
Пример использования
const json = number: '74952129298' ;const success dctUserInfo = await vpbx;
метод dctUserHistory
Запрос истории навигации посетителя сайта по динамическому номеру
vpbx; // => Promise<any>
Параметр | Тип | Описание |
---|---|---|
json | object |
параметры |
json.number | string |
динамический номер |
Пример использования
const json = number: '74952129298' ;const success dctUserHistory = await vpbx;
API RealTime
API Realtime представляет собой набор запросов (уведомлений), которые направляются к внешней системе.
метод events
Cоздает обработчики для прослушивания событий от ВАТС
vpbx; // => Realtime
Параметр | Тип | Описание |
---|---|---|
url | string | адрес внешней системы |
Пример использования
const app = ;const bodyParser = ; const VPBX = ; const vpbx = ; const events = vpbx; app; app;app;app;app;app;app; events;events;events;events;events;events; events; app;app;
Класс Realtime
Класс для создания обработчиков и получения уведомлений от ВАТС
метод call
Обработчик "Уведомления о вызове"
Realtimecall; // => Function
метод sms
Обработчик "Уведомления о результате смс"
Realtimesms; // => Function
метод recording
Обработчик "Уведомления о записи разговора"
Realtimerecording; // => Function
метод dtmf
Обработчик "Уведомления о нажатиях DTMF клавиш"
Realtimedtmf; // => Function
метод summary
Обработчик "Уведомления о завершении вызова"
Realtimesummary; // => Function
метод ping
Обработчик "Проверить подключение" из Личного кабинета
Realtimeping; // => Function
метод all
Обработчик всех событий (только для метода hear)
Realtimeall; // => Function
метод hear
Слушает события по заданному фильтру
Realtime; // => void
Параметр | Тип | Описание |
---|---|---|
filter | object | фильтр для событий |
handler | function | функция обратного вызова |
Аргумент filter
должен иметь обязательное свойство event
- имя события
(возможные значения: 'call', 'recording', 'summary', 'dtmf', 'sms', 'callback', 'stats', 'ping')
Функция handler
в качестве первого аргумента принимает json-объект, содержащий параметры события (список передаваемых параметров доступен в официальной документации)
Пример использования
const app = ;const bodyParser = ; const VPBX = ; const vpbx = ; const events = vpbx; app; app; events;events; app;app;
Обработчик "уведомления о завершении вызова" будет вызван только для исходящего звонка:
events;
Фильтр может состоять из нескольких параметров:
events;
В параметрах допускаются регулярные выражения:
events;
Отладка
Для логирования запросов необходимо задать переменную process.env.DEBUG=mango-vpbx:worker
Пример лога:
mango-vpbx:worker <- POST https://app.mango-office.ru/vpbx/commands/callback +213ms
mango-vpbx:worker {"vpbx_api_key":"2fn293fg43gfh02h4ub3jd23o312u4bc","sign":"394h39ufhi20jg5gj54j9ug2i0j20j3ig0edjbopeef3ojefrf0e3ie2fjojejf0","json":"{\"from\":{\"extension\":\"5000\",\"number\":\"74991102914\"},\"to_number\":\"74952129298\",\"command_id\":\"cmd-1516131681519\"}"} +1ms
mango-vpbx:worker -> 200 OK +189ms
Для логирования ивентов необходимо задать переменную process.env.DEBUG=mango-vpbx:events
Пример лога:
mango-vpbx:events -> POST /events/call {"vpbx_api_key":"2fn293fg43gfh02h4ub3jd23o312u4bc","sign":"394h39ufhi20jg5gj54j9ug2i0j20j3ig0edjbopeef3ojefrf0e3ie2fjojejf0","json":"{\"entry_id\":\"MzUyODbvczg4OTo0MDE=\",\"call_id\":\"MzUyODbvczg4OTo0MDEMzUyODbvczg4O\",\"timestamp\":1522347638,\"seq\":1,\"call_state\":\"Appeared\",\"location\":\"abonent\",\"from\":{\"number\":\"74991102914\",\"taken_from_call_id\":\"MzUyODbvczg4OMzUyODbvczg4OMzUyODbvcg\"},\"to\":{\"extension\":\"101\",\"number\":\"sip:example@domain.mangosip.ru\",\"line_number\":\"74952129298\",\"acd_group\":\"22\"},\"dct\":{\"type\":0}}"} +0ms
Для логирования запросов и ивентов необходимо задать переменную process.env.DEBUG=mango-vpbx:*