Bulutfon API ile Çağrı listeleme ve görüşme kayıtları

Bulutfon API ile Çağrı listeleme ve görüşme kayıtları API üzerinden alabileceğiniz verilerdir.

Bulutfon API’yi kullanabilmeniz için bir erişim jetonuna (access_token) ihtiyacınız var. Bu access_token’a bulutfon paneliniz Ayarlar > API Kullanıcıları menüsünden ulaşabilirsiniz.

Bulutfon API ile Çağrı listeleme ve görüşme kayıtları 1
Api anahtarınızı alma

Bu yazıyı yazdığım tarih itibariyle API’mız 2 versiyon olarak hizmet vermekte ve bu yazımızda API versiyon 2’yi kullanacağız. Versiyon 2 dokümantasyonuna https://api.bulutfon.com/docs adresi üzerinden ulaşabilirsiniz.

Bulutfon API http istekleri ile çalışmakta olan RESTFUL bir servistir. Birçok işlemi herhangi bir SDK olmadan gerçekleştirebilirsiniz.

Görüşme kayıtlarını listelemek

Görüşme kayıtlarını CDR (Call detail record) olarak isimlendiriyoruz. Görüşme kayıtlarını listelemek için https://api.bulutfon.com/v2/cdr/list?apikey=sizin_api_anathariniz adresine get isteği atmanız yeterlidir. Yani aslında tarayıcınıza bu linki yapıştırıp api anahtarınızı eklemek kadar kolay bir işlemdir.

Listeleme işlemi için birçok filtre uygulayabilir veya sayfa limit gibi parametreleri değiştirerek isteğinize göre görüşme listesini filtreleyebilirsiniz. Bunun yanında sayfalama bilgisi gibi verilerede size dönen cevap üzerinden erişebilirsiniz. Daha fazla bilgiye API dokümantasyon sayfamız üzerinden ulaşabilirsiniz. https://api.bulutfon.com/docs#tag/Cdrs/paths/~1cdr~1list/get

Çağrı kayıtlarını dinlemek

Çağrıları listelediğimizde çağrılar ile ilgili birçok ayrıntıya yer verdik ve yine API’mız üzerinden her çağrının daha ayrıntılı bir dökümünede ulaşabilirsiniz. Ancak bu yazımız için önem arzaden iki önemli alanımız bulunmata. Bunlardan birincisi UUID alanı ki bu çağrılarınızı ifade eden eşşiz bir harf dizinidir. UUID’i çağrı kayıtları özelinde yapacağımız işlemlerde tanımlayıcı anathar olarak kullanmaktayız.

İkinci olarak ise bu yazımızda bahsettiğimiz arama kayıtları ile ilgili alanımız olan call_record alanı. Bu alan eğer elimizde kayıt varsa bu çağrı kaydı için size özel bir adres verecektir. Bu noktada aklınıza çağrının kaydının neden olmayacağı gibi bir soru gelebilir. Bir çok spesifik neden olmakta birlikte genel olarak tamamlanmamış çağrıların kayıtları bulunamamaktadır. Bunun dışında Bulutfon olarak başarılı her çağrının kaydını özenle tutmaktayız.

Çağrıları dinleyebilmeniz için call_record kısmında bulunan linke tıklamanız yeterli olacaktır. Böylelikle tarayıcınız üzerinden bu kayıtları dinleyebilirsiniz. Bu ses kayıtları stereo olarak tutulmaktadır. Arayan ve aranan tarafların sesleri ses siteminizin ayrı taraflarından gelmektedir.

Örnek uygulama

Proje oluşturma

u yazımızda örnek olarak PHP ile basit bir uygulama geliştireceğiz.

Projemiz için yeni bir klasör oluşturalım ve bu klasöre geçiş yapalım.

mkdir call_listing && cd call_listing

Projemizin giriş noktası olan index.php’i oluşturalım.

touch index.php

Bu projemizde Guzzle kütüphanesini kullanacağız. İsteklerimizi yapılandırmamızda ve göndermemizde bize yardımcı olacak oldukça kullanışlı bir kütüphanedir.

Yine bu projemizde bağımlılık yöneticisi olarak Composer‘ı kullanacağız.

composer require guzzlehttp/guzzle:~6.0

Artık favori editörümüzde projemizi açabiliriz

İlk yapılandırma

Guzzle ile ana url tanımlaması ve varsayılan sorgu parametlerini tanımlamak sonraki isteklerde işlerimizi kolaylaştıracaktır.

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'https://api.bulutfon.com/v2/',
    'timeout'  => 2.0,
    'query'   => ['apikey' => 'api-anahtarinizi-buraya-yazin']
]);

CDR Listesini alma

CDR listesi almak Guzzle oluşturulduktan sonra oldukça kolaydır.

