A GET /api/v1/voice/calls/{id} visszaadja a hívás állapotát, időtartamát, a felszámított krediteket, az összefoglalót, az elemzést és az átiratot. A hívásokat a GET /api/v1/voice/calls?agent_id=&status=&channel=&user_id=&page= listázza (user_id: a személyhez tartozó saját azonosítód, egy webes hívástokenből). A turns a hívás fordulónkénti hibakeresési naplója: hová ment az idő attól kezdve, hogy a hívó befejezte a beszédet, addig, amíg meghallotta a választ, ezredmásodpercben — waitMs (beszédvég), sttMs (felismerés), llmMs (a modell első szava, függvényfordulónként még egy), ttsMs (a hang első hangja), firstAudioMs (a válasz meghallása) — a meghívott függvényekkel, megszakításokkal és hibákkal. A hívás oldala is megmutatja.
A recording_enabled esetén minden hívás kétcsatornás WAV-ként kerül rögzítésre: a hívó balra, az ügynök jobbra, a hívás mintavételi frekvenciáján. A recording_consent: "announce" esetén az ügynök először elmondja, hogy a hívást rögzítik; "ask" esetén megkérdezi, és a felvétel csak akkor marad meg, ha a hívó beleegyezik (a válasz hiánya nemnek számít); "none" esetén semmit sem mond. Nézd meg, mit ír elő a jog ott, ahol te és a hívóid vagytok.
A felvételek az EvaSay tárhelyén vagy a saját S3-kompatibilis bucketedben (AWS S3, Cloudflare R2, Google Cloud Storage, Supabase, MinIO) tárolódnak, amelyet az Integrációk → Webhookok és értesítések → Felvételek tárolása alatt állítasz be. A hívást futtató worker közvetlenül a bucketbe tölti fel a fájlt. A GET /api/v1/voice/calls/{id} a felvétel mentése után egy órán át érvényes recordingUrl értéket ad vissza, valamint a recording.status értéket (recording, stored, declined vagy failed).
A DELETE /api/v1/voice/calls/{id} töröl egy befejezett hívást az átirattal, a felvétellel (az EvaSay tárhelyén vagy a saját bucketjében), az elemzéssel és a webhook-kézbesítésekkel együtt. A felhasznált Credits a kredittörténetben marad. A még nem törölhető hívás 409 választ ad code call_not_deletable_yet értékkel: még tart vagy épp most ért véget, még elszámolás alatt áll, a felvétele talán még feltöltés alatt van, vagy olyan Credits-tartozása van, amelyet az egyenleg nem fedezett (előbb töltsön fel Credits-et).
Ha valaki kéri az adatai törlését, a POST /api/v1/voice/calls/delete-by-caller a { "phone_number": "+14155550123" } értékkel törli az ezzel a számmal folytatott összes hívást (bejövő hívásnál a hívó számát, kimenőnél a hívott számot), a { "user_id": "..." } értékkel pedig az összes webes hívást, amelynek tokenjében ez a user_id szerepelt. A válasz { "deleted": 12, "kept_back": { "settling": 1 }, "more": false }: kérésenként legfeljebb 200 hívás, ezért ismételje, amíg a more értéke true, később pedig a kept_back hívásai miatt is. Ha a szám a hívástiltó listán van, ott marad. Az irányítópulton ugyanezt a Hívások → Hívó adatainak törlése végzi.