سجّل رسائل WhatsApp في Airtable وأرسل من القاعدة
لا يقبل مشغّل خطاف الويب (webhook) الوارد في Airtable سوى طلبات POST، لذلك لا يستطيع الرد على طلب GET الذي ترسله Meta للتحقق، ولا يصلح أن يكون وجهة webhook للرقم بنفسه. وجّه الوجهة إلى سير عمل n8n يضيف كل رسالة إلى جدول. أما الإرسال فيعمل من داخل Airtable: يستطيع إجراء Run a script استدعاء Cloud API عبر fetch مع رمز الوصول (token) الخاص بالرقم المخزّن كسر.
مشغّل When webhook received في Airtable لا يقبل أي طريقة أخرى، فلا يستطيع الرد على طلب GET للتحقق.
حد الطلبات على مشغّل webhook الوارد في Airtable، مع سقف 100 KB للحمولة.
عدد الطلبات التي يستطيع إجراء Run a script واحد في Airtable تنفيذها، وتنتهي مهلة كل طلب بعد 30 ثانية.
لماذا لا يستطيع Airtable استقبال webhook من WhatsApp مباشرة؟
لأن Meta تفحص الوجهة قبل أن تسلّم أي شيء. ترسل طلب GET يحمل قيمة تحدٍّ (challenge) وتتوقع أن تعود القيمة نفسها في نص الاستجابة. مشغّل When webhook received في Airtable يقبل طلبات POST فقط ويرد بـ JSON ثابت خاص به، فلا يمكن أن ينجح الفحص ولا تبدأ Meta التسليم أبدًا.
الحل خطوة وسيطة واحدة. تتولى عقدة Webhook في n8n التحقق واستقبال كل رسالة، وتضيف عقدة Airtable في n8n صفًا فيه: المرسل، واسم الملف الشخصي، والنص، ومعرّف الرسالة، والطابع الزمني، وphone number id للرقم المستقبِل. والشكل نفسه يعمل في Make أو Zapier.
وللخطوة الوسيطة فائدة ثانية. يسمح مشغّل webhook في Airtable بخمسة طلبات في الثانية، بينما تستطيع أداة سير العمل وضع دفعة مفاجئة في طابور بدل رفضها.
كيف ترسل قالب WhatsApp من قاعدة Airtable؟
عبر أتمتة إجراؤها Run a script. يمكن أن يكون المشغّل دخول سجل إلى عرض، أو تغيّر حقل، أو النقر على زر. يقرأ السكربت هاتف السجل وحقوله عبر input.config() ثم يستدعي نقطة النهاية (endpoint) الخاصة بالرسائل في Cloud API باستخدام fetch. تعمل سكربتات الأتمتة في Airtable على الخادم، فلا توجد قيود متصفح في الطريق.
خزّن token كسرًا في محرر السكربت بدل وضعه في الشيفرة. يخفي 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 إلى webhook نفسه على شكل أحداث smb_message_echoes، وتسجيلها كصفوف outbound يمنح القاعدة المحادثة كاملة لا نصفها.
اربط كل رسالة بجدول Contacts مفتاحه رقم الهاتف أرقامًا فقط، وهي الصيغة التي ترسلها Meta. يعرض حقل rollup بعدها وقت آخر رسالة واردة لكل جهة اتصال، وهذا الحقل وحده ما تحتاجه الأتمتة لتختار بين النص الحر والقالب.
الأخطاء الشائعة
- تعيين عنوان URL لـ webhook من Airtable وجهةً للرقم. فهو يقبل POST فقط، ويفشل طلب GET للتحقق من Meta، ولا يُسلَّم شيء أبدًا.
- لصق token الوصول داخل متن السكربت. خزّنه كسر ليبقى خارج الشيفرة والسجلات.
- إرسال نص حر من أتمتة سجل إلى شخص لم يراسلك منذ 24 ساعة. لا يُسلَّم إلا قالب معتمد.
اربط الرقم في easycoexistence.com، ووجّه وجهة webhook الخاصة به إلى سير عمل n8n الذي يكتب في Airtable، ثم اقرأ phone number id وtoken من لوحة التحكم. من US$ 9 لكل رقم شهريًا، وتنخفض إلى US$ 1 مع إضافة أرقام جديدة، وأول 3 أيام مجانية.
الأسئلة الشائعة
هل Run a script متاح في خطة Airtable المجانية؟
تدرج Airtable هذا الإجراء في جميع أنواع الخطط مع قيود متفاوتة، وتشير إلى أنه غير متاح في الفترة التجريبية لخطة Team.
هل أستغني عن n8n وأستخدم Make أو Zapier؟
نعم. يستطيع أي منها استقبال webhook والرد على التحقق وإضافة الصف. Airtable نفسه هو الجزء الوحيد الذي لا يصلح أن يكون الوجهة.
هل يستطيع زر في Airtable إرسال رسالة WhatsApp؟
نعم. استخدم مشغّل When a button is clicked مع إجراء Run a script يستدعي Cloud API، وتملأ بيانات الصف القالب.
هل تخزّن EasyCoexistence الرسائل؟
لا. تسلّم Meta كل webhook إلى عنوان n8n الخاص بك، والنسخة الوحيدة هي التي يكتبها سير عملك في Airtable.
تابع القراءة
هل أنت مستعد للبدء؟
أعد إعداد WhatsApp Coexistence خلال دقائق، وليس أشهر. يواصل التطبيق العمل على الهاتف.
ابدأ الفترة التجريبية المجانيةتم التحقق في