Çağrı Merkezi

fs

3 uç · /api/callcenter/v1/fs

İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 3 ucun elle doğrulanmış gövde örneği henüz yok; o uçlarda iskelet gövdesizdir — uydurma bir alan yazmıyoruz.

GET/internal/fs/sound/{tenant}/{file}

GET /internal/fs/sound/{tenant}/{key}.{ext} — FreeSWITCH mod_httapi bunu çeker.

DahiliYol parametresi: tenantfile

**Kimlik kapısı iki katmanlı, Basic-auth YOK — bilinçli:** (a) kenarda remote_ip allowlist (yalnız medya VM'i), (b) HMAC-türetilmiş, uydurulamaz cache_key. Basic-auth eklenemez çünkü mod_httapi kimlik bilgisini ancak URL'in içinde (https://user:pass@host/…) taşır ve bu paylaşılan gizliyi FreeSWITCH konsol loglarına düşürürdü. Kimlik bilgisi taşımayan, tek bir dosyaya yetkili, log'a düşse bile yeniden kullanılamayan yol daha güvenlidir. Yanıt gövdesi hiçbir kiracı verisi TÜRETMEZ: satır yoksa 404, varsa yalnız o kiracının kendi baytı (platform havuzu + AÇIK tenant_id filtresi — fs_xml ile aynı desen).

İstek
curl -X GET "https://{slug}.call.blesyum.app/internal/fs/sound/<tenant>/<file>" \
  -H "X-Blesyum-Internal: <imza>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/internal/fs/trunks

GET /internal/fs/trunks — medya sunucusunun eşitleme ajanı istenen gateway kümesini okur.

Dahili

Yalnız lisansı telefonu AÇIK kiracıların hatları döner: aboneliği biten kiracının hattı bir sonraki turda FreeSWITCH'ten SÖKÜLÜR (yoksa ödemeyen kiracı dış hattı kullanmaya devam ederdi). Yanıt parolaları AÇIK taşır — yol yalnız WireGuard tünelindedir (Caddy bind 10.44.0.1 + remote_ip 10.44.0.2) ve Basic-auth ister.

İstek
curl -X GET "https://{slug}.call.blesyum.app/internal/fs/trunks" \
  -H "X-Blesyum-Internal: <imza>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/internal/fs/xml

Yalnız .81 FreeSWITCH mod_xml_curl çağırır. IP-allowlist = edge (Caddy .194); burada Basic-auth

Dahili

(paylaşılan secret CALLCENTER_FS_XML_BASIC, "user:pass"). Envelope/3-kapı YOK (FS ham XML bekler). XML-injection yapısal kapısı: directory_xml HİÇBİR girdiyi escape etmez — bu yüzden yalnız (a) domain UUID olarak PARSE edilip (geçersiz → not-found) hem sorguda hem yanıtta o doğrulanmış-parse edilmiş domain string'i kullanılır, (b) user yalnız DB'de GERÇEK bir extension satırıyla EŞLEŞTİKTEN SONRA directory_xml'e geçirilir (extension'lar oluşturulurken 2-6 haneli ascii-digit'e kısıtlı → eşleşen user yapısal olarak XML-güvenli; eşleşmeyen/hayalet user ASLA directory_xml'e ulaşmaz).

İstek
curl -X POST "https://{slug}.call.blesyum.app/internal/fs/xml" \
  -H "X-Blesyum-Internal: <imza>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
Bu sayfa işine yaradı mı?