Apa Itu Webhook? Cara Aplikasi Saling Memberitahu
Webhook ialah mesej automatik yang dihantar satu perkhidmatan kepada aplikasi anda sebaik sahaja sesuatu berlaku. Apabila pembayaran pelanggan berjaya, Stripe menghantar webhook ke alamat dalam aplikasi anda yang menyatakan “pembayaran berjaya, ini butirannya”, dan aplikasi anda bertindak balas — menandakan pesanan sebagai dibayar, menghantar resit, membuka akaun. Ringkasnya: API ialah aplikasi anda bertanya soalan kepada perkhidmatan lain; webhook ialah perkhidmatan lain memanggil aplikasi anda untuk memberitahu sesuatu.
Mengapa ia penting apabila anda membina dengan AI
Sebaik sahaja aplikasi anda menerima pembayaran, menerima penghantaran borang daripada alat lain, atau menyambung kepada perkhidmatan seperti GitHub, Shopify atau kalendar, anda akan bertemu webhook. Ia biasanya cara yang betul untuk tahu sesuatu telah berlaku — tetapi di sinilah aplikasi yang dibina dengan AI paling kerap tersilap secara halus:
- Titik akhir menerima sebarang permintaan, jadi sesiapa sahaja boleh memalsukan peristiwa “pembayaran berjaya”.
- Aplikasi memberikan akses pada halaman pengalihan daftar keluar, bukan pada webhook, jadi orang yang menutup tab awal tidak pernah mendapat apa yang mereka bayar, dan orang yang menemui URL kejayaan mendapatkannya secara percuma.
- Peristiwa yang sama tiba dua kali dan pelanggan mendapat dua pesanan atau dua e-mel.
Memahami cara webhook berfungsi membolehkan anda meminta perlindungan ini dari awal.
Analogi harian: mesej penghantaran
Anda boleh tahu sama ada bungkusan anda telah sampai dengan dua cara. Anda boleh berjalan ke pintu hadapan setiap sepuluh minit untuk memeriksa (itulah polling — aplikasi anda berulang kali memanggil API untuk bertanya “ada apa-apa baharu?”). Atau kurier boleh menghantar mesej teks apabila bungkusan telah dihantar (itulah webhook).
Mesej teks jelas lebih baik — selagi anda boleh mempercayainya. Jika sesiapa sahaja boleh menghantar mesej “bungkusan dihantar” kepada anda, anda mahu cara untuk tahu ia benar-benar datang daripada kurier. Dan jika telefon anda mati ketika mesej itu tiba, anda mahu kurier mencuba semula kemudian. Dua perkara itu — pengesahan dan cubaan semula — ialah kebanyakan yang menjadikan webhook rumit.
Cara webhook berfungsi, langkah demi langkah
- Anda mencipta titik akhir dalam bahagian belakang aplikasi anda: URL seperti
https://aplikasianda.com/webhooks/stripeyang menerima permintaanPOST. - Anda mendaftarkan URL itu dengan pembekal dan memilih peristiwa yang anda mahu (contohnya “checkout selesai” dan “langganan dibatalkan”).
- Pembekal memberikan rahsia penandatanganan. Anda menyimpannya sebagai rahsia di pelayan anda — lihat pembolehubah persekitaran dan rahsia.
- Satu peristiwa berlaku. Pembekal menghantar permintaan HTTP ke URL anda dengan badan JSON yang menerangkannya, serta pengepala tandatangan.
- Aplikasi anda mengesahkan tandatangan, merekodkan ID peristiwa, membalas dengan kod kejayaan (
200) dengan cepat, dan kemudian melakukan kerjanya. - Jika aplikasi anda tidak membalas dengan kejayaan, banyak pembekal akan mencuba semula kemudian.
Tandatangan
Tandatangan membuktikan permintaan itu datang daripada pembekal dan tidak diubah. Stripe, sebagai contoh, mengira HMAC (sejenis cap jari berkunci) dengan SHA-256 ke atas badan permintaan dan cap masa, menggunakan rahsia penandatanganan, dan menghantarnya dalam pengepala Stripe-Signature. Aplikasi anda membuat pengiraan yang sama dengan salinan rahsianya; jika keputusannya sepadan, permintaan itu tulen. Oleh kerana cap masa juga ditandatangani, anda boleh menolak permintaan lama yang direkodkan seseorang dan dimainkan semula kemudian — pustaka Stripe mempunyai toleransi lalai lima minit, mengikut dokumentasinya setakat September 2026.
Satu perincian praktikal: tandatangan dikira ke atas badan permintaan mentah. Jika rangka kerja anda menghuraikan dan memformat semula JSON sebelum anda mengesahkannya, semakan itu gagal. Ini pepijat yang sangat biasa.
Cubaan semula, pendua dan susunan
Pembekal berbeza, jadi semak dokumentasi setiap satu. Setakat September 2026:
| Kelakuan | Stripe | GitHub |
|---|---|---|
| Cubaan semula automatik | Ya, sehingga tiga hari dengan jurang yang semakin panjang dalam mod langsung | Tidak; anda menghantar semula penghantaran yang gagal secara manual atau melalui skrip |
| Masa respons | Balas dengan 2xx dengan cepat, sebelum sebarang kerja yang perlahan | Penghantaran yang mengambil lebih daripada 10 saat untuk dijawab dikira sebagai gagal |
Dokumentasi Stripe juga menyatakan bahawa peristiwa tidak dijamin tiba mengikut susunan ia berlaku, dan peristiwa yang sama kadangkala boleh tiba lebih daripada sekali, jadi ia mengesyorkan supaya ID peristiwa dijejaki.
Pelajaran umum berlaku untuk mana-mana pembekal: peristiwa boleh tiba lewat, lebih daripada sekali dan tidak mengikut susunan. Pengendali anda sepatutnya idempoten — memproses peristiwa yang sama dua kali memberi kesan yang sama seperti memprosesnya sekali.
Contoh kerja: membuka kursus berbayar
Anda menjual kursus dalam talian. Pelajar mengklik Beli, membayar di halaman checkout yang dihoskan Stripe, dan dihantar kembali ke laman anda.
Cara yang rapuh: halaman “terima kasih” membuka kursus itu. Jika pelajar menutup pelayar semasa pengalihan, mereka sudah membayar tetapi tiada akses. Jika seseorang meneka URL halaman terima kasih itu, mereka mendapat akses tanpa membayar.
Cara webhook:
- Apabila Stripe mengesahkan pembayaran, ia menghantar peristiwa
checkout.session.completedke/webhooks/stripe. - Bahagian belakang anda mengesahkan tandatangan dengan rahsia penandatanganan. Jika gagal, ia membalas
400dan tidak melakukan apa-apa. - Ia menyemak sama ada ID peristiwa itu sudah diproses. Jika ya, ia membalas
200dan berhenti. - Ia menyimpan ID peristiwa, membalas
200, dan kemudian memberikan akses kepada pelajar dan menghantar e-mel alu-aluan. - Halaman terima kasih hanya memaparkan “Pembayaran diterima — kursus anda akan muncul sebentar lagi” dan menyemak status akses pelajar.
Kemudian, jika langganan dibatalkan atau kad gagal, peristiwa webhook lain memberitahu aplikasi anda untuk mengalih keluar atau menggantung akses. Begitulah produk langganan kekal selari dengan pengebilan — lihat apa itu SaaS dan cara menambah pembayaran ke aplikasi anda.
Istilah utama
- Titik akhir (endpoint): URL dalam aplikasi anda yang menerima webhook.
- Peristiwa / muatan (payload): apa yang berlaku, dan data yang menerangkannya (biasanya JSON).
- Rahsia penandatanganan (signing secret): rahsia kongsi yang digunakan untuk mengesahkan tandatangan.
- Idempoten (idempotent): selamat dijalankan lebih daripada sekali dengan hasil yang sama.
- Polling: berulang kali bertanya API untuk perubahan dan bukannya menunggu webhook.
- Terowong (tunnel): alat yang memberi komputer riba URL awam sementara supaya webhook boleh sampai kepadanya semasa pembangunan.
Kesilapan dan salah faham biasa
- Tidak mengesahkan tandatangan. URL titik akhir bukan rahsia. Pengesahanlah yang menjadikan permintaan itu boleh dipercayai.
- Melakukan kerja yang perlahan sebelum membalas. Menghantar e-mel atau menjana PDF sebelum memberi respons boleh menyebabkan tamat masa, yang mencetuskan cubaan semula, yang menyebabkan pendua.
- Menganggap tepat sekali, mengikut susunan. Rekod ID peristiwa dan jangan bergantung pada susunan ketibaan.
- Menggunakan URL pratonton. Webhook memerlukan alamat awam yang stabil. Pratonton peribadi dan
localhosttidak boleh dicapai dari internet; gunakan URL yang diterbitkan anda (atau terowong semasa menguji). - Mencampurkan rahsia ujian dan langsung. Pembekal selalunya mengeluarkan rahsia penandatanganan yang berbeza untuk mod ujian dan mod langsung. Simpan kedua-duanya dan gunakan yang betul.
- Mempercayai muatan secara membuta tuli untuk keputusan penting. Untuk tindakan berisiko tinggi, adalah munasabah untuk mendapatkan keadaan terkini daripada API pembekal selepas menerima peristiwa itu.
Apa yang patut diminta daripada pembina AI anda
Tambah titik akhir
POST /webhooks/stripedi pelayan. Sahkan tandatangan Stripe menggunakan badan permintaan mentah dan rahsiaSTRIPE_WEBHOOK_SECRET. Tolak tandatangan tidak sah dengan 400. Simpan setiap ID peristiwa dan langkau peristiwa yang sudah diproses. Balas 200 dengan cepat, kemudian kendalikancheckout.session.completeddengan menandakan pesanan sebagai dibayar dan menghantar resit. Log jenis peristiwa. Jangan beri akses daripada halaman kejayaan checkout.
Kemudian uji: hantar peristiwa ujian dari papan pemuka pembekal, hantar peristiwa yang sama sekali lagi, dan hantar permintaan dengan tandatangan yang salah. Hanya yang pertama patut mengubah apa-apa.
Webhook dalam Mythex
Mythex tidak menjalankan perkhidmatan webhook berasingan; anda meminta ejen menambah titik akhir webhook dalam bahagian belakang aplikasi anda sendiri, dan menunjuk pembekal ke URL yang diterbitkan anda, kerana webhook memerlukan alamat awam. Rahsia penandatanganan dimasukkan ke dalam rahsia projek anda, dan jika anda menukarnya pada aplikasi langsung, anda perlu menerbitkan semula. Resipi dokumentasi tentang mengendalikan webhook mempunyai prompt permulaan, dan templat kedai ialah titik permulaan yang baik untuk aplikasi yang menerima pembayaran.
Soalan lazim
Apakah webhook dalam istilah mudah?
Webhook ialah mesej automatik yang dihantar satu perkhidmatan ke alamat web dalam aplikasi anda apabila sesuatu berlaku, seperti pembayaran berjaya atau borang dihantar. Daripada aplikasi anda bertanya berulang kali sama ada ada perubahan, perkhidmatan lain yang memberitahunya.
Apakah perbezaan antara webhook dan API?
Dengan panggilan API, aplikasi anda bertanya sesuatu kepada perkhidmatan lain dan mendapat jawapan. Dengan webhook, perkhidmatan lain memanggil aplikasi anda apabila sesuatu peristiwa berlaku. Banyak integrasi menggunakan kedua-duanya: webhook untuk mengetahui peristiwa, panggilan API untuk mendapatkan butiran atau mengambil tindakan.
Adakah webhook selamat?
Ia boleh selamat, jika anda mengesahkannya. Pembekal yang baik menandatangani setiap webhook dengan rahsia yang hanya dikongsi dengan anda, dan aplikasi anda sepatutnya menolak sebarang permintaan yang tandatangannya tidak sepadan. Tanpa semakan itu, sesiapa yang menemui URL tersebut boleh menghantar peristiwa palsu.
Apa yang berlaku jika aplikasi saya tidak aktif ketika webhook dihantar?
Ia bergantung pada pembekal. Stripe, sebagai contoh, mencuba semula penghantaran yang gagal sehingga tiga hari dalam mod langsung, manakala GitHub tidak mencuba semula secara automatik dan mengharapkan anda menghantar semula. Semak dokumentasi setiap pembekal, dan reka pengendali anda supaya ia mengendalikan peristiwa lewat atau berulang.