Çağrı Merkezi

fs

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

İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 2 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…"
}
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ı?