Skip to content

TypeScript SDK

Klien resmi @wazapin/sdk — builder yang type-safe, auto-retry, pagination gampang, dan verifikasi webhook beres.

Updated View as Markdown

@wazapin/sdk itu klien resmi TypeScript buat API Wazapin. Mau kirim pesan pakai builder yang type-safe? Bisa. Biarin SDK yang nge-retry kalau gagal sementara? Beres. Paginasi pakai for await? Tinggal loop. Verifikasi signature webhook? Satu baris jadi. Semuanya jalan di fetch standar web — Node 20+, Bun, Deno, edge, semua masuk.

Builder yang type-safe

textMessage(), templateMessage(), dan helper lain ngembaliin input yang udah typed. Autocomplete di tiap field — nggak perlu ngintip docs terus.

Response ke-typed rapi

Request dan response auto-complete. Error-nya nongol di error — kamu handle pas udah siap naik production aja.

Aman buat di-retry

Otomatis retry kalau kena 429 dan 5xx pakai backoff. Tinggal kasih idempotencyKey buat pengiriman yang mungkin kamu retry.

Paginasi async

listPaginated() buat channel, contact, dan template. Pakai for await, biarin SDK yang ngabisin pagenya buat kamu.

Verifikasi webhook

@wazapin/sdk/webhooks ngecek signature Svix dan nge-parse payload event langsung di server kamu.

Jalan di mana aja

Cuma pakai fetch standar web. Node 20+, Bun, Deno, Cloudflare Workers, Vercel — mau pakai fetch custom juga bisa.

Install

npm i @wazapin/sdk

Butuh verifikasi webhook? Tambahin peer opsional svix:

npm install @wazapin/sdk svix

Syarat: Node 20+, ESM atau CJS. Type-nya udah include di package.

Hello, world

import { WazapinClient, textMessage } from "@wazapin/sdk";

const wazapin = new WazapinClient({
  apiKey: process.env.WAZAPIN_API_KEY!,
});

const { data: message } = await wazapin.messages.send(
  textMessage({
    channel_id: "wzp_ch_123",
    to: "6281234567890",
    body: "Hello from @wazapin/sdk",
  }),
);

console.log(message.id, message.status);

Udah, sesimpel itu: bikin client, pilih channel_id kamu, panggil method resource-nya.

Tata letak resource

Di Wazapin, hampir semua urusan kirim pesan itu scope-nya per channel (nomor WhatsApp kamu yang udah connect). Kasih channel_id tiap mau ngirim; list channel sekali di awal terus cache ID-nya.

wazapin                              ← root client
├── wazapin.messages                 ← send, get, status, read, react
├── wazapin.channels                 ← list, get, status
├── wazapin.contacts                 ← list, create, lookup, getByPhone
├── wazapin.templates                ← list, get, sync
├── wazapin.media                    ← upload, list, delete
├── wazapin.webhooks                 ← endpoints, deliveries, test
├── wazapin.apiKeys                  ← list, create, delete
├── wazapin.system                   ← health, version
└── wazapin.api                      ← raw OpenAPI client buat yang butuh advanced

Contoh yang sering kepake

// List channel yang udah connect — copy ID-nya buat integrasi kamu
const { data: channels } = await wazapin.channels.list({ limit: 20 });

// Kirim notifikasi pakai template
import { templateMessage } from "@wazapin/sdk";

await wazapin.messages.send(
  templateMessage({
    channel_id: "wzp_ch_123",
    to: "6281234567890",
    name: "order_shipped",
    language: "id",
    components: [{ type: "body", parameters: [{ type: "text", text: "ORD-42" }] }],
  }),
);

// Paginasi contact — nggak perlu ngurus page manual
for await (const contact of wazapin.contacts.listPaginated({ limit: 50 })) {
  console.log(contact.id);
}

Konfigurasi

new WazapinClient({
  apiKey: "wzp_...",              // wajib — atau set WAZAPIN_API_KEY
  baseUrl: "https://api.wazapin.com", // opsional — atau WAZAPIN_BASE_URL
  timeoutMs: 30_000,              // opsional, default 30s
  maxRetries: 3,                  // opsional, default 3 (429 / 5xx)
  fetch: customFetch,             // opsional, default globalThis.fetch
});

Mau lanjut ke mana?

Navigation

Type to search…

↑↓ navigate↵ selectEsc close