Webhooks
أرسل كل رد إلى عنوان تملكه، بصيغة JSON، لحظة وصوله.
طلب POST واحد لكل رد
يُرسل فور تخزين الإجابة، دون إبقاء المستجيب في الانتظار.
بنية JSON ثابتة
أسماء أنواع عامة ومعرّفات حقول دائمة، فإعادة تسمية سؤال لا تعطّل كودك أبدًا.
عشر ثوانٍ، ومحاولة واحدة
ينتظر Fillio نقطة النهاية عشر ثوانٍ ولا يعيد المحاولة بعدها.
تفعيل Webhook
افتح النموذج، وانتقل إلى تبويب الإعدادات وفعّل Webhook. الصق العنوان الذي يجب أن يستقبل الردود؛ يحفظه Fillio بعد لحظة من توقفك عن الكتابة ويؤكد ذلك على الشاشة. ولكل نموذج عنوان واحد، وإيقاف المفتاح يمسحه.
يجب أن يكون العنوان HTTPS
لا يستدعي Fillio إلا العناوين التي تبدأ بـ https://. أما عنوان http:// فيقبله حقل الإعدادات لكنه لا يُستدعى أبدًا، فيبدو عنوان webhook محفوظًا بينما لا يُسلّم شيئًا في الواقع.
وتُرفض كذلك العناوين التي تشير إلى داخل شبكة خاصة: أي مضيف على 10.x أو 127.x أو 169.254.x أو 172.16-31.x أو 192.168.x، وأي عنوان IPv6، وأي اسم هو localhost أو ينتهي بـ .local أو .internal. فيجب أن تكون نقطة النهاية قابلة للوصول من الإنترنت العام.
الطلب
طلب POST بجسم JSON. وترافقه أربع ترويسات.
| الترويسة | الوصف |
|---|---|
| Content-Type: application/json | الجسم دائمًا بصيغة JSON. |
| User-Agent: Fillio Webhooks/1.0 | يعرّف المُستدعي بأنه Fillio، وهو مفيد حين تستمع نقطة نهاية واحدة إلى عدة خدمات. |
| X-Fillio-Event: FORM_RESPONSE | اسم الحدث. وFORM_RESPONSE هي القيمة الوحيدة التي يرسلها Fillio اليوم. |
| X-Fillio-Event-Id | معرّف UUID جديد لهذا التسليم، يتكرر باسم eventId داخل الجسم. |
الحمولة
غلاف يصف الحدث، وكائن data يصف الرد.
{
"eventId": "8f2c1d7a-4b09-4e5c-9a13-6d0f8b2e77c4",
"eventType": "FORM_RESPONSE",
"createdAt": "2026-08-26T09:14:22.481Z",
"data": {
"responseId": "Qh3Rk9wZm1sVtY7cN2xP",
"formId": "7bTn4Kq2Wx",
"formName": "Workshop signup",
"createdAt": "2026-08-26T09:14:22.481Z",
"fields": [
{
"key": "V1StGXR8_Z5jdHi6B-myT",
"label": "Full name",
"type": "INPUT_TEXT",
"value": "Mira Kaya"
},
{
"key": "kM4pQz7LxAe2Rn0BsTvUw",
"label": "Which session?",
"type": "MULTIPLE_CHOICE",
"value": "c9XbNf3JdQ",
"options": [
{ "id": "c9XbNf3JdQ", "text": "Morning" },
{ "id": "eR2mYt8KpL", "text": "Afternoon" }
]
},
{
"key": "zA6cWn1FyH4tXd9QrLbEs",
"label": "How likely are you to recommend us?",
"type": "LINEAR_SCALE",
"value": 9
}
]
}
}| الخاصية | الوصف |
|---|---|
| eventId | معرّف فريد لهذا التسليم. |
| eventType | دائمًا FORM_RESPONSE. |
| createdAt | وقت إرسال الرد، كطابع زمني ISO 8601 بتوقيت UTC. |
| data.responseId | معرّف الرد المخزَّن. |
| data.formId | معرّف النموذج، نفسه الذي يظهر في رابطه العام. |
| data.formName | عنوان النموذج كنص عادي، بعد إزالة أي تنسيق. |
| data.fields | مدخلة واحدة لكل سؤال أُجيب عنه. |
داخل fields
تحمل كل مدخلة أربع خصائص، ويحمل السؤال ذو الخيارات خاصية خامسة.
| الخاصية | الوصف |
|---|---|
| key | معرّف السؤال الدائم. يبقى كما هو بعد كل تعديل على الصياغة، فطابِق عليه بدل التسمية. |
| label | السؤال كما كُتب في المحرر. |
| type | نوع السؤال، مأخوذ من القائمة أدناه. |
| value | الإجابة، بالشكل الذي يخزّنه ذلك السؤال. |
| options | في الأسئلة ذات الخيارات فقط: معرّف كل خيار ونصه، لتتمكن من تحويل الإجابة إلى تسمية. |
لا تصل إلا الأسئلة المُجاب عنها
السؤال الذي تركه المستجيب دون إجابة يغيب عن المصفوفة بدل أن يُرسل بقيمة فارغة، والسؤال الذي أخفاه المنطق الشرطي لا يظهر إطلاقًا. فابحث عن كل إجابة بمفتاحها بدل الاعتماد على الموضع أو على عدد ثابت من المدخلات.
إجابات الاختيار تحمل معرّفات لا تسميات
إجابة القائمة المنسدلة أو الاختيار من متعدد هي معرّف الخيار المحدد، وإجابة مربعات التحديد أو الاختيار المتعدد أو الترتيب هي مصفوفة من معرّفات الخيارات. حلّها مقابل قائمة options في المدخلة نفسها. وتحتفظ إجابة الترتيب بالترتيب الذي وضع المستجيب العناصر فيه.
خيار أخرى
حين يكتب المستجيب في مربع أخرى، لا تكون القيمة معرّف خيار بل النص __OTHER__: متبوعًا بما كتبه. أزل هذه البادئة لقراءة الإجابة.
"value": "__OTHER__:Heard about it from a friend"الملفات والتواقيع
إجابة رفع الملف هي رابط تنزيل للملف في تخزين Fillio. وإجابة التوقيع هي عنوان بيانات PNG بترميز base64، يمكنك حفظه أو عرضه مباشرة.
أنواع الحقول
النوع اسم عام ثابت، فأي تغيير داخل Fillio لا يصل إلى تكاملك. وأي شيء يعجز Fillio عن مطابقته يصل بالنوع INPUT_TEXT.
| النوع | السؤال | القيمة |
|---|---|---|
| INPUT_TEXT | إجابة قصيرة | نص |
| TEXTAREA | إجابة طويلة | نص |
| INPUT_EMAIL | بريد إلكتروني | نص |
| INPUT_PHONE_NUMBER | رقم الهاتف | نص |
| INPUT_NUMBER | رقم | الرقم كنص، تمامًا كما كُتب |
| INPUT_LINK | رابط | نص |
| INPUT_DATE | تاريخ | تاريخ بصيغة YYYY-MM-DD |
| INPUT_TIME | وقت | وقت بصيغة HH:MM على مدار 24 ساعة |
| DROPDOWN | قائمة منسدلة | معرّف خيار واحد |
| MULTIPLE_CHOICE | زر اختيار | معرّف خيار واحد |
| CHECKBOXES | مربع تحديد | مصفوفة من معرّفات الخيارات |
| MULTI_SELECT | اختيار متعدد | مصفوفة من معرّفات الخيارات |
| RATING | تقييم بالنجوم | رقم |
| LINEAR_SCALE | مقياس خطي | رقم |
| RANKING | ترتيب | مصفوفة من معرّفات الخيارات، بترتيب المستجيب |
| FILE_UPLOAD | رفع ملف | رابط تنزيل |
| SIGNATURE | توقيع | عنوان بيانات PNG بترميز base64 |
إذا لم تستجب نقطة النهاية
ينتظر Fillio عشر ثوانٍ. وانتهاء المهلة أو خطأ الاتصال أو أي حالة خارج النطاق 2xx يُعدّ تسليمًا فاشلًا، وهذه هي النهاية: لا إعادة محاولة ولا طابور يُعاد التشغيل منه.
أما الرد نفسه فلا يتأثر إطلاقًا. فهو يُخزَّن قبل إرسال الطلب ويبقى في لوحة تحكمك مهما فعلت نقطة النهاية، لتظل اللوحة سجلًا كاملًا حتى لو ضاع تسليم.
لا يوجد توقيع
لا يوقّع Fillio الطلب ولا يرسل أي سر مشترك، فالجسم وحده لا يثبت مصدره. وإن كان لا بد أن تتيقن نقطة نهايتك، فامنحها عنوانًا تعرفه أنت وحدك: مسارًا أو سلسلة استعلام طويلة يصعب تخمينها. وعامل أي شيء يصل إلى مكان آخر على أنه غير موثوق.
يحمل كل تسليم معرّف حدث خاصًا به، في ترويسة X-Fillio-Event-Id وفي الجسم معًا. وتسجيل ما عالجته من هذه المعرّفات هو أبسط طريقة لجعل نقطة نهايتك آمنة عند استدعائها مرتين.
وجّه عنوان webhook إلى أي نقطة نهاية لفحص الطلبات وأرسل نموذجك مرة واحدة. سترى الحمولة الفعلية التي ينتجها نموذجك، بمعرّفات حقولك أنت. وهي أسرع طريقة لكتابة الربط من جهتك.