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

Szybki start

Prześlij swoją pierwszą rozmowę i odczytaj transkrypcję.

Prześlij nagranie, poczekaj na jego przetworzenie i odczytaj wynik. Potrzebujesz klucza API — utwórz go w aplikacji w sekcji Organizacja → Ustawienia → Klucze API (zobacz uwierzytelnianie) — oraz nagrania; w przykładach używamy pliku call.wav. Kroki w powłoce wymagają curla w wersji 7.76 lub nowszej oraz jq do wyciągania identyfikatorów z odpowiedzi.

1. Ustaw klucz i wybierz projekt

export AFTERTALK_KEY="at_live_..."
export BASE="https://app.aftertalk.co/api"

# The first project in your organization. GET /v1/projects lists them all.
export PROJECT_ID=$(curl -sS --fail-with-body "$BASE/v1/projects" \
  -H "X-API-Key: $AFTERTALK_KEY" | jq -r '.[0].id')
echo "$PROJECT_ID"

2. Prześlij nagranie

UPLOAD=$(curl -sS -X POST "$BASE/v1/projects/$PROJECT_ID/calls/upload" \
  -H "X-API-Key: $AFTERTALK_KEY" \
  -F "file=@call.wav;type=audio/wav")
export JOB_ID=$(echo "$UPLOAD" | jq -r '.jobId // .existingJobId')

if [ "$JOB_ID" = null ]; then
  echo "Upload failed: $(echo "$UPLOAD" | jq -r '.message')"
else
  echo "$JOB_ID"
fi

Weryfikacja formatu odczytuje Content-Type części formularza z plikiem, więc określ go przez ;type= — w przeciwnym razie curl wyśle application/octet-stream, co zostanie odrzucone z kodem 400. Jeśli to samo nagranie jest już w projekcie, API zwraca 409, a identyfikator pierwotnego zadania przetwarzania podaje w polu existingJobId — właśnie po nie sięga filtr jq, gdy brakuje jobId. Odpowiedź z każdym innym błędem nie zawiera żadnego z tych pól, więc skrypt wypisuje wtedy message z API, zamiast kontynuować z wartością null.

{ "jobId": "8f14e45f-ea0f-4e21-9c1a-2b3c4d5e6f70", "status": "PENDING", "submittedAt": "2026-07-25T10:00:00Z" }

3. Poczekaj na przetworzenie

Odpytuj API o zadanie przetwarzania co kilka sekund, aż jego status nie będzie już PENDING ani PROCESSING:

while :; do
  JOB=$(curl -sS "$BASE/v1/projects/$PROJECT_ID/calls/jobs/$JOB_ID" \
    -H "X-API-Key: $AFTERTALK_KEY")
  STATUS=$(echo "$JOB" | jq -r '.status')
  [ "$STATUS" = PENDING ] || [ "$STATUS" = PROCESSING ] || break
  sleep 5
done

case "$STATUS" in
  COMPLETED | BILLING_FAILED)
    export TRANSCRIPT_ID=$(echo "$JOB" | jq -r '.transcriptId')
    echo "$STATUS $TRANSCRIPT_ID" ;;
  FAILED) echo "Processing failed: $(echo "$JOB" | jq -r '.errorMessage')" ;;
  *) echo "Request failed: $(echo "$JOB" | jq -r '.message')" ;;
esac

Zarówno COMPLETED, jak i BILLING_FAILED mają wyniki do odczytania. FAILED nie ma transkrypcji — errorMessage podaje przyczynę. Nieudane żądanie (błędny klucz, nieznane zadanie przetwarzania) zwraca treść błędu API, której status to kod statusu HTTP, więc ono również kończy pętlę. Pełną listę statusów znajdziesz na stronie Pobieranie wyników, a webhooki pozwalają całkowicie zrezygnować z odpytywania.

4. Odczytaj wynik

curl -sS --fail-with-body "$BASE/v1/projects/$PROJECT_ID/calls/$TRANSCRIPT_ID" \
  -H "X-API-Key: $AFTERTALK_KEY" \
  | jq '{title, durationS, summary: .summary.summary.executiveSummary}'

Pełna odpowiedź zawiera transkrypcję w polu turns — podzieloną na wypowiedzi przypisane do mówców — oraz analizy skonfigurowane w Twoim projekcie: summary, classification i templateAnalysis. Tworzenie analiz jest wykonywane 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.

Wszystkie kroki w jednym skrypcie

Te same cztery kroki, gotowe do zapisania i uruchomienia. Nieudane żądanie zatrzymuje skrypt, który wypisuje wiersz statusu z curla oraz treść błędu API:

quickstart.sh
#!/usr/bin/env bash
set -euo pipefail

BASE="https://app.aftertalk.co/api"
AUTH="X-API-Key: $AFTERTALK_KEY"

# 1. The first project in your organization.
PROJECT_ID=$(curl -sS --fail-with-body "$BASE/v1/projects" -H "$AUTH" | jq -r '.[0].id')

# 2. Upload. A 409 means this audio is already in the project; carry on with that job.
UPLOAD=$(curl -sS -X POST "$BASE/v1/projects/$PROJECT_ID/calls/upload" -H "$AUTH" \
  -F "file=@call.wav;type=audio/wav")
JOB_ID=$(echo "$UPLOAD" | jq -r '.jobId // .existingJobId')
if [ "$JOB_ID" = null ]; then
  echo "Upload failed: $(echo "$UPLOAD" | jq -r '.message')" >&2
  exit 1
fi

# 3. Poll until the job leaves PENDING / PROCESSING.
while :; do
  JOB=$(curl -sS --fail-with-body "$BASE/v1/projects/$PROJECT_ID/calls/jobs/$JOB_ID" -H "$AUTH")
  STATUS=$(echo "$JOB" | jq -r '.status')
  [ "$STATUS" = PENDING ] || [ "$STATUS" = PROCESSING ] || break
  sleep 5
done

if [ "$STATUS" = FAILED ]; then
  echo "Processing failed: $(echo "$JOB" | jq -r '.errorMessage')" >&2
  exit 1
fi

# 4. COMPLETED and BILLING_FAILED both have results.
TRANSCRIPT_ID=$(echo "$JOB" | jq -r '.transcriptId')
curl -sS --fail-with-body "$BASE/v1/projects/$PROJECT_ID/calls/$TRANSCRIPT_ID" -H "$AUTH" \
  | jq -r '.summary.summary.executiveSummary // "(no summary for this call)"'

Co dalej

  • Przesyłanie rozmów — formaty, role mówców, obsługa duplikatów
  • Pobieranie wyników — statusy zadań przetwarzania i częściowa analiza
  • Webhooki — otrzymuj powiadomienie, gdy rozmowa jest gotowa, zamiast odpytywać
  • Błędy — co oznaczają kody statusu HTTP

Wprowadzenie

Przesyłaj rozmowy i odbieraj transkrypcje, analizy i wnioski przez HTTP.

Uwierzytelnianie

Klucze API organizacji i nagłówek X-API-Key.

Na tej stronie

1. Ustaw klucz i wybierz projekt2. Prześlij nagranie3. Poczekaj na przetworzenie4. Odczytaj wynikWszystkie kroki w jednym skrypcieCo dalej