دليل API

مسودات قوالب واتساب

أنشئ مسودات بهيكل Meta وفحوص مسبقة، ثم سجّل نتيجة الموافقة الحقيقية للقياس والاسترداد المستحق.

POST/whatsapp-template-drafts

مسودة قالب خدمة للطلب

تتطلب قوالب UTILITY سياق إجراء محدداً بدأه العميل، مع أمثلة حقيقية لكل متغير.

curl --request POST \
  --url https://www.lahjty.com/api/v1/whatsapp-template-drafts \
  --header "Authorization: Bearer $LAHJTY_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: template-order-shipped-1851" \
  --data '{
  "name": "order_shipped",
  "category": "UTILITY",
  "output_language": "ar",
  "language_code": "ar",
  "market": "SA",
  "dialect": "saudi",
  "purpose": "Tell a customer that their order has shipped",
  "customer_action_context": "The recipient placed the referenced order",
  "variables": [
    {
      "name": "customer_name",
      "example": "نورة"
    },
    {
      "name": "order_number",
      "example": "A-1842"
    },
    {
      "name": "delivery_date",
      "example": "الخميس"
    }
  ],
  "header": "TEXT",
  "footer": true,
  "buttons": [
    {
      "type": "QUICK_REPLY",
      "text": "تواصل معنا"
    }
  ],
  "external_customer_id": "merchant-91"
}'

Example response

response.json
{
  "id": "wtd_01jexample",
  "object": "whatsapp_template_draft",
  "request_id": "req_01jexample",
  "status": "UNSUBMITTED",
  "output_language": "ar",
  "market": "SA",
  "dialect": "saudi",
  "meta_payload": {
    "name": "order_shipped",
    "language": "ar",
    "category": "UTILITY",
    "components": [
      {
        "type": "HEADER",
        "format": "TEXT",
        "text": "تحديث طلبك"
      },
      {
        "type": "BODY",
        "text": "هلا {{1}}، تم شحن طلبك رقم {{2}} ومتوقع يوصل {{3}}.",
        "example": {
          "body_text": [
            [
              "نورة",
              "A-1842",
              "الخميس"
            ]
          ]
        }
      }
    ]
  },
  "payload_hash": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
  "compliance": {
    "ready_for_submission": true,
    "findings": [],
    "final_decision_owner": "META"
  },
  "usage": {
    "credits_used": 2,
    "balance_after": 474
  }
}
POST/whatsapp-template-drafts

مسودة قالب تسويقي إنجليزي

الإنجليزية مدعومة. أرسل opt_in_context واضحاً ولا ترسل dialect.

curl --request POST \
  --url https://www.lahjty.com/api/v1/whatsapp-template-drafts \
  --header "Authorization: Bearer $LAHJTY_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: template-marketing-en-1852" \
  --data '{
  "name": "weekend_coffee_offer",
  "category": "MARKETING",
  "output_language": "en",
  "language_code": "en_GB",
  "market": "AE",
  "purpose": "Offer opted-in customers 20% off a coffee subscription this weekend",
  "opt_in_context": "Recipients opted in to WhatsApp promotions during checkout",
  "variables": [
    {
      "name": "first_name",
      "example": "Maya"
    }
  ],
  "header": "TEXT",
  "footer": true,
  "buttons": [
    {
      "type": "URL",
      "text": "View offer",
      "url": "https://merchant.example/offers/weekend"
    }
  ],
  "external_customer_id": "merchant-91"
}'

أرسل عبر مزودك

  1. خزّن draft id وmeta_payload وpayload_hash.
  2. أرسل meta_payload عبر تكامل مزود واتساب الخاص بمنصتك.
  3. سجّل كل تغير في حالة Meta مع provider_event_id فريد.
POST/whatsapp-template-drafts/wtd_01jexample/outcomes

سجّل نتيجة Meta

أرسل تجزئة الحمولة المقدمة فعلياً. يصبح الرفض غير المعدّل مرشحاً للاسترداد، لكن التسجيل وحده لا يمنح عملات؛ يجب أن تتحقق Lahjty أولاً من دليل Meta أو المزود.

curl --request POST \
  --url https://www.lahjty.com/api/v1/whatsapp-template-drafts/wtd_01jexample/outcomes \
  --header "Authorization: Bearer $LAHJTY_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: template-outcome-meta-event-3001" \
  --data '{
  "outcome": "REJECTED",
  "meta_template_id": "123456789012345",
  "provider_event_id": "provider-meta-event-3001",
  "submitted_payload_hash": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
  "category": "UTILITY",
  "reason": "Meta rejection reason",
  "occurred_at": "2026-09-04T09:30:00Z"
}'

Example response

response.json
{
  "object": "whatsapp_template_outcome",
  "draft_id": "wtd_01jexample",
  "outcome": "REJECTED",
  "unchanged": true,
  "category": "UTILITY",
  "refund": {
    "candidate": true,
    "eligible": false,
    "status": "PENDING_VERIFICATION",
    "credits": 2,
    "balance_after": null,
    "verification_required": true
  }
}

ما الذي يجب قياسه

نفّذ تجارب معدل الموافقة حسب التصنيف واللغة والسوق وما إذا عدّل التاجر المسودة. قارن المسودات المولدة بعينات كتبها البشر. لا تخلط معدل الموافقة مع تكرار استخدام نصوص الحملات؛ فهما يجيبان عن سؤالين مختلفين.