كيفية استقبال Instagram DMs على خادمك باستخدام Messaging API
13 مايو 2026
·
18 دقيقة قراءة
في هذا الدليل: لماذا API الرسمي فقط · متطلبات الحساب · الأذونات المطلوبة · شرح IGID · خطوات إعداد webhook · مخططات كل أنواع الأحداث · إشارات الستوري والردود · التفاعلات · الرد عبر Send API · صيغة SocialHook الموحّدة
لماذا API الرسمي — ولا شيء غيره
معظم دروس "أتمتة Instagram DM" تستخدم طرقاً غير رسمية: أتمتة المتصفح، استخراج رموز الجلسات، أدوات أتمتة من أطراف ثالثة تتجاوز API الخاص بـ Instagram. كلها تنتهك شروط خدمة Instagram. ويرصد Instagram هذه الأساليب بنشاط ويحظر الحسابات التي تستخدمها — أحياناً بشكل دائم وغالباً دون إنذار أو حق استئناف.
إن Instagram Messaging API الرسمي هو الطريقة الوحيدة التي تكون:
معتمدة من Meta ومتوافقة مع شروط خدمة Instagram
صالحة للاستخدام التجاري على نطاق واسع (حتى 1,000 طلب API في الساعة لكل مستخدم)
مشمولة باتفاقية مستوى الخدمة (SLA) من Meta وموثوقية بنيتها التحتية
آمنة لحساب Instagram الخاص بعملك على المدى الطويل
يغطي هذا الدليل حصرياً Meta Graph API v21.0 الخاص بـ Instagram Messaging API الرسمي.
متطلبات الحساب: ما تحتاجه قبل كتابة أي كود
إن Instagram Messaging API له متطلبات حساب أكثر صرامة من Messenger API. يجب أن تتحقق الشروط الثلاثة التالية جميعها:
حساب Instagram Professional: يجب تحويل حساب Instagram الخاص بك إلى حساب Business أو Creator (وليس حساباً شخصياً). افعل ذلك في تطبيق Instagram ← Settings ← Account ← Switch to Professional Account. تختلف ميزات حسابات Creator قليلاً عن حسابات Business — لأتمتة الرسائل، كلاهما يعمل.
صفحة Facebook مرتبطة: يجب أن يكون حساب Instagram Professional الخاص بك مرتبطاً بصفحة Facebook تمتلكها وتديرها. هذا شرط أساسي — إن Instagram Messaging API يصادق عبر البنية التحتية لـ Facebook. اربطها في Instagram Settings ← Account ← Linked Accounts ← Facebook.
تطبيق Facebook Developer: تطبيق Facebook مع إضافة منتج Instagram إليه. يجب ربط حساب Instagram Business الخاص بك في إعدادات Instagram داخل التطبيق. هنا تُولّد رموز الوصول (access tokens) وتسجّل webhook الخاص بك.
لا يمكن لحسابات Instagram الشخصية استخدام Messaging API. إذا كنت تعمل بحساب شخصي، فيجب أولاً التحويل إلى Professional. هذا مجاني وقابل للعكس — التحويل إلى Professional لا يغيّر محتواك ولا متابعيك ولا سير عملك في النشر. يضيف فقط ميزات الأعمال بما فيها الوصول إلى API.
الأذونات المطلوبة
الإذن
مطلوب؟
ما يسمح به
instagram_manage_messages
مطلوب
استقبال أحداث webhook الخاصة بـ DM، وإرسال الرسائل بالنيابة عن حساب Instagram. هذا هو الإذن الأساسي لكل ما في هذا الدليل.
pages_messaging
مطلوب
الاشتراك في أحداث webhook واستقبالها عبر صفحة Facebook المرتبطة. بدون هذا الإذن، لن تُطلق أحداث webhook الخاصة بـ Instagram DM.
pages_read_engagement
مطلوب
قراءة معلومات حساب Instagram Business اللازمة لاشتراك webhook والتحقق من الرمز.
instagram_manage_insights
اختياري
الوصول إلى إحصاءات وتحليلات حساب Instagram. ليس مطلوباً لمجرد استقبال/إرسال DM.
instagram_basic
اختياري
قراءة معلومات الملف الشخصي الأساسية لحساب Instagram المتصل. مفيد للتحقق من إعداد الملف الشخصي.
App Review مطلوب للإنتاج. أثناء التطوير، تعمل الأذونات للحسابات المضافة كمستخدمين تجريبيين (Test Users) في إعدادات تطبيقك. أما للإنتاج (استقبال DMs من عملاء حقيقيين لم يُضافوا كمستخدمين تجريبيين) فيجب تقديم طلب App Review. تطلب المراجعة وصفاً لحالة الاستخدام وتستغرق عادة 5–10 أيام عمل. جهّز وصفاً واضحاً لحالة الاستخدام وتسجيلاً للشاشة يُظهر بوتك أثناء العمل.
المعرّف المُقيّد بـ Instagram (IGSID): كيف يُعرّف Instagram المستخدمين
عندما يرسل مستخدم على Instagram رسالة DM إلى حساب عملك، يُعرّفه Instagram إلى webhook الخاص بك عبر IGSID (Instagram-Scoped ID) — وهو سلسلة رقمية فريدة وغامضة (opaque) خاصة بحساب Instagram Business الخاص بك.
حقائق أساسية عن IGSIDs:
مُقيّد بالنطاق. المستخدم نفسه يحصل على IGSID مختلف لكل حساب Instagram Business يراسله. فـ IGSID المستخدم A على حسابك يختلف عن IGSID نفس المستخدم على حساب منافس — خصوصية بحكم التصميم.
ليس مطابقاً لـ PSID. حتى لو كنت تدير أيضاً صفحة Facebook متصلة بنفس حساب Instagram، فإن PSID المستخدم على Facebook Messenger و IGSID نفسه على Instagram معرّفان مختلفان. لا تخلط بينهما في قاعدة بياناتك دون وضع لاحقة (label) للنوع.
خزّنه كنص لا كعدد صحيح. إن IGSIDs سلاسل رقمية قد تتجاوز Number.MAX_SAFE_INTEGER في JavaScript. خزّنها دائماً كـ VARCHAR/TEXT وليس INT أو BIGINT أبداً. التحويل إلى رقم JavaScript يفقد الدقة في آخر الأرقام.
يظهر في:entry[0].messaging[0].sender.id في حمولة webhook الخام — نفس موضع PSID في Messenger.
1
أنشئ تطبيق Facebook واربط Instagram
اذهب إلى developers.facebook.com ← My Apps ← Create App ← اختر نوع "Business"
أضف منتج Instagram إلى تطبيقك من قائمة Products
تحت Instagram ← Settings، أضف حساب Instagram Business الخاص بك
ولّد Page Access Token: Graph API Explorer ← اختر تطبيقك ← اختر صفحة Facebook ← Generate Token ← امنح instagram_manage_messages + pages_messaging + pages_read_engagement
انسخ Instagram Business Account ID (المعرّف الرقمي، وليس اسم المستخدم) — اعثر عليه في Graph API Explorer بالاستعلام GET /me?fields=id,instagram_business_account
بعد تشغيل خادمك، سجّل webhook في Facebook Developer Dashboard: App ← Instagram ← Webhooks ← Add Callback URL. أدخل عنوان ngrok الخاص بك متبوعاً بـ /webhook ورمز التحقق الخاص بك. اشترك في الحقل messages — هذا هو الاشتراك الأساسي لرسائل Instagram DMs.
3
التحقق من توقيع HMAC-SHA256
يستخدم Instagram نفس ترويسة X-Hub-Signature-256 ونمط HMAC المستخدم في Facebook Messenger. نفس middleware التحقق يعمل لكليهما:
أرسل المستخدم ملصقاً أو تفاعل قلب/إعجاب (كملصق). نوع المرفق هو sticker. يحدّد sticker_id الملصق المستخدم بالضبط.
تفاعل برمز إيموجي
reaction
event.reaction.action
تفاعل المستخدم (أو ألغى تفاعله) مع إحدى رسائلك. action تكون "react" أو "unreact". reaction هي رمز الإيموجي. mid هو معرّف الرسالة التي تفاعل معها.
إشارة في ستوري
referral
event.referral.source === 'STORY_MENTION'
أشار المستخدم إلى حسابك في قصته ثم أرسل إليك DM. يصل كحدث referral بالقيمة source: "STORY_MENTION". يوجد رابط قصة المستخدم في event.referral.story.url.
صيغة JSON الدقيقة لأكثر ثلاثة أنواع أحداث شيوعاً:
Raw webhook payloads — all key event types
// ── Text DM ─────────────────────────────────────────────────────────────
{
"object": "instagram", // CRITICAL: "instagram" not "page" like Messenger"entry": [{
"id": "987654321098765", // your Instagram Business Account ID"messaging": [{
"sender": { "id": "12345678901234" }, // user's IGSID — store as string"recipient": { "id": "987654321098765" }, // your IG Business Account ID"timestamp": 1747231892,
"message": {
"mid": "aWdtc2c...",
"text": "Hey, do you ship internationally?"
}
}]
}]
}
// ── Story Reply ─────────────────────────────────────────────────────────
{
"message": {
"mid": "aWdtc2c...",
"text": "Wow, this looks amazing!", // the user's reply text"reply_to": {
"story": {
"id": "17893310459840806", // story ID they replied to"url": "https://lookaside.fbsbx.com/..."// story media URL (CDN)
}
}
}
}
// ── Emoji Reaction ──────────────────────────────────────────────────────
{
"reaction": {
"action": "react", // 'react' | 'unreact'"reaction": "❤️", // the emoji character"mid": "aWdtc2c..."// which of your messages they reacted to
}
}
إشارات الستوري: عندما يُبرز المستخدمون حسابك
عندما يشير مستخدم إلى حساب Instagram Business الخاص بك في قصته (عبر تاغ)، يطلق Instagram حدث referral إلى webhook الخاص بك. هذه إشارة عالية القيمة — فالمستخدم يروّج لعلامتك التجارية أمام متابعيه وغالباً ما يتوقع تفاعلاً منك (إرسال DM، إعادة نشر قصته، إلخ).
Story mention event schema
{
"sender": { "id": "USER_IGSID" },
"recipient": { "id": "YOUR_IG_BUSINESS_ID" },
"timestamp": 1747231892,
"referral": { // present for story mentions"ref": "STORY_MENTION", // your tracking string (if set)"source": "STORY_MENTION",
"type": "OPEN_THREAD",
"story": {
"id": "17893310459840806", // story ID from the user's account"url": "https://lookaside...", // story media URL (CDN, may expire)"mention": {
"page_id": "YOUR_IG_BUSINESS_ID"// confirms it's your account mentioned
}
}
},
"message": { // often empty for pure story mentions"mid": "aWdtc2c..."
}
}
// Subscribe to messaging_referrals webhook field to receive story mentions// WITHOUT this subscription, story mentions never arrive at your webhook
إرسال الردود عبر Instagram Send API
يستخدم Instagram Send API نفس عنوان URL الأساسي مثل Messenger ولكن بنقطة نهاية مختلفة — معرّف Instagram Business Account الخاص بك بدلاً من /me:
عند ربط حساب Instagram الخاص بك بـ SocialHook، تُعالَج كامل المسارات الواردة — التحقق من HMAC، وتحليل object: "instagram"، واستخراج IGSID، وكشف نوع الحدث — قبل وصول الحدث إلى خادمك. ستستقبل:
SocialHook normalized Instagram DM event
// Text DM
{
"platform": "instagram",
"event": "message.received",
"from": "12345678901234", // IGSID — pre-extracted"timestamp": 1747231892,
"message": {
"type": "text",
"body": "Hey, do you ship internationally?",
"id": "aWdtc2c..."
},
"signature_verified": true
}
// Story reply
{
"platform": "instagram",
"event": "message.received",
"from": "12345678901234",
"message": {
"type": "story_reply",
"body": "Wow, this looks amazing!",
"story_id": "17893310459840806",
"story_url":"https://lookaside..."
}
}
// Same platform field pattern as WhatsApp ("whatsapp") and Messenger ("facebook")// One handler function serves all three channels
الأسئلة الشائعة
أسئلة شائعة
ما الأذونات التي أحتاجها لاستخدام Instagram Messaging API؟
ثلاثة أذونات مطلوبة: instagram_manage_messages (استقبال/إرسال رسائل DM)، و pages_messaging (الاشتراك في webhooks عبر الصفحة المرتبطة)، و pages_read_engagement (قراءة معلومات الحساب). أثناء التطوير تعمل هذه الأذونات للحسابات المضافة كمستخدمين تجريبيين في إعدادات تطبيقك. أما للإنتاج (رسائل عملاء حقيقيين) فيجب تقديم الأذونات الثلاثة جميعها إلى Meta App Review.
ما هو IGSID وكيف يختلف عن PSID على Facebook؟
إن IGSID (Instagram-Scoped ID) هو المعرّف الفريد لمستخدم Instagram في سياق حساب Instagram Business الخاص بك تحديداً — بما يشبه PSID في Messenger. يُعرّف PSID مستخدماً على صفحة Facebook، بينما يُعرّف IGSID نفس المستخدم على حساب Instagram الخاص بك. وهما معرّفان مختلفان حتى لو كان حساب Instagram وصفحة Facebook لديك مرتبطين. خزّن IGSIDs دائماً كنصوص (VARCHAR) — فقد تتجاوز قيمة Number.MAX_SAFE_INTEGER في JavaScript.
كيف تختلف نقطة نهاية Instagram Send API عن Facebook Messenger؟
Messenger: POST /me/messages (حيث يُحلّ "me" إلى صفحتك). Instagram: POST /{IG_BUSINESS_ID}/messages (حيث IG_BUSINESS_ID هو المعرّف الرقمي لحساب Instagram Business الخاص بك، وليس اسم المستخدم). كلاهما يستخدم نفس عنوان URL الأساسي ونفس Page Access Token. بنية جسم الرسالة متطابقة — recipient.id يستقبل IGSID و message.text يحوي ردك.
كيف أستقبل إشارات الستوري في webhook الخاص بـ Instagram؟
يجب الاشتراك في حقل webhook المسمى messaging_referrals بالإضافة إلى messages. عندما يشير مستخدم إلى حسابك في قصته، يطلق Instagram حدث referral مع source: "STORY_MENTION" ورابط القصة في الحمولة. يتيح لك الحدث إرسال DM للمستخدم (ضمن نافذة الـ 24 ساعة) لشكره أو طلب إذن إعادة النشر أو تقديم خصم له.
هل يمكنني استقبال رسائل Instagram DM من أي مستخدم أم من متابعيّ فقط؟
يمكنك استقبال رسائل DM من أي مستخدم على Instagram قادر على مراسلة حسابك — لا من متابعيك فقط. افتراضياً، تذهب رسائل DM من غير المتابعين إلى مجلد "Message Requests" ولا تطلق webhooks حتى يتم قبول الطلب. في Instagram Settings ← Privacy ← Messages، اضبط "Others on Instagram" على "Don't require approval" حتى تتدفق رسائل DM فوراً إلى webhook الخاص بك. يمكن لحسابات Business التي تفعّل Message Requests API أن تعالج أحداث الطلبات برمجياً أيضاً.
كيف يختلف نوع كائن webhook الخاص بـ Instagram عن Facebook Messenger؟
تصل webhooks الخاصة بـ Instagram بـ "object": "instagram" في غلاف الحمولة. أما webhooks الخاصة بـ Messenger فتصل بـ "object": "page". هذا أول حقل ينبغي فحصه في معالجك — إذا كنت تعالج كلتا القناتين، فاتخذ المسار بناءً على هذا الحقل. بنية الحمولة المتداخلة (entry[0].messaging[0].sender.id) واحدة لكليهما، لكن نوع معرّف المستخدم يختلف: IGSID لـ Instagram و PSID لـ Messenger.
اربط حساب Instagram Business الخاص بك بـ SocialHook. كل رسالة DM ورد ستوري وإشارة ستوري تصل كـ JSON موحّد — IGSID مستخرَج، نوع الحدث مُعلّم، HMAC تم التحقق منه مسبقاً. نفس صيغة أحداثك على Messenger و WhatsApp.