laravel-mango-office maintained by timur-turdyev
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