وبهوکها
هر پاسخ را همان لحظهای که میرسد، به شکل JSON به نشانی دلخواه خودتان بفرستید.
یک POST برای هر پاسخ
بهمحض ذخیره شدن پاسخ فرستاده میشود، بدون آنکه پاسخدهنده منتظر بماند.
یک ساختار JSON پایدار
نامهای عمومی نوعها و شناسههای دائمی فیلدها، پس تغییر نام یک پرسش هرگز کد شما را خراب نمیکند.
ده ثانیه، یک تلاش
Fillio ده ثانیه منتظر اندپوینت شما میماند و بعد از آن دوباره تلاش نمیکند.
روشن کردن وبهوک
فرم را باز کنید، به تب «تنظیمات» بروید و «وبهوک» را روشن کنید. نشانیای را که باید پاسخها را دریافت کند بچسبانید؛ Fillio کمی بعد از آنکه دست از تایپ برداشتید آن را ذخیره میکند و روی صفحه تأییدش میکند. هر فرم یک نشانی دارد و خاموش کردن دوبارهٔ کلید آن را پاک میکند.
نشانی باید HTTPS باشد
Fillio فقط نشانیهایی را صدا میزند که با https:// شروع میشوند. نشانی http:// در فیلد تنظیمات پذیرفته میشود اما هرگز صدا زده نمیشود، پس وبهوکی که به نظر ذخیرهشده میآید در سکوت هیچچیز تحویل نمیدهد.
نشانیهایی که به درون یک شبکهٔ خصوصی اشاره میکنند هم رد میشوند: هر میزبانی روی 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 | فقط روی پرسشهای گزینهدار: شناسه و متن هر گزینه، تا بتوانید یک پاسخ را دوباره به برچسبش تبدیل کنید. |
فقط پرسشهای پاسخدادهشده میرسند
پرسشی که پاسخدهنده دست به آن نزده، بهجای اینکه با مقدار خالی فرستاده شود اصلاً در آرایه نیست، و پرسشی که منطق شرطی پنهانش کرده هرگز ظاهر نمیشود. هر پاسخ را با key خودش پیدا کنید، نه با تکیه بر جایگاه یا بر تعداد ثابتی از ورودیها.
پاسخهای گزینهای شناسه دارند، نه برچسب
پاسخ یک پرسش کشویی یا چندگزینهای، شناسهٔ گزینهٔ انتخابشده است، و پاسخ چکباکس، چندانتخابی یا رتبهبندی، آرایهای از شناسهٔ گزینههاست. آنها را با فهرست options در همان ورودی تطبیق بدهید. پاسخ رتبهبندی ترتیبی را که پاسخدهنده چیده نگه میدارد.
گزینهٔ «سایر»
وقتی پاسخدهنده در کادر «سایر» چیزی مینویسد، مقدار دیگر شناسهٔ گزینه نیست بلکه متن __OTHER__: است و پس از آن چیزی که نوشته. برای خواندن پاسخ، این پیشوند را جدا کنید.
"value": "__OTHER__:Heard about it from a friend"فایلها و امضاها
پاسخ بارگذاری فایل، لینک دانلود آن فایل در فضای ذخیرهسازی Fillio است. پاسخ امضا یک data URL از نوع 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 | امضا | یک data URL از نوع PNG در قالب base64 |
اگر اندپوینت شما جواب ندهد
Fillio ده ثانیه صبر میکند. تمام شدن مهلت، خطای اتصال یا هر وضعیتی بیرون از بازهٔ 2xx یعنی تحویل ناموفق، و کار همانجا تمام است: نه تلاش دوبارهای در کار است و نه صفی که بشود از آن بازپخش کرد.
خودِ پاسخ هرگز آسیب نمیبیند. پیش از فرستادن درخواست ذخیره میشود و هر بلایی که سر اندپوینت شما بیاید در داشبورد باقی میماند، پس حتی اگر تحویلی از دست برود، داشبورد همچنان سند کامل ماجراست.
امضایی در کار نیست
Fillio درخواست را امضا نمیکند و هیچ کلید مشترکی نمیفرستد، پس بدنه بهتنهایی ثابت نمیکند از کجا آمده است. اگر اندپوینت شما باید مطمئن باشد، نشانیای به آن بدهید که فقط خودتان میدانید: یک مسیر یا کوئری بلند و حدسناپذیر. هر چیزی را که جای دیگری میرسد نامعتبر بدانید.
هر تحویل شناسهٔ رویداد خودش را دارد، هم در هدر X-Fillio-Event-Id و هم در بدنه. سادهترین راه برای اینکه صدا زدن دوبارهٔ اندپوینتتان بیخطر باشد، ثبت کردن شناسههایی است که قبلاً پردازش کردهاید.
وبهوک را به هر سرویسی که درخواستها را نشان میدهد وصل کنید و یک بار فرم خودتان را پر کنید. دقیقاً همان بستهای را که فرم شما تولید میکند، با شناسههای فیلد خودتان، میبینید. این سریعترین راه برای نوشتن نگاشت در سمت خودتان است.