Sign inGet Started

TypeScript SDK

@messagebird/sdk to oficjalny SDK TypeScript dla Bird API. Jest w pełni typowany, obsługuje wyłącznie ESM i działa na krawędzi sieci. Wymaga Node.js 20.3+ oraz nowoczesnych środowisk edge (Cloudflare Workers, Vercel Edge, Deno) i korzysta ze standardowych API webowych (fetch, AbortSignal, Web Crypto). Ta strona opisuje klienta. Aby wysłać e-mail za pomocą SDK, zacznij od szybkiego startu z e-mailem w TypeScript.

Instalacja

Przykład kodu
npm install @messagebird/sdk
# pnpm add @messagebird/sdk
# yarn add @messagebird/sdk
# bun add @messagebird/sdk
Pakiet jest opublikowany jako @messagebird/sdk na npm, z repozytorium messagebird/bird-sdk-typescript.

Tworzenie klienta

Przykład kodu
const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY!,
  region: "eu1", // optional; overrides the region from the key prefix
  baseUrl: "http://localhost:8080", // optional; overrides region (local or self-hosted)
  timeout: 60_000, // per-attempt timeout in ms (default 60_000)
  maxRetries: 2, // retry budget for transient failures (default 2)
});
Wymagany jest tylko apiKey. Region jest ustalany na podstawie prefiksu bk_{region}_ klucza (klucz bk_eu1_… kieruje do https://eu1.platform.bird.com), więc większość klientów tworzy się, podając sam klucz. Reguły rozwiązywania opisuje sekcja wnioskowanie regionu. Przy tworzeniu klienta możesz też ustawić domyślne wartości kanału (na przykład email: { from: "hello@acme.com" } sprawia, że from jest opcjonalne przy każdym wysyłaniu) oraz sekret do podpisywania webhooków przez webhooks: { secret }.

Pierwsze wywołanie

Przykład kodu
const msg = await bird.email.send({
  from: { email: "onboarding@messagebird.dev", name: "Bird" },
  to: ["delivered@messagebird.dev"],
  subject: "Hello from Bird",
  html: "<p>My first Bird email.</p>",
});
console.log(msg.id, msg.status); // "em_…", "accepted"
await zwraca bezpośrednio wynik API, który w tym przykładzie jest wiadomością e-mail z jej identyfikatorem em_*. Aby przejść pełny scenariusz krok po kroku, skorzystaj z szybkiego startu z TypeScript.

Dwuwarstwowa architektura

SDK ma warstwę generowaną i warstwę utrzymywaną ręcznie. Typy przesyłane po sieci i niskopoziomowa infrastruktura HTTP są generowane ze specyfikacji OpenAPI Bird, dzięki czemu kształty żądań i odpowiedzi pozostają zgodne z kontraktem. Warstwa ręczna zapewnia bird.email.send(...), ponowne próby, idempotentność, paginację i obsługę błędów. Pola przesyłane po sieci stosują konwencję snake_case (category, created_at); identyfikatory zdefiniowane w SDK, takie jak nazwy metod i idempotencyKey, używają camelCase. SDK Go i Python mają tę samą architekturę. Szczegóły znajdziesz w sekcji koncepcje SDK.

Automatyczna idempotentność i ponowne próby

Każda operacja modyfikująca (POST, PUT, PATCH, DELETE) otrzymuje automatycznie wygenerowany nagłówek Idempotency-Key. SDK używa tego samego klucza przy każdym ponowieniu, dzięki czemu zgodne żądania mogą otrzymać zachowaną odpowiedź. Informacje o własnych kluczach między oddzielnymi wywołaniami SDK i limitach ponownego zwracania odpowiedzi znajdziesz w sekcji Idempotencja.
Ponowne próby są domyślnie włączone (maxRetries: 2). Klient ponawia żądania przy błędach sieciowych, przekroczeniach limitu czasu na próbę oraz stanach przejściowych (408, 429, 500, 502, 503, 504) ze zrandomizowanym wykładniczym wycofywaniem, uwzględniając nagłówek Retry-After serwera, jeśli jest obecny. Błędy deterministyczne (4xx, takie jak 401, 404, 422) nigdy nie są ponawiane. Ustaw maxRetries: 0, aby wyłączyć ponowne próby, lub nadpisz je per wywołanie. Pełny cykl życia opisuje sekcja koncepcje SDK.

Błędy

Metody rzucają wyjątek przy niepowodzeniu, z typowaną hierarchią, którą zawężasz za pomocą instanceof. BirdError jest korzeniem. BirdAPIError obejmuje każdą odpowiedź z błędem od serwera, z jedną podklasą na każdy type błędu. Należą do nich BirdAuthError (401), BirdRateLimitError (429, z retryAfter), BirdValidationError (422, z details per pole) i BirdPayloadTooLargeError (413). Błędy transportu bez odpowiedzi HTTP używają klas siostrzanych BirdConnectionError i BirdTimeoutError.
Przykład kodu
import { BirdRateLimitError, BirdValidationError, BirdAPIError } from "@messagebird/sdk";

try {
  await bird.email.send({
    from: { email: "onboarding@messagebird.dev", name: "Bird" },
    to: ["delivered@messagebird.dev"],
    subject: "Hello from Bird",
    html: "<p>My first Bird email.</p>",
  });
} catch (err) {
  if (err instanceof BirdRateLimitError) console.log(`rate limited; retry in ${err.retryAfter}s`);
  else if (err instanceof BirdValidationError) console.error(err.details);
  else if (err instanceof BirdAPIError) console.error(err.code, err.requestId);
  else throw err;
}
Każdy BirdAPIError zawiera statusCode, type, code (stabilny kod błędu E#####), requestId i docUrl. Rozgałęziaj przepływ na podstawie klasy (lub ogólnego type); użyj code, gdy potrzebujesz dopasować jeden konkretny błąd. Wolisz rozgałęziać na wartości zamiast przechwytywać wyjątek? Każde wywołanie udostępnia też .safe():
Przykład kodu
const { data, error } = await bird.email
  .send({
    from: { email: "onboarding@messagebird.dev", name: "Bird" },
    to: ["delivered@messagebird.dev"],
    subject: "Hello from Bird",
    html: "<p>My first Bird email.</p>",
  })
  .safe();
if (error) console.error(error.message);
else console.log(data.id);

Webhooki

bird.webhooks.unwrap(rawBody, headers) weryfikuje podpis Standard Webhooks przychodzącego dostarczenia i zwraca typowane, dyskryminowane zdarzenie. Przekaż surowe ciało żądania, ponieważ parsowanie i ponowna serializacja zmieniają podpisane bajty. Nieprawidłowy podpis, nieaktualny znacznik czasu lub zniekształcone nagłówki powodują rzucenie BirdWebhookVerificationError. Kontrakt obowiązujący między SDK opisuje sekcja weryfikacja webhooków, a konfigurację platformy sekcja Webhooki.

Następne kroki

  • Szybki start z e-mailem: użyj send, get, list, domyślnych wartości kanału i kształtów odpowiedzi.
  • Koncepcje SDK: poznaj idempotentność, ponowne próby, paginację, regiony i webhooki we wszystkich SDK Bird.
  • Referencja API: przejrzyj bazowe HTTP API. bird.request<T>() umożliwia dostęp do endpointów, których typowana powierzchnia jeszcze nie obsługuje, z tą samą autoryzacją, ponownymi próbami i idempotentością.

Powiązane zasoby

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

Uzyskaj brief wdrożeniowy