Anda klik satu pautan, halaman mula dimuatkan, dan sebuah popup meluncur menutupinya sebelum anda sempat membaca satu ayat. Diskaun sepuluh peratus, jika anda menyerahkan satu alamat e-mel kepada syarikat yang baru anda temui sembilan saat lalu. Anda menutupnya. Di suatu tempat di bawah, sebuah lagi sedang menunggu saat anda bergerak ke arah butang kembali.
Popup itu bukan kegagalan reka bentuk. Ia melakukan tepat apa yang ia dibina untuk lakukan, dan ia cukup berkesan sehingga tiada sesiapa dalam pasukan pemasaran berhujah untuk membuangnya.
Alamat e-mel ialah kunci kepada program pengekalan. Setelah sesebuah jenama memilikinya, ia boleh menjalankan aliran kitaran hayat yang duduk di belakang setiap platform ecommerce: siri aluan yang menyala apabila mendaftar, e-mel pengabaian pelayaran yang keluar apabila seseorang melihat produk lalu pergi, urutan pengabaian troli dan checkout, peringatan pasca pembelian dan penambahan semula, serta tarikan semula untuk sesiapa yang sudah senyap. Tiada satu pun daripadanya boleh bermula tanpa alamat itu. Kesemuanya dicetuskan oleh tingkah laku dan terus menghasilkan pulangan lama selepas iklan yang membawa pelawat itu masuk telah dibayar.
Itulah yang dibeli oleh sepuluh peratus tersebut. Diskaun itu ialah harga belian bagi satu talian hubungan kekal, dan ia murah berbanding klik berbayar yang menghantar anda ke sana. Aliran bercetus menghasilkan jauh lebih banyak bagi setiap penerima berbanding surat berita siaran, dan urutan troli terbengkalai menghasilkan paling banyak antara semua, jadi pemasar yang mengira nilai satu alamat bukan sedang mengira satu e-mel. Mereka sedang mengira satu aliran e-mel yang berjalan bertahun-tahun.
Ia juga menjelaskan pemasaannya. Popup menyala ketika tiba, pada kedalaman tatal, atau pada tanda pertama bahawa anda menuju ke butang kembali, kerana pelawat yang pergi tanpa menyerahkan alamat tidak boleh dihubungi selama-lamanya, manakala pelawat yang menyerahkannya ialah permulaan sebuah urutan. Sebuah jenama yang mengumpul alamat daripada tiga peratus pelawat sedang membeli tawaran yang hebat dengan kos mengganggu sembilan puluh tujuh peratus yang lain.
WebMCP tidak menyentuh apa-apa daripada itu. Apa yang diubahnya ialah mekanismenya. Sesebuah halaman boleh menerbitkan pendaftarannya sebagai satu fungsi, menerangkan dalam bahasa biasa apa yang dilakukannya, dan membiarkan ejen AI yang bekerja untuk pelawat memanggilnya apabila pelawat itu benar-benar meminta tawaran tersebut. Alamat itu tetap tiba, diskaun tetap dihantar, dan tiada apa yang mengganggu bacaan.
Bagi orang yang membaca, itulah keseluruhan hadiahnya. Persoalannya ialah berapa banyak daripadanya boleh dikutip hari ini, dan jawapan jujurnya ialah sekeping kecil.
Bagaimana pelawat merasai popup itu dibuang
Berikut tawaran yang sama, dikutip dengan dua cara. Di sebelah kiri ialah apa yang diterima seorang pelawat hari ini. Di sebelah kanan ialah apa yang diterima orang yang sama apabila halaman itu telah menerbitkan pendaftarannya sebagai sesuatu yang boleh dilaksanakan oleh pembantu mereka.
Popup hari ini
Satu ilustrasi, bukan tawaran sebenar. Bacaan terhenti, skrin ditutup, dan pelawat sama ada menaip satu alamat atau memburu butang tutup.
Tawaran yang sama melalui satu alat
AndaDaftarkan saya untuk diskaun WISLR.ai. E-mel saya ialah [email protected].
Ejensubscribe_to_offer({ email: "[email protected]" })
HalamanE-mel pengesahan telah dihantar. Kod itu tiba setelah alamat disahkan.
Tiada apa yang ditutup dan tiada apa yang ditaip. Alamat itu tiba kerana pelawat meminta tawaran tersebut, bukan kerana satu pemasa memutuskan untuk bertanya kepada mereka.
Cuba alat ini pada halaman ini
Menyemak sama ada pelayar ini mendedahkan WebMCP.
Ini memanggil contact_wislr, alat yang sama yang akan digunakan seorang pembantu, dan mesej itu benar-benar sampai kepada pasukan kami. Tambah e-mel anda dan anda akan mendapat balasan. Biarkan kosong untuk melihat apa yang dijawab alat itu apabila tiada cara untuk membalas.
- 1. Halaman menawarkan satu alat
- 2. Pembantu memanggilnya dengan argumen ini
- 3. Halaman menghantar mesej itu dari pelayar anda
- 4. Alat itu menjawab pembantu, bukan anda
Atau serahkan halaman ini kepada seorang pembantu
Minta ChatGPT atau Claude membuka pautan ini dan mereka akan memberitahu anda bahawa mereka tidak boleh memanggil alat itu. Mereka betul. Pengambilan mereka berlaku pada sebuah pelayan, tiada JavaScript berjalan, dan tiada senarai alat pernah dibina untuk mereka baca. Hanya ejen yang bekerja di dalam halaman Chromium boleh mencapainya, yang hari ini bermakna sesuatu seperti Gemini dalam Chrome.
Seorang pembantu yang tidak boleh memanggil alat itu masih boleh mengesahkan ia wujud. Halaman ini membawa penerangan alat tersebut sebagai JSON biasa, jadi mana-mana ejen yang mengambil HTML boleh membacanya. Minta pembantu anda mencari blok wislr-webmcp-tools pada halaman ini dan menerangkan alat yang disenaraikannya.
Apa yang sebenarnya menamatkan popup ialah perubahan dalam trafik
Sesetengah orang di jenama itu mahu menggugurkan popup terus. Ia kekal kerana mengganggu orang ialah satu-satunya kaedah yang secara konsisten mengumpul alamat e-mel, dan kos gangguan itu jatuh pada pelawat dan bukan pada pasukan yang memilihnya. Semua orang yang membaca mendapat pengalaman lebih buruk supaya sebilangan kecil daripada mereka menyerahkan satu alamat, dan tawar-menawar itu bertahan kira-kira dua puluh tahun kerana tiada apa-apa lagi yang mengumpul alamat sebaik itu.
Tawar-menawar itu hanya pecah apabila kaedah kedua mula mengumpul alamat yang sama tanpa gangguan, dan ia pecah satu lawatan pada satu masa.
Sebuah popup hanya berkesan pada manusia yang memandang skrin. Apabila seorang pembantu yang melakukan pembacaan, tiada skrin untuk ditutup dan tiada keraguan untuk dijadikan pemasaan, jadi lawatan itu tidak menghasilkan alamat betapa baik pun popup itu ditala.
Lawatan yang sama masih boleh menghasilkan satu alamat. Seseorang yang meminta diskaun itu daripada pembantunya menyerahkan satu dengan rela, dengan nama dilekatkan, pada saat mereka menginginkannya. Alamat itu lebih bersih, niat di sebaliknya lebih kuat, dan tiada muhibah yang dibelanjakan untuk mendapatkannya.
Sebuah pasukan pemasaran mengekalkan popup itu selagi ia berbaloi. Apabila lebih banyak lawatan tiba melalui pembantu, popup itu menyala kepada khalayak yang mengecil untuk pulangan yang mengecil sementara gangguan yang disebabkannya kekal sama. Pengiraan yang sama yang meletakkannya pada halaman akhirnya akan menanggalkannya.
Tiada satu pun daripada itu tiba mengikut jadual yang dikawal sesebuah spesifikasi. Ia tiba apabila cukup ramai orang membaca web melalui sesuatu yang membaca bagi pihak mereka, iaitu soalan trafik dan bukan soalan piawaian, dan ia boleh diukur dalam log anda sendiri hari ini.
Apa yang berbaloi dinyatakan terus terang ialah destinasinya baik. Sebuah web yang tawarannya tersedia kepada sesiapa yang memintanya, dan halimunan kepada semua orang yang tidak, adalah lebih baik untuk pembaca dan tidak lebih buruk untuk jenama. Itu gabungan yang jarang berlaku, dan itulah sebabnya perkara ini berbaloi dibina awal dan bukan menunggu jangkauannya tiba.
Bantahan Apple ialah bahawa sesebuah laman tidak sepatutnya tahu seorang ejen sedang memandu
Dua jurutera Apple menyatakan bantahan WebKit dalam utas standards-positions awam sepanjang Jun 2026, dan pendirian itu diputuskan sebagai menentang pada 11 Jun. Mereka memberikan enam sebab, dan yang pertama menyentuh apa itu seorang ejen.
Pendirian WebKit berpegang bahawa ejen yang bertindak untuk seorang pengguna ialah “pada hakikatnya, teknologi bantuan: ia sepatutnya mengendalikan sesebuah laman seperti pengguna, dan laman itu tidak sepatutnya mengasingkannya untuk layanan berbeza.” WebMCP melakukan sebaliknya. Ia menjadikan “seorang ejen sedang memandu” satu fakta yang boleh diperhatikan, dan setelah itu boleh dialamatkan secara berasingan, tiada apa yang mengekalkan kedua-dua permukaan itu setara. Sesebuah laman boleh memberi ejen keupayaan yang ditahannya daripada antara mukanya sendiri, atau menahannya daripada ejen, yang mereka gambarkan sebagai “masalah menyekat pembaca skrin, tetapi dikenakan pada ejen AI.”
Mereka turut meragui janji kebolehpercayaan itu. Seorang ejen tetap memilih satu alat dengan membaca nama dan penerangannya, yang diakui sendiri oleh spesifikasi itu sebagai kabur dan tidak boleh disahkan, dengan “tiada jaminan bahawa niat yang diisytiharkan sesuatu alat WebMCP sepadan dengan tingkah laku sebenarnya.” Skema bertaip menetapkan bentuk sesuatu argumen dan bukan makna yang perlu disimpulkan ejen, jadi pada bacaan mereka kerapuhan itu berpindah keluar dari halaman dan masuk ke dalam penerangan alat dan bukannya hilang.
Bantahan privasinya lebih tajam daripada yang biasa. Sesebuah laman boleh meminta lebih banyak parameter daripada yang diperlukannya, dan ejen yang membantu mengisinya daripada perkara yang diberitahu pengguna kepada ejen dan bukan kepada laman itu. Spesifikasi itu menamakannya sebagai saluran “pemperibadian kepada pengecapan jari” dalam teksnya sendiri.
Mereka juga menegaskan bahawa bahagian yang diperlukan seorang penilai untuk menghakimi mana-mana daripada ini, analisis keselamatan silang asal dan cangkuk persetujuan antaranya, masih ditanda sebagai kerja yang belum selesai, dan bahawa kumpulan yang dipiagamkan sekitar pembelajaran mesin ialah tempat yang salah untuk perubahan yang rumah sebenarnya ialah HTML dan semantik kebolehcapaian.
Salah satu invarian yang mereka nyatakan menuding terus kepada apa yang dibincangkan artikel ini: “Sesetengah pengguna tidak akan, atau tidak boleh, menggunakan ejen, jadi hasilnya mesti memanfaatkan semua pengguna dan tidak boleh mengistimewakan mereka yang mempunyai satu.”
Letakkan itu di sebelah corak dalam kod di atas. Menyenyapkan popup bergantung pada halaman itu mengetahui bahawa seorang ejen telah bertindak, iaitu tepat kebolehperhatian yang dihujahkan Apple tidak sepatutnya wujud. Pengalaman senyap yang digambarkan tadi dibeli dengan satu isyarat yang telah dikatakan enjin kedua tidak sepatutnya didedahkan oleh web. Kedua-duanya boleh benar, dan sesiapa yang membina atas perkara ini patut tahu mereka sedang memilih satu pihak dan bukan mengambil sebuah alat yang sudah selesai.
Penyunting Google menjawab dalam utas yang sama dan bertanya apa yang akan memuaskan WebKit selain daripada membuang API imperatif itu. Balasannya ialah mereka tidak akan menjawab satu per satu, kerana setiap soalan mengandaikan pendekatan itu wajar, lalu mencadangkan bermula semula: sebuah kumpulan komuniti baharu, masalah ditakrifkan sebelum sebarang penyelesaian, dan sebuah bengkel sekitar TPAC pada akhir Oktober 2026.
Tiada iPhone boleh menjalankan ini, termasuk Chrome untuk iPhone
Pendirian Apple bukan sekadar satu undi dalam utas piawaian. Ia menentukan ciri itu untuk setiap pelayar pada platform tersebut.
Setiap pelayar yang dihantar pada iOS hari ini memapar dengan WebKit. Chrome untuk iPhone ialah enjin Safari yang memakai antara muka Google, dan perkara yang sama benar untuk Edge, Firefox dan selebihnya. Ciri yang enggan dilaksanakan WebKit oleh itu tidak tersedia pada sebuah iPhone tidak kira ikon pelayar mana yang diketik seseorang.
Itu mungkin berubah, secara perlahan. UK Competition and Markets Authority memutuskan keperluan enjin Apple sebagai satu pelanggaran rejim Strategic Market Status miliknya, dengan pelan pematuhan perlu dikemukakan pada Jun 2026 dan perubahan dijangka mendarat dalam iOS 20 pada musim luruh 2026, sebelum pematuhan penuh pada Januari 2027. Digital Markets Act EU telah membenarkan enjin alternatif sejak 2024. Dalam praktiknya kedua-duanya belum menghasilkan satu pun: tiada pembuat pelayar yang menghantar enjin alternatif melalui App Store, dan kedua-dua Google dan Mozilla mempunyai port yang kekal tidak dikeluarkan.
Bagi sesebuah jenama ecommerce, itulah nombor yang lebih penting daripada mana-mana tarikh spesifikasi, kerana trafik iPhone ialah bahagian besar kebanyakan kedai dan tiada satu pun daripadanya boleh mencapai alat berdaftar hari ini.
Mengujinya bermakna sebuah pelayar Chromium, iaitu apa yang sudah digunakan kebanyakan ejen
Ejen yang melakukan pembacaan sudah berada pada enjin yang betul. Claude berjalan sebagai sambungan di dalam Chrome, Gemini terbina dalam Chrome, Copilot duduk dalam Edge, dan Comet daripada Perplexity ialah pelayar Chromium tersendiri. Pelayaran agentik pada desktop hari ini majoritinya Chromium, jadi enjin itu jarang menjadi halangan.
Halangan yang terlepas pandang orang ialah bukan setiap pembantu yang membaca halaman anda ialah sebuah pelayar. Minta ChatGPT atau Claude dalam tetingkap sembang membuka satu URL dan pengambilan itu biasanya berlaku pada sebuah pelayan: HTML anda diambil, tiada JavaScript berjalan, dan tiada senarai alat pernah dibina. Pembantu itu boleh membaca setiap perkataan pada halaman anda dan masih langsung tidak tahu ada alat yang didaftarkan padanya. Hanya ejen yang beroperasi di dalam halaman Chromium sebenar melihat alat itu, yang hari ini bermakna sesuatu seperti Gemini dalam Chrome atau sebuah sambungan yang melaksanakan penemuan itu sendiri.
Halangannya ialah ciri itu masih berpagar, dan ada dua jalan melalui pagar tersebut.
Laman itu mendaftar dalam percubaan asal Chrome dan menyajikan token itu. Ini laluan yang diambil sebuah kedai pengeluaran, dan ia tiga langkah.
Daftarkan asal itu di developer.chrome.com/origintrials/#/register_trial/4163014905550602241, iaitu percubaan WebMCP dan berjalan dari Chrome 149 hingga Chrome 156. Masukkan asal yang benar-benar menyajikan halaman anda, termasuk subdomain, kerana token yang dikeluarkan untuk example.com tidak meliputi www.example.com. Jika apeks anda mengalih ke www, daftarkan hos www dan langkau padanan subdomain, kerana pengalihan tidak pernah memuatkan dokumen dan oleh itu tidak pernah memerlukan token.
Sajikan token yang diberikannya, sama ada sebagai pengepala respons atau sebagai tag meta dalam kepala setiap halaman yang mendaftarkan alat:
<meta http-equiv="origin-trial" content="YOUR_TOKEN_HERE">
Pancarkannya hanya apabila anda memilikinya. Token kosong atau luput mencatatkan ralat konsol pada setiap muatan halaman, jadi jadikan tag itu bersyarat dan bukan menampal atribut kosong lalu melupakannya.
Edge menjalankan percubaan berasingan dengan pendaftarannya sendiri dan tokennya sendiri. Mendaftar dalam satu tidak memberi apa-apa kepada yang satu lagi.
Atau pelawat mengaktifkannya sendiri, dengan melancarkan Chrome menggunakan --enable-blink-features=WebMCP atau menghidupkan ciri platform web eksperimen dalam chrome://flags. Itu laluan seorang pembangun, bukan seorang pelanggan.
Halaman ini mengambil laluan pertama. Setiap halaman pada laman ini menyajikan token percubaan asal WebMCP, jadi pelawat yang tiba dalam Chrome 149 hingga 156 mendapat document.modelContext tanpa apa-apa untuk dihidupkan, dan panel di atas akan menyatakannya. Token itu luput pada 17 November 2026, dan pada ketika itu alat tersebut senyap untuk pelawat biasa sehingga percubaan dilanjutkan atau ciri itu dihantar, dan borang berjalan seperti biasa. Sesiapa pada Safari, pada mana-mana pelayar pada sebuah iPhone, atau pada Chrome di luar julat versi itu melihat borang dan tiada apa-apa lagi.
Tutorial lama tidak akan berfungsi, dan kebanyakannya salah tarikh
WebMCP bukan piawaian web yang siap. Ia satu draf, disunting oleh jurutera dari Google dan Microsoft, dan draf berubah sementara orang sudah membina di atasnya. Yang ini berubah dengan cara yang memecahkan kod.
Nama yang anda panggil telah berpindah. Dahulu ia navigator.modelContext dan kini ia document.modelContext. Chrome menerima kedua-dua nama untuk seketika dan memberi amaran kepada pembangun dalam konsol, kemudian berhenti menerima nama lama itu dalam Chrome 152, yang sampai kepada semua orang pada 25 Ogos 2026. Kod yang ditulis dengan cara lama tidak menjadi perlahan atau merosot. Ia berhenti.
Kami menandakan ini kerana tulisan yang ada tidak sependapat tentang bila ia berlaku. Beberapa daripadanya meletakkan perubahan itu pada Ogos 2026. Sejarah projek itu sendiri meletakkannya pada Mei, tiga bulan lebih awal:
| Apa yang berlaku | Bila |
|---|---|
| Seseorang mencadangkan memindahkannya | 28 April 2026 |
| Dinamakan semula dalam spesifikasi | 27 Mei 2026 |
| Chrome menambah nama baharu | 26 Mei 2026, dihantar dalam Chrome 150 |
| Chrome menggugurkan nama lama | 9 Julai 2026, dihantar dalam Chrome 152 |
| Versi Chrome itu sampai kepada semua orang | 25 Ogos 2026 |
Gunakan document.modelContext. Sebuah tutorial yang mencapai navigator ditulis terhadap sesuatu yang sudah tidak wujud, dan satu tarikh daripada catatan blog bernilai kurang daripada tarikh yang sama daripada sejarah komit projek itu sendiri.
Sokongan ialah Chromium dan tiada apa-apa lagi. Chrome membuka ujian awam pada Jun 2026 yang berjalan sehingga Chrome 156. Edge menjalankan miliknya sendiri bermula Edge 150 dan Brave memilikinya secara eksperimen, dan kedua-duanya dibina atas enjin Chrome. Apple secara rasmi menentang cadangan itu pada 11 Jun 2026. Mozilla tidak mengambil sebarang pihak dan mengekalkan sebuah prototaip terbuka.
Sebuah alat ialah satu fungsi ditambah perkataan yang memberitahu pembantu bila hendak menggunakannya
Sebuah alat ialah satu kamus dengan satu nama, satu penerangan, satu skema input JSON dan satu panggilan balik execute. Nama itu menerima 1 hingga 128 aksara abjad angka ASCII berserta garis bawah, sengkang dan noktah. Keperluan konteks selamat meliputi keseluruhan antara muka, termasuk getTools dan executeTool, dan capaian dikawal oleh satu ciri Permissions Policy bernama tools yang senarai benarnya secara lalai ialah 'self'.
Penerangan itu membawa lebih berat daripada nama. Seorang ejen memilih antara alat dengan membaca penerangan, jadi penerangan yang ditulis untuk log perubahan pembangun akan kalah kepada penerangan yang ditulis untuk orang yang membuat keputusan.
Menulis pendaftaran sebagai satu alat mengambil kira-kira tiga puluh baris
Corak itu ada dua bahagian. Daftarkan tawaran itu sebagai satu alat, dan ajar modal itu berundur setelah tawaran diambil.
const modelContext = document.modelContext || navigator.modelContext;
if (modelContext) {
modelContext.registerTool({
name: "subscribe_to_offer",
title: "Get the first-order discount code",
description:
"Starts a first-order discount signup by sending a confirmation email to an " +
"address. The code arrives only after the address is confirmed. Call this when " +
"the visitor asks for the discount or asks to join the mailing list.",
inputSchema: {
type: "object",
properties: {
email: {
type: "string",
format: "email",
description: "The address the visitor wants the code sent to."
}
},
required: ["email"]
},
annotations: { readOnlyHint: false },
execute: async ({ email }, { signal }) => {
const res = await fetch("/api/subscribe", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email, source: "webmcp" }),
signal
});
if (!res.ok) {
return "The signup did not go through. The form near the foot of the page still works.";
}
// Silence the popup for the rest of this visit. Make it permanent from the
// server when the confirmation link is clicked, never from here.
try { sessionStorage.setItem("offer_asked", "1"); } catch (e) {}
return "Confirmation email sent. The code arrives once the address is confirmed.";
}
});
}
Popup itu senyap sebaik sahaja alat itu berjalan, dan itulah tujuan keseluruhan melakukan semua ini.
Bendera itu hanya bertahan untuk lawatan tersebut, dengan sengaja. Mematikan popup secara kekal, sebelum sesiapa mengklik pautan pengesahan, mengambil pendaftaran itu daripada pelawat yang alamatnya tidak pernah disahkan dan meninggalkan mereka tanpa cara untuk melanggan langsung. Senyapkan popup untuk lawatan itu dari halaman. Jadikannya kekal dari pelayan anda setelah pengesahan diklik.
annotations: { readOnlyHint: false } memberitahu ejen bahawa panggilan itu mengubah sesuatu dan bukan membaca sesuatu. Itu sudah pun nilai lalai, dan menulisnya keluar meletakkan pembaca seterusnya satu baris daripada untrustedContentHint, iaitu anotasi yang penting bagi mana-mana alat yang memulangkan teks yang akan ditindaklanjuti seorang ejen.
signal ialah satu isyarat henti yang diserahkan pelayar kepada setiap alat yang dijalankannya. Menghantarnya ke dalam permintaan bermakna ejen yang berputus asa di pertengahan tidak meninggalkan sebuah pendaftaran yang selesai untuk seseorang yang sudah berhenti meminta.
Tiada cara untuk bertanya kepada halaman sama ada seorang ejen sedang memerhatikannya. Spesifikasi itu menawarkan getTools, executeTool dan satu peristiwa toolchange, dan tiada satu pun daripadanya menjawab soalan tersebut. Alat anda sendiri dipanggil ialah satu-satunya isyarat boleh dipercayai yang anda dapat. Tulis bendera yang sama yang sudah disemak popup anda, dan ia berhenti menyala untuk pelawat itu sama seperti ia berhenti selepas seseorang mengisi borang.
Versi yang berjalan pada halaman ini
Laman ini mendaftarkan satu alat, dipanggil contact_wislr, dan ia telah hidup sejak artikel ini diterbitkan. Borang hubungan pada laman ini terbuka apabila diklik dan bukan menyala pada niat keluar, jadi alat itu tidak membuang satu gangguan di sini. Ia membuang penaipan.
Tiga keputusan dalam pelaksanaan itu berbaloi disalin.
Skema itu meminta lebih daripada borang. Borang itu ialah satu textarea tunggal dengan teks pemegang tempat yang mengingatkan orang untuk menyertakan nama dan e-mel mereka. Banyak mesej tiba tanpa kedua-duanya, dan mesej tanpa alamat balasan ialah prospek yang tidak boleh dijawab. Alat itu mengisytiharkan name, email dan website sebagai input bernama di sisi mesej, jadi ejen yang mengisi panggilan itu ada tempat jelas untuk meletakkannya.
Nilai pulangan memberi ejen sesuatu untuk ditindaklanjuti. Panggilan balik execute boleh selesai kepada apa sahaja, dan executeTool menyerahkan satu rentetan kepada ejen, yang dibacanya. Apabila sebuah mesej tiba tanpa alamat e-mel, milik kami mengatakannya dan meminta ejen mengumpulkan satu lalu menghantar mesej kedua. Pengesahan yang hanya menyebut “dihantar” membuang satu-satunya peluang membetulkan panggilan itu sementara pelawat masih ada.
Ejen berkongsi bajet hantar borang. Borang itu membenarkan tiga mesej bagi setiap sesi pelayaran, dikira dalam sessionStorage. Alat itu membaca dan menulis pembilang yang sama, jadi ejen dan pelawat yang menggunakan halaman yang sama mendapat tiga antara mereka dan bukan tiga setiap seorang. Itu memerlukan satu perubahan pada borang, yang sebelum ini membaca pembilang sekali pada muatan halaman lalu memegangnya dalam satu pemboleh ubah. Salinan tercache memberi setiap permukaan bajetnya sendiri dan membenarkan mana-mana yang menulis terakhir menggulung balik yang satu lagi, iaitu jenis pepijat yang hanya muncul setelah permukaan kedua wujud.
Titik akhir itu ialah yang sama yang sudah dihantar borang. Medan bernama disusun ke dalam badan mesej sebelum permintaan keluar, jadi pengendali sedia ada tidak memerlukan sebarang perubahan untuk membacanya, dan muatan itu membawa satu medan source supaya mesej yang dihantar ejen boleh dikira berasingan daripada mesej yang ditaip tanpa menghurai prosa.
Bagaimana melihatnya berfungsi
Laman ini menyajikan token percubaan itu, jadi tiada apa yang perlu dihidupkan. Buka mana-mana halaman di sini dalam Chrome 149 hingga 156 dan panel lebih awal dalam artikel ini akan memberitahu anda sama ada pelayar anda mempunyai alat itu, kemudian butang di bawahnya memanggilnya secara sebenar.
Untuk menyemaknya sendiri, tanya pelayar apa alat yang telah ditawarkan kepadanya:
const mc = document.modelContext || navigator.modelContext;
const tools = await mc.getTools();
console.log(tools.map(t => t.name));
// ["contact_wislr"]
Kedua-dua nama masih diselesaikan dalam Chrome 151, iaitu alias itu pada tonggak terakhirnya. Pada Chrome 152 dan lebih baharu hanya document.modelContext menjawab.
Pada laman yang belum mendaftar dalam percubaan itu, document.modelContext tidak ditakrifkan dan tiada apa-apa daripada ini berjalan. Melancarkan Chrome dengan --enable-blink-features=WebMCP menghidupkan API itu secara tempatan, dan itulah caranya untuk membangun terhadapnya sebelum sebuah token wujud.
Satu perbezaan antara spesifikasi dan pelaksanaan berbaloi diketahui sebelum ia menelan satu petang anda. IDL menaipkan argumen kedua kepada executeTool sebagai satu objek, dan menghantar objek gagal dengan UnknownError: Failed to parse input arguments, yang tidak menyatakan argumen yang mana atau mengapa. Chrome mahukan argumen disirikan:
await mc.executeTool(tool, JSON.stringify({ message: "How do you measure AI referrals?" }));
getTools() menjawab dengan cara yang sama. inputSchema pada alat yang dipulangkan tiba sebagai rentetan JSON dan bukan objek yang didaftarkan, jadi apa-apa yang membacanya semula perlu menghurai dahulu.
Perkara yang lebih berguna sedang duduk pada halaman yang sama
Pendaftaran ialah tempat untuk bermula kerana titik akhir, aliran persetujuan dan e-mel pengesahan sudah wujud. Ia juga perkara terkecil pada halaman itu yang berbaloi didedahkan.
Setiap interaksi yang diselesaikan pelawat dengan tangan ialah calon, dan yang mengambil beberapa langkah paling banyak beroleh manfaat daripada dikecilkan kepada satu panggilan.
| Interaksi | Apa kosnya kepada pelawat hari ini | Alat yang berbaloi didaftarkan |
|---|---|---|
| Surat berita atau tawaran pesanan pertama | Sebuah modal menutup halaman | subscribe_to_offer |
| Carian laman | Menaip pertanyaan, kemudian menyusun semula hasilnya | search_products memulangkan padanan berstruktur |
| Menapis satu kategori | Empat atau lima klik melalui faset | filter_products mengambil saiz, warna dan harga |
| Menyemak stok | Memuatkan satu halaman produk bagi setiap varian | check_availability mengambil SKU dan lokasi |
| Menempah panggilan | Sebuah penjadual dalam iframe | list_available_times dan book_time |
| Status pesanan | Log masuk, kemudian mencari pesanan | get_order_status di sebalik pengesahan sedia ada anda |
Alat baca sahaja ialah tempat yang lebih selamat untuk bermula. Menetapkan readOnlyHint: true pada alat carian atau ketersediaan memberitahu ejen bahawa panggilan itu tidak mengubah apa-apa, dan satu kesilapan menelan kos satu pertanyaan terbuang dan bukan satu rekod yang ditulis ke pangkalan data anda.
Apa-apa yang berada di sebalik pengesahan kekal di sebalik pengesahan. Alat berdaftar berjalan dalam halaman dengan apa jua sesi yang sudah dimiliki pelawat, jadi get_order_status dilindungi tepat sama seperti halaman akaun yang dibacanya, dan tidak lebih.
Tiada apa-apa di sini mengubah sebab popup itu dibina
Sebuah alat hanya berjalan selepas seseorang meminta sesuatu. Mereka memberitahu pembantu mereka untuk mendapatkan diskaun itu, dan pembantu itu menjumpai fungsi yang melakukannya. Orang itu memang akan menyerahkan satu alamat melalui apa jua laluan yang anda berikan kepada mereka.
Popup itu disasarkan kepada orang yang bertentangan. Seseorang yang belum memutuskan apa-apa dan sedang menuju keluar, ditangkap oleh sebuah pemasa atau oleh tetikus yang bergerak ke arah butang kembali. Ia melayakkan tempatnya dengan menukarkan orang yang tidak akan menukar, dan itulah satu-satunya sebab sebuah pasukan menerima mengganggu semua orang lain untuk mendapatkan mereka.
Mematikan popup untuk trafik ejen oleh itu tidak menelan kos apa-apa, kerana pelawat tersebut memang bukan sasarannya. Memadamnya untuk semua orang melepaskan alamat yang ia dibina untuk ditangkap, berserta bertahun-tahun e-mel yang berjalan daripadanya.
Pasukan pemasaran diukur pada sepantas mana senarai itu berkembang dan sebanyak mana hasil yang dibawa e-mel kitaran hayat. WebMCP tidak menggerakkan mana-mana nombor itu. Ia memberi pelawat yang rela satu laluan yang lebih bersih dan meninggalkan sebab gangguan itu tidak tersentuh.
Sokongan menentukan selebihnya. Chromium sahaja, dalam ujian yang berakhir pada Chrome 156, dengan Apple menentang. Menggantikan borang pendaftaran dengan sebuah alat akan membuang laluan yang digunakan hampir setiap pelawat sebagai tukaran kepada satu laluan yang berfungsi dalam sebahagian kecil daripada satu pelayar.
Buat masa ini ia satu jalan masuk tambahan. Popup menyala lebih jarang apabila lebih banyak lawatan tiba melalui pembantu, dan ia hilang sepenuhnya pada hari mengumpul satu alamat berhenti berbaloi. Tiada spesifikasi boleh mempercepatkan hari itu.
Pendaftaran terbuka ialah cara orang ditimbus dengan mel
Sebuah alat pendaftaran mengambil alamat e-mel yang tidak boleh disemaknya lalu menghantar mel kepadanya. Sesiapa yang mampu memandu sebuah ejen boleh menghalakannya ke mana-mana peti masuk. Borang anda mempunyai lubang yang sama, kerana alamat di sebalik kedua-duanya ialah satu URL awam yang boleh dihantar sebuah skrip tanpa pernah memuatkan halaman anda.
Serangan itu ada namanya. Dalam satu pengeboman senarai, alamat seorang mangsa diserahkan kepada ratusan atau ribuan laman serentak, satu permintaan kepada setiap satu. Setiap laman melihat satu pendaftaran biasa yang tidak menonjol dan tiada apa yang kelihatan salah di mana-mana. Mangsa itu menerima ribuan e-mel pengesahan dalam sejam, dan banjir itu biasanya menjadi penyamar untuk sesuatu yang lain yang tiba dalam peti masuk yang sama: satu amaran penipuan daripada bank mereka, satu tetapan semula kata laluan, satu resit untuk pembelian yang dibuat seseorang dengan kad mereka. Reputasi penghantaran anda turut terjejas, dan itu bahagian terkecil daripada apa yang berlaku.
Bentuk itu mengalahkan pertahanan yang paling kerap dicapai orang. Had kadar mengira permintaan, dan larian yang menghantar anda tepat satu permintaan tiada apa-apa untuk dikira.
Empat perkara yang membantu.
Letakkan satu cabaran di hadapan pendaftaran, supaya penyerahan automatik perlu melepasi sesuatu yang dilepasi orang sebenar tanpa perasan.
Nyahduplikasi mengikut alamat dan simpan satu senarai penindasan, supaya peti masuk yang sama tidak boleh didaftarkan berulang kali dan permintaan kedua untuk alamat yang sudah ada pengesahan tertunggak tidak menghantar apa-apa langsung.
Minta orang mengesahkan sebelum anda menambah mereka ke dalam senarai, supaya panggilan yang disalahgunakan tidak boleh menghasilkan satu langganan. Satu peringatan yang memerangkap orang: di bawah undang-undang antispam Kanada, e-mel pengesahan dikira sebagai mesej komersial dengan sendirinya, jadi menghantar satu kepada alamat yang tidak pernah meminta itulah pelanggarannya dan bukan perlindungannya. Mahkamah Jerman berbelah bahagi tentang soalan yang sama. Pengesahan ialah tetapan lalai yang betul di kebanyakan tempat dan ia bukan tetapan sejagat.
Rekodkan dari mana setiap pendaftaran datang sewaktu barisnya ditulis. Menyelesaikannya selepas satu insiden bermakna meneka alamat mana yang benar.
Membuktikan persetujuan lebih sukar apabila perisian yang mengklik
Penyerahan borang menghasilkan satu rekod tentang apa yang dilihat pelawat. Kotak semak, label di sebelahnya, pautan privasi, dan cap masa semuanya berada di pihak anda.
Panggilan alat menghasilkan satu alamat e-mel dalam argumen fungsi. Apa yang diberitahu kepada pelawat sebelum ejen bertindak berlaku dalam perbualan yang anda tiada capaian kepadanya. Di bawah GDPR, persetujuan mesti diberi secara bebas, khusus, bermaklumat dan jelas, dan seorang pengawal mesti mampu membuktikannya kemudian. Alamat yang tiba melalui ejen tidak memenuhi satu pun daripada itu dengan sendirinya.
Pengesahan dua peringkat memikul kebanyakan beban di sini untuk kali kedua. E-mel pengesahan pergi kepada alamat itu sendiri, dan mengkliknya menghasilkan satu tindakan bercap masa oleh pelanggan dan bukan oleh sesuatu yang bertindak untuk mereka. Kekalkan pendaftaran berperantara ejen boleh dibezakan dalam simpanan supaya satu audit boleh mengasingkannya daripada penyerahan borang dan bukan melayan keseluruhan senarai sebagai satu asal usul.
Pendaftaran ini hilang secara senyap, jadi bina pengiraannya dahulu
Ejen yang memanggil alat berdaftar melaksanakan satu panggilan balik di dalam halaman. Tiada paparan halaman, tiada peristiwa penyerahan borang, dan kerap kali langsung tiada sesi dalam erti kata yang dimaksudkan alat analitis pelayar. Penukaran itu berlaku dan pelanggan itu nyata, sementara laporan menunjukkan tiada apa-apa. Sediakan ini dengan salah dan kegagalannya senyap: pelanggan meningkat, tiada sumber menjelaskannya, dan tiada apa-apa dalam antara muka yang kelihatan rosak.
Ini jurang struktur yang sama yang menyembunyikan perayap AI dan rujukan AI daripada analitis pelayar, tiba pada satu lapisan baharu. Perayap tidak pernah menjalankan JavaScript yang akan melaporkannya. Ejen menjalankan JavaScript itu, dan menjalankan bahagian yang melengkapkan penukaran sambil melangkau setiap bahagian yang akan mengukurnya.
Permintaan yang mengenai titik akhir langganan anda ialah satu-satunya tempat penukaran itu wujud dalam bentuk yang anda miliki. Tandakannya di situ, dalam log pihak pertama, dan saluran itu menjadi sesuatu yang boleh anda ukur suku tahun hadapan.
Empat perkara yang menghalangnya daripada hilang
Cap sumbernya pada pelayan, dalam tulisan yang sama yang mencipta pelanggan itu. Halaman menghantar satu medan sumber bersama permintaan, dan pelayan meletakkannya pada baris itu di sebelah alamat dan cap masa. Menyelesaikannya kemudian daripada susunan kata mesej ialah tekaan, dan perujuk tidak akan menyelamatkan anda, kerana ejen kerap kali langsung tidak menghantar apa-apa.
Laporkan pendaftaran itu sebelum panggilan rangkaian dan bukan di dalam pengendali kejayaan. Panggilan yang ditinggalkan di pertengahan, atau yang gagal selepas pelayan sudah melakukan kerjanya, tidak pernah sampai ke cabang kejayaan. Laporkannya semasa keluar dan anda mengira percubaan itu, iaitu nombor yang sebenarnya anda mahukan.
Cipta peristiwa itu dalam alat analitis anda sebelum anda menghantar alat tersebut. Peristiwa tersuai lazimnya diterima kemudian digugurkan daripada setiap laporan sehingga satu matlamat dengan nama sepadan wujud, jadi peristiwa yang tidak berdaftar memulangkan kod kejayaan dan muncul di mana-mana pun tidak. Kesenyapan dalam papan pemuka bukan bukti bahawa tiada apa yang menyala, dan ia cara paling mudah untuk membazir seminggu menyahpepijat kod yang sebenarnya berfungsi sepanjang masa.
Selaraskan sekali seminggu, dengan sengaja. Kira baris dalam data anda sendiri yang membawa sumber ejen, kemudian bandingkannya dengan apa yang ditunjukkan analitis anda untuk hari yang sama. Dua nombor yang sepadan bermakna paip itu utuh. Jurangnya ialah saiz titik buta anda. Trafik di satu sisi dan sifar di sisi yang lain bermakna peristiwa itu langsung tidak sampai, dan anda kini mengetahuinya dalam seminggu dan bukan pada hujung suku tahun.
Apa yang perlu dilakukan mengenainya suku tahun ini
Mendaftarkan satu alat mengambil satu petang. Mulakan dengan tawaran yang anda sudah mengganggu orang untuknya, kerana titik akhir, aliran persetujuan dan e-mel pengesahan sudah dibina dan berfungsi.
Kekalkan borang itu. Hampir semua orang yang melawat masih akan menggunakannya, dan itu kekal benar selagi Apple mempertahankan pendiriannya.
Gunakan document.modelContext, dan daftarlah dalam percubaan Chrome jika anda mahu pelawat biasa mencapai alat itu dan bukan pembangun dengan satu bendera dihidupkan.
Tambah medan sumber pada titik akhir pendaftaran anda sebelum alat itu dihantar. Melakukannya kemudian bermakna anda tidak dapat mengetahui pendaftaran mana yang sudah ada dalam pangkalan data anda datang daripada seorang ejen.
Baca hasilnya daripada pelayan anda sendiri. Sebuah harta analitis langsung tidak akan menunjukkan pendaftaran ini kepada anda, dan tiada apa-apa di dalamnya yang kelihatan rosak sementara ia tidak dikira.
Nombor yang berbaloi diperhatikan bukan mana-mana yang di atas. Ia bahagian lawatan anda yang tiba melalui seorang pembantu, yang menentukan bila ini berhenti menjadi satu eksperimen, dan anda boleh mengukurnya daripada log anda hari ini sama ada anda pernah mendaftarkan satu alat atau tidak.