timur-turdyev / laravel-mango-office
Laravel package for Mango Office virtual PBX API
Package info
github.com/TimurTurdyev/Laravel-Mango-Office
pkg:composer/timur-turdyev/laravel-mango-office
Requires
- php: ^7.2|^8.0
- ext-json: *
- guzzlehttp/guzzle: ^6.3|^7.0
- illuminate/support: ^6.0|^7.0|^8.0
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
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