Интеграция IP-телефонии Zadarma на сайт
Zadarma — международный провайдер IP-телефонии с виртуальной АТС (ZCRM), номерами в 100+ странах и WebRTC-клиентом для браузера. Хороший вариант для компаний с международными клиентами.
Webhook уведомления
Route::post('/webhooks/zadarma', function (Request $request) {
// Проверка подписи
$data = $request->except('sign');
ksort($data);
$sign = md5(http_build_query($data) . env('ZADARMA_SECRET'));
if ($request->sign !== $sign) return response('Invalid sign', 403);
$event = $data['event'];
switch ($event) {
case 'NOTIFY_START':
// Входящий звонок
$caller = $data['caller_id'];
$this->handleIncomingCall($caller);
break;
case 'NOTIFY_END':
// Звонок завершён
CallLog::create([
'zadarma_callid' => $data['call_id_with_rec'],
'caller' => $data['caller_id'],
'duration' => $data['duration'],
'disposition' => $data['disposition'] // answered | noanswer | busy
]);
break;
case 'NOTIFY_RECORD':
// Запись готова
$recordingUrl = $data['link'];
CallLog::where('zadarma_callid', $data['call_id_with_rec'])
->update(['recording_url' => $recordingUrl]);
break;
}
});
API — инициация callback
// Заdarma REST API v1
$params = [
'from' => $agentPhone, // номер в системе Zadarma
'to' => $customerPhone,
'sip_id' => env('ZADARMA_SIP_ID')
];
ksort($params);
$sign = base64_encode(hash_hmac(
'sha1',
env('ZADARMA_KEY') . urldecode(http_build_query($params)) . md5(serialize($params)),
env('ZADARMA_SECRET')
));
Http::withHeaders([
'Authorization' => env('ZADARMA_KEY') . ':' . $sign
])->get('https://api.zadarma.com/v1/request/callback/', $params);
WebRTC звонок из браузера
Zadarma предоставляет WebRTC-библиотеку для звонков прямо из браузера:
<script src="https://my.zadarma.com/webphoneApi/v3/js/zadarmawebrtc.js"></script>
<script>
var webrtcPhone = new ZadarmaWebRTC({
sipId: '{{ $sipId }}',
sipPass: '{{ $sipPassword }}',
onCallStateChange: function(state, data) {
console.log('Call state:', state);
}
});
webrtcPhone.dial('79001234567');
</script>
Получение записей
// Скачать запись разговора
$response = Http::get('https://api.zadarma.com/v1/pbx/record/request/', [
'call_id' => $zadarmaCallId,
'pbx_call_id'=> $pbxCallId
]);
$downloadUrl = $response->json()['link'];
Срок интеграции: 2–3 дня для полной интеграции с webhooks и click-to-call.







