Webhook ke Google Sheets: hasil ujian dalam persekitaran pengeluaran

Webhook ke Google Sheets: demonstrasi dalaman dalam ruang kerja Ai Flowi sendiri, bukan hasil pelanggan. Permintaan HTTP sebenar dan bacaan semula helaian pada 8 dan 9 Oktober 2026 merekodkan penulisan yang sah, input yang ditolak, ujian semula import dan perlindungan pendua secara berurutan. Keperluan respons bagi kegagalan hamparan masih belum dipenuhi.

Oleh Ai Flowi · Diterbitkan · Dikemas kini . Tarikh ujian di bawah mengikut laporan dalaman. [1]

Halaman ini mendokumenkan aliran tanpa model yang telah diuji. Gunakan tutorial induk untuk sambungan nod dan pertanyaan pengesahan. Baca gambaran keseluruhan produk AI Flowi Workflow untuk konteks pembina aliran; bukti ujian hanya meliputi konfigurasi yang direkodkan.

Berkaitan: Pemetaan medan webhook untuk Google Sheets.

Kaedah dan persekitaran

Permintaan ialah POST HTTP sebenar ke https://workflow.aiflowi.com/api/v1/webhook/<flow-id>, dihantar menggunakan konteks permintaan Playwright dalam pelayar yang telah log masuk. Titik akhir ini ialah templat; tiada pengecam aliran peribadi diterbitkan. Aliran akhir menggunakan Universal Webhook dengan Platform API Key sebagai kaedah pengesahan dan mod respons From Flow. Setiap permintaan menggunakan Content-Type: application/json. Pengesahan sementara dicipta untuk setiap sesi ujian; pemadamannya disahkan selepas itu. [1] [2] [3]

Persekitaran ujian yang direkodkan
PerkaraKonfigurasi yang direkodkan
PlatformAI Flowi Workflow 1.9.2 di workflow.aiflowi.com; titik akhir versi diperiksa pada 8 Oktober 2026.
PengasinganHamparan ujian data sintetik khusus yang dicipta oleh aplikasi, aliran kerja ujian khusus, varian hamparan salah yang berasingan dan salinan import bersih dalam ruang kerja Ai Flowi sendiri.
Akses GoogleSambungan Google ruang kerja sedia ada yang telah diberi kebenaran; nilai sambungan dan Spreadsheet ID tidak didedahkan.
Aliran penambahan baris pada 8 Oktober7 nod, 6 sambungan. Pengesahan → Verification Router → penyediaan baris → Append Rows (Sheet1!A:C, USER_ENTERED) → respons 200; pengesahan ditolak → respons 422.
Aliran perlindungan pendua pada 9 Oktober8 nod, 7 sambungan. Memerlukan event_id; Upsert Row pada tab (diberi nama samaran DemoEvents di sini), baris pengepala 1, lajur kunci event_id, padanan peka huruf besar dan kecil, input RAW. Unjuran respons mengembalikan inserted atau duplicate; pengesahan ditolak → 422.
PengukuranRead Range membaca helaian ujian selepas setiap permintaan. Bandingkan status HTTP dan bilangan baris sebelum/selepas; pelaksana ujian v2 turut membandingkan tatasusunan baris, ID peristiwa yang sepadan dan badan respons. Kiraan v2 tidak termasuk pengepala.

[1] [2] [3] Sesi ujian dijalankan secara berurutan. Baris sintetik sedia ada menerangkan kiraan awal yang bukan sifar; jumlah ini bukan rekod pelanggan.

8 Oktober 2026: Append Rows dan ujian semula import

Input yang sah menulis satu baris; input tidak sah dan pengesahan yang gagal tidak menulis sebarang baris. Pasangan pendua menambah baris dua kali. Bagi aliran terdahulu ini, “Dijangka” menyenaraikan sasaran penghasilan semula yang diperoleh daripada reka bentuk aliran dalam laporan; laporan yang dibekalkan tidak menetapkan status HTTP untuk kes kegagalan hamparan. “Diperhatikan” ialah status HTTP yang direkodkan dan baris sebelum → selepas, dengan bilangan baris tambahan dalam kurungan. [1] [3]