$request = $client->request('GET', 'cdr/list');

Artık dönen JSON verisini alabiliriz ve dilersek dönen veriyi PHP’de kullanabileceğiniz bir array formatına çevirebiliriz.

$response = $response->getBody()->getContents();
$cdrs = json_decode($response, true);

Ekranda görüntüleme

Projemizi olabildiğince basit tutmak adına herhangi bir template parser kullanmayacağım. Bu yüzden tek bir dosya üzerinde işlemlerimize devam edeceğim. Bunun için aşağıdaki basit HTML yapısını kullanacağız.

HTML Yapı

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>CDR Listesi</title>

        <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet">
    </head>
    <body class="text-gray-900 bg-gray-200">
        <div class="w-1/2 mx-auto">
            <div class="px-3 py-4 flex justify-center">
                <table class="w-full text-md bg-white shadow-md rounded mb-4">
                    <tbody>
                        <tr class="border-b">
                            <th class="text-left p-3 px-5">Arayan</th>
                            <th class="text-left p-3 px-5">Aranan</th>
                            <th class="text-right p-3 px-5">Ses Kaydı</th>
                            <th></th>
                        </tr>
                        <tr class="border-b hover:bg-orange-100 bg-gray-100">
                            <td class="p-3 px-5">
                                Number
                            </td>
                            <td class="p-3 px-5">
                                Number
                            </td>
                            <td class="p-3 px-5">
                               Audıo
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </body>
</html>

Görüleceği gibi basit bir tablo içerisinde arayan, aranan ve ses kaydını dinleyebileceğimiz bir player olacak.

Verilerimizi tabloya işleme

Verilerimizi tablomuza yazdırmaya artık hazırız.

<?php foreach ($cdrs['data'] as $cdr): ?>
<tr class="border-b hover:bg-orange-100 bg-gray-100">
    <td class="p-3 px-5">
        <?php echo $cdr['caller']; ?>
    </td>
    <td class="p-3 px-5">
        <?php echo $cdr['callee']; ?>
    </td>
    <td class="p-3 px-5 ">
        <?php if ($cdr['call_record'] !== 'NO'): ?>
        <div class="w-full flex justify-end">
            <audio controls>
                <source src="<?php echo $cdr['call_record']; ?>" type="audio/mpeg">
                Your browser does not support the audio element.
            </audio> 
        </div>
        <?php else: ?>
            Arama kaydı yok
        <?php endif; ?>
    </td>
</tr>
<?php endforeach; ?>

Görsel olarak daha uygun durması için sayfalama limitini Guzzle sorgu parametrelerinden değiştirelim, varsayılan olarak 20 veri gelmekte biz bunu 5’e düşürelim.

$client = new Client([
    'base_uri' => 'https://api.bulutfon.com/v2/',
    'timeout'  => 2.0,
    'query'   => ['apikey' => 'api-anahtarinizi-buraya-yazin', 'limit' => 5]
]);

Sunucumuzu çalıştıralım

Artık sayfamızı görüntülemeye hazırız. Proje dizinimizde aşağaki komutu çalıştırarak localhost:4000 portunda sunucumuzu çalıştırabiliriz.

php -S localhost:4000
Bulutfon API ile Çağrı listeleme ve görüşme kayıtları 2

Bulutfon API ile Çağrı listeleme ve görüşme kayıtları sayfalama

Artık verilerimizi görebildiğimize göre basit bir sayfalama ekleyebiliriz.Yine projemizi olabildiğince basit kılmak adına sadece ileri ve geri butonları ekleyeceğim. Bunun için aşağıdaki basit HTML yapısını kullanalım.

<div class="flex justify-center">
    <ul class="flex pl-0 list-none rounded my-2">
        <li class="relative block py-2 px-3 leading-tight bg-white border border-gray-300 text-blue-700 border-r-0 ml-0 rounded-l hover:bg-gray-200"><a class="page-link" href="#">Geri</a></li>
        <li class="relative block py-2 px-3 leading-tight bg-white border border-gray-300 text-blue-700 rounded-r hover:bg-gray-200"><a class="page-link" href="#">İleri</a></li>
    </ul>
</div>

Artık php scriptimizde kullanmak için page değişkenini alabiliriz.

...

use GuzzleHttp\Client;

$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT) ?? 1;

...

Guzzle’da da ufak bir değişiklik yaparak page değişkenini kullanmasını sağlayalım.

$client = new Client([
    'base_uri' => 'https://api.bulutfon.com/v2/',
    'timeout'  => 2.0,
    'query'   => ['apikey' => 'api-anahtarinizi-buraya-yazin', 'limit' => 5, 'page' => $page]
]);

Son olarak html yapımızı güncelleyelim.

