Looking to hire Laravel developers? Try LaraJobs

laravel-mango-office maintained by timur-turdyev

Description
Laravel package for Mango Office virtual PBX API
Author
Last update
2020/11/03 18:44 (dev-master)
License
Links
Downloads
31

Comments
comments powered by Disqus

Laravel Mango Office

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