רישום הודעות WhatsApp ב-Airtable ושליחה מתוך Base
הטריגר של Airtable לקבלת וובהוק (Webhook) מקבל בקשות POST בלבד, ולכן הוא לא יכול לענות על בקשת ה-GET של Meta לאימות, ולא יכול לשמש בעצמו יעד וובהוק של מספר. מפנים את היעד לתהליך n8n שמוסיף כל הודעה לטבלה. השליחה עובדת מתוך Airtable: אוטומציית Run a script יכולה לקרוא ל-Cloud API עם fetch ועם אסימון גישה (Access Token) של המספר, ששמור כסוד.
הטריגר של Airtable לקבלת וובהוק לא מקבל שיטה אחרת, ולכן הוא לא יכול לענות על בקשת GET לאימות.
מגבלת הבקשות בטריגר הוובהוק של Airtable, עם תקרה של 100 KB לכל בקשה.
מספר הבקשות שפעולת Run a script אחת ב-Airtable יכולה לבצע, וכל בקשה נקטעת אחרי 30 שניות.
למה Airtable לא יכול לקבל וובהוקים של WhatsApp ישירות?
כי Meta בודקת יעד לפני שהיא מעבירה אליו משהו. היא שולחת בקשת GET עם ערך אתגר (challenge) ומצפה לקבל את אותו ערך בגוף התגובה. הטריגר של Airtable לקבלת וובהוק מקבל בקשות POST בלבד ועונה ב-JSON קבוע משלו, ולכן הבדיקה לא יכולה לעבור ו-Meta אף פעם לא מתחילה למסור הודעות.
הפתרון הוא שלב אחד באמצע. צומת Webhook של n8n מטפל באימות ומקבל כל הודעה, וצומת Airtable של n8n מוסיף שורה: שולח, שם הפרופיל, הטקסט, מזהה ההודעה, חותמת זמן ומזהה המספר המקבל. אותו מבנה עובד גם ב-Make או ב-Zapier.
לשלב האמצעי יש יתרון שני. הטריגר של Airtable מאפשר חמש בקשות בשנייה, וכלי תהליכים יכול להחזיק בתור התפרצות שאחרת הייתה נדחית.
איך אפשר לשלוח מתוך Base של Airtable תבנית של WhatsApp לכל לקוח?
באמצעות אוטומציה שהפעולה בה היא Run a script. הטריגר יכול להיות כניסה של רשומה לתצוגה, שינוי בשדה או לחיצה על כפתור. הסקריפט קורא את הטלפון והשדות של הרשומה דרך input.config() וקורא לנקודת הקצה messages של ה-Cloud API עם fetch. סקריפטים של אוטומציות ב-Airtable רצים בצד השרת, ולכן אין הגבלות דפדפן בדרך.
שומרים את אסימון הגישה כסוד בעורך הסקריפט ולא בקוד. Airtable מסתירה סודות בפלט הקונסולה, ורק מי שיש לו גישה לכל הסודות של סקריפט יכול לערוך אותו.
משתמשים בתבנית לכל מה שהלקוח לא יזם ב-24 השעות האחרונות, כי טקסט חופשי נמסר רק בתוך החלון הזה. הסקריפט יכול לכתוב את מזהה ההודעה שהוחזר בחזרה לרשומה, וכך לקשור את השליחה לשורה.
const { phone, name } = input.config();
const token = input.secret("WHATSAPP_TOKEN");
const res = await fetch(
"https://graph.facebook.com/v23.0/<PHONE_NUMBER_ID>/messages",
{
method: "POST",
headers: { Authorization: "Bearer " + token, "Content-Type": "application/json" },
body: JSON.stringify({
messaging_product: "whatsapp",
to: phone,
type: "template",
template: {
name: "order_ready",
language: { code: "en" },
components: [{ type: "body", parameters: [{ type: "text", text: name }] }],
},
}),
},
);
output.set("result", await res.json());איך צריכה להיראות טבלת ההודעות?
שורה אחת לכל הודעה, כשמזהה ההודעה של WhatsApp הוא השדה הראשי. Meta שולחת שוב מסירות שנראות לה ככושלות, ותהליך שבודק את המזהה לפני ההוספה לא כותב אותה הודעה פעמיים.
כדאי להוסיף שדה כיוון עם הערכים inbound ו-outbound. במספר Coexistence, תשובות שהצוות מקליד באפליקציית WhatsApp Business מגיעות לאותו וובהוק כאירועי smb_message_echoes, ורישום שלהן כשורות יוצאות נותן ל-Base את השיחה המלאה ולא צד אחד שלה.
מקשרים כל הודעה לטבלת Contacts עם מפתח של מספר הטלפון בספרות בלבד, וזו הצורה ש-Meta שולחת. שדה Rollup מראה אז את זמן ההודעה הנכנסת האחרונה לכל איש קשר, ושדה בודד זה הוא מה שאוטומציה צריכה כדי להחליט בין טקסט חופשי לתבנית.
טעויות נפוצות
- הגדרת כתובת וובהוק של Airtable כיעד של המספר. היא מקבלת POST בלבד, בקשת ה-GET של Meta לאימות נכשלת, ושום דבר לא נמסר לעולם.
- הדבקת אסימון הגישה בגוף הסקריפט. שומרים אותו כסוד של הסקריפט, כך שהוא נשאר מחוץ לקוד וליומנים.
- שליחת טקסט חופשי מאוטומציית רשומה למי שלא כתב ב-24 השעות האחרונות. רק תבנית מאושרת נמסרת.
מחברים את המספר ב-easycoexistence.com, מפנים את יעד הוובהוק שלו לתהליך n8n שכותב ל-Airtable, וקוראים מלוח הבקרה את מזהה המספר ואת האסימון. החל מ-US$ 9 למספר בחודש, יורד ל-US$ 1 ככל שמוסיפים מספרים, עם תקופת ניסיון של 3 ימים.
שאלות נפוצות
האם הפעולה Run a script זמינה בתוכנית החינמית?
Airtable מציינת את הפעולה בכל סוגי התוכניות, עם מגבלות שונות, וכותבת שהיא לא זמינה בתקופת ניסיון של תוכנית Team.
האם אפשר לוותר על n8n ולעבוד עם Make או Zapier במקומו?
כן. כל אחד משלושת הכלים יכול לקבל את הוובהוק, לענות על האימות ולהוסיף את השורה. Airtable עצמה היא החלק היחיד שלא יכול לשמש יעד.
האם לחיצה על כפתור יכולה לשלוח הודעת WhatsApp מתוך הטבלה?
כן. משתמשים בטריגר When a button is clicked עם פעולת Run a script שקוראת ל-Cloud API, ונתוני השורה ממלאים את התבנית.
האם EasyCoexistence שומרת את ההודעות?
לא. Meta מוסרת כל וובהוק לכתובת ה-n8n שלכם, והעותק היחיד הוא זה שהתהליך שלכם כותב לטבלה שלכם.
המשיכו לקרוא
מוכנים להתחיל?
מגדירים WhatsApp Coexistence בתוך דקות, לא חודשים. האפליקציה ממשיכה לעבוד בטלפון.
התחילו תקופת ניסיון בחינםנבדק ב-