<p class="text-center">Toplam <?php echo $cdrs['pagination']['total_pages']; ?> sayfadan <?php echo $page; ?>. sayfayı görüntülüyorsunuz. </p>
<div class="flex justify-center">
    <ul class="flex pl-0 list-none rounded my-2">
        <li class="relative block py-2 px-3 leading-tight bg-white border border-gray-300 text-blue-700 border-r-0 ml-0 rounded-l hover:bg-gray-200">
            <?php if($page <=1): ?>
            <a disabled class="page-link disabled:opacity-75">Geri</a>
            <?php else: ?>
            <a class="page-link" href="index.php?page=<?php echo $page - 1; ?>">Geri</a>
            <?php endif; ?>
        </li>
        <li class="relative block py-2 px-3 leading-tight bg-white border border-gray-300 text-blue-700 rounded-r hover:bg-gray-200">
            <?php if($cdrs['pagination']['total_pages'] <= $page): ?>
            <a disabled class="page-link disabled:opacity-75">İleri</a>
            <?php else: ?>
            <a class="page-link" href="index.php?page=<?php echo $page + 1; ?>">İleri</a>
            <?php endif; ?>
        </li>
    </ul>
</div>

Böylelikle basit bir şekilde çağrı kayıtlarımızı listedik ve bu listeden kayıtları dinleyebileceğimiz basit bir yapı oluşturduk. Şimdi son halini görelim;

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT) ?? 1;

$client = new Client([
    'base_uri' => 'https://api.bulutfon.com/v2/',
    'timeout'  => 2.0,
    'query'   => ['apikey' => 'api-anahtarinizi-buraya-yazin', 'limit' => 5, 'page' => $page]
]);

$request = $client->request('GET', 'cdr/list');
$response = $request->getBody()->getContents();
$cdrs = json_decode($response, true);
?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>CDR Listesi</title>

        <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet">
    </head>
    <body class="text-gray-900 bg-gray-200">
        <div class="w-1/2 mx-auto">
            <div class="px-3 py-4 flex justify-center">
                <table class="w-full text-md bg-white shadow-md rounded mb-4">
                    <tbody>
                        <tr class="border-b">
                            <th class="text-left p-3 px-5">Arayan</th>
                            <th class="text-left p-3 px-5">Aranan</th>
                            <th class="text-right p-3 px-5">Ses Kaydı</th>
                        </tr>
                        <?php foreach ($cdrs['data'] as $cdr): ?>
                        <tr class="border-b hover:bg-orange-100 bg-gray-100">
                            <td class="p-3 px-5">
                                <?php echo $cdr['caller']; ?>
                            </td>
                            <td class="p-3 px-5">
                                <?php echo $cdr['callee']; ?>
                            </td>
                            <td class="p-3 px-5 ">
                                <?php if ($cdr['call_record'] !== 'NO'): ?>
                                <div class="w-full flex justify-end">
                                    <audio controls>
                                        <source src="<?php echo $cdr['call_record']; ?>" type="audio/mpeg">
                                        Your browser does not support the audio element.
                                    </audio> 
                                </div>
                                <?php else: ?>
                                    Arama kaydı yok
                                <?php endif; ?>
                            </td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
            <p class="text-center">Toplam <?php echo $cdrs['pagination']['total_pages']; ?> sayfadan <?php echo $page; ?>. sayfayı görüntülüyorsunuz. </p>
            <div class="flex justify-center">
                <ul class="flex pl-0 list-none rounded my-2">
                    <li class="relative block py-2 px-3 leading-tight bg-white border border-gray-300 text-blue-700 border-r-0 ml-0 rounded-l hover:bg-gray-200">
                        <?php if($page <=1): ?>
                        <a disabled class="page-link disabled:opacity-75">Geri</a>
                        <?php else: ?>
                        <a class="page-link" href="index.php?page=<?php echo $page - 1; ?>">Geri</a>
                        <?php endif; ?>
                    </li>
                    <li class="relative block py-2 px-3 leading-tight bg-white border border-gray-300 text-blue-700 rounded-r hover:bg-gray-200">
                        <?php if($cdrs['pagination']['total_pages'] <= $page): ?>
                        <a disabled class="page-link disabled:opacity-75">İleri</a>
                        <?php else: ?>
                        <a class="page-link" href="index.php?page=<?php echo $page + 1; ?>">İleri</a>
                        <?php endif; ?>
                    </li>
                </ul>
            </div>
        </div>
    </body>
</html>
Bulutfon API ile Çağrı listeleme ve görüşme kayıtları 3

Bu yazıdaki tüm kodlara Github’dan erişebilirsiniz. Diğer yazılarımız için https://www.bulutfon.com/api-entegrasyon/ sayfamızı ziyaret edebilirsiniz.

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top