TypeScript SDK
@messagebird/sdk adalah SDK TypeScript resmi untuk Bird API. Pustaka ini sepenuhnya bertipe, hanya ESM, dan siap untuk edge. Pustaka ini berjalan di Node.js 20.3+ dan runtime edge modern (Cloudflare Workers, Vercel Edge, Deno) menggunakan API standar web (fetch, AbortSignal, Web Crypto). Halaman ini membahas klien. Untuk mengirim email dengan SDK, mulai dari panduan cepat email TypeScript.
Instal
Contoh kode
npm install @messagebird/sdk
# pnpm add @messagebird/sdk
# yarn add @messagebird/sdk
# bun add @messagebird/sdkPaket ini dipublikasikan sebagai @messagebird/sdk di npm, dari messagebird/bird-sdk-typescript.
Buat klien
Contoh kode
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)
});Hanya apiKey yang wajib. Region disimpulkan dari prefiks bk_{region}_ pada kunci (kunci bk_eu1_… diarahkan ke https://eu1.platform.bird.com), sehingga sebagian besar klien dibuat hanya dengan kunci. Lihat inferensi region untuk aturan resolusinya. Anda juga dapat mengatur default channel saat konstruksi (misalnya email: { from: "hello@acme.com" } membuat from opsional di setiap pengiriman) dan kunci rahasia penandatanganan webhook melalui webhooks: { secret }.
Panggilan pertama
Contoh kode
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 langsung mengembalikan hasil API, yang dalam contoh ini berupa pesan email beserta ID em_*-nya. Untuk panduan yang dapat dijalankan, ikuti panduan cepat TypeScript.
Desain dua lapis
SDK memiliki lapisan yang di-generate dan lapisan yang ditulis manual. Tipe wire dan plumbing HTTP tingkat rendah di-generate dari spesifikasi OpenAPI Bird, menjaga bentuk request dan response tetap selaras dengan kontrak. Lapisan yang ditulis manual menyediakan bird.email.send(...), coba lagi, idempotensi, paginasi, dan error. Field wire diteruskan dalam snake_case (category, created_at); identifier yang didefinisikan SDK, seperti nama method dan idempotencyKey, menggunakan camelCase. SDK Go dan Python berbagi arsitektur ini. Lihat konsep SDK untuk detail selengkapnya.
Idempotensi dan coba lagi otomatis
Setiap mutasi (POST, PUT, PATCH, DELETE) mendapatkan header Idempotency-Key yang dibuat otomatis. SDK menggunakan kembali kunci tersebut pada setiap percobaan ulang agar permintaan yang cocok dapat memutar ulang respons yang disimpan. Untuk kunci khusus di antara panggilan SDK terpisah dan batas pemutaran ulang, lihat Idempotensi.
Coba lagi aktif secara default (maxRetries: 2). Klien mencoba ulang kegagalan jaringan, timeout per percobaan, dan status transien (408, 429, 500, 502, 503, 504) dengan exponential backoff berjitter, menghormati header Retry-After dari server jika ada. Kegagalan deterministik (4xx seperti 401, 404, 422) tidak pernah dicoba ulang. Atur maxRetries: 0 untuk menonaktifkan, atau timpa per panggilan. Siklus lengkapnya dijelaskan di konsep SDK.
Error
Method melempar error saat gagal dengan hierarki bertipe yang Anda persempit menggunakan instanceof. BirdError adalah root-nya. BirdAPIError mencakup setiap respons error dari server, dengan satu subclass per type error. Termasuk di antaranya BirdAuthError (401), BirdRateLimitError (429, dengan retryAfter), BirdValidationError (422, dengan details per field), dan BirdPayloadTooLargeError (413). Kegagalan transport tanpa respons HTTP menggunakan class sejenis BirdConnectionError dan BirdTimeoutError.
Contoh kode
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;
}Setiap BirdAPIError membawa statusCode, type, code (kode error E##### yang stabil), requestId, dan docUrl. Cabangkan berdasarkan class (atau type kasar) untuk alur kontrol; gunakan code saat Anda perlu mencocokkan satu kegagalan spesifik. Lebih suka bercabang berdasarkan nilai daripada menangkap? Setiap panggilan juga memiliki .safe():
Contoh kode
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);Webhook
bird.webhooks.unwrap(rawBody, headers) memverifikasi tanda tangan Standard Webhooks dari pengiriman masuk dan mengembalikan event bertipe dan terdiskriminasi. Berikan body request mentah karena parsing dan serialisasi ulang mengubah byte yang ditandatangani. Tanda tangan tidak valid, timestamp kedaluwarsa, atau header yang salah format akan melempar BirdWebhookVerificationError. Lihat verifikasi webhook untuk kontrak lintas SDK dan Webhook untuk pengaturan platform.
Langkah selanjutnya
- Panduan cepat email: Gunakan send, get, list, default channel, dan bentuk response.
- Konsep SDK: Pelajari idempotensi, coba lagi, paginasi, region, dan webhook di seluruh SDK Bird.
- Referensi API: Tinjau HTTP API yang mendasarinya. bird.request<T>() menjangkau endpoint yang belum dicakup oleh permukaan bertipe, dengan autentikasi, coba lagi, dan idempotensi yang sama.
Sumber daya terkait
Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini. Sumber daya tersedia dalam bahasa Inggris.
Pahami konsepnyaShould I use a Bird SDK or call the API directly?Ikuti jalur pembelajaranBuild your first integrationPanduan implementasiSend your first email
Dapatkan ringkasan implementasi