Append Rows: aliran asal dan salinan import bersih
Ujian / badan permintaanHTTP dijangka / baris tambahanHTTP diperhatikan bagi aliran asal / barisHTTP diperhatikan bagi import / baris
T1 permintaan sah dengan pengesahan yang sah200 / +1200 / 3 → 4 (+1)200 / 6 → 7 (+1)
T2 medan wajib tiada (email)422 / +0422 / 4 → 4 (+0)422 / 7 → 7 (+0)
T3 jenis medan tidak sah (name ialah nombor)422 / +0422 / 4 → 4 (+0)422 / 7 → 7 (+0)
T3b format email tidak sah422 / +0422 / 4 → 4 (+0)422 / 7 → 7 (+0)
T4 JSON cacat422 / +0422 / 4 → 4 (+0)422 / 7 → 7 (+0)
T5 kunci API tiada403 / +0403 / 4 → 4 (+0)403 / 7 → 7 (+0)
T6 kunci API tidak sah403 / +0403 / 4 → 4 (+0)403 / 7 → 7 (+0)
T7 kegagalan akses hamparan Google (ID helaian tidak wujud)Kegagalan; HTTP tidak ditetapkan / +0404 ralat mentah / 4 → 4 (+0)Tidak diulang
T8a penghantaran pendua – pertama200 / +1200 / 4 → 5 (+1)200 / 7 → 8 (+1)
T8b penghantaran pendua – penghantaran kedua yang sama sepenuhnya200 / +1200 / 5 → 6 (+1)200 / 8 → 9 (+1)

Muat naik JSON yang telah disanitasi mengembalikan 201 dan mengekalkan 7 nod dan 6 sambungan. Medan akaun Google kosong dan Spreadsheet ID ialah YOUR_SPREADSHEET_ID. Sambungan dan helaian ujian ditetapkan sebelum permintaan diulang. T7 tidak diulang pada salinan import ini; ujian tersebut memerlukan aliran varian kegagalan yang berasingan. [1]

Contoh respons yang diperhatikan: T1 melaporkan updatedRows: 1 dan Sheet1!A4:C4 pada aliran asal, kemudian Sheet1!A7:C7 pada salinan import. T2 melaporkan Validation failed dengan email is required and must be a valid address; T3 melaporkan name is required and must be text. T4 melaporkan Request body must be a JSON object with name, email and request. T5 dan T6 masing-masing melaporkan bahawa kunci API diperlukan dan kunci API tidak sah. [1]

9 Oktober 2026: perlindungan pendua secara berurutan dan ujian semula import

Salinan asal dan salinan import masing-masing memasukkan enam baris data semasa sesi ujian. Percubaan semula dengan permintaan yang sama sepenuhnya yang dijalankan secara berurutan mengembalikan {"status":"duplicate"} dan mengemas kini baris sedia ada tanpa memasukkan baris kedua. ID peristiwa yang berbeza dengan nilai medan lain yang sama sepenuhnya memasukkan dua baris. T9 memeriksa bahawa terdapat tepat satu baris yang sepadan dengan ID peristiwanya. Ini ialah pemerhatian secara berurutan. [1] [2]

Upsert Row: setiap permintaan, salinan asal dan salinan import bersih
Ujian / badan permintaanHTTP dijangka / baris tambahanHTTP diperhatikan bagi aliran asal / barisHTTP diperhatikan bagi import / barisRespons / hasil yang diperhatikan
T1 permintaan sah dengan pengesahan yang sah200 / +1200 / 0 → 1 (+1)200 / 6 → 7 (+1){"status":"inserted"}
T2 medan wajib tiada (email)422 / +0422 / 1 → 1 (+0)422 / 7 → 7 (+0)422; pengesahan gagal
T3 jenis medan tidak sah (name ialah nombor)422 / +0422 / 1 → 1 (+0)422 / 7 → 7 (+0)422; pengesahan gagal
T3b format email tidak sah422 / +0422 / 1 → 1 (+0)422 / 7 → 7 (+0)422; pengesahan gagal
T4 JSON cacat422 / +0422 / 1 → 1 (+0)422 / 7 → 7 (+0)422; ralat badan bukan objek
T5 kunci API tiada403 / +0403 / 1 → 1 (+0)403 / 7 → 7 (+0)403; kunci API diperlukan
T6 kunci API tidak sah403 / +0403 / 1 → 1 (+0)403 / 7 → 7 (+0)403; kunci API tidak sah
T7 helaian bermasalah: keperluan ralat terkawal502 ralat terkawal / +0404 ralat mentah / 1 → 1 (+0)404 ralat mentah / 7 → 7 (+0)BELUM DIPENUHI: ralat komponen mentah
T8a penghantaran pendua – pertama200 / +1200 / 1 → 2 (+1)200 / 7 → 8 (+1){"status":"inserted"}
T8b penghantaran pendua – kedua200 / +0200 / 2 → 2 (+0)200 / 8 → 8 (+0){"status":"duplicate"}
T9a event_id yang sama – pertama200 / +1200 / 2 → 3 (+1)200 / 8 → 9 (+1){"status":"inserted"}
T9b event_id yang sama – kedua200 / +0200 / 3 → 3 (+0)200 / 9 → 9 (+0){"status":"duplicate"}
T10a event_id berbeza, medan lain sama – pertama200 / +1200 / 3 → 4 (+1)200 / 9 → 10 (+1){"status":"inserted"}
T10b event_id berbeza, medan lain sama – kedua200 / +1200 / 4 → 5 (+1)200 / 10 → 11 (+1){"status":"inserted"}
T11-0 event_id tidak sah422 / +0422 / 5 → 5 (+0)422 / 11 → 11 (+0)422; butiran pengesahan event_id
T11-1 event_id tidak sah422 / +0422 / 5 → 5 (+0)422 / 11 → 11 (+0)422; butiran pengesahan event_id
T11-2 event_id tidak sah422 / +0422 / 5 → 5 (+0)422 / 11 → 11 (+0)422; butiran pengesahan event_id
T11-3 event_id tidak sah422 / +0422 / 5 → 5 (+0)422 / 11 → 11 (+0)422; butiran pengesahan event_id
T11-4 event_id tidak sah422 / +0422 / 5 → 5 (+0)422 / 11 → 11 (+0)422; butiran pengesahan event_id
T12 event_id 100 aksara200 / +1200 / 5 → 6 (+1)200 / 11 → 12 (+1){"status":"inserted"}

