Pagkonekta ng iyong software sa WhatsApp
Ang API Management ang paraan kung paano nagpapadala ng WhatsApp messages ang ibang sistema — ang iyong billing software, ang iyong online store, ang sarili mong backend — sa pamamagitan ng WizMessage. Dito ka mag-iisyu ng API key para dito, dito mo sasabihin kung aling aprubadong WhatsApp template ang puwede nitong ipadala, at dito mo ito ituturo sa isang webhook para makabalik ang mga sagot. Dadaanan ng gabay na ito ang buong proseso, at pagkatapos ay idodokumento ang REST API na tatawagin ng iyong mga developer.
Ang dashboard
Kung saan matatagpuan ang iyong mga API key
Lahat ng key na na-isyu mo ay lalabas dito sa ilalim ng API Keys. Ipinapakita ng bawat row ang status ng key, ang public prefix nito (ang tanging bahagi ng key na muli mo pang makikita matapos mo itong gawin), at kung ilang calls na ang ginawa nito ngayong araw. Binubuksan ng "Manage" ang key; pinapahinto naman ng toggle ang key nang hindi ito binubura.


Isang key na hindi pa tapos ayusin
Ang key na walang naka-map na template ay may "Needs setup" badge. Kaya nitong mag-authenticate, pero hindi ito makakapagpadala ng template message hangga't wala kang ni-map na isa — kaya agad-agad mong nakikita ang isang hindi pa kumpletong integration sa halip na bumagsak ito mamaya sa mismong oras ng pagpapadala.

Gabay sa pag-setup
Hakbang 1 — Ano ang kinokonekta mo?
Binubuksan ng "Connect your software" ang isang wizard na may apat na hakbang. Magsimula sa pagpapangalan sa key batay sa sistemang gagamit nito, at piliin ang preset na tumutugma. Nagmumungkahi lang ang mga preset ng makatuwirang mga field name — nagmumungkahi ang billing ng invoice_number, amount, due_date, customer_name — hindi nila nililimitahan kung ano ang puwede mong i-map.


Hakbang 2 — Piliin ang mensahe
Pumili ng isa sa iyong mga aprubadong WhatsApp template. Nasa Meta nakatira ang mga template, hindi dito — direktang kinukuha ang listahang ito mula sa iyong nakakonektang WhatsApp account, at ang APPROVED na mga template lang ang puwedeng ipadala. Opsyonal ang hakbang na ito: laktawan ito kung plain text lang naman ang ipinapadala ng key, at mag-map na lang ng template mamaya.

Hakbang 3 — Saan dapat mapunta ang mga sagot?
Kapag may sumagot sa iyong mensahe, o may bumalik na delivery report, ipo-POST namin ito sa isang URL na kontrolado mo. Huwag na itong isama kung puro pagpapadala lang ang ginagawa ng iyong sistema. Puwede mo itong idagdag mamaya mula sa Webhooks tab ng key — walang permanente rito.

Hakbang 4 — Mag-go live
Ang pagpindot ng Next sa nakaraang hakbang ang siyang talagang gumagawa ng key — kumpirmasyon lang ang screen na ito. Kopyahin mo na ngayon ang tatlong value: minsan lang ipinapakita ang API key, ang API secret, at ang webhook signing secret, at hindi na ito mababawi pagkatapos. Kung mawala mo ang secret, kailangan mo itong i-rotate, na ibig sabihin ay kailangan mong i-update ang kahit anong sistemang gumagamit nito.

Pamamahala ng key
Overview
Kapag binuksan mo ang isang key, mapupunta ka sa Overview: kung ano ang puwede nitong gawin, gaano ito kabigat ginagamit, at ang mga endpoint na puwede nitong tawagin. Binabasa ang usage counts mula sa request log, kaya totoong traffic ang ipinapakita ng mga ito.


Isang key na kailangan pang i-setup
Ang key na walang naka-map na template ay bubukas sa Setup tab — ang parehong wizard, inline lang. Pansinin na iba ang mga tab kumpara sa nakaraang screenshot: hangga't wala pang kahit isang template ang key, hindi inaalok ang Templates at Webhooks, dahil wala pa silang bagay na puwedeng pagtrabahuhan.


Templates
Ang bawat card ay isang template na puwedeng ipadala ng key na ito. Ang body text ay ang mensahe ayon sa pagkaaproba nito sa Meta, at ang mga chip sa ilalim nito ang mga variable name na ibibigay ng iyong sistema. Nagpapadala ng test ang "Try it", habang gumagawa naman ang "Get code" ng handa nang request sa walong wika.


