كيفية التعامل مع رسائل وسائط WhatsApp في Webhooks (صور، مستندات، مذكرات صوتية)
22 مايو 2026
·
16 دقيقة قراءة
في هذا الدليل: جدول مرجعي لأنواع الوسائط · انتهاء صلاحية URL خلال 5 دقائق · خط أنابيب التنزيل الكامل · جميع مخططات حمولة الوسائط · التعامل مع الصور والمستندات · تحويل المذكرة الصوتية OGG→MP3 · تفريغ Whisper · أنماط تخزين S3/GCS · معالج كامل بجميع الأنواع · تنسيق SocialHook المطبّع
أنواع الوسائط: جدول مرجعي كامل
تُسلّم Cloud API 8 أنواع من رسائل الوسائط، لكل منها صيغ وحدود حجم ومتطلبات معالجة مختلفة. اعرف القيود قبل أن تبني المعالج.
قيمة type
الصيغ المقبولة
حد الحجم
ملاحظات خاصة
🖼️
image
JPEG, PNG
5 ميجابايت
caption اختياري. GIF غير مدعوم مدمجاً — أرسله كمستند.
🎵
audio
AAC, AMR, MP3, OGG/Opus
16 ميجابايت
voice: true إذا كانت مسجّلة داخل التطبيق (OGG/Opus). ملفات الصوت العادية قد تختلف. حوّل OGG دائماً قبل التفريغ.
🎬
video
MP4, 3GPP
16 ميجابايت
caption اختياري. يُنصح بفيديو H.264 + صوت AAC لأوسع توافق.
📄
document
أي نوع MIME تقبله Meta
100 ميجابايت
يتضمن filename — خزّنه. PDF, DOCX, XLSX، صور كمستندات، إلخ.
💿
sticker
WebP
ثابت 500 كيلوبايت / متحرّك 100 كيلوبايت
animated: true إذا كان متحركاً. صيغة WebP — تدعمها المتصفحات أصلياً الآن.
انتهاء صلاحية URL خلال 5 دقائق — التفصيل الذي يكسر معظم التطبيقات
هذا أكثر تفصيل يُغفله مطورو معالجة وسائط WhatsApp شيوعاً، ويسبب أكثر أخطاء الإنتاج. عندما تستدعي نقطة وسائط Cloud API لحل معرّف الوسائط، تستقبل URL تنزيل مؤقتاً. هذا الـ URL صالح لمدة تقارب 5 دقائق.
❌ خزّن الـ URL، نزّل لاحقاً — تستقبل webhook، تستدعي نقطة الوسائط، تخزّن الـ URL المؤقت في قاعدة بياناتك للمعالجة غير المتزامنة. بحلول الوقت الذي يلتقطه فيه عاملك، انتهت صلاحية الـ URL. تحصل على 403. هذا النمط يفشل.
✓ نزّل فوراً، خزّن الملف — تستقبل webhook، تحل معرّف الوسائط إلى URL فوراً، تنزّل البايتات فوراً، تخزّن الملف على تخزينك الخاص (S3, GCS, القرص)، تحفظ فقط مسار التخزين في قاعدة بياناتك. تعمل المعالجة غير المتزامنة على الملف المخزّن. هذا النمط صحيح.
بديل: خزّن معرّف الوسائط، حلّه عند الطلب. إذا لم تكن بحاجة إلى الملف فوراً، يمكنك تخزين معرّف الوسائط فقط وحله جديداً عندما تحتاج الملف. معرّفات الوسائط صالحة لمدة 30 يوماً — أطول بكثير من URL التنزيل المؤقت. هذا مفيد عندما لا تكون متأكداً ما إذا كنت ستحتاج البايتات أصلاً (مثلاً الملصقات التي قد تتجاهلها). فقط اعلم أن استدعاء الحل يضيف زمن استجابة عندما تحتاج إليه أخيراً.
خط أنابيب التنزيل: المعرّف ← URL ← البايتات ← التخزين
1
استقبل webhook — استخرج معرّف الوسائط
msg.image.id / msg.audio.id / msg.document.id — ليس URL، فقط مرجع
2
أعد HTTP 200 فوراً افعل هذا أولاً
أقرّ لـ Meta قبل أي تنزيلات. ادفع معالجة الوسائط إلى قائمة غير متزامنة.
3
حل معرّف الوسائط ← URL تنزيل مؤقت
GET graph.facebook.com/v21.0/{media_id} — يتطلب Authorization: Bearer {token} — يعيد url (تنتهي ~5 دقائق) + mime_type + file_size
4
نزّل بايتات الملف خلال 5 دقائق
GET {download_url} — يتطلب أيضاً Authorization: Bearer {token} — يعيد بايتات ثنائية خام
صورة: استخرج البيانات الوصفية، أنشئ صورة مصغّرة. صوت/صوتي: حوّل OGG→MP3، فرّغ. مستند: استخرج النص للبحث. فيديو: أنشئ إطار مصغّر.
مخططات الحمولة لكل نوع وسائط
إليك بنية كائن قيمة webhook الدقيقة لكل نوع وسائط. التداخل من الغلاف العلوي (entry[0].changes[0].value.messages[0]) مستخرج بالفعل عند استخدام تنسيق SocialHook المطبّع.
JSON — مخططات كل نوع وسائط
// رسالة صورة
{ "type": "image", "image": { "id": "wamid.img...", "mime_type": "image/jpeg", "sha256": "abc...", "caption": "optional" }}
// رسالة صوت (مذكرة صوتية داخل التطبيق)
{ "type": "audio", "audio": { "id": "wamid.aud...", "mime_type": "audio/ogg; codecs=opus", "sha256": "def...", "voice": true }}
// رسالة صوت (ملف صوتي، ليس مذكرة)
{ "type": "audio", "audio": { "id": "wamid.aud...", "mime_type": "audio/mpeg", "sha256": "ghi..." }}
// ملاحظة: حقل voice غائب أو false لملفات الصوت المرفوعة// رسالة فيديو
{ "type": "video", "video": { "id": "wamid.vid...", "mime_type": "video/mp4", "sha256": "jkl...", "caption": "optional" }}
// رسالة مستند
{ "type": "document", "document": { "id": "wamid.doc...", "mime_type": "application/pdf", "sha256": "mno...", "filename": "invoice-2026.pdf", "caption": "optional" }}
// رسالة ملصق
{ "type": "sticker", "sticker": { "id": "wamid.stk...", "mime_type": "image/webp", "sha256": "pqr...", "animated": false }}
التعامل مع الصور والمستندات
تشترك الصور والمستندات في نفس نمط التنزيل من خطوتين. الفرق الرئيسي: المستندات تتضمن حقل filename يجب أن تحتفظ به في مفتاح تخزينك — إنه ما سمّى به العميل الملف وما ستريد إظهاره في واجهتك.
المذكرات الصوتية المسجّلة في WhatsApp مُرمّزة بصيغة OGG/Opus. يمكنك التعرف عليها بعلامة voice: true في حمولة الصوت وقيمة mime_type: "audio/ogg; codecs=opus". هذه الصيغة غير مدعومة من OpenAI Whisper للتفريغ، ولديها دعم تشغيل محدود في المتصفحات.
الحل: حوّل إلى MP3 باستخدام ffmpeg. ffmpeg هو أداة تحويل الصوت العالمية، متوفر على كل نظام تشغيل رئيسي وجميع بيئات السحابة.
بمجرد حصولك على MP3، أرسله إلى Whisper API من OpenAI. يدعم Whisper 57 لغة، ويتعامل مع الضوضاء الخلفية بشكل جيد، ويكلّف ~0.006 دولار لكل دقيقة صوت — مذكرة صوتية مدتها 30 ثانية تكلّف أقل من سنت لتفريغها. ثم يصبح التفريغ نصاً قابلاً للبحث ومعالجة بالذكاء الاصطناعي.
ماذا تفعل بالتفريغ: خزّنه بجانب ملف الصوت. مرّره إلى وكيل الذكاء الاصطناعي الخاص بك كرسالة المستخدم (بدلاً من "تم استلام رسالة صوتية"). فهرسته في قاعدة بيانات البحث الخاصة بك. سجّله في CRM الخاص بك كنص المحادثة. يرسل العملاء مذكرات صوتية لأن الكتابة أبطأ — معاملة مذكراتهم الصوتية كنص قابل للبحث يحسّن بشكل كبير قدرة وكيل الذكاء الاصطناعي الخاص بك على الفهم والرد بشكل صحيح.
أنماط التخزين: نظّم ملفات الوسائط لديك
كيفية تنظيم الملفات في S3 أو GCS مهمّة للأداء، والفوترة، وتصحيح الأخطاء. إليك نمط مفتاح التخزين الذي يتسع بنظافة عبر عدة عملاء وأنواع رسائل:
عند استخدام SocialHook، تصل حمولة الوسائط مستخرجة بالفعل من غلاف Cloud API المتداخل من Meta. بدلاً من التنقل في entry[0].changes[0].value.messages[0]، تستقبل حدثاً مسطّحاً:
حدث وسائط مطبّع من SocialHook
// رسالة صورة
{
"platform": "whatsapp",
"event": "message.received",
"from": "+1 555 000 1234",
"message": {
"type": "image",
"id": "wamid.HBgL...",
"image": {
"id": "12345678901234", // ← استخدم هذا لحل الـ URL"mime_type": "image/jpeg",
"caption": "Here's the damage to my package"
}
},
"signature_verified": true
}
// مذكرة صوتية
{
"message": {
"type": "audio",
"audio": {
"id": "98765432109876",
"mime_type": "audio/ogg; codecs=opus",
"voice": true// ← هذا يخبرك بتشغيل تحويل OGG→MP3
}
}
}
دالة dispatchMedia(event) الخاصة بك أعلاه تستقبل هذا التنسيق مباشرة — لا حاجة لتحليل إضافي. معرّف الوسائط في event.message.image.id (أو .audio.id، .document.id، إلخ)، جاهز لتمريره إلى resolveMediaUrl().
FAQ
أسئلة شائعة
كيف أنزّل الوسائط من webhook WhatsApp Cloud API؟
خطوتان: (1) استدعِ GET graph.facebook.com/v21.0/{media_id} مع رمز وصولك للحصول على URL تنزيل مؤقت. (2) اجلب هذا الـ URL (مع رمز وصولك في ترويسة Authorization أيضاً) للحصول على بايتات الملف. نزّل فوراً — تنتهي صلاحية الـ URL خلال 5 دقائق تقريباً. خزّن بايتات الملف على S3/GCS/القرص، لا الـ URL المؤقت.
لماذا يعيد URL تنزيل وسائط WhatsApp الخاص بي خطأ 403؟
سببان: (1) انتهت صلاحية الـ URL — URLs تنزيل وسائط WhatsApp صالحة لمدة 5 دقائق تقريباً. إذا خزّنت الـ URL وجلبته لاحقاً، فقد انتهت صلاحيته. أعد الحل من معرّف الوسائط. (2) ترويسة Authorization مفقودة — يتطلب URL التنزيل نفسه أيضاً Authorization: Bearer {ACCESS_TOKEN} في الطلب. URLs وسائط WhatsApp ليست URLs CDN عامة.
ما صيغة المذكرات الصوتية في WhatsApp وكيف أحوّلها؟
المذكرات الصوتية في WhatsApp بصيغة OGG/Opus (يمكن التعرف عليها بـ voice: true في الحمولة و mime_type: "audio/ogg; codecs=opus"). حوّل إلى MP3 باستخدام ffmpeg: ffmpeg -i input.ogg -codec:a libmp3lame -qscale:a 2 output.mp3. OGG/Opus غير مدعوم من OpenAI Whisper أو معظم المتصفحات — حوّل دائماً قبل التفريغ أو التشغيل. كود Node.js وPython الكامل في قسم المذكرات الصوتية أعلاه.
كيف أفرّغ مذكرات WhatsApp الصوتية باستخدام Whisper؟
نزّل OGG ← حوّل إلى MP3 بـ ffmpeg ← أرسل إلى OpenAI Audio Transcriptions API بـ model: "whisper-1". يعيد Whisper نص التفريغ. التكلفة ~0.006 دولار لكل دقيقة صوت. مذكرة صوتية 30 ثانية تكلّف أقل من ثلث سنت. ثم يمكن معاملة التفريغ كرسالة نصية عادية من قبل وكيل الذكاء الاصطناعي أو CRM لديك.
كم تستمر صلاحية معرّفات وسائط WhatsApp؟
معرّفات الوسائط صالحة لمدة 30 يوماً. URL التنزيل المؤقت الذي تحصل عليه من حل المعرّف صالح لمدة 5 دقائق تقريباً. هذا يعني أنه يمكنك بأمان تخزين معرّف الوسائط فقط في قاعدة بياناتك وحله جديداً عندما تحتاج الملف (خلال 30 يوماً). بعد 30 يوماً، تُحذف الوسائط من خوادم Meta ويصبح المعرّف غير صالح.
ما هي حدود حجم ملفات وسائط WhatsApp؟
حسب النوع: صورة (JPEG, PNG) — 5 ميجابايت. صوت — 16 ميجابايت. فيديو — 16 ميجابايت. مستند — 100 ميجابايت. ملصق — 500 كيلوبايت ثابت، 100 كيلوبايت متحرّك. الرسائل بوسائط تتجاوز هذه الحدود تُرفض قبل أن يُطلق webhook الخاص بك — يرى المرسل الفشل، لا أنت.
يسلّم SocialHook كل حدث وسائط WhatsApp — صورة، مذكرة صوتية، مستند — كـ JSON مستخرج مسبقاً إلى معالجك. تحصل على معرّف الوسائط الجاهز للحل، ونوع MIME، وعلامة الصوت. لا تحليل لـ Cloud API. فقط مرّره مباشرة إلى دالة التنزيل لديك.