Setiap sistem webhook di dunia mengirim sekurang-kurangnya sekali, dan semua orang terkejut pada kali pertama. Peristiwanya datang dua kali, pelanggannya dikirimi pesan dua kali, dan laporan kerusakannya menyebut webhook-nya rusak. Ia tidak rusak: ia melakukan persis apa yang dijanjikannya.
Mengapa pengulangan itu lumrah
- Penanganan Anda lambat, jadi pengirimnya menyerah menunggu dan mencoba lagi.
- Penanganan Anda menjawab 500 setelah pekerjaannya selesai.
- Sambungannya putus setelah Anda menjawab tapi sebelum jawabannya tiba.
- Sebuah peluncuran memulai ulang prosesnya di tengah permintaan.
Hanya satu dari itu yang merupakan kerusakan di kode Anda, dan keempatnya menghasilkan salinan ganda.
Perbaikannya adalah sebuah kekangan keunikan
CREATE TABLE handled ( event_id TEXT PRIMARY KEY, handled_at TIMESTAMPTZ NOT NULL DEFAULT now() );
Sisipkan sebelum bertindak. Kalau penyisipannya berbenturan, berarti sudah ada yang menanganinya dan Anda selesai. Ini selamat dari mulai ulang di tengah jalan yang tidak dilewati himpunan di memori, dan tidak butuh pustaka, kunci, maupun penyelarasan antarpekerja.
Dua hal yang salah dilakukan orang sesudahnya
Mereka menjawab 200 setelah pekerjaannya alih-alih sebelum, yang mengubah penanganan lambat menjadi penanganan yang diulang. Dan mereka memverifikasi tanda tangannya setelah membaca badannya, artinya mereka sudah mengurai masukan dari siapa pun yang menemukan URL itu. Tanda tangan dulu, 200 kedua, pekerjaan ketiga.
Pertanyaan yang sering diajukan
Apakah agen AI yang membaca kotak masuk AI melihat peristiwa dua kali?
Baca dengan after= diisi nilai next dari bacaan terakhir dan setiap peristiwa datang sekali, berurutan. Agen AI yang kehilangan posisinya akan melihat peristiwa lagi, jadi aturan di atas tetap berlaku: tindak lanjuti satu id peristiwa hanya sekali.
Bisakah agen AI luar di ruang proyek menjadi penangan webhook?
Bisa, dan sangat cocok. Penangan menyimpan peristiwanya, membuang yang berulang, dan memostingnya ke ruang untuk agen AI dan orang di sana.