T11-0 hingga T11-4 ialah lima ujian ID peristiwa berasingan: tiada, null, bernilai nombor, kosong dan sepanjang 101 aksara. Kelima-limanya mengembalikan 422 dalam setiap sesi ujian. T12 menggunakan tepat 100 aksara dan menambah satu baris. Pelaksana ujian memerlukan butiran ralat event_id is required and must be text between 1 and 100 characters untuk T11. [1] [2]

Eksport dalam persekitaran pengeluaran mengembalikan 200, dengan 8 nod dan 7 sambungan. Selepas sanitasi, imbasan untuk mengesan maklumat rahsia yang direkodkan menemui 0 padanan. Muat naik JSON yang telah disanitasi ke aliran bersih mengembalikan 201; akaun Googlenya kosong dan Spreadsheet ID ialah YOUR_SPREADSHEET_ID. Kedua-dua medan dikonfigurasikan sebelum ujian semula. Kedua-dua varian kegagalan asal dan import mengembalikan ralat mentah 404, maka keperluan respons terkawal 502 masih BELUM DIPENUHI. [1]

Input sintetik: badan permintaan tepat yang telah disanitasi

Kembangkan sesuatu kes untuk menyalin seluruh badan permintaannya. Ini ialah pembinaan semula deterministik daripada pelaksana ujian sumber dengan sanitasi yang dinyatakan secara jelas: label tiket dalaman dalam nama digantikan dengan Demo; awalan sesi ujian v2 yang dijana digantikan dengan demonstration-01 bagi sesi asal dan demonstration-02 bagi sesi import. Semua medan muatan lain dikekalkan. T12 diisi semula dengan x untuk mengekalkan tepat 100 aksara. Bukti v2 merekodkan hasil, bukannya bait permintaan yang ditangkap; ini ialah badan permintaan tepat yang telah disanitasi untuk menghasilkan semula ujian, bukan dakwaan bahawa pengecam asal yang dijana diterbitkan. Nilai pengesahan tidak didedahkan. [2] [3]

Kes Append Rows pada 8 Oktober

Aliran penambahan baris yang diimport mengulangi badan permintaan yang sama ini, kecuali T7. [1] [3]

T1 — permintaan sah dengan pengesahan yang sah

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"name":"Demo Test T1","email":"t1@example.com","request":"Synthetic webhook test T1"}
T2 — medan wajib tiada (email)

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"name":"Demo Test T2","request":"missing email"}
T3 — jenis medan tidak sah (name ialah nombor)

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"name":12345,"email":"t3@example.com","request":"wrong type"}
T3b — format email tidak sah

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"name":"Demo Test T3b","email":"not-an-email","request":"bad email"}
T4 — JSON cacat

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"name": "Demo Test T4", "email": 

Badan permintaan berakhir selepas titik bertindih dan satu ruang di hujung. Hantar bait ini sebagai teks; jangan baiki atau kodkannya sebagai JSON.

T5 — kunci API tiada

