{"id":20992472,"url":"https://github.com/bobrovskih/mango-vpbx","last_synced_at":"2025-05-14T20:32:59.276Z","repository":{"id":38985109,"uuid":"115138932","full_name":"Bobrovskih/mango-vpbx","owner":"Bobrovskih","description":"NodeJS SDK for API VPBX by MANGO OFFICE","archived":false,"fork":false,"pushed_at":"2023-01-05T11:20:55.000Z","size":517,"stargazers_count":9,"open_issues_count":4,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-31T17:46:52.409Z","etag":null,"topics":["api","mango","mangotelecom","nodejs","office","sdk","sip","voip","vpbx"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/mango-vpbx","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Bobrovskih.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-12-22T18:02:37.000Z","updated_at":"2024-07-01T08:53:38.000Z","dependencies_parsed_at":"2023-02-04T03:04:02.641Z","dependency_job_id":null,"html_url":"https://github.com/Bobrovskih/mango-vpbx","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bobrovskih%2Fmango-vpbx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bobrovskih%2Fmango-vpbx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bobrovskih%2Fmango-vpbx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bobrovskih%2Fmango-vpbx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Bobrovskih","download_url":"https://codeload.github.com/Bobrovskih/mango-vpbx/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225310090,"owners_count":17454089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","mango","mangotelecom","nodejs","office","sdk","sip","voip","vpbx"],"created_at":"2024-11-19T07:11:22.284Z","updated_at":"2024-11-19T07:11:22.965Z","avatar_url":"https://github.com/Bobrovskih.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n [![npm version](https://badge.fury.io/js/mango-vpbx.svg)](https://www.npmjs.com/package/mango-vpbx) [![Build status branch:master](https://travis-ci.org/Bobrovskih/mango-vpbx.svg?branch=master)](https://travis-ci.org/Bobrovskih/mango-vpbx)\n [![coverage](https://codecov.io/gh/Bobrovskih/mango-vpbx/branch/master/graph/badge.svg)](https://codecov.io/gh/Bobrovskih/mango-vpbx)\n \n## Библиотека для API Виртуальной АТС от MANGO OFFICE\n\n[![API Виртуальной АТС от MANGO OFFICE](https://www.mango-office.ru/upload/iblock/d11/api-icon.png \"API Виртуальной АТС от MANGO OFFICE\")](https://www.mango-office.ru/support/virtualnaya_ats/integratsiya_api/obshchie_voprosy_po_api_vats_mango_office/ \"API Виртуальной АТС от MANGO OFFICE\")\n### Установка\n`npm install mango-vpbx`\n\n\n### Требования\nNodeJS версии 8 или более\n\n### Уникальный код продукта ВАТС (API KEY)\nКод продукта можно задать через переменную `process.env.API_KEY`\u003c/br\u003e\nИли передать первый аргумент в конструктор \n`new VPBX('your-api-key-here', 'your-api-salt');`\n\n### Уникальный ключ (API SALT)\nУникальный ключ можно задать через переменную `process.env.API_SALT`\u003c/br\u003e\nИли передать второй аргумент в конструктор \n`new VPBX('your-api-key-here', 'your-api-salt');`\n\n### Пример использования\n\n```javascript\nconst VPBX = require('mango-vpbx');\nconst vpbx = new VPBX();\n\nasync function main() {\n    // звонок с внутреннего номера 5000 \n    // на номер 74952129298\n    const json = {\n        from: {\n            extension: '5000'\n        },\n        to_number: '74952129298'\n    };\n    const { success } = await vpbx.call(json);\n}\nmain();\n```\n### Пример подключения в typescript\n```typescript\n    import VPBX from 'mango-vpbx';\n    const vpbx = new VPBX();\n```\n\n[Все примеры](examples/)\n\n## класс VPBX\nКласс для API Виртуальной АТС от MANGO OFFICE\n\u003c/br\u003e\n\u003c/br\u003e\nСоздание нового экземпляра\n```javascript\nconst vpbx = new VPBX(apiKey, apiSalt);\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| [apiKey] | \u003ccode\u003estring\u003c/code\u003e | Уникальный код вашей АТС |\n| [apiSalt] | \u003ccode\u003estring\u003c/code\u003e | Ключ для создания подписи |\n\n## Методы\nСписок возможных json параметров их значений для вызова API методов доступен в [официальной документации](https://www.mango-office.ru/upload/api/MangoOffice_VPBX_API_v1.9.pdf)\n\nВызов методов возвращает промис, результат которого объект, содержащий свойства:\n\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| success  | \u003ccode\u003eboolean\u003c/code\u003e  |  результат |\n| code   | \u003ccode\u003enumber\u003c/code\u003e   |  код ответа ВАТС  |\n| message  | \u003ccode\u003estring\u003c/code\u003e   |  сообщение  |\n\n\n\n### метод call\nИнициирование вызова от имени сотрудника\n\n```js\nvpbx.call(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| [json.command_id] | \u003ccode\u003estring\u003c/code\u003e | идентификатор запроса |\n| json.from | \u003ccode\u003eobject\u003c/code\u003e | инициатор вызова |\n| json.from.extension | \u003ccode\u003estring\u003c/code\u003e | добавочный номер сотрудника |\n| [json.from.number] | \u003ccode\u003estring\u003c/code\u003e | номер телефона |\n| json.to_number | \u003ccode\u003estring\u003c/code\u003e | вызываемый номер телефона |\n| [json.line_number] | \u003ccode\u003estring\u003c/code\u003e | номер линии (АОН) |\n| [json.sip_headers] | \u003ccode\u003eobject\u003c/code\u003e | заголовки SIP |\n| [json.sip_headers.answer_after] | \u003ccode\u003estring\u003c/code\u003e | автоответ через n секунд |\n\nПример использования\n```js\nconst json = {\n    from: {\n        extension: '5000'\n    },\n    to_number: '74952129298',\n};\nconst { success } = await vpbx.call(json);\n```\n\n### метод callGroup\nИнициирование вызова от имени группы\n\n```js\nvpbx.callGroup(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| [json.command_id] | \u003ccode\u003estring\u003c/code\u003e | идентификатор запроса |\n| json.from | \u003ccode\u003estring\u003c/code\u003e | добавочный номер группы |\n| json.to | \u003ccode\u003estring\u003c/code\u003e | вызываемый номер телефона |\n| [json.line_number] | \u003ccode\u003estring\u003c/code\u003e | номер линии (АОН) |\n\nПример использования\n```js\nconst json = {\n    from: '222',\n    to_number: '74991102914',\n    line_number: '74952129298'\n};\nconst { success } = await vpbx.callGroup(json);\n```\n\n### метод hangup\nЗавершение вызова\n\n```js\nvpbx.hangup(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| [json.command_id] | \u003ccode\u003estring\u003c/code\u003e | идентификатор команды |\n| json.call_id | \u003ccode\u003estring\u003c/code\u003e | идентификатор вызова, который необходимо завершить |\n\nПример использования\n```js\nconst json = {\n    call_id: 'NyAoNDk1KSAyMTItOTItOTgJ'\n};\nconst { success } = await vpbx.hangup(json);\n```\n\n### метод sms\nОтправка SMS\n\n```js\nvpbx.sms(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| [json.command_id] | \u003ccode\u003estring\u003c/code\u003e | идентификатор команды |\n| json.text | \u003ccode\u003estring\u003c/code\u003e | текст сообщения |\n| json.from_extension | \u003ccode\u003estring\u003c/code\u003e | внутренний номер сотрудника |\n| json.to_number | \u003ccode\u003estring\u003c/code\u003e | номер вызываемого телефона |\n| [json.sms_sender] | \u003ccode\u003estring\u003c/code\u003e | имя отправителя |\n\nПример использования\n```js\nconst json = {\n    from_extension: '5000',\n    to_number: '74952129298',\n    text: 'It works'\n};\nconst { success } = await vpbx.sms(json);\n```\n\n### метод recordingStart\nВключение записи разговора\n\n```js\nvpbx.recordingStart(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| [json.command_id] | \u003ccode\u003estring\u003c/code\u003e | идентификатор команды |\n| json.call_id | \u003ccode\u003estring\u003c/code\u003e | идентификатор вызова |\n| json.call_party_number | \u003ccode\u003estring\u003c/code\u003e | номер абонента участвующего в вызове, которого нужно начать записывать. |\n\nПример использования\n```js\nconst json = {\n    call_id: 'NyAoNDk1KSAyMTItOTItOTgJ',\n    call_party_number: '5000',\n};\nconst { success } = await vpbx.recordingStart(json);\n```\n\n### метод route\nМаршрутизация вызова\n\n```js\nvpbx.route(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| [json.command_id] | \u003ccode\u003estring\u003c/code\u003e | идентификатор команды |\n| json.call_id | \u003ccode\u003estring\u003c/code\u003e | идентификатор вызова |\n| json.to_number | \u003ccode\u003estring\u003c/code\u003e | новый номер назначения вызова |\n| [json.sip_headers] | \u003ccode\u003eobject\u003c/code\u003e | заголовки SIP |\n| [json.sip_headers.display_name] | \u003ccode\u003estring\u003c/code\u003e | отображаемое имя |\n\nПример использования\n```js\nconst json = {\n    call_id: 'NyAoNDk1KSAyMTItOTItOTgJ',\n    to_number: '101'\n};\nconst { success } = await vpbx.route(json);\n```\n\n\n### метод transfer\nПеревод вызова\n\n```js\nvpbx.transfer(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| [json.command_id] | \u003ccode\u003estring\u003c/code\u003e | идентификатор команды |\n| json.call_id | \u003ccode\u003estring\u003c/code\u003e | идентификатор вызова |\n| json.method | \u003ccode\u003estring\u003c/code\u003e | тип перевода: blind - слепой, hold - консультативный |\n| json.to_number | \u003ccode\u003estring\u003c/code\u003e | номер (цель) перевода |\n| json.initiator | \u003ccode\u003estring\u003c/code\u003e | участник разговора, от имени которого выполняется перевод (например, \"from.extension\", \"from.number\", \"to.extension\", \"to.number\") |\n\nПример использования\n```js\nconst json = {\n    call_id: 'NyAoNDk1KSAyMTItOTItOTgJ',\n    method: 'blind',\n    to_number: '101',\n    initiator: '5000'\n};\nconst { success } = await vpbx.transfer(json);\n```\n\n### метод stats\nЗапрос статистики вызовов\n\n```js\nvpbx.stats(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| json.date_from | \u003ccode\u003estring\u003c/code\u003e | timestamp начала |\n| json.date_to | \u003ccode\u003estring\u003c/code\u003e | timestamp конца |\n| [json.fields] | \u003ccode\u003estring\u003c/code\u003e | список полей включаемые в выгрузку (через запятую). Возможные значения: \"records, start, finish, answer, from_extension, from_number, to_extension, to_number, disconnect_reason, line_number, location, entry_id\" |\n| [json.from] | \u003ccode\u003eobject\u003c/code\u003e | данные, относящиеся к вызывающему абоненту |\n| [json.from.extension] | \u003ccode\u003estring\u003c/code\u003e | добавочный номер |\n| [json.from.number] | \u003ccode\u003estring\u003c/code\u003e | номер телефона |\n| [json.to] | \u003ccode\u003eobject\u003c/code\u003e | данные, относящиеся к вызываемому абоненту |\n| [json.to.extension] | \u003ccode\u003estring\u003c/code\u003e | добавочный номер |\n| [json.to.number] | \u003ccode\u003estring\u003c/code\u003e | номер телефона |\n| [json.call_party] | \u003ccode\u003eobject\u003c/code\u003e | данные, относящиеся к вызываемому или вызывающему абоненту. Использование поля допустимо только без заполнения полей to и from |\n| [json.call_party.extension] | \u003ccode\u003estring\u003c/code\u003e | добавочный номер |\n| [json.call_party.number] | \u003ccode\u003estring\u003c/code\u003e | номер телефона |\n| [json.request_id] | \u003ccode\u003estring\u003c/code\u003e | идентификатор запроса |\n| [json.incoming] | \u003ccode\u003eboolean\u003c/code\u003e | фильтр - входящие |\n| [json.outgoing] | \u003ccode\u003eboolean\u003c/code\u003e | фильтр - исходящие |\n| [json.fail] | \u003ccode\u003eboolean\u003c/code\u003e | фильтр - неуспешные |\n| [json.success] | \u003ccode\u003eboolean\u003c/code\u003e | фильтр - успешные |\n\nПример использования\n```js\nconst json = {\n    date_from: '1481630491',\n    date_to: '1481734491'\n};\nconst { success, stats } = await vpbx.stats(json);\n```\n\n### метод recording\nПолучение записи разговора\n\n```js\nvpbx.recording(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| json.recording_id | \u003ccode\u003estring\u003c/code\u003e | идентификатор записи разговора |\n| [json.folder] | \u003ccode\u003estring\u003c/code\u003e | абсолютный путь до папки, для сохранения записи разговора |\n| [json.expires] | \u003ccode\u003estring, date, number\u003c/code\u003e | время жизни ссылки на запись разговора ('MAX' = 1000 лет)|\n\nДля скачивания записи разговора на диск необходимо задать свойство `json.folder`\n\nДля получения ссылки на запись разговора необходимо задать свойство `json.expires`\n\n\nПримеры использования\n\nСкачивание записи разговора\n```js\nconst json = {\n    recording_id: 'MToxMjI3NTM6MzUwNzMxMDk4NTow',\n    folder: 'C:/mango-vpbx/downloads/'\n};\nconst { success, recording } = await vpbx.recording(json);\nconsole.log(recording); // =\u003e C:/mango-vpbx/downloads/date_time_name.mp3\n```\n\nПолучение ссылки на запись разговора\n```js\nconst json = {\n    recording_id: 'MToxMjI3NTM6MzUwNzMxMDk4NTow',\n    expires: 'MAX',\n};\nconst { success, recording } = await vpbx.recording(json);\nconsole.log(recording); // =\u003e https://app.mango-office.ru/vpbx/queries/recording/link/MToxMjI3NTM6MzUwNzMxMDk4NTow/play/4unbf6zukwey1sdbn131nbvc6usianm4/33082514105/01578098d7854d7978773ed13ada3992358e2f09521e2be8726791e53392bd4d\n```\n\n### метод users\nЗапрос списка сотрудников ВАТС\n\n```js\nvpbx.users(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| [json] | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| [json.extension] | \u003ccode\u003estring\u003c/code\u003e | добавочный номер сотрудника |\n\nПример использования\n```js\nconst { success, users } = await vpbx.users();\n```\n\n### метод dctUserInfo\nЗапрос информации о посетителе сайта по динамическому номеру\n\n```js\nvpbx.dctUserInfo(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| json.number | \u003ccode\u003estring\u003c/code\u003e | динамический номер |\n\nПример использования\n```js\nconst json = { number: '74952129298' };\nconst { success, dctUserInfo } = await vpbx.dctUserInfo(json);\n```\n\n### метод dctUserHistory\nЗапрос истории навигации посетителя сайта по динамическому номеру\n\n```js\nvpbx.dctUserHistory(json); // =\u003e Promise\u003cany\u003e\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| json | \u003ccode\u003eobject\u003c/code\u003e | параметры |\n| json.number | \u003ccode\u003estring\u003c/code\u003e | динамический номер |\n\nПример использования\n```js\nconst json = { number: '74952129298' };\nconst { success, dctUserHistory } = await vpbx.dctUserHistory(json);\n```\n\n## API RealTime\nAPI Realtime представляет собой набор запросов (уведомлений), которые направляются к внешней системе.\n\n### метод events\nCоздает обработчики для прослушивания событий от ВАТС\n```js\nvpbx.events(url); // =\u003e Realtime\n```\n\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| url  | string   |  адрес внешней системы  |\n\nПример использования\n```js\nconst app = require('express')();\nconst bodyParser = require('body-parser');\n\nconst VPBX = require('mango-vpbx');\n\nconst vpbx = new VPBX();\n\nconst events = vpbx.events('http://example.com/mango-vpbx');\n\napp.use(bodyParser.urlencoded());\n\napp.use(events.call);\napp.use(events.summary);\napp.use(events.recording);\napp.use(events.dtmf);\napp.use(events.sms);\napp.use(events.ping);\n\n\nevents.on('call', e =\u003e console.log('on events/call', e));\nevents.on('summary', e =\u003e console.log('on events/summary', e));\nevents.on('recording', e =\u003e console.log('on events/recording', e));\nevents.on('dtmf', e =\u003e console.log('on events/dtmf', e));\nevents.on('sms', e =\u003e console.log('on events/sms', e));\nevents.on('ping', e =\u003e console.log('check connection', e));\n\nevents.on('data', e =\u003e console.log('on any events', e));\n\napp.use((req, res) =\u003e res.status(404).send({ error: 'not found' }));\napp.listen(80);\n\n```\n\n## Класс Realtime\nКласс для создания обработчиков и получения уведомлений от ВАТС\n\n### метод call\nОбработчик \"Уведомления о вызове\"\n```js\nRealtime.call; // =\u003e Function\n```\n\n### метод sms\nОбработчик \"Уведомления о результате смс\"\n```js\nRealtime.sms; // =\u003e Function\n```\n\n### метод recording\nОбработчик \"Уведомления о записи разговора\"\n```js\nRealtime.recording; // =\u003e Function\n```\n\n### метод dtmf\nОбработчик \"Уведомления о нажатиях DTMF клавиш\"\n```js\nRealtime.dtmf; // =\u003e Function\n```\n\n### метод summary\nОбработчик \"Уведомления о завершении вызова\"\n```js\nRealtime.summary; // =\u003e Function\n```\n\n### метод ping\nОбработчик \"Проверить подключение\" из Личного кабинета\n```js\nRealtime.ping; // =\u003e Function\n```\n\n### метод all\nОбработчик всех событий (только для метода hear)\n```js\nRealtime.all; // =\u003e Function\n```\n\n### метод hear\nСлушает события по заданному фильтру\n```js\nRealtime.hear(filter, handler); // =\u003e void\n```\n| Параметр  | Тип  | Описание |\n| --------- | ---- | -------- |\n| filter  | object  |  фильтр для событий  |\n| handler  | function   |  функция обратного вызова  |\n\nАргумент `filter` должен иметь обязательное свойство `event` - имя события \n(возможные значения: 'call', 'recording', 'summary', 'dtmf', 'sms', 'callback', 'stats', 'ping')\n\nФункция `handler` в качестве первого аргумента принимает json-объект, содержащий параметры события (список передаваемых параметров доступен в [официальной документации](https://www.mango-office.ru/upload/api/MangoOffice_VPBX_API_v1.9.pdf))\n\nПример использования\n```js\n\nconst app = require('express')();\nconst bodyParser = require('body-parser');\n\nconst VPBX = require('mango-vpbx');\n\nconst vpbx = new VPBX();\n\nconst events = vpbx.events('http://example.com/mango-vpbx');\n\napp.use(bodyParser.urlencoded({ extended: false }));\n\napp.use(events.all);\n\nevents.hear({ event: 'ping' }, e =\u003e console.log('ping works!'));\nevents.hear({ event: 'call' }, e =\u003e console.log('call event', e.location, e.call_state));\n\napp.use((req, res) =\u003e res.status(404).send({ error: 'not found' }));\napp.listen(80);\n\n```\n\n\nОбработчик \"уведомления о завершении вызова\" будет вызван только для исходящего звонка:\n```js\nevents.hear({ event: 'summary', call_direction: '2' }, e =\u003e console.log('завершился исходящий звонок', e.entry_id));\n```\n\nФильтр может состоять из нескольких параметров:\n```js\nevents.hear({ event: 'recording', recording_state: 'Completed', completion_code: '1000' }, e =\u003e console.log('новая запись разговора!', e.recording_id));\n```\n\nВ параметрах допускаются регулярные выражения:\n```js\nevents.hear({ event: 'summary', call_direction: /[12]/ }, e =\u003e console.log('события завершения входящего/исходящего вызовов', e));\n```\n\n[Все примеры](examples/)\n\n## Отладка\n Для логирования запросов необходимо задать переменную `process.env.DEBUG=mango-vpbx:worker`\n\n Пример лога:\n ```\n  mango-vpbx:worker \u003c- POST https://app.mango-office.ru/vpbx/commands/callback +213ms\n  mango-vpbx:worker {\"vpbx_api_key\":\"2fn293fg43gfh02h4ub3jd23o312u4bc\",\"sign\":\"394h39ufhi20jg5gj54j9ug2i0j20j3ig0edjbopeef3ojefrf0e3ie2fjojejf0\",\"json\":\"{\\\"from\\\":{\\\"extension\\\":\\\"5000\\\",\\\"number\\\":\\\"74991102914\\\"},\\\"to_number\\\":\\\"74952129298\\\",\\\"command_id\\\":\\\"cmd-1516131681519\\\"}\"} +1ms\n  mango-vpbx:worker -\u003e 200 OK +189ms\n ```\n   \n   Для логирования ивентов необходимо задать переменную `process.env.DEBUG=mango-vpbx:events`\n\n   Пример лога:\n\n ```\nmango-vpbx:events -\u003e 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\n ```\n\n\nДля логирования запросов и ивентов необходимо задать переменную `process.env.DEBUG=mango-vpbx:*`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobrovskih%2Fmango-vpbx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbobrovskih%2Fmango-vpbx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobrovskih%2Fmango-vpbx/lists"}