يوضح هذا المستند كيفية إعداد مجموعة التوفّر العالي على جهاز المطوّر. كما يوفر إرشادات حول كيفية تمكين الاتصال المتعدد أولاً، وكذلك التغييرات المطلوبة لمجموعة الاتصال المتعدد ذات التوفّر العالي.
وبالنسبة لإعداد الإنتاج، اتبع التعليمات ذات الصلة الواردة في عمليات إعداد الإنتاج.
إذا اتبعت تعليمات إعداد المطوّر: المثيل المنفرد لإعداد عميل واجهة API الخاصة بتطبيق WhatsApp للأعمال على جهاز المطوّر مسبقًا، فيرجى اتباع دليل الترحيل قبل متابعة الاطلاع على بقية المحتوى الوارد في هذا المستند.
يعتمد المحتوى الوارد في هذا الدليل على افتراض التثبيت الحديث.
ستحتاج إلى ما يلي:
للتعرف على المزيد حول التوفّر العالي والاتصال المتعدد، يوصى بشدة أيضًا بالاطلاع على دليل التوفّر وتوسيع النطاق.
biz
للبرامج النصية للإعدادقم بتشغيل الرمز البرمجي التالي في موقعك المفضل لعميل واجهة API الخاصة بتطبيق WhatsApp للأعمال:
mkdir ~/biz; cd ~/biz;
توجد ملفات تكوين عميل واجهة API الخاصة بتطبيق WhatsApp للأعمال في مستودع GitHub لـ WhatsApp-Business-API-Setup-Scripts. ويمكنك إعداد عميل واجهة API الخاصة بتطبيق WhatsApp للأعمال باستخدام مثيل قاعدة بيانات MySQL أو Postgres.
multiconnect-compose.yml
وdb.env
من دليل التثبيت إلى دليل ~/biz
الذي أنشأته في الخطوة الأولى.multiconnect-compose.yml
وdb.env
من دليل تثبيت Postgres إلى دليل ~/biz
الذي أنشأته في الخطوة الأولى.WA_API_VERSION
يجب تعيين المتغير البيئي WA_API_VERSION
إلى الإصدار الحالي باستخدام:
export WA_API_VERSION=current-whatsapp-version
لبدء تشغيل مجموعة التوفّر العالي بحاوية قاعدة بيانات واحدة وحاوية Webapp واحدة وحاويتي Master وحاويتي Coreapp في الخلفية تكون متماثلة للمخطط الموضح في مقدمة حول التوفّر العالي، قم بتشغيل الأمر التالي:
docker-compose -f multiconnect-compose.yml up -d db waweb master1 master2 wacore1 wacore2
يجب أن يبدو الإخراج الناتج كما يلي:
Creating network "biz_default" with the default driver Creating volume "biz_mysqlData" with local driver Creating volume "biz_whatsappMedia" with local driver Creating biz_db_1 ... done Creating biz_waweb_1 ... done Creating biz_master1_1 ... done Creating biz_master2_1 ... done Creating biz_wacore2_1 ... done Creating biz_wacore1_1 ... done
يمكنك التحقق من أن جميع الحاويات متوفرة بالحالة UP من خلال تشغيل:
docker-compose -f multiconnect-compose.yml ps
يجب أن يبدو الإخراج الناتج كما يلي:
Name Command State Ports -------------------------------------------------------------------------------------------------------------------------------------------------------------- biz_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:33060->3306/tcp, 33060/tcp biz_master1_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32931->6250/tcp, 0.0.0.0:32930->6251/tcp, 0.0.0.0:32928->6252/tcp, 0.0.0.0:32926->6253/tcp biz_master2_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32929->6250/tcp, 0.0.0.0:32927->6251/tcp, 0.0.0.0:32925->6252/tcp, 0.0.0.0:32924->6253/tcp biz_wacore1_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32937->6250/tcp, 0.0.0.0:32935->6251/tcp, 0.0.0.0:32933->6252/tcp, 0.0.0.0:32932->6253/tcp biz_wacore2_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32939->6250/tcp, 0.0.0.0:32938->6251/tcp, 0.0.0.0:32936->6252/tcp, 0.0.0.0:32934->6253/tcp biz_waweb_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:9090->443/tcp
سيتم افتراضيًا تشغيل حاوية Webapp في المنفذ 9090
وسيتم تشغيل حاوية قاعدة البيانات في المنفذ 33060
.
يمكنك تنزيل مجموعة Postman التي نوفرها وتكوينها للتفاعل مع واجهة API الخاصة بتطبيق WhatsApp للأعمال إذا كنت لا تريد استخدام سطر الأوامر.
يمكنك إجراء التحقق من سلامة الأداء بعميل واجهة API الخاصة بتطبيق WhatsApp للأعمال باستخدام استدعاء واجهة API إلى العقدة health
.
يجب أن يبدو الإخراج الناتج كما يلي:
{ "health": { "master1:b28d835cd579": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] }, "master2:7fe542d305b4": { "gateway_status": "unregistered", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] }, "wacore2:05e1a6d70665": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] } } }
تعرض الاستجابة حالة gateway_status
لـ unregistered
باعتبارها gateway_status
بالنسبة لحاوية Master الرئيسية نظرًا لأنه لم يتم تسجيل عميل واجهة API الخاصة بتطبيق WhatsApp للأعمال بعد.
يمكنك تسجيل عميل واجهة API الخاصة بتطبيق WhatsApp للأعمال باستخدام استدعاء واجهة API إلى العقدة account
.
قم بإجراء التحقق من سلامة الأداء مرة أخرى بعميل واجهة API الخاصة بتطبيق WhatsApp للأعمال باستخدام استدعاء واجهة API إلى العقدة health
بعد إكمال التسجيل، والتأكد من أن إحدى حاويات Coreapp تتوفر بالحالة gateway_status
لـ connected
.
يجب أن يبدو الإخراج الناتج كما يلي:
{ "health": { "master1:b28d835cd579": { "gateway_status": "disconnected", "role": "secondary_master" }, "master2:7fe542d305b4": { "gateway_status": "disconnected", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "gateway_status": "connected", "role": "coreapp" }, "wacore2:05e1a6d70665": { "gateway_status": "disconnected", "role": "coreapp" } } }
ملاحظة: في وضع التوفّر العالي، لن يتم سوى ربط عقدة Coreapp واحدة فقط (wacore1
في هذا المثال) بخادم Whatsapp، وستتمتع جميع العُقد الأخرى بما في ذلك عقدة Master الرئيسية بالحالة gateway_status
لـ disconnected
. وفي حالة تعطل wacore1
، فسيحل wacore2
محله ويتم ربطه بخادم Whatsapp للحفاظ على التوفّر العالي.
لقد انتهيت الآن من إعداد عميل واجهة API الخاصة بتطبيق WhatsApp للأعمال في وضع التوفّر العالي. وعند التعيين إلى هذا الوضع، لن تتمكّن سوى حاوية Coreapp من الربط بخادم WhatsApp وإرسال الرسائل في أي وقت. وإذا كنت تريد توفر العديد من حاويات Coreapp لإرسال الرسائل في الوقت نفسه من أجل زيادة معدل نقل الرسائل، فاتبع الخطوات الواردة في قسم إعداد مجموعة الاتصال المتعدد ذات التوفّر العالي الموضح أدناه.
استخدم نقطة نهاية الأقسام لإعداد قسمين. ويجب أن تظهر لك استجابة HTTP بالحالة 201 Created
.
يمكنك إجراء التحقق من سلامة الأداء بعميل واجهة API الخاصة بتطبيق WhatsApp للأعمال باستخدام استدعاء واجهة API إلى العقدة health
.
يجب أن يبدو الإخراج الناتج كما يلي:
{ "health": { "master1:b28d835cd579": { "gateway_status": "disconnected", "role": "secondary_master" }, "master2:7fe542d305b4": { "gateway_status": "connected", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "gateway_status": "connected", "role": "coreapp" }, "wacore2:05e1a6d70665": { "gateway_status": "connected", "role": "coreapp" } } }
ملاحظة: في وضع الاتصال المتعدد ذي القسمين، سيتم ربط عقدتي Coreapp (wacore1
وwacore2
في هذا المثال) بخادم WhatsApp، كما سيتم ربط عقدة Master الرئيسية (master2
في هذا المثال) بخادم WhastsApp.
في هذا المثال حتى الآن، تتوفر لديك حاويتا Coreapp وتم تقسيم عمليات تحميل الرسائل بينهما. ومع ذلك، إذا تعطلت إحدى حاويتي Coreapp، فستفشل نصف عمليات إرسال الرسائل لديك. ومن أجل الحفاظ على التوفّر العالي في إعداد الاتصال المتعدد الجديد هذا، يمكنك تشغيل حاوية Coreapp ثالثة للسماح بفشل حاوية Coreapp واحدة والتي تكون مماثلة للمخطط الموضح في مقدمة حول الاتصال المتعدد.
من أجل تشغيل حاوية Coreapp الثالثة، قم بتشغيل الأمر التالي:
docker-compose -f multiconnect-compose.yml up -d wacore3
يجب أن يبدو الإخراج الناتج كما يلي:
biz_db_1 is up-to-date biz_waweb_1 is up-to-date biz_master1_1 is up-to-date Creating biz_wacore3_1 ... done
قم بإجراء التحقق من سلامة الأداء مرة أخرى للتأكد من أن جميع العُقد تعمل بشكل صحيح باستخدام استدعاء واجهة API إلى العقدة health
.
يجب أن يبدو الإخراج الناتج كما يلي:
{ "health": { "master1:b28d835cd579": { "gateway_status": "disconnected", "role": "secondary_master" }, "master2:7fe542d305b4": { "gateway_status": "connected", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "gateway_status": "connected", "role": "coreapp" }, "wacore2:05e1a6d70665": { "gateway_status": "connected", "role": "coreapp" }, "wacore3:23b50199bec2": { "gateway_status": "disconnected", "role": "coreapp" } } }
تعمل حاوية Coreapp الجديدة (wacore3
في هذا المثال) الآن باعتبارها حاوية احتياطية، ولكن لم يتم ربطها حاليًا بخادم WhatsApp. في حالة توقف wacore1
أو wacore2
عن العمل، فسيتم ربط wacore3
بخادم WhatsApp للحفاظ على العدد الكلي للأقسام وهو 2.
ستواجه مشكلة وقت التعطل أثناء عملية الترقية.
يوصى بشدة بإجراء نسخ احتياطي لإعدادات التطبيق الحالية لديك قبل الترقية للتأكد من أنه يمكنك نسخ الإعدادات احتياطيًا وتشغيلها سريعًا. لذا يرجى اتباع وثائق النسخ الاحتياطي والاستعادة.
لذا نوصي دائمًا بتنفيذ الترقيات خلال الساعات الأقل ازدحامًا.
WA_API_VERSION
إلى الإصدار الجديديجب تحديث المتغير البيئي WA_API_VERSION
إلى رقم الإصدار الجديد باستخدام:
export WA_API_VERSION=new-whatsapp-version
أعد تشغيل حاويات Docker من خلال تشغيل:
docker-compose -f multiconnect-compose.yml up -d
v2.23.x
والإصدارات الأحدثويمكنك الآن الاستفادة من خدمة ترقية قاعدة البيانات التي ستتيح لك ترقية قاعدة البيانات بينما لا يزال تطبيقك قيد التشغيل لتجنب وقت التعطل.
يتضمن الملف dbupgrade-compose.yml حقولاً تشير إلى إصدار الحاوية.
المثال:
services: dbupgrade: image: docker.whatsapp.biz/coreapp:v${WA_API_VERSION:-2.21.3}
لترقية عملية تثبيت، يمكنك بدء تشغيل الحاوية dbupgrade-service مع تعيين متغير البيئة WA_API_VERSION
إلى أحدث إصدار:
WA_API_VERSION=new-whatsapp-version docker-compose -f dbupgrade-compose.yml up -d
ملاحظة: إذا كنت تستخدم تزامنًا يعيد تشغيل الحاوية عند الخروج بغض النظر عن الرمز البرمجي للخروج، يمكنك بدء تشغيل الخدمة من خلال تعيين متغير البيئة EXIT_ON_SUCCESS
إلى القيمة FALSE
لتجنب الخروج من الحاوية عندما يكون الرمز البرمجي للخروج بالقيمة 0
.
إذا تمت ترقية قاعدة البيانات بنجاح، فستخرج الحاوية بالرمز البرمجي 0
. ويمكنك استخدام أمر Docker التالي لتتبع الحالة:
docker wait your-database-upgrade-container-name
وسيؤدي ذلك إلى إخراج الرمز البرمجي للخروج الخاص بحاوية dbupgrade-service.
أعد تشغيل حاويات Docker في Coreapp وWebapp مع تعيين متغير البيئة WA_API_VERSION
إلى أحدث إصدار:
WA_API_VERSION=new-whatsapp-version docker-compose -f multiconnect-compose.yml up -d
يوصى بشدة بنسخ إعدادات التطبيق الحالية احتياطيًا قبل إلغاء التثبيت. لذا يرجى اتباع وثائق النسخ الاحتياطي والاستعادة.
إذا كنت تريد إعادة تعيين بيئة التطوير لديك من خلال إزالة كل الحاويات، فقم بتشغيل الأمر التالي من الدليل الذي يتضمن الملف multiconnect-compose.yml
:
docker-compose -f multiconnect-compose.yml down
للتخلص من جميع وحدات التخزين المحددة في الملف multiconnect-compose.yml
وكذلك الحاويات، قم بتشغيل down
باستخدام المعلمة -v
:
docker-compose -f multiconnect-compose.yml down -v
لتجميع السجلات من جميع الحاويات، قم بتشغيل الأمر التالي:
docker-compose -f multiconnect-compose.yml logs > debug_output.txt
من أجل تجميع سجلات خدمة معينة، قم بإلحاق اسم الخدمة (مثل waweb
أو master1
أو wacore1
) بالأمر docker-compose logs
:
docker-compose -f multiconnect-compose.yml logs waweb > debug_output.txt
يمكنك العثور على السجلات في الملف debug_output.txt
في الدليل الحالي.
يستخدم هذا البرنامج الرمز البرمجي FFmpeg المُرخص بموجب رخصة جنو العمومية الصغرى (LGPL) بالإصدار 2.1 ويمكن تنزيل مصدره من هنا.