تصحيح حملة دون إنشاء تسجيل آخر
استخدم هذا المسار لتعديل وصف حملة موجودة أو أمثلة رسائلها أو شرح الموافقة أو خصائص المحتوى المدعومة. احتفظ بمعرّف الحملة وبعلامتها التجارية وحالة استخدامها الحاليتين. إنشاء تسجيل جديد ليس آلية إعادة المحاولة لتصحيح حملة موجودة.
صادِق باستخدام حساب API مفعّل عبر HTTPS من عنوان بروتوكول إنترنت مصدري مسموح به. لا يمكن الوصول إلا إلى حملة تابعة لذلك الحساب. اقرأ حالتها الحالية قبل إعداد التغييرات؛ فلا يمكن تحديث الحملات المنتهية الصلاحية عبر سير العمل هذا.
curl --silent --show-error --fail-with-body --user "$API_USER:$API_PASSWORD" \
"https://api.multitel.net/tcr/v2/campaign/$CAMPAIGN_ID"اختيار الحقول التي تغيرت فعلا
أعدّ ملف campaign-update.json ليحتوي على التغييرات المدعومة. ترسل البوابة الحالية حقول الحملة التي تغيرت فقط، ولا ترسل brandId أو usecase أو campaignId أو معلومات الحالة المخصصة للاستجابة فقط. وتستخدم التحديثات المباشرة عبر API أيضا كائن JSON يحتوي على الحقول، وليس غلاف changes/version الخاص بالبوابة.
| الحقول | المعلومات المطلوب تقديمها |
|---|---|
| description, messageFlow | وصف دقيق للخدمة وكيفية منح الأشخاص موافقتهم وتلقيهم الرسائل وسحبهم الموافقة. يسمح كل حقل بعدد 40–4096 حرفا. |
| sample1–sample5 | أمثلة واقعية لهذه الحملة، بعدد 20–1024 حرفا لكل مثال غير فارغ. حافظ على عدد الأمثلة الذي تتطلبه حالة الاستخدام المؤهلة؛ ولا ترسل رسائل لا علاقة لها بها. |
| helpMessage, optinMessage, optoutMessage | الردود المناسبة الموجهة إلى المستلمين، بحد أقصى 1024 حرفا. عند اشتراط ذلك، التزم بالحد الأدنى البالغ 20 حرفا واشرح الخدمة الفعلية. راجع متطلبات الموافقة الحالية قبل إفراغ أي حقل. |
| optinKeywords, optoutKeywords, helpKeywords | كلمات مفتاحية مفصولة بفواصل دون مسافات، بحد أقصى 255 حرفا. حافظ على الاتساق بين الردود والمعالجة الفعلية للكلمات المفتاحية. |
| privacyPolicyLink, termsAndConditionsLink | عناوين ويب عامة ذات صلة، بحد أقصى 2048 حرفا، تصف الممارسات الفعلية لهذه الخدمة. |
| embeddedLinkSample | رابط نموذجي يمثل الروابط التي ستتضمنها الرسائل، بحد أقصى 255 حرفا. |
| numberPool, embeddedLink, embeddedPhone, ageGated, directLending | خصائص الحملة الفعلية على هيئة قيم منطقية بصيغة JSON. عند تعطيل إحدى الخصائص، استخدم false، وليس السلسلة النصية "false". |
| autoRenewal | يدعم مخطط API العامة هذه القيمة المنطقية بصيغة JSON، رغم أن محرر محتوى الحملات الاعتيادي في البوابة لا يتيحها. لا يؤدي تعطيل التجديد إلى إلغاء الحد الأدنى للالتزام القائم أو إسقاط الرسوم المستحقة بالفعل. |
| resellerId | يتيح المخطط أيضا ربط الحملة بموزّع. وهذه الوظيفة خارج نطاق نموذج تصحيح المحتوى الاعتيادي في البوابة. لا تستخدم هذا الحقل لنقل حملة بين العملاء، ولا تفترض أن API ستضبط خدمة شركة الاتصالات لموزّع آخر. |
لا يتيح مخطط التحديث brandId أو usecase أو subscriberOptin أو subscriberOptout أو subscriberHelp كحقول قابلة للتعديل. لا تنسخ كامل بيانات طلب إنشاء حملة إلى طلب تحديث. راجع التأهيل الحالي عند مراجعة متطلبات الرسائل.
إرسال تصحيح محدد
يصف هذا المثال خدمة توضيحية للتذكير بالمواعيد. عدّله ليتوافق مع الخدمة الفعلية للحملة ومسار الحصول على الموافقة فيها قبل استخدامه.
{
"description": "Appointment reminders requested by customers of the registered business.",
"sample1": "Example business: Your requested appointment reminder is ready. Reply STOP to opt out."
}curl --silent --show-error --fail-with-body --user "$API_USER:$API_PASSWORD" \
--request PUT \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $IDEMPOTENCY_KEY" \
--data-binary @campaign-update.json \
"https://api.multitel.net/tcr/v2/campaign/$CAMPAIGN_ID"للإرسال المقصود نفسه، احتفظ بالمفتاح نفسه وبطريقة الطلب ومساره واستعلامه وبايتات جسمه مطابقة تماما. يتطلب تغيير المحتوى طلبا خضع لمراجعة منفصلة؛ فلا تبدّل المفاتيح عشوائيا بعد انتهاء المهلة. قد يعيد الطلب المكتمل إرجاع خطأ مخزن مؤقتا، وقد يعيد الطلب المكرر الذي لا يزال قيد المعالجة الرمز 409 مع Retry-After.
قراءة الحملة مجددا
تعيد استجابة HTTP 200 كائن الحملة مباشرة بصيغة JSON. تحقق من campaignId، ثم اجلب الحملة نفسها باستخدام GET وقارن الحقول المقصودة. لا يؤدي نجاح الحفظ بحد ذاته إلى طلب مراجعة أخرى من شركة الاتصالات أو تغيير تعيينات الأرقام أو تفعيل الإرسال أو إرسال رسالة.
تتحقق البوابة من إصدار النموذج قبل الحفظ وتقرأ الحملة مجددا بعده. لا تفرض نقطة النهاية العامة PUT إصدار النموذج الخاص بالبوابة: لذا نسّق التعديلات المتزامنة. لا يكتشف مفتاح منع تكرار الأثر تحديثا أجراه محرر آخر.
إذا عرضت البوابة رفضا للمراجعة لم تتم معالجته بعد، فصحح المحتوى أولا، ثم استخدم الإجراء المنفصل لطلب المراجعة عندما يكون متاحا. يتحقق ذلك الإجراء من الحملة الحالية في بيئة الإنتاج وحالة مشاركتها. لا يؤدي حفظ المحتوى وحده إلى تشغيله، ولا يثبت وجود معرّف للحملة أنها معتمدة.
لا تؤدي تحديثات الحملة الاعتيادية عبر PUT إلى إصدار خصم منفصل لتسجيل الحملة في الخدمة الحالية. تظل الرسوم الشهرية القائمة والحدود الدنيا للالتزام وإيجار الأرقام ورسوم استخدام الرسائل سارية. للاطلاع على أسعار الحملات المضبوطة حاليا، راجع رسوم الحملات.
التعامل مع القيود والنتائج غير المؤكدة
عند تلقي HTTP 400، اقرأ الخطأ الخاص بالحقل وتحقق من الأطوال ونص الموافقة وحالة الحملة. وللرموز 401 أو 403 أو 404، تحقق من بيانات اعتماد API وعنوان بروتوكول الإنترنت المصدري المسموح به وملكية الحملة. وللرمز 429، التزم بـ Retry-After. وعند تلقي 500 أو 502 أو انقطاع الطلب، احتفظ بمعرّف الحملة وأي requestId، ثم طابق البيانات مع السجل الموجود قبل إرسال طلب آخر.
تعتمد اللقطة المحلية على جسم الاستجابة المُعاد. قد تُسقط استجابة جزئية غير فارغة حقولا سابقة، بما فيها البيانات الوصفية للتجديد؛ وقد تُبقي استجابة فارغة قيما قديمة. تحقق من نتيجة GET كاملة بدلا من اعتبار النجاح وحده دليلا على الحفاظ على كل الحقول. أبلغ الدعم بالفروقات التي لم تُحل. لا يحدّث هذا المسار تعيينات شركات الاتصالات على نحو ذري، ولا يوفر إجراء عاما لاستعادة التفعيل لدى شركة الاتصالات.