Pagbasa ng mga variable — ang isang bagay na dapat pagtuunan ng pansin
Tingnan ang payment_failed_alert card. Ang takbo ng mensahe nito ay {{1}}, tapos {{3}}, tapos {{2}} — HINDI naka-numeric order ang mga placeholder sa teksto. Ang mga chip sa ibaba ay nakalista nang naka-numeric order: customer_name ang pumupuno sa {{1}}, renewal_date ang pumupuno sa {{2}}, plan_name ang pumupuno sa {{3}}. Itugma ang iyong mga value sa NUMERO, hindi kailanman sa pagkakasunod-sunod ng paglabas ng mga placeholder sa pangungusap. Dito madalas nagkakamali ang mga tao sa mga isinaling template, kung saan inililipat ng ayos ng mga salita ang kinalalagyan ng mga placeholder.

Ang tatlong button sa bawat template
"Try it" — magpadala ng test nang hindi nagsusulat ng code
Binubuksan ng paper-plane button ang template na ito na puno na ng sample value, isa sa bawat variable name. Ito ang pinakamabilis na paraan para tiyaking tama ang isang mapping bago pa ito hawakan ng iyong mga developer. Pansinin ang toggle: "Simulate Only" ang default at walang anumang lumalabas — ibinabalik lang sa iyo ng server ang iyong payload. Ilipat ito sa "Send Real Message" at tunay na WhatsApp message ang mapupunta sa numerong nasa kahon, at may bayad ito.


Ano ang ibinabalik ng isang simulated na pagpapadala
Ang pagpindot ng Send Request sa Simulate Only mode ay nagbabalik ng request ayon sa pagkatanggap dito ng platform, kasama ang HTTP status at round-trip time. Basahin ito bilang tsek sa hugis, hindi bilang ensayo: kinukumpirma nito na na-parse ang iyong JSON at tinanggap ang key, pero HINDI nito bine-validate ang mga variable name mo laban sa mapping at hindi ito kailanman kumokontak sa Meta. Ang payload na malinis sa simulation ay puwede pa ring tanggihan sa totoong pagpapadala. Para patunayan ang mismong mapping, i-on ang Send Real Message at magpadala sa sarili mong telepono.

"Get code" — ang request, isinulat na para sa iyo
Ang angle-brackets button ay gumagawa ng gumaganang request para mismo sa template na ito sa walong wika: cURL, JavaScript, Node.js, Python, PHP, Ruby, Go at C#. Ibigay ito sa kung sino man ang sumusulat ng integration. Lumalabas ang mga variable bilang {{placeholders}} na pinangalanan ayon sa iyong mapping, at naiiwang YOUR_API_KEY / YOUR_API_SECRET ang mga credential — hindi kailanman inilalabas ng dialog na ito ang totoo mong key, kaya ligtas i-paste ang snippet sa isang ticket.

Pagpapalit ng wika
I-click ang kahit anong wika sa itaas at isusulat muli ang snippet para dito — parehong tawag, parehong header, ang HTTP client ng wikang iyon. Ginagawa ang bawat isa sa unang pag-click mo, kaya normal ang maikling spinner sa unang paglipat. Kinukuha ng Copy ang snippet gaya ng nakikita: kumpleto ito, pati mga import, at kung nangangailangan ng signature ang key na ito, nandoon na ang signing step.

"Edit" — baguhin ang ipinapadala ng iyong sistema
Binubuksan ng lapis ang mismong mapping. Ang phone mock-up sa itaas ay ang totoong mensahe na may kapalit na kasalukuyan mong mga pangalan, kaya makikita mo kung ano ang mababasa ng customer. Sa ilalim nito, ang bawat na-detect na variable ay puwedeng palitan ng pangalan, ayusin ang pagkakasunod, markahang required, o bigyan ng type — petsa, halaga ng pera, imahe. Ang pagpapalit ng pangalan ng variable ay nagpapalit din nito sa iyong API payload, kaya magsisimulang bumagsak ang sistemang nagpapadala pa ng lumang pangalan: palitan silang dalawa nang sabay.

Test API — parehong kasangkapan, kahit anong endpoint
Ang "Test API" sa itaas ng tab ay "Try it" na walang kandado sa template: pumili ng kahit alin sa tatlong send endpoint, magpalit ng template mula sa pangalawang dropdown, at malayang i-edit ang body. Gamitin ito para tsekin ang mga hilaw na tawag sa /messages/text o /messages/template, na walang sariling card dahil hindi sila nakatali sa isang mapping. Pansinin na body_1, body_2, body_3 pa rin ang tawag sa mga variable ng template na ito — ganito ang hitsura ng template na walang mapping, at ito ang inaayos ng "Edit".

