Webhook
Hantar setiap penghantaran ke alamat anda sendiri, sebagai JSON, sebaik ia tiba.
Satu POST bagi setiap respons
Dihantar sebaik jawapan disimpan, tanpa membuatkan responden menunggu.
Bentuk JSON yang stabil
Nama jenis awam dan ID medan yang kekal, jadi menamakan semula soalan tidak akan merosakkan kod anda.
10 saat, satu cubaan
Fillio menunggu sepuluh saat untuk titik akhir anda dan tidak mencuba lagi selepas itu.
Menghidupkan webhook
Buka borang, pergi ke tab Tetapan dan hidupkan Webhook. Tampal alamat yang sepatutnya menerima penghantaran; Fillio menyimpannya sesaat selepas anda berhenti menaip dan mengesahkannya pada skrin. Setiap borang membawa satu alamat, dan mematikan semula suis itu akan mengosongkannya.
Alamat mesti HTTPS
Fillio hanya memanggil alamat yang bermula dengan https://. Alamat http:// diterima oleh medan tetapan tetapi tidak pernah dipanggil, jadi webhook yang kelihatan tersimpan sebenarnya tidak menghantar apa-apa.
Alamat yang menghala ke dalam rangkaian persendirian turut ditolak: mana-mana hos pada 10.x, 127.x, 169.254.x, 172.16-31.x atau 192.168.x, mana-mana alamat IPv6, dan mana-mana nama yang localhost atau berakhir dengan .local atau .internal. Titik akhir anda mesti boleh dicapai daripada internet awam.
Permintaan
Satu POST dengan badan JSON. Empat header disertakan bersamanya.
| Header | Penerangan |
|---|---|
| Content-Type: application/json | Badan permintaan sentiasa JSON. |
| User-Agent: Fillio Webhooks/1.0 | Mengenal pasti pemanggil sebagai Fillio, berguna apabila satu titik akhir mendengar beberapa perkhidmatan sekali gus. |
| X-Fillio-Event: FORM_RESPONSE | Nama peristiwa. FORM_RESPONSE ialah satu-satunya nilai yang dihantar Fillio hari ini. |
| X-Fillio-Event-Id | UUID baharu untuk penghantaran ini, diulang sebagai eventId dalam badan permintaan. |
Muatan
Satu sampul yang menerangkan peristiwa, dan satu objek data yang menerangkan respons.
{
"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
}
]
}
}| Sifat | Penerangan |
|---|---|
| eventId | ID unik untuk penghantaran ini. |
| eventType | Sentiasa FORM_RESPONSE. |
| createdAt | Masa respons dihantar, sebagai cap masa ISO 8601 dalam UTC. |
| data.responseId | ID respons yang disimpan. |
| data.formId | ID borang, sama seperti yang muncul dalam pautan awamnya. |
| data.formName | Tajuk borang sebagai teks biasa, dengan sebarang pemformatan dibuang. |
| data.fields | Satu entri bagi setiap soalan yang dijawab. |
Di dalam fields
Setiap entri membawa empat sifat, dan soalan yang mempunyai pilihan membawa sifat kelima.
| Sifat | Penerangan |
|---|---|
| key | ID kekal soalan itu. Ia bertahan melalui setiap suntingan pada ayatnya, jadi padankan dengan ID ini dan bukan dengan labelnya. |
| label | Soalan seperti yang ditulis dalam editor. |
| type | Jenis soalan, diambil daripada senarai di bawah. |
| value | Jawapan, dalam bentuk yang disimpan oleh soalan itu. |
| options | Hanya pada soalan yang mempunyai pilihan: ID dan teks setiap pilihan, supaya anda boleh menukar jawapan kembali kepada labelnya. |
Hanya soalan yang dijawab akan tiba
Soalan yang tidak disentuh oleh responden tidak hadir dalam tatasusunan itu dan bukannya dihantar sebagai nilai kosong, manakala soalan yang disembunyikan oleh logik bersyarat langsung tidak muncul. Cari setiap jawapan menerusi key-nya dan jangan bergantung pada kedudukan atau pada bilangan entri yang tetap.
Jawapan pilihan membawa ID, bukan label
Jawapan senarai lungsur atau pilihan berganda ialah ID pilihan yang dipilih, manakala jawapan kotak semak, pilihan berbilang atau kedudukan ialah tatasusunan ID pilihan. Rujuk semula ID itu pada senarai options dalam entri yang sama. Jawapan kedudukan mengekalkan susunan yang ditetapkan oleh responden.
Pilihan Lain-lain
Apabila responden menulis dalam kotak Lain-lain, nilainya bukan ID pilihan tetapi teks __OTHER__: diikuti apa yang mereka taip. Buang awalan itu untuk membaca jawapannya.
"value": "__OTHER__:Heard about it from a friend"Fail dan tandatangan
Jawapan muat naik fail ialah pautan muat turun ke fail itu dalam storan Fillio. Jawapan tandatangan pula ialah URL data PNG base64, yang boleh anda simpan atau paparkan terus.
Jenis medan
Jenis ialah nama awam yang stabil, jadi perubahan di dalam Fillio tidak pernah sampai ke integrasi anda. Apa-apa yang tidak dapat dipetakan oleh Fillio akan tiba sebagai INPUT_TEXT.
| Jenis | Soalan | Nilai |
|---|---|---|
| INPUT_TEXT | Jawapan Pendek | Teks |
| TEXTAREA | Jawapan Panjang | Teks |
| INPUT_EMAIL | E-mel | Teks |
| INPUT_PHONE_NUMBER | Nombor Telefon | Teks |
| INPUT_NUMBER | Nombor | Nombor sebagai teks, tepat seperti yang ditaip |
| INPUT_LINK | Pautan | Teks |
| INPUT_DATE | Tarikh | Tarikh, dalam bentuk YYYY-MM-DD |
| INPUT_TIME | Masa | Masa, dalam bentuk HH:MM pada jam 24 jam |
| DROPDOWN | Senarai Juntai | Satu ID pilihan |
| MULTIPLE_CHOICE | Radio | Satu ID pilihan |
| CHECKBOXES | Kotak Semak | Tatasusunan ID pilihan |
| MULTI_SELECT | Pilihan Berbilang | Tatasusunan ID pilihan |
| RATING | Penilaian Bintang | Satu nombor |
| LINEAR_SCALE | Skala Linear | Satu nombor |
| RANKING | Kedudukan | Tatasusunan ID pilihan, mengikut susunan responden |
| FILE_UPLOAD | Muat Naik Fail | Pautan muat turun |
| SIGNATURE | Tandatangan | URL data PNG base64 |
Jika titik akhir anda tidak menjawab
Fillio menunggu sepuluh saat. Tamat masa, ralat sambungan atau sebarang status di luar julat 2xx dikira sebagai penghantaran yang gagal, dan di situlah ia berakhir: tiada cubaan semula dan tiada baris gilir untuk dimainkan semula.
Respons itu sendiri tidak sekali-kali terjejas. Ia disimpan sebelum permintaan dibuat dan kekal dalam papan pemuka anda apa pun yang berlaku pada titik akhir anda, jadi papan pemuka kekal menjadi rekod yang lengkap walaupun satu penghantaran hilang.
Tiada tandatangan
Fillio tidak menandatangani permintaan dan tidak menghantar sebarang rahsia kongsi, jadi badan permintaan itu sendiri tidak membuktikan asalnya. Jika titik akhir anda perlu pasti, berikannya alamat yang hanya anda tahu: laluan atau rentetan pertanyaan yang panjang dan sukar diteka. Anggap apa-apa yang tiba di tempat lain sebagai tidak dipercayai.
Setiap penghantaran membawa ID peristiwanya sendiri, dalam header X-Fillio-Event-Id dan juga dalam badan permintaan. Merekodkan ID yang telah anda kendalikan ialah cara paling mudah untuk memastikan titik akhir anda selamat dipanggil dua kali.
Halakan webhook ke mana-mana titik akhir pemeriksa permintaan dan hantar borang anda sendiri sekali. Anda akan melihat muatan tepat yang dihasilkan borang anda, lengkap dengan ID medan anda sendiri. Itulah cara terpantas untuk menulis pemetaan di pihak anda.