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/sdkPakiet 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.
Zrozum koncepcjęShould I use a Bird SDK or call the API directly?Podążaj ścieżką naukiBuild your first integrationPrzewodnik wdrożeniowySend your first email
Uzyskaj brief wdrożeniowy