Sign inGet started

Zdarzenia głosowe

Bird emituje zdarzenia webhook, gdy połączenie się rozpoczyna, zostaje odebrane i kończy. Używaj ich do aktualizacji swoich systemów bez odpytywania. Szczegóły dotyczące subskrypcji, sygnatur, ponowień i odtwarzania znajdziesz w sekcji Webhooki.
Ścieżka połączenia przez typy zdarzeń:
  1. voice_call.initiated: Bird przyjął żądanie zestawienia połączenia (SIP INVITE) i rozpoczął trasowanie połączenia
  2. voice_call.answered: wywoływany numer odebrał. Tylko odebrane połączenia generują to zdarzenie
  3. voice_call.ended: połączenie się zakończyło, a zdarzenie zawiera wynik
voice_call.initiated potwierdza, że połączenie istnieje, natomiast voice_call.ended raportuje jego wynik. Połączenie, które Bird odrzuca po przyjęciu INVITE, nadal emituje voice_call.ended z status: "failed" i sip_response_code: 503.
Zdarzenie type to otwarty enum: Bird może z czasem dodawać nowe typy, więc obsługuj te, które rozpoznajesz, a pozostałe ignoruj, zamiast traktować nieznany typ jako błąd.

Koperta zdarzenia

Zdarzenia głosowe przychodzą w tej samej zagnieżdżonej kopercie co każde inne zdarzenie Bird, opisanej w przewodniku po webhookach: type, timestamp oraz obiekt data specyficzny dla danego typu. Tożsamość zdarzenia znajduje się w nagłówku webhook-id HTTP, a nie w treści.
PoleOpis
typeJeden z trzech typów na tej stronie, na przykład voice_call.ended
timestampKiedy zdarzenie wystąpiło (RFC 3339). Sortuj po tym polu, nigdy po kolejności dostarczenia
dataŁadunek specyficzny dla zdarzenia, zawsze zawierający te same pola identyfikujące połączenie
Pole data każdego zdarzenia głosowego zawiera te same pola identyfikujące, służące do korelacji. Oba numery używają formatu E.164: wiodący +, kod kraju i numer krajowy.
PoleOpis
call_idIdentyfikator rekordu połączenia (vcl_…), ten sam, który widnieje w Logu połączeń
session_idWspółdzielony przez każdą odnogę przekierowanego lub wielostronnego połączenia (vcs_…). Null, gdy korelacja sesji nie ma zastosowania
workspace_idObszar roboczy, do którego należy połączenie
directionoutbound dla połączeń wykonanych przez twoje urządzenie
fromNumer dzwoniącego
toWywoływany numer

voice_call.initiated

Bird odebrał INVITE i rozpoczął trasowanie.
Przykład kodu
{
  "type": "voice_call.initiated",
  "timestamp": "2026-06-10T14:30:00Z",
  "data": {
    "call_id": "vcl_01krdgeqcxet5s7t44vh8rt9mg",
    "session_id": "vcs_01krdgeqcxet5s7t44vh8rt9mh",
    "workspace_id": "wsp_01krdgeqcxet5s7t44vh8rt9mj",
    "direction": "outbound",
    "from": "+14155551234",
    "to": "+16505559876"
  }
}

voice_call.answered

Odbiorca odebrał i rozpoczął się czas podlegający rozliczeniu. Nieodebrane połączenie nie generuje tego zdarzenia.
Ładunek to pola identyfikujące połączenie, które zawiera każde zdarzenie głosowe, z timestamp ustawionym na moment odebrania.

voice_call.ended

Połączenie się zakończyło. To zdarzenie dodaje wynik:
PoleOpis
statusSposób zakończenia: answered, no_answer, failed, rejected lub unknown (zobacz Statusy)
sip_response_codeKońcowy kod SIP połączenia, na przykład 200 lub 486. Połączenie odrzucone Bird niesie 503; null, gdy nie zarejestrowano kodu końcowego
duration_msCałkowity czas połączenia w milisekundach, od momentu odebrania połączenia przez Bird do rozłączenia
billable_msCzas rozmowy w milisekundach, więc połączenie, którego nikt nie odebrał, zwraca zero
Przykład kodu
{
  "type": "voice_call.ended",
  "timestamp": "2026-06-10T14:31:05Z",
  "data": {
    "call_id": "vcl_01krdgeqcxet5s7t44vh8rt9mg",
    "session_id": "vcs_01krdgeqcxet5s7t44vh8rt9mh",
    "workspace_id": "wsp_01krdgeqcxet5s7t44vh8rt9mj",
    "direction": "outbound",
    "from": "+14155551234",
    "to": "+16505559876",
    "status": "answered",
    "sip_response_code": 200,
    "duration_ms": 65000,
    "billable_ms": 60000
  }
}
Rekord połączenia zawiera dwa szczegóły, których to zdarzenie nie uwzględnia: powód odrzucenia i koszt. Otwórz połączenie w logu połączeń, aby odróżnić odrzucenie Bird od awarii operatora. Koszt pojawia się po zakończeniu taryfikacji.

Bezpieczna konsumpcja zdarzeń

  • Deduplikuj po webhook-id. Bird dostarcza co najmniej raz, a zdarzenie initiated połączenia może zostać opublikowane więcej niż raz, gdy ponowienie sygnalizacyjne je odtworzy. To samo połączenie, ten sam etap, ten sam webhook-id, więc klucz oparty na nim eliminuje duplikat.
  • Nie polegaj na kolejności. Dostarczenia nie są uporządkowane, więc answered może dotrzeć do ciebie po ended. Sortuj po timestamp i pozwól, aby zdarzenie dostarczone później z wcześniejszym znacznikiem czasu przegrało.
  • Traktuj ended jako jedyny wiarygodny wynik. To zdarzenie zawiera status i czasy trwania i to na nim opieraj swoje rekordy.
  • Uzgadniaj z rekordami połączeń. Zdarzenia dostarczają bieżące aktualizacje, natomiast log połączeń przechowuje rekord połączenia. Eksportuj połączenia jako CSV do uzgodnień.

Następne kroki

StronaCo obejmuje
Webhooki i zdarzeniaKonfiguracja endpointu, weryfikacja sygnatury, ponowienia i odtwarzanie
Log połączeńWszystkie pola rekordu połączenia i eksport CSV

Powiązane zasoby

Kontynuuj z dokumentacją, przewodnikami i przykładami dotyczącymi tego tematu. Zasoby są w języku angielskim.

Uzyskaj brief wdrożeniowy