واجهة برمجة تطبيقات الرسائل
createMessage مهمل
Anchor link toPOST https://api.pushwoosh.com/json/1.3/createMessage
ينشئ إشعارًا فوريًا جديدًا.
نص الطلب
Anchor link to| الاسم | النوع | الوصف |
|---|---|---|
| auth* | string | رمز الوصول إلى API من لوحة تحكم Pushwoosh. |
| application* | string | رمز تطبيق Pushwoosh |
| notifications* | array | مصفوفة JSON لمعلمات الرسالة. انظر التفاصيل في مثال الطلب أدناه. |
{ "status_code": 200, "status_message": "OK", "response": { "Messages": [ "C3F8-C3863ED4-334AD4F1" ] }}مثال على الطلب
Anchor link to{ "request": { "application": "XXXXX-XXXXX", // مطلوب. رمز تطبيق Pushwoosh. "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh. "notifications": [{ "send_date": "now", // اختياري. YYYY-MM-DD HH:mm أو 'now' "content": { // اختياري. كائن أو سلسلة نصية. "en": "English", // استخدم "wns_content" بدلاً من ذلك لنظام Windows. "fr": "French" }, "title": { // اختياري. كائن أو سلسلة نصية. "en": "Title", // يتم تجاهله إذا تم تحديد عناوين خاصة بالمنصة "fr": "Titre" // 'ios_title', 'android_header', إلخ. }, // انظر أمثلة المعلمات الخاصة بالمنصة أدناه. "subtitle":{ // اختياري. كائن أو سلسلة نصية. "en": "Subtitle", // يتم تجاهله إذا تم تحديد عناوين خاصة بالمنصة "fr": "Sous-titre" // 'ios_subtitle', إلخ. }, // انظر أمثلة المعلمات الخاصة بالمنصة أدناه. "ignore_user_timezone": true, // اختياري. "timezone": "America/New_York", // اختياري. إذا تم تجاهله، يكون UTC-0 هو الافتراضي لـ "send_date". // انظر https://php.net/manual/timezones.php // للمناطق الزمنية المدعومة. "campaign": "CAMPAIGN_CODE", // اختياري. رمز الحملة الذي تريد تعيين // رسالة الإشعار الفوري هذه إليه. "geozone": { // اختياري. إرسال إلى منطقة جغرافية "lat": 22.22, "lng": 33.33, "range": 110 }, "rich_media": "XXXXX-XXXXX", // اختياري. انسخ رمز الوسائط الغنية من شريط URL // لصفحة محرر الوسائط الغنية في لوحة تحكم Pushwoosh. "link": "https://google.com", // اختياري. للروابط العميقة أضف "minimize_link": 0 "minimize_link": 0, // اختياري. 0 — عدم التقصير، 2 — bitly. الافتراضي = 2. // يرجى ملاحظة أن خدمات تقصير الروابط لديها قيود // على عدد الاستدعاءات. "data": { // اختياري. سلسلة JSON أو كائن JSON، سيتم تمريره كـ "key": "value" // معلمة "u" في الحمولة (محولة إلى سلسلة JSON). }, "transactionId": "unique UUID", // اختياري. معرف رسالة فريد لمنع التكرار // في حالة وجود مشاكل في الشبكة. يتم تخزينه على جانب // Pushwoosh لمدة 5 دقائق. "platforms": [ // اختياري. 1 — iOS; 3 — Android; 7 — Mac OS X; 8 — Windows; 1, 3, 7, 8, 9, 10, // 9 — Amazon; 10 — Safari; 11 — Chrome; 11, 12, 17 // 12 — Firefox; 17 — Huawei ], "preset": "XXXXX-XXXXX", // اختياري. رمز الإعداد المسبق للإشعارات من لوحة التحكم الخاصة بك. // إذا تم إرسال معلمات محددة في الطلب، // فإنها تتجاوز معلمات الإعداد المسبق. "send_rate": 100, // اختياري. تقييد. القيم الصالحة هي من 100 إلى 1000 إشعار/ثانية. "send_rate_avoid": true, // اختياري. إذا تم تعيينه إلى true، فلن يتم تطبيق حد التقييد // على هذا الإشعار الفوري المحدد. // متعلق بالقوالب، يرجى الرجوع إلى دليل محرك القوالب لمعرفة المزيد "template_bindings": { // اختياري. "TemplatePlaceholder": "Value" }, "dynamic_content_placeholders": { // اختياري. عناصر نائبة للمحتوى الديناميكي بدلاً من علامات الجهاز. "firstname": "John", "lastname": "Doe" }, "message_type": "marketing", // اختياري. "marketing" أو "transactional". // إذا تم حذفه، فلن يتلقى المستخدمون الذين لديهم PW_ControlGroup: true الرسالة.
// معلمات تحديد التكرار. تأكد من تكوين تحديد التكرار العالمي في لوحة التحكم. // لا ينطبق تحديد التكرار على الرسائل المتعلقة بالمعاملات. // في جميع الحالات الأخرى، بما في ذلك "message_type" المحذوف، ينطبق تحديد التكرار. "capping_days": 30, // اختياري. عدد الأيام لتحديد التكرار (بحد أقصى 30 يومًا) "capping_count": 10, // اختياري. الحد الأقصى لعدد الإشعارات التي يمكن إرسالها من // تطبيق معين إلى جهاز معين خلال فترة 'capping_days'. // في حالة تجاوز الرسالة التي تم إنشاؤها حد // 'capping_count' لجهاز ما، فلن // يتم إرسالها إلى ذلك الجهاز. "capping_exclude": true, // اختياري. إذا تم تعيينه إلى true، فلن يتم احتساب هذا الإشعار الفوري // ضمن تحديد التكرار للإشعارات المستقبلية. "capping_avoid": true, // اختياري. إذا تم تعيينه إلى true، فلن يتم تطبيق تحديد التكرار // على هذا الإشعار الفوري المحدد.
// لحفظ الرسالة في صندوق الوارد عبر API، استخدم "inbox_date" أو "inbox_image". // يتم حفظ الرسالة عند استخدام أحد هذين المعلمين على الأقل. "inbox_date": "2017-02-02", // اختياري. حدد متى تتم إزالة رسالة من صندوق الوارد. // ستتم إزالة الرسالة من صندوق الوارد في الساعة 00:00:01 بالتوقيت العالمي المنسق // من التاريخ المحدد، لذا فإن التاريخ السابق هو // آخر يوم يمكن للمستخدم رؤية الرسالة فيه في صندوق الوارد الخاص به. // إذا لم يتم تحديده، فإن تاريخ الإزالة الافتراضي هو // اليوم التالي لتاريخ الإرسال. "inbox_image": "Inbox image URL", // اختياري. الصورة التي سيتم عرضها بجانب الرسالة. "inbox_days": 5, // اختياري. حدد متى تتم إزالة رسالة من // صندوق الوارد (عمر رسالة صندوق الوارد بالأيام). // يمكن استخدامه بدلاً من معلمة "inbox_date". // حتى 30 يومًا.
"devices": [ // اختياري. حدد الرموز أو hwids لإرسال إشعارات فورية مستهدفة "hwid_XXXX" // . لا يزيد عن 1000 رمز/hwid في ], // مصفوفة. إذا تم تعيينه، سيتم إرسال الرسالة فقط إلى // الأجهزة الموجودة في القائمة. لا يُسمح بمجموعة التطبيقات لقائمة الأجهزة // . يمكن أن تكون رموز iOS الفورية بأحرف صغيرة فقط. "to": [ // اختياري. للبريد الإلكتروني والرسائل القصيرة والقنوات المماثلة. قائمة المستلمين "email_1", "email_2" // (على سبيل المثال، عناوين البريد الإلكتروني، أرقام الهواتف). بحد أقصى 1000 عنصر. ], // للإشعارات الفورية، استخدم "devices" بدلاً من ذلك. // إشعارات فورية تتمحور حول المستخدم "users": [ // اختياري. إذا تم تعيينه، سيتم تسليم الرسالة فقط إلى "user_XXXX" // معرفات المستخدم المحددة (يتم تعيينها عبر استدعاء /registerUser). ], // إذا تم تحديده مع devices أو to، // سيتم تجاهل الأخير. لا يزيد عن 1000 معرف مستخدم // في مصفوفة. لا يُسمح بمجموعة التطبيقات لقائمة المستخدمين // .
// الفلاتر والشروط "filter": "FILTER_NAME", // اختياري. "conditions": [ // اختياري. انظر الملاحظة أدناه. ["Country", "EQ", "fr"], ["Language", "EQ", "en"] ], "conditions_operator": "AND" // اختياري. عامل منطقي لمصفوفات الشروط. // القيم الممكنة: AND | OR. AND هو الافتراضي. }] }}مثال على طلب إشعار VoIP
Anchor link toيدعم Pushwoosh إشعارات المكالمات بنمط VoIP لنظامي iOS و Android.
يمكنك أدناه العثور على أمثلة لطلبات createMessage API لكل منصة.
{ "request": { "application": "XXXXX-XXXXX", // مطلوب. رمز تطبيق Pushwoosh. "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh. "notifications": [ { "voip_push": true, // مطلوب. المعلمة مطلوبة لإرسال إشعار VoIP فوري. "ios_root_params": { "aps": { "mutable-content": 1 // مطلوب لمرفقات الوسائط في iOS10+. }, "callerName": "CallerName", // اختياري. اسم المتصل. إذا لم يتم تحديده، يتم عرض "متصل غير معروف". "video": true, // اختياري. يشير إلى ما إذا كانت مكالمات الفيديو مدعومة. "supportsHolding": true, // اختياري. يشير إلى ما إذا كانت وظيفة تعليق المكالمات مدعومة. "supportsDTMF": false, // اختياري. يتحكم في دعم إشارة التردد المتعدد ثنائي النغمة. "callId": "42", // اختياري. المعرف الفريد للمكالمة المراد إلغاؤها. "cancelCall": true // اختياري. اضبط على "true" لإلغاء المكالمة بالمعرف "callId" المحدد. } } ] }}Android
Anchor link to{ "request": { "application": "XXXXX-XXXXX", // مطلوب. رمز تطبيق Pushwoosh. "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh. "notifications": [ { "voip_push": true, // مطلوب. المعلمة مطلوبة لإرسال إشعار VoIP فوري. "android_root_params": { "callerName": "callerName", // اختياري. اسم المتصل. إذا لم يتم تحديده، يتم عرض "متصل غير معروف". "video": true, // اختياري. يشير إلى ما إذا كانت مكالمات الفيديو مدعومة. "callId": 42, // اختياري. المعرف الفريد للمكالمة المراد إلغاؤها. "cancelCall": true // اختياري. اضبط على "true" لإلغاء المكالمة بالمعرف "callId" المحدد. } } ] }}المعلمات الخاصة بالمنصة
Anchor link toمعلمات iOS
Anchor link to{ "request": { "application": "12345-67891", // مطلوب. رمز تطبيق Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "notifications": [{ "ios_title": { // اختياري. كائن أو سلسلة نصية. يضيف عنوانًا خاصًا بـ iOS للإشعار الفوري. "en": "title" }, "ios_subtitle": { // اختياري. كائن أو سلسلة نصية. يضيف عنوانًا فرعيًا خاصًا بـ iOS للإشعار الفوري. "en": "subtitle" }, "ios_content": { // اختياري. كائن أو سلسلة نصية. يضيف محتوى خاصًا بـ iOS للإشعار الفوري. "en": "content" }, "ios_badges": 5, // اختياري. رقم شارة تطبيق iOS. // استخدم "+n" أو "-n" لزيادة/إنقاص قيمة الشارة بمقدار n. "ios_sound": "sound file.wav", // اختياري. اسم ملف الصوت في الحزمة الرئيسية للتطبيق. // إذا ترك فارغًا، سيصدر الجهاز صوت نظام افتراضي. "ios_sound_off": true, // اختياري. تمكين/تعطيل الصوت المحدد بواسطة حقل "ios_sound". "ios_ttl": 3600, // اختياري. معلمة مدة البقاء - أقصى عمر للرسالة بالثواني. "ios_silent": 1, // اختياري. يُمكّن الإشعارات الصامتة (يتجاهل "sound" و "content"). "ios_category_id": "1", // اختياري. معرف فئة iOS8 من Pushwoosh. "ios_root_params": { // اختياري. معلمات المستوى الجذر إلى قاموس aps. "aps": { "content-available": "0", // اختياري. اضبط "1" لإرسال إشعار صامت و "0" لإشعار عادي. "mutable-content": 1 // مطلوب لمرفقات الوسائط في iOS10+. }, "callerName": "CallerName", // معلمة VoIP اختيارية. اسم المتصل. إذا لم يتم تحديده، يتم عرض "متصل غير معروف". "video": true, // معلمة VoIP اختيارية. يشير إلى ما إذا كانت مكالمات الفيديو مدعومة. "supportsHolding": true, // معلمة VoIP اختيارية. يشير إلى ما إذا كانت وظيفة تعليق المكالمات مدعومة. "supportsDTMF": false, // معلمة VoIP اختيارية. يتحكم في دعم إشارة التردد المتعدد ثنائي النغمة. "data": {} // بيانات اختيارية مقدمة من المستخدم، بحد أقصى 4 كيلوبايت }, "ios_attachment": "URL", // اختياري. إدراج محتوى وسائط في الإشعار. "ios_thread_id": "some thread id", // اختياري. معرف لتجميع الإشعارات ذات الصلة. // سيتم تجميع الرسائل التي لها نفس معرف السلسلة // على شاشة القفل وفي مركز الإشعارات. "ios_critical": true, // اختياري. يحدد إشعار iOS كتنبيه حرج // يشغل الصوت حتى لو كان الجهاز صامتًا أو // وضع عدم الإزعاج قيد التشغيل. "ios_category_custom": "category", // اختياري. فئة APNS مخصصة. "ios_interruption_level": "active", // اختياري. واحد من "passive", "active", "time-sensitive", // "critical". يشير إلى أهمية // وتوقيت تسليم الإشعار. ارجع إلى // دليل الإشعارات لمرة واحدة للحصول على التفاصيل. "apns_collapse_id": "promo", // اختياري. معرف طي APNs. الإشعارات التي لها نفس // apns_collapse_id تحل محل بعضها البعض على الجهاز. "apns_trim_content": 1 // اختياري. (0|1) يقص سلاسل المحتوى الزائدة بنقاط حذف. }] }}معلمات Android
Anchor link to{ "request": { "application": "12345-67891", // مطلوب. رمز تطبيق Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "notifications": [{ "android_header": { // اختياري. رأس إشعار Android. "en": "header" }, "android_content": { // اختياري. محتوى إشعار Android. "en": "content" }, "android_root_params": { // اختياري. كائن قيمة-مفتاح مخصص. "key": "value", // معلمات المستوى الجذر لمستلمي حمولة android. "CancelID": 12345678, // اختياري. يلغي الإشعار الفوري بالمعرف "voip": true, // معلمة VoIP مطلوبة. المعلمة مطلوبة لإرسال إشعارات VoIP الفورية. "callerName": "callerName", // معلمة VoIP اختيارية. اسم المتصل. إذا لم يتم تحديده، يتم عرض "متصل غير معروف". "video": true, // معلمة VoIP اختيارية. يشير إلى ما إذا كانت مكالمات الفيديو مدعومة. }, // معرف الرسالة المحدد (احصل على المعرف من سجل الرسائل) "android_sound": "soundfile", // اختياري. بدون امتداد ملف. إذا ترك فارغًا، // سيصدر الجهاز صوت نظام افتراضي. "android_sound_off": true, // اختياري. تمكين/تعطيل الصوت المحدد بواسطة حقل "android_sound" "android_icon": "icon.png", // اختياري. "android_custom_icon": "URL.png", // اختياري. URL كامل لملف الصورة. "android_banner": "URL.png", // اختياري. URL كامل لملف الصورة. "android_badges": 5, // اختياري. رقم شارة أيقونة تطبيق Android. // استخدم "+n" أو "-n" لزيادة/إنقاص قيمة الشارة بمقدار n. "android_gcm_ttl": 3600, // اختياري. معلمة مدة البقاء — أقصى عمر للرسالة بالثواني. "android_vibration": 0, // اختياري. اهتزاز قسري في Android للإشعارات ذات الأولوية العالية. "android_led": "#rrggbb", // اختياري. لون LED سداسي عشري، سيقوم الجهاز بأفضل تقريب له. "android_priority": -1, // اختياري. يضبط معلمة "importance" للأجهزة التي تعمل بنظام // Android 8.0 والإصدارات الأحدث، بالإضافة إلى معلمة "priority" // للأجهزة التي تعمل بنظام Android 7.1 والإصدارات الأقدم. يحدد // مستوى المقاطعة لقناة إشعار أو إشعار // معين. القيم الصالحة هي -2، -1، 0، 1، 2. "android_delivery_priority": "normal", // اختياري. "normal" أو "high". // يُمكّن تسليم الإشعار عندما يكون // الجهاز في وضع توفير الطاقة. "android_ibc": "#RRGGBB", // اختياري. لون خلفية الأيقونة على Lollipop، #RRGGBB، // #AARRGGBB، "red"، "black"، "yellow"، إلخ. "android_silent": 1, // اختياري. 0 أو 1. تمكين الإشعار الصامت. // تجاهل الصوت والمحتوى "android_group_id": "123", // اختياري. معرف لتجميع الإشعارات ذات الصلة. الرسائل التي لها // نفس معرف السلسلة سيتم تجميعها في // مركز الإشعارات. "android_collapse_key": "promo" // اختياري. مفتاح طي FCM. الإشعارات التي لها نفس // مفتاح الطي تحل محل بعضها البعض أثناء عدم اتصال الجهاز بالإنترنت. }] }}معلمات Huawei
{ "request": { "application": "12345-67891", // مطلوب. رمز تطبيق Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "notifications": [{ "huawei_android_header": { // اختياري. كائن أو سلسلة نصية. عنوان الإشعار "en": "header" }, "huawei_android_content": { // اختياري. كائن أو سلسلة نصية. محتوى الإشعار "en": "content" }, "huawei_android_badges": true, // اختياري. "huawei_android_silent": 0, // اختياري. 0 أو 1. تمكين الإشعار الصامت. // تجاهل الصوت والمحتوى "huawei_android_icon": "URL.png", // اختياري. "huawei_android_led": "#FF0011", // اختياري. لون LED سداسي عشري، سيقوم الجهاز بأفضل تقريب له "huawei_android_vibration": 1, // اختياري. اهتزاز قسري من Huawei للإشعارات ذات الأولوية العالية "huawei_android_sound": "sound.wav", // اختياري. إذا ترك فارغًا، سيصدر الجهاز // صوت نظام افتراضي "huawei_android_sound_off": true, // اختياري. تمكين/تعطيل الصوت المحدد بواسطة // حقل "huawei_android_sound" "huawei_android_custom_icon": "URL.png", // اختياري "huawei_android_gcm_ttl": 2400, // اختياري. معلمة مدة البقاء - أقصى // عمر للرسالة بالثواني "huawei_android_banner": "URL.png", // اختياري. URL المسار الكامل لملف الصورة "huawei_android_root_params": { // اختياري. كائن قيمة-مفتاح مخصص. "key": "value" // معلمات المستوى الجذر لمستلمي حمولة Huawei. }, "huawei_android_priority": 0, // اختياري. القيم الصالحة: -2، -1، 0، 1، 2 "huawei_android_ibc": "#0011AA", // اختياري. لون خلفية الأيقونة على Lollipop "huawei_android_lockscreen": 1, // اختياري "huawei_android_delivery_priority": "normal", // اختياري. "normal" أو "high". يُمكّن تسليم الإشعار // في وضع توفير الطاقة "huawei_android_group_id": "group_id" // اختياري. معرف لتجميع الإشعارات ذات الصلة }] }}معلمات Safari
Anchor link to{ "request": { "application": "12345-67891", // مطلوب. رمز تطبيق Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "notifications": [{ "safari_url_args": [ // مطلوب، ولكن قد تكون القيمة فارغة "firstArgument", "secondArgument" ], "safari_title": { // اختياري. كائن أو سلسلة نصية. عنوان الإشعار. "en": "content" }, "safari_content": { // اختياري. كائن أو سلسلة نصية. محتوى الإشعار. "en": "content" }, "safari_action": "Click here", // اختياري. "safari_ttl": 3600 // اختياري. معلمة مدة البقاء — أقصى // عمر للرسالة بالثواني. }] }}معلمات Chrome
Anchor link to{ "request": { "application": "12345-67891", // مطلوب. رمز تطبيق Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "notifications": [{ "chrome_title": { // اختياري. كائن أو سلسلة نصية. يمكنك تحديد رأس "en": "title" // الرسالة في هذه المعلمة. }, "chrome_content": { // اختياري. كائن أو سلسلة نصية. يمكنك تحديد محتوى "en": "content" // الرسالة في هذه المعلمة. }, "chrome_icon": "URL.png", // اختياري. URL كامل للأيقونة أو مسار ملف موارد الامتداد "chrome_gcm_ttl": 3600, // اختياري. معلمة مدة البقاء – أقصى عمر للرسالة بالثواني. "chrome_duration": 20, // اختياري. بحد أقصى 50 ثانية. يغير وقت عرض إشعار chrome. // اضبط على 0 لعرض الإشعار حتى يتفاعل المستخدم معه. "chrome_image": "image_URL", // اختياري. URL لصورة كبيرة. "chrome_root_params": { // اختياري. تعيين معلمات خاصة بالرسائل المرسلة إلى Chrome. "key": "value" }, "chrome_button_text1": "text1", // اختياري "chrome_button_url1": "button1_URL", // اختياري. يتم تجاهله إذا لم يتم تعيين chrome_button_text1. "chrome_button_text2": "text2", // اختياري "chrome_button_url2": "button2_url" // اختياري. يتم تجاهله إذا لم يتم تعيين chrome_button_text2. }] }}معلمات Firefox
Anchor link to{ "request": { "application": "12345-67891", // مطلوب. رمز تطبيق Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "notifications": [{ "firefox_title": { // اختياري. كائن أو سلسلة نصية. يمكنك تحديد رأس الرسالة هنا. "en": "title" }, "firefox_content": { // اختياري. كائن أو سلسلة نصية. يمكنك تحديد محتوى الرسالة هنا. "en": "content" }, "firefox_icon": "URL.png", // اختياري. URL المسار الكامل للأيقونة أو المسار إلى // الملف في موارد الامتداد. "firefox_root_params": { // اختياري. تعيين معلمات خاصة بالرسائل المرسلة إلى Firefox. "key": "value" } }] }}معلمات Amazon
Anchor link to{ "request": { "application": "12345-67891", // مطلوب. رمز تطبيق Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "notifications": [{ "adm_header": { // اختياري. كائن أو سلسلة نصية. يمكنك تحديد رأس الرسالة هنا. "en": "header" }, "adm_content": { // اختياري. كائن أو سلسلة نصية. يمكنك تحديد محتوى الرسالة هنا. "en": "content" }, "adm_root_params": { // اختياري. كائن قيمة-مفتاح مخصص "key": "value" }, "adm_sound": "push.mp3", // اختياري. "adm_sound_off": true, // اختياري. تمكين/تعطيل الصوت المحدد بواسطة حقل "adm_sound" "adm_icon": "icon.png", // اختياري. URL كامل للأيقونة. "adm_custom_icon": "URL.png", // اختياري. "adm_banner": "URL.png", // اختياري. "adm_ttl": 3600, // اختياري. معلمة مدة البقاء — أقصى عمر للرسالة // بالثواني. "adm_priority": -1 // اختياري. أولوية الإشعار في درج إشعارات Amazon، // القيم الصالحة هي -2، -1، 0، 1 و 2. }] }}معلمات Mac OS X
Anchor link to{ "request": { "application": "12345-67891", // مطلوب. رمز تطبيق Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "notifications": [{ "mac_title": { // اختياري. كائن أو سلسلة نصية. يضيف عنوانًا للإشعار الفوري. "en": "title" }, "mac_subtitle": { // اختياري. يضيف عنوانًا فرعيًا للإشعار الفوري. "en": "subtitle" }, "mac_content": { // اختياري. يضيف محتوى للإشعار الفوري. "en": "content" }, "mac_badges": 3, // اختياري. "mac_sound": "sound.caf", // اختياري. "mac_sound_off": true, // اختياري. تمكين/تعطيل الصوت المحدد بواسطة حقل "mac_sound" "mac_root_params": { // اختياري. "content-available": 1 }, "mac_ttl": 3600 // اختياري. معلمة مدة البقاء — أقصى عمر للرسالة بالثواني. }] }}معلمات Windows
Anchor link to{ "request": { "application": "12345-67891", // مطلوب. رمز تطبيق Pushwoosh "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "notifications": [{ "wns_content": { // مطلوب. محتوى (XML أو خام) الإشعار المشفر بـ base64 الخاص بـ MIME // في شكل كائن أو سلسلة نصية "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==", "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4=" }, "wns_type": "Badge", // اختياري. 'Tile' | 'Toast' | 'Badge' | 'Raw' "wns_tag": "myTag", // اختياري. يستخدم في سياسة استبدال المربعات. // سلسلة أبجدية رقمية لا تزيد عن 16 حرفًا. "wns_cache": 1, // اختياري. (1|0) يترجم إلى قيمة X-WNS-Cache-Policy. "wns_ttl": 600 // اختياري. وقت انتهاء صلاحية الإشعار بالثواني. }] }}الاستجابة:
| رمز حالة HTTP | status_code | الوصف |
|---|---|---|
| 200 | 200 | تم إنشاء الرسالة بنجاح |
| 200 | 210 | خطأ في الوسيطة. انظر status_message لمزيد من المعلومات |
| 400 | N/A | سلسلة طلب غير صالحة |
| 500 | 500 | خطأ داخلي |
تتبع رسائل API
Anchor link toلأغراض موازنة التحميل، لا نقوم بتخزين الرسائل المرسلة عبر API باستخدام معلمة “devices” التي تحتوي على أقل من 10 أجهزة في مصفوفة. لهذا السبب، لن يتم عرض هذه الرسائل في سجل الرسائل الخاص بك.
لرؤية تقارير الإشعارات خلال مرحلة الاختبار، استخدم تتبع رسائل API. يتيح لك تشغيل هذا الخيار ON تجاوز هذا الحد لمدة ساعة واحدة وحفظ هذه الإشعارات في سجل الرسائل. يتم إيقاف تشغيل تتبع رسائل API تلقائيًا بعد ساعة واحدة.
يمكن تنشيط تتبع رسائل API على صفحة سجل الرسائل بالنقر فوق بدء تتبع رسائل API في الزاوية اليمنى العليا.
شروط الـ Tag
Anchor link toكل شرط علامة هو مصفوفة مثل [tagName, operator, operand] حيث
- tagName: اسم العلامة
- operator: “EQ” | “IN” | “NOTEQ” | “NOTIN” | “LTE” | “GTE” | “BETWEEN” | “NOTSET” | “ANY”
- operand: string | integer | array | date
وصف العامل
Anchor link to- EQ: قيمة العلامة تساوي المعامل؛
- IN: قيمة العلامة تتقاطع مع المعامل (يجب أن يكون المعامل دائمًا مصفوفة)؛
- NOTEQ: قيمة العلامة لا تساوي المعامل؛
- NOTIN: قيمة العلامة لا تتقاطع مع المعامل (يجب أن يكون المعامل دائمًا مصفوفة)؛
- GTE: قيمة العلامة أكبر من أو تساوي المعامل؛
- LTE: قيمة العلامة أصغر من أو تساوي المعامل؛
- BETWEEN: قيمة العلامة أكبر من أو تساوي قيمة المعامل الدنيا ولكن أصغر من أو تساوي قيمة المعامل القصوى (يجب أن يكون المعامل دائمًا مصفوفة)؛
- NOTSET: العلامة غير محددة. لا يتم النظر في المعامل؛
- ANY: العلامة لها أي قيمة. لا يتم النظر في المعامل.
علامات السلسلة النصية
Anchor link toالعوامل الصالحة: EQ, IN, NOTEQ, NOTIN, NOTSET, ANY المعاملات الصالحة:
- EQ, NOTEQ: يجب أن يكون المعامل سلسلة نصية؛
- IN, NOTIN: يجب أن يكون المعامل مصفوفة من السلاسل النصية مثل
["value 1", "value 2", "value N"]؛ - NOTSET: العلامة غير محددة. لا يتم النظر في المعامل؛
- ANY: العلامة لها أي قيمة. لا يتم النظر في المعامل.
علامات الأعداد الصحيحة
Anchor link toالعوامل الصالحة: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY المعاملات الصالحة:
- EQ, NOTEQ, GTE, LTE: يجب أن يكون المعامل عددًا صحيحًا؛
- IN, NOTIN: يجب أن يكون المعامل مصفوفة من الأعداد الصحيحة مثل
[value 1, value 2, value N]؛ - BETWEEN: يجب أن يكون المعامل مصفوفة من الأعداد الصحيحة مثل
[min_value, max_value]؛ - NOTSET: العلامة غير محددة. لا يتم النظر في المعامل؛
- ANY: العلامة لها أي قيمة. لا يتم النظر في المعامل.
علامات التاريخ
Anchor link toالعوامل الصالحة: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY المعاملات الصالحة:
"YYYY-MM-DD 00:00"(سلسلة نصية)- طابع زمني unix
1234567890(عدد صحيح) "N days ago"(سلسلة نصية) للعوامل EQ, BETWEEN, GTE, LTE
علامات منطقية
Anchor link toالعوامل الصالحة: EQ, NOTSET, ANY
المعاملات الصالحة: 0, 1, true, false
علامات القائمة
Anchor link toالعوامل الصالحة: IN, NOTIN, NOTSET, ANY
المعاملات الصالحة: يجب أن يكون المعامل مصفوفة من السلاسل النصية مثل ["value 1", "value 2", "value N"].
مقتطفات /createMessage
Anchor link toنماذج طلبات /createMessage:
#!/bin/bash
#Usageif [ ! -n "$1" ] || [ ! -n "$2" ]then echo "`basename $0` usage: api_token appid message"; exit 1;fi;MESSAGE="$3";if [ -z "$3" ]thenMESSAGE='One push to rule them all!'fi;
echo -e "Response:"curl --data-binary "{\"request\": {\"application\":\"$2\", \"auth\":\"$1\", \"notifications\": [{ \"send_date\": \"now\", \"content\": \"$MESSAGE\" }] }}" \-H "Content-type: application/json" \"https://api.pushwoosh.com/json/1.3/createMessage"echo "";exit 0;<?phpdefine('PW_AUTH', 'API TOKEN');define('PW_APPLICATION', 'APPLICATION CODE');define('PW_DEBUG', true);
function pwCall($method, $data) { $url = 'https://api.pushwoosh.com/json/1.3/' . $method; $request = json_encode(['request' => $data]);
$ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate'); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch);
if (defined('PW_DEBUG') && PW_DEBUG) { print "[PW] request: $request"; print "[PW] response: $response"; print '[PW] info: ' . print_r($info, true); }}
pwCall('createMessage', array( 'application' => PW_APPLICATION, 'auth' => PW_AUTH, 'notifications' => array( array( 'send_date' => 'now', 'content' => 'test', 'data' => array('custom' => 'json data'), 'link' => 'https://pushwoosh.com/' ) ) ));-module(pushwoosh).-export([run/0, stop/0, sendMessage/1]).%% sendMessage argument: message text %%
%% Authentication & App_id %%-define(PW_AUTH, "YOUR_AUTH_TOKEN").-define(PW_APPLICATION, "YOUR_PUSHWOOSH_APP_CODE").
%% KickStart %%run() -> application:start(unicode), application:start(crypto), application:start(public_key), application:start(ssl), application:start(inets), %% HTTP Client verbosity options flase, verbose, debug httpc:set_options([{verbose, false}]).stop() -> application:stop(ssl), application:stop(public_key), application:stop(crypto), application:stop(inets).%% JSON Wars !encode(S) -> encode(S, [$"]).encode([], Acc) -> lists:reverse([$" | Acc]);encode([C | Cs], Acc) -> Hex = lists:flatten(io_lib:format("~4.16.0b", [C])), encode(Cs, lists:reverse(Hex) ++ "u\" ++ Acc).
sendMessage(Message_text) -> %% URL to JSON API 1.3 Url = "https://api.pushwoosh.com/json/1.3/createMessage", EncodedMessage = encode(Message_text), {ok, Response} = httpc:request( %%Method post, %%Request {Url, [{"User-Agent", "Erlang exemple"}], "application/json; charset=UTF-8", "{\"request\":{ \"application\": \""?PW_APPLICATION"\", \"auth\": \""?PW_AUTH"\", \"notifications\": [{ \"send_date\": \"now\", \"content\": "++EncodedMessage++" }]}}"}, %%HTTP options [{ssl,[{verify, verify_none}]}, {version, "HTTP/1.0"}], %%Options []), io:format("And received ~p", [Response]).class PushNotification
#- PushWoosh API Documentation https://www.pushwoosh.com/programming-push-notification/pushwoosh-push-notification-remote-api/ #- Two methods here: # - PushNotification.new.notify_all(message) Notifies all with the same option # - PushNotification.new.notify_devices(notification_options = {}) Notifies specific devices with custom options
include HTTParty #Make sure to have the HTTParty gem declared in your gemfile https://github.com/jnunemaker/httparty default_params :output => 'json' format :json
def initialize #- Change to your settings @auth = {:application => "00000-00000",:auth => "auth_token"} end
# PushNotification.new.notify_all("This is a test notification to all devices") def notify_all(message) notify_devices({:content => message}) end
# PushNotification.new.notify_device({ # :content => "TEST", # :data => {:custom_data => value}, # :devices => array_of_tokens #}) def notify_devices(notification_options = {}) #- Default options, uncomment :data or :devices if needed default_notification_options = { # YYYY-MM-DD HH:mm OR 'now' :send_date => "now", # Object( language1: 'content1', language2: 'content2' ) OR string :content => { :fr => "Test", :en => "Test" }, # JSON string or JSON object "custom": "json data" #:data => { # :custom_data => value #}, # omit this field (push notification will be delivered to all the devices for the application), or provide the list of devices IDs #:devices => {} }
#- Merging with specific options final_notification_options = default_notification_options.merge(notification_options)
#- Constructing the final call options = @auth.merge({:notifications => [final_notification_options]}) options = {:request => options} #- Executing the POST API Call with HTTPARTY - :body => options.to_json allows us to send the json as an object instead of a string response = self.class.post("https://api.pushwoosh.com/json/1.3/createMessage", :body => options.to_json,:headers => { 'Content-Type' => 'application/json' }) endend// Uses JSON classes from https://json.org/java/
package com.arellomobile;
import org.json.*;import java.io.*;import java.net.*;
public class SendPushNotificationSample{ public static final String PUSHWOOSH_SERVICE_BASE_URL = "https://api.pushwoosh.com/json/1.3/"; private static final String AUTH_TOKEN = "YOUR_AUTH_TOKEN"; private static final String APPLICATION_CODE = "PW_APPLICATION_CODE";
public static void main(String[] args) throws JSONException, MalformedURLException { String method = "createMessage"; URL url = new URL(PUSHWOOSH_SERVICE_BASE_URL + method);
JSONArray notificationsArray = new JSONArray() .put(new JSONObject().put("send_date", "now") .put("content", "test") .put("link", "https://pushwoosh.com/"));
JSONObject requestObject = new JSONObject() .put("application", APPLICATION_CODE) .put("auth", AUTH_TOKEN) .put("notifications", notificationsArray);
JSONObject mainRequest = new JSONObject().put("request", requestObject); JSONObject response = SendServerRequest.sendJSONRequest(url, mainRequest.toString());
System.out.println("Response is: " + response); }}
class SendServerRequest{ static JSONObject sendJSONRequest(URL url, String request) { HttpURLConnection connection = null; try { connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoInput(true); connection.setDoOutput(true);
DataOutputStream writer = new DataOutputStream(connection.getOutputStream()); writer.write(request.getBytes("UTF-8")); writer.flush(); writer.close();
return parseResponse(connection); } catch (Exception e) { System.out.println("An error occurred: " + e.getMessage()); return null; } finally { if (connection != null) { connection.disconnect(); } } }
static JSONObject parseResponse(HttpURLConnection connection) throws IOException, JSONException { String line; BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) { response.append(line).append(''); } reader.close();
return new JSONObject(response.toString()); }}import json
PW_AUTH = 'API TOKEN'PW_APPLICATION_CODE = 'APPLICATION CODE'
try: # For Python 3.0 and later from urllib.request import urlopen from urllib.request import Requestexcept ImportError: # Fall back to Python 2's urllib2 from urllib2 import urlopen from urllib2 import Request
def pw_call(method, data): url = 'https://api.pushwoosh.com/json/1.3/' + method data = json.dumps({'request': data}) req = Request(url, data.encode('UTF-8'), {'Content-Type': 'application/json'}) try: f = urlopen(req) response = f.read() f.close() print('Pushwoosh response: ' + str(response)) except Exception as e: print ('Request error: ' + str(e))
if __name__ == '__main__': pw_call('createMessage', { 'auth': PW_AUTH, 'application': PW_APPLICATION_CODE, 'notifications': [ { 'send_date': 'now', 'content': 'test', 'data': {"custom": "json data"}, 'link': 'https://pushwoosh.com' } ] } )using System;using System.IO;using System.Net;using Newtonsoft.Json.Linq;
namespace WebApplication1{ public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string pwAuth = "YOUR_AUTH_TOKEN"; string pwApplication = "PW_APPLICATION_CODE"; JObject json = new JObject( new JProperty("application", pwApplication), new JProperty("auth", pwAuth), new JProperty("notifications", new JArray( new JObject( new JProperty("send_date", "now"), new JProperty("content", "test"), new JProperty("wp_type", "Toast"), new JProperty("wp_count", 3), new JProperty("data", new JObject( new JProperty("custom", "json data"))), new JProperty("link", "https://pushwoosh.com/"), new JProperty("conditions", new JArray( (object)new JArray("Color", "EQ", "black"))))))); PWCall("createMessage", json); } private void PWCall(string action, JObject data) { Uri url = new Uri("https://api.pushwoosh.com/json/1.3/" + action); JObject json = new JObject(new JProperty("request", data)); DoPostRequest(url, json); } private void DoPostRequest(Uri url, JObject data) { HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); req.ContentType = "text/json"; req.Method = "POST"; using (var streamWriter = new StreamWriter(req.GetRequestStream())) { streamWriter.Write(data.ToString()); } HttpWebResponse httpResponse; try { httpResponse = (HttpWebResponse)req.GetResponse(); } catch (Exception exc) { throw new Exception(string.Format("Problem with {0}, {1}", url, exc.Message)); } using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); Page.Response.Write(responseText); } } }}package main
import( "fmt" "encoding/json" "net/http" "bytes" "io/ioutil")
const ( PW_APPLICATION = "APPLICATION CODE" PW_AUTH = "API TOKEN" PW_ENDPOINT = "https://api.pushwoosh.com/json/1.3/")
func pwCall(method string, data []byte) (bool) { url := PW_ENDPOINT + method request, err := http.NewRequest("POST", url, bytes.NewBuffer(data)) request.Header.Set("Content-Type", "application/json")
client := http.Client{} response, err := client.Do(request) if err != nil { fmt.Println("Error occur: " + err.Error()) return false } defer response.Body.Close()
fmt.Println("Response Status: ", response.Status) if (response.StatusCode == 200) { body, _ := ioutil.ReadAll(response.Body) fmt.Println("Response Body: ", string(body)) return true } return false}
func main() { requestData := map[string]interface{}{ "request": map[string]interface{} { "auth": PW_AUTH, "application": PW_APPLICATION, "notifications": []interface{}{ map[string]interface{} { "send_date": "now", "content": "test", "link": "https://pushwoosh.com", }, }, }, } jsonRequest, _ := json.Marshal(requestData) requestString := string(jsonRequest) fmt.Println("Request body: " + requestString)
pwCall("createMessage", jsonRequest)}$.ajax({ type: "POST", url: "https://api.pushwoosh.com/json/1.3/createMessage", data: JSON.stringify({ "request": { "application": "APPLICATION CODE", "auth": "API TOKEN", "notifications": [{ "send_date": "now", "ignore_user_timezone": true, "content": "Hello world!" }] } }), dataType: "json"}).done(function(data) { console.log(data);});deleteMessage
Anchor link toPOST https://api.pushwoosh.com/json/1.3/deleteMessage
يحذف رسالة مجدولة.
نص الطلب
Anchor link to| الاسم | النوع | الوصف |
|---|---|---|
| auth* | string | رمز الوصول إلى API من لوحة تحكم Pushwoosh. |
| message* | string | رمز الرسالة الذي تم الحصول عليه في طلب /createMessage. |
{ "status_code": 200, "status_message": "OK"}{ "request":{ "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "message": "xxxx-xxxxxxx-xxxxxx" // مطلوب. رمز الرسالة الذي تم الحصول عليه في /createMessage }}رموز الحالة:
| رمز حالة HTTP | status_code | الوصف |
|---|---|---|
| 200 | 200 | تم حذف الرسالة بنجاح |
| 200 | 210 | خطأ في الوسيطة. انظر status_message لمزيد من المعلومات |
| 400 | N/A | سلسلة طلب غير صالحة |
| 500 | 500 | خطأ داخلي |
<?php// see https://gomoob.github.io/php-pushwoosh/delete-message.htmluse Gomoob\Pushwoosh\Model\Request\DeleteMessageRequest;
// creates request instance$request = DeleteMessageRequest::create()->setMessage('MESSAGE_CODE');
// call '/deleteMessage' Web Service$response = $pushwoosh->deleteMessage($request);
if($response->isOk()) { print 'Great, my message has been deleted !';} else { print 'Oups, the deletion failed :-('; print 'Status code : ' . $response->getStatusCode(); print 'Status message : ' . $response->getStatusMessage();}getMessageDetails
Anchor link toPOST https://api.pushwoosh.com/json/1.3/getMessageDetails
يسترد تفاصيل الرسالة.
نص الطلب
Anchor link to| الاسم | النوع | الوصف |
|---|---|---|
| auth* | string | رمز الوصول إلى API من لوحة تحكم Pushwoosh. |
| message* | string | رمز الرسالة أو معرف الرسالة. |
{ "status_code": 200, "status_message": "OK", "response": { "message": { "id": 2068991743, "created": "2016-09-14 17:19:42", "send_date": "2016-09-14 17:19:41", "status": "done", "content": { "en": "Hello {Name|CapitalizeFirst|friend}! 🚀" }, "platforms": "[1]", "ignore_user_timezone": "1", "code": "XXXX-92B4C3C5-A7F5EF70", "data": { "key": "value" } } }}{ "request":{ "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "message": "xxxx-xxxxxxx-xxxxxx" // مطلوب. رمز الرسالة أو معرف الرسالة }}createTargetedMessage مهمل
Anchor link toPOST https://api.pushwoosh.com/json/1.3/createTargetedMessage
ينشئ إشعارًا فوريًا مستهدفًا جديدًا.
نص الطلب
Anchor link to| الاسم | النوع | الوصف |
|---|---|---|
| auth* | string | رمز الوصول إلى API من لوحة تحكم Pushwoosh. |
| devices_filter* | string | انظر الملاحظة أدناه. |
| send_date* | string | YYYY-MM-DD HH:mm أو ‘now’. |
| ignore_user_timezone | boolean | إذا تم تجاهله، يكون UTC-0 هو الافتراضي لـ “send_date”. |
| timezone | string | إذا تم تجاهله، يكون UTC-0 هو الافتراضي لـ “send_date”. |
| campaign | string | رمز حملة تريد تعيين هذه الرسالة الفورية إليها. |
| content* | string | محتوى الإشعار. انظر مثال الطلب للحصول على التفاصيل. |
| transactionId | string | معرف رسالة فريد لمنع تكرار الرسائل في حالة وجود مشاكل في الشبكة. يتم تخزينه على جانب Pushwoosh لمدة 5 دقائق. |
| link | string | رابط يتم فتحه بمجرد أن يفتح المستخدم رسالة فورية. |
| minimize_link | integer | 0 - عدم التقصير، 2 - bit.ly. الافتراضي = 2. |
| data | object | سلسلة JSON أو كائن JSON. سيتم تمريره كمعلمة “u” في الحمولة (محولة إلى سلسلة JSON). |
| preset | string | رمز الإعداد المسبق. |
| send_rate | integer | تقييد. القيم الصالحة هي من 100 إلى 1000 إشعار في الثانية. |
| inbox_date | string | حدد متى تتم إزالة رسالة من صندوق الوارد. |
| inbox_image | string | URL للصورة التي سيتم عرضها بجانب الرسالة في صندوق الوارد. |
{ "status_code": 200, "status_message": "OK", "response": { "messageCode": "97B0-C7473871-2FBDFDC6" }}The request cannot be fulfilled due to bad syntax.أمثلة استجابة إضافية:
{ "status_code": 210, "status_message": "Errors occurred while compiling filter", "response": { "errors": [{ "message": "Invalid tag set specification. \")\" expected.", "type": "syntax" }] }}{ "status_code": 210, "status_message": "Errors occurred while compiling filter", "response": { "errors": [{ "message": "Application \"11111-11111\" not found", "type": "semantic", "near": "\"11111-11111\"" }] }}{ "status_code": 210, "status_message": "Errors occurred while compiling filter", "response": { "errors": [{ "message": "Invalid character \"/\" at 1:19", "type": "lexical" }] }}{ "request": { "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "devices_filter": "A(\"XXXXX-XXXXX\") * T(\"City\", EQ, \"Name\")", // مطلوب. الصيغة مشروحة أدناه "send_date": "now", // اختياري. YYYY-MM-DD HH:mm أو 'now' "ignore_user_timezone": true, // اختياري. "timezone": "America/New_York", // اختياري. إذا تم تجاهله، يكون UTC-0 هو الافتراضي لـ "send_date". // مزيد من المعلومات https://php.net/manual/timezones.php. "campaign": "CAMPAIGN_CODE", // اختياري. رمز الحملة الذي تريد تعيين هذه الرسالة الفورية إليه. "content": { // اختياري. كائن أو سلسلة نصية. استخدم "wns_content" بدلاً من ذلك لنظام Windows. "en": "English", "de": "Deutsch" }, "transactionId": "unique UUID", // اختياري. معرف رسالة فريد لمنع تكرار الرسائل // في حالة وجود مشاكل في الشبكة. يتم تخزينه على جانب // Pushwoosh لمدة 5 دقائق. "rich_media": "XXXXX-XXXXX", // اختياري. انسخ رمز الوسائط الغنية من شريط URL // لصفحة محرر الوسائط الغنية في لوحة تحكم Pushwoosh. "link": "https://google.com", // اختياري. للروابط العميقة أضف "minimize_link": 0 "minimize_link": 0, // اختياري. 0 — عدم التقصير، 2 — bitly. الافتراضي = 2. // تم تعطيل خدمة تقصير عناوين URL من Google منذ 30 مارس 2019. // يرجى ملاحظة أن خدمات تقصير الروابط لديها قيود // على عدد الاستدعاءات. "data": { // اختياري. سلسلة JSON أو كائن JSON. "key": "value" // سيتم تمريره كمعلمة "u" في الحمولة }, // (محولة إلى سلسلة JSON). "preset": "XXXXX-XXXXX", // اختياري. رمز الإعداد المسبق للإشعارات من لوحة التحكم الخاصة بك. "send_rate": 100, // اختياري. تقييد. القيم الصالحة هي من 100 إلى 1000 إشعار/ثانية. "dynamic_content_placeholders": { // اختياري. عناصر نائبة للمحتوى الديناميكي بدلاً من علامات الجهاز. "firstname": "John", "lastname": "Doe" },
// لحفظ الرسالة في صندوق الوارد عبر API، استخدم "inbox_date" أو "inbox_image". // يتم حفظ الرسالة عند استخدام أحد هذين المعلمين على الأقل. "inbox_image": "Inbox image URL", // اختياري. الصورة التي سيتم عرضها بجانب الرسالة. "inbox_date": "2017-02-02" // اختياري. حدد متى تتم إزالة رسالة من صندوق الوارد. // ستتم إزالة الرسالة من صندوق الوارد في الساعة 00:00:01 بالتوقيت العالمي المنسق // من التاريخ المحدد، لذا فإن التاريخ السابق هو آخر // يوم يمكن للمستخدم رؤية الرسالة فيه في صندوق الوارد الخاص به. // إذا لم يتم تحديده، فإن تاريخ الإزالة الافتراضي هو اليوم التالي // لتاريخ الإرسال. }}{ "request": { "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "devices_filter": "FILTER CONDITION", "send_date": "now", // اختياري. YYYY-MM-DD HH:mm أو 'now' "content": { // اختياري. كائن أو سلسلة نصية. "en": "English", // استخدم "wns_content" بدلاً من ذلك لنظام Windows. "de": "Deutsch" }, "ignore_user_timezone": true, // اختياري. "timezone": "America/New_York", // اختياري. إذا تم تجاهله، يكون UTC-0 هو الافتراضي لـ "send_date". // مزيد من المعلومات https://php.net/manual/timezones.php. "campaign": "CAMPAIGN_CODE", // اختياري. رمز الحملة الذي تريد تعيين هذه الرسالة الفورية إليه.
// المعلمات المتعلقة بـ iOS "ios_badges": 5, // اختياري. رقم شارة تطبيق iOS. // استخدم "+n" أو "-n" لزيادة/إنقاص قيمة الشارة بمقدار n. "ios_sound": "sound file.wav", // اختياري. اسم ملف الصوت في الحزمة الرئيسية للتطبيق. // إذا ترك فارغًا، فلن يصدر الجهاز أي صوت // عند تلقي إشعار. "ios_sound_off": true, // اختياري. تمكين/تعطيل الصوت المحدد بواسطة حقل "ios_sound". "ios_ttl": 3600, // اختياري. معلمة مدة البقاء — أقصى عمر للرسالة بالثواني. "ios_silent": 1, // اختياري. يُمكّن الإشعارات الصامتة (يتجاهل "sound" و "content"). "ios_category_id": "1", // اختياري. معرف فئة iOS8 من Pushwoosh. "ios_category_custom": "category", // اختياري. فئة APNS مخصصة. "ios_root_params": { // اختياري. معلمات المستوى الجذر إلى قاموس aps. "aps": { "content-available": "0", // اختياري. اضبط "1" لإرسال إشعار صامت و "0" لإشعار عادي. "mutable-content": 1 // مطلوب لمرفقات الوسائط في iOS10+. }, "attachment": "YOUR_ATTACHMENT_URL", // URL مرفق وسائط iOS10+. "data": {} // اختياري. بيانات مقدمة من المستخدم، بحد أقصى 4 كيلوبايت }, "apns_trim_content": 1, // اختياري. (0|1) يقص سلاسل المحتوى الزائدة بنقاط حذف. "ios_title": { // اختياري. يضيف عنوانًا لإشعار iOS الفوري. "en": "title" }, "ios_subtitle": { // اختياري. يضيف عنوانًا فرعيًا لإشعار iOS الفوري. "en": "subTitle" }, "ios_content": { // اختياري. يضيف محتوى لإشعار iOS الفوري. "en": "content" },
// المعلمات المتعلقة بـ Android "android_root_params": { // اختياري. كائن قيمة-مفتاح مخصص. "key": "value" // معلمات المستوى الجذر لمستلمي حمولة android. }, "android_sound": "soundfile", // اختياري. بدون امتداد ملف. إذا ترك فارغًا، فلن يصدر الجهاز // أي صوت عند تلقي إشعار. "android_sound_off": true, // اختياري. تمكين/تعطيل الصوت المحدد بواسطة حقل "android_sound" "android_header": { // اختياري. كائن أو سلسلة نصية. رأس إشعار Android. "en": "header" }, "android_content": { // اختياري. كائن أو سلسلة نصية. محتوى إشعار Android. "en": "content" }, "android_icon": "icon.png", "android_custom_icon": "URL.png", // اختياري. URL المسار الكامل لملف الصورة. "android_banner": "URL.png", // اختياري. URL المسار الكامل لملف الصورة. "android_badges": 5, // اختياري. عدد صحيح. رقم شارة أيقونة تطبيق Android. // استخدم "+n" أو "-n" لزيادة/إنقاص قيمة الشارة بمقدار n. "android_gcm_ttl": 3600, // اختياري. معلمة مدة البقاء — أقصى عمر للرسالة بالثواني. "android_vibration": 0, // اختياري. اهتزاز قسري في Android للإشعارات ذات الأولوية العالية. "android_led": "#rrggbb", // اختياري. لون LED سداسي عشري، سيقوم الجهاز بأفضل تقريب له. "android_priority": -1, // اختياري. يضبط معلمة "importance" للأجهزة التي تعمل بنظام Android 8.0 // والإصدارات الأحدث، بالإضافة إلى معلمة "priority" للأجهزة // التي تعمل بنظام Android 7.1 والإصدارات الأقدم. يحدد مستوى المقاطعة // لقناة إشعار أو إشعار معين. // القيم الصالحة هي -2، -1، 0، 1، 2. "android_delivery_priority": "normal", // اختياري. "normal" أو "high". يُمكّن تسليم الإشعار // عندما يكون الجهاز في وضع توفير الطاقة. "android_ibc": "#RRGGBB", // اختياري. لون خلفية الأيقونة على Lollipop، #RRGGBB، // #AARRGGBB، "red"، "black"، "yellow"، إلخ. "android_silent": 1, // اختياري. 0 أو 1. تمكين الإشعار الصامت. // تجاهل الصوت والمحتوى
// المعلمات المتعلقة بـ Amazon "adm_root_params": { // اختياري. كائن قيمة-مفتاح مخصص "key": "value" }, "adm_sound": "push.mp3", "adm_sound_off": true, // اختياري. تمكين/تعطيل الصوت المحدد بواسطة حقل "adm_sound" "adm_header": { "en": "Header" }, "adm_content": { "en": "content" }, "adm_icon": "icon.png", "adm_custom_icon": "URL.png", "adm_banner": "URL.png", "adm_ttl": 3600, // اختياري. معلمة مدة البقاء — أقصى عمر للرسالة // بالثواني. "adm_priority": -1, // اختياري. أولوية الإشعار في درج إشعارات Amazon، // القيم الصالحة هي -2، -1، 0، 1 و 2.
// المعلمات المتعلقة بـ Mac OS X "mac_badges": 3, "mac_sound": "sound.caf", "mac_sound_off": true, "mac_root_params": { "content-available": 1 }, "mac_ttl": 3600, // اختياري. معلمة مدة البقاء — أقصى عمر للرسالة بالثواني. "mac_title": { // اختياري. يضيف عنوانًا للإشعار الفوري. "en": "title" }, "mac_subtitle": { // اختياري. يضيف عنوانًا فرعيًا لإشعار MacOS الفوري. "en": "subtitle" }, "mac_content": { // اختياري. يضيف محتوى لإشعار MacOS الفوري. "en": "content" },
// المعلمات المتعلقة بـ Windows "wns_content": { // مطلوب. محتوى (XML أو خام) الإشعار المشفر // بـ base64 الخاص بـ MIME في شكل كائن أو سلسلة نصية "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==", "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4=" }, "wns_type": "Badge", // 'Tile' | 'Toast' | 'Badge' | 'Raw' "wns_tag": "myTag", // اختياري. يستخدم في سياسة استبدال المربعات. // سلسلة أبجدية رقمية لا تزيد عن 16 حرفًا. "wns_cache": 1, // اختياري. (1|0) يترجم إلى قيمة X-WNS-Cache-Policy. "wns_ttl": 600, // اختياري. وقت انتهاء صلاحية الإشعار بالثواني.
// المعلمات المتعلقة بـ Safari "safari_title": { // اختياري. كائن أو سلسلة نصية. عنوان الإشعار. "en": "title" }, "safari_content": { // اختياري. كائن أو سلسلة نصية. محتوى الإشعار. "en": "content" }, "safari_action": "Click here", // اختياري. "safari_url_args": [ // مطلوب. ولكن قد تكون القيمة فارغة "firstArgument", "secondArgument" ], "safari_ttl": 3600, // اختياري. معلمة مدة البقاء — أقصى // عمر للرسالة بالثواني.
// المعلمات المتعلقة بـ Chrome "chrome_title": { // اختياري. يمكنك تحديد رأس الرسالة في هذه المعلمة. "en": "title" }, "chrome_content": { // اختياري. يمكنك تحديد محتوى الرسالة في هذه المعلمة. "en": "content" }, "chrome_icon": "icon_URL", // اختياري. URL المسار الكامل للأيقونة أو مسار ملف موارد الامتداد "chrome_gcm_ttl": 3600, // اختياري. معلمة مدة البقاء – أقصى عمر للرسالة بالثواني. "chrome_duration": 20, // اختياري. يغير وقت عرض إشعار chrome. اضبط على 0 لعرض الإشعار // حتى يتفاعل المستخدم معه. "chrome_image": "image_URL", // اختياري. URL لصورة كبيرة "chrome_root_params": { // اختياري. تعيين معلمات خاصة بالرسائل المرسلة إلى Chrome. "key": "value" }, "chrome_button_text1": "text1", // اختياري. "chrome_button_url1": "button1_URL", // اختياري. يتم تجاهله إذا لم يتم تعيين chrome_button_text1. "chrome_button_text2": "text2", // اختياري. "chrome_button_url2": "button2_url", // اختياري. يتم تجاهله إذا لم يتم تعيين chrome_button_text2.
// المعلمات المتعلقة بـ Firefox "firefox_title": { // اختياري. كائن أو سلسلة نصية. يمكنك تحديد رأس الرسالة هنا. "en": "title" }, "firefox_content": { // اختياري. كائن أو سلسلة نصية. يمكنك تحديد محتوى الرسالة هنا. "en": "content" }, "firefox_icon": "icon_URL", // اختياري. URL المسار الكامل للأيقونة أو المسار // إلى الملف في موارد الامتداد. "firefox_root_params": { // اختياري. تعيين معلمات خاصة بالرسائل المرسلة إلى Firefox. "key": "value" } }}الأساسيات بسيطة جدًا – يتم إجراء جميع الفلاتر على مجموعات من الكيانات.
المجموعات
Anchor link toيتم تعريف المجموعات على النحو التالي:
1. الأجهزة المشتركة في التطبيق المعين (A)؛ 2. الأجهزة التي تطابق قيم العلامات المحددة (T) أو قيمة العلامة الخاصة بالتطبيق (AT)؛
الصيغة
Anchor link toلنجرب بعض الأمثلة وفقًا للقائمة أعلاه.
استهداف مشتركي التطبيق
Anchor link toيحدد الفلتر “A” مجموعة من الأجهزة المشتركة في تطبيق معين:
A("XXXXX-XXXXX", ["iOS", "Android", "OsX", "Windows", "Amazon", "Safari", "Chrome", "Firefox"])
حيث
- “XXXXX-XXXXX” – رمز تطبيق Pushwoosh
- [“iOS”, “Android”, …] – مصفوفة من المنصات المستهدفة. إذا تم حذفها، سيتم إرسال الرسالة إلى جميع المنصات المتاحة لهذا التطبيق.
التصفية حسب قيم العلامات
Anchor link toيحدد الفلتر “T” مجموعة من الأجهزة التي تم تعيين قيم علامات محددة لها.
T(\"Age\", IN, [17,20])
يحدد مجموعة الأجهزة التي تم تعيين علامة “age” لها على إحدى القيم: 17، 18، 19، 20.
أنواع العلامات والعوامل
Anchor link toالشيء المهم جدًا الذي يجب فهمه هو أن العلامات مشتركة بين التطبيقات، وهي تقدم أداة قوية جدًا لتقسيم وتصفية المستخدمين المستهدفين دون ربط نفسك بتطبيق معين.
يمكن أن تكون العلامة من ثلاثة أنواع مختلفة: سلسلة نصية، عدد صحيح، قائمة. يحدد نوع العلامة العوامل التي يمكنك استخدامها لعلامة معينة.
علامات السلسلة النصية
Anchor link toالعوامل القابلة للتطبيق:
- EQ – يستهدف الأجهزة بقيمة علامة محددة
- IN – يستهدف الأجهزة بأي من قيم العلامات المحددة
- NOTIN – يستهدف الأجهزة التي لا تحتوي على قيم علامات محددة
- NOTEQ – يستهدف الأجهزة التي لها قيمة علامة لا تساوي القيمة المحددة
- NOTSET – يستهدف الأجهزة التي لا تحتوي على قيمة لعلامة محددة
- ANY – يستهدف الأجهزة التي لها أي قيمة محددة لعلامة معينة
أمثلة:
T (\"Age\", EQ, 30) – يفلتر المستخدمين في سن 30
T (\"favorite_color\", IN, [\"red\",\"green\",\"blue\"]) – يفلتر المستخدمين الذين اختاروا الأحمر أو الأخضر أو الأزرق كلونهم المفضل.
T (\"Name", NOTSET, \"\") – يستهدف الأجهزة التي لا تحتوي على قيمة لعلامة الاسم.
يمكنك استخدام قيم رقمية مع علامات السلسلة النصية، ولكن سيتم تحويل هذه القيم إلى سلسلة نصية.
علامات الأعداد الصحيحة
Anchor link toالعوامل القابلة للتطبيق:
- GTE – أكبر من أو يساوي قيمة محددة
- LTE– أصغر من أو يساوي قيمة محددة
- EQ – يساوي قيمة محددة
- BETWEEN – بين القيم الدنيا والقصوى المحددة
- IN – أي من القيم المحددة
- NOTIN – لا توجد قيم محددة معينة لجهاز
- NOTEQ – الأجهزة التي لها قيمة علامة لا تساوي القيمة المحددة
- NOTSET – الأجهزة التي لا تحتوي على قيمة لعلامة محددة
- ANY – الأجهزة التي لها أي قيمة محددة لعلامة معينة
أمثلة:
T (\"Level\", EQ, 14) – يفلتر المستخدمين في المستوى 14 فقط.
T (\"Level\", BETWEEN, [1,5) – يفلتر المستخدمين في المستويات 1، 2، 3، 4، و 5.
T (\"Level", GTE, 29) – يستهدف المستخدمين الذين وصلوا إلى المستوى 29 على الأقل.
علامات القائمة
Anchor link toالعوامل القابلة للتطبيق:
- IN – الأجهزة التي لها أي من قيم العلامات المحددة
مثال: T("Category", IN, ["breaking_news","business","politics"])
علامات التاريخ
Anchor link toالعوامل القابلة للتطبيق:
- GTE – أكبر من أو يساوي قيمة محددة
- LTE– أصغر من أو يساوي قيمة محددة
- EQ – يساوي قيمة محددة
- BETWEEN – بين القيم الدنيا والقصوى المحددة
- NOTEQ – الأجهزة التي لها قيمة علامة لا تساوي القيمة المحددة
- NOTSET – الأجهزة التي لا تحتوي على قيمة لعلامة محددة
- ANY – الأجهزة التي لها أي قيمة محددة لعلامة معينة
أمثلة:
AT("7777D-322A7","Last Application Open", BETWEEN, ["2022-02-28", "2022-03-02"])
AT("7777D-322A7","Last Application Open", GTE, "90 days ago")
العمليات
Anchor link to- “+” – يجمع مجموعتين (يساوي OR)
- “*” – يتقاطع مع مجموعتين (يساوي AND)
- “\” – يطرح مجموعة من أخرى (يساوي NOT)
جميع العمليات ترابطية من اليسار. ”+” و ”*” لهما نفس الأولوية. "" لها أولوية أكبر. يمكنك استخدام الأقواس لتحديد أولويات الحسابات.
لاحظ أن عملية "" ليست تبادلية. A("12345-12345") \ A("67890-67890") ليست هي نفسها A("67890-67890") \ A("12345-12345").
getPushHistory مهمل
Anchor link toPOST https://api.pushwoosh.com/json/1.3/getPushHistory
يحصل على سجل الرسائل مع تفاصيل الإشعارات.
نص الطلب
Anchor link to| الاسم | النوع | الوصف |
|---|---|---|
| auth* | string | رمز الوصول إلى API من لوحة تحكم Pushwoosh. |
| limitMessages | integer | يحد من عدد الرسائل في الاستجابة. القيم الممكنة من 10 إلى 1000. |
| source | string | مصدر سجل الإشعارات. يمكن أن يكون null أو: “CP”, “API”, “GeoZone”, “RSS”, “AutoPush”, “A/B Test”. |
| searchBy | string | القيم الممكنة للبحث بها. يمكن أن يكون null أو: “notificationID”, “notificationCode”, “applicationCode”, “campaignCode”. |
| value | string | قيمة البحث المحددة وفقًا لحقل “searchBy”. |
| lastNotificationID | string | يستخدم للترقيم. آخر messageId من استدعاء /getPushHistory السابق. انظر التفاصيل أدناه. |
{ "status_code": 200, "status_message": "OK", "response": { "rows": [{ "id": 10191611434, "code": "8071-07AD1171-77238AD1", "createDate": "2020-09-14 12:26:21", "sendDate": "2020-09-14 12:26:21", "content": { "en": "Hello!" }, "url": null, "ios_title": null, "ios_subtitle": null, "ios_root_params": null, "android_header": null, "android_root_params": null, "conditions": null, "conditions_operator": "AND", "filter_code": "E3A64-A5F3C", "filter_conditions": "#In-app Purchase(≠0)", "filter_name": "Purchased something", "geozone": null, "campaignId": "", "campaignName": "", "subscription_segments": null, "open": { "C90C0-0E786": { "IOS": 0 } }, "sent": { "C90C0-0E786": { "IOS": 1 } }, "ctr": { "C90C0-0E786": 0 } }, { "id": 10191609202, "code": "41CA-83F8E0D7-7A63822B", "createDate": "2020-09-14 12:25:55", "sendDate": "2020-09-14 12:25:55", "content": { "en": "Hi!" }, "url": null, "ios_title": null, "ios_subtitle": null, "ios_root_params": null, "android_header": null, "android_root_params": null, "conditions": null, "conditions_operator": "AND", "filter_code": null, "filter_conditions": null, "filter_name": null, "geozone": null, "campaignId": "", "campaignName": "", "subscription_segments": { "2D732-BB981": "News" }, "open": { "C90C0-0E786": { "CHROME": 0, "IOS": 0 } }, "sent": { "C90C0-0E786": { "CHROME": 1, "IOS": 2 } }, "ctr": { "C90C0-0E786": 0 } }] }}{ "request":{ "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "source": null, // اختياري. القيم الممكنة هي null, "CP", "API", "GeoZone", // "RSS", "AutoPush", "A/B Test" "searchBy": "applicationCode", // اختياري. القيم الممكنة هي "", "notificationID", // "notificationCode", "applicationCode", "campaignCode" "value": "C8717-703F2", // اختياري. قيمة البحث المحددة وفقًا لحقل "searchBy". "lastNotificationID": 0, // اختياري. يستخدم للترقيم. آخر messageId من // استدعاء /getPushHistory السابق. انظر التفاصيل أدناه. "limitMessages": 1000 // اختياري. قيمة ممكنة من 10 إلى 1000. }}ستعيد هذه الطريقة 1000 رسالة من الحساب مرتبة حسب معرف الرسالة. للحصول على الصفحة الثانية، حدد آخر معرف رسالة من الاستجابة السابقة في معلمة lastNotificationId.
أنواع بيانات الاستجابة
Anchor link toid -- int | 0code -- stringcreateDate -- string (date: %Y-%m-%d %H:%M:%S)sendDate -- string (date: %Y-%m-%d %H:%M:%S)content -- array ( dict {lang: value} | list [])title -- array ( dict {lang: value} | list [])subtitle -- array ( dict {lang: value} | list [])url -- stringios_title -- string | array ( dict {lang: value} ) | nullios_subtitle -- string | array ( dict {lang: value} ) | nullios_root_params -- dict (JSON) | nullandroid_header -- string | array ( dict {lang: value} ) | nullandroid_root_params -- dict (JSON) | nullconditions -- list (JSON) | nullconditions_operator -- string | nullfilter_code -- string | nullfilter_name -- string | nullfilter_conditions -- string | nullgeozone -- string | nullcampaignId -- string | ""campaignName -- string | ""subscription_segments (obsolete) -- list (JSON) | nulldata -- dict (JSON) | nullopen -- dict [dict [string: int]] | "" Example: 'open': {'AAAAA-BBBBB': {'IOS': 1, 'ANDROID': 1}}sent -- dict [dict [string: int]] | "" Example: 'sent': {'AAAAA-BBBBB': {'IOS': 10, 'ANDROID': 10}}ctr -- dict [string: int] | "" Example: {'AAAAA-BBBBB': 1}errors -- dict [string: int] | "" Example: {'ANDROID': 1, 'IOS': 1}cancelMessage
Anchor link toPOST https://api.pushwoosh.com/json/1.3/cancelMessage
يلغي رسالة مجدولة.
نص الطلب
Anchor link to| الاسم | النوع | الوصف |
|---|---|---|
| auth* | string | رمز الوصول إلى API من لوحة تحكم Pushwoosh. |
| message* | string | رمز الرسالة الذي تم الحصول عليه في استجابة /createMessage. |
{ "status_code":200, "status_message":"OK"}{ "request":{ "auth": "yxoPUlwqm…………pIyEX4H", // مطلوب. رمز الوصول إلى API من لوحة تحكم Pushwoosh "message": "xxxx-xxxxxxx-xxxxxx" // مطلوب. رمز الرسالة الذي تم الحصول عليه في استجابة /createMessage }}رموز الحالة:
| رمز حالة HTTP | status_code | الوصف |
|---|---|---|
| 200 | 200 | تم إلغاء الرسالة بنجاح |
| 200 | 210 | خطأ في الوسيطة. انظر status_message لمزيد من المعلومات. |
| 400 | N/A | سلسلة طلب غير صالحة |
| 500 | 500 | خطأ داخلي |