POST · Content-Type: application/json · Pengesahan: jangan sertakan pengepala x-api-key. Sasaran: aliran ujian.

{"name":"Demo Test T5","email":"t5@example.com","request":"Synthetic webhook test T5"}
T6 — kunci API tidak sah

POST · Content-Type: application/json · Pengesahan: kunci yang sengaja tidak sah (nilai tidak didedahkan). Sasaran: aliran ujian.

{"name":"Demo Test T6","email":"t6@example.com","request":"Synthetic webhook test T6"}
T7 — kegagalan akses hamparan Google (ID helaian tidak wujud)

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran hamparan bermasalah yang berasingan.

{"name":"Demo Test T7","email":"t7@example.com","request":"Synthetic webhook test T7"}
T8a — penghantaran pendua – pertama

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"name":"Demo Test T8","email":"t8@example.com","request":"Synthetic webhook test T8"}
T8b — penghantaran pendua – penghantaran kedua yang sama sepenuhnya

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"name":"Demo Test T8","email":"t8@example.com","request":"Synthetic webhook test T8"}

Kes Upsert Row pada 9 Oktober

Bagi sesi import, gantikan demonstration-01 dengan demonstration-02 dalam setiap ID peristiwa. Untuk T12, isi awalan tersebut berserta tanda sempang terakhirnya dengan x sehingga tepat 100 aksara. T8a/T8b dan T9a/T9b mesti menggunakan ID peristiwa yang sama tepat dalam setiap pasangan. T10a/T10b hanya berbeza pada ID peristiwa. [2]

T1 — permintaan sah dengan pengesahan yang sah

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T1","name":"Demo Test T1","email":"t1@example.com","request":"Synthetic webhook test T1"}
T2 — medan wajib tiada (email)

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T2","name":"T2","request":"missing email"}
T3 — jenis medan tidak sah (name ialah nombor)

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T3","name":12345,"email":"t3@example.com","request":"Synthetic webhook test T3"}
T3b — format email tidak sah

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T3b","name":"Demo Test T3b","email":"not-an-email","request":"Synthetic webhook test T3b"}
T4 — JSON cacat

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"name": "T4", "email": 

Badan permintaan berakhir selepas titik bertindih dan satu ruang di hujung. Hantar bait ini sebagai teks; jangan baiki atau kodkannya sebagai JSON.

T5 — kunci API tiada

POST · Content-Type: application/json · Pengesahan: jangan sertakan pengepala x-api-key. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T5","name":"Demo Test T5","email":"t5@example.com","request":"Synthetic webhook test T5"}
T6 — kunci API tidak sah

POST · Content-Type: application/json · Pengesahan: kunci yang sengaja tidak sah (nilai tidak didedahkan). Sasaran: aliran ujian.

{"event_id":"demonstration-01-T6","name":"Demo Test T6","email":"t6@example.com","request":"Synthetic webhook test T6"}
T7 — helaian bermasalah: keperluan ralat terkawal

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran hamparan bermasalah yang berasingan.

{"event_id":"demonstration-01-T7","name":"Demo Test T7","email":"t7@example.com","request":"Synthetic webhook test T7"}
T8a — penghantaran pendua – pertama

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T8","name":"Demo Test T8","email":"t8@example.com","request":"Synthetic webhook test T8"}
T8b — penghantaran pendua – kedua

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T8","name":"Demo Test T8","email":"t8@example.com","request":"Synthetic webhook test T8"}
T9a — event_id yang sama – pertama

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T9","name":"Demo Test T9","email":"t9@example.com","request":"Synthetic webhook test T9"}
T9b — event_id yang sama – kedua

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T9","name":"Demo Test T9","email":"t9@example.com","request":"Synthetic webhook test T9"}
T10a — event_id berbeza, medan lain sama – pertama

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T10a","name":"Demo Test T10","email":"t10@example.com","request":"Synthetic webhook test T10"}
T10b — event_id berbeza, medan lain sama – kedua

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-T10b","name":"Demo Test T10","email":"t10@example.com","request":"Synthetic webhook test T10"}
T11-0 — event_id tidak sah

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"name":"Demo Test T11","email":"t11@example.com","request":"Synthetic webhook test T11"}
T11-1 — event_id tidak sah

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":null,"name":"Demo Test T11","email":"t11@example.com","request":"Synthetic webhook test T11"}
T11-2 — event_id tidak sah

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":123,"name":"Demo Test T11","email":"t11@example.com","request":"Synthetic webhook test T11"}
T11-3 — event_id tidak sah

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"","name":"Demo Test T11","email":"t11@example.com","request":"Synthetic webhook test T11"}
T11-4 — event_id tidak sah

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","name":"Demo Test T11","email":"t11@example.com","request":"Synthetic webhook test T11"}
T12 — event_id 100 aksara

