كيفية بناء بوت توليد العملاء المحتملين على واتساب باستخدام Webhooks
21 مايو 2026
·
13 دقيقة قراءة
ما الذي ستبنيه: بوت وارد لتوليد العملاء عبر WhatsApp · آلة حالات للمحادثة (Redis) · تسجيل التأهيل عبر GPT-4o · كتابة عبر CRM API · تنبيه تسليم عبر Slack · بديل بدون كود عبر n8n · كود Node.js كامل في كل الخطوات
ما الذي ستبنيه في هذا الدرس
بوت WhatsApp وارد يؤهل العملاء المحتملين من خلال المحادثة
آلة حالات مدعومة بـ Redis تتتبع مرحلة كل جهة اتصال
GPT-4o يقيّم العملاء من 1–10 بمخرجات JSON
كتابة إلى CRM HubSpot/Pipedrive عند التأهيل
تنبيه Slack لتسليم العملاء ذوي التقييم العالي إلى البشر
بديل بدون كود عبر n8n لكامل التدفق
الوارد أولاً: لماذا تتفوق هذه البنية على البوتات الصادرة
كل درس عن بوتات WhatsApp بدون كود يلجأ افتراضياً إلى الصادر — قوالب، BotPress، Make.com، إرسال رسائل إلى قوائم. وهذا هو المسار الصعب. تتطلب Meta الموافقة على القالب (1–5 أيام عمل)، وتفرض رسوماً على كل رسالة صادرة، وتحظر الأرقام التي ترسل محتوى موسوماً كرسائل مزعجة. معظم الدروس تتجاوز هذه التفاصيل بسرعة ثم تكتشفها أنت في الحادية عشرة ليلاً عندما يتم تقييد رقمك.
البنية الأفضل هي الوارد أولاً:
العميل يرسل لك رسالة أولاً (من إعلان Click-to-WhatsApp، أو رابط WhatsApp، أو رمز QR)
هذا يفتح نافذة خدمة مجانية لمدة 24 ساعة — كل ردودك مجانية
لا حاجة للموافقة على القوالب لأي رد ضمن هذه النافذة
يطلق webhook الخاص بك، ويتولى البوت الأمر، ويؤهل العملاء أنفسهم
هذه ليست استراتيجية سلبية. أنت تدفع حركة المرور الواردة عبر إعلانات مدفوعة — Click-to-WhatsApp على Facebook وInstagram يرسل الناس مباشرة إلى محادثة WhatsApp مع رقمك. تمنحك Meta نافذة مجانية لمدة 72 ساعة لتلك المحادثات (وليس 24 فقط). أنت تدفع مقابل النقرة على الإعلان. محادثة التأهيل مجانية.
نظرة عامة على البنية
خمسة مكونات. كلها قابلة للاستبدال — استبدل HubSpot بـ Salesforce، GPT-4o بـ Claude 3، Redis بـ DynamoDB. البنية هي الثابت؛ الموردون اختياريون.
Architecture
pipeline.txt
العميل يرسل رسالة WhatsApp
↓
[WhatsApp Cloud API] — يطلق webhook بطلب HTTP POST
↓
[SocialHook] — يتحقق من HMAC، يطبّع الحمولة، تسليم <50ms
↓
[خادم Webhook الخاص بك — Node.js / Express]
1. تحميل حالة المحادثة من Redis (حسب رقم الهاتف)
2. تقديم آلة الحالات: طرح السؤال التأهيلي التالي
3. أو: استدعاء GPT-4o للتقييم النهائي
4. الرد عبر نقطة وصول Graph الخاصة بـ Cloud API
5. حفظ الحالة المحدّثة في Redis
↓
[Redis] — مخزن حالة المحادثة (TTL: 48 ساعة لكل جهة اتصال)
↓
عند QUALIFIED (التقييم ≥ 7):
→ POST إلى HubSpot / Pipedrive CRM API
→ POST إلى Slack webhook (تنبيه فريق المبيعات)
→ الرد على العميل: "سيتواصل معك متخصص خلال ساعتين"
عند DISQUALIFIED (التقييم < 4):
→ تسجيل في قاعدة البيانات
→ إرسال رابط مورد مفيد
→ إغلاق المحادثة
الخطوة 1: تشغيل طبقة Webhook
قبل كتابة منطق البوت، تحتاج أن تصل رسائل WhatsApp الواردة إلى خادمك كـ JSON نظيف. أسرع طريق: ربط رقم WhatsApp الخاص بك بـ SocialHook، ولصق عنوان URL لخادمك كوجهة، وتصل كل رسالة واردة كحمولة مطبّعة في أقل من 50 مللي ثانية.
إذا كنت تريد webhooks مباشرة من Cloud API بدلاً من ذلك، اتبع دليل الإعداد الكامل. لهذا الدرس، سنستخدم تنسيق SocialHook المطبّع الذي يلغي الحاجة إلى كود التحقق من HMAC واستخراج الحمولة المتداخلة في معالج البوت.
الحمولة التي يستقبلها معالج البوت لكل رسالة عميل واردة:
JSON
inbound-event.json (SocialHook normalized)
{
"platform": "whatsapp",
"event": "message.received",
"timestamp": 1747231892,
"from": "+1 555 000 1234", // E.164 — مفتاح آلة الحالات"conversation_id": "conv_8j3k...",
"message": {
"type": "text",
"body": "Hi, I want to know more about your product",
"id": "wamid.HBgL..."
},
"signature_verified": true
}
الخطوة 2: تصميم آلة حالات المحادثة
آلة الحالات هي جوهر البوت. كل رسالة WhatsApp هي حدث HTTP عديم الحالة — لا يحتفظ خادمك بأي ذاكرة للرسائل السابقة ما لم تخزّنها. يوفر لك Redis مخزن مفتاح-قيمة سريع قائم على TTL لكل رقم هاتف. يتتبع كائن الحالة كلاً من الخطوة التي وصلت إليها المحادثة والبيانات التي تم جمعها حتى الآن.
إليك تدفق التأهيل الكامل بـ 7 حالات:
الحالةرسالة البوت المرسلةتنتقل إلى
GREETING
أهلاً! 👋 شكراً لتواصلك مع [الشركة]. أنا هنا لمساعدتك في إيجاد الحل المناسب لك. ما اسمك؟
→ COLLECT_NAME
COLLECT_NAME
سعدت بلقائك يا [الاسم]! من أي شركة أنت؟
→ COLLECT_COMPANY
COLLECT_COMPANY
رائع. ما الذي تحاول حله — ما أكبر تحدٍّ يجعلك تأتي إلى هنا اليوم؟
→ COLLECT_USE_CASE
COLLECT_USE_CASE
فهمت. تقريباً كم عدد الرسائل أو المحادثات التي تتعامل معها شهرياً؟
→ COLLECT_VOLUME
COLLECT_VOLUME
وما هو ميزانيتك الشهرية التقريبية لمثل هذه الأداة؟
→ COLLECT_BUDGET
COLLECT_BUDGET
شكراً — أمهلني لحظة لأجمّع لك المعلومات المناسبة. ⏳
→ QUALIFYING (GPT-4o)
QUALIFIED (التقييم ≥ 7)
أنت مناسب تماماً لما نقدمه. سيتواصل معك متخصص خلال ساعتين. هل يمكنني التأكد من بريدك الإلكتروني؟
→ كتابة CRM + Slack
DISQUALIFIED (التقييم < 4)
شكراً [الاسم]! بناءً على احتياجاتك، إليك مورد قد يساعد: [الرابط]. لا تتردد في التواصل عندما يكون التوقيت مناسباً.
→ تسجيل + إغلاق
كيف تبدو المحادثة من منظور العميل:
🤖
YourCompany Bot
● متصل
الحالة: GREETING
أهلاً! 👋 شكراً لتواصلك. أنا هنا لمساعدتك في إيجاد الحل المناسب. ما اسمك؟
مرحباً، أنا سارة
الحالة: COLLECT_COMPANY
سعدت بلقائك يا سارة! من أي شركة أنت؟
Acme Corp، نحن علامة تجارة إلكترونية تعالج حوالي 50 ألف طلب شهرياً
الحالة: COLLECT_USE_CASE
رائع. ما الذي تحاولين حله — ما أكبر تحدٍّ يجعلك تأتين إلى هنا اليوم؟
نحن نغرق في تذاكر دعم WhatsApp. نحتاج إلى أتمتة حالة الطلبات والمرتجعات
الحالة: QUALIFYING → تقييم GPT-4o
شكراً — أمهليني لحظة لأجمّع لك المعلومات المناسبة. ⏳
الحالة: QUALIFIED (التقييم: 9/10) → كتابة CRM + تنبيه Slack
أنت مناسبة تماماً لما نقدمه يا سارة. سيتواصل معك متخصص خلال ساعتين لمناقشة إعدادك المحدد. هل يمكنني التأكد من بريدك الإلكتروني للمتابعة؟
الخطوة 3: بناء آلة الحالات في Node.js
يحمّل معالج webhook الحالة من Redis، ويشغّل منطق آلة الحالات، ويرد عبر Cloud API، ويحفظ الحالة الجديدة. هذا هو التنفيذ الكامل بجودة الإنتاج:
Node.js + Express + Redis
leadBot.js
const express = require('express');
const redis = require('redis');
const { sendWhatsApp } = require('./whatsapp'); // انظر أدناهconst { scoreLead } = require('./scorer'); // مقيّم GPT-4oconst { writeCRM, notifySlack } = require('./integrations');
const app = express();
const store = redis.createClient({ url: process.env.REDIS_URL });
await store.connect();
app.use(express.json());
// SocialHook ينشر الأحداث المطبّعة هنا
app.post('/webhook', async (req, res) => {
res.sendStatus(200); // إقرار فوريconst event = req.body;
if (event.event !== 'message.received') return;
if (event.message.type !== 'text') return;
const phone = event.from;
const text = event.message.body.trim();
// تحميل الحالة — افتراضياً GREETING إذا كان الاتصال الأولconst raw = await store.get(`lead:${phone}`);
const state = raw ? JSON.parse(raw) : { stage: 'GREETING', data: {} };
const next = awaitadvance(phone, text, state);
// حفظ الحالة المحدّثة مع TTL لـ 48 ساعةawait store.set(
`lead:${phone}`,
JSON.stringify(next),
{ EX: 172800 } // 48 ساعة
);
});
async functionadvance(phone, text, state) {
switch (state.stage) {
case'GREETING':
awaitsendWhatsApp(phone,
"Hey! 👋 Thanks for reaching out. What's your name?"
);
return { stage: 'COLLECT_NAME', data: {} };
case'COLLECT_NAME':
awaitsendWhatsApp(phone,
`Nice to meet you, ${text}! What company are you from?`
);
return { stage: 'COLLECT_COMPANY', data: { name: text } };
case'COLLECT_COMPANY':
awaitsendWhatsApp(phone,
"What's the main pain point bringing you here today?"
);
return {
stage: 'COLLECT_USE_CASE',
data: { ...state.data, company: text }
};
case'COLLECT_USE_CASE':
awaitsendWhatsApp(phone,
"How many conversations do you handle per month roughly?"
);
return {
stage: 'COLLECT_VOLUME',
data: { ...state.data, useCase: text }
};
case'COLLECT_VOLUME':
awaitsendWhatsApp(phone,
"And your approximate monthly budget for this?"
);
return {
stage: 'COLLECT_BUDGET',
data: { ...state.data, volume: text }
};
case'COLLECT_BUDGET': {
awaitsendWhatsApp(phone,
"Thanks — just a moment while I put together the right info for you. ⏳"
);
const leadData = { ...state.data, budget: text };
// تقييم غير متزامن — لا تتوقف عند هذا، المستدعي يتولى الحالةqualifyLead(phone, leadData); // أطلق وانسَ مع معالجة الأخطاء الخاصة بهreturn { stage: 'QUALIFYING', data: leadData };
}
case'COLLECT_EMAIL': {
// الخطوة الأخيرة بعد QUALIFIED — جمع البريد والإغلاقconst finalData = { ...state.data, email: text };
awaitwriteCRM(phone, finalData);
awaitsendWhatsApp(phone,
`Perfect, ${finalData.name}! You're all set. Talk soon. 🚀`
);
return { stage: 'DONE', data: finalData };
}
default:
return state; // QUALIFYING / DONE / DISQUALIFIED — تجاهل الرسائل الإضافية
}
}
app.listen(3000);
الخطوة 4: تقييم تأهيل العملاء عبر GPT-4o
بعد جمع جميع بيانات التأهيل، ترسلها إلى GPT-4o مع موجه منظّم. يعيد النموذج كائن تقييم بصيغة JSON — لا تحليل regex، ولا تخمين. المفتاح هو توجيه النموذج لإعادة JSON فقط ولا شيء غير ذلك.
7 – 10
عميل ساخن
تسليم فوري للبشر. تنبيه Slack للمبيعات. صفقة CRM منشأة بأولوية عالية. إبلاغ العميل بأن المتخصص سيتواصل خلال ساعتين.
4 – 6
عميل دافئ
جهة اتصال CRM منشأة بأولوية متوسطة. تشغيل سلسلة بريد إلكتروني آلية. إرسال موارد المنتج ودراسة حالة إلى العميل.
1 – 3
غير مناسب
مسجّل ولكن بدون صفقة CRM. إرسال مورد مفيد للعميل. إغلاق المحادثة برسالة خروج لبقة.
Node.js + OpenAI
scorer.js
const OpenAI = require('openai');
const oai = newOpenAI({ apiKey: process.env.OPENAI_API_KEY });
async functionscoreLead(leadData) {
const prompt = `You are a B2B lead qualification expert.
Score this lead from 1 to 10 based on fit and intent.
Return ONLY a JSON object — no preamble, no markdown.
Lead data:
- Name: ${leadData.name}
- Company: ${leadData.company}
- Use case: ${leadData.useCase}
- Volume: ${leadData.volume} conversations/month
- Budget: ${leadData.budget}/month
Our product: WhatsApp webhook infrastructure for developers.
Ideal customer: technical team, 500+ convos/month, budget $50–$500.
Return this exact JSON shape:
{
"score": <1-10 integer>,
"rationale": "<2 sentence explanation>",
"action": "handover" | "nurture" | "disqualify",
"priority": "high" | "medium" | "low"
}`;
const response = await oai.chat.completions.create({
model: 'gpt-4o',
max_tokens: 200,
temperature: 0.2, // درجة حرارة منخفضة = تقييم متّسق
messages: [{ role: 'user', content: prompt }],
response_format: { type: 'json_object' } // إجبار مخرجات JSON
});
returnJSON.parse(response.choices[0].message.content);
}
// يُستدعى بعد COLLECT_BUDGET — التدفق الكامل غير المتزامنasync functionqualifyLead(phone, leadData) {
try {
const result = awaitscoreLead(leadData);
if (result.action === 'handover') {
awaitsendWhatsApp(phone,
`You're a great fit, ${leadData.name}! A specialist reaches out in 2h. What's your email?`
);
await store.set(`lead:${phone}`, JSON.stringify({
stage: 'COLLECT_EMAIL', data: { ...leadData, score: result.score }
}), { EX: 172800 });
awaitnotifySlack(phone, leadData, result);
} else if (result.action === 'nurture') {
awaitsendWhatsApp(phone,
`Thanks ${leadData.name}! Here's a case study that fits your situation: [link]`
);
} else {
awaitsendWhatsApp(phone,
`Thanks for reaching out! We might not be the best fit right now, but here's a resource: [link]`
);
}
} catch (err) {
console.error('Scorer error:', err);
// احتياطي: التوجيه إلى البشر على أي حالawaitsendWhatsApp(phone, "Let me connect you with our team. One moment!");
awaitnotifySlack(phone, leadData, { score: 'ERROR', rationale: err.message });
}
}
module.exports = { scoreLead, qualifyLead };
الخطوة 5: كتابة العملاء المؤهلين إلى CRM
بعد التقييم، تكتب العميل إلى HubSpot (أو Pipedrive، Salesforce — استبدل النقطة النهائية). يصبح رقم هاتف WhatsApp معرّف جهة الاتصال. ضمّن ملخص المحادثة حتى يكون لمندوب المبيعات السياق الكامل عند الاتصال.
يرسل البوت الردود عبر نقطة وصول /messages الخاصة بـ WhatsApp Cloud API. هذا هو الجانب الصادر — استخدم رمز الوصول الدائم لمستخدم النظام ومعرّف رقم الهاتف.
تنسيق رقم الهاتف: يسلّم SocialHook حقل from بصيغة E.164 مع البادئة + (+15550001234). يتوقع حقل to في Cloud API نفس صيغة E.164. استخدم event.from مباشرة كقيمة to — لا حاجة لأي تحويل عند استخدام تنسيق SocialHook المطبّع.
البديل بدون كود: سير عمل n8n
إذا كنت تريد البوت نفسه دون كتابة Node.js، يمكنك بناؤه في n8n. البنية متطابقة — يسلّم SocialHook webhook إلى n8n، ويتولى n8n منطق الحالة باستخدام عُقد الكود ودمج Redis.
n8n Workflow
n8n-lead-gen-workflow.txt
سير عمل n8n: بوت توليد عملاء WhatsApp──────────────────────────────────────
1. مشغّل Webhook
→ الطريقة: POST
→ المسار: /whatsapp-lead
→ الرابط: الصقه في وجهة SocialHook
2. عقدة كود — تحميل الحالة
→ Redis: GET lead:{{ $json.from }}
→ تحليل JSON أو الافتراضي { stage: 'GREETING', data: {} }
3. عقدة Switch — تفريع حسب state.stage
→ GREETING → الفرع A
→ COLLECT_NAME → الفرع B
→ COLLECT_* → الفروع C–E
→ COLLECT_BUDGET → الفرع F (يطلق التقييم)
→ COLLECT_EMAIL → الفرع G (الكتابة النهائية في CRM)
4. عقدة طلب HTTP (لكل فرع)
→ POST إلى graph.facebook.com/v21.0/${PHONE_ID}/messages
→ Body: { messaging_product, to, type: 'text', text: { body } }
→ التوثيق: ترويسة Bearer token
5. عقدة كود — تحديث الحالة
→ Redis: SET lead:{{ $json.from }} {{ JSON.stringify(newState) }} EX 172800
6. على فرع COLLECT_BUDGET:
→ عقدة OpenAI: Chat Completions (gpt-4o)
→ الرسالة: موجه التقييم مع بيانات العميل
→ تحليل استجابة JSON: score, action
7. عقدة Switch — تفريع حسب الإجراء
→ handover: → عقدة Slack + إنشاء جهة اتصال HubSpot
→ nurture: → طلب HTTP (إرسال رسالة مورد)
→ disqualify: → طلب HTTP (رسالة خروج لبقة)
التبعيات: دمج Redis، دمج OpenAI،دمج HubSpot — جميعها متوفرة أصلاً في n8n.
SocialHook + n8n: اضبط SocialHook لإعادة توجيه أحداث webhook إلى عنوان webhook الخاص بـ n8n. يتولى SocialHook التحقق من HMAC لـ Meta وتطبيع الحمولة — يستلم n8n نص JSON نظيفاً دون الحاجة إلى أي معالجة مسبقة. هذا يعمل سواء كنت تستضيف n8n ذاتياً أو على n8n Cloud. انظر دليل دمج SocialHook مع n8n لإعداد وجهة HTTP الدقيق.
الخطوة 7: قيادة حركة المرور الواردة إلى البوت
بوت webhook بدون حركة مرور هو مجرد خادم يحرق الموارد الحاسوبية. ثلاث قنوات تولّد محادثات WhatsApp واردة دون الحاجة إلى الموافقة على القوالب:
إعلانات Click-to-WhatsApp (Facebook + Instagram)
أنشئ إعلان توليد عملاء على Facebook أو Instagram مع CTA من نوع Click-to-WhatsApp. عندما ينقر شخص ما، يفتح WhatsApp مع رقمك مملوءاً مسبقاً. يرسلون رسالة، تفتح نافذتك المجانية لـ 72 ساعة، ويعمل البوت. هذه أعلى قناة وارد تحقيقاً للتحويل — أنت تستهدف حسب الاهتمام والنية، والقفز من الإعلان إلى المحادثة بنقرة واحدة. كل محادثة يؤهلها بوتك من إعلان CTA معفاة من رسوم رسائل Meta لمدة 72 ساعة.
رابط WhatsApp / رمز QR
أنشئ رابط wa.me/+{your_number}?text=Hi. ضمّنه في موقعك، توقيع بريدك، ملفك على LinkedIn، وصفحات الهبوط. أي شخص ينقر يفتح محادثة WhatsApp مملوءة مسبقاً إلى رقمك. نسخة رمز QR تعمل على المواد المطبوعة والفعاليات والتعبئة. صفر تكلفة، صفر إعداد عدا توليد الرابط.
زر WhatsApp على موقعك
زر WhatsApp عائم يستبدل أداة الدردشة الحية لديك — ويحوّل بمعدلات أعلى بكثير. الزوار الذين ينقرون يذهبون مباشرة إلى WhatsApp (هاتف محمول) أو يمسحون رمز QR (سطح المكتب). يتولى بوتك التأهيل قبل أن يرى الإنسان المحادثة. هذا يستبدل اشتراك دردشة حية مكلف ببنية التأهيل الخاصة بك مقابل 50 دولاراً شهرياً إجمالاً.
FAQ
أسئلة شائعة
كيف يعمل بوت توليد العملاء عبر WhatsApp مع webhooks؟
عندما يراسل عميل رقم WhatsApp Business الخاص بك، يطلق Cloud API طلب HTTP POST إلى نقطة وصول webhook لديك. يقرأ خادمك الرسالة، يحمّل حالة المحادثة من Redis، يطرح السؤال التأهيلي التالي، يرسل رداً عبر Cloud API، ويحفظ الحالة المحدّثة. تتكرر هذه الدورة لكل رسالة حتى يتم تقييم العميل وتوجيهه. انظر التدفق الكامل في قسم البنية أعلاه.
هل يمكنني بناء هذا بدون BSP؟
نعم. سجّل رقم WhatsApp الخاص بك مباشرة عبر بوابة مطوري Meta (مجاناً، يستغرق 30 دقيقة). استخدم SocialHook كطبقة تسليم webhook — تتولى التحقق من HMAC وتطبيع الحمولة. تستدعي Cloud API مباشرة للردود الصادرة. لا حاجة لـ BSP، ولا رسوم منصة BSP. الدليل الكامل: احصل على وصول API بدون BSP.
لماذا Redis لحالة المحادثة بدلاً من قاعدة بيانات؟
Redis في الذاكرة، قراءات بأقل من مللي ثانية، ويدعم انتهاء صلاحية المفاتيح القائم على TTL أصلاً. يحتاج معالج webhook لديك إلى تحميل حالة المحادثة عند كل رسالة — التأخير هنا يؤثر مباشرة على سرعة الرد. استعلام PostgreSQL أو MongoDB يضيف 5–50 مللي ثانية لكل رسالة؛ Redis يضيف <1 مللي ثانية. ميزة TTL تتولى المحادثات المهجورة تلقائياً (TTL 48 ساعة يعني جمع الحالات القديمة دون أي وظيفة cron). للحجم المنخفض (<100 محادثة متزامنة)، يعمل Map محلي أو حتى قاعدة بيانات SQLite بشكل جيد.
ما الفرق بين توليد عملاء WhatsApp الوارد والصادر؟
الوارد: العميل يراسلك أولاً → نافذة مجانية 24 ساعة (72 ساعة من إعلانات Click-to-WhatsApp) → لا قالب مطلوب → الردود مجانية ضمن الحصة. الصادر: أنت تبدأ الاتصال → يتطلب قالباً معتمداً من Meta → موافقة 1–5 أيام → رسوم لكل رسالة → خطر حظر أعلى. لتوليد العملاء، الوارد أولاً هو البنية الصحيحة. قُد حركة المرور بالإعلانات أو الروابط، ودع البوت يتولى التأهيل على المحادثة الواردة.
كم تكلفة تشغيل هذا البوت شهرياً؟
تفصيل البنية التحتية: SocialHook (طبقة webhook) = 50 دولار شهرياً ثابتة. Redis (مستوى Upstash المجاني أو 7 دولار شهرياً) = ~7 دولار. OpenAI GPT-4o (200 توكن لكل استدعاء تقييم × حجم عملائك بـ ~0.005 دولار لكل استدعاء) = ~5–50 دولار حسب الحجم. HubSpot (مستوى CRM المجاني) = 0 دولار. Cloud API الوارد = 0 دولار (ضمن الحصة المجانية). الإجمالي لعملية 500 عميل/شهرياً: ~60–100 دولار شهرياً. لا رسوم لكل عميل، لا اشتراك BSP، لا تسعير قائم على جهات الاتصال.
كيف أتعامل مع الرسائل غير النصية (صور، مذكرات صوتية) في البوت؟
صفّها في معالج webhook بالتحقق من event.message.type !== 'text' وأرسل تنبيهاً لطيفاً: "الرجاء إرسال إجابتك كنص حتى أتمكن من مساعدتك بشكل أفضل." للمذكرات الصوتية، يمكنك اختيارياً تمرير event.message.id عبر Whisper API للتفريغ قبل المعالجة — رغم أن هذا يضيف تأخيراً وتكلفة. لتأهيل العملاء، النص فقط هو نقطة البداية الصحيحة. انظر شرح جميع أنواع الرسائل.
اربط رقم WhatsApp الخاص بك بـ SocialHook وابدأ في استقبال أحداث JSON مطبّعة إلى بوتك في أقل من 5 دقائق. آلة الحالات، التقييم، وكتابة CRM لك لتبنيها — SocialHook يضمن فقط أن كل رسالة واردة تصل نظيفة، متحقق منها، ومعاد المحاولة فيها.