A WhatsApp API, dokumentálva.
REST az elküldéshez és olvasáshoz, aláírt webhooks a fogadáshoz és egy MCP szerver készen a te ügynököd számára. Integráld a WhatsApp-ot a termékedbe line_id és API kulcsokkal.
Nulláról az első üzenetedig 3 lépésben.
1. Csatlakoztass egy vonalat
A konzolon olvasd be a QR-kódot a használni kívánt WhatsApp számával. Egy line_id-t kapsz.
2. Hozz létre egy API kulcsot
A konzolban generálj egy API kulcsot. Kezdődjön wzb_live_-val, és egyszer jelenik meg.
3. Hívd meg az API-t
Használja a line_id-ját és az API kulcsát az első üzenet elküldéséhez (példa lent).
curl -X POST https://www.wazion.com/api/bridge/v1/messages/send \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"line_id":"TU_LINE_ID","to":"+34600000000","message":"Helló a WAzion Bridge-ből"}'
A konzol az, ahol kezelheted a vonalakat, API kulcsokat és webhooks-t. A dokumentáció ugyanazt az API-t írja le, amelyet ott kipróbálhatsz.
API alapja és hitelesítés.
| REST alap | https://www.wazion.com/api/bridge/v1 |
|---|---|
| MCP szerver | https://www.wazion.com/api/bridge/mcp |
| Fejléc | Authorization: Bearer wzb_live_... |
Minden kérés autentikálva van egy API kulccsal a Authorization fejlécben (elfogadott X-Bridge-Key). Az API kulcsokat a konzolban hozzák létre, és a következővel kezdődnek wzb_live_. Minden válasz tartalmaz egy fejlécet X-Request-Id használható támogatásra és hibakeresésre. Az API támogatja a CORS-t (Access-Control-Allow-Origin: *).
Authorization: Bearer wzb_live_xxxxxxxxxxxxxxxxxxxxxxxx Content-Type: application/json
Hogyan van megszervezve a Bridge.
line_id
Azonosíts egy QR-kód által csatlakoztatott WhatsApp vonalat. Minden küldési vagy olvasási kérés egy line_id-t használ.
API key
wzb_live_ hitelesítő, amely hitelesíti az alkalmazásodat. Többet létrehozhatsz, forgathatsz és visszavonhatsz a konzolon.
Webhook
Beérkező eseményeket (üzeneteket, állapotokat) HMAC-al aláírva kapsz az általad beállított URL-en.
Mindig line_id-val és API kulcsokkal dolgozol. A Bridge elrejti a WhatsApp belső munkamenetét: soha nem teszed közzé és nem használod a session_key-t.
REST végpontok.
| Akció | Endpoint |
|---|---|
| Számla, terv és határok | GET /v1/me |
| Időszakos fogyasztás | GET /v1/usage |
| Sorok felsorolása | GET /v1/lines |
| Egy vonal részlete | GET /v1/lines/{line_id} |
| Küldj szöveget | POST /v1/messages/send |
| Küldjön fényképet | POST /v1/messages/send-media |
| Válaszolni idézve | POST /v1/messages/reply |
| Reagálj emoji-val | POST /v1/messages/react |
| Olvasottként jelölni | POST /v1/messages/read |
| Csevegés archiválása | POST /v1/chats/archive |
| Csevegések listázása | GET /v1/chats |
| Üzenetek olvasása | GET /v1/messages |
| Webhookok listázása / létrehozása | GET /v1/webhooks · POST /v1/webhooks |
| Webhook tesztelése | POST /v1/webhooks/{id}/test |
POST /v1/messages/send
| Paraméter | Típus | Leírás | |
|---|---|---|---|
line_id | string | kötelező | Küldésre használt vonal. |
to | string | kötelező | Céltelefon szám nemzetközi formátumban, pl. +34600000000. |
message | string | kötelező | Üzenet szövege. |
archive_policy | enum | választható | never · always · preserve_if_previously_archived |
A küldemények (send, send-media, reply) elfogadják az Idempotency-Key fejlécet. A GET /v1/chats és a GET /v1/messages lekérdezések az eredményt 500-ra, illetve 200-ra korlátozzák.
Üzenetet küldeni a nyelveden.
curl -X POST https://www.wazion.com/api/bridge/v1/messages/send \
-H "Authorization: Bearer wzb_live_xxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1001" \
-d '{"line_id":"line_xxx","to":"+34600000000","message":"Pedido confirmado"}'
// Node 18+ (fetch nativo)
const res = await fetch("https://www.wazion.com/api/bridge/v1/messages/send", {
method: "POST",
headers: {
"Authorization": "Bearer wzb_live_xxx",
"Content-Type": "application/json",
"Idempotency-Key": "order-1001"
},
body: JSON.stringify({
line_id: "line_xxx",
to: "+34600000000",
message: "Pedido confirmado"
})
});
console.log(await res.json());
import requests
r = requests.post(
"https://www.wazion.com/api/bridge/v1/messages/send",
headers={
"Authorization": "Bearer wzb_live_xxx",
"Idempotency-Key": "order-1001",
},
json={
"line_id": "line_xxx",
"to": "+34600000000",
"message": "Pedido confirmado",
},
)
print(r.json())
<?php
$ch = curl_init("https://www.wazion.com/api/bridge/v1/messages/send");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer wzb_live_xxx",
"Content-Type: application/json",
"Idempotency-Key: order-1001",
],
CURLOPT_POSTFIELDS => json_encode([
"line_id" => "line_xxx",
"to" => "+34600000000",
"message" => "Pedido confirmado",
]),
]);
echo curl_exec($ch);
Kép, videó, hang vagy dokumentum küldése.
Használj media_type-ot az alábbi értékek egyikével: image, video, audio, document. A media_url mezőnek egy nyilvános URL-nek kell lennie, amelyet a szerver letölthet.
| Paraméter | Típus | Leírás | |
|---|---|---|---|
line_id | string | kötelező | Szállítási vonal. |
to | string | kötelező | Céltelefon. |
media_url | string (URL) | kötelező | A fájl nyilvános URL-je. |
media_type | enum | választható | image · video · audio · document (alapértelmezett kép) |
caption | string | választható | A fájlhoz csatolt szöveg. |
curl -X POST https://www.wazion.com/api/bridge/v1/messages/send-media \
-H "Authorization: Bearer wzb_live_xxx" \
-H "Content-Type: application/json" \
-d '{"line_id":"line_xxx","to":"+34600000000","media_url":"https://tu-cdn.com/foto.jpg","media_type":"image","caption":"Szia"}'
Idempotencia.
A két ugyanazt az üzenetet ne küldje el (hálózati újrapróbálkozások, újraindítások), küldje el a fejlécet. Idempotency-Key egyedi azonosítóval a műveletedhez. Ha ugyanazt a kulcsot ugyanazzal a törzzsel ismétled, a Bridge a mentett választ adja vissza anélkül, hogy újra elküldené. A kulcsot 24 órán át megjegyzik, és a send, send-media és reply műveletekre vonatkozik.
-H "Idempotency-Key: pedido-1001"
Ha ugyanazt a kulcsot különböző törzzsel használod, 409 idempotency_conflict-ot kapsz.
Aláírt események fogadása.
Hozz létre egy nyilvános HTTPS URL-lel rendelkező webhookot. A Bridge minden eseménynél POST-ot küld erre az URL-re. Minden webhooknak megvan a saját titka. (wzb_whsec_...) amit csak egyszer mutatnak be a létrehozásakor.
Olyan események, amelyekre feliratkozhatsz (azokat úgy adják át, ahogyan a WhatsApp motorja előállítja): message.received, message.sent, message.status, line.status.
Minden szállítmány tartalmazza ezeket a fejlécet:
X-WAzion-Bridge-Event: message.received
X-WAzion-Bridge-Signature: sha256=<hmac>
Content-Type: application/json
{
"event": "message.received",
"line_id": "line_xxx",
"data": { ... }
}
A aláírás ellenőrzése
A aláírás egy HMAC-SHA256 a nyers törzs alapján, a webhook titkos kulcsát használva. Mindig hasonlítsd össze a feldolgozás előtt:
// Node.js
import crypto from "node:crypto";
function verify(rawBody, signatureHeader, secret) {
const expected = "sha256=" + crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signatureHeader),
Buffer.from(expected)
);
}
<?php
// PHP
$raw = file_get_contents("php://input");
$sig = $_SERVER["HTTP_X_WAZION_BRIDGE_SIGNATURE"] ?? "";
$expected = "sha256=" . hash_hmac("sha256", $raw, $secret);
if (!hash_equals($expected, $sig)) { http_response_code(401); exit; }
Egy teszt eseményt indíthatsz a webhookodra a konzolból vagy a POST /v1/webhooks/{id}/test segítségével.
Hibakezelés.
A hitelesítési, fiók- és szerverhibák egy normalizált borítékot használnak:
{
"ok": false,
"error": { "code": "unauthorized", "message": "...", "retryable": false }
}
A validációs és üzleti hibák egy sík formát használnak a hibás kóddal:
{ "error": "quota_exceeded", "message": "Monthly quota exceeded", "metric": "sent_messages", "used": 10000, "limit": 10000, "plan": "pro" }
| Kód | HTTP | Jelentés |
|---|---|---|
unauthorized | 401 | API kulcs hiányzik, érvénytelen vagy visszavont. |
subscription_required | 402 | A Bridge előfizetés nincs aktív állapotban. |
validation_error | 400 | Hiányoznak mezők vagy érvénytelenek. |
line_not_found | 404 | A line_id nem létezik a fiókodban. |
line_not_connected | 409 | A vonal nincs csatlakoztatva a WhatsApphoz. |
idempotency_conflict | 409 | Ugyanaz az Idempotency-Key különböző testtel. |
quota_exceeded | 429 | Túllépted az időszak kvótáját. |
line_limit_reached | 429 | Elérted a terv maximális sorainak számát. |
server_error | 500 | Belső hiba; újra megpróbálhatod. |
Tervdíjak.
- A kvóták (küldött üzenetek, webhook események, sorok száma) fiókonként értendők, és a számlázási ciklusodba számítanak.
- Ha túlléped a kvótát, 429 (quota_exceeded vagy line_limit_reached) választ kapsz a használt, a limit és a terv részleteivel.
- A GET /v1/chats legfeljebb 500 csevegést, a GET /v1/messages pedig legfeljebb 200 üzenetet ad vissza kérésenként.
- A WhatsApp stabilitása miatt az azonos vonalon történő küldések között néhány másodpercnyi szünet van; a tömeges küldéseket időben elosztja.
Bármikor ellenőrizheti a fogyasztását a GET /v1/usage. A konkrét határok minden tervben a következők: a tervek oldala.
MCP szerver a te ügynököd számára.
A Bridge egy MCP (Model Context Protocol) szervert kínál, hogy az ügynököd WhatsApp-ot küldjön és olvasson anélkül, hogy REST kódot kellene írnod. Kiegészítem a következővel:
claude mcp add --transport http wazion-bridge \ https://www.wazion.com/api/bridge/mcp \ --header "Authorization: Bearer wzb_live_xxx"
| Tool | Paraméterek |
|---|---|
bridge_list_lines | — |
bridge_send_message | line_id, to, message, archive_policy? |
bridge_send_media | line_id, to, media_url, media_type?, caption? |
bridge_reply_message | line_id, to, message, quoted_message_id |
bridge_react_message | line_id, jid, message_id, emoji |
bridge_get_chats | line_id, limit?, archived? |
bridge_get_messages | line_id, phone, limit? |
bridge_archive_chat | line_id, phone, archive? |
Készen áll az integrálásra.
Csatlakoztass egy vonalat, hozd létre az API kulcsodat, és teszteld az egyes végpontokat a konzolból.