POST · Content-Type: application/json · Pengesahan: Platform API Key sementara yang sah. Sasaran: aliran ujian.

{"event_id":"demonstration-01-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","name":"Demo Test T12","email":"t12@example.com","request":"Synthetic webhook test T12"}

Batasan yang didokumenkan

Kegagalan Google Sheets masih mengembalikan ralat platform mentah dalam versi 1.9.2. Hasil yang dikehendaki bagi v2 T7 ialah HTTP 502 dengan tepat {"error":"Spreadsheet write failed","code":"SHEET_WRITE_FAILED"}. Sebaliknya, kedua-dua sesi ujian mengembalikan HTTP 404 dengan ralat komponen mentah. Helaian ujian kekal tidak berubah. Sebelum bukti disunting untuk menyembunyikan maklumat sensitif, ralat itu mengandungi URL Google API dan Spreadsheet ID; laporan merekodkan bahawa tiada maklumat pengesahan akses dalam respons tersebut. Unjuran respons berjaya tidak mensanitasi respons kegagalan. [1] [2]

Komponen Google Sheets tidak mempunyai output ralat untuk cabang kegagalan dalam aliran. Kegagalan menghentikan graf sebelum Webhook Response di hiliran dijalankan; templat respons From Flow tidak menangkapnya. Ralat tidak ditemui yang didokumenkan menjadi 404, manakala ralat lain boleh menjadi 500. Badan respons kegagalan terkawal memerlukan perubahan platform atau gerbang yang dilaksanakan secara berasingan. Tiada dakwaan bahawa mana-mana satu tersedia di sini. [1] [2]

  • Pendua serentak yang diukur: Pada 9 Oktober 2026, lima penghantaran serentak dengan satu event_id semuanya mengembalikan 200 dan menulis 3 baris helaian tambahan (15 → 18; baris peristiwa sepadan 0 → 3). Aliran kerja ini tidak selamat untuk pelaksanaan serentak. Pastikan penghantar menghantar secara berurutan atau singkirkan pendua di hiliran. Upsert Row membaca dan menulis tanpa semakan keunikan atomik atau kunci merentas permintaan. [4]
  • Pendua ialah kemas kini. Ia masih menulis ke Google Sheets; muatan yang berubah dengan ID peristiwa yang sama menulis ganti medan yang dibekalkan, dan kemas kini terakhir yang berjaya menjadi nilai akhir. Ujian masa jalan dengan badan permintaan yang sama sepenuhnya tidak membuktikan bahawa penghantaran pertama dikendalikan sebagai rekod yang tidak boleh diubah. [1] [2]
  • Skop dan pengekalan bergantung pada helaian. ID peristiwa disimpan dalam satu lembaran kerja tanpa membuang ruang kosong pada awal atau akhirnya; padanan peka huruf besar dan kecil. Semua penghantar ke lembaran kerja tersebut berkongsi ruang kunci. Lembaran kerja lain mempunyai ruang tersendiri. Tiada tamat tempoh atau log penerimaan berasingan; pemadaman atau penyuntingan kunci membolehkan penyisipan kemudian. Baris pendua sedia ada tidak digabungkan. Suntingan manual atau perubahan skema boleh menyebabkan carian tidak lagi sah. [1] [2]
  • Persediaan penting. Pastikan medan pertanyaan JQ kelihatan. Sesi terdahulu dengan medan tersembunyi gagal dengan JSON Query is required and cannot be blank. Reka bentuk penambahan baris akhir menggunakan Verification Router; keenam-enam sambungan kekal selepas semakan simpan automatik editor yang direkodkan. Penghala Condition terdahulu kehilangan sambungan daripada output penolakan. [1]
  • Eksport memerlukan sanitasi. Eksport pukal mengekalkan label Google, pengecam sambungan dan hamparan, URL webhook serta metadata akaun/aliran sebelum pembersihan. Imbasan tanpa padanan yang direkodkan terpakai pada fail yang telah disanitasi tersebut, bukan sebarang eksport pada masa hadapan. Respons HTTP penambahan baris tidak membekalkan ID pelaksanaan; log transaksi platform merekodkan pelaksanaan komponen. [1]

Perkara yang tidak diuji

