Fiber Santral API
Yerleşik santral API'si
Santralinizden canlı çağrıları, kayıtları, dahilileri ve kuyrukları okuyabilir; arama başlatabilir,
IVR çalabilir ve SMS gönderebilirsiniz. Uçlar standart HTTP GET
istekleridir; yanıtlar JSON (rehber XML). Kendi uygulamanızdan, CRM'inizden ya da santral IVR betiğinden çağırın.
Kimlik ve adres
Her istek kullanıcı adı ve API şifresi taşır.
API şifresini panelde Ayarlar → API Kullanım Şifresi
bölümünden alırsınız; bu şifre web giriş şifrenizden ayrıdır. Şifre en az bir özel karakter içerir;
adres satırında # yerine
%23,
% yerine
%25 yazın.
Santral adresiniz
Her kurulumun kendi alan adı vardır. Aşağıdaki örneklerde geçen
{site-adiniz} yerine panelinize girdiğiniz adresi yazın.
https://{site-adiniz}
Santraliniz yalnız http sunuyorsa örneklerdeki https yerine http yazın.
Yanıt biçimi
Yanıtların tümü success ve
count alanlarını, ardından
data dizisini taşır. İstek başarısızsa
success false döner.
API şifresi URL içinde açık gider. İstekleri yalnız kendi sunucunuzdan yapın, tarayıcıya ya da genel istemci koduna gömmeyin. Şifre sızarsa panelden yenileyin.
Aktif aramalar
O an santralden geçen canlı çağrıları listeler. Web panelinizde arayan numaraya göre müşteri bilgisi getirmek için kullanışlıdır.
https://{site-adiniz}/?username={kullanıcı}&password={api_şifresi}&action=activecallsÖrnek yanıt
[
{
"success": true,
"count": 1,
"data": [
{
"channel": "SIP/trunk-sip-Trunk110-36a9b",
"duration": "00:01:14",
"calltype": "Kuyruk(630)",
"callinfo": "Konuşuyor",
"src": "9053xxxxxxxxx",
"dst": "110"
}
]
}
]
- channel
- Çağrının ayırt edici kimliği; ses kaydı indirmede kullanılır.
- duration
- Çağrı süresi.
- calltype
- Çağrı tipi (ör. kuyruk numarası).
- callinfo
- Çağrı durumu (ör. "Konuşuyor").
- src
- Arayan numara.
- dst
- Aranan numara / dahili.
Kod örnekleri
JSONObject := TJsonObject.Create;
try
JSONObject.Parse(TEncoding.UTF8.GetBytes(
NetHTTP.Get('https://{site-adiniz}/?username=Kullanıcı&password=Şifre&action=activecalls').ContentAsString), 1);
if StrToInt(JSONObject.GetValue('count').Value) <> 0 then
begin
VeriArray := JSONObject.GetValue('data') as TJSONArray;
for don := 0 to VeriArray.Count - 1 do
begin
Veriler := TJsonObject.Create;
try
Veriler.Parse(TEncoding.UTF8.GetBytes(VeriArray.Items[don].ToString), 0);
Memo.Lines.Add(Veriler.GetValue('channel').Value);
Memo.Lines.Add(Veriler.GetValue('src').Value);
Memo.Lines.Add(Veriler.GetValue('dst').Value);
finally Veriler.Free; end;
end;
end;
finally JSONObject.Free; end;
const yanit = await fetch('https://{site-adiniz}/?username=Kullanıcı&password=Şifre&action=activecalls')
const rjson = await yanit.json()
if (rjson.success) {
for (const c of rjson.data) {
console.log('channel:', c.channel)
console.log('src:', c.src, '→ dst:', c.dst, '(' + c.callinfo + ')')
}
}
using Newtonsoft.Json.Linq;
var json = new HttpClient().GetStringAsync(
"https://{site-adiniz}/?username=Kullanıcı&password=Şifre&action=activecalls").Result;
var obj = JObject.Parse(json);
if (obj.SelectToken("success").Value<bool>())
foreach (var c in obj["data"])
Console.WriteLine($"{c["src"]} → {c["dst"]} ({c["callinfo"]})");
Çağrı detayları
İki tarih arasındaki çağrı kayıtlarını (CDR) döndürür. Numaraya göre süzebilir, IVR/görüştürme uçlarından taşınan veriyi uf=yes ile isteyebilirsiniz.
https://{site-adiniz}/?username={kullanıcı}&password={api_şifresi}&action=cdr&date1={ddMMyyyyHHmm}&date2={ddMMyyyyHHmm}&number=&uf=yes| Parametre | Zorunlu | Açıklama |
|---|---|---|
| date1 | Evet | Başlangıç; ddMMyyyyHHmm (ör. 030920190100). |
| date2 | Evet | Bitiş; aynı biçim. |
| number | Hayır | Yalnız bu numaraya ait kayıtlar. Boşsa tümü. |
| uf | Hayır | yes ise IVR/görüştürme uçlarının taşıdığı veriyi de getirir. |
Örnek yanıt
{
"success": true,
"count": 2,
"data": [
{
"id": "28699",
"calldate": "03.09.2019 12:30:38",
"calltype": "incoming",
"src": "90507XXXXXXX",
"dst": "101",
"duration": "85,69",
"disposition": "ANSWERED",
"queue": "",
"record": true,
"userfield": "Gelen bilgi"
}
]
}
- id
- Kaydın kimliği; ses dosyası indirmede kullanılır.
- calldate
- Tarih ve saat.
- calltype
- incoming / outcoming.
- src · dst
- Arayan ve aranan.
- duration
- Çağrı süresi (sn).
- disposition
- Sonuç: ANSWERED, BUSY, NO ANSWER…
- queue
- Varsa kuyruk numarası.
- record
- Ses kaydı var mı (true/false).
- userfield
- Taşınan serbest bilgi.
Dahililer
Dahilileri ve register (bağlı) olma durumlarını listeler.
https://{site-adiniz}/?username={kullanıcı}&password={api_şifresi}&action=usersÖrnek yanıt
{
"success": true,
"count": 2,
"data": [
{ "username": "100", "name": "Mehmet", "regstatus": "OK (93 ms)" },
{ "username": "101", "name": "Satış", "regstatus": "OK (109 ms)" }
]
}
- username
- Dahili numarası.
- name
- Dahili kullanıcı adı.
- regstatus
- Register durumu ve yanıt süresi.
Kuyruklar
Çağrı kuyruklarını ve her kuyruğa bağlı dahilileri listeler.
https://{site-adiniz}/?username={kullanıcı}&password={api_şifresi}&action=queuesÖrnek yanıt
{
"success": true,
"count": 2,
"data": [
{ "queuenumber": "630", "name": "Muhasebe", "internal": "100,101,102" },
{ "queuenumber": "632", "name": "Satış", "internal": "105,106" }
]
}
- queuenumber
- Kuyruk numarası.
- name
- Kuyruk adı.
- internal
- Kuyruğa bağlı dahililer (virgülle).
Rehber
Santralde kayıtlı rehberin tamamını XML olarak döndürür (IP telefon rehberi biçimi).
https://{site-adiniz}/?username={kullanıcı}&password={api_şifresi}&action=phonedirectoryÖrnek yanıt (XML)
<?xml version="1.0" encoding="UTF-8" ?>
<iexIPPhoneDirectory>
<DirectoryEntry>
<Name>Fiber Santral</Name>
<Telephone>908502590259</Telephone>
</DirectoryEntry>
</iexIPPhoneDirectory>
Ses kaydı indirme
Çağrı detaylarındaki id (ya da chanid) ile çağrının ses dosyasını .gsm biçiminde indirir.
https://{site-adiniz}/?username={kullanıcı}&password={api_şifresi}&action=record&id={cdr_id}id yerine chanid parametresi de kullanılabilir.
Arama başlatma
Önce verilen dahiliyi çaldırır, dahili açınca hedef numarayı arar (trunk araması).
https://{site-adiniz}/?username={kullanıcı}&password={api_şifresi}&action=callnumber&number={telefon}&internal={dahili}| Parametre | Zorunlu | Açıklama |
|---|---|---|
| number | Evet | Aranacak telefon numarası. |
| internal | Evet | Önce çalacak dahili. |
IVR (anons) araması
Bir numarayı arayıp seçtiğiniz robot/anons planını çalar. file içinde süslü parantezli metin sese çevrilir; | sonrası santraldeki hazır ses dosyasının adıdır.
https://{site-adiniz}/?username={kullanıcı}&password={api_şifresi}&action=callivr&number={telefon}&dp={arama_planı}&dest={robot_no}&uf={taşınacak_veri}&file={merhaba,Mehmet%20bey}|SES1|SES2| Parametre | Zorunlu | Açıklama |
|---|---|---|
| number | Evet | Çağrı gönderilecek numara. |
| dp | Evet | Kullanılacak arama planı. |
| dest | Evet | Okunacak robot numarası. |
| file | Evet | Çalınacak içerik. {…} metni sese çevrilir, | sonrası yüklü ses adıdır. |
| uf | Hayır | Çağrıyla taşınacak serbest veri (CDR'de uf=yes ile okunur). |
Santral IVR betiği örneği
procedure baslat;
begin
Read(tuslama, '${XPLAY}', 3, 5);
API(sonuc, 'https://uygulamaniz.com/api/sms.php?tuslama=${tuslama}&id=${MSTUF}');
PlayBack('tesekkurler');
Hangup;
end;
- ${XPLAY}
- İstekteki
filesesini okur. - ${MSTUF}
- İstekteki
ufverisini çeker.
Tüm script komutları (Read, PlayBack, Dial, API…) ve örnekleri: IVR script dokümanı.
İki numarayı görüştürme
İki numarayı, birbirinin numarasını görmeden santral üzerinden konuşturur.
https://{site-adiniz}/?username={kullanıcı}&password={api_şifresi}&action=callback&number1={telefon1}&number2={telefon2}&dp={arama_planı}&uf={taşınacak_veri}Çağrı sonlandırma
Devam eden bir çağrıyı kanal kimliğiyle kapatır. Kanalı aktif aramalar ya da çağrı detayları ucundan alırsınız.
https://{site-adiniz}/?username={kullanıcı}&password={api_şifresi}&action=hangupcall&channel={kanal}Çağrı bilgisi gönderme
Santralden geçen çağrıların bilgisini kendi uygulamanıza POST eder. Panelde tanımlanan URL'e çağrı başında ve sonunda istek gider; URL içindeki değişkenler santral tarafından doldurulur.
https://uygulamaniz.com/cagri?arayan={src}&aranan={dst}&kanal={chanid}https://uygulamaniz.com/kapanis?durum={status}&sure={duration}&kanal={chanid}- {src} · {dst}
- Arayan ve aranan numara.
- {chanid}
- Çağrının benzersiz kimliği; ses kaydı vb. çekmek için kullanılır.
- {status}
- Sonuç: ANSWER, BUSY, NOANSWER, CANCEL, CONGESTION.
- {duration}
- Çağrı süresi (sn).
Hedef URL'de DID numarası boş bırakılırsa santralde kayıtlı tüm numaralarda POST çalışır.
Metni sese çevirme
Santral IVR betiğinde metni anlık seslendirir.
procedure TTS;
begin
TTS('Merhaba Mehmet Bey, bu bir test mesajıdır.');
end;
Otomatik SMS
GET ya da POST ile SMS gönderir. IVR betiğinden ya da kendi sunucunuzdan çağrılabilir; örneğin cevapsız çağrıda arayan numaraya otomatik dönüş SMS'i.
https://websms.{site-adiniz}/get_api.php?username={kullanıcı}&password={api_şifresi}&receivers=538400XXXX&text=Mesaj%20metni&originator=Başlık| Parametre | Zorunlu | Açıklama |
|---|---|---|
| username | Evet | Kullanıcı adı. |
| password | Evet | API şifresi. |
| receivers | Evet | Alıcı GSM numaraları. Çoklu için ,; rapor takibi için id:numara. |
| text | Evet | SMS metni. En çok 1080 karakter. |
| originator | Evet | SMS başlığı (onaylı gönderici adı). |
| international | Hayır | 1 uluslararası, 0/boş yurt içi. |
| unicode | Hayır | 1 Unicode, 8 Türkçe, 0/boş standart GSM. |
| delivery_time | Hayır | İleri tarih Y-m-d H:i:s. Boşsa hemen. |
| response_type | Hayır | html ya da varsayılan json. |
Başarılı yanıt
{
"status": true,
"data": {
"sms_id": 13264888,
"sms_count": 1,
"amount": "0.0060",
"credit": "5202.2040",
"valid_receiver": 1,
"invalid_receiver": 0
}
}
Hatalı yanıt
{
"status": false,
"error": { "code": 2, "message": "Invalid username or password" }
}
Hata kodları
| Kod | Anlamı |
|---|---|
| 1 | Zorunlu parametre eksik (kullanıcı, şifre, alıcılar, metin, başlık). |
| 2 | Geçersiz kullanıcı adı veya şifre. |
| 3 | Erişim reddedildi. |
| 4 | Başlıkta geçersiz karakter. |
| 5 | Başlık 3–11 karakter olmalı. |
| 6 | Başlık yasaklı. |
| 7 | Başlık sistemde yok. |
| 8 | Başlık onay bekliyor. |
| 10 · 11 | Alıcı bulunamadı / geçerli alıcı yok. |
| 12 | Mesaj metni boş. |
| 14 | Kredi yetersiz. |
| 15 | Teslim süresi geçersiz. |
| 16 · 99 | Sistem/bilinmeyen hata, tekrar deneyin. |
Bir uç beklediğiniz gibi çalışmıyorsa ya da yeni bir entegrasyon gerekiyorsa bize yazın.