سياق سلاسل الرسائل

مجموعة SDK لملحقات Messenger

تُعد هذه الطريقة جزءًا من مجموعة SDK لملحقات Messenger. للحصول على معلومات عن تضمين مجموعة SDK في موقعك، راجع إضافة مجموعة SDK لملحقات Messenger.

التوفر

تتوفر واجهة API فقط في Messenger الإصدار 113 أو أحدث على Android والإصدار 114 أو أحدث على iOS.

وللتحقق من توفرها على عميل محدد، يمكنك استدعاء getSupportedFeatures() والبحث عن الخاصية context في الاستجابة.

تسترجع الطريقة getContext() معلومات إضافية عن الشخص وسلسلة الرسائل التي فتحت النافذة. وتتضح فائدة هذه الواجهة في إنشاء تجارب وألعاب جماعية تفاعلية إلى جانب تقييد أي محتوى كان الغرض هو مشاركته فقط في سلسلة رسائل محددة.

يجب استخدام getContext() بدلاً من getUserID()، والتي تم إيقاف استخدامها حاليًا.

استرجاع سياق سلاسل الرسائل

يمكنك استدعاء هذه الوظيفة للحصول على PSID للشخص ومعرف سلسلة الرسائل ونوع سلسلة الرسائل. للاطلاع على قائمة كاملة بمعلمات الطريقة، يرجى الرجوع إلى getContext() Reference.

MessengerExtensions.getContext('YOUR_APP_ID', 
  function success(thread_context){
    // success
  },
  function error(err){
    // error
  }
);

تنسيق الاستجابة

ستكون الاستجابة التي تم تمريرها إلى استدعاء حالة النجاح عبارة عن كائن JavaScript بالتنسيق التالي:

{
  "thread_type": "GROUP",
  "tid": "1411911565550430",
  "psid": "1293479104029354",
  "signed_request": "5f8i9XXH2hEaykXHKFvu-E5Nr6QRqN002JO7yl-w_9o.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwNDA0NjM4MCwicGFnZV9pZCI6NjgyNDk4MTcxOTQzMTY1LCJwc2lkIjoiMTI1NDQ1OTE1NDY4MjkxOSIsInRocmVhZF90eXBlIjoiVVNFUl9UT19QQUdFIiwidGlkIjoiMTI1NDQ1OTE1NDY4MjkxOSJ9"
}

التحقق من صلاحية signed_request

هناك مواقف قد ترغب فيها في نقل المعلومات التي تم الحصول عليها من getContext() إلى النظام الخلفي والتحقق من صحتها قبل تنفيذ إجراءات مثل تسجيل الدخول أو الشراء. ويتيح لك هذا ضمان الحصول على المعلومات من Messenger بالفعل وعدم غشها.

ومعلمة signed_request مشفرة بتشفير base64url وموقّعة بأحد إصدارات HMAC من المفتاح السري للتطبيق، استنادًا إلى مواصفات OAuth 2.0.

يمكنك التحقق من صحتها باتباع الخطوات الأربع التالية:

  1. تقسيم الطلب الموقّع إلى جزأين يفصل بينهما حرف '.' (مثل: 238fsdfsd.oijdoifjsidf899)
  2. فك تشفير الجزء الأول - التوقيع المشفر - من تشفير base64url.
  3. فك تشفير الجزء الثاني - حمولة البيانات - من تشفير base64url. يمكن استخدام هذا الإجراء من جانب الخادم إذا لزم الأمر.
  4. تجزئة حمولة البيانات الأصلية باستخدام HMAC SHA-256 والمفتاح السري للتطبيق وتأكيد أنه يساوي التوقيع المشفر الذي تم تمريره في الأصل.
  5. قد تحتاج أيضًا إلى التحقق من صحة الطابع الزمني issued_at في حمولة البيانات للتأكد من حداثة الطلب.

ويمكن تنفيذ هذا بأي لغة برمجة حديثة. وفيما يلي مثال في PHP:

function parse_signed_request($signed_request) {
  list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

  $secret = "appsecret"; // Use your app secret here

  // Decode the data
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);

  // Confirm the signature
  $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
  if ($sig !== $expected_sig) {
    error_log('Bad Signed JSON signature!');
    return null;
  }

  return $data;
}

function base64_url_decode($input) {
  return base64_decode(strtr($input, '-_', '+/'));
}

سينتج عن فك تشفير حمولة البيانات كائن يحمل نفس المعلومات التي تم إرجاعها في الأصل بواسطة getContext()، لكن مع إضافة algorithm وissued_at وpage_id.

{
  "psid": "1293479104029354", 
  "algorithm": "HMAC-SHA256", 
  "thread_type": "GROUP", 
  "tid": "1411911565550430", 
  "issued_at": 1491351619, 
  "page_id": 167938560376726
}

احرص على تجنب السماح بالمفتاح السري لتطبيقك دون قصد، حيث يجب أن تتم عملية التحقق من الصحة هذه من جانب الخادم وليس في رمز العميل على الإطلاق.

استخدام معرفات سلاسل الرسائل مع الصفحات العامة

تستخدم بعض الأنشطة التجارية بنية صفحة عامة مع عدة صفحات مقترنة بمعرف تطبيق أو برنامج تلقائي واحد. في هذه الحالة، ستكون معرفات سلاسل الرسائل التي تم إرجاعها بواسطة getContext() في ملحق الدردشة مختلفة لدى الأشخاص في مختلف البلدان.

يمكنك استخدام واجهة API التالية لتحليل معرف سلسلة الرسائل الخاص بصفحة البلد إلى معرف سلسلة رسائل عام واستخدام هذا المعرف العام في الحفاظ على الحالة بين المستخدمين الذين يصلون إلى ملحق الدردشة من صفحاتهم الإقليمية الخاصة بهم.

استرداد معرف سلسلة الرسائل العام:

curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
    

نموذج للاستجابة:

    {"tid":1577059318985661,"global_tid":1577059318985661}
  

في حالة عدم وجود صفحة عامة، لن تكون القيمة global_tid موجودة.