التدفقات
شغّل أتمتة منشئ التدفقات لعميل.
التدفقات هي المحادثات التي تبنيها في منشئ التدفقات: الأسئلة والأزرار والانتظار والشروط والتحويل إلى فريقك. تشغّلها الواجهة البرمجية من أنظمتك وتخبرك كيف انتهت، فيستطيع حدثٌ في متجرك أو نظام CRM أن يفتح محادثة حقيقية.
كيف يعمل: التدفقات والأتمتةاجعل التدفق قابلًا للتشغيل · شغّل تدفقًا لعميل · تابع التشغيل · نماذج واتساب (WhatsApp Flows)
اجعل التدفق قابلًا للتشغيل#
في منشئ التدفقات امنح التدفق مشغّل API / ويب هوك ثم انشره. بعدها يعرضه GET /flows?startable_via_api=true مع startable_via_api: true. أما المسودة أو التدفق بمشغّل آخر (كلمة مفتاحية أو محادثة جديدة…) فيرد بـ flow_not_triggerable.
شغّل تدفقًا لعميل#
{
"to": "+966501234567",
"variables": { "order_id": "10482", "delivery_date": "الخميس" },
"reference": "order-10482"
}- تصبح
variablesمتغيرات التشغيل الأولى: يقرؤها التدفق كـ{{order_id}}، إلى جانب ما يعرفه عن جهة الاتصال (الاسم والحقول المخصصة). referenceمعرّفك الخاص، يعود في التشغيل وفي كل أحداثflow.run.*.- تتبع أول رسالة في التدفق قواعد واتساب: خارج نافذة الـ24 ساعة يجب أن تكون قالبًا معتمدًا، فابدأ التدفقات الموجهة لعملاء لم يراسلوك مؤخرًا بخطوة قالب.
يبدأ التشغيل فورًا، ويوضح الرد موضعه الحالي (غالبًا waiting_input بانتظار رد العميل).
تابع التشغيل#
يعرض GET /flow_runs/{id} حالة التشغيل state والمتغيرات variables التي جمعها حتى الآن: الإجابات واختيارات الأزرار والقيم الواردة من أنظمتك. ويعرض GET /flows/{id}/runs تشغيلات التدفق حسب الحالة أو العميل.
| الحدث | متى |
|---|---|
flow.run.started | بدأ تشغيل (من الواجهة أو مشغّل أو صندوق الوارد) |
flow.run.handed_off | حوّل التدفق العميل إلى فريقك |
flow.run.completed | وصل التشغيل إلى نهايته، وتحمل variables كل ما جمعه |
flow.run.expired | توقف التدفق عن انتظار عميل لم يرد في الوقت المحدد |
مثال تكامل شائع: شغّل تدفق تقييم التوصيل من نظام الطلبات، وعند flow.run.completed احفظ التقييم من variables مع الطلب الذي يحدده reference.
نماذج واتساب (WhatsApp Flows)#
نماذج واتساب هي استمارات تُفتح داخل المحادثة: حجز أو تسجيل أو استبيان. يصلك كل إرسال كحدث flow.response يحمل إجابات العميل answers، ويعرضها GET /flow_responses حسب النموذج (whatsapp_flow_id) أو التاريخ.
نقاط الواجهة
عرض ردود نماذج واتساب
https://api.saei.automize.sa/v1/flow_responses- الصلاحية:
flows:read - لمفاتيح التشغيل فقط
الإجابات التي أرسلها العملاء في نماذج واتساب (Flows) التي تُفتح داخل المحادثة، الأحدث أولًا. يصل كل رد جديد أيضًا كحدث flow.response.
معاملات الاستعلام
limitintegerاختياريعدد العناصر المطلوبة، من 1 إلى 100.
cursorstringاختياريقيمة
next_cursorمن الصفحة السابقة.whatsapp_flow_idstringاختياريالردود على هذا النموذج فقط (معرّف النموذج لدى Meta).
sincestringاختياري
حقول الاستجابة200· صفحة من الردود.
object"list"مطلوبdataarray<FlowResponse>مطلوبالحقول الفرعية (10)
idstringمطلوبobject"flow_response"مطلوبwhatsapp_flow_idstring | nullاختياريflow_namestring | nullاختياريcustomerobjectاختياريالحقول الفرعية (2)
contact_idstring | nullاختياريaddressstring | nullاختياري
campaign_idstring | nullاختياريtemplate_idstring | nullاختياريanswersobjectمطلوبحقول النموذج وما أدخله العميل، بأسماء الحقول المحددة في نموذج واتساب.
file_countintegerاختياريsubmitted_atstring | nullاختياري
has_morebooleanمطلوبnext_cursorstring | nullمطلوب
الأخطاء المحتملة3
- 403test_mode_unsupportedغير متاح في وضع الاختبار
- 422parameter_invalidحقل غير صالح
- 429rate_limitedطلبات كثيرة
جرّبها
curl -X GET https://api.saei.automize.sa/v1/flow_responses \
-H "Authorization: Bearer $API_KEY"صفحة من الردود.
{
"object": "list",
"data": [
{
"id": "fres_77",
"object": "flow_response",
"whatsapp_flow_id": "string",
"flow_name": "string",
"customer": {
"contact_id": "string",
"address": "string"
},
"campaign_id": "string",
"template_id": "string",
"answers": {},
"file_count": 0,
"submitted_at": "2026-10-01T09:30:00Z"
}
],
"has_more": false,
"next_cursor": "string"
}جلب تشغيل تدفق
https://api.saei.automize.sa/v1/flow_runs/{id}- الصلاحية:
flows:read - لمفاتيح التشغيل فقط
موضع عميل واحد داخل التدفق، والمتغيرات التي جمعها التدفق حتى الآن (الإجابات، الاختيارات، القيم الواردة من أنظمتك).
معاملات المسار
idstringمطلوبمعرّف العنصر.
حقول الاستجابة200· التشغيل.
idstringمطلوبobject"flow_run"مطلوبflow_idstringمطلوبcustomerobjectاختياريالحقول الفرعية (2)
contact_idstring | nullاختياريaddressstring | nullاختياري
channelstringاختياريstatestringمطلوبwaiting_inputينتظر رد العميل، وpausedينتظر خطوة تأخير، وhanded_offحُوّل إلى فريقك، وexpiredتوقف عن الانتظار.إحدى القيم
activewaiting_inputpausedhanded_offcompletedexpiredcurrent_stepstring | nullاختياريreferencestring | nullاختياريvariablesobjectاختياريstarted_atstring | nullاختياريcompleted_atstring | nullاختياريupdated_atstring | nullاختياري
الأخطاء المحتملة3
- 403test_mode_unsupportedغير متاح في وضع الاختبار
- 404resource_missingغير موجود
- 429rate_limitedطلبات كثيرة
جرّبها
curl -X GET https://api.saei.automize.sa/v1/flow_runs/id_123 \
-H "Authorization: Bearer $API_KEY"التشغيل.
{
"id": "run_9021",
"object": "flow_run",
"flow_id": "string",
"customer": {
"contact_id": "string",
"address": "string"
},
"channel": "string",
"state": "active",
"current_step": "string",
"reference": "string",
"variables": {},
"started_at": "2026-10-01T09:30:00Z",
"completed_at": "2026-10-01T09:30:00Z",
"updated_at": "2026-10-01T09:30:00Z"
}عرض التدفقات
https://api.saei.automize.sa/v1/flows- الصلاحية:
flows:read - يعمل في وضع الاختبار
تدفقات الأتمتة المبنية في منشئ التدفقات. يحدّد startable_via_api التدفقات المنشورة ذات المشغّل "API / ويب هوك"، والتي يمكن تشغيلها لعميل عبر POST /v1/flows/{id}/runs.
معاملات الاستعلام
limitintegerاختياريعدد العناصر المطلوبة، من 1 إلى 100.
cursorstringاختياريقيمة
next_cursorمن الصفحة السابقة.statusstringاختياريإحدى القيم
draftpublishedarchivedstartable_via_apibooleanاختياريtrueلعرض التدفقات التي يمكن تشغيلها عبر الواجهة فقط.
حقول الاستجابة200· صفحة من التدفقات.
object"list"مطلوبdataarray<Flow>مطلوبالحقول الفرعية (11)
idstringمطلوبobject"flow"مطلوبnamestringمطلوبdescriptionstring | nullاختياريstatusstringمطلوبإحدى القيم
draftpublishedarchivedtriggerstring | nullاختياريما يبدأ التدفق، مثل
webhookأوkeywordأوinbound-messageأوcontact-added.startable_via_apibooleanمطلوبnumber_idstring | nullاختياريpublished_atstring | nullاختياريcreated_atstring | nullاختياريupdated_atstring | nullاختياري
has_morebooleanمطلوبnext_cursorstring | nullمطلوب
الأخطاء المحتملة2
- 422parameter_invalidحقل غير صالح
- 429rate_limitedطلبات كثيرة
جرّبها
curl -X GET https://api.saei.automize.sa/v1/flows \
-H "Authorization: Bearer $API_KEY"صفحة من التدفقات.
{
"object": "list",
"data": [
{
"id": "flow_18",
"object": "flow",
"name": "string",
"description": "string",
"status": "draft",
"trigger": "string",
"startable_via_api": false,
"number_id": "string",
"published_at": "2026-10-01T09:30:00Z",
"created_at": "2026-10-01T09:30:00Z",
"updated_at": "2026-10-01T09:30:00Z"
}
],
"has_more": false,
"next_cursor": "string"
}جلب تدفق
https://api.saei.automize.sa/v1/flows/{id}- الصلاحية:
flows:read - يعمل في وضع الاختبار
معاملات المسار
idstringمطلوبمعرّف العنصر.
حقول الاستجابة200· التدفق.
idstringمطلوبobject"flow"مطلوبnamestringمطلوبdescriptionstring | nullاختياريstatusstringمطلوبإحدى القيم
draftpublishedarchivedtriggerstring | nullاختياريما يبدأ التدفق، مثل
webhookأوkeywordأوinbound-messageأوcontact-added.startable_via_apibooleanمطلوبnumber_idstring | nullاختياريpublished_atstring | nullاختياريcreated_atstring | nullاختياريupdated_atstring | nullاختياري
الأخطاء المحتملة2
- 404resource_missingغير موجود
- 429rate_limitedطلبات كثيرة
جرّبها
curl -X GET https://api.saei.automize.sa/v1/flows/flow_18 \
-H "Authorization: Bearer $API_KEY"التدفق.
{
"id": "flow_18",
"object": "flow",
"name": "متابعة بعد الشراء",
"description": "يسأل العميل عن تجربته بعد 3 أيام من التسليم",
"status": "published",
"trigger": "webhook",
"startable_via_api": true,
"number_id": "num_3",
"published_at": "2026-09-01T08:00:00Z",
"created_at": "2026-08-28T12:00:00Z",
"updated_at": "2026-09-01T08:00:00Z"
}عرض تشغيلات تدفق
https://api.saei.automize.sa/v1/flows/{id}/runs- الصلاحية:
flows:read - لمفاتيح التشغيل فقط
معاملات المسار
idstringمطلوبمعرّف العنصر.
معاملات الاستعلام
limitintegerاختياريعدد العناصر المطلوبة، من 1 إلى 100.
cursorstringاختياريقيمة
next_cursorمن الصفحة السابقة.statestringاختياريإحدى القيم
activewaiting_inputpausedhanded_offcompletedexpiredtostringاختياريتشغيلات هذا العميل فقط (الهاتف بأي صيغة).
حقول الاستجابة200· صفحة من التشغيلات.
object"list"مطلوبdataarray<FlowRun>مطلوبالحقول الفرعية (12)
idstringمطلوبobject"flow_run"مطلوبflow_idstringمطلوبcustomerobjectاختياريالحقول الفرعية (2)
contact_idstring | nullاختياريaddressstring | nullاختياري
channelstringاختياريstatestringمطلوبwaiting_inputينتظر رد العميل، وpausedينتظر خطوة تأخير، وhanded_offحُوّل إلى فريقك، وexpiredتوقف عن الانتظار.إحدى القيم
activewaiting_inputpausedhanded_offcompletedexpiredcurrent_stepstring | nullاختياريreferencestring | nullاختياريvariablesobjectاختياريstarted_atstring | nullاختياريcompleted_atstring | nullاختياريupdated_atstring | nullاختياري
has_morebooleanمطلوبnext_cursorstring | nullمطلوب
الأخطاء المحتملة4
- 403test_mode_unsupportedغير متاح في وضع الاختبار
- 422parameter_invalidحقل غير صالح
- 404resource_missingغير موجود
- 429rate_limitedطلبات كثيرة
جرّبها
curl -X GET https://api.saei.automize.sa/v1/flows/flow_18/runs \
-H "Authorization: Bearer $API_KEY"صفحة من التشغيلات.
{
"object": "list",
"data": [
{
"id": "run_9021",
"object": "flow_run",
"flow_id": "string",
"customer": {
"contact_id": "string",
"address": "string"
},
"channel": "string",
"state": "active",
"current_step": "string",
"reference": "string",
"variables": {},
"started_at": "2026-10-01T09:30:00Z",
"completed_at": "2026-10-01T09:30:00Z",
"updated_at": "2026-10-01T09:30:00Z"
}
],
"has_more": false,
"next_cursor": "string"
}تشغيل تدفق لعميل
https://api.saei.automize.sa/v1/flows/{id}/runs- الصلاحية:
flows:trigger - لمفاتيح التشغيل فقط
- يقبل Idempotency-Key
يشغّل التدفق لعميل واحد الآن تمامًا كما يفعل مشغّل "API / ويب هوك": الخطوات والرسائل والانتظار والتحويل نفسها. تصبح variables متغيرات التشغيل الأولى (يقرؤها التدفق كـ {{name}})، إلى جانب ما يعرفه عن جهة الاتصال. يُؤخذ العميل من to فقط: المفاتيح contact_id وcontact_phone وphone وphone_number وcustomer وكل مفتاح يبدأ بـ _ محجوزة وتُرفض. وreference معرّفك الخاص، يُعاد في التشغيل وفي كل أحداث flow.run.*.
يجب أن يكون التدفق منشورًا ومشغّله "API / ويب هوك" (startable_via_api: true). تتبع أول رسالة فيه قواعد واتساب: خارج نافذة الـ24 ساعة يعني ذلك قالبًا معتمدًا.
معاملات المسار
idstringمطلوبمعرّف العنصر.
الترويسات
Idempotency-Keystringاختياريأي نص فريد (يُفضّل UUID). إعادة الطلب بنفس المفتاح ونفس الجسم تُرجع الاستجابة الأولى بدل التنفيذ مرتين. يُحفظ لمدة 24 ساعة.
جسم الطلب
tostringمطلوبهاتف العميل بأي صيغة.
variablesobjectاختياريreferencestringاختياري
حقول الاستجابة201· التشغيل وقد بدأ بالفعل.
idstringمطلوبobject"flow_run"مطلوبflow_idstringمطلوبcustomerobjectاختياريالحقول الفرعية (2)
contact_idstring | nullاختياريaddressstring | nullاختياري
channelstringاختياريstatestringمطلوبwaiting_inputينتظر رد العميل، وpausedينتظر خطوة تأخير، وhanded_offحُوّل إلى فريقك، وexpiredتوقف عن الانتظار.إحدى القيم
activewaiting_inputpausedhanded_offcompletedexpiredcurrent_stepstring | nullاختياريreferencestring | nullاختياريvariablesobjectاختياريstarted_atstring | nullاختياريcompleted_atstring | nullاختياريupdated_atstring | nullاختياري
الأخطاء المحتملة6
- 403test_mode_unsupportedغير متاح في وضع الاختبار
- 422parameter_missingحقل مفقود
- 422parameter_invalidحقل غير صالح
- 404resource_missingغير موجود
- 422flow_not_triggerableلا يمكن تشغيل التدفق
- 429rate_limitedطلبات كثيرة
جرّبها
curl -X POST https://api.saei.automize.sa/v1/flows/flow_18/runs \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"to": "+966501234567",
"variables": {
"order_id": "10482",
"delivery_date": "الخميس"
},
"reference": "order-10482"
}'التشغيل وقد بدأ بالفعل.
{
"id": "run_9021",
"object": "flow_run",
"flow_id": "flow_18",
"customer": {
"contact_id": "ct_1052",
"address": "+966501234567"
},
"channel": "whatsapp",
"state": "waiting_input",
"current_step": "node_ask_rating",
"reference": "order-10482",
"variables": {
"order_id": "10482",
"delivery_date": "الخميس",
"first_name": "سارة",
"reference": "order-10482"
},
"started_at": "2026-10-01T10:00:00Z",
"completed_at": null,
"updated_at": "2026-10-01T10:00:01Z"
}