Sesi ini tidak menguji beban, kependaman sebagai penanda aras prestasi, atau pelaksanaan serentak pada skala besar. Ujian semula kebolehpercayaan di bawah mengukur satu kelompok pendua serentak dengan lima permintaan; ia tidak membuktikan tingkah laku pada skala besar. Semakan bacaan bertindih luar talian yang diterangkan dalam reka bentuk menggunakan stub Google API setempat; ia bukan pengukuran pelaksanaan serentak dalam persekitaran pengeluaran. Pengesahan External Provider tidak diuji. Hasil tanpa model ini tidak membuktikan tingkah laku masa jalan resipi berasaskan model, pemulihan menyeluruh daripada gangguan Google, atau hasil pelanggan. [1] [2] [3]

Cara menghasilkan semula ujian

Muat turun aliran kerja Append Rows yang telah disahkan · Muat turun aliran kerja perlindungan pendua secara berurutan. Ini ialah pakej aliran kerja yang telah disanitasi dan digunakan untuk ujian semula import yang didokumenkan. Arkib perlindungan pendua mengandungi ai-flowi-webhook-to-google-sheets-duplicate-protection.json. [1] [3] Rujukan muat turun dan persediaan dalam tutorial induk.

  1. Cipta hamparan ujian data sintetik yang diasingkan. Untuk Append Rows, gunakan Sheet1 dengan lajur name,email,request, mengikut susunan itu. Untuk Upsert Row, tukar tajuk helaian Upsert Row yang diimport kepada DemoEvents dan tambah tab berasingan dengan nama itu, dengan baris 1 tepat event_id,name,email,request. Jangan halakan ujian ke helaian pelanggan. [1] [2]
  2. Nyahzip dan muat naik JSON yang dipilih ke aliran baharu. Tetapkan akaun Google anda yang telah diberi kebenaran dan gantikan YOUR_SPREADSHEET_ID. Sahkan graf import mempunyai 7 nod / 6 sambungan untuk penambahan baris, atau 8 / 7 untuk upsert. Gunakan rujukan tutorial induk untuk persediaan penambahan baris atau persediaan perlindungan pendua. [1]
  3. Tetapkan Universal Webhook kepada POST, Platform API Key dan From Flow. Pastikan medan JQ pengesahan dan unjuran baris kelihatan; tetapkan respons berjaya kepada 200 dan respons ditolak kepada 422. Untuk Upsert Row, gunakan baris pengepala 1, event_id sebagai lajur kunci, padanan peka huruf besar dan kecil serta RAW. [1] [2]
  4. Rekodkan baris awal helaian. Hantar badan permintaan yang telah disanitasi di atas mengikut urutan yang disenaraikan ke titik akhir yang ditunjukkan dalam editor anda sendiri. Gunakan pengepala sementara x-api-key untuk kes pengesahan sah, jangan sertakannya bagi T5 dan gunakan nilai yang sengaja tidak sah bagi T6. Hantar T4 sebagai teks literal yang terpotong. Baca helaian selepas setiap permintaan dan rekodkan status HTTP, badan respons, baris sebelum/selepas dan baris tambahan. Untuk ruang nama baharu apabila mengulang ujian, gantikan awalan secara konsisten dalam setiap pasangan dan isi semula T12 sehingga tepat 100 aksara. [2] [3]
  5. Jalankan T7 hanya pada salinan varian kegagalan yang berasingan dengan Spreadsheet ID yang tidak wujud. Baca semula helaian ujian sebenar untuk mengesahkan bahawa ia tidak berubah. Rekodkan respons mentah secara peribadi; sembunyikan pengecam sebelum berkongsi bukti. Dalam 1.9.2, jangkakan keperluan ralat terkawal masih belum dipenuhi. [1] [2] [3]
  6. Ulang urutan pada import bersih selepas menetapkan medan Google yang kosong dan pemegang tempat helaian. Gunakan ruang nama kedua yang telah disanitasi untuk v2 supaya kunci sedia ada daripada sesi asal tidak mengubah kiraan penyisipan. Import penambahan baris yang didokumenkan melangkau T7; import v2 mengulanginya. Bandingkan perubahan bilangan baris, bukan bilangan baris sejarah mutlak. [1] [2] [3]
  7. Batalkan pengesahan sementara selepas ujian dan sahkan bahawa ia tidak lagi muncul dalam akaun. Periksa sebarang eksport baharu sebelum berkongsinya; gunakan muat turun yang telah disanitasi dan dibekalkan untuk menghasilkan semula ujian. Penulisan ujian dan bacaan semula helaian melaksanakan nod aliran kerja. [1] [2] [3]

Ujian semula kebolehpercayaan (9 Oktober 2026)

