Search by

timur-turdyev / laravel-mango-office

TimurTurdyev

Laravel package for Mango Office virtual PBX API

Package info

github.com/TimurTurdyev/Laravel-Mango-Office

pkg:composer/timur-turdyev/laravel-mango-office

Statistics

Installs: 31

Dependents: 0

Suggesters: 0

Stars: 5

Open Issues: 0

dev-master 2020-11-03 17:44 UTC

This package is auto-updated.

Last update: 2026-10-23 19:17:29 UTC


README

API виртуальной АТС Манго Офис для Laravel 6, 7 и 8: сотрудники, статистика звонков, записи разговоров, обратный звонок, SMS и уведомления от АТС.

Начинался с класса Ивана Александрова, потом переписан.

Установка

composer require timur-turdyev/laravel-mango-office

Провайдер и фасад Mango подключатся при установке. Ключи АТС лежат в личном кабинете Манго, раздел Интеграции -> API, их нужно прописать в .env:

MANGO_API_KEY=уникальный код АТС
MANGO_API_SALT=ключ для создания подписи

Конфиг, если нужно поменять адрес, таймаут или ожидание статистики:

php artisan vendor:publish --tag=mango-office-config

Команда выведет сотрудников АТС, на ней удобно убедиться, что ключи верные:

php artisan mango:users

Вызовы

use TimurTurdyev\MangoOffice\Facades\Mango;

// все сотрудники или один по добавочному номеру
Mango::userList();
Mango::userList(101);

// звонки за период, все или одного сотрудника; даты - метка UNIX, строка или Carbon
$calls = Mango::reportList(now()->subDay(), now());
$calls = Mango::reportList('2020-10-01', '2020-10-31 23:59:59', 101);

// запись разговора: содержимое файла или сразу в файл
$mp3 = Mango::downloadAudio($calls[0]['records'][0]);
Mango::saveAudio($calls[0]['records'][0], storage_path('calls/record.mp3'));

// обратный звонок: АТС звонит сотруднику 101, потом клиенту
$commandId = Mango::callback(101, '79001234567');

// завершить звонок и отправить SMS от имени сотрудника
Mango::hangup($callId);
Mango::sendSms(101, '79001234567', 'Перезвоним через 5 минут');

Вместо фасада подойдет app(Mango::class) или new Mango.

В reportList каждый звонок - массив с ключами из CallReport::FIELDS: records, start, finish, answer, from_extension, from_number, to_extension, to_number, disconnect_reason, location, line_number, entry_id. Плюс wait - сколько секунд звонивший ждал ответа, и talk - длительность разговора. Нужные поля можно передать четвертым аргументом.

Статистику АТС собирает не сразу, и reportList спрашивает результат до 10 раз с паузой 3 секунды, это настраивается в stats конфига.

На ошибку АТС будет TimurTurdyev\MangoOffice\MangoException с текстом и кодом ответа Манго.

Уведомления от АТС

Включаются в .env:

MANGO_EVENTS=true

В кабинете Манго, в настройках API, адрес для уведомлений - https://ваш-сайт/mango. У каждого запроса проверяется подпись, после чего выпускается событие MangoEvent: в name его тип (call, summary, recording и другие), в data - данные от АТС:

use TimurTurdyev\MangoOffice\Events\MangoEvent;

Event::listen(MangoEvent::class, function (MangoEvent $event) {
    if ($event->name === 'summary') {
        Log::info('Звонок завершен', $event->data);
    }
});

Адрес не попадает в группу web, CSRF его не проверяет. Префикс адреса и его middleware задаются в events конфига.

Лицензия

MIT