API · PL
API · PL

Pierwsze kroki

WprowadzenieSzybki startUwierzytelnianiePodstawowe pojęcia

Przewodniki

Przesyłanie rozmówPobieranie wynikówWebhookiStronicowanie i wyszukiwanie

Informacje szczegółowe

BłędyLimity żądań i rozliczenia
Dokumentacja referencyjna API
aftertalk.coCennikKontaktEnglish

Pobieranie wyników

Śledź zadanie przetwarzania do końca i odczytaj analizę.

Przesłanie zwraca identyfikator zadania przetwarzania. Możesz odpytywać API o to zadanie przetwarzania, aż osiągnie status końcowy, albo zarejestrować webhook i dostać powiadomienie, gdy będzie gotowe — webhooki lepiej sprawdzają się w stale działającej integracji, a odpytywanie jest prostsze w jednorazowym skrypcie.

curl "$BASE/v1/projects/$PROJECT_ID/calls/jobs/$JOB_ID" \
  -H "X-API-Key: $AFTERTALK_KEY"

Statusy zadań przetwarzania

StatusZnaczenie
PENDINGW kolejce, jeszcze nierozpoczęte
PROCESSINGTrwa transkrypcja i analiza
COMPLETEDGotowe — pole transcriptId jest wypełnione
FAILEDPrzetwarzanie nie powiodło się; errorMessage podaje przyczynę
BILLING_FAILEDWyniki są zapisane i można je odczytać, ale nie udało się zarejestrować zużycia

PENDING i PROCESSING to jedyne statusy, które nie są końcowe. Przy każdym innym zakończ odpytywanie.

BILLING_FAILED nie jest błędem przetwarzania: transkrypcja i analiza są zapisane, a pole transcriptId jest wypełnione, więc przy odczycie wyników traktuj ten status jak COMPLETED. Sygnalizuje problem z rozliczeniem do rozwiązania w aplikacji, a nie powód do ponownego przesłania.

Rozsądne jest odpytywanie co 5 sekund z górnym limitem czasu — czas przetwarzania rośnie wraz z długością nagrania.

import os, time, requests

BASE = "https://app.aftertalk.co/api"
headers = {"X-API-Key": os.environ["AFTERTALK_KEY"]}
TERMINAL = {"COMPLETED", "FAILED", "BILLING_FAILED"}

def wait_for_job(project_id, job_id, timeout_s=900):
    """Returns the job once it's terminal. FAILED is terminal too, so check job["status"]."""
    deadline = time.time() + timeout_s
    while True:
        job = requests.get(
            f"{BASE}/v1/projects/{project_id}/calls/jobs/{job_id}", headers=headers
        ).json()
        if job["status"] in TERMINAL:
            return job
        if time.time() > deadline:
            raise TimeoutError(f"job {job_id} still {job['status']}")
        time.sleep(5)

# The ids the quickstart exports.
job = wait_for_job(os.environ["PROJECT_ID"], os.environ["JOB_ID"])
if job["status"] == "FAILED":
    raise RuntimeError(f"Processing failed: {job.get('errorMessage')}")

Odczyt rozmowy

Gdy pole transcriptId jest wypełnione:

curl "$BASE/v1/projects/$PROJECT_ID/calls/$TRANSCRIPT_ID" \
  -H "X-API-Key: $AFTERTALK_KEY"

Otrzymujesz transkrypcję podzieloną na wypowiedzi mówców (turns) oraz analizę, którą generuje Twój projekt — podsumowanie, wydźwięk, kategorię, ewentualną analizę według szablonu i liczbę zadań. Same zadania pobierasz z endpointów zadań (action items). Pełny schemat odpowiedzi znajdziesz w dokumentacji referencyjnej API.

Pola analizy są opcjonalne, nawet przy sukcesie

Transkrypcja jest wymagana; każdy kolejny krok analizy jest wykonywany w miarę możliwości: nawet w pomyślnie przetworzonej rozmowie niektórych pól może brakować, więc przed odczytem zawsze sprawdzaj, czy pole istnieje. Jeśli klasyfikacja lub podsumowanie nie powiedzie się dla jednej rozmowy, zadanie przetwarzania i tak się zakończy z zapisaną transkrypcją, a brakować będzie tylko tego konkretnego pola.

Nigdy nie zakładaj, że pole analizy istnieje tylko dlatego, że zadanie przetwarzania ma status COMPLETED. Przed odczytem sprawdzaj, czy pole istnieje — call.summary?.summary?.executiveSummary, a nie call.summary.summary.executiveSummary — inaczej jedna nietypowa rozmowa zepsuje Twoją integrację.

Pobieranie nagrania

GET /calls/{id}/audio zwraca metadane i link do zapisanego nagrania, np. dla odtwarzacza lub kopii archiwalnej.

Przesyłanie rozmów

Formaty, role mówców, limity rozmiaru i obsługa duplikatów.

Webhooki

Otrzymuj powiadomienie, gdy rozmowa jest gotowa, zamiast odpytywać API.

Na tej stronie

Statusy zadań przetwarzaniaOdczyt rozmowyPola analizy są opcjonalne, nawet przy sukcesiePobieranie nagrania