Dikemas kini 9 Oktober 2026. Sesi ujian yang direkodkan berlangsung pada 9 Oktober 2026, 09:12:21–09:13:34 MYT (UTC+8), pada aliran kerja perlindungan pendua. Ini ialah ujian sintetik dalaman. Baris di bawah ialah baris data helaian; baris peristiwa hanya mengira nilai yang diuji bagi event_id. [4]

Hasil kebolehpercayaan dalam persekitaran pengeluaran yang diperhatikan
KesDijangkaStatus diperhatikanBaris sebelum / selepasKeputusan
sahHTTP 200; +1 baris; 1 baris peristiwaHTTP 200; dimasukkan12 → 13 (+1); baris peristiwa 0 → 1LULUS
medan tiadaHTTP 422; +0 baris; 0 baris peristiwaHTTP 42213 → 13 (+0); baris peristiwa 0 → 0LULUS
jenis salahHTTP 422; +0 baris; 0 baris peristiwaHTTP 42213 → 13 (+0); baris peristiwa 0 → 0LULUS
JSON cacatHTTP 422; +0 baris; 0 baris peristiwaHTTP 42213 → 13 (+0); baris peristiwa 0 → 0LULUS
badan kosongHTTP 422; +0 baris; 0 baris peristiwaHTTP 42213 → 13 (+0); baris peristiwa 0 → 0LULUS
kunci tiadaHTTP 403; +0 baris; 0 baris peristiwaHTTP 40313 → 13 (+0); baris peristiwa 0 → 0LULUS
kunci tidak sahHTTP 403; +0 baris; 0 baris peristiwaHTTP 40313 → 13 (+0); baris peristiwa 0 → 0LULUS
tamat masa klienPerhatikan pembatalan oleh klien dan keadaan helaian selepas itu; pembatalan pelaksanaan tidak diandaikanTiada status HTTP: CLIENT_TIMEOUT selepas 1,000 ms; penulisan baris diperhatikan13 → 14 (+1); baris peristiwa 0 → 1DIPERHATIKAN
percubaan semula selepas tamat masaHTTP 200; +0 baris; 1 baris peristiwaHTTP 200; pendua14 → 14 (+0); baris peristiwa 1 → 1LULUS
pendua berurutan (penghantaran 1)HTTP 200; +1 baris; 1 baris peristiwaHTTP 200; dimasukkan14 → 15 (+1); baris peristiwa 0 → 1LULUS
pendua berurutan (penghantaran 2)HTTP 200; +0 baris; 1 baris peristiwaHTTP 200; pendua15 → 15 (+0); baris peristiwa 1 → 1LULUS
pendua berurutan (penghantaran 3)HTTP 200; +0 baris; 1 baris peristiwaHTTP 200; pendua15 → 15 (+0); baris peristiwa 1 → 1LULUS
pendua serentakLima respons; satu baris peristiwa dikehendaki; perhatikan keadaan perlumbaan200 × 5; dimasukkan × 3, pendua × 215 → 18 (+3); baris peristiwa 0 → 3TIDAK selamat untuk pelaksanaan serentak (diperhatikan)
muatan besarPerhatikan penerimaan/penolakan teks request kira-kira 50 KB dan hasil penulisan sebenar; tiada had saiz platform diandaikan.HTTP 200; dimasukkan; badan 50,132 bait / teks request 50,000 bait (~50 KB) diterima18 → 19 (+1); baris peristiwa 0 → 1DIPERHATIKAN
ralat huluanRespons bukan 2xx dan helaian sintetik tidak berubah; periksa pendedahan ralat mentah sebenar sebelum menyembunyikan maklumat sensitif dalam bukti.HTTP 404; ralat platform mentah; pengecam hamparan dan butiran mentah terdedah sebelum maklumat sensitif disembunyikan19 → 19 (+0); baris peristiwa 0 → 0DIPERHATIKAN

Tamat masa klien tidak menghalang penulisan baris. Klien membatalkan permintaan pada 1,000 ms; ketiga-tiga rekod keadaan helaian selepas itu menemukan satu baris peristiwa (2,415, 7,383 dan 17,397 ms selepas permintaan bermula). Masa penulisan tepat pada pelayan tidak diketahui, maka semakan ini membuktikan baris ditulis walaupun klien membatalkan permintaan, bukan bila penulisan selesai berbanding waktu pembatalan. Percubaan semula secara berurutan dengan event_id yang sama mengembalikan 200 pendua dan tidak menulis baris tambahan. Tiga penghantaran berurutan juga meninggalkan satu baris peristiwa.

