בוט WhatsApp רשמי עם Meta Cloud API - הקמה מאפס

WhatsApp Cloud API הוא הממשק הרשמי של Meta לשליחה ולקבלה של הודעות וואטסאפ מתוך קוד, בלי שירות מתווך באמצע. Meta מעבירה כל הודעה של לקוח לשרת שלכם והשרת עונה דרך ה-API שלה. במדריך מקימים בוט כזה מאפס: אפליקציה ב-Meta, מספר בדיקה, טוקן קבוע ושרת Webhook על Supabase שעונה אוטומטית. בסוף מחברים אליו את Claude. על אותו מבנה רץ הבוט שאני משתמש בו בעסק.
כך עוברת הודעה אחת דרך הקוד של המדריך:
מה צריך לפני שמתחילים
- חשבון ב-Metaחשבון פייסבוק ותיק עסקי (Business portfolio). תיק שלא עבר אימות עסקי מספיק כדי להתחיל. כך נבנתה גם אפליקציית הבדיקה של המדריך.
- טלפון עם וואטסאפהוא יקבל את הודעות הבדיקה וישלח לבוט את ההודעה הראשונה.
- פרויקט ב-Supabaseהתוכנית החינמית מספיקה לבדיקות. שם ירוץ השרת.
- Node.js במחשבבשביל ה-CLI של Supabase. במסלול האוטומטי צריך גם Claude Code או Codex.
Cloud API או GreenAPI
GreenAPI ושירותים דומים מחברים מספר וואטסאפ רגיל כמו מכשיר מקושר, בסריקת קוד QR ושולחים ומקבלים דרכו הודעות. Cloud API הוא הממשק ש-Meta עצמה מפעילה לעסקים, עם מספר שמוקצה לו ואפליקציה משלכם.
| Meta Cloud API | GreenAPI ודומיו | |
|---|---|---|
| החיבור | אפליקציה ב-Meta, מספר ייעודי וטוקן | סריקת קוד QR ממספר קיים, כמו WhatsApp Web |
| דרך מי עוברות ההודעות | Meta והשרת שלכם | גם השרתים של החברה המתווכת |
| חסימות | חשבון שמפר את המדיניות של Meta לעסקים יכול להיחסם | GreenAPI מפרסמת בעצמה הנחיות איך להגן על המספר מחסימה |
| עלות | הבדיקות חינם ובפרודקשן תשלום לפי הודעה (פירוט בהמשך) | תוכנית חינמית מוגבלת למפתחים ו-12 דולר לחודש לתוכנית העסקית, לפי האתר שלהם |
| למי זה מתאים | בוט של עסק שעונה ללקוחות לאורך זמן | ניסוי מהיר, או שליחה ממספר שכבר קיים |
לאן אפשר לחבר את הבוט
וואטסאפ עצמו לא דורש AI. השרת שבונים כאן מקבל הודעה ומחזיר תשובה. מה שהבוט יודע לעשות תלוי במה שמחברים מאחוריו:
- מערכות שכבר קיימותדשבורד, מסד נתונים או CRM: "כמה הזמנות נכנסו היום?", "תפתח משימה". הבוט שלי מריץ ככה deploy לאתר ומושך נתונים מהדשבורד.
- כלים של GoogleGmail, Calendar ו-Drive מתוך הצ'אט: "תקבע פגישה מחר ב-10:00", "תמצא את ההצעה מהשבוע שעבר".
- סוכן AI אוטונומיהודעה אחת מפעילה סוכן כמו OpenClaw או Hermes Agent, שמריץ דפדפן, עובד עם קבצים ומבצע משימה של כמה שלבים.
- תזכורות ואישורי הזמנהנשלחים בזמן הנכון. מחוץ לחלון של 24 שעות זה אפשרי רק בהודעת תבנית מאושרת, בתשלום.
- לידיםכל פנייה נענית מיד, נשמרת ומגיעה אליכם מסוכמת, גם באמצע הלילה.
מסלול אוטומטי: Claude Code בונה את השרת
ההוראות כתובות ל-Claude Code ועובדות באותה צורה עם Codex או עם כל סוכן קוד אחר. את החלקים שדורשים את הלוח של Meta עושים לפי המסלול הידני, בשלבים שמצוינים בכל סעיף.
- אפליקציה ומספר בדיקה. יוצרים אפליקציה ב-Meta, מאמתים את הטלפון שלכם כנמען ומעתיקים את ה-Phone Number ID (שלבים 1 עד 4 במסלול הידני).
- טוקן קבוע ו-App Secret. מייצרים טוקן של משתמש מערכת (שלבים 5 עד 9) ומעתיקים את ה-App Secret מ-App settings ואז Basic. את הטוקן לא מדביקים בצ'אט עם הסוכן.
- השרת. פותחים את Claude Code בתיקייה ריקה ומדביקים את הבקשה:
מאשרים את הפעולות ש-Claude Code מבקש להריץ: יצירת הפונקציה, הגדרת הסודות וההעלאה. את הטוקן מגדירים לבד, בטרמינל:הבקשה ל-Claude Code
הקם לי שרת Webhook לבוט WhatsApp על Meta Cloud API, כ-Supabase Edge Function בשם whatsapp-webhook. בבקשת GET הוא מחזיר את hub.challenge כש-hub.verify_token תואם ל-WHATSAPP_VERIFY_TOKEN. בבקשת POST הוא בודק את החתימה בכותרת x-hub-signature-256 מול WHATSAPP_APP_SECRET, מחזיר 200 מיד ועונה ברקע עם EdgeRuntime.waitUntil, דרך graph.facebook.com/v26.0 עם WHATSAPP_TOKEN ו-WHATSAPP_PHONE_NUMBER_ID. אם בהודעה אין from, עונים ל-from_user_id בשדה recipient. בשלב הזה הבוט רק מחזיר "קיבלתי: " ואת הטקסט. תגדיר את הסודות חוץ מ-WHATSAPP_TOKEN, שאותו אגדיר בעצמי ותעלה את הפונקציה עם --no-verify-jwt --use-api. בסוף תן לי את כתובת ה-Callback ואת ה-Verify token.
הסוד של הטוקןnpx supabase secrets set WHATSAPP_TOKEN=PERMANENT_TOKEN - החיבור בצד של Meta. מדביקים את כתובת ה-Callback ואת ה-Verify token בלוח של Meta ורושמים את השדה messages (שלבים 10 עד 12), או נותנים ל-Claude Code לעשות את זה דרך ה-MCP של Meta, בסעיף הבא.
- פרסום. מוסיפים כתובת למדיניות פרטיות ומפרסמים את האפליקציה (שלב 13). בלי זה, הודעה אמיתית מהטלפון לא מגיעה לשרת.
- בדיקה. שולחים הודעה מהטלפון למספר הבדיקה והבוט עונה תוך שניות. אם לא:
כשהבוט לא עונה
הבוט לא עונה להודעות. תעבור על הקוד של whatsapp-webhook ועל הסודות שהגדרנו ותגיד לי מה לחפש בלוגים של הפונקציה ב-Supabase.
ה-MCP של Meta: Claude Code מגדיר גם את החיבור
Meta מתעדת שרת MCP רשמי בשם WhatsApp Business Tools. סוכן שמחובר אליו יכול לרשום מספרי טלפון, לנהל תבניות הודעה, להגדיר Webhooks ולשלוח הודעות, בשמכם ועל האפליקציות שאתם מנהלים. נכון ל-24 בספטמבר 2026 השרת בבטא ו-Meta מפעילה אותו בהדרגה.
claude mcp add --transport http whatsapp_business_tools https://mcp.facebook.com/whatsapp_business_tools
אחרי ההוספה מקלידים /mcp בתוך Claude Code, בוחרים whatsapp_business_tools ומתחברים לחשבון Meta. במסך ההרשאות מסמנים רק את העסק ואת האפליקציה של הבוט. ב-Claude Desktop מוסיפים את אותה כתובת תחת Settings ואז Connectors ו-Add custom connector. בתיעוד יש הוראות גם ל-Codex ול-ChatGPT.
דרך whatsapp_business_tools: תגדיר ל-Webhook של האפליקציה של הבוט את הכתובת CALLBACK_URL עם ה-Verify token VERIFY_TOKEN, תרשום את השדה messages ותוודא שחשבון ה-WhatsApp מנוי ל-Webhooks של האפליקציה. לפני כל שינוי תראה לי מה אתה עומד לעשות.
את הטוקן הקבוע השרת לא מייצר. הכלי whatsapp_biz_system_user_token מחזיר קישור לעמוד משתמשי המערכת והטוקן נוצר שם, בלוח של Meta.
מה נבדק כאן
בדקתי שהכתובת של השרת עונה ודורשת התחברות עם שלוש ההרשאות שבתיעוד: business_management, whatsapp_business_management ו-whatsapp_business_messaging. את הכלים עצמם לא הרצתי. אם השרת עוד לא זמין בחשבון שלכם, שלבים 10 עד 12 במסלול הידני עושים את אותו דבר בלחיצות.
מסלול ידני: כל לחיצה וכל שורת קוד
הצילומים של יצירת האפליקציה, מספר הבדיקה, הגדרת ה-Webhook והפרסום צולמו ב-24 בספטמבר 2026. שאר הצילומים צולמו ביוני 2026.
אפליקציה ומספר בדיקה
1יצירת האפליקציה
ב-developers.facebook.com נכנסים ל-My Apps ולוחצים Create App. ממלאים שם ומייל. במסך Use cases מסמנים את Connect with customers through WhatsApp. בשלב Business בוחרים את התיק העסקי, במסך Requirements לוחצים Next ובסוף Create app.
המילה WhatsApp אסורה בשם האפליקציה
Meta חוסמת שמות שכוללים את הסימנים המסחריים שלה. כשניסיתי לקרוא לאפליקציה RT-AI WhatsApp bot הופיעה השגיאה Certain terms like "whatsapp" are not allowed והשם RT-AI guide bot עבר בלי בעיה.
2מספר בדיקה וטוקן זמני
בתפריט של האפליקציה עוברים ל-Use cases, לוחצים Customize ליד WhatsApp ובתפריט Basic setup בוחרים Step 1. Try it out. Meta מקצה מספר בדיקה חינמי ולידו שני מזהים: Phone Number ID, שהשרת צריך ו-WhatsApp Business account ID. הכפתור Generate token מייצר טוקן זמני לבדיקה מהירה.
הטוקן הזמני פג תוך שעות
Meta מתעדת שטוקן כזה פג מהר ושצריך לייצר חדש כל כמה שעות. בוט שרץ לאורך זמן צריך טוקן של משתמש מערכת, בחלק ב׳.
3הוספת נמען לבדיקות
באותו עמוד, תחת Send a message from your test number, פותחים את רשימת Recipient ומוסיפים מספר. לפי החלון של Meta אפשר להגדיר עד 5 מספרים שמקבלים הודעות בדיקה בחינם. מזינים את הטלפון שלכם ולוחצים Next.
4אימות הנמען
Meta שולחת לוואטסאפ של המספר קוד בן 5 ספרות. מקלידים אותו ולוחצים Next ומעכשיו המספר מקבל הודעות בדיקה.
טוקן קבוע של משתמש מערכת
טוקן של משתמש מערכת (System User) הוא מה שמריץ את הבוט לאורך זמן. יוצרים אותו בהגדרות העסק ב-business.facebook.com: הגדרות, משתמשים ואז משתמשי מערכת.
5משתמש מערכת עם גישה לאפליקציה
בעמוד משתמשי המערכת לוחצים הוספה, נותנים שם (למשל whatsapp-bot) ובוחרים תפקיד Admin. על המשתמש החדש לוחצים הקצאת נכסים, בוחרים את סוג הנכס אפליקציות ומסמנים את האפליקציה. תחת גישה מלאה מפעילים את ניהול אפליקציה ולוחצים הקצאת נכסים.
6גישה לחשבון ה-WhatsApp
חוזרים על אותו תהליך עם סוג הנכס חשבונות WhatsApp. בצילום הופעלו שתי הרשאות חלקיות, "ניהול מספרי טלפון ותבניות של הודעות" ו"הודעות". במדריך של Meta מופיעה גישה מלאה, Manage WhatsApp Business accounts, שכוללת גם אותן.
WhatsApp account ו-Messaging account
לפי התיעוד העדכני של Meta, בחלק מהחשבונות יש שני נכסים נפרדים, WhatsApp account ו-Messaging account. משתמש המערכת צריך גישה לשניהם. בממשק שבדקתי ב-24 בספטמבר 2026 הופיעו רק חשבונות WhatsApp. אם אצלכם מופיע גם Messaging account, מקצים גם אותו.
7יצירת הטוקן: בחירת האפליקציה
עכשיו לוחצים יצירת אסימון, בוחרים את האפליקציה ולוחצים הבא.
8תוקף הטוקן
Meta מסמנת את 60 ימים כאפשרות המומלצת. טוקן כזה צריך לחדש כל חודשיים, אחרת הבוט מפסיק לענות. טוקן עם תוקף "אף פעם" לא פג. לכן חשוב עוד יותר לשמור אותו רק בסודות של השרת. בוחרים ולוחצים הבא.
9הרשאות ויצירת הטוקן
Meta מפרטת שלוש הרשאות לטוקן: whatsapp_business_messaging לשליחה ולקבלה של הודעות, whatsapp_business_management לשאר ההגדרות ו-business_management. מסמנים את שלושתן ולוחצים יצירת אסימון. בצילום סומנו שתי ההרשאות של WhatsApp.
מעתיקים את הטוקן מיד
מעתיקים את הטוקן ברגע שהוא מופיע ושומרים אותו במקום בטוח. הוא נכנס לשרת כסוד בשם WHATSAPP_TOKEN ולא נכתב בקוד ולא נשלח בצ'אט.
דבר אחרון מהלוח של Meta לפני השרת: ה-App Secret, המפתח שבעזרתו השרת בודק שהבקשות באמת הגיעו מ-Meta. בלוח של האפליקציה נכנסים ל-App settings ואז Basic ולוחצים Show ליד App secret.
השרת על Supabase
ה-Webhook הוא כתובת HTTPS אחת. בבקשת GET היא מוכיחה ל-Meta שהיא שלכם ובבקשת POST היא מקבלת הודעות ועונה עליהן. הקוד רץ כ-Edge Function של Supabase.
Supabase ממליצה להתקין את ה-CLI כתלות של הפרויקט ולהריץ אותו דרך npx. בתיקייה ריקה:
npm install supabase --save-dev
npx supabase login
npx supabase init
npx supabase link --project-ref PROJECT_REF
npx supabase functions new whatsapp-webhook
הפקודה האחרונה יוצרת את הקובץ supabase/functions/whatsapp-webhook/index.ts. מחליפים את התוכן שלו בקוד הזה:
// EdgeRuntime comes from the Supabase runtime and keeps working after the response is sent
declare const EdgeRuntime: { waitUntil(promise: Promise<unknown>): void };
const VERIFY_TOKEN = Deno.env.get("WHATSAPP_VERIFY_TOKEN")!;
const WHATSAPP_TOKEN = Deno.env.get("WHATSAPP_TOKEN")!;
const PHONE_NUMBER_ID = Deno.env.get("WHATSAPP_PHONE_NUMBER_ID")!;
const APP_SECRET = Deno.env.get("WHATSAPP_APP_SECRET")!;
const GRAPH = "https://graph.facebook.com/v26.0/";
Deno.serve(async (req) => {
const url = new URL(req.url);
// 1) One-time verification: Meta sends a GET and expects hub.challenge back
if (req.method === "GET") {
const ok = url.searchParams.get("hub.mode") === "subscribe" &&
url.searchParams.get("hub.verify_token") === VERIFY_TOKEN;
return ok
? new Response(url.searchParams.get("hub.challenge"), { status: 200 })
: new Response("Forbidden", { status: 403 });
}
if (req.method !== "POST") return new Response("Method Not Allowed", { status: 405 });
// 2) Every message is signed with the App Secret. Check it before anything else
const raw = await req.text();
const signature = req.headers.get("x-hub-signature-256") ?? "";
if (!(await validSignature(raw, signature))) {
return new Response("Invalid signature", { status: 401 });
}
// 3) Answer Meta right away and keep working in the background
EdgeRuntime.waitUntil(handle(JSON.parse(raw)).catch((err) => console.error(err)));
return new Response("EVENT_RECEIVED", { status: 200 });
});
async function handle(body: any) {
const msg = body?.entry?.[0]?.changes?.[0]?.value?.messages?.[0];
if (!msg || msg.type !== "text") return; // status updates, images and so on
// A customer with a WhatsApp username may arrive without a phone number
const to: Record<string, string> = msg.from
? { to: msg.from }
: { recipient: msg.from_user_id };
await sendText(to, "קיבלתי: " + msg.text.body);
}
async function sendText(to: Record<string, string>, text: string) {
const res = await fetch(GRAPH + PHONE_NUMBER_ID + "/messages", {
method: "POST",
headers: {
"Authorization": "Bearer " + WHATSAPP_TOKEN,
"Content-Type": "application/json",
},
body: JSON.stringify({
messaging_product: "whatsapp",
recipient_type: "individual",
...to,
type: "text",
text: { body: text },
}),
});
// Without this line an expired token or a wrong Phone Number ID fails silently
if (!res.ok) console.error("send failed", res.status, await res.text());
}
async function validSignature(raw: string, header: string) {
const key = await crypto.subtle.importKey(
"raw", new TextEncoder().encode(APP_SECRET),
{ name: "HMAC", hash: "SHA-256" }, false, ["sign"],
);
const mac = await crypto.subtle.sign("HMAC", key, new TextEncoder().encode(raw));
const hex = [...new Uint8Array(mac)].map((b) => b.toString(16).padStart(2, "0")).join("");
return header === "sha256=" + hex;
}
שלושה דברים בקוד שכדאי להבין. החתימה נבדקת על הגוף הגולמי ולפני כל עיבוד, כי כל מי שמגלה את הכתובת יכול לשלוח אליה בקשות. ה-200 חוזר ל-Meta לפני שהתשובה נכתבת: Meta שולחת שוב, עד 7 ימים, כל הודעה שלא אושרה. לכן עבודה איטית רצה ברקע. ולקוח שבחר שם משתמש בוואטסאפ עלול להגיע בלי מספר טלפון ואז התשובה יוצאת למזהה from_user_id שלו.
עכשיו ארבעה סודות, מהערכים ששמרתם בחלקים א׳ ו-ב׳. את WHATSAPP_VERIFY_TOKEN ממציאים: כל מחרוזת שתבחרו ואותה תדביקו אחר כך גם בלוח של Meta.
npx supabase secrets set WHATSAPP_TOKEN=PERMANENT_TOKEN
npx supabase secrets set WHATSAPP_PHONE_NUMBER_ID=PHONE_NUMBER_ID
npx supabase secrets set WHATSAPP_VERIFY_TOKEN=ANY_SECRET_STRING
npx supabase secrets set WHATSAPP_APP_SECRET=APP_SECRET
ומעלים:
npx supabase functions deploy whatsapp-webhook --no-verify-jwt --use-api
למה --no-verify-jwt
ברירת המחדל של Supabase היא לדרוש JWT בכל בקשה לפונקציה. Meta לא שולחת JWT, אז בלי הדגל הבקשות שלה נחסמות. במקום JWT הקוד בודק את החתימה של Meta. אפשר גם לקבוע verify_jwt = false לפונקציה בקובץ supabase/config.toml. הדגל --use-api מעלה את הקוד בלי Docker במחשב.
כתובת ה-Callback שתדביקו בלוח של Meta, עם ה-project ref שלכם:
https://PROJECT_REF.supabase.co/functions/v1/whatsapp-webhook
שדרוג: Claude עונה במקום ההד
הקוד שלמעלה מחזיר "קיבלתי:" ואת ההודעה. כדי שהבוט יענה בעצמו, מוסיפים קריאה ל-Claude:
// At the top of the file
import Anthropic from "npm:@anthropic-ai/sdk";
const claude = new Anthropic({ apiKey: Deno.env.get("ANTHROPIC_API_KEY") });
// Inside handle, instead of the "קיבלתי" sendText line
const reply = await claude.beta.messages.create({
model: "claude-opus-5-5",
max_tokens: 2048,
output_config: { effort: "low" },
betas: ["server-side-fallback-2026-07-01"],
fallbacks: "default",
system: "אתה עונה ללקוחות בוואטסאפ בשם העסק. תשובות קצרות וברורות, בשפה שבה הלקוח כתב.",
messages: [{ role: "user", content: msg.text.body }],
});
const answer = reply.content.find((block) => block.type === "text")?.text;
if (answer) await sendText(to, answer);
המודל כאן הוא claude-opus-5-5. מי שהעלות חשובה לו יכול לעבור ל-Sonnet 5 או ל-Haiku 4.5, עם המזהים claude-sonnet-5 או claude-haiku-4-5. ההגדרה effort: "low" מתאימה לתשובות קצרות. ההגדרה fallbacks: "default" מעבירה בקשה שהמודל דחה למודל חלופי ש-Anthropic בוחרת. התשובה נשלפת לפי סוג הבלוק ולא מהמקום הראשון, כי במודלים האלה הבלוק הראשון יכול להיות בלוק חשיבה. וואטסאפ מקבלת עד 4,096 תווים בהודעת טקסט ולכן ההוראה לענות בקצרה חשובה.
npx supabase secrets set ANTHROPIC_API_KEY=YOUR_ANTHROPIC_KEY
החיבור ב-Meta ובדיקה
10הגדרת ה-Webhook
בלוח של האפליקציה, באותו תפריט של WhatsApp, בוחרים Step 2. Production setup. ב-Callback URL מדביקים את כתובת הפונקציה וב-Verify token את אותה מחרוזת שהגדרתם ב-WHATSAPP_VERIFY_TOKEN. לוחצים Verify and save.
11Webhook מאומת
אם שתי המחרוזות זהות והפונקציה עלתה בלי JWT, מופיע סימן ירוק ליד Configure Webhooks.
12רישום לשדה messages
מתחת לטופס מופיעה רשימת שדות. מפעילים את messages עד שהוא מסומן Subscribed. בלי השדה הזה לא מגיעות הודעות נכנסות, גם כשהאימות הצליח. ליד כל שדה יש כפתור Test ששולח לשרת אירוע בדיקה.
13פרסום האפליקציה
כל עוד האפליקציה לא פורסמה, Meta מעבירה ל-Webhook רק אירועי בדיקה מהלוח שלה, כמו שכתוב בהודעה הכתומה בשלב 10. הודעה אמיתית מהטלפון לא מגיעה לשרת, גם לא מהטלפון של מי שמנהל את האפליקציה. בתפריט הצד לוחצים פרסום. Meta מבקשת קודם כתובת למדיניות פרטיות, שמוסיפים ב-App settings ואז Basic. אחר כך הכפתור Publish בתחתית המסך נפתח.
14בדיקה
שולחים הודעה מהטלפון שהוספתם בשלב 3 למספר הבדיקה. התשובה "קיבלתי: ..." מגיעה תוך שניות. את מה שקרה בשרת רואים בלוח של Supabase: Edge Functions, הפונקציה whatsapp-webhook ואז Logs.
ממספר בדיקה למספר של העסק
מספר הבדיקה שולח רק לנמענים שאימתתם בשלבים 3 ו-4. כדי לענות ללקוחות רושמים מספר של העסק ב-Step 2. Production setup, תחת Register your WhatsApp phone number. לפי Meta, מספר שכבר פעיל בוואטסאפ צריך להימחק מהאפליקציה לפני הרישום. ברישום מגדירים שם תצוגה וקוד PIN לאימות דו-שלבי.
מספר שעובד היום באפליקציית WhatsApp Business אפשר לחבר ל-Cloud API בלי למחוק אותו, לפי Meta, דרך Embedded Signup, התהליך שהיא מספקת לשותפים טכנולוגיים. בהקמה ישירה כמו במדריך הזה זה לא חלק מהתהליך.
אחרי שלקוח כותב, יש 24 שעות לענות לו בהודעה חופשית וכל הודעה שלו מאפסת את השעון. מחוץ לחלון הזה אפשר לפנות אליו רק בהודעת תבנית שאושרה מראש. אימות עסקי לא נדרש כדי להתחיל והוא משפיע על מגבלת הפניות היזומות: תיק עסקי חדש יכול לפנות ביוזמתו ל-250 לקוחות שונים ביממה והאימות הוא אחת הדרכים להעלות את המגבלה ל-2,000. תשובות בתוך חלון 24 השעות לא נספרות במגבלה הזו.
כמה זה עולה
Meta גובה לפי הודעה שנמסרה והמחיר נקבע לפי סוג ההודעה והמדינה של הלקוח. הודעות שלקוחות שולחים לעסק לא עולות כלום. מ-1 באוקטובר 2026 Meta גובה גם על תשובות חופשיות בתוך חלון 24 השעות, אחרי 1,000 כאלה בחינם בכל חודש, לכל מספר טלפון של העסק. בוט שעונה עם Claude נספר כאן בדיוק כמו נציג אנושי.
המחירים ללקוחות בישראל, בדולרים, לפי המחירון של Meta שבתוקף מ-1 באוקטובר 2026:
| סוג ההודעה | מחיר להודעה שנמסרה |
|---|---|
| תשובה חופשית בתוך חלון 24 השעות (הודעת שירות) | 1,000 בחודש חינם לכל מספר ואחר כך $0.0053 |
| תבנית utility: אישור הזמנה, תזכורת, עדכון | $0.0053 |
| תבנית authentication: קוד אימות | $0.0053 |
| תבנית marketing: מבצעים ופרסום | $0.0353 |
בוט קטן יכול להישאר בתוך 1,000 התשובות החינמיות. בוט שעונה ל-5,000 הודעות בחודש משלם על 4,000 מהן, כ-21 דולר, לפני העלות של Claude. Meta מעדכנת את המחירון עד פעם ברבעון והמחירים העדכניים נמצאים במקורות שבסוף המדריך.
בלי אמצעי תשלום הבוט עלול להפסיק לענות
לפי עמוד המחירים, בחשבון בלי אמצעי תשלום Meta תמסור הודעות שירות רק בתוך 1,000 החינמיות. בעמוד נפרד על העדכון היא כותבת שעסק שלא הוסיף אמצעי תשלום עד 30 בספטמבר 2026 יפסיק לקבל מסירה של הודעות שירות מ-1 באוקטובר. כדי לא להיתקע, מוסיפים אמצעי תשלום ב-Billing Hub של Meta.
Meta מציעה גם סוכן AI משלה לעסקים, Meta Business Agent, שמחויב לפי טוקנים. לפי Meta, תשובה שלו עולה בערך 4 עד 5 סנט. העלות של Claude בבוט שבונים כאן נפרדת, לפי השימוש בחשבון Anthropic. ובצד של השרת: בתוכנית החינמית של Supabase יש 500,000 הפעלות של פונקציות בחודש. לפי Supabase פרויקט חינמי מושהה אחרי שבוע בלי פעילות.
תקלות נפוצות
- Verify and save
האימות בלוח של Meta נכשל
ה-Verify token בלוח לא זהה בדיוק ל-WHATSAPP_VERIFY_TOKEN, גם רווח בסוף נחשב, או שהפונקציה עלתה בלי
--no-verify-jwtונחסמה. מתקנים ומעלים שוב. - 401 Invalid signature
כל הודעה נדחית בבדיקת החתימה
ה-App Secret שגוי, או שהקוד קורא את הגוף כ-JSON לפני הבדיקה. החתימה מחושבת על הטקסט הגולמי, בדיוק כמו שהגיע.
האימות עבר והודעות מהטלפון לא מגיעות
האפליקציה עוד לא פורסמה (שלב 13), השדה messages לא מסומן (שלב 12), או שהטלפון לא נמצא ברשימת הנמענים של מספר הבדיקה.
- send failed 401
ההודעה נכנסת ואין תשובה
הטוקן פג או שה-Phone Number ID שגוי. הקוד כותב ללוגים את השגיאה של Graph API ושם רואים את הסיבה. טוקן זמני מחליפים בטוקן של משתמש מערכת.
הבוט עונה פעמיים לאותה הודעה
Meta מתעדת שניסיונות חוזרים יכולים ליצור כפילויות. שומרים את msg.id של כל הודעה שטופלה, למשל בטבלה ב-Supabase ומדלגים על מזהה שכבר עבר.
לקוח עם שם משתמש לא מקבל תשובה
קוד שעונה רק ל-msg.from נכשל כשהשדה חסר. הקוד במדריך עונה במקרה כזה ל-from_user_id, דרך השדה recipient.
תשובה נכשלת כעבור יום
עברו יותר מ-24 שעות מההודעה האחרונה של הלקוח. מחוץ לחלון שולחים רק הודעת תבנית מאושרת.
תשובה ארוכה של Claude לא נשלחת
וואטסאפ מקבלת עד 4,096 תווים בהודעת טקסט. מבקשים מ-Claude תשובות קצרות, או מחלקים תשובה ארוכה לכמה הודעות.
שאלות ותשובות
האם ה-Cloud API חינמי?
הבדיקות חינמיות. בפרודקשן Meta גובה לפי הודעה, לפי סוג ההודעה והמדינה של הלקוח. מ-1 באוקטובר 2026 היא גובה גם על תשובות בתוך חלון 24 השעות, אחרי 1,000 תשובות חינמיות בחודש לכל מספר. מעבר להן, כל תשובה ללקוח בישראל עולה 0.0053 דולר.
צריך אימות עסקי כדי להפעיל בוט WhatsApp?
לא כדי להתחיל. תיק עסקי שלא אומת יכול ליצור אפליקציה, לקבל מספר בדיקה ולרשום מספר של העסק. האימות הוא אחת הדרכים להעלות את מגבלת הפניות היזומות מ-250 ל-2,000 לקוחות ביממה.
למה הודעות מהטלפון לא מגיעות לשרת?
כל עוד האפליקציה לא פורסמה, Meta מעבירה ל-Webhook רק אירועי בדיקה מהלוח שלה. מוסיפים כתובת למדיניות פרטיות, מפרסמים את האפליקציה ובודקים שהשדה messages מסומן.
מה ההבדל בין טוקן זמני לטוקן קבוע?
הטוקן הזמני נוצר בלוח של Meta ופג תוך שעות. טוקן של משתמש מערכת עם תוקף "אף פעם" לא פג והוא מה שמריץ את הבוט לאורך זמן.
Claude Code יכול להגדיר גם את הצד של Meta?
חלק גדול ממנו. דרך שרת ה-MCP הרשמי של Meta, WhatsApp Business Tools, סוכן יכול להגדיר Webhooks, לרשום מספרים ולשלוח הודעות. את האפליקציה ואת הטוקן הקבוע יוצרים בלוח של Meta. נכון לספטמבר 2026 השרת בבטא.
אפשר להשתמש ב-Codex במקום Claude?
כן. ההוראות במסלול האוטומטי עובדות עם כל סוכן קוד ובתיעוד של ה-MCP של Meta יש הוראות חיבור גם ל-Codex ול-ChatGPT.
המקורות הרשמיים
- תחילת העבודה עם Cloud API: יצירת האפליקציה, מספר הבדיקה והטוקן הראשון.
- טוקנים ומשתמשי מערכת: הקצאת נכסים, WhatsApp account ו-Messaging account וההרשאות.
- Webhooks של WhatsApp: רשימת השדות, ניסיונות חוזרים עד 7 ימים ומצב Live.
- Webhooks ב-Graph API: אימות בבקשת GET והחתימה x-hub-signature-256.
- שמות משתמש ו-BSUID: from_user_id בהודעות נכנסות ושליחה עם recipient.
- המחירון של Meta: תמחור לפי הודעה, המחירים לפי מדינה והשכבה החינמית של הודעות שירות.
- עדכון המחירים לאוקטובר 2026: חיוב על הודעות שירות, אמצעי תשלום ו-Meta Business Agent.
- מגבלות הפניות: 250 ו-2,000 לקוחות ביממה והדרכים להעלות אותן.
- מספרי טלפון של העסק: רישום, שם תצוגה וקוד PIN.
- WhatsApp Business Tools MCP: הכלים, ההרשאות וההוראות ל-Claude Code, Codex ו-ChatGPT.
- פרסום אפליקציה: Publish ו-Go live באפליקציות לפי שימוש.
- גרסאות Graph API: v26.0, מ-29 ביולי 2026.
- Supabase CLI: התקנה כתלות של הפרויקט והרצה עם npx.
- הגדרות Edge Functions: verify_jwt לפונקציה שמקבלת Webhooks.
- משימות רקע ב-Supabase: EdgeRuntime.waitUntil.
- המחירון של Supabase: 500,000 הפעלות בחודש והשהיה של פרויקט חינמי.
- GreenAPI: התוכניות והמחירים.
הירשמו לעדכונים במייל
רוצים להישאר צעד אחד קדימה?
עדכונים על כלי AI, מדריכים וטיפים - ישר למייל. בלי ספאם.