Mga sagot
Webhooks — pagpapabalik ng mga sagot
Kalahati lang ng integration ang pagpapadala. Ituro ang webhook sa sarili mong HTTPS endpoint at ipo-POST doon ng WizMessage ang mga papasok na mensahe at delivery update. Minsan lang ipinapakita ang signing secret kapag na-generate ito; i-verify ito sa bawat delivery para masigurong talagang sa amin nanggaling ang tawag.

Sanggunian ng REST API
Kino-configure ng lahat ng nasa itaas ang key. Ito naman ang aktuwal na tinatawag ng iyong mga developer. Ang base URL ay /api/v1/external. Kailangan ng bawat endpoint ang mga auth header sa ibaba, at saklaw ito ng rate limits ng key.
Pag-authenticate
Ipadala ang iyong API key sa bawat request. Kung naka-enable ang "Require signature" sa key, kailangan mo ring pirmahan ang request — at agad na tatanggihan ng key na naka-enable ito ang kahit anong hindi pirmadong tawag.
| Header | Halaga |
|---|---|
X-API-Key | Ang iyong API key — ang buong pk_live_… value, hindi lang ang prefix na ipinapakita sa dashboard. |
X-Timestamp | Unix timestamp sa segundo. Tinatanggihan kung lampas 5 minuto ang layo nito sa oras ng server. |
X-API-Signature | HMAC-SHA256 ng timestamp + "." + rawBody, naka-key sa SHA256(api_secret), lowercase hex. |
Paalala: Ipinapatupad lang ang mga signature kapag naka-enable ang
require_signaturesa key. Kung hindi ito naka-enable, sapat na ang API key mag-isa para makapagpadala ng mga mensahe — kaya nga sikreto ang key, hindi isang identifier. Ituring itong parang password: minsan lang itong ipinapakita, at kahit sinong may hawak nito ay puwedeng makapagmensahe sa iyong mga customer.
const crypto = require('node:crypto')
const body = JSON.stringify({ to: '+919876543210', message: 'Hello' })
const timestamp = Math.floor(Date.now() / 1000).toString()
const secretHash = crypto.createHash('sha256').update(API_SECRET).digest('hex')
const signature = crypto.createHmac('sha256', secretHash)
.update(timestamp + '.' + body)
.digest('hex')
await fetch('https://your-host/api/v1/external/messages/text', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': API_KEY,
'X-Timestamp': timestamp,
'X-API-Signature': signature,
},
body,
})
Mga endpoint
| Method | Path | Layunin |
|---|---|---|
POST | /messages/text | Magpadala ng plain text na mensahe. Gumagana lang ito sa loob ng bukas na 24-oras na conversation window. |
POST | /messages/template | Magpadala ng template, kung saan ikaw mismo ang magbibigay ng raw components array ng Meta. |
POST | /messages/template/send | Magpadala ng template gamit ang mapping na na-configure mo sa dashboard. Ito ang dapat gamitin. |
POST | /messages/interactive/list | Magpadala ng interactive list message. |
POST | /messages/interactive/button | Magpadala ng hanggang tatlong reply button. |
GET | /messages/:uuid | Tingnan ang delivery status ng mensaheng ipinadala mo. |
POST | /media/upload | Mag-upload ng PDF/image/video sa Meta at kumuha ng media_id para gamitin sa header ng template. |
GET | /templates | Ilista ang mga template na available sa key na ito. |
GET | /templates/:name | Kunin ang mga detalye ng isang template. |
Pagpapadala ng naka-map na template
Ito ang payload na katambal ng Templates tab. Ipinapadala mo ang mga variable ayon sa PANGALAN — ang mga pangalang ipinapakita bilang mga chip sa template card — at ang platform na ang bahalang bumuo ng mga component ng Meta para sa iyo. Iyan ang buong punto ng pag-map ng template: hindi na kailangang alam ng iyong billing system ang kahit ano tungkol sa component format ng Meta.
POST /api/v1/external/messages/template/send
{
"to": "+919876543210",
"template_name": "payment_failed_alert",
"language": "en",
"variables": {
"customer_name": "Priya Sharma",
"renewal_date": "12 Aug 2026",
"plan_name": "Wiz Pro"
},
"reference": "invoice-2026-0817"
}
Paalala: Dapat eksaktong tumugma ang mga variable name sa mapping — binabalewala ang hindi nakikilalang pangalan, at tinatanggihan naman nang may
400ang nawawalang required na pangalan. Sa iyo angreference: ibinabalik ito sa mga webhook para maiugnay mo ang isang delivery report sa isang record sa sarili mong sistema.
Rate limits
May sariling limits ang bawat key, na makikita sa Overview tab — 60 requests/minute at 1,000 messages/day bilang default. Kasama sa mga response ang natitirang allowance, kaya bumagal na kapag paubos na ito sa halip na paulit-ulit mag-retry hanggang bumangga sa pader.