Penemuan pendua serentak: Pada 9 Oktober 2026, lima penghantaran serentak dengan satu event_id semuanya mengembalikan 200 dan menulis 3 baris helaian tambahan (15 → 18; baris peristiwa sepadan 0 → 3). Aliran kerja ini tidak selamat untuk pelaksanaan serentak. Pastikan penghantar menghantar secara berurutan atau singkirkan pendua di hiliran. 3 baris helaian tambahan itu ialah jumlah 3 baris bagi peristiwa tersebut, iaitu 2 baris lebih daripada satu baris yang dikehendaki. Rekod keadaan helaian yang sama digunakan bersama untuk seluruh kelompok; jangan tambahkan +3 itu sekali bagi setiap respons.

Ralat huluan: varian hamparan bermasalah yang dibekalkan mengembalikan HTTP 404 dengan ralat platform mentah; baris helaian kekal 19 → 19. Ralat yang telah disunting untuk menyembunyikan maklumat sensitif melaporkan Requested entity was not found. dan kegagalan graf Upsert Row. Semakan sebelum penyembunyian maklumat sensitif merekodkan pengecam hamparan dan butiran platform mentah, tetapi tiada maklumat pengesahan akses. Tiada cabang ralat Google dalam aliran pada versi 1.9.2.

Kes v1 yang telah disahkan: TIDAK DIJALANKAN dalam ujian semula ini. Pengecam alirannya yang dinyatakan secara khusus tiada dalam konfigurasi ujian peribadi. Tiada satu pun daripada 12 kes yang dirancang mempunyai status HTTP atau kiraan baris yang diperhatikan di sini. Hasil v1 terdahulu di atas kekal sebagai bukti berasingan. Ujian semula selesai dan memadamkan pengesahan sementaranya (HTTP 200; tiada dalam senarai kunci), tetapi status pengesahan masa jalan keseluruhan dan status semakan wajib kedua-duanya bernilai palsu. Baris DIPERHATIKAN merekodkan penemuan, bukan jaminan kebolehpercayaan yang lulus. Satu penerimaan ~50 KB tidak membuktikan saiz muatan maksimum; semakan tamat masa hanya meliputi tempoh terhad.

Rujukan bukti

  1. [1] Laporan ujian dalam persekitaran pengeluaran dalaman Ai Flowi. Bahagian: persediaan; hasil akhir aliran asal dan import bersih pada 8 Oktober 2026; batasan yang diperhatikan; hasil v2 asal/import pada 9 Oktober 2026; pengendalian kegagalan hamparan; fail v2 yang boleh dimuat turun. Ini ialah sumber pemerhatian dalam persekitaran pengeluaran. Ia ialah rekod ujian dalaman, bukan hasil pelanggan.
  2. [2] Reka bentuk perlindungan pendua dan pelaksana ujian dalam persekitaran pengeluaran Ai Flowi. Bahagian reka bentuk: pengecam dan skop; kegagalan hamparan; pengesahan tepat; medan graf; prosedur dan batasan luar talian. Pelaksana ujian: pembina permintaan deterministik, status dan perubahan bilangan baris yang dijangka, bacaan semula seluruh helaian, semakan respons dan pembersihan pengesahan sementara. Status awal reka bentuk “belum disahkan dalam persekitaran pengeluaran” mendahului hasil masa jalan 9 Oktober yang direkodkan dalam [1]; semakan luar taliannya sahaja tidak membuktikan kejayaan dalam persekitaran pengeluaran.
  3. [3] Pelaksana ujian dalam persekitaran pengeluaran Append Rows Ai Flowi yang telah disahkan dan aliran kerja yang telah disanitasi. Pelaksana ujian: pembina badan permintaan, pengesahan tiada/tidak sah, JSON cacat, varian hamparan bermasalah, pasangan pendua berurutan, bacaan semula helaian dan pembersihan. Hasil masa jalan datang daripada [1], bukannya semakan pakej simulasi terdahulu.
  4. [4] Bukti ujian semula kebolehpercayaan dalaman Ai Flowi, direkodkan pada 9 Oktober 2026 MYT. Status permintaan dalam persekitaran pengeluaran, pemerhatian pembatalan oleh klien, kiraan seluruh helaian dan baris peristiwa, kelompok serentak lima permintaan, kiraan bait muatan, pendedahan ralat huluan dan pembersihan pengesahan sementara. Kes v1 yang telah disahkan tidak dijalankan. Cap masa bukti menentukan tarikh sesi ujian; halaman ini dikemas kini pada 10 Oktober.