تأكيد الطلبات عبر واتساب (v1)
ابعت كل طلب جديد لـ Otpera. العميل بيستلم رسالة واتساب فيها تفاصيل الطلب واختيار بضغطة واحدة: تأكيد أو تأجيل التوصيل أو إلغاء. Otpera بيسجّل الرد ويبلّغ نظامك على Webhook. كده بتقلّل الشحنات المرتجعة في طلبات الدفع عند الاستلام.
بتستخدم Shopify؟ مش محتاج كود — شوف Shopify.
النقاط
| النقطة | الصلاحية | الغرض |
|---|---|---|
POST /orders | orders:write | إنشاء طلب وإرسال التأكيد |
GET /orders/{id} | orders:read | الطلب بالمنتجات والسجل والرسائل |
POST /orders/{id}/confirmation/resend | orders:write | إعادة إرسال رسالة التأكيد |
إنشاء طلب
| الحقل | مطلوب | ملاحظات |
|---|---|---|
externalId | أيوه | رقم الطلب عندك، فريد لكل source |
source | لأ | api (افتراضي)، shopify، easyorder، vondera، woocommerce، custom |
customer.phone | أيوه | E.164 أو رقم مصري محلي 01XXXXXXXXX |
currency | أيوه | مثلًا EGP |
items[] | أيوه | { name, quantity, unitPrice, variant?, sku? } |
shipping / discount | لأ | بالقروش، الافتراضي 0 |
total | لأ | للمراجعة: لازم يساوي المنتجات + الشحن − الخصم وإلا 422 |
paymentMethod | لأ | مثلًا cod |
shippingAddress | لأ | { line1, line2, city, region, postalCode, country } |
الفلوس بالقروش
unitPrice: 45000 مع EGP يعني ٤٥٠ جنيه.
curl -X POST https://api.otpera.com/api/v1/orders \
-H "Authorization: Bearer $OTPERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1042" \
-d '{
"externalId": "1042",
"customer": { "phone": "01012345678", "name": "منى عادل" },
"currency": "EGP",
"items": [{ "name": "أباجورة مكتب", "quantity": 1, "unitPrice": 45000 }],
"shipping": 5000,
"paymentMethod": "cod"
}'هيدر الرد Otpera-Confirmation بيقولك حصل إيه في رسالة واتساب: sent أو disabled أو no_number أو send_failed أو error.
لو بعت نفس (source, externalId) تاني، بيرجع 200 مع duplicate: true ومن غير رسالة تانية.
حالات التأكيد
| الحالة | المعنى |
|---|---|
pending | مستني رد العميل |
confirmed | العميل أكّد |
cancelled | العميل ألغى |
needs_review | العميل طلب تأجيل أو الرد مش واضح — حد من الفريق يقرر |
expired | مفيش رد في المدة اللي حددتها |
العميل بيرد من استطلاع واتساب بضغطة، أو بكتابة 1 (تأكيد) أو 2 (تأجيل) أو 3 (إلغاء). قراءة الرسالة لوحدها مش تأكيد.
إعادة إرسال التأكيد
POST /orders/{id}/confirmation/resend — بس لو الحالة pending أو needs_review (غير كده 409)، وأقصى ٥ مرات في الساعة للطلب.
استقبال الرد
فعّل حدث order.status_changed من لوحة التحكم ← Webhooks. التفاصيل والتوقيع في Webhooks.