1.6.4 • Published 4 years ago

mango-vpbx v1.6.4

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

npm version Build status branch:master coverage

Библиотека для API Виртуальной АТС от MANGO OFFICE

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 = require('mango-vpbx');
const vpbx = new VPBX();

async function main() {
    // звонок с внутреннего номера 5000 
    // на номер 74952129298
    const json = {
        from: {
            extension: '5000'
        },
        to_number: '74952129298'
    };
    const { success } = await vpbx.call(json);
}
main();

Пример подключения в typescript

    import VPBX from 'mango-vpbx';
    const vpbx = new VPBX();

Все примеры

класс VPBX

Класс для API Виртуальной АТС от MANGO OFFICE Создание нового экземпляра

const vpbx = new VPBX(apiKey, apiSalt);
ПараметрТипОписание
apiKeystringУникальный код вашей АТС
apiSaltstringКлюч для создания подписи

Методы

Список возможных json параметров их значений для вызова API методов доступен в официальной документации

Вызов методов возвращает промис, результат которого объект, содержащий свойства:

ПараметрТипОписание
successbooleanрезультат
codenumberкод ответа ВАТС
messagestringсообщение

метод call

Инициирование вызова от имени сотрудника

vpbx.call(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.command_idstringидентификатор запроса
json.fromobjectинициатор вызова
json.from.extensionstringдобавочный номер сотрудника
json.from.numberstringномер телефона
json.to_numberstringвызываемый номер телефона
json.line_numberstringномер линии (АОН)
json.sip_headersobjectзаголовки SIP
json.sip_headers.answer_afterstringавтоответ через n секунд

Пример использования

const json = {
    from: {
        extension: '5000'
    },
    to_number: '74952129298',
};
const { success } = await vpbx.call(json);

метод callGroup

Инициирование вызова от имени группы

vpbx.callGroup(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.command_idstringидентификатор запроса
json.fromstringдобавочный номер группы
json.tostringвызываемый номер телефона
json.line_numberstringномер линии (АОН)

Пример использования

const json = {
    from: '222',
    to_number: '74991102914',
    line_number: '74952129298'
};
const { success } = await vpbx.callGroup(json);

метод hangup

Завершение вызова

vpbx.hangup(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.command_idstringидентификатор команды
json.call_idstringидентификатор вызова, который необходимо завершить

Пример использования

const json = {
    call_id: 'NyAoNDk1KSAyMTItOTItOTgJ'
};
const { success } = await vpbx.hangup(json);

метод sms

Отправка SMS

vpbx.sms(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.command_idstringидентификатор команды
json.textstringтекст сообщения
json.from_extensionstringвнутренний номер сотрудника
json.to_numberstringномер вызываемого телефона
json.sms_senderstringимя отправителя

Пример использования

const json = {
    from_extension: '5000',
    to_number: '74952129298',
    text: 'It works'
};
const { success } = await vpbx.sms(json);

метод recordingStart

Включение записи разговора

vpbx.recordingStart(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.command_idstringидентификатор команды
json.call_idstringидентификатор вызова
json.call_party_numberstringномер абонента участвующего в вызове, которого нужно начать записывать.

Пример использования

const json = {
    call_id: 'NyAoNDk1KSAyMTItOTItOTgJ',
    call_party_number: '5000',
};
const { success } = await vpbx.recordingStart(json);

метод route

Маршрутизация вызова

vpbx.route(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.command_idstringидентификатор команды
json.call_idstringидентификатор вызова
json.to_numberstringновый номер назначения вызова
json.sip_headersobjectзаголовки SIP
json.sip_headers.display_namestringотображаемое имя

Пример использования

const json = {
    call_id: 'NyAoNDk1KSAyMTItOTItOTgJ',
    to_number: '101'
};
const { success } = await vpbx.route(json);

метод transfer

Перевод вызова

vpbx.transfer(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.command_idstringидентификатор команды
json.call_idstringидентификатор вызова
json.methodstringтип перевода: blind - слепой, hold - консультативный
json.to_numberstringномер (цель) перевода
json.initiatorstringучастник разговора, от имени которого выполняется перевод (например, "from.extension", "from.number", "to.extension", "to.number")

Пример использования

const json = {
    call_id: 'NyAoNDk1KSAyMTItOTItOTgJ',
    method: 'blind',
    to_number: '101',
    initiator: '5000'
};
const { success } = await vpbx.transfer(json);

метод stats

Запрос статистики вызовов

vpbx.stats(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.date_fromstringtimestamp начала
json.date_tostringtimestamp конца
json.fieldsstringсписок полей включаемые в выгрузку (через запятую). Возможные значения: "records, start, finish, answer, from_extension, from_number, to_extension, to_number, disconnect_reason, line_number, location, entry_id"
json.fromobjectданные, относящиеся к вызывающему абоненту
json.from.extensionstringдобавочный номер
json.from.numberstringномер телефона
json.toobjectданные, относящиеся к вызываемому абоненту
json.to.extensionstringдобавочный номер
json.to.numberstringномер телефона
json.call_partyobjectданные, относящиеся к вызываемому или вызывающему абоненту. Использование поля допустимо только без заполнения полей to и from
json.call_party.extensionstringдобавочный номер
json.call_party.numberstringномер телефона
json.request_idstringидентификатор запроса
json.incomingbooleanфильтр - входящие
json.outgoingbooleanфильтр - исходящие
json.failbooleanфильтр - неуспешные
json.successbooleanфильтр - успешные

Пример использования

const json = {
    date_from: '1481630491',
    date_to: '1481734491'
};
const { success, stats } = await vpbx.stats(json);

метод recording

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

vpbx.recording(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.recording_idstringидентификатор записи разговора
json.folderstringабсолютный путь до папки, для сохранения записи разговора
json.expiresstring, date, numberвремя жизни ссылки на запись разговора ('MAX' = 1000 лет)

Для скачивания записи разговора на диск необходимо задать свойство json.folder

Для получения ссылки на запись разговора необходимо задать свойство json.expires

Примеры использования

Скачивание записи разговора

const json = {
    recording_id: 'MToxMjI3NTM6MzUwNzMxMDk4NTow',
    folder: 'C:/mango-vpbx/downloads/'
};
const { success, recording } = await vpbx.recording(json);
console.log(recording); // => C:/mango-vpbx/downloads/date_time_name.mp3

Получение ссылки на запись разговора

const json = {
    recording_id: 'MToxMjI3NTM6MzUwNzMxMDk4NTow',
    expires: 'MAX',
};
const { success, recording } = await vpbx.recording(json);
console.log(recording); // => https://app.mango-office.ru/vpbx/queries/recording/link/MToxMjI3NTM6MzUwNzMxMDk4NTow/play/4unbf6zukwey1sdbn131nbvc6usianm4/33082514105/01578098d7854d7978773ed13ada3992358e2f09521e2be8726791e53392bd4d

метод users

Запрос списка сотрудников ВАТС

vpbx.users(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.extensionstringдобавочный номер сотрудника

Пример использования

const { success, users } = await vpbx.users();

метод dctUserInfo

Запрос информации о посетителе сайта по динамическому номеру

vpbx.dctUserInfo(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.numberstringдинамический номер

Пример использования

const json = { number: '74952129298' };
const { success, dctUserInfo } = await vpbx.dctUserInfo(json);

метод dctUserHistory

Запрос истории навигации посетителя сайта по динамическому номеру

vpbx.dctUserHistory(json); // => Promise<any>
ПараметрТипОписание
jsonobjectпараметры
json.numberstringдинамический номер

Пример использования

const json = { number: '74952129298' };
const { success, dctUserHistory } = await vpbx.dctUserHistory(json);

API RealTime

API Realtime представляет собой набор запросов (уведомлений), которые направляются к внешней системе.

метод events

Cоздает обработчики для прослушивания событий от ВАТС

vpbx.events(url); // => Realtime
ПараметрТипОписание
urlstringадрес внешней системы

Пример использования

const app = require('express')();
const bodyParser = require('body-parser');

const VPBX = require('mango-vpbx');

const vpbx = new VPBX();

const events = vpbx.events('http://example.com/mango-vpbx');

app.use(bodyParser.urlencoded());

app.use(events.call);
app.use(events.summary);
app.use(events.recording);
app.use(events.dtmf);
app.use(events.sms);
app.use(events.ping);


events.on('call', e => console.log('on events/call', e));
events.on('summary', e => console.log('on events/summary', e));
events.on('recording', e => console.log('on events/recording', e));
events.on('dtmf', e => console.log('on events/dtmf', e));
events.on('sms', e => console.log('on events/sms', e));
events.on('ping', e => console.log('check connection', e));

events.on('data', e => console.log('on any events', e));

app.use((req, res) => res.status(404).send({ error: 'not found' }));
app.listen(80);

Класс Realtime

Класс для создания обработчиков и получения уведомлений от ВАТС

метод call

Обработчик "Уведомления о вызове"

Realtime.call; // => Function

метод sms

Обработчик "Уведомления о результате смс"

Realtime.sms; // => Function

метод recording

Обработчик "Уведомления о записи разговора"

Realtime.recording; // => Function

метод dtmf

Обработчик "Уведомления о нажатиях DTMF клавиш"

Realtime.dtmf; // => Function

метод summary

Обработчик "Уведомления о завершении вызова"

Realtime.summary; // => Function

метод ping

Обработчик "Проверить подключение" из Личного кабинета

Realtime.ping; // => Function

метод all

Обработчик всех событий (только для метода hear)

Realtime.all; // => Function

метод hear

Слушает события по заданному фильтру

Realtime.hear(filter, handler); // => void
ПараметрТипОписание
filterobjectфильтр для событий
handlerfunctionфункция обратного вызова

Аргумент filter должен иметь обязательное свойство event - имя события (возможные значения: 'call', 'recording', 'summary', 'dtmf', 'sms', 'callback', 'stats', 'ping')

Функция handler в качестве первого аргумента принимает json-объект, содержащий параметры события (список передаваемых параметров доступен в официальной документации)

Пример использования

const app = require('express')();
const bodyParser = require('body-parser');

const VPBX = require('mango-vpbx');

const vpbx = new VPBX();

const events = vpbx.events('http://example.com/mango-vpbx');

app.use(bodyParser.urlencoded({ extended: false }));

app.use(events.all);

events.hear({ event: 'ping' }, e => console.log('ping works!'));
events.hear({ event: 'call' }, e => console.log('call event', e.location, e.call_state));

app.use((req, res) => res.status(404).send({ error: 'not found' }));
app.listen(80);

Обработчик "уведомления о завершении вызова" будет вызван только для исходящего звонка:

events.hear({ event: 'summary', call_direction: '2' }, e => console.log('завершился исходящий звонок', e.entry_id));

Фильтр может состоять из нескольких параметров:

events.hear({ event: 'recording', recording_state: 'Completed', completion_code: '1000' }, e => console.log('новая запись разговора!', e.recording_id));

В параметрах допускаются регулярные выражения:

events.hear({ event: 'summary', call_direction: /[12]/ }, e => console.log('события завершения входящего/исходящего вызовов', e));

Все примеры

Отладка

Для логирования запросов необходимо задать переменную 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:*

1.6.4

4 years ago

1.6.3

5 years ago

1.6.2

6 years ago

1.6.1

6 years ago

1.6.0

6 years ago

1.5.0

6 years ago

1.4.0

6 years ago

1.3.6

6 years ago

1.3.5

6 years ago

1.3.4

6 years ago

1.3.3

6 years ago

1.3.2

6 years ago

1.3.1

6 years ago

1.3.0

6 years ago

1.2.0

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.0

6 years ago