دليل التكامل مع WooCommerce
يربط هذا الدليل متجرًا على WooCommerce بـ Tajo. ويتكوّن التكامل من شقّين يعملان معًا:
- إضافة Tajo for WooCommerce: تلتقط أحداث التفاعل في الوقت الفعلي (الطلبات والسلات والمبالغ المستردة والمراجعات وإرسال النماذج) داخل WordPress وتسلّمها إلى Tajo عبر صندوق صادر دائم وموقَّع.
- اتصال WooCommerce REST: يقرأ Tajo عملاء متجرك وطلباته ومنتجاته وقسائمه ومبالغه المستردة ومراجعاته من أجل الاستيراد التاريخي والمزامنة المستمرة. راجع مرجع موصّل WooCommerce للإعداد المعتمد على REST وحده.
أما أتمتة التسويق نفسها (البريد الإلكتروني وSMS وواتساب عبر Brevo وغيره من مزودي التفاعل) فتُضبط داخل Tajo، لا داخل الإضافة. ومهمة الإضافة هي إخراج أحداث جديرة بالثقة من WordPress.
المتطلبات المسبقة
- WordPress 6.3+ مع صلاحية مسؤول
- PHP 7.4+
- WooCommerce 7.0+ (تعمل الإضافة أيضًا على مواقع WordPress من دون WooCommerce، وتبقى محوّلات التجارة غير نشطة ببساطة)
- حساب Tajo مع اتصال WordPress مُنشأ
- HTTPS على نقطة نهاية Tajo (متوفر دائمًا في Tajo المستضاف)
الخطوة 1: ثبّت إضافة Tajo for WooCommerce
التثبيت اليدوي
# Download the plugincd wp-content/pluginswget https://tajo.io/downloads/woocommerce/tajo-woocommerce-latest.zip
# Verify and unzipunzip tajo-woocommerce-latest.zipثم فعّلها من لوحة تحكم WordPress:
- انتقل إلى Plugins ← Installed Plugins
- ابحث عن “Tajo for WooCommerce”
- انقر على Activate
يمكنك أيضًا رفع ملف zip مباشرة عبر Plugins ← Add New ← Upload Plugin. ويُنشر مع كل إصدار مجموع تحقق SHA-256 على tajo.io/downloads/woocommerce/. الإضافة غير مدرجة بعد في دليل WordPress.org؛ والتثبيت اليدوي هو المسار المدعوم اليوم.
الخطوة 2: اضبط الاتصال
انتقل إلى WooCommerce ← Tajo (في المواقع التي لا تستخدم WooCommerce: Settings ← Tajo) وأدخل القيم الثلاث من اتصال WordPress في Tajo:
| الحقل | القيمة |
|---|---|
| نقطة نهاية Tajo | عنوان webhook بـ HTTPS الظاهر في Tajo، مثل https://alto.tajo.io/api/connectors/wordpress/webhooks/engagement |
| معرّف الربط | معرّف الربط الخاص بالاتصال من Tajo |
| سر التوقيع | السر المشترك (من 32 إلى 256 حرفًا). تولّد الإضافة سرًا محليًا قويًا عند التفعيل؛ الصقه في Tajo، أو الصق سر Tajo هنا |
لا توجد ثوابت مفاتيح API تُضاف إلى wp-config.php. وتبقى الأحداث في طابور آمن داخل صندوق الصادر المحلي إلى أن تُحفظ القيم الثلاث.
ثم تحقق من المسار من طرف إلى طرف:
- انقر على Queue test event، ثم Process now.
- يجب أن يُظهر جدول صندوق صادر التسليم الحدث بحالة مُسلَّم.
- في Tajo، تأكد من وصول حدث
connection.testعلى اتصال WordPress.
ما الذي ترسله الإضافة
كل حدث هو مغلّف مضغوط ومُقلَّص حفاظًا على الخصوصية، موقَّع بـ HMAC-SHA256. ولا يغادر WordPress سوى حقول هوية التفاعل (البريد الإلكتروني والهاتف والمعرّفات المحلية) إضافة إلى بيانات وصفية محدودة للحدث، ولا تغادره أبدًا الأسماء ولا العناوين البريدية ولا عناوين IP ولا وكلاء المستخدم ولا نصوص التعليقات ولا حقول النماذج الاعتباطية ولا ملاحظات الطلبات ولا تفاصيل الدفع.
أحداث WooCommerce
| الخطاف | الحدث |
|---|---|
woocommerce_created_customer / woocommerce_update_customer | customer.created / customer.updated |
woocommerce_new_product / woocommerce_update_product | product.created / product.updated |
woocommerce_add_to_cart، إزالة عنصر، تطبيق قسيمة أو إزالتها | cart.updated (مع ملخص السلة لتدفقات السلات المتروكة) |
woocommerce_cart_emptied | cart.emptied |
woocommerce_new_order / woocommerce_update_order | order.placed / order.updated |
woocommerce_order_status_changed | order.status_changed (مع order.fulfilled عند الاكتمال) |
woocommerce_payment_complete | order.paid |
woocommerce_order_refunded | refund.created |
| تحديثات حالة WooCommerce Subscriptions | subscription.status_changed |
تحمل أحداث الطلبات رقم الطلب وحالته وعملته وإجمالياته وبنوده وعناوين URL جاهزة للمراجعة أو إعادة الطلب، وهذا يكفي لأتمتة ما بعد الشراء واستعادة العملاء دون طلب API إضافي.
أحداث WordPress
contact.created/contact.updated/contact.deletedلحسابات المستخدمينcontent.published/content.updated/content.unpublishedللمحتوى العامcomment.created/comment.status_changedلتعليقات الزوار ومراجعات المنتجات (أما ملاحظات طلبات WooCommerce الداخلية والـ pingbacks والـ trackbacks فلا تُرسل أبدًا)form.submittedلعمليات الإرسال الناجحة عبر Contact Form 7 وWPForms وGravity Forms وFluent Forms، ولا تُستخرج سوى حقول هوية البريد الإلكتروني والهاتف المُصنَّفة والبيانات الوصفية للنموذج؛ أما الحقول المُرسلة الاعتباطية فتُهمل
الموثوقية: صندوق صادر التسليم
لا تطلق الإضافة الأحداث نحو Tajo مباشرة أثناء تحميل الصفحة. فكل حدث يُكتب أولًا في جدول صندوق صادر محلي، ثم يُسلَّم عبر WP-Cron مع:
- تراجع أسّي محدود (حتى 8 محاولات، مع احترام
Retry-After) - رسائل ميتة مع Replay dead letters بنقرة واحدة في لوحة الإدارة
- حدود احتفاظ تمنع أي نقطة نهاية غير متاحة من تكديس البيانات الشخصية (المُسلَّم: 7 أيام؛ في الطابور: 30 يومًا؛ الرسائل الميتة: 30 يومًا بعد آخر تحديث)
- معرّفات أحداث مُعادة الاستخدام بأمان، فلا تُنتج إعادات المحاولة والإعادات أي تكرار في الوجهة
إذا عطّلت استضافتك WP-Cron (DISABLE_WP_CRON)، فاستدعِ wp-cron.php من مجدول حقيقي مرة واحدة على الأقل كل دقيقة.
القبول لا يُستنتج أبدًا
إنشاء الحساب والدفع والشراء وإرسال النماذج العامة لا تُعامَل بأي حال على أنها قبول تسويقي. وتحمل الأحداث المدمجة قائمة قبول فارغة. ولتسجيل قبول صريح (من خانة اشتراك في النشرة مثلًا)، أرسله عبر خطاف التوسعة:
do_action( 'tajo_engagement_emit', 'consent.updated', array( 'email' => $email ), array( 'policyVersion' => '2026-07' ), array( array( 'channel' => 'email', 'status' => 'opt_in', // or 'opt_out' 'purpose' => 'marketing', 'source' => 'newsletter_checkbox', 'evidence' => array( 'formId' => 'newsletter-footer', 'field' => 'marketing_email' ), ), ), gmdate( 'c' ));ويتيح الخطاف نفسه لأي إضافة أو قالب إرسال أحداث مخصصة؛ فكل شيء يمر عبر المنقّي وصندوق الصادر والتوقيع ذاتها.
الخطوة 3: الاستيراد التاريخي
تغطي الأحداث في الوقت الفعلي كل ما يجري بدءًا من التثبيت. أما التاريخ السابق للإضافة فيستورده اتصال WooCommerce REST في Tajo: العملاء والطلبات والمنتجات والقسائم والمبالغ المستردة والمراجعات الموجودة، ويُضبط بالكامل من جهة Tajo بمفتاح WooCommerce REST API (WooCommerce ← Settings ← Advanced ← REST API، بصلاحية القراءة). راجع مرجع موصّل WooCommerce للتفاصيل.
الخصوصية وGDPR
- تُسجَّل الإضافة لدى Tools ← Export Personal Data وTools ← Erase Personal Data في WordPress؛ وتُصدَّر أحداث صندوق الصادر المحتفظ بها لبريد إلكتروني مطابق أو تُمحى محليًا.
- يتشارك المحو والتسليم قفلًا يفشل مغلقًا، فلا يمكن لعملية محو أن تُبلغ عن اكتمالها بينما حمولة ما في منتصف الإرسال.
- يغطي المحو المحلي صندوق صادر WordPress وحده، فقدّم الطلب المقابل في Tajo من أجل البيانات في الوجهة.
- يوقف إلغاء التفعيل التسليم مؤقتًا لكنه يبقي الإعدادات والأحداث في الطابور؛ أما حذف الإضافة فيزيل صندوق الصادر والإعدادات والسر والجداول الزمنية نهائيًا.
التوافق
- HPOS: تعلن الإضافة توافقها مع WooCommerce High-Performance Order Storage ولا تستخدم سوى كائنات CRUD والخطافات العامة.
- WooCommerce Subscriptions: تُلتقط تغيّرات حالة الاشتراك عندما تكون التوسعة نشطة.
- Multisite: يُنظّف إلغاء التثبيت كل موقع في الشبكة.
مرجع التشغيل
يتاح للمسؤولين اكتشاف الخادم إلى خادم والتحكم في صندوق الصادر عبر مصادقة Application Password:
| الطريقة | المسار | الغرض |
|---|---|---|
GET | /wp-json/tajo/v1/capabilities | إصدار الإضافة، والمحوّلات المكتشفة، وجرد الأحداث، وصحة صندوق الصادر |
GET | /wp-json/tajo/v1/outbox | أعداد صندوق الصادر (لا تُكشف الحمولات أبدًا) |
POST | /wp-json/tajo/v1/outbox/process | معالجة دفعة فورًا |
POST | /wp-json/tajo/v1/outbox/replay | إعادة إرسال الرسائل الميتة |
استكشاف الأخطاء
| العَرَض | السبب والحل |
|---|---|
| تبقى الأحداث بحالة “Queued” | لم تُحفظ بعد نقطة النهاية أو معرّف الربط أو السر، والتسليم متوقف حتى تُضبط القيم الثلاث |
| تبقى الأحداث بحالة “Retrying” | نقطة نهاية Tajo غير قابلة للوصول من استضافتك، أو أن WP-Cron لا يعمل، فتحقق من عمود الخطأ في جدول صندوق الصادر ومن إعداد cron لديك |
| تراكم الرسائل الميتة | خطأ لا يقبل إعادة المحاولة (غالبًا معرّف ربط أو سر خاطئ)، فأصلح الإعداد ثم استخدم Replay dead letters |
| ”Enter a valid HTTPS Tajo webhook endpoint” | يجب أن تكون نقطة النهاية بـ HTTPS ومن دون بيانات اعتماد مضمّنة |
| وصل حدث الاختبار لكن لا شيء في Tajo | تأكد من أنك لصقت معرّف الربط من مساحة العمل أو الاتصال نفسه الذي تنتمي إليه نقطة النهاية في Tajo |
الخطوات التالية
- مرجع موصّل WooCommerce: مزامنة REST، وتفاصيل توقيع webhook، ومفاتيح الإعداد
- مزامنة العملاء: تعيين عملاء WooCommerce داخل نظام السجل لديك
- اضبط أتمتة السلات المتروكة وما بعد الشراء واستعادة العملاء في Tajo باستخدام أحداث
cart.updatedوorder.placedوorder.fulfilled