نحن بصدد إنهاء API داخل المواقع. راجع مستند حالة إنهاء API داخل المواقع للحصول على التفاصيل، والتعرف على كيفية الترحيل إلى API السحابة من الجيل القادم.
We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.
/v1/messages
استخدم العقدة messages
لإرسال النص والوسائط وجهات الاتصال والمواقع والرسائل التفاعلية بالإضافة إلى قوالب الرسائل إلى العملاء.
يمكنك الرجوع إلى الدلائل التالية للحصول على معلومات حول الأنواع المحددة للرسائل التي يمكنك إرسالها: الرسائل النصية ورسائل الوسائط ورسائل جهات الاتصال والموقع والرسائل التفاعلية وقوالب الرسائل وقوالب رسائل الوسائط وقوالب الرسائل التفاعلية.
ستحتاج إلى ما يلي:
بدءًا من الإصدار 2.39 والإصدارات الأحدث، لا يتعين عليك استدعاء عقدة جهات الاتصال قبل إرسال الرسالة.
يمكنك إرسال الرسائل من خلال إجراء استدعاء POST
للعقدة /messages
بغض النظر عن نوع الرسالة. ويختلف محتوى نص رسالة JSON حسب أنواع الرسائل (نص، صورة، وغير ذلك).
هذه هي المعلمات الرئيسية المستخدمة في طلبات POST لـ /messages
:
الاسم | الوصف |
---|---|
| مطلوب لقوالب الرسائل. نوع الرسالة التي يتم إرسالها.
|
| مطلوب. معرف WhatsApp الذي يتم إرسال الرسالة إليه. |
سيتم إيقاف استخدام | اختياري. اعتبارًا من يمكن قبول سلسلة بتنسيق المدة ISO-8601، وكذلك بالثواني. ويجب تحديد فترات المدة بدقة مع مضاعفة الأيام، ويتم تقريب أية قيم بينية تلقائيًا إلى أقرب يوم. ولمزيد من المعلومات، يمكنك الرجوع إلى قسم الكائن |
| اختياري. القيمة: |
| مطلوب لرسائل يمكن أن يحتوي على كل معلومات القالب. |
| مطلوب لقوالب الرسائل. العنصر المُضمن في محتوى الرسالة. ويمكن الإشارة إلى أن الرسالة تتمتع ببنية محددة للغاية. وتوفر المعلمات المضمّنة البنية. |
الاسم | الوصف |
---|---|
| مطلوب. يحتوي على نص الرسالة التي يمكن أن تحتوي على عناوين URL وتنسيقات. |
بالنسبة لواجهة API داخل المواقع، يتم إرجاع معرف كائن الوسائط عند تحميل الوسائط بنجاح إلى عميل الواجهة داخل المواقع/المرجع في واتساب للأعمال من خلال نقطة النهاية media
.
Name | Description |
---|---|
| Required when The media object ID. Do not use this field when message |
| Required when The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs. Do not use this field when message Cloud API users only:
|
| Optional. Media asset caption. Do not use with On-Premises API users:
|
| Optional. Describes the filename for the specific document. Use only with The extension of the filename will specify what format the document is displayed as in WhatsApp. |
| Optional. On-Premises API only. This path is optionally used with a |
داخل contacts
، يمكنك تضمين الكائنات التالية: addresses
وemails
وname
وorg
وphone
وurls
. يجب أن يتم تضمين الكائنات المجمعة في مصفوفة كما هو موضح في المثال أدناه.
Name | Description |
---|---|
| Optional. Full contact address(es) formatted as an
|
| Optional.
|
| Optional. Contact email address(es) formatted as an
|
| Required. Full contact name formatted as a
*At least one of the optional parameters needs to be included along with the |
| Optional. Contact organization information formatted as an
|
| Optional. Contact phone number(s) formatted as a
|
| Optional. Contact URL(s) formatted as a
|
مثال على كائن contacts
يتضمن الكائنات المجمَّعة المتداخلة ضمن:
"contacts": [ { "addresses": [ { "city": "city name", "country": "country name", "country_code": "code", "state": "Contact's State", "street": "Contact's Street", "type": "Contact's Address Type", "zip": "Contact's Zip Code" } ], "birthday": "birthday", "emails": [ { "email": "email", "type": "HOME" }, { "email": "email", "type": "WORK" } ], "name": { "first_name": "first name value", "formatted_name": "formatted name value", "last_name": "last name value", "suffix": "suffix value" }, "org": { "company": "company name", "department": "dep name", "title": "title" }, "phones": [ { "phone": "Phone number", "wa-id": "WA-ID value", "type": "MAIN" }, { "phone": "Phone number", "type": "HOME" }, { "phone": "Phone number", "type": "WORK" } ], "urls": [{ "url": "some url", "type": "WORK" }] } ]
Name | Description |
---|---|
| Required. Location latitude in decimal degrees. |
| Required. Location longitude in decimal degrees. |
| Required. Name of the location. |
| Required. Address of the location. |
داخل template
، يمكنك تضمين كائنات components
وlanguage
.
بدءًا من الإصدار v2.27.8
، يجب أن يمثل الحقل namespace
الخاص بالقالب مساحة اسم مرتبطة بحساب واتساب للأعمال الذي يمتلك رقم الهاتف المتوفر في العميل الحالي داخل الموقع لحساب واتساب للأعمال. وبخلاف ذلك، سيتعذر إرسال الرسالة.
بالإضافة إلى ذلك، بدءًا من الإصدار v2.41
والإصدارات الأحدث، سيكون namespace
حقلاً اختياريًا.
الاسم | الوصف |
---|---|
| مطلوب. مساحة اسم القالب. بداية من الإصدار |
| مطلوب. اسم القالب. |
| مطلوب. يمكن تحديد اللغة التي قد يتم بها عرض القالب. ولا تعمل سياسة اللغة |
| اختياري. مصفوفة تحتوي على معلمات الرسالة. |
داخل components
، يمكنك إجراء تداخل للكائن parameters
. بالإضافة إلى ذلك، يمكنك تعيين type
على button
.
الاسم | الوصف |
---|---|
| مطلوب. يمكن وصف النوع |
| اختياري. مصفوفة تحتوي على محتوى الرسالة. |
الاسم | الوصف |
---|---|
| مطلوب. يمكن وصف النوع تتبع أنواع الوسائط ( لمزيد من المعلومات حول القيمتين |
داخل الكائن components
، يمكنك تعيين type
إلى button
. هذه هي معلمات الزر:
الاسم | الوصف |
---|---|
| مطلوب. نوع الزر الذي تم إنشاؤه. |
| مطلوب. فهرس موضع الزر. يمكن أن يتوفر لديك 10 أزرار كحد أقصى باستخدام قيم الفهرس |
| مطلوب. المعلمات الخاصة بالزر والتي يتم تعيينها وقت الإنشاء في مدير الأعمال لديك. احرص على تضمين المعلمات التالية:
|
مثال على نوع button
مع sub_type بالقيمة quick_reply
:
{ "type": "button", "sub_type": "quick_reply", "index": 0, "parameters": [{ "type": "payload", "payload": "Yes-Button-Payload" }] }
مثال على نوع button
مع sub_type بالقيمة copy_code
{ "type": "button", "sub_type": "copy_code", "index": 0, "parameters": [{ "type": "coupon_code", "coupon_code": "DISCOUNT20" }] }
تم إيقاف استخدام الكائن hsm
في الإصدار v2.39
من الواجهة داخل المواقع/المرجع في واتساب للأعمال. يُرجى استخدام الكائن template
بدلاً من ذلك.
الاسم | الوصف |
---|---|
| مطلوب. مساحة الاسم المطلوب استخدامها. وبداية من الإصدار |
| مطلوب. اسم العنصر الذي يشير إلى القالب المطلوب استخدامه ضمن مساحة الاسم. وبداية من الإصدار |
| مطلوب. يمكن السماح بتوضيح مواصفات أية لغة محددة. ولمزيد من المعلومات، يمكنك الرجوع إلى القسم اللغة. يُستخدم هذا الحقل للسماح باستخدام خيار |
| مطلوب. يمثل هذا الحقل مصفوفة من القيم المطلوب تطبيقها على المتغيرات الموجودة في القالب. ولمزيد من المعلومات، يمكنك الرجوع إلى القسم المعلمات القابلة للترجمة. |
The interactive
object generally contains 4 main components: header
, body
, footer
, and action
. Additionally, some of those components can contain one or more different objects:
header
, you can nest media
objects.action
, you can nest section
and button
objects.Name | Description |
---|---|
| Required. The type of interactive message you want to send. Supported values:
|
| Required for type Header content displayed on top of a message. You cannot set a The
|
| Optional for type An object with the body of the message. The
|
| Optional. An object with the footer of the message. The
|
| Required. An |
Name | Description |
---|---|
| Required for List Messages. Button content. It cannot be an empty string and must be unique within the message. Emojis are supported, markdown is not. Maximum length: 20 characters. |
| Required for Reply Button Messages. A
لا يمكن أن تتواجد مسافات سابقة أو لاحقة عند تعيين المعرف. |
| Required for List Messages and Multi-Product Messages. Array of |
| Required for Single-Product Messages and Multi-Product Messages. Unique identifier of the Facebook catalog linked to your WhatsApp Business Account. This ID can be retrieved via Commerce Manager. |
| Required for Single-Product Messages and Multi-Product Messages. Unique identifier of the product in a catalog. Maximum 100 characters for both Single-Product and Multi-Product messages. To get this ID, go to Commerce Manager, select your Facebook Business account, and you will see a list of shops connected to your account. Click the shop you want to use. On the left-side panel, click Catalog > Items, and find the item you want to mention. The ID for that item is displayed under the item's name. |
| Optional for Flows Messages. The current mode of the Flow, either Default: |
| Required for Flows Messages. Must be |
| Required for Flows Messages. A token that is generated by the business to serve as an identifier. |
| Required for Flows Messages. Unique identifier of the Flow provided by WhatsApp. |
| Required for Flows Messages. Text on the CTA button, eg. "Signup". Maximum length: 20 characters (no emoji). |
| Optional for Flows Messages.
Default: |
| Optional for Flows Messages. Required only if
|
Name | Description |
---|---|
| Required if the message has more than one Title of the section. Maximum length: 24 characters. |
| Required for List Messages. Contains a list of row objects. Limited to 10 rows across all sections. Each
|
| Required for Multi-Product Messages. Array of Each
|
الرسائل الصوتية:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "audio", "audio": { "id": "your-media-id", } }
رسائل المستند باستخدام filename
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "document", "document": { "id": "your-media-id", "filename": "your-document-filename" } }
رسائل المستندات، باستخدام link
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "document", "document": { "link": "http(s)://the-url" "provider": { "name" : "provider-name" } } }
رسائل الفيديو باستخدام link
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "video", "video": { "link": "http(s)://the-url" "provider": { "name" : "provider-name" } } } }
الرسائل النصية:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "text", "text": { "body": "your-message-content" } }
الرسائل التفاعلية (القوائم):
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "interactive", "interactive":{ "type": "list", "header": { "type": "text", "text": "your-header-content-here" }, "body": { "text": "your-text-message-content-here" }, "footer": { "text": "your-footer-content-here" }, "action": { "button": "cta-button-content-here", "sections":[ { "title":"your-section-title-content-here", "rows": [ { "id":"unique-row-identifier-here", "title": "row-title-content-here", "description": "row-description-content-here", } ] }, { "title":"your-section-title-content-here", "rows": [ { "id":"unique-row-identifier-here", "title": "row-title-content-here", "description": "row-description-content-here", } ] }, ... ] } } }
الرسائل التفاعلية (أزرار الرد):
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "interactive", "interactive": { "type": "button", "header": { # optional "type": "text" | "image" | "video" | "document", "text": "your text" # OR "document": { "id": "your-media-id", "filename": "some-file-name" } # OR "document": { "link": "the-provider-name/protocol://the-url", "provider": { "name": "provider-name", }, "filename": "some-file-name" }, # OR "video": { "id": "your-media-id" } # OR "video": { "link": "the-provider-name/protocol://the-url", "provider": { "name": "provider-name" } } # OR "image": { "id": "your-media-id" } # OR "image": { "link": "http(s)://the-url", "provider": { "name": "provider-name" } } }, # end header "body": { "text": "your-text-body-content" }, "footer": { # optional "text": "your-text-footer-content" }, "action": { "buttons": [ { "type": "reply", "reply": { "id": "unique-postback-id", "title": "First Button’s Title" } }, { "type": "reply", "reply": { "id": "unique-postback-id", "title": "Second Button’s Title" } } ] } # end action } # end interactive }
الرسائل التفاعلية (رسائل المنتج الواحد ورسائل المنتجات المتعددة):
{ "recipient_type": "individual", "to" : "{{Recipient-WA-ID}}", "type": "interactive", "interactive": { "type": "product", "body": { "text": "body text" }, "footer": { "text": "footer text" }, "action": { " _id": "catalog-ID", "product_retailer_id": "product-ID" } } }
الرسائل التفاعلية (رسائل المنتجات المتعددة):
{ "recipient_type": "individual", "to" : "whatsapp-id", "type": "interactive", "interactive": { "type": "product_list", "Header":{ "type": "text", "text": "text-header-content" }, "body":{ "text": "text-body-content" }, "footer":{ "text":"text-footer-content" }, "action":{ "catalog_id":"catalog-id", "sections": [ { "title": "section-title", "product_items": [ { "product_retailer_id": "product-SKU-in-catalog" }, { "product_retailer_id": "product-SKU-in-catalog" }, ... ]}, { "title": "the-section-title", "product_items": [ { "product_retailer_id": "product-SKU-in-catalog" } ... ]}, ... ] }, } }
الرسائل التفاعلية (رسائل الكتالوج):
{ "recipient_type": "individual", "to" : "whatsapp-id", "type": "interactive", "interactive": { "type": "catalog_message", "body":{ "text": "text-body-content" }, "footer":{ "text":"text-footer-content" }, "action":{ "name": "catalog_message", "parameters":{ "thumbnail_product_retailer_id": "product-SKU-in-catalog" } }, } }
الرسائل التفاعلية (التدفقات):
{ "recipient_type": "individual", "to": "{{Recipient-WA-ID}}", "type": "interactive", "interactive": { "type": "flow", "header": { "type": "text", "text": "Flow message header" }, "body": { "text": "Flow message body" }, "footer": { "text": "Flow message footer" }, "action": { "name": "flow", "parameters": { "flow_message_version": "3", "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s", "flow_id": "<FLOW_ID>", "flow_cta": "Book!", "flow_action": "navigate", "flow_action_payload": { "screen": "<SCREEN_ID>", "data": { # optional "user_name": "name", "user_age": 25 } } } } } }
فيما يلي مثال على payload
في الاستجابة، ويتم حذف كائنات التعريف وكائنات الأخطاء للاختصار.
{ "messages": [{ "id": "message-id" }] }
في حالة نجاح الطلب، ستتلقى استجابة تحتوي على معرف الرسالة. وإذا قام الطلب بإرجاع القسم errors
، فتحقق من الرسالة الأصلية وقم بتصحيح الأخطاء قبل إعادة إرسال الطلب. لمزيد من المعلومات حول الأخطاء، راجع رموز أخطاء عميل الواجهة داخل المواقع/المرجع في واتساب للأعمال ورموز حالة HTTP.
ينطبق على الأنشطة التجارية في البرازيل وكولومبيا وسنغافورة، بدءًا من 12 سبتمبر 2023. ينطبق على كل الأنشطة التجارية بدءًا من 12 أكتوبر 2023.
إذا تم تعليق الطلب لتقييم الجودة، فستحتوي الاستجابة على خاصية message_status
مع رسالة تشير إلى أنه لم يتم إرسال الرسالة على الفور وسيتم إرسالها أو تحريرها بعد التحقق من الجودة. لن تتواجد هذه الخاصية إذا تم تعليق الرسالة.
{ "messages": [{ "id": "message-id", "message_status": "Message has been held because quality assessment is pending", }] }
يسمح واتساب ببعض التنسيقات في الرسائل. لتنسيق الرسالة بالكامل أو جزء منها، استخدم رموز التنسيقات هذه:
التنسيقات | الرمز | مثال |
---|---|---|
غامق | نجمة (*) | يُساوي مجموعك الإجمالي *10.50 دولارات*. |
مائل | شرطة سفلية (_) | Welcome to _WhatsApp_! |
تلدة (~) | This is ~better~ best! | |
| ثلاثة فواصل عليا مائلة (```) | ```print 'Hello World';``` |
في هذا السياق، يمثل الأداء عدد الرسائل التي يمكن إرسالها في أي ثانية محددة باستخدام عميل الواجهة داخل المواقع/المرجع في واتساب للأعمال. ويعتمد الحد الأقصى للأداء الذي يمكن تحقيقه على مجموعة مختلفة من العوامل، وأهم تلك العوامل هو خيار إعداد العميل وما إذا تم إرسال الرسالة إلى مستخدم جديد أو مستخدم حالي —يستغرق إعداد جلسات التشفير مدة أطول بقليل عند مراسلة مستخدم جديد.
إعداد العميل | الرسائل النصية المدعومة لكل ثانية |
---|---|
قسم واحد | 70 |
أقسام متعددة (32 قسمًا) | 250 |
ملاحظة: يرجى عدم إرسال الرسالة نفسها بشكل متكرر إلى المستلم نفسه الذي يستخدم API واتساب للأعمال.
يمكن أن تكون هناك أسباب متعددة تكمن وراء عدم وصول معدلات الإرسال إلى 100%. تتضمن بعض الحالات الشائعة وصول المستخدمين بشكل متقطع إلى الشبكة أو عدم نشاطهم لفترة من الوقت أو إنشاء تجربة مستخدم عالية الجودة.
الرسائل التي يمكن إرسالها باستخدام واتساب ستتمتع بمعدل إرسال عال جدًا. ومع ذلك، يوجد العديد من الأسباب التي تكمن وراء احتمالية عدم إرسال أية رسالة. ستتمتع بإمكانية الوصول إلى حالة الرسالة بدقة من خلال التحقق من عمليات الاستدعاء لديك. يختلف هذا الأمر عن إرسال الرسائل باستخدام رسالة SMS، فعلى سبيل المثال حيث لا تتمتع بإمكانية الوصول إلى حالة الإرسال النهائية وقد ينتج عن إعادة إرسال الرسالة نتائج مختلفة بالفعل.
قد تظل الرسائل غير مُرسلة نظرًا لأن هاتف المستخدم يكون خارج الخدمة أو البطارية نفدت أو تعرض الهاتف للفقدان وحصل المستخدم على هاتف جديد وقام بتعطيل بطاقة SIM الخاصة به. ومن الممكن ظهور أخطاء في إمكانية عميل النشاط التجاري للاتصال بالشبكة. كما أنه من الممكن عدم إرسال عمليات الاستدعاء (Webhooks). يمكنك التحقق من هذه الحالات من خلال استخدام العقدة health
. ويمكنك تشغيل عمليات استدعاء إيصال الخادم لمعرفة أنه تم إرسال الرسالة إلى سحابة خادم واتساب.
كلما وحينما يعيد المستخدم الاتصال بالشبكة، سيتم إرسال كل الرسائل التي أرسلتها إليه. وسيمثل تلقي أكثر من رسالة واحدة تتضمن المحتوى نفسه تجربة سيئة بالنسبة له. ومن المرجح أنه سيحظرك أو يقدم شكوى. ولكن من المرجح أنه سيتم حظرك.
إذا أرسلت رسالة وتلقيت معرف رسالة من واجهة API، فقد اتخذت الإجراءات اللازمة لإرسال هذه الرسالة. ولا تعيد إرسال المحتوى نفسه إلى المستلم نفسه.
إذا كنت تشهد معدلات إرسال منخفضة على مدار فترة زمنية طويلة، فيرجى تقديم تذكرة دعم من خلال الدعم المباشر.
عند إرسال رسالة بمجرد استرداد معرف الرسالة، يعني ذلك أنه تم تخزين طلب الرسالة في قاعدة البيانات. وسيظل عميل واجهة API واتساب للأعمال يحاول إرسال هذه الرسالة حتى يتم الاعتراف بها من قِبل خادم واتساب. ولا تتضمن هذه العملية أي مخطط زمني للإنهاء. ومن ثمّ، سيحاول خادم واتساب إرسال هذه الرسالة إلى هاتف المستخدم. وإذا لم يكن هاتف المستخدم متصلاً، فسيتم تخزين الرسالة لمدة 30 يومًا قبل تجاهلها من قِبل خادم واتساب.
نعم! يسمح لك واتساب بتنسيق النص المحدد داخل الرسائل باستخدام الخط العريض أو الخط المائل أو يتوسطه خط أو الخط الأحادي.
لا تتوفر أية طريقة حاليًا لمعرفة عدد المستخدمين الذين حظروا نشاطك التجاري أو لتحديدهم. ولكن المؤشر الأفضل هو الاستجابة لعمليات استدعاء الحالة وإذا لم تتلق الحالة delivered
، فمن ثمّ يكون المستخدم قد حظر نشاطك التجاري أو أن المستخدم لا يتمتع باتصال بالشبكة. ولمزيد من التفاصيل، راجع وثائق Webhook.
إذا كان المستخدم قد حظر نشاطك التجاري، فستظل واجهة API جهات الاتصال تقوم بإرجاع رقم الهاتف هذا باعتباره مستخدم واتساب صالح. ومع ذلك، عندما ترسل الرسالة، لن يتم إرسالها أبدًا. وإذا كانت رسالة مدفوعة، فلن يتم تحصيل أي رسوم منك.
لا، لا يتم ضمان أن يكون الترتيب الذي تم به تلقي الرسائل هو الترتيب نفسه المُستخدم عند إرسال الرسائل. وإذا كانت عملية الترتيب تمثل أمرًا مهمًا بالنسبة لحالة استخدامك، فسيكون النهج المُقترح هو الاستجابة للاستدعاء المعروض الخاص بالرسالة الأولى قبل بدء إرسال الرسالة الثانية.
عند استخدام العقدة messages
، تحتاج إلى تعيين العنوان Content-Type
إلى application/json
في عميل واجهة API واتساب للأعمال من أجل تحليل نص الرسالة بشكل مناسب. كما يتوفر عنوان Authorization
الذي يلزم تعيينه ويجب أن يحتوي على رمز وصول غير منتهي الصلاحية. وللحصول على معلومات حول كيفية الحصول على الرمز المميز ووقت انتهاء صلاحيته، راجع وثائق تسجيل الدخول والمصادقة.
قد تتوفر حالات تحتاج فيها إلى المزيد من الوقت لمعالجة أي استعلام وارد من أحد العملاء وقد تتمكّن من تقديم استجابة بعد مرور 24 ساعة. ونوصي بإنشاء قوالب الرسائل من أجل ما يلي:
في الحالتين، يرجى التأكد من تقديم المزيد من السياق في قالب الرسالة قدر الإمكان. فعلى سبيل المثال: