Dokumentasi OpsIQ

(Yang membangun, mengoperasikan, dan Agihan kepanjangan OpsIQ.

Ini ialah dokumentasi lengkap untuk OpsIQ. Sediakan produk, jalankan sokongan, konfigurasikan AI, urus CRM, pasang widget, bina penyambung, panggil REST API, terima webhook, bungkus aplikasi pasaran, dan kendalikan pemasangan yang dihoskan sendiri.

Panduan pelangganPanduan administrasi arifanPanduan pengembang untuk pengembangRujukan CRMSDK PenyambungMemerlukan APIMempelindungi diri sendiri
Skop

Skop buku panduan ini

Semua yang dilakukan oleh OpsIQ, di satu tempat: cara setiap skrin berfungsi, cara menyambungkan sistem anda sendiri, dan cara membina di atasnya. Mulakan di mana-mana, bahagian-bahagiannya mengikut susunan yang sama seperti bar sisi pentadbir.

Skop
Peta dokumentasiBuku panduan diatur di sekitar produk OpsIQ, mengikuti urutan yang sama dengan bilah sisi admin.Peta dokumentasiOpsIQ produk produkAUDIENCEOperatorBINAPembangunRUNAdministratorORANG KERJA HIDUPGuna OpsIQSkrin produk dan aliran kerjaDisertakanEkstend OpsIQ__Penghubung, APIs dan widgetDisertakanDiagramkan OpsIQ_Keselamatan, cron dan penggunaanDisertakanRujukanKontrak pakej, API dan webhookDisertakan1CHOOSE AUDIENCEpengembang atau operator2FOLLOW THE UIPengg_unaan Bagian-bagian Cermin OpsIQ_3USE SOURCE TRUTHStatus org berasal dari bangunan
Buku panduan diatur di sekitar produk OpsIQ, mengikuti urutan yang sama dengan bilah sisi admin.
Portal Studio -kenttäopas

Kelegapan menggunakan administrator dan panduan pengembang yang telah didedikasikan untuk arsitektur Portal, halaman, komponen, pratinjau, Pusat Bantuan, identitas, SCIM, rilis diatur, ekstensi, migrasi dan sertifikasi.

Bukalah panduan Portal Studio

Apa yang ada di sini

Kendalikan produk

Setiap skrin dalam pentadbir: analitik, sembang langsung, tiket, CRM, pangkalan pengetahuan, Kecerdasan Laman, promosi dan portal akaun pelanggan. Apa yang dilakukan oleh setiap halaman, apa maksud angka-angkanya, dan apa yang perlu dilakukan apabila ia kelihatan salah.

Sistemmu akan terhubung.

Widget laman web, peti mel e-mel, webhook masuk dan keluar, serta pustaka penyambung untuk platform seperti Shopify, WooCommerce, WHMCS, Zendesk, Stripe, Slack dan Gmail.

Binalah sendiri

Pembina Penyambung untuk penyambung tanpa kod, Tindakan & Pencetus jika anda lebih suka tidak menggunakan penyambung langsung, dan REST API dengan setiap tindakan, skop dan kod ralat.

Operasikan itu

Peranan dan kebenaran, keselamatan, cron, diagnostik, sandaran, serta penggunaan dihoskan dan dihoskan sendiri.

Di mana untuk memulai

1
Andorra Anda menjalankan OpsIQ hari ke hari

Baca bahagian skrin mengikut susunan bar sisi. Setiap satu dimulakan dengan tujuan halaman itu, jadi anda boleh berhenti sebaik sahaja anda mendapat apa yang anda perlukan.

2
Jika kau melakukannya

Ini adalah bagian yang memutuskan apakah segala sesuatunya terus bekerja.

3
Jika kau membangun integrasi

Mulakan di Penyambung, kemudian Connector Builder, kemudian REST API dan webhook. Bacanya mengikut urutan itu dan anda akan melihat setiap cara OpsIQ boleh berhubung dengan sistem lain.

💡
Dua perkara mengubah apa yang anda lihat. Kebenaran menyembunyikan halaman yang tidak boleh dibuka oleh peranan anda, jadi bahagian yang diterangkan di sini mungkin tiada dalam bar sisi anda. Minta pentadbir menyemak peranan anda. Dan penyambung membawa label kematangan Production, Beta, Preview atau Template; binaan yang sedang berjalan dan manifes penyambungnya adalah sumber yang sahih tentang yang mana satu anda miliki, bukan halaman ini.
Mulailah dari sini.

Apa OpsIQ Keistimewaan bisnis Anda

OpsIQ ialah platform operasi perniagaan berasaskan AI yang lengkap. Ia menggantikan analitik, sembang langsung, meja bantuan, CRM, kit alat SEO, perisian tengah integrasi dan platform pembangun anda dengan satu panel pentadbir bersatu di mana setiap alat berkongsi konteks pelanggan yang sama. Daripada menggabungkan 8-12 produk SaaS yang berasingan, anda memasang OpsIQ sekali dan mengendalikan segala-galanya dari satu skrin.

Platform
Ke_utamaan OpsIQ mudaSebuah otak AI pusat terhubung ke live chat, CRM, tiket, Site Intelligence, promosi dan analitik.¡Live chatPromosiAI CRMSite IntelTiketAnalitikOpsIQOTAK AI1ONE WORKSPACESemua alat-alat dalam satu sistem2SHARED BRAINSatu konteks pelanggan3ANYWHEREAwan atau dihoskan sendiri
OpsIQ Dia adalah salah satu platform dengan satu konteks pelanggan bersama, setiap feed alat, dan didukung oleh, otak AI yang sama.

Semuanya OpsIQ Memang · detailnya

Analitik laman web dan perisikan pelawat

Penjejakan pelawat masa nyata

Setiap muatan halaman, klik, tatal dan peristiwa navigasi ditangkap dalam masa nyata. Lihat siapa yang berada di laman anda sekarang, halaman yang mereka lihat, berapa lama mereka berada di situ dan dari mana mereka datang, semuanya tanpa kuki pihak ketiga.

Log dan sesi lawati layorator

Sejarah penuh setiap pelawat dengan peranti, pelayar, sistem pengendalian, negara, bandar, perujuk, parameter UTM, halaman pendaratan dan resolusi identiti. Sesi mengumpulkan paparan halaman menjadi perjalanan supaya anda dapat melihat keseluruhan laluan yang diambil oleh pelawat.

Ulangan sesi

Main semula gaya garis masa bagi sesi pelawat yang dirakam. Lihat dengan tepat apa yang dilakukan pengguna: pergerakan tetikus, klik, tatal, peralihan halaman dan interaksi borang. Gunakannya untuk mendiagnosis isu UX, memahami titik keciciran dan mengesahkan aliran penukaran.

Makanan langsung vinf

Strim aktiviti pelawat masa nyata semasa ia berlaku. Lihat paparan halaman, permulaan sembang, penghantaran borang dan isyarat niat dikemas kini setiap beberapa saat. Tapis mengikut negara, peranti atau perujuk untuk menumpukan pada segmen trafik tertentu.

Halaman Top

Halaman disusun mengikut lawatan, masa penglibatan, kadar lantunan, penukaran dan aktiviti sokongan. Kenal pasti kandungan anda yang berprestasi tertinggi dan halaman yang perlu diperbaiki.

intelijen Geofififier

Negara, kota, dan wilayah rusak dengan peta.

Saluran corong yang tidak nyaman

Jejaki isyarat niat pelawat (lawatan ke halaman harga, kunjungan berulang, corak melayari dokumentasi dan interaksi sokongan) untuk mengenal pasti pelawat yang berkemungkinan membeli, berhenti melanggan atau memerlukan bantuan.

Eksperimen A/B

Lulusan tes pemisahan di website Anda langsung dari OpsIQ_. Buat varian, set alokasi lalu lintas, definisikan tujuan konversi, dan ukur signifikansi statistik. Tidak ada alat pengujian eksternal yang diperlukan.

tracking galat JavaScript

Tangkap ralat JavaScript sebelah klien daripada laman web anda secara automatik. Lihat mesej ralat, surihan tindanan, pelayar yang terjejas, kiraan kekerapan, dan halaman mana yang mencetuskannya. Nyahpepijat isu bahagian hadapan tanpa pemantauan ralat yang berasingan.

Catatan Peristiwa Lenyap

Setiap acara yang dilacak (view page, event custom, interaksi chatting, forms submissions, pembelian) dalam log yang dapat dicari dan dapat disaring dengan data meta penuh.

Penjualan dan konversi

Jejaki pesanan, hasil, bayaran balik, pembaharuan langganan, dan atributkan penukaran kepada sumber trafik, kempen dan perjalanan pelawat. Papan pemuka hasil dengan perbandingan tempoh dan analisis trend.

Lead

Pelawat berniat tinggi dikenal pasti melalui corak tingkah laku. Beri skor kepada bakal pelanggan berdasarkan lawatan halaman, masa di laman, kekerapan kembali, interaksi sokongan dan isyarat tersuai. Salurkan bakal pelanggan terus ke saluran paip CRM.

Site Intelligence (analisis SEO dan kandungan)

Rangkak laman

Rangkakan automatik seluruh laman web anda untuk menemui halaman, mengesan pautan rosak, mencari tag meta yang tiada, menyemak teks alt imej, mengesahkan URL kanonik, dan memetakan struktur laman anda. Jadualkan rangkakan untuk dijalankan setiap hari, setiap minggu, atau atas permintaan.

Audit SEO Teknikal

Analisis teknis koprehensif: skor kecepatan halaman, responsif mobileness, Inti Web Vitals, SSL status sertifikat, rantai redirect, pendeteksian konten duplikat, analisis kedalaman merangkak, dan validasi data terstruktur.

audit kandungan

Nilai setiap halaman untuk kualiti kandungan, kiraan perkataan, skor kebolehbacaan, ketumpatan kata kunci, struktur tajuk, nisbah pautan dalaman/luaran dan kesegaran. Kenal pasti kandungan nipis, halaman pendua dan jurang kandungan.

Pencarian bertenaga AI

Carian semantik merentas seluruh kandungan laman web anda. Tanya soalan dalam bahasa biasa tentang kandungan anda dan dapatkan jawapan yang disintesis oleh AI dengan rujukan halaman sumber.

Pelacakan pangkat SERP

XAWN Monitor peringkat mesin pencari Anda untuk kata kunci target di seluruh Google dan mesin lain. Posisi trek berubah dari waktu ke waktu, dibandingkan dengan pesaing, dan lihat peringkat halaman mana yang akan digunakan.

Penyelidikan kata kunci

Temukan kesempatan kata kunci berdasarkan konten, analisis pesaing, dan data volume pencarian Anda. Dapatkan saran untuk topik konten baru, variasi ekor panjang, dan target optimasi isi.

Analisis alisin bowlink

Pantau profil pautan masuk anda. Lihat laman mana yang memaut kepada anda, jejaki pautan baharu dan yang hilang, analisis taburan teks sauh, dan kenal pasti peluang membina pautan.

Grid SEO setempat

Untuk perniagaan yang mempunyai lokasi fizikal: visualkan keterlihatan carian tempatan anda merentas grid geografi. Lihat bagaimana kedudukan anda berbeza mengikut lokasi, jarak dari perniagaan anda dan niat carian.

Sinkronisasi Profil Bisnis Google Business

Hubungkan Profil Bisnis Google Anda ke OpsIQ. Sync review, postingan, Q&A, foto, dan informasi bisnis. Urus daftar GBP Anda dari dalam OpsIQ Tanggapan terhadap ulasan, pos penerbitan, dan wawasan monitor.

Laporan yang dijadwalkan

Laporan Automated SEO dan analitik yang dihasilkan pada jadwal Anda (secara harian, mingguan, bulanan). Laporan termasuk perubahan peringkat, tren lalu lintas, masalah teknis ditemukan, dan kinerja konten. Keluaran White-label tersedia untuk lembaga.

Sokongan dikuasakan AI

Sembang AI pelanggan

AI menjawab soalan pelanggan di laman web anda 24/7 menggunakan pangkalan pengetahuan anda, data platform yang disambungkan (pesanan, akaun, langganan) dan gesaan latihan tersuai. Menyokong berbilang pembekal AI: Claude (Anthropic), GPT (OpenAI), Gemini (Google) dan Grok (xAI).

Pembantu AI pentadbir

Copilot AI di dalam panel pentadbiran anda yang membantu anda menulis jawapan tiket, rancang komunikasi pelanggan, analisis trend sokongan, cari data pelanggan di seluruh platform tersambung, dan jalankan tindakan melalui sistem sambungan.

Pengetahuan AI membumi

AI ini didasarkan pada artikel dasar pengetahuan Anda, entri FAQ, dokumentasi produk, dan data platform yang terhubung. Ini tidak berhalusinasi. Ini menjawab dari informasi bisnis Anda yang sebenarnya atau meningkat ketika tidak pasti.

Oto-diserahkan kepada manusia

Apabila AI tidak dapat menyelesaikan soalan, mengesan kekecewaan, atau pelanggan meminta manusia, ia secara automatik menyerahkan kepada pasukan anda dengan konteks perbualan penuh. Pengembalian automatik kepada AI apabila ditolak/tamat masa boleh dikonfigurasikan.

Gesaan latihan AI

Diakui instruksi terpisah untuk pelanggan-facing AI dan admin-fanding AI. Kontrol nada, batas, aturan eskalasi, topik dilarang, dan perilaku spesifik bisnis. Konfigurasi per-workspace didukung.

Sejarah dan audit AI

Setiap perbualan AI dilog dengan butiran permintaan/respons penuh, penggunaan token, penjejakan kos, pembekal yang digunakan dan versi model. Semak perbualan untuk mengenal pasti jurang latihan dan meningkatkan ketepatan AI.

AI wawasan

Analisis automatik corak perbualan AI. Lihat soalan biasa, kadar penyelesaian, kekerapan penyerahan, kepuasan pelanggan mengikut topik, dan bahagian yang memerlukan latihan AI yang lebih baik.

Konfigurasi AI per-ruang kerja

Setiap laman/ruang kerja yang disambungkan boleh menggunakan pembekal AI, model, suhu, bajet token dan gesaan latihannya sendiri. Syarikat SaaS boleh menggunakan Claude untuk produk utama dan GPT untuk jenama sekunder.

Diagnosis AI dan BYOK_

Dua mod AI: AI Terurus (termasuk dalam rancangan anda, tidak API kekunci diperlukan) atau Bawa Kekunci Anda Sendiri (gunakan anda sendiri OpenAI/Anthropic/Google API kekunci untuk kawalan penuh ke atas pemilihan model dan kos). Kedua-duanya adalah kelas pertama, setiap ciri berfungsi dengan mana-mana mod.

Belanjawan token AI dan kawalan kos

Tetapkan belanjawan token bulanan, had bagi setiap perbualan dan amaran baki rendah. Jejaki perbelanjaan mengikut penyedia, ruang kerja dan perbualan. Elakkan kos yang tidak terkawal dengan siling mutlak.

Tiket dan helpdesk

Sistem tiket pribumi

Meja bantuan lengkap dengan jabatan, keutamaan (rendah/sederhana/tinggi/segera), status, penjejakan SLA, nota dalaman, balasan pelanggan, lampiran fail dan perbualan berbenang. Tiada meja bantuan luaran diperlukan.

AI triage dan auto-reply

AI menyaring tiket masuk secara automatik mengikut jabatan dan keutamaan. Dayakan auto-balas untuk jabatan yang selamat. AI merangka dan menghantar respons selepas kelewatan yang boleh dikonfigurasi (lalai: 2 minit) supaya manusia boleh campur tangan dahulu.

Email e-mel ingestion

Sambungkan peti mel (Gmail, IMAP atau khusus pembekal) untuk mencipta tiket secara automatik daripada e-mel masuk. Balasan kepada e-mel pemberitahuan tiket mengemas kini utas tiket.

Portal tiket ditancapkan

Ditanamkan sebuah portal tiket pelanggan di website anda. Pelanggan dapat menyerahkan tiket, melihat sejarah mereka, membalas tiket terbuka, dan memeriksa status, semua dicap pada desain anda.

Penggabungan Tiket

Gabungkan tiket pendua ke dalam satu bebenang. Tiket yang digabungkan menunjukkan [Merged] pada baris subjek. Semua sejarah perbualan dikekalkan dalam tiket yang kekal.

Kembali kepada AI

Selepas ejen manusia mengambil alih tiket, gunakan "Kembali ke AI" untuk biarkan AI meneruskan auto-jawab pada tiket itu. Berguna bila bahagian yang diperlukan oleh manusia telah diselesaikan tetapi pelanggan mempunyai soalan lanjut yang boleh ditangani oleh AI.

Kopilot Kotak Masuk KL Boxbox

Pengurusan tiket dibantu AI daripada paparan peti masuk. Kopilot mencadangkan balasan, meringkaskan sejarah perbualan, mengesyorkan tugasan keutamaan/jabatan dan boleh melaksanakan tindakan pada platform yang disambungkan.

Sembang dan sokongan masa nyata

Kotak masuk Chat

Sembang pelanggan masa nyata yang diurus daripada peti masuk bersatu. Lihat semua perbualan aktif, identiti pelanggan, sejarah perbualan dan cadangan AI. Berbilang ejen boleh bekerjasama dalam satu perbualan.

Peraturan sembang proaktif

Cetuskan mesej sembang berdasarkan tingkah laku pelawat: masa di halaman, URL tertentu yang dilawati, kedalaman tatal, bilangan lawatan semula, niat keluar, atau peristiwa tersuai. Contoh: tunjukkan mesej bantuan selepas 60 saat di halaman harga.

Widget

Widget sembang boleh suai yang dibenamkan pada laman web anda. Menyokong sembang AI, sembang ejen langsung, penghantaran tiket, carian pangkalan pengetahuan dan identiti pelawat. Responsif, mudah diakses dan boleh dijenamakan.

Tinjauan CSAT

Kumpulkan penilaian kepuasan pelanggan selepas interaksi sembang dan tiket. Reka tinjauan dengan soalan, skala penilaian dan gesaan susulan anda sendiri. Keputusan disalurkan ke dalam prestasi pasukan dan cerapan AI.

Survei email pasca-chat jarbi

Selepas sembang tamat, pelawat yang e-melnya diketahui boleh menerima satu mel berjenama dengan ringkasan AI tentang perkara yang telah diselesaikan dan soalan satu klik "Adakah ia mudah?" Ya/Tidak. Sekali bagi setiap urutan, pautan sekali guna yang ditandatangani, setiap penghantaran dilog, dan hasilnya dipaparkan di halaman Maklum Balas sebagai isyarat tersendiri di sebelah bintang dalam sembang.

Indentitas balikan palsu

Setiap item maklum balas yang membawa seseorang menunjukkan orang itu: nama, e-mel, klik terus ke perjalanan pelanggan penuh dan kenalan CRM mereka, dan balasan E-mel atau draf AI satu klik yang berasaskan sejarah sebenar mereka.

AI Penulisan AI

Pembantu penulisan AI yang berasingan untuk menulis draf e-mel, balasan tiket, pengumuman dan komunikasi pelanggan. Menggunakan arahannya sendiri (bukan otak sembang) untuk penulisan perniagaan yang profesional.

CRM Berasaskan AI

Pusat Komando CRM

Satu skrin yang menunjukkan keseluruhan keadaan CRM anda: nilai saluran jualan, kelajuan urus niaga, tugasan akan datang, urus niaga berisiko, aktiviti ejen dan cadangan AI. Halaman utama CRM ialah titik permulaan harian anda.

Kenalan dan syarikat

. . -===\"==2\"=\"Tujuan\"=-

Berikan bantuan dan papan pipeline

Papan perjanjian gaya Kanban visual dengan peringkat boleh suai. Seret perjanjian antara peringkat, tetapkan nilai, tentukan pemilik, jejak tarikh tutup dan lihat nilai paip pada setiap peringkat. Paip berbilang disokong.

AI menangani coaching

AIAA menganalisis setiap kesepakatan dan menyediakan coaching: sinyal risiko (pergi tenang, pesaing disebutkan, kekhawatiran anggaran), rekomendasi lanjutan-terbaik-aksi, probabilitas menang, dan menyarankan follow-up timing.

Laporan dan siaran

Ramalan hasil berdasarkan data saluran jualan, kadar penutupan sejarah dan kelajuan urus niaga. Laporan termasuk saluran jualan mengikut peringkat, mengikut pemilik, mengikut sumber, kadar penukaran, purata saiz urus niaga dan tempoh kitaran jualan.

Agen Prospeksi Kesiagaan (SDR)

Pencarian prospek berkuasa AI yang mengenal pasti bakal pelanggan daripada data pelawat, isyarat prospek dan aktiviti platform yang disambungkan. Mencadangkan sasaran jangkauan, mendrafkan mesej awal dan memberi skor kualiti prospek.

Urutan susulan

Urutan susulan berbilang langkah automatik: e-mel, tunggu, e-mel, semak respons, tingkatkan. Tentukan urutan untuk prospek baharu, urus niaga yang tergendala, semakan selepas pembelian dan kempen penglibatan semula.

Sepeda dan retensi kehidupan

Jejaki peringkat kitaran hayat pelanggan (prospek, bakal pelanggan, pelanggan, berhenti melanggan) dengan peralihan automatik. Ejen pengekalan memantau isyarat berhenti melanggan dan mencadangkan tindakan campur tangan.

Agen pengurus Data

Ejen AI yang membersihkan dan memperkaya data CRM anda secara berterusan: menyahduplikasi kenalan, mengisi medan yang tiada, mengesahkan e-mel, menyeragamkan nama syarikat, dan menandakan rekod yang lapuk.

Bina CRM saya

Konfigurasi CRM dalam bahasa semula jadi: beritahu AI bagaimana proses jualan anda dan ia membina peringkat saluran jualan, medan tersuai, templat urus niaga dan peraturan automasi anda.

Periksa kesehatan CRM

Audit automatik kualiti data CRM anda: kenalan pendua, urus niaga tanpa langkah seterusnya, saluran jualan yang lapuk, maklumat kenalan yang tiada, dan pemarkahan kelengkapan data.

Dial Kepercayaan

Pengendalian otonomi tingkat tiga untuk setiap agen AI CRM: Autopilot (AI bertindak secara independen), Copilot (aliai menyarankan, menyetujui manusia), dan Manual (AI mengamati hanya). Atur dial per agen, per tipe aksi, dan per deal nilai ambang.

AI agen 4 AI

CRM menjalankan empat ejen AI khusus: Steward (kualiti data), SDR (pencarian prospek), Retention (pencegahan pelanggan berhenti), dan Analyst (laporan dan pandangan). Setiap ejen mempunyai tetapan Trust Dial tersendiri.

Penyambung dan integrasi

Penyambung siap bina

Penyambung sedia-untuk-guna untuk Shopify, WooCommerce, BigCommerce, Magento 2, PrestaShop, OpenCart, osCommerce, WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Postmark, Hantar semula, SendGrid, Mailgun, Gmail IMAP, Slack, dan Profil Perniagaan Google. Setiap sambungan membawa tindakan AI khusus platform, pengetahuan, dan penyegerakan data.

Pembina Penyambung

Build connectors suai untuk platform apapun, tidak ada kode, AI-assisted, atau kode penuh. pembina mendukung REST dan GraphQL APIs, OAuth Aliran kode otorisasi, webhook auto-registrasi dengan skema Stripe dan tandatangan sederhana, pagination (offset, page, cursor, and link-header), list/error transforms, multi-action context, dan marketplace packaging.

Penulisan penyambung AI-assisted

ConnectorBuilderAI membantu anda membina penyambung: terangkan apa yang anda mahu dan ia mencadangkan tindakan, menulis pengendali permintaan dan memetakan respons API. Mengendalikan pengesahan, penomboran halaman dan pengendalian ralat secara automatik.

Aliran OAuth untuk mana-mana penyambung

Aliran kebenaran OAuth dalam aplikasi generik yang berfungsi dengan mana-mana penyambung. Sokongan PKCE, pengurusan keadaan berskop laman web, penyegaran token automatik. Penyambung menentukan parameter OAuth mereka dan OpsIQ mengendalikan aliran itu.

Bus kapabilitas bus (sambungan lebar platform)

Penyambung tidak hanya menambahkan tindakan platform. Mereka boleh memberi kuasa kepada ciri-ciri inti melalui "basi" keupayaan. Sebuah penyambung menyatakan keupaan (kalendar, perkayaan, esign dalam CRM; local_listing, rank_data dalam Kecerdasan Laman; web_analytics dalam Analisis; payment_provider dalam Pembayaran; email_sync dalam Peti Mel; video_meeting dalam Komunikasi) dan melaksanakan set kaedah kecilnya; OpsIQ menjumpainya melalui CapabilityRegistry dan menyambungkannya ke UI, garis masa Pelanggan _360, dan aksi AI. Beberapa penyambungan boleh menawarkan keuparaan yang sama tanpa kunci masuk. Lihat connectors/PLATFORM_CONNECTORS. md.

Dipasang sebelum hari pasaran di tier

Penyambung hidup dalam salah satu daripada dua aras. Penyambungan pra-dipasang (connectors/) adalah aktif-daftar keluar dari kotak, disimpan lean kepada hanya rujukan tanpa kunci dan penyedia yang paling banyak digunakan per keupayaan (cth: Kalendar Google, Gmail, Profil Perniagaan Google). Penyangkap Pasaran (marketplace_connectors /) boleh dikesan tetapi inert sehingga dipasang, cth: Microsoft 365 Kalendar, Outlook DocuSign, Stripe, GA4, SerpApi, Zoom. Setiap jambatan menampakkan senarai pasar supaya UI dan AI boleh minta "pasang dari pasar" (maklum-untuk-pasang) bila keupayaan tiada penyedia sedia ada, tidak pernah butang rosak.

Pasaran penghubung

Terbitkan penyambung anda ke pasaran OpsIQ. Pakejkan penyambung dengan profile.json, knowledge.json, workflow_recipes.json dan arkib bertandatangan. Pasaran menyokong penyambung percuma dan berbayar dengan pengebilan berbilang sumber.

Tandatangan penyambung

Semua penyambung ditandatangani secara kriptografi untuk pengesahan integriti. Tandatangan disemak semasa pemasangan. Gunakan alat resign_all_connectors untuk menandatangani semula selepas kemas kini.

SmartLookup

Sistem padanan kabur deklaratif untuk tindakan penyambung. Tentukan peraturan carian dan OpsIQ memadankan pertanyaan pengguna dengan entiti platform menggunakan algoritma fuzzyScore dan smartRank. Contoh: find_country("germ") memadankan Germany dengan keyakinan 88.9%.

Kontrak aksi

API OpsIQ Umum menerbitkan setiap operasi JSON berdaftar sebagai tindakan bernama yang boleh ditemui. Gunakan meta.actions untuk jumlah langsung dan kontrak bertaip yang tepat; pakej penyambung mengisytiharkan tindakan vendor mereka sendiri melalui ActionExecutor yang bersatu.

Resipi penyambung

Resepi aliran kerja prabina yang menggabungkan beberapa tindakan sambungan ke dalam aliran kerja perniagaan biasa. Contoh: "Apabila pesanan baru datang pada Shopify, cipta tiket, kemaskini CRM, dan hantar pemberitahuan Slack."

Pengetahuan ilmu pengetahuan sinkron

Penyambung mengisytiharkan topik pengetahuan yang disegerakkan ke pangkalan pengetahuan AI. Artikel bantuan, panduan persediaan dan langkah penyelesaian masalah khusus platform tersedia secara automatik kepada AI tanpa perlu memasukkan pengetahuan secara manual.

Platform pengembang untuk bandar

Memerlukan API

Nama A JSON API Ahligon mencakup setiap administrator terdaftar JSON operasi, denganAPI Otentikasi kunci, isolasi ruang kerja, ruang lingkup, batas tingkat, penulisan idempoten, OpenAPI, dan koleksi Postman yang dihasilkan.

Webhook

Webhook keluar untuk semua peristiwa utama: pesanan, invois, langganan, tiket, sembang, prospek, pendaftaran pengguna dan troli yang ditinggalkan. Penghantaran tak segerak melalui baris gilir kerja, cubaan semula dengan penangguhan eksponen, perlindungan SSRF, dan nyahaktif automatik selepas 15 kegagalan berturut-turut.

Menandatangani Webhook

Setiap webhook outbound ditandatangani dengan HMAC-SHA256. Pastikan tanda tangan pada akhir penerimaan anda untuk memastikan keaslian webhouk.

Widget SDK

SDK JavaScript untuk widget penjejakan dengan resolusi identiti, penjejakan peristiwa tersuai, kawalan sembang secara pengaturcaraan dan konfigurasi khusus halaman. Resipi pemasangan untuk React, Vue, Next.js, WordPress, Shopify dan HTML statik.

Plug dan SDK

Kod siap sedia yang anda salin ke projek sendiri, untuk PHP, Node.js, Python, Laravel, Symfony dan WooCommerce. Semuanya terdapat dalam muat turun Connector SDK.

Acara API_

Tolak peristiwa tersuai ke dalam OpsIQ dari bahagian belakang anda: pembelian, pendaftaran, penggunaan ciri, ralat, atau sebarang peristiwa perniagaan. Peristiwa muncul dalam garis masa pelawat dan disalurkan ke analitik dan konteks AI.

Buku masak Pemicu Pemipu

Bina aliran kerja automatik yang dicetuskan oleh peristiwa: tiket baharu, sembang dimulakan, pelawat dikenal pasti, peringkat urus niaga berubah, atau peristiwa tersuai. Pencetus melaksanakan tindakan penyambung, menghantar webhook, mengemas kini rekod atau memaklumkan pasukan anda.

API pembuat

Visual API Pembuat webhook di dalam admin. Atur titik akhir, permintaan tes, respon inspeksi, dan integrasi debug tanpa meninggalkan OpsIQ.

Pasukan dan pentadbiran

Kontrol akses berbasis Role-based

Tiga peranan: Pemilik (akses penuh, pengebilan, zon bahaya), Admin Penuh (semua operasi kecuali pengebilan dan zon bahaya), dan Ejen (hanya jabatan yang ditugaskan, tiada akses tetapan). Semua halaman sensitif dikawal ketat mengikut peranan.

Dashboard prestasi pasukan

Papan pemuka khas Pemilik dan Pentadbir Penuh yang menunjukkan masa penyelesaian, taburan beban kerja, kedalaman pengendalian, pecahan saluran, analisis trend, pematuhan SLA, CSAT mengikut ejen, kadar pembukaan semula, ringkasan pasukan dan waktu paling sibuk. Dikemas kini dalam masa nyata.

Adanya Admin dan pelacakan online

Widget masa nyata siapa dalam talian dalam navigasi pentadbir. Pengesanan kehadiran berasaskan denyutan (ping 60 saat, lanjutan 300 saat, pemangkasan automatik selepas 120 hari). Lihat pentadbir mana yang sedang aktif dan pada halaman mana.

Tetapan setiap ruang kerja

Setiap laman yang disambungkan (ruang kerja) boleh mempunyai konfigurasi AI, tetapan penyambung, jabatan tiket, penjenamaan dan peraturan operasinya sendiri. Lalai global diturunkan kepada ruang kerja yang tidak mengatasinya.

Manajemen Multi-site

Urus berbilang laman web dari satu pentadbir OpsIQ. Setiap tapak mempunyai coretan penjejakan, data pelawat dan konfigurasinya sendiri. Tukar antara tapak dari navigasi pentadbir.

Sistem templat e- mel

Templat e-mel dipacu daftar untuk semua komunikasi automatik: pemberitahuan tiket, transkrip sembang, e-mel alu-aluan, tetapan semula kata laluan dan makluman sistem. Edit templat HTML dengan pratonton langsung, cip pemboleh ubah ({{customer_name}}, {{ticket_id}}), dan kawalan susun atur global.

Import dan eksport

Import kenalan, tiket dan artikel pengetahuan daripada CSV/JSON. Eksport data pelawat, laporan analitik dan rekod CRM. Kemudahalihan data untuk pemindahan antara sistem.

Keselamatan, pematuhan dan operasi

Enterprise SSO

OIDC (OpenID Sambung) log masuk tunggal dengan masa jalan penuh: penemuan, kebenaran, panggilan balik, pengesahan tandatangan JWKS, maklumat pengguna, senarai domain yang dibenarkan, pemberian JIT, dan pengawal status. SAML sokongan konfigurasi.

GDPR Kepatuhan data dan kepatuhan Data

Pengendalian DSAR (Data Subject Access Request) terbina dalam: eksport dan padam data pelanggan merentas semua sistem. Pemadaman data peringkat kenalan meliputi sesi, tiket, sembang, rekod CRM dan log e-mel. Pengurusan persetujuan dan dasar pengekalan.

IP penghalang dan perlindungan brute-force

Sekat IP atau julat tertentu daripada mengakses laman web atau pentadbir anda. Sekatan automatik selepas bilangan percubaan log masuk gagal yang boleh dikonfigurasikan. Log log masuk gagal dengan IP, cap masa dan ejen pengguna.

HSTS dan pengepala keselamatan

Kemudahan Pengangkutan HTTP, header Akses-Polisi, dan konfigurasi cookie aman. Penyampaian hosted sendiri dapat menambahkan header CSP melalui konfigurasi server.

Pemkerasan bidik web luar arah

Pengawal SSRF menyekat webhook ke julat IP peribadi/metadata. Penghantaran tak segerak menghalang titik akhir yang perlahan daripada menyekat aplikasi anda. Penyahdayaan automatik selepas 15 kegagalan berturut-turut mengelakkan pembaziran sumber pada titik akhir yang mati.

Ruang isolasi Ruang Kerja Ruang Kerja

Pengasingan data yang ketat antara ruang kerja. Pelawat, tiket, sembang, rekod CRM dan perbualan AI diskopkan kepada ruang kerja masing-masing. Kebocoran data merentas ruang kerja dicegah pada lapisan pertanyaan.

Manajemen siklus Billing yang senilai

Sokongan untuk kitaran pengebilan bulanan, suku tahunan, separuh tahunan, tahunan, dua tahunan dan seumur hidup. Penormalan mata wang untuk gerbang berbilang mata wang. Penukaran FX semasa resit pembayaran untuk pelaporan hasil yang tepat.

Otomasi yang dijadwalkan dan Cron

Sistem cron terbina dalam untuk tugas berjadual: penjanaan laporan, pembersihan data, pembaharuan langganan, kemas kini latihan AI, penyegerakan penyambung dan cubaan semula webhook. Diagnostik kesihatan dengan penunjuk amaran.

Dasar pengekalan data

Konfigurasikan tempoh sesi pelawat, transkrip sembang, sejarah perbualan AI dan log acara disimpan. Pembersihan automatik data lama untuk mengurus storan dan mematuhi dasar penyimpanan.

Diagnostik dan kesehatan

Papan pemuka kesihatan sistem yang menunjukkan status cron, kesambungan pangkalan data, status pembekal AI, kesihatan penyambung, kadar penghantaran webhook dan penggunaan storan. Amaran untuk isu konfigurasi dan kesesakan prestasi.

Siapa OpsIQ Ini adalah untuk

Kedai e-dagang

Kedai

Jejak setiap pelawat dari halaman pendaratan hingga pembelian. Biarkan AI menjawab "Di manakah pesanan saya?" menggunakan data Shopify/WooCommerce/BigCommerce secara langsung. Urus tiket sokongan dengan balasan automatik AI. Jalankan saluran urus niaga untuk prospek borong dan B2B. Atribusikan hasil kepada sumber trafik dan kempen. Pantau pengabaian troli dengan aliran kerja pemulihan.

Syarikat SaaS dan perisian

SaaS

Pantau pendaftaran percubaan percuma dan penerimaan ciri dengan main semula sesi. Jejaki halaman dokumentasi yang menghasilkan penukaran. Automasikan sokongan dengan AI yang berasaskan dokumen API anda. Urus hasil langganan dan urusan perluasan dalam CRM. Sambungkan platform pengebilan anda (Stripe, WHMCS) untuk penjejakan MRR masa nyata. Gunakan ejen kitaran hayat CRM untuk mengesan dan mencegah churn.

Prinsip dan Pekerja lepas

Agensi Otherland

Tawarkan analitik label putih dan portal sokongan kepada klien. Jejaki prospek merentas berbilang laman klien daripada satu pentadbir. Gunakan saluran CRM untuk mengurus prospek dan prospek projek. Bina penyambung tersuai untuk platform klien menggunakan Connector Builder. Jana laporan SEO berjenama dengan Site Intelligence. Jual semula penyambung pasaran sebagai perkhidmatan nilai tambah.

Sarana dan Prasarana

Orang yang Menghibur

Dalam WHMCS integrasi dengan 80+ Tindakan AI untuk mencari arahan, pengurusan perkhidmatan, DNS, dan penyediaan. Auto-jawab kepada soalan penghosting biasa menggunakan artikel pangkalan pengetahuan. Jejak keterlibatan halaman status pelayan. Urus tiket sokongan teknikal dengan triage AI. Gunakan tangga siklus bil untuk bulanan melalui rancangan penghostan seumur hidup.

Bisnis yang berat

Sokongan

Lengkung 40-70% dari soalan berulang dengan sembang AI didasarkan pada pangkalan pengetahuan anda. Lalukan tiket ke bahagian yang betul dengan triage AI. Turut prestasi pasukan dengan masa penyelesaian, kesesuaian SLA, dan CSAT oleh ejen. Guna penulisan AI untuk draf jawapan profesional. Monitor trend sokongan dengan pemahaman AI.

Pasukan pemasaran dan SEO

Pemasaran

Suite Site Intelligence lengkap: perangkakan, audit SEO teknikal, analisis kandungan, penjejakan kedudukan SERP, penyelidikan kata kunci, pemantauan pautan balik, dan grid SEO tempatan. Pengurusan Google Business Profile. Laporan label putih berjadual untuk klien. Ujian A/B terbina dalam widget penjejakan. Atribusi kempen merentas semua saluran.

Pengasas solo dan pasukan kecil

Mulanya Diambil

Mulakan dengan penjejakan dan sembang sahaja, percuma untuk ditambah. Kemudian tambah tiket apabila jumlah permintaan sokongan meningkat. Hidupkan CRM apabila anda mula menjual. Sambungkan platform apabila anda menggunakannya. OpsIQ berkembang daripada seorang yang melakukan segala-galanya kepada pasukan operasi 50 orang dengan RBAC, jabatan dan penjejakan prestasi bagi setiap ejen.

Enterprise dan berbilang jenama

Perusahaan

Enterprise SSO dengan OIDC untuk pengesahan terpusat. Pengisolasian ruang kerja berbilang bagi jenama atau bahagian yang berasingan. Konfigurasi AI per-ruang kerja dengan pembekal dan model yang berbeza. Pembangunan sambungan langganan dengan jualan pasar raya. Jejak audit, GDPR alat kepatuhan, dan dasar penyimpanan data.

Apa yang OpsIQ ganti

Google Analytics Tidak Mungkin untuk + Hotjar + Serasi

Analitik laman web penuh dengan penjejakan pelawat, main semula sesi, kedudukan halaman, risikan geo, corong niat, atribusi penukaran, peristiwa, eksperimen A/B dan penjejakan ralat JS, semuanya mesra privasi, semuanya dalam satu platform.

Wife Intercom + Drift + Tidio

Sembang pelanggan berkuasa AI dengan asas pengetahuan, sokongan AI pelbagai penyedia, penyerahan automatik kepada manusia, peraturan sembang proaktif, sejarah perbualan, tinjauan CSAT dan penciptaan tiket daripada sembang.

Zendesk + Freshdesk + Help Scout

Sistem tiket asli dengan jabatan, keutamaan, SLA, triaj AI, balasan automatik dengan kelewatan yang boleh dikonfigurasi, pengambilan e-mel, benaman tiket, penggabungan tiket, kopilot peti masuk dan keupayaan Kembali kepada AI.

HubSpot + Pipedrive + Salesforce

AI-pertama CRM dengan empat agen AI khusus (Steward, SDR, Retensi, Analis), Trust Dial otonomi kontrol, papan pipa, deal coaching, peramalan, urutan, manajemen lifecycle, dan konfigurasi CRM bahasa alami.

Ahrefs + SEMrush + Moz

Site Intelligence dengan rangkakan automatik, audit SEO teknikal, analisis kandungan, carian AI, penjejakan kedudukan SERP, penyelidikan kata kunci, analisis pautan balik, grid SEO tempatan, dan laporan label putih berjadual.

Zapier + Buat + perisian tengah tersendiri

Penyambung SDK dengan 25+ sambungan pra-bina, Pembina Penyambung (tiada kod/AI-dibantu/kod penuh), OAuth aliran, pendaftaran automatik webhook, katalog besar takrifan tindakan sambungan yang boleh dilaksanakan hanya apabila sambungan berkaitan dipasang, dihidupkan, dikonfigur dan disahkan, SmartLookup, pasar raya, dan pakej ditandatangani.

Manajer Profil Bisnis Google Business

Penyambung GBP penuh: pengurusan ulasan, penerbitan siaran, pengurusan Soal Jawab, muat naik foto, penyegerakan maklumat perniagaan, penjejakan cerapan dan respons ulasan berkuasa AI, semuanya dari dalam OpsIQ.

Alat templat e- mel yang terpisah

Templat e-mel berasaskan pendaftaran dengan editor visual, pratonton langsung, cip pemboleh ubah, kawalan susun atur global dan penyesuaian setiap peristiwa untuk semua komunikasi automatik.

Dashboard pengurusan pasukan

Prestasi pasukan terbina dalam: masa penyelesaian, beban kerja, pematuhan SLA, CSAT mengikut ejen, kadar pembukaan semula, waktu paling sibuk, penjejakan kehadiran masa nyata dan pecahan mengikut jabatan.

GDPR Alat-alat pengampuan

Pengendalian DSAR asli, pemadaman data merentas semua sistem, pengurusan persetujuan, dasar pengekalan dan jejak audit, terbina dalam platform, bukan ditampal kemudian.

Edisi ke-2

Pasukan bayaran yang ditabuh

OpsIQ berjalan pada infrastruktur terurus. Operasi produk adalah sama; infrastruktur, kemas kini dan sandaran dikendalikan oleh pengendali pengehosan. Buku panduan ini mendokumentasikan masa jalan OpsIQ dan bukannya aliran pemasaran atau akaun komersial.

Modul yang di-host sendiri

Pasang OpsIQ pada pelayan anda sendiri untuk kawalan penuh terhadap data, branding, kemaskini dan integrasi. Memerlukan PHP 8.4+, MySQL 5.7 atau MariaDB 10.3+, HTTPS, dan OpsIQ Sokong cron terpadu WHMCS integrasi sebagai modul addon. Data kedaulatan penuh.

Perintah pembacaan saranan

1
Cepat mulai

Ikuti panduan persediaan 30 minit untuk menjadikan penjejakan, sembang dan AI asas berfungsi di laman web anda.

2
Papan dashboard dan analitik

Ketahui cara membaca data pelawat anda, menyediakan main semula sesi, mengenal pasti prospek dan memahami corak trafik.

3
Kecerdasan Laman

Jalankan rangkak SEO pertama anda, semak kesihatan teknikal anda, dan sediakan penjejakan kedudukan SERP untuk kata kunci sasaran anda.

4
Tiket dan sokongan

Sediakan jabatan, konfigurasikan balasan automatik dengan AI, sambungkan pengambilan e-mel, dan latih AI anda untuk mengendalikan soalan biasa.

5
CRM

Mengatur kontak, membangun pipamu, mengatur agen AI, mengatur level Trust Dial, dan membiarkan AI coach kesepakatanmu.

6
Penyambung dan alat pembangun

Sambungkan platform e-dagang/pengebilan anda, bina penyambung tersuai, sediakan webhook, dan integrasikan melalui REST API.

💡
Baharu dengan OpsIQ? Mulakan dengan panduan Mula Pantas di bawah. Anda boleh menjalankan penjejakan dan sembang AI asas dalam masa kurang daripada 30 minit.
Mulailah dari sini.

Mula pantas dalam 30 minit

Ikuti langkah ini mengikut urutan untuk menjalankan OpsIQ. Setiap langkah dibina berdasarkan langkah sebelumnya. Pada akhirnya, anda akan mempunyai penjejakan pelawat, sembang AI dan sokongan tiket asas.

Tetapkan
Cepat mulai daftar cekSenarai semak persediaan berpandu yang menunjukkan pemasangan widget, sambungan platform, latihan AI, jemputan pasukan dan pelancaran, dengan bar kemajuan 60 peratus.MulasetupPasang OpsIQ wigetSELESAIUngkapkan sebuah platform (WHMCS, Shopify...)SELESAIKetapelilahi AI Anda pada konten AndaSELESAIJemput timmuPeriksa dan pergi langsungKemajuan setup belum selesai3 daripada 5 · 60%1STEP 1Adonan Pasang widget2STEP 2Ungkap AI & kereta3STEP 3Jemput & pergi live
Laluan 30 minit: pasang widget, sambungkan platform, latih AI anda, jemput pasukan, kemudian mulakan secara langsung.

Persediaan 30 minit

1
Aktifkan lesen anda

Masukkan kekunci lesen anda dalam OpsIQ admin. Pergi ke Tetapan, masukkan kunci lesen yang dibekalkan untuk pemasangan ini dan klik Aktifkan. Anda patut melihat lencana "Aktif" hijau.

2
Cari tahu identitas bisnismu.

Pergi ke Tetapan dan isikan nama perniagaan, industri, zon waktu, mata wang lalai dan waktu sokongan anda. Maklumat ini digunakan oleh AI semasa menjawab soalan pelanggan dan oleh analitik untuk laporan yang mengambil kira zon waktu.

3
Pilih penyedia AI

Pergi ke Konfigurasi AI dan pilih pembekal anda. Pilihan: Claude (Anthropic), GPT (OpenAI), Gemini (Google) atau Grok (xAI). Masukkan kunci API anda jika menggunakan kunci sendiri, atau gunakan AI Terurus jika tersedia dalam pelan anda. Klik "Uji sambungan" untuk mengesahkan.

4
Pasang widget pelacakan

Go to Connected Sites, copy the tracking snippet, and paste it before the closing </body> tag on your website. Visit your site in a private browser, then check the Live Feed in OpsIQ. You should see yourself as a visitor within 15 seconds.

5
Konnect platform Anda

Jika anda menggunakan Shopify, WooCommerce, WHMCS atau platform lain yang disokong, pergi ke Penyambung, cari platform anda, masukkan kelayakan dan klik Uji Sambungan. Ini memberi AI akses kepada data pesanan, profil pelanggan dan konteks sokongan.

6
Jemput timmu

Pergi ke Pasukan, klik Jemput, masukkan e-mel dan peranan mereka (Pemilik, Admin Penuh atau Ejen). Ejen hanya boleh mengakses jabatan yang anda tetapkan kepada mereka. Pemilik dan Admin Penuh melihat segala-galanya.

Laluan terpantas yang mungkin (5 minit)

Step 1_: Pasang widget

Salin coretan kod daripada Laman Bersambung dan tampalkannya pada laman web anda. Ini memberi anda penjejakan serta-merta.

Step 2_: Aktifkan AI

Ke Konfigurasi AI, pilih penyedia, masukkan kunci Anda dan simpan. Sembang AI kini aktif di website Anda.

Selesai

Anda kini mempunyai penjejakan pelawat dan sembang AI. Anda boleh menambah tiket, CRM dan penyambung kemudian.

Hari 2_: Buat ia berguna

Pengetahuan tentang ilmu pengetahuan

Pergi ke Pangkalan Pengetahuan dan tambah 5-10 artikel tentang soalan anda yang paling lazim. AI menggunakannya untuk menjawab pelanggan dengan tepat.

Departemen-departmen

Pergi ke Tiket dan cipta sekurang-kurangnya 2 jabatan (cth, "Jualan" dan "Support"). Tugaskan ahli pasukan kepada masing-masing.

Tulis saja surat pernyataan AI Anda

Pergi ke AI Training dan menulis sebuah customer AI prompt yang menggambarkan bisnis, nada, dan aturan eskalasi Anda.

Uji perbualan

Buka laman web anda dalam pelayar peribadi dan bersembang dengan AI sebagai pelanggan. Semak bahawa jawapan adalah tepat dan nadanya betul.

Minggu 1_: Bina operasi anda

E-mail Sambungan

Sediakan peti mel (Gmail, IMAP atau penyambung penyedia) supaya e-mel pelanggan mencipta tiket secara automatik.

Mengatur auto-reply

Dayakan balasan automatik tiket untuk jabatan yang selamat. Tetapkan kelewatan 2 minit supaya manusia boleh campur tangan terlebih dahulu.

Analisis analisa fobia

Semak Papan Pemuka setiap hari. Lihat bilangan pelawat, kadar lantunan, halaman teratas dan jualan jika penjejakan telah disambungkan.

Mulai CRM Anda

Buka AI CRM dan biarkan OpsIQ mengimport kenalan dari platform yang disambungkan. Lihat papan paip.

Bulan 1Optimumkan

Tinjau sejarah AI

Semak Sejarah AI setiap minggu. Cari jawapan yang salah, soalan yang terlepas dan peluang untuk menambah pengetahuan.

Tambahkan aturan proaktif

Cipta peraturan: jika pelawat berada di halaman harga selama 60+ saat, tunjukkan mesej sembang yang bertanya sama ada mereka memerlukan bantuan.

Bina penyambung

Jika anda menggunakan platform yang tiada penyambung terbina dalam, gunakan Pembina Penyambung untuk menciptanya.

Uaplah webhooks

Sambungkan OpsIQ Ke alat internal Anda menggunakan webhooks outbound untuk tiket, chatting, dan penjualan acara.

Boleh aku lewatkan AI dan hanya menggunakan pelacakan?+

Ya. Penyedia AI adalah pilihan. OpsIQ berfungsi sebagai platform analitik dan tiket semata-mata tanpa AI. Anda boleh mendayakan AI kemudian apabila anda bersedia.

Bolehkah saya melangkau penyambung dan menambahnya kemudian?+

Ya. Penyambung memperkaya AI dengan data khusus platform, tetapi OpsIQ berfungsi tanpanya. Mulakan dengan penjejakan dan sembang, kemudian sambungkan platform apabila perlu.

Bagaimana jika aku belum punya website?+

Anda masih boleh menggunakan OpsIQ untuk tiket, CRM dan kerjasama pasukan. Widget penjejakan adalah pilihan. Tambahkannya apabila laman web anda sudah sedia.

Bagaimana aku tahu jika widget dipasang dengan benar?+

Lawati laman web anda dalam pelayar peribadi/inkognito. Kemudian semak Suapan Langsung OpsIQ. Anda sepatutnya melihat lawatan anda muncul dalam masa 15 saat. Jika tidak, semak: (1) adakah coretan ditampal dengan betul, (2) adakah kunci laman web betul, (3) adakah penyekat iklan atau pengepala CSP menyekat skrip itu.

Mulailah dari sini.

Peta produk lengkap buatan Aerofix

OpsIQ bukan satu ciri. Ia ialah pentadbir pengendali, widget laman web, lapisan sokongan AI, sistem tiket/meja bantuan, CRM penuh dengan empat ejen AI, suite Site Intelligence, platform penyambung dengan pasaran, dan permukaan pembangun. Berikut ialah setiap komponen yang terkandung di dalamnya.

Operator admin

Papan pemuka, suapan langsung, log pelawat, sesi, main semula sesi, halaman teratas, perisikan geo, corong niat, log acara, eksperimen A/B, penjejakan ralat JS, jualan dan penukaran, prospek, CRM AI (pusat arahan, kenalan, syarikat, urus niaga, papan saluran jualan, bimbingan urus niaga, ramalan, pencarian prospek, urutan, kitaran hayat, pengawas data, Bina CRM saya, konfigurasi CRM, kesihatan CRM, API CRM), tiket, peti masuk sembang, peraturan proaktif, tinjauan CSAT, draf e-mel, peti mel, konfigurasi AI, latihan AI, sejarah AI, cerapan AI, pangkalan pengetahuan, penyambung, Pembina Penyambung, pasaran, laman yang disambungkan, pengurusan pasukan, prestasi pasukan, tetapan, diagnostik dan lesen.

Permukaan tempat penyimpanan customer

Widget penjejakan laman web (beacon analitik + sembang + benaman tiket + carian pangkalan pengetahuan), sembang AI klien, portal penyerahan tiket, pengendalian token identiti pelawat, muat naik fail, widget tinjauan CSAT dan pusat bantuan untuk pelanggan.

CRM Berasaskan AI

Pusat arahan, kenalan, syarikat, perjanjian, papan paip dengan seret-dan-letak, pelatih perjanjian AI (isyarat risiko, tindakan terbaik seterusnya, kemungkinan menang), ramalan pendapatan, ejen prospek (SDR), rentetan tindak balas automatik, pengurusan siklus hidup dan pemeliharaan, ejer steward data (dedup, memperkayakan, mengesahkan), Bina CRM saya (setup bahasa semulajadi), konfigurasi CRM, pemeriksaan kesihatan CRM, Trust Dial (Autopilot/Copilot/Manual setiap ejer), empat ejen khusus (Steward, SDR, Retention, Analyst), dan CRM API dengan webhooks.

Suite Site Intelligence

Rangkakan tapak automatik, audit SEO teknikal (kelajuan, mudah alih, Core Web Vitals, SSL, ubah hala, data berstruktur), audit kandungan (bilangan perkataan, kebolehbacaan, ketumpatan kata kunci, struktur tajuk), carian semantik berkuasa AI, penjejakan kedudukan SERP merentasi enjin, penyelidikan kata kunci dengan pemarkahan peluang, analisis dan pemantauan pautan balik, visualisasi grid SEO tempatan, penyegerakan Google Business Profile (ulasan, siaran, soal jawab, foto, cerapan), laporan berjadual (harian/mingguan/bulanan) dan output PDF label putih untuk agensi.

Otomasi dan otomasi

Sembang AI pelanggan (berbilang pembekal: Claude, GPT, Gemini, Grok), pembantu AI admin, asas pengetahuan AI, serahan automatik dengan pemulihan boleh dikonfigurasi, konfigurasi AI bagi setiap ruang kerja, mod AI terurus dan BYOK, bajet token dan kawalan kos, jejak audit sejarah AI, analisis cerapan AI, triaj AI tiket, balasan automatik tiket dengan kelewatan, AI penulisan (gesaan berasingan), dan kopilot peti masuk admin.

Penyambung dan integrasi

Lebih 25 penyambung siap bina (Shopify, WooCommerce, BigCommerce, Magento 2, PrestaShop, OpenCart, osCommerce, WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Postmark, Resend, SendGrid, Mailgun, Gmail, IMAP, Slack, Google Business Profile), Pembina Penyambung (tanpa kod/dibantu AI/kod penuh), aliran OAuth generik dengan PKCE, pasaran penyambung dengan pengedaran berbayar, tandatangan dan pengesahan penyambung, padanan kabur SmartLookup, katalog besar definisi tindakan HTTP yang ketersediaannya bergantung pada pemasangan, pengaktifan, konfigurasi dan pengesahan penyambung, penyegerakan pengetahuan, dan resipi aliran kerja.

Platform pengembang untuk bandar

REST API (pelawat, peristiwa, tiket, kenalan, tetapan, penyambung), spesifikasi OpenAPI, pengurusan kunci API, webhook keluar (tak segerak, bertandatangan, dicuba semula, dilindungi daripada SSRF, nyahaktif automatik), Events API untuk pengambilan peristiwa tersuai, SDK widget dengan resolusi identiti, buku resipi pencetus, kontrak tindakan, SDK penyambung, pembungkusan pasaran, kod sedia guna untuk PHP, Node.js, Python, Laravel, Symfony dan WooCommerce.

Seting dan operasi

Identiti perniagaan, konfigurasi AI per ruang kerja, tetapan penjejak, keselamatan (HSTS, Kebenaran-Politik, IP penghalang, perlindungan brute-force), RBAC (Pemilik/Admin Penuh/Agen), pengurusan pasukan dan jemputan, papan pemuka prestasi pasukan, penjejaki kehadiran admin, sistem templat emel (dipandu oleh rekod, editor visual, chip berubah), perancang kaji selidik, pengetahuan domain, konfigurasikan tiket terbenam, branding, dasar pemeliharaan data, pengurusan siklus bil (bulanan melalui hayat), normalisasi mata wang, import/eksport, diagnostik, automasi cron, dan zon bahaya.

Keselamatan dan pematuhan

SSO Enterprise (OIDC dengan pengesahan JWKS, peruntukan JIT), konfigurasi SAML, pengendalian GDPR/DSAR (eksport dan padam merentas semua sistem), pemadaman data bagi setiap kenalan, pengurusan persetujuan, pengasingan ruang kerja (skop ketat di lapisan pertanyaan), jejak audit, penjejakan log masuk yang gagal, penyekatan IP, pengawal SSRF webhook keluar, dan dasar pengekalan data.

Jembatan penyedia bandaral

AI Terurus yang diproksikan melalui URL penyedia OpsIQ, panggilan penyedia Site Intelligence, pengesahan lesen, laporan kesihatan, pemaparan PDF dan eksport data, semuanya dihalakan melalui titik akhir penyedia yang dikonfigurasikan, bukan panggilan API vendor secara terus daripada pelayan anda.

Setiap halaman admin bagi para anggota sistem

Papan Dash

Inisi

Pusat arahan harian: gambaran keseluruhan trafik, kiraan pelawat langsung, ringkasan jualan, kedalaman baris gilir sokongan, amaran aktiviti AI dan pintasan tindakan pantas.

Makanan langsung vinf

Analitik

Aliran pelawat masa nyata: paparan halaman, permulaan sembang, penyerahan borang dan isyarat niat dikemas kini setiap beberapa saat dengan penapis negara, peranti dan perujuk.

Log lawatilabor

Analitik

Rekod lawatan lengkap: peranti, pelayar, OS, negara, bandar, perujuk, parameter UTM, halaman pendaratan, identiti dan sejarah paparan halaman penuh.

Sesi

Analitik

Paparan dikumpulkan mengikut perjalanan: aliran halaman, masa di halaman, kedalaman tatal, laluan penukaran dan halaman keluar bagi setiap sesi pelawat.

Ulangan sesi

Analitik

Penputaran garis waktu peristiwa yang ditangkap: pergerakan tetikus, klik, gulungan, peralihan halaman, dan bentuk interaksi untuk diagnosis UX.

Halaman Top

Analitik

rangking kinerja Halaman ophonia: kunjungan, waktu pertunangan, tingkat pantulan, konversi, interaksi pendukung, dan arah tren.

intelijen Geofififier

Analitik

Laporan geografi: pecahan negara/bandar dengan peta, taburan peranti, bahagian pelayar, sumber trafik dan penembusan pasaran.

Saluran corong yang tidak nyaman

Analitik

Pelacakan niat perilaku fobia: menetapkan kunjungan, kembali frekuensi, browsing doc, mendukung interaksi, dan sinyal custom dengan probabilitas konversi.

Catatan Peristiwa Lenyap

Analitik

Sejarah peristiwa yang boleh dicari: paparan halaman, peristiwa tersuai, sembang, pembelian, penghantaran borang dengan metadata penuh dan penapisan.

Eksperimen A/B

Analitik

Pengujian fregat dari fordford: membuat varian, mengalokasikan lalu lintas, mendefinisikan tujuan, mengukur signifikansi, dan mendeklarasikan pemenang, semua dari dalam OpsIQ_.

Galat JS

Analitik

Pengecekan galat Frontend: pesan, jejak tumpukan, peramban yang terpengaruh, frekuensi, halaman yang terkena dampak, dan pelacakan tren.

Jualan

Jualan

Papan pemuka hasil: pesanan, pembaharuan, bayaran balik, atribusi mengikut sumber, prestasi kempen, perbandingan tempoh dan analisis trend.

Lead

Jualan

Manajemen lead form: mencetak, Atribusi sumber, status CRM, rincian kontak, sinyal perilaku, dan routing pipa.

AI CRM

CRM

CRM penuh: pusat arahan, kenalan, syarikat, urus niaga, papan saluran jualan, bimbingan, ramalan, prospek, jujukan, kitaran hayat, pengurus data dan kesihatan.

Tiket

Sokongan

Peti masuk sokongan: jabatan, keutamaan, penjejakan SLA, triaj AI, balasan automatik, nota dalaman, lampiran fail, penggabungan dan pengurusan status.

Kotak masuk Chat

Sokongan

Perbualan langsung: sembang AI dan manusia, serahan, kerjasama, sejarah perbualan, identiti pelanggan dan pengumpulan CSAT.

Draf e-mel

Sokongan

Manajemen email: surat masuk ke tiket, komposisi balasan AI-assisted, pemilihan template, dan konfigurasi kotak surat.

config AI iB

AIAI

Persediaan pembekal: pilih Claude/GPT/Gemini/Grok, masukkan kunci API atau dayakan AI terurus, tetapkan model, suhu dan bajet token bagi setiap ruang kerja.

Latihan AI hirI

AIAI

Penulisan pengempan lemawan: customer-facing dan admin-fating prompts, eskalation rules, none guide, offbed topic, dan extreal configure.

Sejarah AI

AIAI

Audit perbualan: log permintaan/respons penuh, penggunaan token, kos bagi setiap perbualan, pembekal, versi model dan hasil penyelesaian.

AI wawasan

AIAI

Analisis corak: soalan lazim, kadar penyelesaian, kekerapan serahan, kepuasan mengikut topik dan pengenalpastian jurang latihan.

Pangkalan pengetahuan

AIAI

Kandungan latihan AI: artikel, entri Soalan Lazim, dokumentasi produk, pengetahuan penyambung dan entri tersuai. Carian semantik dan kata kunci untuk asas AI.

Penyambung

Integrasi

Hab integrasi: penyambung yang dipasang, status kesihatan, inventori tindakan, pengurusan bukti kelayakan, pelayar pasaran dan Pembina Penyambung.

Tapak bersambung

Tetapan-peraturan

Pengurusan laman: coretan penjejakan, kunci laman, konfigurasi widget, tetapan domain dan pengasingan ruang kerja bagi setiap laman.

Kumpulan

Tetapan-peraturan

Pengurusan pengguna: jemput ahli, tetapkan peranan (Pemilik/Admin Penuh/Ejen), tetapkan akses jabatan dan urus kebenaran.

Prestasi pasukan

Tetapan-peraturan

Ops metrik: resolusi kali, beban kerja, kepatuhan SLA, CSAT oleh agen, tarif buka kembali, jam sibuk, dan analisis tren.

Tetapan-peraturan

Tetapan-peraturan

Konfigurasi: identiti perniagaan, persediaan AI, penjejakan, keselamatan, penjenamaan, pengekalan, templat e-mel, pengebilan, import/eksport, diagnostik dan zon bahaya.

Lisensi

Tetapan-peraturan

Pengurusan pelan: status lesen, ciri pelan, metrik penggunaan, tarikh pembaharuan, dan pilihan naik taraf/turun taraf.

Mulailah dari sini.

Panduan tentangboarding

¡Abjek onboarding mengubah instalasi baru menjadi OpsIQ ruang kerja yang bekerja dan dapat ditinggalkan dan dilanjutkan kembali tanpa kehilangan kemajuan.

Skrin produk
PengenalanOrientasi memaparkan setiap bahagian persediaan, keadaan semasanya dan tindakan seterusnya untuk dilengkapkan.Pengenalanruang kerjaPROGRESS60%COMPLETED6EKSWidgetORANG KERJA HIDUPLisensiKogori mengesahkan lisensi produkSelesaipenyedia AI providerPilih penyedia dan kunci ujianSelesai_BuangIdentitas bisnis dan nadaSelesaiLaman sesawangTambah laman dan pasang widgetSeterusnya1COMPLETE BASICSLisensi, merek, AI2CONNECT DATALaman dan penyambung3VERIFY LAUNCHPasukan, e-mel, semakan
Orientasi memaparkan setiap bahagian persediaan, keadaan semasanya dan tindakan seterusnya untuk dilengkapkan.

Urutan saran

  1. Lisensi: ¡Oudio memvalidasi lisensi dan mengkonfirmasi ruang kerja aktif.
  2. Penyedia AI: . AI dapat dilompati jika ruang kerja pada awalnya akan menggunakan analitik dan tiket saja.
  3. Identitas bisnis asli: ¡Callie, industri, deskripsi, pelanggan-kegagahan nada dan rincian merek yang digunakan oleh widget dan AI.
  4. Penyambung: dayakan sekurang-kurangnya satu platform luaran apabila OpsIQ memerlukan pesanan, pelanggan, tiket, e-mel atau konteks platform lain.
  5. Laman web dan widget: cipta laman web/ruang kerja, salin kunci laman dan sahkan lawatan pelayar peribadi dalam Live Feed.
  6. Pasukan dan penghalaan: \"Owandzaid admins/agen, ciptakan departemen, atur routing email dan konfirmasi preferensi pemberitahuan.
  7. Periksa langsung: sembang ujian, tiket, penyegerakan penyambung, cron, e-mel keluar, webhook dan pengepala keselamatan.

Perjalanan ini menyimpan status selesai bagi setiap ruang kerja. Kembali ke Onboarding sepatutnya memaparkan langkah yang telah selesai dan bukannya memaksa anda bermula semula.

Mulailah dari sini.

Navigasi dan izin administrasi edisial

Batang OpsIQ sidebar adalah ijin-sadar. Peta ini menjelaskan di mana setiap area operasional tinggal dan mengapa sebuah halaman mungkin tidak dapat dilihat oleh setiap administrator.

Skrin produk
_Pemutar OpsIQ iBar sisi mengumpulkan OpsIQ mengikut bidang kerja; pautan individu hanya dipaparkan apabila peranan semasa boleh menggunakannya._Pemutar OpsIQ iruang kerjaGROUPS8MUKAHak Akses berbasisSEARCHTersediaORANG KERJA HIDUPSokonganTiket, email, CSAT, pengetahuanBukaCRMKenalan, pipa, penawaran, prospekBukaAutomasiKebekerjaan, aturan, tujuanBukaKeselamatan & PrivasiAWAL, audit, persetujuan, blokAdmin1PICK A GROUPPadankan dengan sisi bar2CHECK ROLEDilarang berarti terlarang3USE PAGE HELPBuka bagian yang cocok
Bar sisi mengumpulkan OpsIQ mengikut bidang kerja; pautan individu hanya dipaparkan apabila peranan semasa boleh menggunakannya.
Sokongan

Tiket, platform e-mel pasukan, CSAT, Pusat Bantuan dan aliran chatbot.

CRM

Ke permukaan penjualan harian: CRM Home, Command Center, kontak, pipa, ramalan, daur hidup, prospekting, segmen, papan pemimpin, persetujuan kesepakatan, pengurus data, alat pertumbuhan dan aliran aktivitas.

Automasi

\"Ujian-Event-driven workflows, aturan daur hidup dan tujuan konversi.

Pemasaran

Jangkauan, mesej proaktif, pengumuman, Promotion Studio, Survey Studio, kempen tolak dan lawatan berpandu.

Analitik

Permukaan laporan didahulukan — Hab Analitik, pandangan AI, jualan, pelanggan, prospek, corong, ujian A/B, main semula sesi, papan pemuka tersuai dan laporan berjadual — dengan log mentah pelawat, sesi, halaman, geografi dan peristiwa dalam subbahagian Data Mentah.

Halaman Standalone

Kecerdasan Laman, Prestasi Pasukan dan Maklum Balas berada di luar kumpulan sebagai entri terus.

Integrasi

Penyambung, tindakan dan pencetus, peti mel, draf, tetapan e-mel, titik akhir masuk, webhook keluar dan kunci API.

Keselamatan & Privasi

Gambaran keseluruhan keselamatan, privasi dan pematuhan, persetujuan kuki, aktiviti audit, log masuk yang gagal, IP yang disekat dan ralat JavaScript.

Tetapan-peraturan

Asas ruang kerja (umum, pasukan, laman, bahasa), kemudian subbahagian yang boleh dilipat: AI Brain (arahan, konfigurasi, penilaian, sejarah), Persediaan CRM (pembina, medan tersuai, pemarkahan prospek, kesihatan), Data & Kesihatan (diagnostik, eksport) dan Bermula (orientasi, bantuan).

Halaman yang tidak dapat dibuka oleh sesuatu peranan disembunyikan daripada bar sisi. Halaman yang tidak termasuk dalam pelan semasa kekal kelihatan dengan upgrade dan membuka skrin naik taraf dalam aplikasi.

Laluan terus masih disemak di bahagian pelayan. Menyembunyikan pautan bar sisi bukanlah sempadan keselamatan: setiap tindakan yang dilindungi mesti lulus semakan kebenaran dan ruang kerjanya.

Analitik

hub Analitik

Hab Analitik menghimpunkan laporan sokongan, sembang, AI, pelawat dan ejen ke dalam satu ruang kerja bertapis tarikh dengan hasil yang boleh dieksport.

Skrin produk
hub AnalitikHab Analitik memaparkan julat tarikh, kad metrik dan tab untuk prestasi Sokongan, Sembang, AI, Pelawat dan Ejen.hub Analitikruang kerjaKECIL TICKET184AI RESOLVE63%KANTOR CSAT4.7ORANG KERJA HIDUPSokonganDiciptakan, ditutup, tertunda, SLAZabSembangHasil buatan manusia dan waktu menanganiZabAIAIKeyakinan, maklum balas, penggunaan tokenZabAgenVolume, kecepatan dan kepuasanZab1CHOOSE DATESPraset atau kebiasaan2CHANGE TABSokongan kepada Ejen3EXPORTMuaturun CSV
Hab Analitik memaparkan julat tarikh, kad metrik dan tab untuk prestasi Sokongan, Sembang, AI, Pelawat dan Ejen.

Filter dan kontrol

  • Umukan praset atau kebiasaan Dari/ke Kisaran ikigami, lalu segarkan untuk membangun kembali setiap kartu dan bagan untuk periode yang sama.
  • Eksport CSV mengeksport paparan analitik yang aktif dan bukannya tangkapan skrin.
  • Skop ruang kerja adalah automatik; menukar laman akan menukar set data asas.

Apa yang setiap langkah tab

  • Sodium Support: tiket dicipta/ditutup/bergantung, jawapan pertama, resolusi, resolusinya-pertama-hubungan, SLA, dan keutamaan/jabatan/pecah status.
  • Sembang: Sesi-sesi olesen dimulai, resolusi AI, eskalasi, ditinggalkan, menangani waktu, pesan per sesi, dan CSAT AI/human/all.
  • AI: purata keyakinan, kadar keyakinan rendah, ketepatan triaj, maklum balas, pengalihan melalui pengetahuan, penggunaan token/cache, dan item yang perlu disemak.
  • Pelawat: Lalu lintas lalu lintas dan tren pertunangan untuk periode terpilih.
  • Agen: Kinerja per-agen beban kerja, kecepatan, penutupan dan langkah kepuasan.

Gunakan Hab Analitik untuk semakan merentas pasukan; gunakan halaman khusus Pelawat, Tiket, CSAT, Sejarah AI dan Prestasi Pasukan apabila anda memerlukan siasatan di peringkat rekod.

Analitik

Papan Pemuka

Papan Pemuka ialah pusat arahan harian anda. Ia menunjukkan trafik, jualan, beban sokongan, aktiviti AI dan penunjuk penukaran dalam satu paparan. Bukanya setiap pagi untuk memahami apa yang berlaku semalaman dan apa yang memerlukan perhatian hari ini.

Papan Dash
Di papan sengkang selayang pandangSkrin Gambaran Keseluruhan yang diketuai oleh panel AI OpsIQ Intelligence (dengan Ringkasan harian, Amaran pintar, Ramalan), jubin widget KPI dan widget trafik tujuh hari, serta kawalan Set semula susun atur.Gambaran keseluruhanruang kerjaOPSIQINTELLIGENCETakwidz Pilih sebuah analisis dan OpsIQ _tulis ituRingkasan harianWaspada pintar BijakirantinaSusunatur semula madya:Hari ini, para Viking2,481+12%PELAYAN$8.2k+5%OPEN TICKET14SLA 3Lalu Lintas Lalu lintas · terakhir 7 Hari-hari1AI-FIRSTOpsIQ Panel Intelijen Intelligence2WIDGETSUbin KPI yang kau atur3ANDA YOUSRekap ulang sesuai sekapanpun
Skrin Gambaran Keseluruhan sebenar: panel OpsIQ Intelligence di bahagian atas (pilih analisis dan ia akan menulisnya) di atas widget KPI yang anda susun sendiri.

Kartu papan dash dijelaskan

Pelawat langsung

Bilangan orang di laman web anda sekarang. Ini dikemas kini setiap 15 saat (boleh dikonfigur). Pelawat adalah "aktif" jika mereka memuatkan halaman dalam ambang aktif (piawai: ) 90 saat).

Pelawat unik

Berapa ramai orang berbeza yang melawat laman web anda dalam julat tarikh yang dipilih. OpsIQ mengenal pasti pelawat melalui gabungan cap jari pelayar, kuki dan (jika ada) identiti yang disahkan.

New vs kembali

Pelawat baharu melihat laman anda buat kali pertama. Pelawat yang kembali pernah dilihat sebelum ini. Nisbah pelawat kembali yang tinggi bermakna kandungan anda membawa orang kembali. Nisbah pelawat kembali yang sangat rendah mungkin bermakna anda tidak mengekalkan minat mereka.

Kadar lantunan terlantar

Peratusan pelawat yang pergi selepas melihat hanya satu halaman. Kadar lantunan melebihi 70% pada halaman pendaratan biasanya bermaksud halaman itu tidak memenuhi jangkaan pelawat, kandungan yang salah, pemuatan yang perlahan, atau pengalaman mudah alih yang lemah.

Masa purata pada halaman

Purata tempoh pelawat berada di setiap halaman. Masa yang sangat singkat (bawah 10 saat) pada halaman kandungan menunjukkan kandungan itu tidak menarik. Masa yang sangat lama pada halaman pembayaran mungkin menandakan kekeliruan.

Ancaman terhadap ancaman diblok

IPAlamat yang OpsIQ mengidentifikasi sebagai kemungkinan berbahaya berdasarkan ancaman, serangan kekerasan brutal, atau blok manual. Klik untuk melihat blok yang diblok IPs Daftar tokoh.

Jual hari ini / minggu ini / bulan ini

Hasil daripada sumber jualan yang disambungkan (Shopify, WooCommerce, Stripe dan lain-lain). Jika jualan menunjukkan sifar, pastikan penyambung platform anda disambungkan dan sedang menyegerak.

Bagan Trend

Graf garis yang menunjukkan bilangan pelawat sepanjang julat tarikh yang dipilih. Cari corak: lonjakan trafik (kempen, sebutan akhbar), penurunan (hujung minggu, cuti) dan trend yang berterusan.

Sumber-sumber top falgon

Dari mana pelawat anda datang: terus, Google, media sosial, kempen e-mel, laman perujuk. Gunakan ini untuk memahami saluran pemasaran yang berkesan.

Pelayar Atas Melayari

Chrome, Safari, Firefox, Edge, dan lain-lain. Jika pelayar mempunyai kadar melompat yang tidak biasa tinggi, anda mungkin mengalami masalah CSS atau JavaScript masalah keserasian.

Peta panas Jam

Grid yang menunjukkan aktiviti pelawat mengikut jam dalam sehari dan hari dalam seminggu. Gunakannya untuk memutuskan bila menjadualkan syif sokongan, bila menghantar pengumuman, dan bila menjalankan promosi.

Pelawat terkini

Beberapa pelawat terakhir dengan negara, halaman, peranti dan sumber. Berguna untuk semakan pantas semasa kempen.

Menggunakan penapis julat tarikh

Klik pemilih tarikh di bahagian atas kanan Papan Pemuka. Pratetap: Hari ini, Semalam, 7 hari lalu, 30 hari lalu, Bulan ini, Bulan lalu, Julat tersuai. Semua kad dan carta papan pemuka dikemas kini apabila anda menukar julat. Julat tarikh adalah dalam zon waktu yang anda konfigurasikan (ditetapkan dalam Tetapan).

Contoh - contoh yang diupayakan

Penyelidikan spike tingkat lanun

Skenario:
Tingkat pantulanmu melompat dari 45% Ke 78% Minggu ini./ Apa yang terjadi?
Apa yang perlu dilakukan:

Semak: (1) Adakah halaman pendaratan tertentu berubah? Pergi ke Halaman Teratas dan isih mengikut kadar lantunan. (2) Adakah kempen menghantar trafik ke halaman yang salah? Semak Sumber Teratas untuk perujuk baharu. (3) Adakah laman web rosak pada mudah alih? Semak pecahan pelayar untuk kadar lantunan mudah alih. (4) Adakah ia trafik bot? Semak pembilang Ancaman dan butiran pelawat untuk corak yang mencurigakan.

Tiada pelawat pada papan pemuka

Skenario:
Papan pemuka menunjukkan 0 pelawat langsung walaupun laman web anda menerima trafik.
Apa yang perlu dilakukan:

Semak: (1) Adakah widget penjejakan dipasang? Lihat kod sumber laman web anda dan cari skrip OpsIQ. (2) Adakah kunci laman betul? Bandingkan data-site-key dalam skrip dengan kunci dalam Laman yang Disambungkan. (3) Adakah CDN atau cache menyajikan halaman lapuk tanpa skrip tersebut? Kosongkan cache CDN anda. (4) Adakah penyekat iklan atau pengepala CSP menyekat skrip tersebut? Semak konsol pelayar untuk permintaan yang disekat.

Pembacaan peta panas berjam - jam

Skenario:
Heatmap Anda menunjukkan aktivitas berat antara 10 pagi-2pm pada hari kerja tapi tidak ada pada akhir pekan.
Apa yang perlu dilakukan:

Ini ialah corak trafik B2B. Pelawat anda ialah profesional bekerja yang melayari semasa waktu perniagaan. Implikasi: (1) Jadualkan kakitangan sokongan untuk waktu perniagaan hari bekerja. (2) Hantar kempen e-mel pada pagi Selasa hingga Khamis. (3) Tetingkap penyelenggaraan hujung minggu adalah selamat. (4) Pertimbangkan untuk menawarkan sembang langsung hanya semasa waktu puncak.

Penampakan lalu lintas dari sumber yang tidak diketahui

Skenario:
Anda melihat lonjakan mendadak 500 pelawat dalam satu jam daripada perujuk yang tidak diketahui.
Apa yang perlu dilakukan:

Pergi ke Pelawat dan tapis mengikut tetingkap masa. Semak: (1) Adakah mereka pelawat sebenar atau bot? Lihat tempoh sesi, halaman yang dilihat dan kepelbagaian pelayar. (2) Jika sebenar, halaman manakah yang mereka masuki? (3) Semak URL perujuk. Seseorang mungkin telah memaut kepada anda dari Reddit, Hacker News atau blog popular. (4) Jika ia trafik bot, semak Ancaman dan pertimbangkan untuk menyekat julat IP tersebut.

Mengapa kiraan pelawat saya berbeza daripada Google Analytics?+

OpsIQ mengira pelawat secara berbeza. Ia menggunakan cap jari pelayar dan kuki, manakala GA menggunakan model kuki yang berbeza. Penapisan bot, kadar penyekat iklan dan susunan pemuatan skrip juga boleh menyebabkan perbezaan. Varians 10-20% adalah perkara biasa.

Boleh aku pasang dashboard di alat lain?+

Papan dashboard dirancang untuk OpsIQ Untuk pelaporan eksternal, gunakan REST API Untuk menarik data analitik dan menampilkannya di dashboard atau alat BI.

Apa maksud "ancaman"?+

Ia mengira alamat IP yang telah ditanda atau disekat oleh OpsIQ berdasarkan pemarkahan ancaman, log masuk gagal berulang, atau sekatan manual. Klik pembilang untuk melihat butiran dan mengurus sekatan.

Analitik

Log lawatilabor

Visitor Log menunjukkan setiap lawatan ke laman web yang anda jejaki. Setiap baris ialah satu muatan halaman daripada seorang pelawat. Gunakannya untuk menyiasat tingkah laku pelawat individu, mencari trafik kempen dan mendiagnosis isu penjejakan.

Log lawatilabor
Log lawatilaborJadual pelawat dengan bar penapis (tarikh, cari IP/e-mel/bandar, sumber, peranti) dan lajur untuk IP/e-mel, lokasi, sumber, peranti dan masa, dengan satu baris ancaman yang dibenderakan.Log lawatilaboryoursite.com7 Hari-hariCari IP, email, kota...Sumber ▾Peranti ▾DivaisIP/ EMAILKELARGAANSUMBERPERANTIKETIKA KITAjane@acme.com· AS · New YorkgoogleDesktop2m41.62.10.4InggrisdirectMudah Alih6mm.osei@shop.io· Berlinutm:adsMudah Alih14m203.0.113.9NG · LagosreferralDesktopthreat1–25 daripada 3,402Sesi→1FILTERTarikh · cari · sumber · peranti2REAL COLUMNSIP/emel · lokasi · peranti · ancaman3DRILL INBuka sesi penuh
Log Pelawat sebenar: tapis mengikut tarikh, carian dan peranti, kemudian baca setiap lawatan mengikut IP/e-mel, lokasi, sumber, peranti dan masa, dengan ancaman ditanda dengan warna merah.

Apa yang ditunjukkan oleh setiap baris

IP Alamat

Alamat IP pelawat. Dianonimkan jika penganoniman IP didayakan dalam Tetapan. Klik untuk melihat semua lawatan daripada IP ini.

Negara dan kota

Dikesan dariIP alamat menggunakan data GeoIP. Memerlukan pangkalan data MaxMind GeoLite2 atau Cloudflare pengepala geo. Papar "Tidak diketahui" jika GeoIP tidak dikonfigur.

Halaman URL_Foter

Halaman yang dimuatkan oleh pelawat. Klik untuk melihat URL penuh. URL yang panjang dipendekkan dalam paparan jadual.

Referrer fana

Dari mana pelawat datang sebelum tiba di laman web anda. "Terus" bermaksud tiada perujuk (penanda halaman, URL yang ditaip, sesetengah pautan aplikasi).

Peranti dan pelayar

Jenis peranti pelawat (desktop, mudah alih, tablet) dan pelayar (Chrome, Safari, Firefox, dll.). Dihuraikan daripada pengepala User-Agent.

Tarikh dan masa

Ketika halaman dimuat, di zona waktu yang telah dikonfigurasi.

Identitas customer

Jika pelawat dikenal pasti (melalui token identiti atau log masuk), nama atau e-mel mereka dipaparkan. Jika tidak, ia dipaparkan sebagai tanpa nama.

Tapisan

Julat tarikh

Penyaring ke periode waktu tertentu. Baku: 7 hari terakhir.

Carian

Pencarian oleh: IP alamat, halaman URL, refererer, country, atau email pelanggan.

Sumber

Filter oleh sumber lalu lintas: Langsung, Organik, Sosial, Referral, Dibayar, Email.

Peranti

Filter oleh Desktop, Mobile, atau Tablet.

Hanya New_New

Tunjukkan hanya pelawat kali pertama yang tidak pernah dilihat sebelum ini.

Contoh - contoh yang diupayakan

Cari pelawat daripada kempen tertentu

Skenario:
Anda melancarkan kempen Google Ads dengan parameter UTM utm_source=google&utm_medium=cpc&utm_campaign=summer-sale. Bagaimanakah anda mencari pelawat tersebut?
Apa yang perlu dilakukan:

Dalam Log Pelawat, gunakan medan Carian dan taip "summer-sale". Carian menyemak URL perujuk dan URL halaman, jadi parameter UTM akan sepadan. Anda juga boleh menapis mengikut Sumber = Berbayar untuk mengecilkan lagi hasil.

Cari pelanggan yang melaporkan masalah

Skenario:
Pelanggan menghantar emel mengatakan "Laman checkout anda rosak semalam sekitar pukul 3 petang." Bagaimana anda mencari sesi mereka?
Apa yang perlu dilakukan:

Cari mengikut alamat e-mel mereka dalam Log Pelawat. Jika mereka telah log masuk, identiti mereka akan muncul. Tetapkan julat tarikh kepada semalam. Cari lawatan ke halaman pembayaran sekitar jam 3 petang. Klik sesi mereka untuk melihat aliran halaman penuh dan sebarang ralat JavaScript.

Mengesankan adanya pengotak atau penggorek gelung

Skenario:
Kau melihat sebuah IP Alamatnya memiliki alamat 500 Ke - + kunjungan dalam satu jam, semuanya ke halaman yang sama.
Apa yang perlu dilakukan:

Ini mungkin bot, pengikis atau skrip yang rosak. Pergi ke Log Pelawat dan cari menggunakan IP tersebut. Semak: (1) Adakah semua lawatan ke halaman yang sama? (2) Adakah ejen pengguna itu bot yang dikenali? (3) Adakah tempoh sesi sentiasa 0 saat? Jika disahkan sebagai bot, pergi ke Keselamatan dan sekat IP tersebut.

Log lawati v Sesi vs Live feed

Log lawatilabor

Muatan halaman mentah. Satu baris bagi setiap paparan halaman. Terbaik untuk: menyiasat halaman tertentu, mencari trafik daripada sumber tertentu, mendiagnosis isu penjejakan.

Sesi

Mengkumpulkan paparan halaman ke dalam perjalanan. Satu baris bagi setiap sesi lawatan. Terbaik untuk: memahami aliran pengguna, mengukur tempoh sesi, mengenal pasti laluan penukaran.

Makanan langsung vinf

Aktiviti masa nyata. Menunjukkan pelawat yang sedang berada di laman web anda. Paling sesuai untuk: memantau kempen yang sedang berjalan, mengenal pasti pelawat yang berminat tinggi, memerhati peluang sokongan.

Mengapa aku melihat kunjunganku sendiri di log?+

OpsIQ Untuk mengecualikan lalu lintasmu sendiri, tambahkan Anda IPAlamat untuk yang dikecualikan IPs Daftar dalam Seting > Pelacakan.

Mengapakah pelawat menunjukkan negara "Tidak diketahui"?+

Pencarian GeoIP juga diperlukan Cloudflare header geo poligi (automatik jika menggunakan Cloudflare) atau berkas basis data MaxMind GeoLite2. Periksa Seting > GeoIP Path untuk memastikan file database ada dan dapat dibaca.

Berapa lama data pelawat disimpan?+

Data pelawat disimpan untuk tempoh pengekalan yang dikonfigurasikan dalam Tetapan (lalai: 90 hari). Selepas itu, rekod lama dibersihkan secara automatik oleh kerja pengekalan cron.

Analitik

Sesi

Sesi audiensi kelompok multi halaman dilihat dari orang yang sama ke dalam satu perjalanan.

Sesi
SesiJadual Log Sesi dengan lajur IP, negara, peranti, sumber, tempoh dan halaman, serta baris ancaman yang ditandakan.Sesiyoursite.comNegara Bagian BAHASA (NG)Log Sesi osisIP Fiji (S)KEBUDAYAAN COUNTAPERANTISUMBERPENDURASIANMUKA41.62.10.4UKDesktopgoogle12s_ 3m6102.89.6.2NGMudah Alihdirect05s_Foham 1m388.21.4.9DEDesktoputm:ads48s_Memoyang11203.0.113.9ASMudah AlihreferralNama fine0m 42s_21SESSION LOGPerjalanan kelompok2COLUMNSNegara · peranti · sumber · tempoh3THREATSesi risiko yang ditandai
Log Sesi sebenar: setiap perjalanan pelawat sebagai satu baris (IP, negara, peranti, sumber, tempoh dan halaman) dengan sesi berisiko ditanda dengan warna merah.

Bagaimana sesi berfungsi

Sesi bermula apabila pelawat memuatkan halaman pertama mereka. Ia berterusan semasa mereka menavigasi ke lebih banyak halaman. Sesi tamat apabila pelawat tidak aktif bagi tempoh tamat masa sesi (lalai: 30 minit) atau menutup pelayar mereka. Orang yang sama yang kembali selepas tamat masa mencipta sesi baharu.

Apa yang ditunjukkan setiap sesi

Halaman pertama

Halaman pendaratan, tempat pelawat memasuki laman web anda. Ini memberitahu anda kandungan mana yang menarik orang.

Halaman terakhir

Halaman keluar, tempat pelawat meninggalkan laman. Jika halaman keluar selalunya halaman harga, pelawat mungkin sedang membandingkan anda dengan pesaing.

Jumlah Halaman

Berapa banyak halaman yang dilihat oleh pelawat dalam sesi ini. Lebih banyak halaman biasanya bermaksud lebih banyak penglibatan, tetapi ia juga boleh bermaksud pelawat itu sesat.

Tempohan

Jumlah masa dari muatan halaman pertama hingga aktiviti terakhir. Sesi dengan 0 saat ialah lantunan (satu paparan halaman, tiada interaksi lanjut).

Sumber

Sumber lalu lintas untuk sesi ini (Direkt, Google, sosial, referal, dll).

Negara

Negara yang dikesan daripada alamat IP pelawat.

Terikam Bounce

Sama ada pelawat keluar selepas melihat hanya satu halaman. Sesi lantun mempunyai penunjuk merah.

Penukaran

Sama ada pelawat menyelesaikan peristiwa penukaran yang dijejaki (pembelian, pendaftaran, penghantaran borang) semasa sesi ini.

Tapisan

Carian

Pencarian oleh: IP, email, halaman URL, atau refererer dalam sesi.

Jenis

Tapis mengikut Pelawat baharu (sesi pertama kali) atau Pelawat kembali.

Sumber

Filter oleh sumber lalu lintas.

Negara

Tapis oleh negara untuk melihat sesi dari wilayah tertentu.

Ancaman/Terancam

Filter untuk menunjukkan hanya sesi bounced atau sesi ditandai sebagai ancaman.

Contoh - contoh yang diupayakan

Profil seorang pelanggan bernilai tinggi

Skenario:
Kau ingin memahami perjalanan mereka sebelum membeli.
Apa yang perlu dilakukan:

Cari email mereka di Sesi Lihat semua sesi mereka: (1) Berapa kali mereka berkunjung sebelum membeli? (2) Halaman mana yang mereka lihat? (3) Apa mereka menggunakan chatting atau membuka tiket? (4) Apa total waktu dari kunjungan pertama untuk membeli? ini memberitahu Anda perjalanan pembelian yang biasa untuk pelanggan bernilai tinggi.

Mengesan log masuk dari lokasi baru

Skenario:
Pelanggan biasa login dari Nigeria tapi anda lihat sesi dari Rusia.
Apa yang perlu dilakukan:

Cari e-mel pelanggan dalam Sesi. Bandingkan negara bagi sesi terkini. Jika sesuatu sesi tiba-tiba muncul dari negara yang luar biasa, ia mungkin perjalanan yang sah atau akaun yang telah dikompromi. Semak: (1) Adakah terdapat percubaan log masuk yang gagal sebelum yang berjaya? (2) Adakah IP berubah dalam sesi yang sama? Tandakan untuk semakan jika mencurigakan.

Apakah perbezaan antara sesi dan pelawat?+

Pelawat ialah seseorang (atau pelayar). Sesi ialah satu lawatan daripada orang itu. Pelawat yang sama boleh mempunyai banyak sesi dari semasa ke semasa. Sesi tamat tempoh selepas tempoh had masa.

Bagaimanakah OpsIQ mengenal pasti pelawat kembali?+

OpsIQ menggunakan gabungan kuki, cap jari pelayar dan token identiti yang disahkan. Jika pelawat mengosongkan kuki mereka dan tidak log masuk, mereka akan muncul sebagai pelawat baharu.

Analitik

Makanan langsung vinf

Suapan Langsung menunjukkan pelawat yang sedang berada di laman web anda dalam masa nyata. Ia dikemas kini secara automatik setiap 15 saat (boleh dikonfigurasi). Gunakannya semasa kempen, pelancaran produk dan tempoh sokongan yang sibuk untuk melihat apa yang sedang berlaku sekarang.

Makanan langsung vinf
Makanan langsung vinfAliran aktiviti masa nyata yang menunjukkan kiraan pelawat dalam talian secara langsung dan suapan tindakan pelawat terkini mengikut negara.Makanan langsung vinfyoursite.com37pelawat dalam talian sekarangAktivitas langsungSekarangAS · pelihat /pricing_2s· UK · memulai sebuah chat5sDE · ditambahkan ke gerobak9s· CA · pendaftaran selesai1RIGHT NOWLihat siapa yang ada di lokasi2AUTO-REFRESHSemua orang-orang 15s_3AKTSertai sembang langsung
Lihat siapa yang berada di laman web anda pada ketika ini dan apa yang mereka lakukan, dimuat semula secara automatik setiap 15 saat.

Bagaimana cara kerjanya

Suapan Langsung menyemak pelayan anda mengikut selang muat semula yang dikonfigurasikan. Setiap baris menunjukkan pelawat yang sedang berada di laman anda: halaman semasa, negara, peranti, sumber, tempoh sesi dan kiraan halaman mereka. Serlahan hijau menunjukkan aktiviti baharu sejak muat semula terakhir. Klik mana-mana baris pelawat untuk melihat butiran sesi penuh mereka.

Tetapan-peraturan

Selang waktu penyegaran ulangan

Kekerapan suapan langsung dikemas kini. Lalai: 15 saat. Nilai yang lebih rendah (5-10s) memberi kemas kini lebih pantas tetapi menggunakan lebih banyak sumber pelayan. Nilai yang lebih tinggi (30-60s) lebih ringan bagi pelayan tetapi kurang masa nyata.

Ambang aktif

Tempoh seseorang pelawat dianggap "aktif" selepas halaman terakhirnya dimuatkan. Lalai: 90 saat. Jika pelawat memuatkan halaman dan kemudian membacanya selama 2 minit tanpa mengklik, mereka hilang daripada suapan langsung selepas ambang itu.

Butang jeda

Klik Jeda untuk menghentikan muat semula automatik. Berguna apabila anda ingin membaca butiran tanpa senarai dikemas kini. Klik Sambung Semula untuk memulakannya semula.

Contoh - contoh yang diupayakan

Kenal pasti prospek hangat semasa kempen

Skenario:
Anda sedang menjalankan pelancaran produk. Seorang pelawat baru sahaja melihat halaman utama anda, kemudian ciri, kemudian harga, dan kini berada di halaman pembayaran.
Apa yang perlu dilakukan:

Ini ialah tingkah laku berniat tinggi. Dalam Suapan Langsung: (1) Klik pelawat untuk melihat sesi mereka. (2) Jika mereka memulakan sembang, AI akan mempunyai konteks perjalanan penuh mereka. (3) Jika mereka pergi tanpa membeli, mereka menjadi prospek dalam halaman Prospek. (4) Pertimbangkan untuk mencipta peraturan proaktif bagi memaparkan mesej sembang apabila pelawat sampai ke halaman pembayaran.

Terlalu ramai pelawat dari IP yang sama

Skenario:
Anda melihat 20 pelawat daripada alamat IP yang sama, semuanya di halaman yang berbeza.
Apa yang perlu dilakukan:

Ini mungkin: (1) Pejabat dengan internet yang dikongsi. Semak sama ada lawatan kelihatan seperti manusia sebenar (halaman berbeza, tempoh sesi yang munasabah). (2) Bot atau pengikis. Semak sama ada sesi sangat singkat (0-1 saat) atau mengakses halaman secara sistematik. (3) Ujian beban. Jika anda menjalankan ujian automatik, kecualikan IP tersebut daripada penjejakan.

Mengapa suapan langsung menunjukkan 0 pelawat walaupun laman web saya mempunyai trafik?+

Semak: (1) Adakah skrip widget dipasang pada laman anda? (2) Adakah kunci laman betul? (3) Adakah ambang aktif telah dilepasi? (4) Adakah pelawat menggunakan penyekat iklan agresif yang menyekat skrip penjejakan?

Bolehkah saya menapis suapan langsung mengikut negara atau peranti?+

Suapan langsung memaparkan semua pelawat aktif. Untuk paparan yang ditapis, gunakan halaman Log Pelawat atau Sesi dengan pilihan penapisnya. Suapan langsung sengaja dibuat ringkas untuk pemantauan masa nyata.

Analitik

Halaman Top

Halaman Teratas menunjukkan halaman laman web anda yang mendapat paling banyak trafik. Ia menyusun halaman mengikut lawatan, penglibatan, penukaran dan aktiviti sokongan. Gunakannya untuk mengenal pasti kandungan terbaik anda, mencari halaman yang kurang berprestasi dan menemui halaman yang menjana soalan sokongan.

Halaman Top
Halaman TopBAHASA peringkat Daftar halaman yang paling banyak dikunjungi dengan palang kunjungan dan terhitung.Halaman Topyoursite.comHalaman yang paling banyak dikunjungi/pricing3,402/2,910/docs1,740/blog/seo-guide980/signup6401RANKEDHalaman yang paling banyak dikunjungi2SIGNALSKunjungan lawati & konversi3FINDHalaman yang dikendarai tiket
Halaman anda disusun mengikut trafik dan penglibatan, supaya anda dapat mengenal pasti kandungan teratas dan halaman yang menjana permintaan sokongan.

Apa yang ditunjukkan setiap halaman

Halaman URL_Foter

Penuh URL Path. Halaman serupa (misalnya, varian produk) dikelompokkan jika pengelompokan diaktifkan.

Pandangan

Jumlah kali halaman ini dimuatkan dalam julat tarikh yang dipilih.

Pelawat unik

Berapa ramai orang berbeza yang melihat halaman ini (seseorang yang melihat halaman yang sama dua kali dikira sebagai 1 unik).

Kadar lantunan terlantar

Peratusan pelawat yang meninggalkan laman anda selepas melihat halaman ini sahaja. Lantunan tinggi pada halaman pendaratan = masalah. Lantunan tinggi pada halaman "terima kasih" = normal.

Masa purata

Berapa lama pelawat berada di halaman ini secara purata. Sangat singkat = tidak membaca. Sangat lama pada halaman borang = kekeliruan.

[Chatting dimulai]

Bilangan perbualan sembang yang dimulakan daripada halaman ini. Jumlah permulaan sembang yang tinggi pada halaman produk bermaksud penerangan produk mungkin kurang jelas.

Tiket Sogion Support

Berapa banyak tiket sokongan yang dibuat oleh pelawat yang berada di halaman ini. Bilangan tiket yang tinggi = kemungkinan masalah UX atau kandungan.

Contoh - contoh yang diupayakan

Cari halaman yang mencetuskan soalan sokongan

Skenario:
Pasukan sokongan anda terus menerima soalan tentang penghantaran. Halaman manakah yang gagal?
Apa yang perlu dilakukan:

Isih Halaman Teratas mengikut "Tiket sokongan" atau "Sembang dimulakan" secara menurun. Cari halaman produk atau penghantaran dengan bilangan yang tinggi. Halaman yang paling banyak menerima soalan sokongan mungkin mempunyai maklumat yang tidak jelas. Baiki kandungan halaman itu dan pantau sama ada soalan sokongan berkurang.

Cari halaman dengan tingkat keluar tinggi

Skenario:
Kau ingin tahu di mana orang-orang sering meninggalkan situsmu.
Apa yang perlu dilakukan:

Isih mengikut kadar lantunan menurun. Abaikan halaman yang secara semula jadi menjadi titik keluar (halaman terima kasih, halaman pengesahan). Fokus pada halaman yang sepatutnya mengekalkan penglibatan pelawat: halaman produk, harga, ciri. Halaman ini memerlukan seruan tindakan yang lebih baik atau kandungan yang lebih jelas.

Mengapa halaman menunjukkan 0 tontonan walaupun saya tahu ia mendapat trafik?+

Semak: (1) Adakah widget penjejakan dipasang pada halaman tersebut? Aplikasi satu halaman mungkin tidak mencetuskan paparan halaman apabila laluan berubah. (2) Adakah halaman itu dikecualikan dalam tetapan penjejakan? (3) Adakah CDN menyajikan versi dalam cache tanpa skrip penjejakan?

Analitik

intelijen Geofififier

Geo Intelligence menunjukkan dari mana pelawat anda datang mengikut negara, bandar, peranti dan sumber. Gunakannya untuk memahami pasaran geografi anda, memutuskan sokongan bahasa, merancang pemasaran serantau, dan mengesan corak trafik yang mencurigakan.

GeoNota
intelijen GeofififierPeta lokasi pelawat di sebelah kedudukan bar mengikut negara.intelijen Geofififieryoursite.comPelawat mengikut lokasiASUKDECAAVNG1MARKETSNegara, bandar, peranti2PLANBahasa & Kawasan3WATCHLalu lintas aneh yang aneh
Dari mana pelawat anda datang (mengikut negara, bandar dan peranti) untuk menilai saiz pasaran dan mengesan trafik luar biasa.

Apa yang kau lihat

Negara-negara top di Eropa

Negara teratas disusun mengikut bilangan pelawat. Klik sebuah negara untuk melihat data peringkat bandar.

Donat negeri makan

Kecewaan visual lalu lintas oleh negara.

Meja negara penuh

Setiap negara yang mempunyai pelawat dalam tempoh yang dipilih, menunjukkan bilangan pelawat, bilangan sesi, kadar lantunan dan kadar penukaran.

Kota Bor-down

Klik sebuah negara untuk melihat kota mana di dalam negeri itu yang paling banyak dikunjungi.

Cara kerja deteksi GeoIP

OpsIQ mengesan lokasi pelawat dalam dua cara: (1) Pengepala geo Cloudflare. Jika laman web anda berada di belakang Cloudflare, pengesanan negara adalah automatik dan tepat. (2) Pangkalan data MaxMind GeoLite2. Muat turun pangkalan data percuma itu dan konfigurasikan laluannya dalam Tetapan. Pengesanan peringkat bandar memerlukan pangkalan data GeoLite2-City, bukan hanya pangkalan data Country.

Kemacan VPN dan proksi

Pelawat yang menggunakan VPN akan kelihatan datang dari lokasi pelayan VPN, bukan lokasi sebenar mereka. Ini memang direka begitu. OpsIQ tidak boleh dan tidak sepatutnya cuba memintas VPN. Jika anda melihat corak negara yang luar biasa, ambil kira bahawa 10-20% pelawat mungkin menggunakan VPN.

Contoh - contoh yang diupayakan

Lalu lintas negara tak terduga yang tidak diduga

Skenario:
Anda menjalankan bisnis AS-hanya tetapi 30% Kemacetan dari India.
Apa yang perlu dilakukan:

Periksa: (1) Lihat durasi sesi dan halaman yang dilihat. (2) Mereka menemukan Anda melalui Google? (3) Jika lalu lintasnya asli dan terlibat, pertimbangkan untuk menambahkan harga atau konten tertentu India.

Membuat keputusan tentang sokongan bahasa

Skenario:
Anda ingin tahu sama ada anda patut menterjemah laman web anda ke dalam bahasa Sepanyol.
Apa yang perlu dilakukan:

Lihat halaman Perisikan Geo. Jika negara berbahasa Sepanyol (Sepanyol, Mexico, Colombia, Argentina dan lain-lain) bersama-sama mewakili lebih daripada 10% trafik anda dengan kadar lantunan yang rendah, terjemahan wajar dipertimbangkan. Semak juga: adakah pelawat dari negara-negara ini membuat penukaran pada kadar yang serupa dengan pasaran utama anda?

Perancangan syif sokongan serantau

Skenario:
Anda perlu menentukan waktu pasukan sokongan untuk zon waktu yang berbeza.
Apa yang perlu dilakukan:

Guna peta panas per jam (di Dashboard) dikombinasikan dengan Geo Intelligence 40% Kemacetanmu berasal dari Eropa dan 35% Anda perlu liputan untuk kedua zona waktu. peta panas menunjukkan tepat ketika setiap daerah paling aktif.

Negara ini dengan kunjungan tapi tidak ada perintah

Skenario:
Jerman menunjukkan 500 pelawat bulan ini tetapi sifar jualan.
Apa yang perlu dilakukan:

Siasat: (1) Adakah mereka melantun di halaman harga? Mungkin harga anda tidak kompetitif untuk pasaran itu. (2) Adakah anda menghantar ke Jerman? Semak sama ada halaman penghantaran anda menyebut Jerman. (3) Adakah pembayaran anda tersedia dalam EUR? Ketidakpadanan mata wang menyebabkan pembayaran ditinggalkan. (4) Adakah pelawat ini datang daripada satu sumber yang mungkin trafik berniat rendah?

Mengapakah pelawat menunjukkan negara "Tidak diketahui"?+

GeoIP tidak dikonfigurasikan. Sama ada sediakan Cloudflare (yang menambah pengepala geo secara automatik) atau muat turun pangkalan data MaxMind GeoLite2 dan tetapkan laluan fail dalam Tetapan > Laluan GeoIP.

Boleh aku menghalangi lalu lintas dari negara tertentu?+

OpsIQ tidak menyekat mengikut negara. Gunakan pelayan web anda atau peraturan tembok api Cloudflare untuk penyekatan berasaskan negara. OpsIQ memberi tumpuan kepada keterlihatan, bukan kawalan akses pada peringkat rangkaian.

Analitik

Saluran corong yang tidak nyaman

Corong Niat mengelaskan sesi pelawat mengikut apa yang kelihatan sedang mereka cuba lakukan: melayari, menyelidik, membandingkan, membeli, mendapatkan sokongan atau keluar. Gunakannya untuk memahami imbangan niat di laman web anda dan mengenal pasti di mana pelawat berhenti.

Saluran corong yang tidak nyaman
Saluran corong yang tidak nyamanCorong daripada Semak Imbas ke Penyelidikan ke Bandingkan ke Beli dengan kiraan, serta cip sokongan dan keluar.Saluran corong yang tidak nyamanyoursite.comLayari · 8,200_Penelitian · 4,100_Bandingkan dengan · 1,650_Belian · 520_Sodium Support 6%Membiarkan 11%1CLASSIFYApa yang pelawat mahukan2STAGESLayari untuk membeli3IXCarilah tempat itu
Sesi morfide diklasifikasikan oleh niat (browse, riset, bandingkan, membeli) sehingga Anda dapat melihat persis di mana orang-orang drop off.

Kategori yang tidak sesuai

Keramban

Pelawat yang sekadar melihat-lihat. Sesi pendek, sedikit halaman, tiada matlamat khusus dikesan.

Riset

Pelawat yang membaca halaman produk/ciri, dokumen atau kandungan blog. Masa lebih lama pada halaman, berbilang halaman kandungan.

Perbandingan

Pelawat yang melihat harga, perbandingan pelan atau jadual ciri. Selalunya pelawat yang kembali.

Pembelian

Pelawat di halaman pembayaran, troli atau pendaftaran. Niat tinggi. Inilah peluang penukaran anda.

Sodium Support-seeking

Pelawat di halaman bantuan, halaman hubungan atau yang memulakan sembang. Mereka memerlukan bantuan.

Terlompat

Pelawat yang keluar selepas satu halaman. Penglibatan rendah.

Bagaimana membaca corong

Mentafsirkan funnel anda

Skenario:
1,000 pelawat melihat halaman Harga. 270 membuka sembang. 92 memulakan pembayaran. 64 membayar. 18 membuka tiket sokongan.
Apa yang perlu dilakukan:

Halaman harga cukup kukuh untuk mewujudkan niat. Sembang penting dalam laluan pembelian: 27% pelawat halaman harga menggunakan sembang sebelum membeli. Tiket sokongan selepas pembayaran mungkin menunjukkan kekeliruan pengaktifan atau pembayaran. Tindakan: (1) Pastikan sembang AI menjawab soalan harga dengan baik. (2) Siasat 18 tiket sokongan selepas pembayaran untuk mencari isu biasa.

penapis waktu

Guna penapis julat tarikh untuk membandingkan corak niat sepanjang tempoh. Sebagai contoh, bandingkan minggu Jumaat Hitam dengan seminggu biasa. Anda patut melihat kenaikan dalam niat "Beli" dan mungkin "Mengumpul Sokongan" jika promosi anda mencipta kekeliruan.

Bagaimana kabarnya OpsIQ Keistimewaan?+

OpsIQ Ketampakan di halaman URLs, perilaku sesi, dan pola waktu. Menggariskan halaman dengan maksud pembanding sinyal. Checkout pages signal buy entry. Help/contact pages asignal support intent. Klasifikasi berbasis heuristik, bukan AI-driven.

Bolehkah saya menyesuaikan kategori niat?+

Tidak buat masa ini. Kategori adalah terbina dalam berdasarkan corak tingkah laku web yang biasa. Pengelasan niat tersuai ada dalam pelan hala tuju.

Analitik

Saluran, retensi dan jalur

Bina perjalanan tersuai daripada langkah halaman atau peristiwa, ukur pengekalan kohort dan temui laluan yang paling kerap diambil oleh pelawat melalui sesebuah laman.

Skrin produk
SaluranCorong tersuai memaparkan setiap langkah halaman/peristiwa, baki pelawat dan peratusan penukaran.Saluranruang kerjaSTEPS4CONVERSION28.4%WINDOW72hORANG KERJA HIDUPDitinjau dari segi kelayakan1,420 pelawat100%Boulder dipilih780 pelawat54.9%Pemeriksaan di mulai530 pelawat37.3%Pesanan selesai403 pelawat28.4%1DEFINEPilih 2–8 Langkah-langkah2UkuranFuuchi Set jendela konversi3AYAH IMPROVECarilah tetes terbesar
Corong tersuai memaparkan setiap langkah halaman/peristiwa, baki pelawat dan peratusan penukaran.

Saluran

Buat corong dengan nama 2 Ke 8 langkah halaman atau acara. Tetapkan tetingkap penukaran dalam jam; pelawat hanya dikira apabila langkah yang tersusun berlaku dalam tetingkap itu. Gunakan penurunan antara langkah untuk memilih tempat memeriksa main semula, ralat, kelajuan halaman atau pemesejan.

Pembalasan Plak

Pengekalan mengumpulkan pelawat ke dalam kohort mingguan dan menunjukkan berapa ramai yang kembali. Pilih tempoh 6, 8 atau 12 minggu. Kekalkan definisi kohort yang stabil apabila membandingkan keluaran atau kempen.

Path-path

Paths mencantumkan urutan halaman yang paling umum. Pilih panjang jalur dari 2 Ke 5 Halaman untuk menjaga hasil dapat dibaca. Gunakannya untuk menemukan jalan memutar yang tak terduga, jalan keluar umum dan konten yang berulang kali mendahului konversi.

corong-corong langganan adalah definisi analitis, bukan otomasi. Untuk bereaksi pada langkah yang telah selesai, membuat tujuan konversi, segmen, pemicu atau alur kerja.

Analitik

Ulangan sesi

Session Replay membolehkan anda menonton garis masa apa yang dilakukan oleh pelawat di laman web anda: elemen yang mereka klik, cara mereka menatal, di mana mereka menuding, dan apa yang mereka taip (dengan medan sensitif disembunyikan). Gunakannya untuk mendiagnosis masalah UX, mengesahkan laporan pepijat dan memahami kekeliruan pelanggan.

Ulangan sesi
Ulangan sesiPemain main semula yang memaparkan ruang pandang halaman dengan kursor, panel maklumat sesi dan penggelangsar garis masa.Ulangan sesiyoursite.comBeli sekarangKESIHATANDurasi Eksterior 3m 12s_14 klik· Desktop ASChrome 1241WATCHKlik untuk melihat, menggulung, mengetik2MASKEDBidang sensitif tersembunyi3DIAGNOSELaporan kutu verifikasi tanpa ijin
Main semula dengan tepat apa yang dilakukan oleh pelawat: klik, tatal, menaip (medan sensitif disembunyikan), pada penatal garis masa.

Cari sesi yang tepat

Dari halaman Sesi, cari sesi yang mempunyai isu dilaporkan, bilangan halaman yang tinggi tanpa penukaran, atau sesi daripada pelanggan yang telah membuka tiket sokongan. Klik ikon main semula untuk membuka paparan garis masa.

Apa yang diperlihatkan oleh tayangan ulang

Garis Waktu

Sebuah bar horizontal yang menunjukkan peristiwa dari waktu ke waktu.

Navigasi Halaman

Setiap halaman muncul sebagai segmen pada garis waktu.

Klik

Peristiwa klik ifford ditunjukkan sebagai titik pada garis waktu dan sebagai sorotan pada rekonstruksi halaman.

Mengumpul

Kedalaman tatal dijejak supaya anda boleh melihat sejauh mana pelawat membaca.

Interaksi Bentukan orang-orangan

Fokus medan dan peristiwa menaip direkodkan. Input teks dalam medan kata laluan dan medan sensitif disembunyikan secara lalai.

Kerahsiaan dan topeng

Main semula sesi menyamarkan medan borang yang sensitif secara lalai. Medan kata laluan, input kad kredit dan medan yang ditandakan dengan data-opsiq-mask tidak sekali-kali direkodkan. Anda boleh mengkonfigurasikan peraturan penyamaran tambahan dalam Tetapan > Penjejakan. Jika dasar pematuhan anda memerlukannya, anda boleh menyahdayakan main semula sepenuhnya.

Diagnosis pemeriksaan yang rusak

Skenario:
Seorang pelanggan berkata "Saya cuba membeli tetapi butang tidak berfungsi."
Apa yang perlu dilakukan:

Cari sesi mereka di halaman Sesi (cari mengikut e-mel). Buka main semula. Tonton segmen halaman pembayaran. Perhatikan: (1) Adakah mereka mengklik butang yang betul? (2) Adakah ralat JavaScript berlaku? (Semak halaman Ralat JS untuk masa tersebut.) (3) Adakah halaman dimuat semula atau menunjukkan mesej ralat? (4) Adakah medan wajib dibiarkan kosong? Main semula menunjukkan dengan tepat apa yang berlaku.

Luftore Berapa banyak penyimpanan yang digunakan untuk sesi replay?+

Data main semula bertambah mengikut jumlah trafik. Gunakan tetapan pengekalan untuk membersihkan data main semula lama secara automatik. Bagi laman web bertrafik tinggi, pertimbangkan tempoh pengekalan main semula yang lebih singkat (cth., 30 hari) untuk mengurus storan.

Bolehkah pelawat menarik diri daripada main semula?+

Jika "Hormati Do Not Track" didayakan dalam Tetapan, pelawat dengan pengepala DNT tidak direkodkan. Anda juga boleh mengecualikan halaman tertentu daripada main semula dalam tetapan penjejakan.

Analitik

Catatan Peristiwa Lenyap

Log Peristiwa menunjukkan setiap peristiwa yang telah direkodkan oleh OpsIQ: paparan halaman, klik, permulaan sembang, penciptaan tiket, jualan dan peristiwa tersuai. Gunakannya untuk menyahpepijat integrasi, mengesahkan penghantaran webhook dan memahami urutan tindakan.

Catatan Peristiwa Lenyap
Catatan Peristiwa LenyapLog acara kronologis dengan lencana tipe kode warna: pageview, chatting, sale, webhook dan custom.Catatan Peristiwa Lenyapyoursite.compageview· /pricing_12:04:01chat.startWidget · PELAJARAN dibuka12:04:09jualan$49.00 · ordo #104212:05:22webhookpayment.succeeded12:05:23customdemo_booked12:06:101EVERYTHINGSetiap kejadian tercatat2DEBUGKiriman webhook tentusah secara pasti3ORDERLihat urutan yang tepat
Garis waktu segala sesuatu OpsIQ record record (halaman, chat, penjualan, webhook, acara adat) untuk debugging dan audit.

Peristiwa terbina dalam (automatik)

⚠️
Ini adalah events-log nama — apa yang direkodkan oleh OpsIQ pada garis masa pelawat untuk analitik, penyahpepijatan dan audit. Ia merupakan perbendaharaan kata yang berbeza daripada Jalak web yang luar biasa BAHKAN peristiwa yang Anda langgankan sebagai titik akhir. Jika Anda sedang membangun penerima webhook, gunakan daftar di bagian Webhooks, atau hubungi webhooks.events.list; berlangganan ke sebuah nama dari tabel ini tidak akan memberikan apa-apa.

Setiap baris menunjukkan nama Anda hantar Dan nama kanonik OpsIQ_ Simpan sebagai. Kedua-duanya direkodkan: nama mentah yang anda hantar, dan nama kanonik yang dipetakan kepadanya, supaya laporan yang ditulis berdasarkan taksonomi kanonik terus berfungsi tanpa mengira alias mana yang digunakan oleh penjejak.

pageview → page.viewed

Muatan halaman terjejak. Termasuk URL, judul, referer dan timestamp. page_view dan view Kekhalifahan diterima sebagai hal yang sama.

chat_open → support.chat_opened

Pelawat membuka widget sembang.

chat_send → support.chat_message_sent

Pelawat menghantar mesej sembang. Bahagian balasan disimpan sebagai support.chat_message_received.

ticket_open → support.ticket_created

Tiket pendukung dibuat. ticket_create diterima sebagai perkara yang sama; balasan dan penutupan disimpan sebagai support.ticket_replied dan support.ticket_closed.

form_submit → form.submitted

Formulir terjejak telah diserahkan. submit Kekhalifahan diterima sebagai hal yang sama.

purchase → commerce.purchase_completed

Pembelian selesai. purchase_success, dan alias jualan order.completed, sale.completed, payment.completed dan invoice.paidSemua diterima dari platform yang terhubung.

Periksa → commerce.checkout_started

Pemeriksaan dimulai. cart_view, checkout_view, checkout_intent, checkout_abandon, add_to_cart.

login_success → identity.signed_in

Pelawat log masuk. Kegagalan ialah login_failed, disimpan sebagai identity.login_failed; penguncian ialah login_lockout_created.

signup → conversion.signup

Pelawat melengkapkan pendaftaran. Prospek ialah lead, disimpan sebagai conversion.lead.

js_error → error.js

AAOV JavaScript Ada kesalahan yang tertangkap di halaman terlacak.

💡
Nama peristiwa yang anda hantar yang bukan salah satu daripada alias ini masih direkodkan secara verbatim — tiada apa-apa yang digugurkan. Ia cuma tidak mempunyai pemetaan kanonik, jadi ia tidak akan digabungkan ke dalam laporan berasaskan taksonomi.

Acara suai

Anda boleh menghantar acara tersuai dari laman web atau pelayan anda kepada OpsIQ. Acara tersuai berguna untuk menjejak tindakan yang khusus untuk perniagaan anda: klik butang, penggunaan ciri, main video, muat turun, dan sebagainya.

JavaScript Acara · kuntom dari peramban
// Send a custom event from the browser
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "plan_selected", {
  plan: "pro",
  billing: "annual",
  value: 99
}]);
PHP · · rekam aktivitas kontak dari server Anda
// Record a server-side activity for a contact (PHP)
$ch = curl_init("https://your-opsiq-domain.com/api/v1.php");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer opq_your_key",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "action" => "crm.activities.record",
        "site_key" => "site_abc123",
        "email" => "[email protected]",
        "event" => "subscription.upgraded",
        "value" => 50,
        "currency" => "USD",
    ]),
]);
$response = curl_exec($ch);
curl_close($ch);

Acara penyaringan

Jenis acara

Tapis dengan nama acara tertentu: pageview, chat. started, ticket. created, dll.

Julat tarikh

Xerance menunjukkan peristiwa dari periode waktu tertentu.

Carian

Cari data peristiwa berdasarkan kata kunci (URL, email, nilai properti acara).

Berapa lama acara berlangsung?+

Peristiwa mengikut dasar pengekalan yang ditetapkan dalam Tetapan. Lalai: 90 hari. Peristiwa bernilai tinggi (pembelian, peristiwa keselamatan) boleh dikonfigurasi dengan tempoh pengekalan yang lebih lama.

Bolehkah saya menggunakan peristiwa dalam eksperimen A/B?+

Ketika membuat percobaan, Anda memilih sebuah acara konversi. Setiap acara bawaan atau kebiasaan dapat digunakan sebagai tujuan konversi.

Analitik

Eksperimen A/B

Eksperimen membolehkan anda menguji dua versi halaman atau ciri dan mengukur yang mana satu berprestasi lebih baik. OpsIQ menjejak tera, penukaran dan keertian statistik.

Eksperimen A/B
Eksperimen A/BDua kartu varians oledon membandingkan tingkat konversi, dengan lencana pemenang dan signifikansi pada varian terkemuka.Eksperimen A/Byoursite.comVarian A4.2%konversi · 1,020 _viewsVarian BPEMAIN6.8%konversi · 1,005 _views+62% angkat · 96% signifikan1ESTDua varian head-to-head2UkuranPerubahan & signifikansi bahasa3DIDECIDEMemetik seorang pemenang
Jalankan dua varian, pantau penukaran dan keertian statistik, dan isytiharkan pemenang.

Eksperimen bagaimana cara kerja eksperimen

1
\"Membuat eksperimen\"

Kekhalifahan memberikan nama, mendefinisikan metrik utama (konversi peristiwa), dan mengatur varian (control and test).

2
Jalankan

OpsIQ Jangan ubah eksperimen saat berjalan.

3
Baca hasilnya

Selepas data yang mencukupi dikumpulkan, semak tahap keyakinan. Keyakinan 95% bermakna anda boleh 95% pasti bahawa perbezaan itu benar, bukan kebetulan rawak.

Eksperimen fan

Draf

Dicipta tetapi belum dimulakan. Anda masih boleh mengedit varian dan metrik.

Kemudi Dijalankan

Sedang menugaskan pelawat kepada varian. Jangan sunting semasa ia berjalan.

Selesai

Hasil adalah final.

Arsip

Hasil telah dinilai dan eksperimen tidak lagi diperlukan dalam senarai aktif.

Praktek terbaik

Ditakrifkan metrik anda sebelum peluncuran

Tentukan apa yang anda ukur sebelum bermula. Memilih metrik selepas melihat keputusan menimbulkan bias.

Kecualikan lalu lintas internal

Tambah alamat IP pasukan anda ke senarai pengecualian supaya lawatan staf tidak memesongkan keputusan.

Kau sudah cukup lama berlari

Jangan hentikan eksperimen selepas 100 pelawat. Anda memerlukan ratusan atau ribuan pelawat bagi setiap varian untuk hasil yang boleh dipercayai.

Tes 1 perubahan sekaligus

Jika anda menukar tajuk utama DAN warna butang, anda tidak akan tahu perubahan mana yang menyebabkan peningkatan itu.

Rekod keputusan anda

Selepas eksperimen tamat, catat varian yang menang dan sebab anda memilih untuk melaksanakannya.

Berapa ramai pelawat yang saya perlukan untuk eksperimen yang sah?+

Ia bergantung pada kadar penukaran asas dan saiz kesan yang ingin anda kesan. Sebagai panduan umum: sekurang-kurangnya 500 pelawat bagi setiap varian untuk saiz kesan 20%. Untuk kesan yang lebih kecil, anda memerlukan ribuan.

Bolehkah saya menjalankan beberapa eksperimen pada masa yang sama?+

Jika dua percobaan mempengaruhi halaman yang sama, hasilnya mungkin berinteraksi.

Analitik

JavaScripterrors

JavaScript Errors mengumpul ralat sisi klien daripada pelawat laman web anda. Butang yang rosak, panggilan API yang gagal atau sumber yang hilang akan dipaparkan di sini. Gunakannya untuk mencari dan membaiki pepijat yang menjejaskan pelanggan sebenar.

Galat JS
JavaScripterrorsDaftar kesalahan yang ditangkap di front-end dengan titik keparahan, berkas sumber, peramban dan kejadian.JavaScripterrorsyoursite.comKesalahan terbaruTypeError: tidak dapat membaca x dari undefinedcheckout.js:42 · Chrome×214404 Dimuat /assets/app.cssIndeks · Safari×88Ucaught (dalam janji) NetworkErrorapi.js:17· Firefox×51Peringatan deprekasi: acara bongkar muatvendor. js · Edge×331CAPTUREKesalahan sisi-ke Klien2IMPACTPelungsur & Kiraan Monokin3IXSerangga nyata yang aneh
Pelawat sebenar yang menemui kod rosak dipaparkan di sini (mesej, sumber, pelayar dan kekerapannya) supaya anda boleh membaiki perkara yang penting.

Apa yang ditunjukkan oleh setiap kesalahan

Pesan kesalahan

Teks ralat JavaScript (cth, "TypeError: Tidak dapat baca ciri-ciri tak ditakrif").

Halaman URL_Foter

Di halaman mana kesalahan terjadi.

Pelayar dan peranti

Pelayar dan jenis peranti yang mengalami ralat itu. Sesetengah ralat khusus kepada pelayar tertentu.

Jejak Tumpukan

Lokasi kode dimana kesalahan terjadi. Klik untuk memperluas jejak stack penuh.

Pertama kali dilihat

Saat kesalahan ini muncul pertama kali.

Terakhir terlihat

Saat kesalahan ini terjadi baru-baru ini.

Amerika/Oppu

berkali-kali kesalahan ini telah dicatat.

Sesi yang dipengaruhi oleh orang lain

Berapa banyak sesi pelawat berbeza yang mengalami ralat ini.

Kesalahan peprioritasan

Tidak semua JavaScript Kesalahan - kesalahan yang perlu segera diperhatikan. Diprioritaskan oleh: (1Kesalahan pada halaman kritis (checkout, signup, login), (2kesalahan dengan jumlah sesi tinggi, (3) kesalahan yang muncul baru-baru ini (kemungkinan regresi dari perubahan kode), (4Kesalahan pada kode Anda sendiri (bukan skrip pihak ketiga).

Membaiki butang pembayaran yang rosak

Skenario:
Halaman Ralat JS memaparkan "TypeError: Cannot read properties of undefined (reading submit)" pada /checkout, yang mempengaruhi sesi _45 minggu ini.
Apa yang perlu dilakukan:

Ini bermakna 45 pelanggan sebenar tidak dapat melengkapkan pembayaran. Langkah: (1) Buka halaman dalam gabungan pelayar/peranti yang sama. (2) Buka konsol pelayar dan hasilkan semula ralat. (3) Semak surih tindanan untuk mencari baris kod yang tepat. (4) Betulkan pepijat, laksanakan dan pantau kiraan ralat sehingga menjadi sifar.

Apakah ada kesalahan tangkapan OpsIQ dari skrip pihak ketiga?+

Ya, OpsIQ Tangkapan semua JavaScript Kesalahan pada halaman, termasuk kesalahan dari skrip analitik, widget chat, dan skrip iklan. Tapis oleh URL Di jejak tumpukan untuk fokus pada kodemu sendiri.

Bagaimanakah saya mengecualikan ralat tidak berbahaya yang diketahui?+

Anda tidak dapat menekan galat spesifik dalam OpsIQ, tetapi Anda dapat menyaring daftar demi halaman URL Pesan galat atau ralat. Baiki atau abaikan kesalahan dari ekstensi peramban (mereka sering menunjukkan sebagai kesalahan dari sumber yang tidak diketahui).

Jualan

Penjualan dan konversi

Penjejakan jualan menyambungkan kedai atau platform pengebilan anda kepada OpsIQ supaya anda dapat melihat hasil bersama tingkah laku pelawat. Setiap pembelian dikaitkan dengan perjalanan pelawat supaya anda tahu halaman, kempen dan saluran mana yang memacu hasil.

Jualan
JualanSkrin Jualan: jumlah hasil dengan kawalan tempoh Sepanjang masa, carian, dan jadual Pembelian Terkini (tarikh, pelanggan, platform, amaun, sumber).Jualanyoursite.comPELAYAN$42,180+18%Sepanjang masa ▾E-mail pencarian , IP, ID Order...Pembelian Terkini BebelianTARIKHFOBUS TENGAHPLATIKSUMSUMBERKehajar Jun 3_jane@acme.comShopify$49googleKehajar Jun 3_m.osei@shop.ioWooCommerce$129directKehajar Jun 2_rita@studio.coStripe$480iklan1PELAYANPesanan & pembaharuan2RECENT PURCHASESTarikh · pelanggan · jumlah3ATTRIBUTEDKe sumber lalu lintas
Skrin Jualan sebenar, hasil di bahagian atas, kemudian Pembelian Terkini (tarikh, pelanggan, platform, jumlah), setiap satu diatribusikan kepada sumber trafiknya.

Papan dashboard bersoda

Penjualan hari ini

Hasil daripada pesanan yang selesai hari ini. Dimuat semula dengan setiap acara pesanan baharu daripada platform anda yang disambungkan.

Minggu ini / bulan ini / total

Hasil kasar yang diagregatkan sepanjang tempoh, dalam mata wang asas ruang kerja. Setiap jubin juga menunjukkan nilai bersih selepas bayaran balik: bayaran balik ialah baris kontra bertarikh yang direkodkan dalam tempoh ia berlaku, tidak pernah ditolak daripada jualan yang dibalikkannya.

Bagan Trend

Graf garis yang menunjukkan hasil harian dalam julat tarikh yang dipilih. Cari lonjakan (promosi, kempen) dan penurunan (isu, bermusim).

Sumber penukar Top Font

Sumber lalu lintas mana yang membawa kepada pembelian paling banyak. Pelanggan "Langsung" sering tanda buku laman anda. Pengguna "Google" menjumpai anda melalui carian.

pembelian terbaru

Jualan terkini dengan pelanggan, negara dan peranti, nombor pesanan atau invois, jumlah dan mata wang, item yang dibeli dan sumber trafik. Jualan yang kemudiannya dibayar balik, dibatalkan atau dipadam oleh platform akan keluar daripada jadual (dibatalkan, dipadam) atau menunjukkan bayaran baliknya (dibayar balik).

Pembelian tak dikonfirmasi (perjalanan pelanggan)

Apabila penjejak melihat pelawat sampai ke pengesahan pembelian dalam pelayar tetapi belum ada platform bersambung yang melaporkan jualan itu, perjalanan pelanggan menunjukkan baris Pembelian (belum disahkan) dengan lencana ambar. Ia tidak pernah dikira sebagai hasil. Apabila platform mengesahkan jualan itu, pembelian yang disahkan menggantikannya.

Rekonsiliasi dan verifikasi Methodius

Penyambung jualan tidak bergantung pada satu webhook sahaja. Setiap isyarat pembayaran yang dihantar platform boleh membuka jualan, Connector Contract 2.3 membaca semula senarai jualan selesai milik platform sendiri mengikut jadual (secara lalai setiap jam bagi setiap workspace), dan Contract 2.5 menyemak semula dengan platform setiap jualan yang sudah ada dalam lejar, supaya bayaran balik, pembatalan, pembetulan atau pemadaman di sumber sampai ke OpsIQ walaupun webhook tidak pernah dihantar. Pengendali boleh menjalankan kedua-duanya dari pelayan dengan tools/sales_reconcile.php.

Pribumi Asli Kedai

Apabila OpsIQ Storefront ialah platform anda, ia menyuap lejar yang sama secara asli: pesanan yang disahkan ialah jualan (dengan itemnya, mata wang dan negara pembeli), pembeli menjadi identiti pelanggan supaya halaman Pelanggan dan perjalanan pelanggan memaparkannya, proses pembayaran ialah satu peringkat perjalanan yang dilihat oleh Corong Niat, dan bayaran balik direkodkan sebagai entri bayaran balik bertarikh.

Panduan penyiapan platform Poofical

Shopify

Pergi ke Penyambung > Shopify. Cipta aplikasi tersuai dalam pentadbir Shopify anda (Tetapan > Aplikasi dan saluran jualan > Bangunkan aplikasi). Berikan skop: read_orders, read_customers, read_products. Salin token akses Admin API. Dalam OpsIQ, masukkan domain kedai anda (cth., your-store.myshopify.com) dan token akses itu. Klik Uji Sambungan. Jika berjaya, dayakan penyegerakan webhook untuk pemberitahuan pesanan masa nyata.

WooCommerce

Pergi ke Penyambung > WooCommerce. Dalam pentadbir WordPress anda, pergi ke WooCommerce > Tetapan > Lanjutan > REST API. Cipta kunci dengan kebenaran Baca/Tulis. Salin consumer key dan consumer secret. Dalam OpsIQ, masukkan URL laman anda, consumer key dan consumer secret. Klik Uji Sambungan.

BigCommerce

Pergi ke Penyambung > BigCommerce. Dalam pentadbiran BigCommerce anda, pergi ke Advanced Settings > API Accounts. Cipta Akaun API V2/V3 dengan skop baca untuk Orders, Customers dan Products. Salin token akses, ID klien dan laluan API. Masukkannya dalam OpsIQ dan uji.

Magento 2

Pergi ke Penyambung > Magento. Dalam pentadbir Magento anda, pergi ke System > Integrations. Cipta integrasi baharu dengan akses sumber API kepada Sales, Customers dan Catalog. Aktifkan integrasi itu dan salin token akses. Masukkan token itu dalam OpsIQ bersama URL asas Magento anda.

PrestaShop

Pergi ke Penyambung > PrestaShop. Dalam admin PrestaShop anda, pergi ke Advanced Parameters > Webservice. Dayakan perkhidmatan web dan cipta kunci baharu. Berikan akses kepada pesanan, pelanggan dan produk. Salin kunci itu dan masukkannya dalam OpsIQ bersama URL kedai anda.

OpenCart

Buat sambungan ke connectors > OpenCart. Hasilkan API Bukti kelayakan dari panel admin OpenCart anda. Masukkan API URL Nama pengguna, dan kunci masuk OpsIQ Konektornya menggunakan REST OpenCart.API Ogos untuk pesanan dan data pelanggan.

osCommerce

Pergi ke Penyambung > osCommerce. Konfigurasikan akses pangkalan data atau kelayakan API seperti yang didokumenkan dalam tetapan penyambung. Integrasi osCommerce biasanya memerlukan akses terus ke pangkalan data atau modul API tersuai.

Stripe

Pergi ke Penyambung > Stripe. Salin kunci API terhad Stripe anda daripada Papan Pemuka Stripe (Developers > API keys). Kunci itu memerlukan akses baca kepada Customers, Charges, Invoices dan Subscriptions. Masukkannya dalam OpsIQ. Konfigurasikan titik akhir webhook untuk peristiwa masa nyata.

Kebiasaan / platform lain

Gunakan REST API atau webhook untuk menghantar peristiwa jualan daripada mana-mana platform. Hantar peristiwa order.completed dengan e-mel pelanggan, amaun, mata wang dan item. Lihat bahagian Events API untuk format muatan.

Kesepahaman penjualanmu itu corong

Sumber penukar Top Font

Menunjukkan saluran mana yang membawa pelanggan yang membayar. Jika Google membawa 1000 pelawat dan 50 jualan, itu ialah kadar penukaran 5%. Jika e-mel membawa 200 pelawat dan 30 jualan, itu ialah 15%. E-mel lebih berkesan bagi setiap pelawat.

Bayaran balik

Bayaran balik ialah entri lejar bertarikhnya sendiri (baris kontra) dan mengurangkan hasil bersih dalam tempoh ia berlaku; jualan asal mengekalkan nilai kasarnya. Jualan yang dibatalkan atau dipadam di platform digugurkan daripada halaman Jualan dan disimpan dalam lejar sebagai sejarah. Jika kadar bayaran balik tinggi daripada sumber tertentu, trafik itu mungkin berkualiti rendah.

Pengendalian mata wang

OpsIQ menyimpan mata wang dan amaun transaksi asal. Perniagaan berbilang mata wang melihat hasil dalam setiap mata wang. Pelaporan ternormal menggunakan kadar pertukaran yang dikonfigurasikan.

Contoh - contoh yang diupayakan

100 pelawat, tiada jualan

Skenario:
Halaman harga anda menerima 100 pelawat sehari tetapi tiada penukaran langsung.
Apa yang perlu dilakukan:

Siasat: (1) Gunakan Main Semula Sesi pada pelawat halaman harga. Perhatikan cara mereka berinteraksi dengan jadual harga. (2) Semak Halaman Teratas untuk kadar lantunan dan masa pada halaman bagi halaman harga. (3) Semak perbualan Sembang daripada pelawat halaman harga. Apakah soalan yang mereka tanya? (4) Bandingkan halaman harga anda dengan pesaing. (5) Cuba eksperimen A/B dengan susun atur harga yang berbeza.

Atribusi untuk kempen pemasaran

Skenario:
Anda menghantar kempen e-mel dengan tag UTM. Bagaimanakah anda mengukur kesannya terhadap hasil?
Apa yang perlu dilakukan:

Pergi ke Jualan dan tapis mengikut sumber. Cari parameter UTM kempen. Anda akan melihat: (1) Berapa ramai pelawat datang daripada e-mel. (2) Berapa ramai yang bertukar menjadi jualan. (3) Jumlah hasil yang diatribusikan kepada kempen. (4) Bandingkan dengan tempoh yang sama sebelum kempen.

Mengapa Jualan menunjukkan sifar walaupun kedai saya mempunyai pesanan?+

Semak: (1) Adakah penyambung platform disambungkan dan sihat? Pergi ke Penyambung dan semak statusnya. (2) Adakah penyegerakan webhook didayakan? Jika menggunakan tinjauan berkala, adakah tugas cron sedang berjalan? (3) Adakah penyambung mempunyai skop API yang betul? Untuk Shopify, anda memerlukan read_orders.

Bagaimanakah OpsIQ mengatribusikan jualan kepada pelawat?+

Apabila pesanan masuk melalui penyambung, OpsIQ memadankan e-mel pelanggan dengan pelawat yang dikenali. Jika pelawat itu telah dijejaki sebelum pembelian, jualan itu diatribusikan kepada perjalanan pelawat mereka, termasuk sumber trafik, halaman pendaratan dan sejarah sesi.

Bolehkah saya menambah jualan secara manual?+

Anda boleh menghantar peristiwa jualan melalui REST API atau webhook daripada mana-mana sistem. Format peristiwa didokumenkan dalam bahagian Events API.

Perniagaan

Bina, luncurkan dan operasikan Storefront asli

Storefront ialah kedai asli OpsIQ untuk produk, halaman, katalog gaya, panel promosi, pembayaran, akaun pelanggan dan jualan berbantukan AI dalam Sembang Pelanggan dan saluran sosial yang disokong.

Mula pada Pemasaran → Storefront

1
Pilihlah ruang kerja

Sahkan laman yang sedang anda konfigurasikan. Produk, tetapan, halaman, pesanan dan analitik diasingkan kepada ruang kerja tersebut.

2
Memungkinkan Ecommerce dan Storefront

Tetapan Umum → E-dagang ialah pihak berkuasa induk. Penerbitan kedai dalam talian, penciptaan pesanan dan pembayaran kekal berasingan supaya anda boleh mempratonton katalog dengan selamat.

3
ISSUplet lengkap produk

Tetapkan jenis produk, harga, mata wang, inventori, varian/pilihan, media dan pemenuhan. Pratonton produk dan pilihan pembayaran sebelum menerbitkan.

4
Mengkonfigurasi pembayaran dan pemenuhan

Sambungkan get laluan atau tambah pindahan bank, tunai atau bayaran di kaunter. Barangan fizikal memerlukan zon penghantaran atau pengambilan; barangan digital memerlukan fail atau kod yang dilindungi.

5
Kesiap Bacaan Luncurkan

Betulkan setiap penghalang dan semak setiap amaran, kemudian lengkapkan pesanan kotak pasir daripada Kedai awam.

Kandungan Tentang dan dasar permulaan

Kedai baharu dan yang dinaik taraf menerima teks permulaan yang boleh disunting untuk Tentang kami, Ketentuan dan ketentuan, Privasi, dan Bayaran balik dan pemulangan Bila ladang-ladang itu kosong, salinan dagang yang ada tidak pernah ditulis-ganti.

  • \"Berusahalah setiap kali\" [Add …] Menyamukan dan bertanya TEMPLATE STARTER Pemberitahuan sebelum peluncuran.
  • ¡Gunakan nama asli hukum, rute kontak, janji pemenuhan, peraturan pengembalian, praktik data, periode retensi dan pasar yang dilayani.
  • Saran yang sesuai untuk produk dan negara yang Anda layani.

Desain, halaman dan promosi

Desain tema dan halaman

¡Ofdin Pilih tema dan komposisi warna berkuasi, kemudian tune tipografi, isi/gradient, bentuk, lebar, gerak, perilaku melayang dan ringan/gelap. Pratonton desktop dan telepon sebelum menyimpan.

Perihal, Hubungi, Pameran/Lookbook dan Akaun

Bina setiap halaman daripada blok yang boleh disusun semula. Setiap blok mempunyai varian reka bentuk premium. Pastikan blok yang membuat dakwaan seperti statistik, pasukan, anugerah atau petikan dimatikan sehingga kandungannya benar.

Halaman - halaman tersendiri

Tetapkan tajuk, slug, hero, SEO dan blok tersusun; pratonton semasa draf, kemudian terbitkan. Laluan kedai yang dikhaskan seperti troli, pembayaran, akaun dan dasar tidak boleh digunakan semula.

Popk dan panel sisi promosional

Cipta halaman modal dengan sekurang-kurangnya satu blok. Pilih reka bentuk premium, kedudukan tengah/kiri/kanan/bawah, pencetus muat/lengah/keluar/klik, latar belakang, gerakan, lebar, kupon dan tingkah laku sekali bagi setiap pelawat. Uji tutup, papan kekunci dan susun atur telefon.

Menu dan pijakan

Pautkan ke halaman, produk, koleksi, dasar, tindakan akaun/bantuan/troli, modal langsung atau URL luar yang selamat. Item pengepala menyokong satu peringkat menu lungsur/menu besar.

Klien dari keluarga Chat dan pesanan sosial

Hidupkan penjualan Chat Klien, kemudian pilih di mana pelanggan boleh membeli. Pembantu mencari katalog dan bertanya pelayan untuk kutipan berkuasa; pelayan—bukan model—mencipta kad pesanan ditandatangani. Kepastian hanya berlaku melalui kad itu pada web atau interaksi yang disahkan pada saluran sosial.

WhatsApp, Messenger, Instagram, Telegram, LINE, SMS dan X menggunakan akaun saluran yang disahkan oleh penyedia sebagai identiti saluran. E-mel masih dikumpulkan untuk resit. Pesanan melalui penyambung mengekalkan kontrak universal yang ditandatangani dan jumlah yang ditentukan oleh peniaga; konfigurasi Storefront tidak mengubah kontrak itu.

Analisis Intelijen Kedai Kedai

Semak pelawat unik, tontonan produk, penambahan ke troli, permulaan/pengabaian/penyelesaian daftar keluar, penukaran, pesanan yang disahkan, hasil mengikut mata wang, pemerolehan, peranti, negara/bandar, produk teratas, pemulihan dan amaran kualiti data. Penukaran menggunakan peristiwa Kedai awam yang ditag secara jelas; jumlah mata wang tidak pernah digabungkan secara senyap. Sengkang bermaksud julat yang dipilih tidak dapat menjawab soalan penukaran, bukan sifar peratus.

Umum OpsIQ API

Gunakan kunci pembawa dengan commerce.read; analytics.read Meditasi juga memberikan analitik snapshot.

Bacaan Storefront bertaip
{ "action": "commerce.storefront.get" }
{ "action": "commerce.storefront.catalog.get" }
{ "action": "commerce.pages.list", "kind": "modal", "status": "live" }
{ "action": "commerce.analytics.snapshot", "range_days": 30 }
{ "action": "commerce.readiness.get" }
{ "action": "commerce.products.list", "filters": { "active": true } }

Storefront mendapatkan kembali konfigurasi public-safe, URL, menu dan starter-review state. Storagefront catalog mengembalikan setiap tema, desain halaman, tipe blok, komposisi blok dan shell promosi premium sehingga pembangun jarak jauh tidak pernah mengkode keras pilihan. Daftar halaman mengembalikan halaman custom dan modal premium. Analytics mengembalikan agregat tanpa identitas pelanggan. Readiness mengembalikan cek peluncuran yang dapat ditindaklanjuti. OpenAPI dan Postman menggunakan kontrak yang sama ini.

Undur-lewat pra-launch akhir

  1. Desktop dan telefon: halaman utama, carian, produk/varian, troli, pengesahan pembayaran keluar, akaun, penjejakan, muat turun, Perihal, Hubungi, dasar, lookbook, halaman, menu dan setiap promosi langsung.
  2. THAK melengkapi satu pembayaran kotak pasir dan memverifikasi status pesanan, penerimaan, stok dan pemenuhan.
  3. Tempatkan satu pesanan Klien Chat dan satu pesanan kotak-pastor penyedia pada setiap saluran sosial yang diaktifkan.
  4. Sahkan bahawa acara tersebut muncul di bawah permukaan dan mata wang yang betul dalam Store Intelligence.
⚠️
Teks dasar permulaan menjadikan kedai tidak kosong, tetapi ia tidak menjadikan teks undang-undang itu telah disemak. Launch Readiness terus memberi amaran sehingga setiap gesaan diganti.
Jualan

Lead

Bakal pelanggan ialah pelawat atau pelanggan yang menunjukkan niat membeli atau mendapatkan sokongan. OpsIQ mengesan bakal pelanggan secara automatik berdasarkan tingkah laku: lawatan ke halaman harga, lawatan berulang, interaksi sembang, permulaan pembayaran dan penglibatan tinggi. Gunakan halaman Bakal Pelanggan untuk mengutamakan susulan dan menyalurkan saluran jualan CRM anda.

Lead
LeadSkrin Prospek: jadual boleh dicari dengan lajur IP/e-mel, lokasi, peranti, sumber dan masa di laman, serta sumber dan negara teratas.Leadyoursite.comCari IP, kota, negara...Sumber top google · Negeri Top: ASIP/ EMAILKELARGAANPERANTISUMBERWAKTU41.62.10.4InggrisMudah Alihgoogle12s_ 4mjane@acme.com· AS · New YorkDesktopdirect02s_Memoyangm.osei@shop.io· BerlinMudah Alihutm:ads40s_203.0.113.9· TorontoDesktopgoogle28s_ 3m1DETECTEDPelawat berniat tinggi2TOPNegara3ENRICHEDIP, lokasi, peranti, masa
Skrin Prospek sebenar, pelawat berniat tinggi sebagai jadual yang boleh dicari (IP/e-mel, lokasi, peranti, sumber, masa di laman web) dengan sumber dan negara teratas.

Apa yang membuat memimpin

Kunjungan halaman yang istimewa

Pelawat yang melihat halaman harga atau pelan anda sedang aktif mempertimbangkan pembelian.

Kunjungan kembali

Pelawat yang kembali beberapa kali menunjukkan minat tetapi belum membuat penukaran.

Interaksi Sembang

Pelawat yang memulakan sembang sedang aktif mencari bantuan, sama ada sebelum atau selepas pembelian.

Mulailah pemeriksaan

Pelawat yang sampai ke halaman pembayaran tetapi tidak menyelesaikan pembelian.

Formulir penyerahan

Pelawat yang menghantar borang hubungan, permintaan demo atau borang pendaftaran.

Pertunangan halaman tinggi untuk wanita

Pelawat yang melihat banyak halaman dengan tempoh sesi yang panjang sedang membuat kajian secara mendalam.

Panel detail yang dituntun olehnya

Klik sebarang petunjuk untuk melihat profil penuh mereka:

Identitas

Nama, e-mel, syarikat jika diketahui. Prospek tanpa nama menunjukkan IP dan lokasi.

Sesi

Sesi kesemua dari lead ini dengan aliran halaman, durasi, dan sumber.

Halaman dilihat

Setiap halaman yang mereka kunjungi, diperintahkan oleh resensi.

Sumber

Bagaimana mereka menemukanmu: organik, dibayar, sosial, referensi, langsung.

Skor Lead

AAOV0-100 Skor ketaksonan berdasarkan intensitas perilaku, rekensi, dan niat halaman.

Status CRM

Apakah timah ini telah ditambahkan ke CRM sebagai kontak atau kesepakatan.

Jualan typ

Cadangan AI-jana tentang apa yang perlu dilakukan seterusnya (cth, "Dilawati harga 3 kali · pertimbangkan penyebaran proaktif").

Lencana timbal bernilai tinggi

Lumpuh dengan skor di atas 80 Ini adalah prospek terpanas Anda, memprioritaskan mereka untuk outreach, proactive chatting, atau CRM pipeline entry.

Contoh - contoh yang diupayakan

Mengendalikan lead panas

Skenario:
Seorang bakal pelanggan melihat halaman harga anda 3 kali dalam 2 hari, memulakan sembang bertanya tentang pelan enterprise, tetapi belum membuat pembelian.
Apa yang perlu dilakukan:

Ini prospek berniat tinggi. Langkah: (1) Semak butiran prospek mereka untuk maklumat syarikat dan jawatan. (2) Semak transkrip sembang untuk keperluan dan bantahan khusus. (3) Cipta urus niaga dalam CRM dengan maklumat yang dikumpul. (4) Tugaskan tugasan susulan kepada ahli pasukan jualan. (5) Jika mereka kembali ke halaman harga, peraturan sembang proaktif boleh mencetuskan mesej yang diperibadikan.

Counded converting anonymous mengarah ke kontak CRM

Skenario:
Anda telah 50 Tanpa nama anonim memimpin dengan skor tinggi tapi tidak ada alamat email.
Apa yang perlu dilakukan:

Pilihan: (1) Cipta peraturan proaktif yang menawarkan diskaun atau muat turun sumber sebagai pertukaran untuk e-mel pada halaman berniat tinggi. (2) Gunakan widget sembang untuk meminta e-mel apabila pelawat tanpa nama memulakan perbualan. (3) Tambah token identiti pada halaman log masuk/daftar anda supaya pelawat yang kembali dikenal pasti secara automatik.

Bagaimana skor utama dihitung?+

Skor merujuk kepada: kebelakangan lawatan (baru = tinggi), frekuensi lawatan(lebih = lebih tinggi), halaman dilihat (harga/checkout = tertinggi), tempoh sesi (panjang = paling tinggi), interaksi sembang (terlibat = yang tertinggi) dan lawatan balik (sesi berbilang = terbesar).

Bolehkah saya menyesuaikan peraturan pemarkahan petunjuk?+

Ya. Dalam Konfigurasi CRM, anda boleh tambah peraturan skor-lead yang meningkatkan skor berdasarkan kata kunci tertentu, peristiwa, sumber atau corak halaman.

CRM

FOGY Anda CRM mulai dari sini

OpsIQ menyediakan CRM lengkap yang mengutamakan AI yang menangkap kebenaran pelanggan, membersihkan data, menskor bakal pelanggan, membimbing urus niaga, meramalkan hasil dan bertindak, dengan risikan laman web, sokongan, tiket, produk dan pembayaran sebagai satu graf langsung. Setiap tindakan AI bersumber, boleh dijelaskan, boleh diterbalikkan dan dikawal melalui kelulusan.

AI CRM
AI CRM selayang pandangDial Trust diatur untuk Copilot di samping empat kartu agen AI: Steward, Prospector, Retensi dan Analis.AI CRMruang kerjaDial KepercayaanManual UmuNameCopilotAutopilotBerapa banyak AI lakukan sendiriDSPengurus(Kehancuran) menjadi debu yang besar,Data validasi morfisSDRProspectorskor:tugas baruRTPembalasan PlakSpot churn,KemudikanADAAnalisisirancast &Catatan kaki1AI-FIRSTEmpat ejen pakar2YOU DECIDEOtonomi Dial Kepercayaan3TRUSTEDSumber BAHASA & reversibel
AI-AI-pertama CRM dijalankan oleh empat agen spesialis, dan Trust Dial yang memutuskan berapa banyak mereka lakukan sendiri.

SEview halaman CRM

AI CRM (Pusat Komando)

Mulailah dari sini.

Skrin utama harian anda: denyutan hasil, apa yang ditemui oleh AI, apa yang dilakukannya, baris gilir kelulusan, langkah seterusnya, kesihatan ejen dan ROI.

Kenalan Baru

Inisi

Orang dan syarikat dalam CRM anda. Cari, tapis, beri skor dan urus profil.

Paipline

Inisi

Diagnoza Visual menangani papan dengan tahap seret dan jatuhkan, memenangkan kemungkinan, dan AI coaching.

iran dan Laporan

Inisi

Prediksi tingkat papan schec, mungkin, kasus terbaik, dengan interval kepercayaan diri dan pelacakan akurasi.

Siklus Hidup

Inisi

Kedudukan setiap pelanggan: aktif, berisiko, sedia untuk pengembangan, perlu diperbaharui, atau hampir berhenti.

Bina CRM saya

Konfig

Huraikan persediaan CRM anda dalam bahasa Inggeris biasa. OpsIQ menjana pelan yang boleh diterbalikkan dan menerapkannya setelah diluluskan.

Kesehatan CRM

Operasi

Halaman pemeriksaan-sendiri: skema, agen, rute, aksi AI, dan data langsung dihitung.

Bagaimana OpsIQ menjaga anda selamat

Tanyalah sebelum bertindak

AI proposal pergi ke antrian persetujuan. Anda menyetujui, mengedit, atau menolak masing-masing.

Jangan sekali-kali dirind

Apabila AI mencadangkan perubahan, ia memaparkan nilai semasa dan nilai yang dicadangkan. Data yang dimasukkan oleh manusia mempunyai perlindungan asal usul.

Semuanya reversibel

Setiap aksi AI tercatat dalam jurnal.

Terangkanlah

Setiap rekomendasi dari AI menunjukkan penalarannya dan sumber data yang digunakan.

Mulai dari sini.

1
AI CRM Open AI Open

Klik AI CRM dalam navigasi kiri. Pusat Kawalan menunjukkan keadaan semasa anda.

2
Periksa Kesehatan CRM

Kesehatan CRM Open untuk memastikan skema, agen, dan rute siap.

3
Orang hubungan yang tidak diketahui

Jika penyambung aktif (Shopify, WHMCS, dll.), kenalan diimport secara automatik. Jika tidak, import melalui CSV atau cipta secara manual.

4
Buat pipa

Pergi ke Pipeline dan buat pipa pertama dengan tahap (misalnya, Lead, Qualified, Proposal, Negosiasi, Won, Lost).

5
Tambah urusan pertama anda

Berikan kesepakatan dari kontak, atur jumlah dan tahapannya, dan biarkan Pelatih Deal membimbingmu.

Apa aku perlu menggunakan CRM?+

Tidak. CRM adalah pilihan. OpsIQ berfungsi dengan sempurna sebagai platform penjejakan + sokongan + AI tanpa CRM. Dayakannya apabila anda bersedia untuk mengurus jualan dan hubungan pelanggan.

Bolehkah CRM berfungsi tanpa penyambung?+

Ya. Anda boleh mencipta kenalan dan urus niaga secara manual. Penyambung memperkaya CRM dengan data platform (pesanan, langganan, tiket) tetapi tidak diwajibkan.

Apa itu Lapisan Kepercayaan?+

Trust Layer ialah sistem keselamatan yang mengawal apa yang boleh dilakukan oleh AI. Mod Copilot (lalai): AI mencadangkan, manusia meluluskan. Mod Autopilot (ikut pilihan): AI bertindak secara automatik pada operasi berisiko rendah yang boleh diterbalikkan.

CRM

Skrin utama CRM AI

Command Center ialah taklimat harian anda. Bukanya setiap pagi untuk melihat apa yang telah berlaku, apa yang memerlukan perhatian, dan apa yang perlu dilakukan seterusnya.

Pusat Komando Ukur
Pusat Komando CRMRumah ORMA CRM dengan Forecast/Win-rate/Pipeline togol, KPI yang dibocorkan-forecast, dan antrian proposal AI dengan Approve dan Dismiss pada setiap baris.Pusat Komando CRMruang kerjairantinaTingkat kelonggaranPaiplineLALUAN OLEH Q INIsenilai $74k87%proposal AI · antrian persetujuanPerjanjian · Acme $24kdaripada sembang dengan pembeliAperroveKetepikanAlih bahasa Nimbus → Proposaljawapan positif dikesanAperroveKetepikanTugas log · mengikuti PuncakAgi_t tidak ada aktivitas dalam 7 _hariAperroveKetepikan1TOGGLETOWOF Forecast · Win rate · Pipeline2AI PROPOSESKesepakatan, tahap, tugas3YOU DECIDEMenghargai atau Tidak Menyalahkan
Pusat Komando yang sebenarnya: switch antara Forecast, Win rate dan Pipeline, dan bekerja antrian proposal AI, menyetujui atau membatalkan kesepakatan, langkah panggung dan tugas-tugas yang disarankan.

Apa yang ditunjukkan Pusat Komando

Angka hari ini

Nilai saluran jualan, urus niaga dimenangi/kalah, petunjuk baharu, urus niaga aktif dan trend hasil, gambaran ringkas keadaan semasa anda.

Apa yang OpsIQ ditemukan

Cerapan yang ditemui oleh AI: urus niaga yang terhenti, akaun berisiko, peluang baharu, isu kualiti data dan isyarat pasaran.

Mema_ki perbuatan yang dilakukan OpsIQ

Tindakan AI telah diambil (dalam Autopilot) atau diusulkan (dalam Copilot): kemajuan tahap, update skor, pengayaan kontak, dan pembuatan tugas.

Perlu persetujuan untuk Halus

Setiap kali menunjukkan tindakan, penalaran, dan bukti yang diusulkan, minta, sunting, atau tolak.

Pergerakan berikutnya

Senarai 10 perkara terpenting untuk dilakukan hari ini yang disusun oleh AI: susuli urus niaga hangat, semak akaun berisiko, kaji bakal pelanggan baharu, dsb.

Status Pembantu

Kesihatan agen AI: Tangkap, Data Pengurus, Intelijen Perjanjian, Pelatih Perjanjian. Hijau = berjalan, oren = memerlukan perhatian, merah = ralat.

Hasil

Pelacakan ROI: kesepakatan yang dipengaruhi oleh AI, waktu disimpan, ketepatan prediksi, dan perbandingan dengan pekerjaan manual CRM.

Pengerjaan pengarahan Pagi

1
Baca nombor hari ini

Kau sudah mengikuti jejak bulan ini?

2
Bersihkan antrian persetujuan

Tinjau setiap proposal AI. Ajukan tindakan aman, sunting di mana diperlukan, tolak saran buruk.

3
Periksa apa yang OpsIQ ditemukan

Apakah ada kesepakatan yang beresiko?

4
Kerjakan daftar pergerakan berikutnya

AI telah peringkat ini oleh mendesak dan potensi dampak.

Mengejar ketinggalan selepas bercuti

Skenario:
Apa yang terjadi saat kau pergi?
Apa yang perlu dilakukan:

Buka Command Center dan semak: (1) "What OpsIQ did" menunjukkan semua tindakan AI semasa ketiadaan anda. (2) "Needs approval" menunjukkan cadangan yang menunggu semakan anda. (3) "What OpsIQ found" menonjolkan perkara mendesak. (4) Tetapkan julat tarikh papan pemuka kepada tempoh ketiadaan anda untuk melihat trend.

CRM

Kenalan, syarikat dan urus niaga

CRM menyusun hubungan perniagaan anda ke dalam empat objek: Kenalan (orang), Syarikat (organisasi), Urus Niaga (peluang hasil) dan Tugasan (tindakan susulan).

Objek CRM
Objek CRMCatatan kontak yang terhubung dengan Company, Deal and Task di grafik yang terhubung.Objek CRMruang kerjaKenalanOrang · email · teleponSyarikataccountsBerikan bantuanpeluang pendapatanTugasTindakan susulan uskup1OBJECTSKenalan, syarikat, urus niaga2LINKEDGraf terhubung satu graf3TASKSBerikutan-up terpasang
Empat objek teras (kenalan, syarikat, urus niaga dan tugasan) yang dipautkan ke dalam satu graf pelanggan yang bersambung.

Kenalan Baru

Apa itu kontak

Seorang pria di CRM_mu. Mereka mungkin pelanggan, prospek, mitra, atau pemimpin.

Cari kenalan

Gunakan bar carian untuk mencari mengikut nama, e-mel, syarikat atau tag. Gunakan penapis: peringkat kitaran hayat, skor prospek, sumber, negara, tarikh aktiviti terakhir, pemilik yang ditugaskan.

Profil Kenalan

Klik kenalan untuk melihat profil penuh mereka: maklumat peribadi, syarikat, urusan, aktiviti, tiket, sembang, lawatan laman web, skor prospek dan pandangan AI.

Skor Hotness

Skor 0-100 yang dikira daripada isyarat tingkah laku: lawatan laman web, penglibatan e-mel, interaksi sembang, sejarah pembelian dan kebaharuan. Lebih tinggi = lebih panas.

Syarikat

... Tiket lagi...
Pautan kenalan-syarikat

Kenalan dipautkan kepada syarikat mengikut domain e-mel atau penugasan manual. Satu syarikat boleh mempunyai banyak kenalan.

Urus niaga

Apa kesepakatan

Peluang hasil. Urus niaga mempunyai tajuk, jumlah, saluran paip, peringkat, kebarangkalian menang, tarikh tutup, pemilik yang ditugaskan dan kenalan/syarikat yang berkaitan.

Kemungkinan besar menang kemungkinan

Persentasi persentase kesempatan memenangkan kesepakatan Set secara manual atau dihitung oleh AI berdasarkan data kemenangan sejarah Anda drives perkiraan tertimbang

Kesehatan ginjal

Ferevis Green (kesehatan), amber (kerugian), atau merah (terhenti). Berdasarkan aktivitas recensi, durasi panggung, dan sinyal keterlibatan.

Tugas

Apa tugas

Tindakan susulan yang ditugaskan kepada seseorang. Tugasan mempunyai tajuk, tarikh akhir, keutamaan, jenis (panggilan, e-mel, mesyuarat, lain-lain) dan kenalan/urus niaga yang dipautkan.

Tugas yang dihasilkan oleh AI

AI mencipta tugasan secara automatik apabila ia mengesan sesuatu yang memerlukan perhatian: susuli urus niaga yang terhenti, beri respons kepada akaun yang berisiko, kaji prospek baharu.

Cari petunjuk panas

Skenario:
Kau ingin melihat semua kontak skor tinggi di UK yang belum dihubungi baru-baru ini.
Apa yang perlu dilakukan:

Pilih Kenalan, Tapis dengan: Skor utama > 80, Negara = Britania Raya, kegiatan terakhir > 7 Beberapa hari yang lalu, berdasarkan skor utama menurun.

Couguesco membuat kesepakatan dari kontak

Skenario:
Seorang kenalan baru sahaja menyatakan minat terhadap pelan Enterprise anda semasa sembang.
Apa yang perlu dilakukan:

Buka profil kenalan. Klik "Create deal". Masukkan tajuk perjanjian (cth, "Acme Corp - Enterprise Plan"), jumlah, paip dan peringkat (cths, "Qualified"). Tetapkan tarikh tutup dan tentukan kepada diri sendiri. Pelatih Perjanjian akan mula menjejaki peluang ini.

CRM

Jalur pipa (papan kesepakatan Anda)

Jalur pipa adalah sebuah papan visual dimana transaksi bergerak melalui tahap dari kiri ke kanan.

Paipline
Saluran pipa CRMSkrin saluran jualan dengan statistik Urusan terbuka, Nilai terbuka, Ramalan berwajaran dan Urusan teratribusi, butang Urusan baharu, baris gilir Kelulusan AI dan papan Prospek/Layak/Menang.Paiplineruang kerjaTawaran terbuka23Nilai OpenOOGRamalan yang Berat Bebansenilai $74kPerjanjian terkait dengan kode12Perjanjian BaruAntrian permintaan2 PULIT untuk meninjauTIDAKAndika Volt Inc$4kLampu6$KDIPERTAKUKANNimbibus$30kPuncak9°MENJADINameORANG $48k1LIVE STATSPrakiraan berbobot nilai Open value &2AI QUEUETawaran yang diajukan oleh pihak ketiga3BOARDBuat kesepakatan melalui tahap
Skrin saluran jualan sebenar: statistik langsung (nilai terbuka, ramalan berwajaran), baris gilir Kelulusan AI untuk urus niaga yang dicadangkan, dan papan seret dan lepas.

Woinquine menggunakan papan pipa

1
Lihat tawaranmu

Saluran paip memaparkan semua urus niaga aktif sebagai kad yang disusun dalam lajur (peringkat). Setiap pengepala lajur memaparkan jumlah nilai urus niaga dalam peringkat itu.

2
Seretan untuk maju

Seret kad ke peringkat seterusnya. Kebarangkalian menang dan kiraan dikemas kini serta-merta. Jika perubahan itu gagal (ralat pengesahan), kad itu kembali ke kedudukan asalnya.

3
Lencana kad semak

Lencana hijau = sehat (aktivitas recent, di jalur). Amber = berisiko (lambat, perlu perhatian). merah = terhenti (tidak ada aktivitas untuk waktu yang terlalu lama).

4
Klik untuk menjelaskan secara detail

COCOCK sebuah kartu untuk membuka panel detil kesepakatan dengan kontak, kegiatan, Deal Coach singkat, dan tindakan cepat.

Memujian persetujuan

Setiap proposal menunjukkan apa yang AI ingin lakukan, mengapa, dan bukti.

Aperrove

Terimalah proposalnya sebagai-is. Aksi berjalan melalui Trust Layer dan dicatat dalam jurnal.

Sunting

Sebagai contoh, ubahlah tahap yang disarankan atau atur jumlahnya.

lak

AI belajar dari penolakan untuk membuat saran yang lebih baik di masa depan.

Kemungkinan besar, kemungkinan besar Win dijelaskan

Kemungkinan menang boleh ditetapkan secara manual atau dikira oleh AI. Apabila AI menghitungnya, ia menggunakan model yang terlatih pada perjanjian ditutup anda sendiri (menang dan kalah). Jika anda tidak mempunyai data sejarah yang cukup, AI menggunakan kemungkinan lalai peringkat. Kemungkinannya memandu ramalan berat: a $10,000 bagi pada 30% kebarangkalian menyumbang $3,000 kepada "mungkin" ramalan.

Memindahkan kesepakatan kepada Won

Skenario:
Pelanggan menandatangani kontrak dan membayar.
Apa yang perlu dilakukan:

Seret kad tawar-menawar ke peringkat "Memenangkan". OpsIQ akan: (1Tandakan perjanjian sebagai ditutup-menang.2Kemaskini ramalan.3) Tambah aktiviti "Dimenangi" ke garis masa. (4) Jika dikonfigur, mulakan peristiwa webhook (crm.deal.won). (5) Kemas kini peringkat siklus hidup kenalan ke "Pelanggan."

\"Perjanjian Terjebak\"

Skenario:
Kau ingin menemukan kesepakatan yang sudah terlalu lama berada di panggung yang sama.
Apa yang perlu dilakukan:

Carilah lencana merah (tertahan) di papan pipa. Kesepakatan ini tidak memiliki aktivitas lebih lama daripada ambang busuk yang telah dikonfigurasi (ditetapkan dalam CRM Configuration > Pipelines). Klik setiap kesepakatan yang terulur untuk melihat rekomendasi Deal Coach untuk reaktivasi.

Bolehkah saya mempunyai beberapa saluran jualan?+

Ya. Pergi ke CRM Configuration > Pipelines untuk mencipta saluran jualan tambahan. Kegunaan biasa: saluran jualan berasingan untuk perniagaan baharu berbanding pembaharuan, atau untuk produk/perkhidmatan yang berbeza.

Apa yang berlaku apabila saya seret perjanjian ke "Hilang"?+

Urus niaga ditandakan sebagai ditutup-kalah. Anda akan diminta memberikan sebab kekalahan. Urus niaga dialih keluar daripada papan aktif tetapi boleh ditemui dalam penapis urus niaga ditutup. Kenalan kekal dalam CRM.

CRM

Bimbingan urus niaga

Deal Coach menganalisis setiap urus niaga dan memberikan anda ringkasan dengan status kesihatan, isyarat risiko, orang penting, senarai semak kelayakan, persediaan mesyuarat dan cadangan tindakan seterusnya. Semuanya bersumber. Jurulatih menunjukkan tiket, sembang atau aktiviti mana setiap dakwaan itu berasal.

Pelatih berkewarganegaraan Amerika Serikat
Pelatih berkewarganegaraan Amerika SerikatKad urus niaga yang menyenaraikan isyarat risiko yang dikesan oleh AI beserta sumber bukti, di sebelah cadangan AI dan butang draf e-mel.Pelatih berkewarganegaraan Amerika Serikatruang kerjaAceme Corp · $24,000_Tahapan: Proposal · 60% _menangPENYELGANA RISKTiada balasan pada 10 _hariJuara voice menjadi tenangPemkosa yang disebutkan dalam chatSumber:482 · chat 6/12 · rantaian e-melAI mengesyorkanRe-menghidupkan ekonomiPembeli dengan rekap ROIdan pelan penutupan 7 hari.Draf e-mel1SIGNALSMengapa urus niaga mungkin tergelincir2SOURCEDSetiap tuntutan menyebut bukti3TINDAKANKlik satu langkah berikutnya
Pelatih bendera mengapa kesepakatan mungkin tergelincir (masing-masing sinyal cites sumbernya) dan tangan Anda langkah berikutnya untuk mengambil.

Apa yang pelatih katakan padamu

Penjelasan kesehatan

Mengapa urus niaga itu sihat, berisiko atau terhenti. Isyarat khusus: hari dalam peringkat, tarikh hubungan terakhir, kekerapan aktiviti, sebutan pesaing, corak bantahan.

Isyarat

Dikategorikan kepada: bantahan yang dibangkitkan, sebutan pesaing, perbincangan harga, penunjuk risiko sokongan, isyarat pembaharuan/pengembangan. Setiap isyarat dipautkan kepada sumbernya (transkrip sembang, tiket, e-mel, aktiviti).

map juara dan blocker

Siapa yang membantu kesepakatan (champion) dan siapa yang melawan (blocker). berdasarkan analisis interaksi dan peran kontak.

Daftar cek kualifikasi

Daftar cek MELDIK atau BANT (konfigurable) menunjukkan kriteria kualifikasi mana yang terpenuhi dan mana yang hilang. Peringkat: A, B, C, D, atau F.

Persiapan pertemuan

Sebelum mesyuarat yang dijadualkan, jurulatih menjana ringkasan: agenda, perkara utama untuk dibincangkan, soalan untuk ditanya, risiko untuk ditangani dan bahan untuk disediakan.

Pelan balasan dan panggilan

Cadangan mesej seterusnya atau skrip panggilan berdasarkan keadaan urusan semasa dan interaksi terkini.

Jadual masa bukti

Setiap dakwaan jurulatih dipautkan kepada sumber: nombor tiket, ID transkrip sembang, tarikh aktiviti atau lawatan laman web.

Cara menggunakan pelatih

1
Bacalah singkatnya

Buka kesepakatan apapun dan tatal ke bagian Deal Coach Baca status kesehatan dan sinyal kunci.

2
Tutup jurang kelayakan

Periksa senarai semak kelayakan. Jika "Pembeli Ekonomi" hilang, rancang untuk mengenal pasti dan melibatkan pemegang bajet.

3
Aktilah saran - saran yang diberikan oleh para penulis

Pelatih coach menyarankan tindakan selanjutnya yang konkret. Klik untuk membuat tugas, menyusun email, atau mengatur jadwal pertemuan, semua dirute melalui antrian persetujuan.

Persiapan untuk perhimpunan besar

Skenario:
Kau ada pertemuan dengan prospek besok tentang kesepakatan $50,000.
Apa yang perlu dilakukan:

Buka urus niaga dan baca bahagian Persediaan Mesyuarat. Ia menunjukkan: (1) Perkara utama perbincangan berdasarkan interaksi terkini. (2) Bantahan yang mereka bangkitkan dalam sembang minggu lalu. (3) Pesaing yang mereka sebut dalam tiket sokongan. (4) Soalan untuk ditanya tentang garis masa mereka. (5) Faktor risiko untuk ditangani secara proaktif. Gunakan ringkasan ini untuk menyediakan agenda yang fokus dan berasaskan bukti.

Memahami mengapa kesepakatan berisiko

Skenario:
Jalur pipa menunjukkan lencana merah pada kesepakatan yang kau pikir berjalan dengan baik.
Apa yang perlu dilakukan:

Klik tawaran dan baca penjelasan kesihatan Deal Coach. Ia mungkin berkata: "Tawaran ini telah berada di peringkat Cadangan selama 22 hari (ambang: 14). Hubungan terakhir ialah 11 hari lalu. Kenalan utama membuka tiket sokongan tentang kebimbangan migrasi data 5 hari lalu (tiket #T-892). Cadangan: tangani kebimbangan migrasi dan jadualkan panggilan susulan." Kini anda tahu dengan tepat apa yang perlu dibetulkan.

CRM

Laporan dan siaran

Ramalan bertaraf lembaga pengarah dengan julat yang boleh dipertahankan, penjelasan perubahan pada peringkat urus niaga, dan penjejakan ketepatan supaya anda boleh membuktikan dan menerangkan angka anda.

irantina
irantinaAngka ramalan suku tahunan dengan jalur Komitmen, Kes terbaik dan Saluran jualan serta nota ketepatan.irantinaruang kerjaMUKA LALUAN INI OLEH$312k87% Ke gawangLaksanakan failKasus terbaik untuk kasus terbaikPaiplineAI-berat oleh kesehatan kesepakatan dan sejarah · ketepatan dilacak dari waktu ke waktu1KANTOR KASIHLaksanakan pipa2AI-WEIGHTEDKesehatan yang baik3PROVABLEAkurasi terjejak
Komit, terbaik-case dan pipa sekilas, AI-berat oleh kesehatan kesepakatan, dengan akurasi dilacak sehingga Anda dapat mempertahankannya.

Kategori ultur

Dikomit

Berikan kesepakatan dengan 80% Ini kemungkinan menang lebih tinggi atau lebih tinggi, ini adalah kemungkinan besar Anda menang.

Kemungkinan berat badan AI

Ini adalah prediksi yang paling realistis dari apa yang akan kau tutup.

Kasus terbaik untuk kasus terbaik

Ini adalah pendapatan maksimum yang mungkin jika semuanya berjalan sempurna (itu jarang terjadi).

Selang waktu kepercayaan diri

An 80% pita kemungkinan menunjukkan julat realistik. Contoh: "Anda mungkin akan menutup antara $45,000 dan $72,000 suku tahun ini."

Apa yang berubah dan mengapa

Ramalan merangkumi penambahan perubahan minggu-ke-minggu. Apabila ramalan anda turun dengan $15,000, laporan menjelaskan tepat mana perjanjian yang menyebabkan perubahan: "Perjanjian A tergelincir ke kuartal berikutnya ($8,000), Tawar B kalah ($5,000), Deal C dikurangkan dalam nilai ($2,000)."

Jejak ketepatan

KANPE Ramalan

Kesalahan Persentase Singkat: seberapa jauh dari ramalanmu secara historis. lebih rendah lebih baik.15% Artinya ramalanmu biasanya ada di dalam 15% Hasil yang sebenarnya.

Pekali kemungkinan menang

Skor Brier Coordinator mengukur seberapa baik kemenangan probabilitas cocok dengan hasil yang sebenarnya. Jika kesepakatan di 70% Kemungkinan besar kemungkinan besar menang.70% Kalibrasinya bagus.

Mingguan bergambar

OpsIQ Anda dapat melihat bagaimana sayarasi prakiraan Anda meningkat.

Guling dan Peringatan

Per-per-tahap konversi

Berapa banyak penawaran yang bergerak dari setiap tahap ke tahap berikutnya. 80% Lulusan dari Qualified ke proposal tapi hanya 20% Dari proposal ke negosiasi, usulanmu mungkin butuh pekerjaan.

Tingkat kemenangan Sumber-Perfasi

sumber yang menghasilkan paling banyak kemenangan.

Per-penampilan pemilik

Prestasi setiap ahli pasukan jualan: urus niaga yang dimenangi, nilai saluran jualan, purata saiz urus niaga, kadar kemenangan.

Amaran

Kemacetan pasir (tidak realistis kemungkinan rendah), overcommitting (secara tidak realistis tinggi), dan berkomitmen-at-risk (pemprobabilitas tinggi penawaran menunjukkan sinyal kios).

Memahami pemahaman suatu ramalan

Skenario:
Kiraanmu turun dari... $180,000 Ke $155,000 Sejak minggu lalu.
Apa yang perlu dilakukan:

Buka halaman Ramalan dan periksa "Apa yang berubah." Laporan menunjukkan:$15,000) pindah ke Lost, pesaing dipilih. Beta Inc deal ($8,000) tarikh tutup didorong ke suku tahun berikutnya. perjanjian baru dengan Gamma LLC ($3,000) ditambah minggu ini." Perubahan bersih adalah -$20,000 + $3,000 = -$17,000, menerangkan penurunan dari $180K kepada $163K (dengan selebihnya $8K dijelaskan oleh penyesuaian kemungkinan pada perjanjian lain).

CRM

Mencari bisnis baru

Prospecting Agent membantu anda mencari dan menyelidik bakal pelanggan. Terangkan pelanggan ideal anda, tambah syarikat sasaran, dan biarkan AI menyelidik, memberi skor dan mendraf jangkauan sentuhan pertama.

Prospeksi
ProspeksiSenarai syarikat prospek yang ditemui AI dengan nota kesesuaian, skor dan butang draf jangkauan bagi setiap satu.Prospeksiruang kerjaProspeksi yang ditemukan oleh agen SDR\"Northwind Ltd\"SaaS · 50 staf · sokongan mempekerjakan88Draf jangkauanAndikabalt MfgPengilangan · 200 staff74Draf jangkauanSpanyolCommerce · 30 staff69Draf jangkauanKesehatan VegaKesehatan Kebidanan · 80 staf63Draf jangkauan1FINDSumber AI sumber rekening target2SAKONiat Fit & niat menduduki peringkat3DRAFTOtot pertama ditulis untuk Anda
Ejen SDR mencari syarikat sasaran, memberi skor mengikut kesesuaian, dan merangka jangkauan sentuhan pertama untuk semakan anda.

Satu kali set

1
Jangan uraikan pelanggan idealmu.

Pergi ke Konfigurasi CRM > Prospek. Huraikan profil pelanggan ideal (ICP) anda: industri sasaran, saiz syarikat, jawatan, fokus geografi, istilah padanan produk dan skor kesesuaian minimum. Contoh: "Syarikat SaaS B2B dengan 50-500 pekerja di US/UK, yang menjual alat pembangun, dengan VP of Sales atau Head of Growth sebagai kenalan utama."

2
Tambah syarikat sasaran

Masukkan domain atau nama syarikat yang ingin anda kaji. Anda juga boleh membiarkan AI mencadangkan syarikat berdasarkan ICP anda.

3
Hasil penelitian telaah sejawat

AI memperkayakan setiap syarikat dengan data yang ada: saiz, industri, stack teknologi, berita terkini, dan skor sesuai dengan penjelasan.

4
Aprove outreach

Bagi syarikat yang sesuai, AI mendraf mesej sentuhan pertama yang diperibadikan. Semak dan luluskan dalam baris gilir.

Fusing Fitch

Setiap prospek akan mendapat0-100 Skor sesuai liga berdasarkan lima faktor:

Sesuai ICP

Sejauh mana syarikat itu sepadan dengan profil pelanggan ideal anda (industri, saiz, lokasi).

Sinyal Frekuensi

Adakah terdapat bukti bahawa mereka memerlukan produk anda sekarang? Iklan jawatan kosong, perubahan teknologi, aduan tentang pesaing.

Proksi anggaran belanja

Saiz syarikat, peringkat pembiayaan dan penunjuk hasil menunjukkan ketersediaan bajet.

Padanan produk

Kau tahu, produkmu sangat relevan dengan bisnis mereka berdasarkan industri dan teknologi.

Kesesuaian sokongan

Apakah Anda dapat secara efektif melayani pelanggan ini (zon waktu, bahasa, kompleksitas).

Menyelidik syarikat sasaran

Skenario:
Anda ingin mengevaluasi apakah acme.com Keburukan yang layak.
Apa yang perlu dilakukan:

Tambah acme.com ke senarai pencarian prospek. AI mengembalikan: Skor kesesuaian 78/100 (sesuai). Sebab: SaaS B2B, 120 pekerja, berpangkalan di AS, baru-baru ini mengambil VP of Sales (isyarat kesegeraan), menggunakan pesaing X (padanan produk). Isyarat pembelian: melawat halaman harga anda dua kali bulan lepas (daripada penjejakan laman web). Kenalan terbaik: [email protected] (VP of Sales). Pembuka yang didraf merujuk kepada pengambilan pekerja terbaru dan lawatan halaman harga mereka.

CRM

Jujukan susulan automatik

Jujukan mengautomasikan susulan berbilang langkah: gabungan langkah e-mel, tunggu, tugasan, panggilan dan webhook yang berjalan secara automatik selepas anda meluluskan penghantaran awal.

Urutan
Urutan susulanEmail, tunggu tiga hari, Email. Lalu tugas, dengan deteksi balasan.Urutan susulanruang kerjaSelepas anda meluluskan penghantaran pertama →E-melOverTunggu3 Hari-hariE-melIkutiTugasPanggilanLangkah boleh berupa e-mel, tunggu, tugasan atau webhook. Balasan menghentikan urutan secara automatik.1AUTOMATELangkah-berbilangmenindaklanjuti2STEPSE-mail · · tunggu (bantuan) · tugas3YOU APPROVEKiriman pertama adalah gerbang
Susulan berbilang langkah automatik (e-mel, tunggu, e-mel, tugasan) yang anda luluskan terlebih dahulu dan dihentikan secara automatik oleh balasan.

Bagaimana urutan kerja

1
Aiskrim membuat sebuah urutan

Definisikan langkah: email, tunggu 3 hari, email, tunggu 5 Hari-hari, tugas (panggil jika tidak ada balasan), email. Setiap langkah surel memiliki template yang dapat anda ubah suaikan.

2
kontak

AI juga mungkin mengusulkan pendaftaran dari hasil prospek.

3
Pelaksanaan automatik

Langkah dijalankan secara automatik mengikut jadual. Jika kenalan membalas pada bila-bila masa, jujukan dijeda secara automatik.

4
Hasil Trek

Anda dapat melihat tingkat terbuka, tingkat balasan, tingkat konversi, dan tidak langganan per langkah. Gunakan ini untuk mengoptimalkan urutan Anda.

Pengertian takhayul

Apabila kenalan membalas, AI mengklasifikasikan balasan itu:

Positif

Aku tertarik, ingin bicara.

Bantahan

Ada kekhawatiran tapi tidak menolak.

Langganan Undiskusi

Ada yang ingin berhenti menerima pesan.

Tidak sekarang

Penantian yang menarik tapi waktu salah.

Salah orang

Jangan kontak yang tepat.

Sokongan

Soalan sokongan, bukan respons jualan. Urutan dijeda, tiket dicipta.

Perlindungan anti-spam

Penanganan operasi-keluar

Permintaan undi tanpa langganan langsung direspek dan kontak ditekan dari semua urutan masa depan.

Harian akhbar

Had harian peringkat ruang kerja (lalai: 1,000 e-mel). Menghalang penghantaran besar-besaran yang mencetuskan penapis spam.

Batas per-kontak

Me_pesan maksimum 1 _messages per kontak per hari. Mencegah orang yang melampaui batas.

Penanganan over-capis

Langkah yang melebihi topi harian ditangguhkan ke hari berikutnya.

Apakah yang berlaku jika kenalan membuka tiket sokongan semasa satu urutan?+

Urutan itu dijeda secara automatik. Sokongan diutamakan berbanding jangkauan. Urutan boleh disambung semula secara manual selepas isu sokongan diselesaikan.

Boleh aku mengikuti urutan ujian A/B?+

Tidak secara langsung dalam urutan, tetapi anda boleh mencipta dua urutan dengan mesej yang berbeza dan membandingkan hasilnya.

CRM

Alat Pertumbuhan

Satu halaman di bawah CRM yang memegang mesin pertumbuhan: Recurle repeach (MRR/ARR), katalog produk, bentuk lead-capture, link pemesanan dan routing leading. Semuanya di sini menulis langsung ke dalam CRM, jadi sebuah formulir penyerahan atau panggilan yang telah dipesan adalah kontak dengan sejarah, bukan berturut-turut dalam sebuah spreadsheet.

Apa yang hidup di halaman

Pendapatan yang merekursi

Permulaan

MRR dan ARR diunjurkan daripada lejar pengebilan sebenar anda. Langganan dikumpulkan daripada pembayaran bagi setiap platform, kitaran pengebilan disimpulkan daripada jarak antara pembayaran, dan langganan luput apabila pembayaran tertunggak melebihi 1.5 kali kitarannya. Pelanggan dipautkan kepada kenalan CRM secara automatik apabila lejar mengandungi e-mel mereka.

Katalog produk

Katalog

Salah satu sumber kebenaran untuk apa yang kau jual. dan menerima kutipan masuk ke dalam pendapatan produk.

Bentuk-bentuk tangkapan-pimpinan

Tangkap

Setiap borang mendapat halaman yang dihoskan serta kod benaman iframe untuk laman anda sendiri. Serahan menjadi kenalan, pemilik menerima pemberitahuan dan peraturan penghalaan anda menugaskan prospek itu.

Taut pemesanan

Jadual

Membagi link, biarkan prospek memilih slot bebas. Slot menghormati jam kerja penyelenggara, zona waktu dan pertemuan yang ada.

Laluan Lead

Mengeluarkan

Peraturan wilayah dijalankan dahulu, kemudian peraturan medan (padankan medan seperti negara atau sumber), kemudian giliran bergilir dalam kumpulan wakil anda. Ia menghalakan KENALAN DAN URUSAN sama sahaja, apa pun status urusan itu: urusan yang dimenangi masih memerlukan pemilik untuk atribusi komisen, tanggungjawab akaun dan susulan, dan dalam mod keterlihatan pemilik atau pasukan, rekod tanpa pemilik tidak kelihatan kepada sesiapa kecuali pengurus. Rekod yang dicipta oleh automasi (jualan penyambung, sembang, import) tidak mempunyai pencipta interaktif, jadi ia dihalakan oleh peraturan yang sama semasa dicipta dan bukannya dibiarkan tanpa pemilik. Apa-apa yang sudah mempunyai pemilik tidak akan diagihkan semula.

Buat bentuk pertamamu

1
Alat Pembesaran Terbuka

Pergi ke CRM, lalu Alat Pertumbuhan, kemudian bagian Lead-capture.

2
Nama itu dan memilih bidang

Type nama dan daftar medan yang dipisahkan dengan koma, misalnya nama, email, telepon, pesan. Email selalu diperlukan.

3
Kongsi atau masukkan

Salin link host untuk berbagi di mana saja, atau salin kode yang disembes dan tempelkan ke halaman manapun dari website Anda.

4
Ada petunjuk untuk mengawasi.

Setiap penyerahan ialah kenalan CRM dengan aktiviti form.submitted, pemberitahuan kepada pemilik, dan penghalaan automatik.

💡
Halaman tangkapan publik menggunakan alamat ruang kerja Anda sendiri. Ruang kerja awan menggunakan subdomain mereka yang ditugaskan (company.opsiq_. help), sehingga link selalu menyelesaikan data yang tepat.

Perlindungan Dalaman

Bots melihat kesuksesan, Anda tidak melihat apa-apa

Sebuah sarang tersembunyi medan diam-diam membuang penyerahan bot.

Kadar morfosis terbatas

Sepuluh penyerahan sejam bagi setiap alamat IP merentas borang dan tempahan.

iran Consent tetap jujur

Melepaskan formulir tidak memberikan persetujuan pemasaran.

Tidak ada pemesanan ganda

Slot A divalidasi kembali terhadap cek ketersediaan segar pada saat pemesanan.

Dari mana datangnya data yang berulang itu?+

Daripada lejar perdagangan yang sama yang digunakan oleh halaman Jualan anda, disalurkan oleh penyambung pengebilan. Gunakan Segerak semula daripada pengebilan selepas menyambungkan platform baharu.

Bolehkah saya menggunakan borang tanpa laman web?+

Setiap formulir memiliki halaman di host pada alamat Anda sendiri yang bekerja mandiri, dengan atau tanpa JavaScript_.

CRM

Pusat Mesej (SMS dan WhatsApp)

Satu penyambung, sehingga dua puluh get laluan. Sambungkan penyedia SMS dan WhatsApp yang benar-benar anda gunakan, tandakan satu sebagai lalai, dan pilih mana-mana satu semasa menghantar teks kepada kenalan. Persetujuan disemak oleh CRM sebelum sebarang get laluan dihubungi.

Sediakannya

1
Dayakan penyambung

WhatsApp) dan mengaktifkannya.

2
Model data

Dalam laci yang sama, atau dalam CRM Growth Tools, pilih get laluan daripada senarai lungsur (Twilio, Vonage, Termii, Meta WhatsApp Cloud, Infobip dan banyak lagi), tampal kelayakan API-nya dan sambungkan. Anda boleh menambah beberapa get laluan, termasuk get laluan yang sama dua kali dengan akaun yang berbeza.

3
Kabel webhook

Setiap entri penyedia menunjukkan URL webhooknya sendiri dengan butang salin. Tampalkannya ke dalam tetapan laporan penghantaran dan mesej masuk get laluan untuk mendapatkan status penghantaran dan balasan kembali ke dalam OpsIQ.

4
(Kepada)

Buka kenalan dan gunakan butang SMS atau WhatsApp. Jika lebih daripada satu penyedia menyokong saluran itu, pemilih membolehkan anda memilih; jika tidak, lalai akan digunakan.

Konsent yang pertama

Hanya persetujuan yang diberikan

persetujuan tidak diketahui oleh IGH. Kiriman menolak kecuali persetujuan SMS diberikan secara eksplisit WhatsApp naik persetujuan yang sama.

Do-tak-kontact selalu menang

Sebuah bendera do-not-contact blok setiap saluran, tidak peduli apa lagi yang ditetapkan.

Kehormatan Suppression

Kenalan dalam daftar penindasan tidak pernah dipesan.

Orang - orang yang tidak beragama menyebut alasan mereka

Kiriman yang diblokir memberitahu Anda persis mengapa, sehingga Anda dapat memperbaiki data daripada menebak.

Bagi pengembang: kontrak webhook

Bentuk URL

https://your-address/opsiq/cron/messaging_webhook.php?sk=SITE_KEY&e=ENTRY_ID&t=TOKEN. Token per-entry dimint ketika penyedia terhubung dan tidak pernah berputar pada sunting.

Format-format yang dipahami

Twilio form posts (MessageStatus/MessageSid for delivery, Body/From for inbound), Meta WhatsApp Cloud JSON (statuses and messages, including the hub.challenge subscription handshake), and a generic JSON shape: {"type":"delivery","message_id":"...","status":"delivered"} or {"type":"inbound","from":"+234...","body":"..."}.

Kesan

Laporan penghantaran menandakan baris lejar jangkauan yang membawa id mesej pembekal sebagai dihantar atau melantun. Mesej masuk dipadankan dengan kenalan mengikut nombor telefon dalam ruang kerja, direkodkan sebagai aktiviti message.received, dan menandakan perbualan sebagai telah dibalas.

Mode kegagalan Gagal

Token yang salah atau tiada akan dijawab dengan 403. Muatan yang tidak diketahui dikira dan diabaikan, tidak pernah membawa maut, jadi get laluan yang salah konfigurasi tidak boleh merosakkan titik akhir.

Pintu gerbang mana yang didukung?+

¡Twilio, Vonage, Plivo, MessageBird, Sinch, Infobip, Telnyx, ClickSend, Termii, Africa's Talking, BulksMS, Textlocal, Meta WhatsApp Cloud, 360dialog, SMSAPI, Gupshup, Kaleyra, D7 Networks, Hubtel, dan sebuah webhook HTTPS tersendiri untuk hal lain.

Bukti kelayakan aman?+

Bukti kelayakan disimpan secara tersulit dalam tetapan penyambung dan tidak sekali-kali dipaparkan semula kepada pelayar. Menyunting entri dengan rahsia kosong akan mengekalkan rahsia yang disimpan.

Bolehkah AI menghantar mesej?+

KANTOR YA, melalui tindakan terdaftar yang memerlukan konfirmasi dan menjalankan gerbang persetujuan yang sama. AI juga dapat mencantumkan penyedia yang terhubung untuk menjelaskan apa yang tersedia.

CRM

Keepping dan semakin berkembang pelanggan

Manajemen sepeda hidup membantu Anda melindungi pendapatan yang ada. dan buku permainan sukses yang disarankan.

Siklus Hidup
Papan sepeda motor kariPapan kitaran hayat pelanggan (Orientasi, Aktif, Berisiko, Pembaharuan) dengan bar kesihatan pada setiap kad akaun.Siklus Hidupruang kerjaONBOARINGAcmekesihatan 40KASIHGlobexkesihatan 88Fijichine Initechkesihatan 76ATS-RISKKesoyongankesihatan 28KANEWALUbra\"Membarukan\" dalam 12dpengembangan +$8k1STAGESDari orientasi hingga pembaharuan2SCOREDPengembangan Kesehatan Fargix &3PLAYBOOKLangkah selanjutnya yang disarankan
Pelanggan bergerak melalui peringkat orientasi, aktif, berisiko dan pembaharuan, setiap satu diberi skor untuk kesihatan dan pengembangan beserta buku panduan.

Papan daur hidup

Peta Tahapan Fon

Papan visual menunjukkan di mana setiap akaun berdiri: Lead, Prospect, Opportunity, Customer, Expansion, Renewal, At Risk, Churned.

Akaun berisiko

Akaun yang ditandakan berisiko tinggi untuk berhenti langgan. Setiap satu menunjukkan pemacu utama (lonjakan sokongan, ketidakaktifan, kegagalan pembayaran) dan langkah penyelamatan yang disyorkan.

Keupayaan pengembangan

Akaun yang menunjukkan isyarat kesediaan untuk membeli lebih banyak: penggunaan tinggi, permintaan ciri, pertanyaan tentang pelan.

Renewals LUang

Akaun dengan tarikh pembaharuan yang akan datang. Diisih mengikut tahap risiko dan nilai hasil.

Bagaimana OpsIQ jejak mendeteksi risiko yang tak terduga

Risiko cholln fax dihitung dari sinyal ganda menyatu bersama:

Sinyal CRM Frekuensi

Kesehatan yang tidak aktif, kerugian baru - baru ini, penurunan keterlibatan.

Isyarat sokongan

Jumlah tiket terbuka, lonjakan loket tiket, sentimen negatif, eskalasi.

Pertunangan produk niaga

Kekerapan log masuk, penggunaan ciri, lawatan halaman, panggilan API.

Sinyal Billing Cafles

Pembayaran gagal, invois tertunggak, permintaan turun taraf, lawatan ke halaman pembatalan.

Buku Main

Simpan permainan

Untuk akaun berisiko: hubungi secara proaktif, tangani kebimbangan, tawarkan sokongan, eskalasikan jika perlu.

Bermain di Renewal

Untuk pembaharuan yang akan datang: sahkan kepuasan, semak penggunaan, bentangkan nilai, tawarkan insentif jika sesuai.

Mainan Pengembangan

Untuk akaun yang sedia berkembang: kemukakan pilihan naik taraf, kongsi kisah kejayaan, tunjukkan ROI.

Permainan Adotion

Untuk akaun yang kurang menggunakan: tawarkan latihan, kongsi amalan terbaik, dayakan ciri yang tidak mereka gunakan.

Melihat churn sebelum ia berlaku

Skenario:
Seorang pelanggan yang biasanya log in sehari-hari tidak masuk untuk 2 Minggu-minggu, dan mereka membuka 3 Tiket pendukung musim ini.
Apa yang perlu dilakukan:

Lembaga Siklus Hidup bendera akaun ini sebagai "Berrisiko" dengan pemacu: tidak aktif (14 hari sejak log masuk terakhir) dan sokongan spike (3x volume tiket normal). Permainan yang disyorkan: panggilan jangkauan proaktif untuk memahami apa yang berlaku. Adakah terdapat masalah produk? Adakah mereka mengevaluasi pesaing? Sekatan awal boleh menyelamatkan akaun.

CRM

Mebersihkan data Anda

Ejen Penjaga Data secara automatik mencari dan membetulkan isu kualiti data: pendua, medan yang tiada, ketidakkonsistenan dan rekod lapuk.

Data pengurus
Data pengurusSenarai isu kualiti data (pendua, hilang, lapuk, format), setiap satu dengan tindakan pembetulan satu klik.Data pengurusruang kerjaMasalah data yang ditemui oleh ejen StewardDuplikasijane@acme.com dan j.doe@acme.comGabungHilang12 kenalan tiada syarikatHuluLuput38 Perjanjian rahasia tak tersentuh untuk 90 Hari-hariUlasanFormatnombor telefon dalam 4 formatSemua perbaikan1CATCHESDupes, galah, basi2EXPLAINSMengapa ditandai masing-masing3FIXESAtas persetujuanmu
Agen Steward menjaga CRM bersih Anda, menemukan duplikat, celah, catatan basi dan format buruk, memperbaiki persetujuan.

Apa yang ditangkap

Kenalan Duplikasi

Catatan ganda untuk orang yang sama (misalnya, [email protected] Dan [email protected] Para pengurus mengusulkan penggabungan mereka.

Data hilang metamorf

Kenalan tanpa e-mel, urus niaga tanpa jumlah, syarikat tanpa domain. Mencadangkan pengisian daripada sumber yang tersedia.

Catatan tak terpaut kinetik

Urus niaga tanpa kenalan berkaitan, kenalan tanpa syarikat. Mencadangkan pemautan berdasarkan domain e-mel dan konteks.

Tidak konsisten

Perjanjian dalam peringkat "Memenangkan" dengan kemungkinan 20%, kenalan ditandakan sebagai "Pelanggan" tanpa perjanjian, syarikat dengan industri tidak sepadan.

Tahapan salah

Kesepakatan yang telah berada dalam tahap yang sama terlalu lama atau kontak yang tahap daur hidup mereka tidak sesuai dengan aktivitas mereka.

Cara menggunakan

1
Bukalah daftar pengurus

Çaššić pergi ke CRM dan mencari bagian Keperawatan Data (atau membukanya dari CRM Health).

2
Menghargai perbaikan aman

Barang hijau aman: duplikat jelas, data hilang yang jelas.

3
Tinjau sisanya

Item berwarna ambar memerlukan pertimbangan anda: kemungkinan pendua dengan sedikit perbezaan, perubahan peringkat yang dicadangkan, pemautan syarikat. Semak setiap satu.

Membersihkan kontak duplikat

Skenario:
The steward found "John Smith ([email protected])" and "J. Smith ([email protected])": same email, different display names.
Apa yang perlu dilakukan:

Pengawas mencadangkan penggabungan: kekalkan rekod yang mempunyai lebih banyak aktiviti, gabungkan urus niaga dan aktiviti rekod yang satu lagi. Semak cadangan itu, laraskan nama paparan yang kekal jika perlu, dan luluskan. Sejarah kedua-dua rekod dikekalkan dalam kenalan yang digabungkan.

CRM

Bina CRM saya

Bina CRM Saya membolehkan anda menerangkan persediaan CRM anda dalam bahasa Inggeris biasa. OpsIQ menjana pelan yang disahkan dan boleh dibalikkan, lalu menggunakannya setelah diluluskan. Tanpa pengekodan, tanpa klik konfigurasi manual.

Bina CRM saya
Bina CRM sayaPenerangan dalam bahasa semula jadi di sebelah kiri menghasilkan pelan CRM yang dijana, terdiri daripada peringkat, medan dan segmen, di sebelah kanan.Bina CRM sayaruang kerjaKeistimewaanmu itu hanya menjelaskan bisnismuKita adalah sebuah biro desain webDijual bulanan dan dijual oleh orang-orang miskin.proyek satu-off ke kecilperniagaan.Bina CRM sayaPelan yang dijanaTahapan: Timbal → PenentuJenis-jenis kesepakatan: paender, projectMedan: nilai bulananSegmen: SMB, agensiUrutan: onboardingAplikasi Approve &1DESCRIBEBahasa biasa masuk2AI PLANSTahapan, bidang, segmen3APPROVEDiterapkan · tanpa koding
Jelaskan bisnis Anda dalam bahasa Inggris sederhana;OpsIQ Seluruh draft CRM Luangford (tahap, bidang, segmen) dan menerapkannya pada persetujuan.

Bagaimana cara kerjanya

1
Terangkan apa yang kau inginkan

Taipkan keterangan bahasa Inggeris ringkas bagi konfigurasi CRM anda. Contoh: "Cipta paip pembaharuan dengan peringkat: Akan Datang, Dihubungi, Mengadakan Perbincangan, Dibaharui, Hilang. Skor lead lebih tinggi apabila mereka melihat harga dua kali."

2
Semak pelan

OpsIQ Dan menunjukkan pratinjau dari apa yang akan dibuatnya: pipeline, tahap, kemungkinan panggung, peraturan skor, aturan daur hidup.

3
Guna

Klik Guna untuk melaksanakan pelan itu. Setiap perubahan direkodkan sebagai satu himpunan yang boleh anda buat asal dengan satu klik.

4
Kembalikan jika perlu

Jika ada yang tidak benar, klik Undo untuk mengembalikan seluruh berkas. CRM Anda kembali ke keadaan sebelumnya.

Apa yang boleh anda bina

Paip dan tahap

Buatan yang dinamakan pipeline dengan tahap khusus, probabilitas default, dan ambang membusuk.

Aturan Penilaian

Meningkatkan skor pemandu berdasarkan tingkah laku: "Skor lebih tinggi apabila mereka melihat harga," "Scor rendah apabila mereka melawat halaman karier."

Aturan sepeda motor

Maju secara automatik peringkat siklus hidup: "Alih ke SQL bila mereka minta demo," "Alihkan ke Pelanggan bila perjanjian dimenangi."

Bidang langganan

Tambah medan pada kenalan, urus niaga atau syarikat: teks, nombor, tarikh, pilihan, kotak semak, URL, e-mel.

Daftar cek kualifikasi

Diadikan MEDDICC atau BANT checklist Deal Coach grade melawan.

Menyediakan saluran paip pembaharuan

Skenario:
Anda mengurus langganan SaaS dan memerlukan saluran paip untuk pembaharuan.
Apa yang perlu dilakukan:

Jenis: "Create a renewal pipeline. Stages: 90 Days Out (10%), 60 Days Out (25%), Dihubungi (40%), Negotiating (60%), Diperbaharui (100%), Churned (0%). Tetapkan ambang kerosakan kepada 14 hari."OpsIQ menjana rancangan, anda semak ia dan klik Laksana. Paip muncul pada halaman Paip anda dengan serta-merta.

Bagaimana jika aku menggambarkan sesuatu yang tidak mungkin?+

Pembina hanya menghasilkan tindakan yang ia tahu bagaimana untuk sah. Jika anda meminta sesuatu di luar keupayaan (cth, "Integrasikan dengan API sendiri saya"), ia akan menolak permintaan dan menjelaskan apa yang boleh dilakukan sebagai gantinya.

Boleh aku ubah?+

Setiap Build My CRM action ditangkap sebagai bundel reversibel. pergi ke CRM Health > Ubah Sejarah untuk melihat semua berkas dan membatalkan salah satu dari mereka.

CRM

\"Membentuk CRM\" caramu

Konfigurasi CRM manual untuk pasukan yang lebih suka mengklik daripada menaip. Semua tetapan yang boleh dicipta oleh Build My CRM juga tersedia sebagai medan borang tradisional.

Paip dan tahap

Cipta, nama semula, susunan semula dan padamkan paip dan peringkat. Tetapkan kemungkinan menang piawai per peringkat. Set ambang keruntuhan (hari tanpa aktiviti sebelum perjanjian ditanda "terhenti").

Bidang langganan

Tambah medan pada urus niaga, kenalan atau syarikat. Jenis medan: teks, nombor, tarikh, pilihan (senarai lungsur dengan pilihan yang ditetapkan), kotak semak, URL, e-mel. Medan tersuai dipaparkan pada profil objek dan dalam penapis.

Daftar cek kualifikasi

Diagnosis daftar cek yang digunakan Deal Coach untuk mengevaluasi kesepakatan. Pilih MEDDICC, BANT, atau kriteria tertentu. Setiap item dapat ditandai diperlukan atau opsional.

Aturan tahap sepeda roda sepeda

Tentukan peralihan peringkat automatik: apabila kenalan memenuhi sesuatu syarat (melihat harga, menghantar borang, membuat pembelian), peringkat kitaran hayat mereka maju secara automatik.

Aturan skor utama

Naikkan atau kurangkan skor lead berdasarkan tingkah laku. Contoh: "Laman harga dilihat = +15 titik," "buku putih yang dimuat turun = +10"Laman karier yang dilawati = -5titik." Kiraan minimum boleh ditetapkan (cth., "mesti lihat harga sekurang- kurangnya 2 times").

Pandangan orang - orang yang diselamatkan

Cipta gabungan penapis+isihan bernama untuk kenalan, urus niaga atau syarikat. Kongsi paparan dengan pasukan anda. Tetapkan paparan lalai bagi setiap jenis objek.

Menambahkan peraturan skor utama

Skenario:
Anda mahu kenalan yang melihat halaman harga anda dua kali atau lebih mendapat skor yang lebih tinggi.
Apa yang perlu dilakukan:

Pergi ke Konfigurasi CRM > Peraturan Penjajaran Lead. Klik Tambah Peratur. Set: Event = "pageview", URL mengandungi = "/pricing", Kiraan minimum =2, Peningkatan skor = +20. Simpan. Lain kali skorer berjalan, kenalan yang sepadan dengan peraturan ini akan mendapat +20 untuk skor unggul mereka.

CRM

Pemeriksaan kesehatan CRM

Kesehatan CRM adalah halaman diagnostik diri sendiri yang membenarkan CRM anda diatur dengan benar dan berjalan lancar.

Periksa kesehatan
Cek kesehatan CRMSebuah cincin skor kesehatan di 92 Di samping cek daftar passing dan pemeriksaan konfigurasi peringatan.Cek kesehatan CRMruang kerja92SEHATTahap paip dikonfigurPenyambung dipautkan & sedang mengimportAgen AI dihidupkan!UVIN tidak ada urutan susulan aktif!12 kenalan tiada syarikat1AUDITORMengesahkan persediaan anda2FLAGSApa yang hilang3SAKOSatu nombor keseluruhan
Audit CRM satu halaman: skor kesehatan keseluruhan ditambah daftar cek dari apa yang diatur dengan benar dan apa yang masih perlu diperhatikan.

Apa yang dicek

Skema

Jadual pangkalan data wujud dan mempunyai lajur yang betul. Jika migrasi tertinggal, Kesihatan CRM akan menandakannya.

Agen AI

Semua agen CRM (Capture, Data Steward, Deal Intelligence, dll.) terdaftar dan sehat. Hijau = berjalan, ambar = perlu perhatian, merah = kesalahan.

Laluan

ORMA CRM API rute dan titik akhir AJAX terdaftar dan dapat dipanggil.

Tindakan AI ony

Katalog aksi CRM terdaftar dalam Registry Aksi. Jika tindakan hilang, CRM Health self-heal dengan mendaftarkan kembali mereka.

Data hidup dikira

Jumlah kenalan, syarikat, urus niaga, tugasan, aktiviti dan acara. Berguna untuk mengesahkan import dan penangkapan data berterusan.

Semakan selepas persediaan

Selepas persediaan CRM kali pertama, buka CRM Health dan sahkan bahawa semua semakan berwarna hijau. Jika ada yang ambar atau merah, klik item itu untuk penjelasan diagnostik dan cadangan pembetulan.

Bagaimana seharusnya saya memeriksa CRM Health?+

Semak selepas persediaan awal, selepas kemas kini besar, dan bila-bila masa tingkah laku CRM kelihatan salah. CRM Health membaiki sendiri banyak isu (seperti pendaftaran tindakan yang tiada) hanya dengan membuka halaman itu.

CRM

Sambungan CRM bagi pengembang

CRM menyediakan API REST awam yang lengkap dan webhook keluar supaya ia sesuai dengan mana-mana susunan teknologi tanpa eksport manual.

API Titik akhir halus

Pengesahan

Kunci API (Authorization: Bearer opq_...) dengan skop crm.read atau crm.write. POST ke /api/v1.php dengan action dan site_key.

Kenalan Baru

crm.contacts.list (carian + penapis), crm.contacts.detail (mengikut ID), crm.contacts.upsert (cipta atau kemas kini), crm.contacts.save.

Urus niaga

crm. deals. list, crm. deals (deal-deal) detail, crms. deals. create, cr m. dealis. update, crmb. dealls. advance (semua melalui Lapisan Kepercayaan).

Kegiatan

krm. aktivities. list (garis waktu untuk kontak/deal), crm. activities (aktivity. record) (log aktivitas baru).

Peristiwa Lenyap

norkewicecrm. events. list (duble change feed dengan accept_id kursor), crm. events. catalog (daftar jenis acara yang tersedia).

Aanugeniae membuat kesepakatan melalui API_
POST /api/v1.php
Authorization: Bearer opq_live_xxx
Content-Type: application/json

{
  "action": "crm.deals.create",
  "site_key": "<workspace>",
  "title": "Acme renewal",
  "amount": 12000,
  "pipeline_id": 1,
  "stage_id": 2
}

Acara Webhook

opsiq.contact.upsert

Dicetuskan apabila kenalan dicipta atau dikemas kini. Ini ialah peristiwa kenalan untuk dilanggan; tiada peristiwa created yang berasingan.

contact.lifecycle_changed

Dicetuskan apabila kenalan berpindah ke peringkat kitaran hayat yang berbeza.

contact.status_changed

Dipecat ketika status kontak berubah.

contact.conversion

Taskid ketika konversi dicatat terhadap kontak.

contact.tag_added

Xerlin Fired ketika tag ditambahkan ke kontak.

contact.erased

Dicetuskan apabila kenalan dipadamkan kerana permintaan privasi.

crm.deal.created

Kekejikan ketika kesepakatan dibuat.

crm.deal.stage_changed

Dicetuskan apabila urus niaga berpindah ke peringkat yang berbeza.

crm.deal.won

Diatas api ketika kesepakatan ditutup seperti yang dimenangkan.

crm.deal.lost

Kebakaran ketika kesepakatan ditutup seperti hilang.

crm.company.created

Dicetuskan apabila syarikat dicipta.

crm.task.created

AIrfreid ketika tugas baru dibuat (manual atau AI-generated).

email.replied

Dipecat ketika kontak menjawab email yang melampaui batas.

email.bounced

¡Api ketika e-mail outreach memantul.

💡
Panggilan webhooks.events.list untuk set yang sahih bagi pemasangan anda, bersama muatan setiap peristiwa. Ia dijana daripada kod penghantaran itu sendiri, jadi ia tidak sekali-kali boleh bercanggah dengan apa yang sebenarnya tiba. Senarai penuh juga dipaparkan dalam bahagian Webhook.

Semua acara webhook ditandatangani HMAC dan dicuba semula apabila gagal. Langgan URL dalam Tetapan > Webhooks, atau tinjau crm.events.list dengan since_id untuk suapan perubahan yang tahan lama.

Menyegerakkan kontak CRM ke Lembaran Google

Skenario:
Anda mahu setiap kenalan CRM baharu muncul dalam Google Sheet untuk pasukan pemasaran anda.
Apa yang perlu dilakukan:

Sediakan pelanggan webhook untuk opsiq.contact.upsert. Halakan ia ke aplikasi web Google Apps Script atau URL webhook Zapier. Muatan termasuk nama kenalan, e-mel, syarikat, skor prospek dan sumber. Skrip anda menambah satu baris ke Google Sheet bagi setiap kenalan baharu.

CRM

Segmen

Segmen menyimpan penapis kenalan yang boleh digunakan semula untuk paparan CRM, jangkauan, promosi dan alat lain yang peka terhadap khalayak.

Skrin produk
SegmenPenyunting Segmen Begindia menggabungkan kondisi, menunjukkan jumlah pertandingan langsung dan membiarkan operator memilih filter hidup atau snapshot yang disematkan.Segmenruang kerjaODEArasLOGICSEMUAMATCHES1,248ORANG KERJA HIDUPTahap pelanggan ustomsama dengan pelanggan aktifPeraturanAktivitas terakhirDi dalam 30 Hari-hariPeraturanNegarasama dengan Britania RayaPeraturanNiat tinggiskor sekurang-kurangnya 70Peraturan1CHOOSE MODEHidup atau snapshot2ADD RULESALL atau ANY3REUSEKempen dan CRM
Penyunting Segmen Begindia menggabungkan kondisi, menunjukkan jumlah pertandingan langsung dan membiarkan operator memilih filter hidup atau snapshot yang disematkan.

A segmen langsung mengira semula daripada data semasa setiap kali ia digunakan. Satu Seretan jembat membekukan senarai ahli semasa, yang berguna apabila khalayak jangkauan tidak boleh berubah selepas kelulusan.

Pilih SEMUA apabila setiap syarat mesti sepadan atau SEBENARNYA analisa hitungan langsung sebelum menyimpan. segmen sistem dapat terlihat tetapi terlindung dari penyuntingan biasa.

CRM

**** *Mencetak skor **

Aturan skor-pimpinan . yang mengubah perilaku dan sinyal profil menjadi skor konsisten yang dapat digunakan penjualan dan otomasi.

Skrin produk
**** *Mencetak skor **Skor lead scoring menunjukkan aturan aktif, jendela bergulir dan perubahan skor positif atau negatif setiap peraturan berlaku.**** *Mencetak skor **ruang kerjaPERATURAN12SCORED8,412HOT LEADS286ORANG KERJA HIDUPKegiatan yang Memprihatinkan3kunjungan ke sana. 14 Hari-hari+20Kata kunci Belianmengandungi migrasi atau enterprise+15Risiko sokonganPeristiwa pengaduan keguhan dalam 30 hari-10Sumber terpercayaReferal mitra+121DESCRIBE RULEBahasa Inggris biasa2REVIEW FIELDSSinyal, jendela, titik3RESCORETerapkan ke ruang kerja
Skor lead scoring menunjukkan aturan aktif, jendela bergulir dan perubahan skor positif atau negatif setiap peraturan berlaku.

Pembina peraturan AI boleh menukar arahan dalam bahasa Inggeris biasa kepada peraturan berstruktur. Setiap peraturan masih perlu disemak sebelum diaktifkan: sahkan aktiviti atau kata kunci, kiraan minimum, tetingkap bergolek dan perubahan skor.

Aturan positif dan negatif dapat hidup berdampingan. Ruangkerja Rescore selepas perubahan peraturan yang ketara supaya kenalan sedia ada dinilai di bawah model baharu. Skor boleh disalurkan ke segmen, penghalaan, pencarian prospek dan syarat aliran kerja.

CRM

Papan pemimpin penjualan Indianapolis

Pimpinan dewan banding perwakilan menggunakan kuota tercapai, pendapatan menang, komisi dan pipa terbuka untuk bulan terpilih.

Skrin produk
Papan pemimpin penjualan IndianapolisDia adalah pemimpin bulanan yang bekerja di jajaran perwakilan penjualan sementara tetap memenangkan pendapatan, komisi dan saluran pipa terbuka terlihat.Papan pemimpin penjualan Indianapolisruang kerjaPERIODJuliTEAM QUOTA82%MENJADI184k pound.ORANG KERJA HIDUPAmina104% kuota · £62k wonke- 1Ben88% kuota · £51k wonKe-2& Lukiskan76% kuota · £43k wonKe-3Saluran pipa terbuka£312k merentas pasukanUlasan1CHOOSE MONTHBandingkan satu periode2CHECK QUOTAKekejipan oleh rep3COACHGunakan konteks saluran jualan
Dia adalah pemimpin bulanan yang bekerja di jajaran perwakilan penjualan sementara tetap memenangkan pendapatan, komisi dan saluran pipa terbuka terlihat.

Pencapaian kuota hanya bermakna apabila setiap wakil mempunyai kuota semasa dan urus niaga mempunyai pemilik, jumlah, mata wang dan status penutupan yang betul. Gunakan papan pendahulu untuk bimbingan dan pengiktirafan, bukan sebagai satu-satunya ukuran kualiti; gandingkannya dengan kesihatan urus niaga, aktiviti dan ketepatan ramalan.

CRM

Persetujuan kesepakatan berkompromi

Persetujuan kesepakatan pemberian persetujuan diperlukan sign-off manajer sebelum penawaran bernilai tinggi dapat ditandai menang.

Skrin produk
Persetujuan kesepakatan berkompromiDasar kelulusan mentakrifkan dua ambang nilai dan baris gilir menunjukkan keputusan yang belum selesai, diluluskan dan ditolak.Persetujuan kesepakatan berkompromiruang kerjaPOLICYDiaktifkanWAITING6OLDEST3hORANG KERJA HIDUPAras 1_Berikan Mahakuasa dari £10,000PengurusAras 2_Berikan Mahakuasa dari £50,000SeniorPembaharuan EnterpriseMemerlukan £72,000 _· yang diminta oleh BenDitundaProyek migrasiMemerlukan permintaan £18,500 _· yang diminta oleh RitaDisetujui1SET THRESHOLDS0 Aifine menonaktifkan sebuah tier2REQUESTRephibe Repa menyerahkan kesepakatan3DIDECIDEPermintaan atau penolakan
Dasar kelulusan mentakrifkan dua ambang nilai dan baris gilir menunjukkan keputusan yang belum selesai, diluluskan dan ditolak.

Dayakan dasar dan tetapkan ambang Tahap 1 dan Tahap 2. Ambang 0 menyahdayakan peringkat itu. Apabila seseorang yang bukan pengurus cuba memenangi urusan pada atau melebihi ambang, OpsIQ mencipta permintaan kelulusan dan bukannya menukar peringkat secara senyap.

Pengurus dan pentadbir penuh tidak disekat oleh dasar ini. Setiap keputusan hendaklah menyimpan peminta, pelulus, masa dan sebab untuk tujuan audit.

CRM

Aturan sepeda motor

Peraturan kitaran hayat secara automatik memindahkan kenalan antara peringkat apabila data semasa mereka sepadan dengan syarat yang disimpan.

Skrin produk
Aturan sepeda motorPeraturan kitaran hayat dinilai mengikut keutamaan; peraturan pertama yang sepadan mengubah peringkat kenalan.Aturan sepeda motorruang kerjaKASIH7RUNSMalamPRIORITYYang tertinggi pertamaORANG KERJA HIDUPTimbalan → Dikualifikasiskor ≥ 60 dan aktiviti terkiniPrioriti 100_Keharmonisan → Pelangganperistiwa pembelian barang adaPrioriti 90_Pelanggan → BerbahayaJangan ada aktivitas untuk 60 _hariPrioriti 70_Waxid pada risiko → Pelangganpembelian atau balasan baruPrioriti 60_1PICK STAGESDari dan ke2DEFINE FILTERJSON gaya Segmen3ORDER RULESPertandingan pertama menang
Peraturan kitaran hayat dinilai mengikut keutamaan; peraturan pertama yang sepadan mengubah peringkat kenalan.

Setiap peraturan mempunyai peringkat sumber, peringkat destinasi, bendera aktif, keutamaan dan penapis gaya segmen. Tugas kitaran hayat berjadual menilai keutamaan yang lebih tinggi terlebih dahulu dan berhenti selepas padanan pertama untuk sesuatu kenalan.

Peraturan hendaklah saling difahami. Elakkan dua peraturan aktif yang boleh menggerakkan kenalan yang sama ke arah bertentangan dalam larian yang sama. Uji penapis terhadap segmen sebelum mengaktifkannya.

CRM

Aliran aktivitas CRM

Aliran aktiviti ruang kerja menggabungkan acara pelanggan dan operasi supaya pasukan boleh menyiasat apa yang berlaku tanpa membuka setiap modul.

Skrin produk
Aktivitas CRM¡Aksi arus aktivitas interleaves chat, tiket, email, webhook, konversi dan anomali peristiwa dengan filter dan pagination.Aktivitas CRMruang kerjaKEPADA2,804CUSTOMERS1,126ANOMALIES14ORANG KERJA HIDUPSembang diselesaikanjane@example.com · AISekarangTiket menjawabT-1048 · Bil4mPeristiwa yang tidak masuk akalsubscription.upgraded12mPenukaranSusunan #7788 · £149Fiji 19m1FILTERAcara dan pelanggan2OPEN CONTEXTLompat ke rekor3PAGE RESULTSSiasat-siasat yang dilakukan oleh pelaku kejahatan
¡Aksi arus aktivitas interleaves chat, tiket, email, webhook, konversi dan anomali peristiwa dengan filter dan pagination.

Tapis mengikut jenis acara, tarikh, kenalan atau keadaan pelanggan (termasuk pelanggan yang membayar). Suapan ini ialah model bacaan aktiviti yang direkodkan; ia tidak menggantikan rekod sumber tiket, perbualan, urus niaga atau penyambung. Buka rekod yang dipautkan sebelum mengambil tindakan sensitif.

CRM

Aliran kerja

Aliran kerja kinalis merespon sebuah acara dan menjalankan serangkaian tindakan yang diperintahkan, termasuk langkah tertunda dilanjutkan oleh cron.

Skrin produk
Aliran kerjaSebuah alur kerja menunjukkan pemicunya, tindakan selesai, menunggu penundaan dan langkah berikutnya.Aliran kerjaruang kerjaKASIH9RUNNING42GAGAL1ORANG KERJA HIDUPPemicucontact.createdMulaLangkah ke - 1Hantar e-mel alu-aluanSelesaiTundaanWait 2 _daySedang menungguLangkah ke - 2Cipta tugas penjualanSeterusnya1CHOOSE TRIGGERPeristiwa dimulai berjalan2ORDER STEPSTindakan dan penundaan3MONITORLanjutkan kembali melalui cron
Sebuah alur kerja menunjukkan pemicunya, tindakan selesai, menunggu penundaan dan langkah berikutnya.

Eksploitasi membuat alur kerja dengan memilih pemicu, menambahkan langkah-langkah dalam rangka dan mengaktifkannya. Lengahan disimpan, tidak dipegang oleh permintaan peramban; cron terpadu melanjutkan alur kerja yang jatuh tempo.

Templat permulaan terbina dalam termasuk alu-aluan selepas pendaftaran, ucapan terima kasih selepas pembelian dan pengesahan demo. Klon templat, gantikan penerima/kandungannya, kemudian uji dengan rekod terkawal sebelum pengaktifan secara meluas.

Reka tindakan supaya idempoten. Cubaan semula tidak boleh menghantar permintaan pemindahan wang pendua atau mencipta rekod pendua.

Sokongan

Tiket

Tiket ialah saluran sokongan formal anda. Tiket mempunyai jabatan, keutamaan, sasaran SLA, lampiran, nota dalaman dan jalinan perbualan penuh. Tiket boleh tiba daripada pentadbiran OpsIQ, borang/benaman tiket, pengambilan e-mel, peningkatan sembang, penyambung atau API.

Tiket
Rincian tiketTiket dengan bar sisi meta (keutamaan, jabatan, SLA, status), urutan perbualan, serta tindakan draf AI dan bayaran balik.Tiketruang kerja12345_KeutamaanTinggiDepartemen Urusan AirPenagihanSLA3h 12m kiriStatusBukaAku dikenakan dua kali untuk sayaLangganan pada 3Juni.AIAIDikonfirmasi duplikatcaj, pemprosesan bayaran balik.Draf balasan AIPengubahsaizan1THREADEDPerbualan penuh + nota2SLA & ROUTINGPrioriti, dept, pemasa3AI DRAFTJawapan palsu ditulis untuk Anda
Setiap tiket membawa keutamaan, jabatan, pemasa SLA dan bebenang penuhnya, dan AI boleh mendraf balasan untuk anda.

Bagaimana tiket mengalir

1
Tiket tiba

Pelanggan menghantar mesej melalui e-mel, peningkatan sembang, benaman tiket, atau pentadbir menciptanya. Tiket itu mendapat ID unik (cth., T-12345).

2
Zarage

AI membaca subjek dan kandungan, menetapkan keutamaan (Rendah/Biasa/Tinggi/Segera), mencadangkan jabatan dan mengesan sentimen. Ini berlaku secara automatik jika triaj didayakan.

3
Balas

Ejen membuka tiket, membaca konteks (profil pelanggan, data platform daripada penyambung, tiket terdahulu) dan menulis balasan. AI boleh merangka balasan, dan ejen menyuntingnya sebelum menghantar.

4
Tutup

Bila masalah selesai, agen menutup tiket pelanggan diberitahu.

Tindakan per-tiket

Departemen Perubahan

Pindahkan tiket ke jabatan lain (cth., daripada Umum ke Pengebilan). Berguna apabila penghalaan awal salah.

Umpukkan untuk agen

Tugaskan tiket kepada ahli pasukan tertentu. Ejen yang ditugaskan melihat tiket itu dalam paparan "Tiket saya" mereka.

Tambahkan nota internal

Kenota tulis catatan hanya terlihat pada staf. Gunakan untuk: temuan penyelidikan, alasan pengembalian dana, konteks teknik, komitmen sebelumnya. Catatan internal tidak pernah muncul ke pelanggan.

Cantumkan tiket

Semua pesan dari kedua tiket disimpan dalam tiket yang masih bertahan.

Respon yang tidak dapat dikalonkan

Masukkan templat balasan yang telah ditulis terlebih dahulu. Pemboleh ubah seperti {{customer_name}} dan {{ticket_id}} digantikan secara automatik.

Penulisan ulang karya palsu

Biarkan AI menambah baik draf balasan anda: laraskan nada, pendekkan/panjangkan, betulkan tatabahasa atau terjemahkan. Anda menyemak hasilnya sebelum menghantar.

Keutamaan perubahan

Tetapkan kepada Rendah, Biasa, Tinggi atau Segera. Keutamaan mempengaruhi pemasa SLA dan susunan isihan.

Status perubahan

¡Ditetapkan untuk Membuka, Mending, Menunggu Pelanggan, Dipecahkan, atau Ditutup.

Contoh yang bekerja di bidang kined: menangani pelanggan yang tidak bahagia

Emel pelanggan: "Saya dicaj dua kali untuk langganan saya"

Skenario:
Subject: Double charge on my account Body: Hi, I just checked my bank statement and I see two charges of $49.99 from your company dated June 3. I only have one subscription. Can you please refund the duplicate charge? This is really frustrating.
Apa yang perlu dilakukan:

Step 1: AI triage assigns Priority: High, Department: Billing, Sentiment: Frustrated. Step 2: Agent opens the ticket. The connector panel shows the customer's Stripe charges, confirmed two charges on June 3. Step 3: Agent adds an internal note: "Confirmed duplicate charge in Stripe. Transaction IDs: ch_xxx and ch_yyy." Step 4: Agent drafts a reply: "Hi [Name], I can see the duplicate charge and I'm processing a refund for the second transaction right now. You should see $49.99 back in your account within 3-5 business days. I'm sorry for the inconvenience." Step 5: Agent triggers the refund action through the Stripe connector (with confirmation). Step 6: Agent sends the reply and sets status to Resolved.

Departemen-Departmen

Cipta jabatan dalam Tetapan > Tiket > Jabatan. Jabatan biasa: Umum, Pengebilan, Teknikal, Jualan, Penyalahgunaan, Orientasi. Setiap jabatan boleh mempunyai peraturan balasan automatik, pengetahuan AI dan tugasan pasukan yang berbeza.

Respon yang Dikanon

Cipta templat balasan boleh guna semula dalam Tetapan > Tiket > Respons Sedia. Respons sedia yang baik termasuk:

Templat tanggapan sekata senam kalengan Contoh sempalan
Hi {{customer_name}},

Thanks for reaching out. I checked the details and here is what I found:

{{response_details}}

If you need anything else, just reply to this ticket and I will be happy to help.

Best regards,
{{agent_name}}
{{department_signature}}

Tiket Penggabungan

Apabila pelanggan menghantar soalan yang sama beberapa kali (melalui e-mel dan sembang, atau dua e-mel berasingan), anda boleh menggabungkan pendua tersebut. Pergi ke tiket, klik Gabung, pilih tiket lain untuk digabungkan. Tiket yang kekal akan mendapat semua mesej daripada kedua-dua tiket. Subjek tiket yang digabungkan mendapat tag [MERGED] untuk menunjukkan ia telah digabungkan.

Platform terhubung mengikuti penggabungan. Apabila tiket itu juga berada pada platform yang disambungkan (WHMCS, Zendesk, portal pelanggan SaaS), penggabungan berlaku di sana juga: platform menggabungkan salinannya, jadi tiket yang anda simpan menunjukkan mesej pertama dan balasan tiket yang digabungkan. Bagi tiket yang digabungkan yang tidak pernah berada pada platform itu, perbualannya ditambah ke tiket platform yang disimpan sebagai nota kakitangan peribadi, tidak sekali-kali sebagai balasan yang dihantar kepada pelanggan melalui e-mel. Penggabungan yang dibuat di dalam platform (contohnya dalam WHMCS) menggabungkan tiket OpsIQ dengan cara yang sama.

Prioriti dan SLA

Rendah

Soalan tidak mendesak, permintaan ciri, maklum balas umum. Sasaran respons pertama: 24 jam.

iranos

Target pertama respon: 8 jam.

Tinggi

Target pertama respon: 4 jam.

Darurat

Perkhidmatan terputus, insiden keselamatan, kehilangan data, ralat pengebilan. Sasaran respons pertama: 1 jam.

Penggulung SLA bermula bila tiket dicipta dan jeda bila status adalah "Menanti Pelanggan." Jika sasaran SLA terlepas, tiket ditonjolkan dan secara opsyenal dinaikkan.

Dapatkah pelanggan melihat catatan internal?+

Catatan internal hanya staf saja.

Apa yang terjadi ketika tiket tertutup dijawab?+

Tiket dibuka semula secara automatik dan kembali ke baris gilir aktif. Pasukan dimaklumkan tentang balasan baharu itu.

Bolehkah saya mengunci tiket untuk menghalang balasan selanjutnya?+

Ya. Gunakan pilihan Kunci Bebenang untuk menghalang pelanggan dan AI daripada menambah balasan baharu. Berguna untuk pertikaian yang telah diselesaikan atau siasatan yang telah ditutup.

Sokongan

Butiran selamat: kata laluan dan kunci tanpa e-mel

Sesetengah masalah hanya boleh diselesaikan dengan akses: log masuk laman web, kata laluan hosting, kunci API. Butiran selamat membolehkan pelanggan memberikannya kepada anda pada halaman selamat sekali guna dan bukannya menaipnya dalam e-mel, sembang atau balasan tiket. Nilai disulitkan, tidak sekali-kali disalin ke dalam tiket, dan hanya kakitangan yang anda benarkan boleh membukanya, dengan sebab yang dilog.

Hidupkannya untuk jabatan

1
Buka jabatan

Pergi ke Pasukan & Jabatan, buka Jabatan & penghalaan dan edit jabatan yang memerlukan akses (contohnya Sokongan teknikal).

2
Hidupkan Memerlukan butiran selamat

Dalam bahagian Butiran selamat , tandakan Memerlukan butiran selamat.

3
Pilih medan

Pilih medan yang diisi oleh pelanggan. Laman web, nama pengguna, kata laluan, perkhidmatan dan penerangan ringkas ialah set biasa; medan kata laluan sentiasa disertakan. Tambah lebih banyak medan dalam Portal Studio (borang permintaan).

4
Simpan

Klik Simpan Jabatan. Mulai sekarang setiap tiket yang dicipta dalam jabatan ini, atau dialihkan ke dalamnya, meminta butiran ini daripada pelanggan.

Bila permintaan dihantar

Tiket dicipta dalam jabatan

Daripada portal, e-mel, API, sembang atau platform yang disambungkan seperti WHMCS.

Tiket dialihkan ke dalam jabatan

Oleh ejen, automasi, peningkatan AI atau perubahan jabatan pada platform yang disambungkan.

Ejen meminta

Butang Minta butiran selamat pada mana-mana tiket.

AI meminta

Apabila isu teknikal memerlukan akses, AI menghantar permintaan dan bukannya meminta kata laluan dalam perbualan. Ia tidak sekali-kali mengulangi rahsia dan tidak pernah melihatnya.

Hanya satu permintaan dibuka bagi setiap tiket pada satu masa. Tiket menunjukkan Menunggu butiran selamat sehingga pelanggan menjawab; balasan tidak disekat.

Apa yang dilihat pelanggan

Pautan sekali guna ke halaman selamat dengan jenama anda. Ia berfungsi sekali, tamat tempoh selepas 72 jam dan boleh dihantar semula daripada tiket. Jika tidak digunakan, satu peringatan dihantar selepas 24 jam. Dalam sembang pelanggan, pelanggan mengisi borang selamat di dalam sembang dan perbualan hanya menunjukkan Butiran selamat diterima. Nilai rahsia tidak sekali-kali meninggalkan OpsIQ: platform yang disambungkan hanya menerima pautan. Pada platform yang disambungkan, pautan tiba sebagai balasan biasa dalam tiket mereka; platform yang balasannya awam (ulasan WordPress) atau untuk kakitangan sahaja (nota pesanan Shopify) tidak akan menerima pautan, dan pelanggan menerimanya melalui e-mel atau dalam portal.

Siapa yang boleh melihat nilai

Kebenaran Lihat butiran selamat

Hanya kakitangan dengan kebenaran ini melihat butang Tunjukkan pada tiket. Orang lain melihat medan itu sebagai Dikunci.

Sebab setiap kali

Menunjukkan nilai akan meminta sebab. Nama, masa dan sebab dilog dan ditunjukkan pada tiket.

Tidak sekali-kali di tempat lain

Nilai selamat tidak berada dalam badan tiket, e-mel, eksport, log, webhook, cerminan penyambung atau gesaan AI.

Dipadamkan selepas tiket ditutup

Nilai dipadamkan 30 hari selepas tiket ditutup (anda boleh menukar bilangan hari), dan serta-merta apabila tiket dipadamkan atau digabungkan.

💡
Medan tersuai tiket yang tiba daripada platform yang disambungkan mengikut peraturan yang sama: medan kata laluan daripada borang tiket WHMCS dimeterai sebaik sahaja ia tiba, dan medan biasa ditunjukkan pada tiket. Pembangun: lihat bahagian Medan tersuai tiket dan Butiran selamat (Kontrak 2.7) di bawah halaman ini.
Sokongan

Studio Perkhidmatan: SLA, aliran status dan kualiti

Bilik kawalan untuk cara operasi sokongan anda berfungsi: dasar SLA dengan tangga peningkatan, kalendar waktu perniagaan, aliran status yang dikuatkuasakan, tetapan CSAT dan suis ciri Enterprise. Buka dari halaman Tiket (butang Service Studio dalam bar operasi).

Dasar SLA

Setiap tiket baharu mendapat tarikh akhir balasan pertama dan tarikh akhir penyelesaian daripada dasar aktif yang paling khusus: jabatan + keutamaan mengatasi jabatan, yang mengatasi keutamaan, yang mengatasi lalai. Tarikh akhir dijeda secara automatik selagi tiket berada dalam status Menunggu atau Ditahan.

Tangga Escalasi

Daripada satu tindakan pelanggaran, dasar boleh menentukan sehingga enam langkah: contohnya memberi amaran kepada penerima tugasan pada 75% tempoh, memaklumkan pengurus pada 100%, menugaskan semula kepada ejen yang dinamakan pada 150%. Setiap langkah dicetuskan tepat sekali bagi setiap tiket.

Jam dan kalender bisnis bagi para penulis

Dengan waktu perniagaan dihidupkan, jam SLA hanya berjalan semasa waktu bekerja, jadi tiket yang dibuka pada petang Jumaat tidak dilanggar pada hari Sabtu. Kalendar bernama (zon waktu, hari, jam, cuti) boleh dilampirkan pada dasar individu untuk pasukan di wilayah yang berbeza.

Aliran Status Flow

Matriks dari/ke yang mengehadkan perubahan status yang boleh dibuat oleh pentadbir, dengan pratetap gaya Zendesk. Automasi, e-mel masuk dan balasan tiket yang berasal daripada pelanggan sentiasa dikecualikan, jadi matriks yang ketat tidak sekali-kali boleh menyekat saluran proses. Secara pilihan, wajibkan pengesahan yang diluluskan sebelum menutup.

Kepatuhan

Agen meminta tanda keluar pada tiket (pembayaran balik melebihi ambang, pengecualian polisi). Penyampai yang diberi nama atau mana-mana Pentadbir Penuh memutuskan dengan nota; penerima tidak boleh meluluskan permintaan mereka sendiri. Kebenaran menunggu muncul sebagai banner di dalam peti masuk.

Hubungan tiket

Pautkan tiket sebagai berkaitan, pendua, induk/anak atau menyekat; pisahkan balasan ke tiket baharu yang dipautkan (kebalikan penggabungan, tanpa menghantar e-mel kepada pelanggan); ikuti tiket untuk pemberitahuan dalam aplikasi, dan secara pilihan CC alamat e-mel pengikut pada balasan keluar.

Kekejaman dan tabrakan hidup dalam kotak

Dengan peti masuk masa nyata didayakan, tiket dan balasan baharu muncul kepada ejen dalam beberapa saat melalui aliran pemberitahuan sedia ada. Pada sesuatu tiket, ejen dapat melihat siapa lagi yang sedang melihatnya dan menerima sepanduk amaran apabila rakan sepasukan sudah menulis balasan. Butang Tuntut satu klik menugaskan tiket itu kepada anda sendiri.

Laluan yang sedar AI

Peraturan laluan boleh sepadan pada isyarat penapisan AI: keutamaan, kategori, perasaan dan risiko escalation, ditambah nilai- medan suai yang ditipkan dari borang permintaan portal anda. Peraturen menggunakan keadaan ini tetap rehat sehingga ciri dihidupkan.

💡
Setiap suis enterprise dihantar dalam keadaan MATI. Menghidupkannya dalam Service Studio → Kualiti & Automasi ialah pilihan masuk; membiarkannya mati mengekalkan tingkah laku sama seperti sebelum naik taraf.
Mengapakah pelanggan masih boleh membuka semula tiket yang ditutup sedangkan matriks saya melarang ditutup → dibuka?+

Matriks ini hanya mengawal tindakan PENTADBIR. Balasan yang dimulakan oleh pelanggan, balasan e-mel dan automasi sengaja dikecualikan supaya dasar yang ketat tidak akan sekali-kali mengunci pelanggan di luar atau merosakkan saluran paip.

Apakah tangga SLA menggantikan tindakan pelanggaran lama?+

Tidak. Dasar yang disimpan dengan satu tindakan pelanggaran terus berfungsi tanpa perubahan. Tangga menggantikan tindakan tunggal itu hanya pada dasar yang anda tentukan langkahnya.

Sokongan

Auto-jawab tiket dan eskalasi

Balasan automatik membolehkan AI membalas tiket baharu secara automatik. Eskalasi memindahkan tiket ke jabatan lain apabila AI mengesan keperluan khusus. Kedua-dua ciri berfungsi merentas tiket asli dan tiket yang dicipta daripada e-mel.

Autojawab
Autobalasan tiketSatu aliran: tiket baharu, kelewatan dua minit, balasan AI daripada pengetahuan dan konteks, kemudian dihantar atau disimpan sebagai draf.Autojawabruang kerjaKetika tiket baru tibaTiket baruSumber apa sajaTundaan2 minBalasan AIKB + konteksÁ Senatau drafJika manusia membalas semasa tempoh lengah, balasan automatik dibatalkan. Niat boleh mengeskalasikan ke jabatan lain terlebih dahulu.1DELAYManusia dapat kesempatan pertama2AI REPLIESDari konteks KB +3OR ESCALATERute oleh maksud
Tiket baharu mendapat kelewatan singkat (supaya manusia boleh masuk campur), kemudian balasan AI daripada pengetahuan anda, dihantar atau dibaris gilir sebagai draf.

Bagaimana kerja auto-reply

1
Tiket muncul

Sebuah tiket baru dibuat dari sumber manapun (email, chat, portal, API_).

2
Jadwal kerja

OpsIQ Waits untuk penundaan yang telah dikonfigurasi (lalai: 2 Ini memberi agen manusia kesempatan untuk merespon terlebih dahulu.

3
Balasan pertama menang

Jika agen manusia menjawab selama penundaan, auto-reply dibatalkan. Jika tidak, AI menghasilkan balasan.

4
Jana dan hantar

AI membaca tiket, menyemak pangkalan pengetahuan, konteks penyambung dan sejarah pelanggan, kemudian menulis balasan. Balasan itu dihantar (atau diletakkan dalam baris gilir sebagai draf untuk disemak, bergantung pada tetapan).

Bagaimana eskalasi bekerja

1
Departemen-departmen

Jabatan mana yang dapat menerima eskalasi (misalnya, Billing dapat ditingkatkan dari Jenderal, Teknis dapat diekskavasi dari Umum).

2
Kelaskan tiket

Sebelum membalas secara automatik, AI mengelaskan niat tiket: pengebilan, teknikal, bayaran balik, penyalahgunaan, dan sebagainya.

3
Move jika diperlukan

Jika tujuan tiket cocok dengan departemen eskalasi, tiketnya dipindahkan.

4
Janakan dalam suara baru

Balasan dijana menggunakan pengetahuan dan latihan AI jabatan destinasi.

Rujukan tetapan

Balasan automatik didayakan

Hidupkan untuk mengaktifkan AI auto-reply untuk tiket.

Departemen-departemen yang diizinkan

Jabatan yang boleh menerima balasan automatik. Mulakan dengan jabatan berisiko rendah (Umum, Jualan) sebelum mendayakan pengebilan.

Tundaan

Berapa lama untuk menunggu sebelum AI menjawab (dalam saat). Lalai: 120 saat (2 Tetapkan ke 0 untuk jawapan segera.

Jadual Lengah

Secara pilihan, tetapkan kelewatan yang berbeza untuk waktu perniagaan berbanding selepas waktu perniagaan.

\"Hentikan di balasan admin\"

Jika agen manusia menjawab pertama, batalkan auto-reply.

Escalasi diaktifkan

Dayakan penghalaan jabatan automatik berdasarkan niat tiket.

Departemen Escalation

Jabatan yang boleh menerima eskalasi tiket.

Status Escalasi

Status apa yang akan ditetapkan sewaktu eskalasi (misalnya, Buka, Tunda).

Catatan Escalation

Apakah untuk menambah catatan internal menjelaskan alasan eskalasi.

Tiket yang dibuat e-mail

Tiket yang dicipta daripada e-mel (melalui tinjauan peti mel atau penghantaran MX-piped) mengikut peraturan balasan automatik dan peningkatan yang sama. Balasan AI dihantar sebagai respons e-mel kepada pelanggan. Draf e-mel pergi ke baris gilir draf untuk disemak jika dikonfigurasikan.

Adakah AI akan membalas soalan pengebilan secara automatik?+

Hanya jika anda mendayakan balasan automatik untuk jabatan Pengebilan. Kami mengesyorkan bermula dengan balasan automatik dimatikan untuk pengebilan dan mendayakannya hanya selepas anda melatih AI dengan pengetahuan pengebilan yang menyeluruh dan mengujinya dengan teliti.

Bagaimana jika AI memberikan jawapan yang salah?+

Jika pelanggan membalas dengan mengatakan jawapan itu salah, ejen manusia sepatutnya campur tangan. Semak Sejarah AI untuk memahami sebab AI memberikan jawapan yang salah, kemudian kemas kini pangkalan pengetahuan atau latihan AI untuk mengelakkan perkara itu berulang.

Bolehkah saya menyemak balasan automatik sebelum ia dihantar?+

Ya. Tetapkan mod penghantaran kepada "Draf" bukannya "Auto-hantar". Draf autobalas akan muncul dalam baris gilir Draf untuk tinjauan manusia sebelum dihantar.

Sokongan

Portal tiket ditancapkan

Portal tiket beded memungkinkan Anda menambahkan antarmuka manajemen tiket ke website manapun pelanggan dapat melihat tiket mereka, membuat yang baru, dan membalas, semua tanpa masuk OpsIQ \"Madfi admin\".

Bagaimana cara kerjanya
Portal tiket ditancapkanPortal sokongan yang dibenamkan dalam laman web, menunjukkan kepada pelanggan tiket mereka sendiri dan butang tiket baharu.yoursite.com/supportPusat sokonganTiket baruKATA YOUR TICKETS#1042 · Soalan bayaran balikBuka#1038 · Setup bantuanDipecahkan#1031 · Salinan audioDitunda1EMBEDTambah ke mana-mana laman web2SELF-SERVEPelanggan melihat tiket mereka3NO LOGINIdentitas yang ditangani dengan aman
Portal tiket ditancapkan

Tiga rasa embeded

Tertanam dalam garis

Portal itu mengambil lebar penuh dari wadahnya.

Widget terapung

Memaparkan butang terapung yang membuka portal tiket dalam panel. Serupa dengan widget sembang.

Disahkan

Mereka hanya perlu tanda pengenal, pelanggan hanya melihat tiket mereka sendiri.

Pemasangan

Portal tiket ditancapkan
<!-- Inline: the portal renders inside this element -->
<div id="opsiq-tickets"></div>
<script src="https://your-opsiq-domain.com/embed/tickets.js" data-site-key="SITE_KEY"></script>

<!-- Floating: a support button opens the portal in a panel -->
<script src="https://your-opsiq-domain.com/embed/tickets.js" data-site-key="SITE_KEY" data-mode="floating"></script>

<!-- Signed-in customer: your server adds a fresh identity token on every page render -->
<div id="opsiq-tickets"></div>
<script src="https://your-opsiq-domain.com/embed/tickets.js" data-site-key="SITE_KEY"
        data-customer-email="[email protected]"
        data-customer-token="SERVER_GENERATED_TOKEN"></script>
💡
Tiket → Benamkan di laman anda membina coretan dengan warna dan reka letak anda. Daripada menambah token pada tag, anda boleh hoskan opsiq-ticket-identity.php di akar laman anda (atau tuju data-identity-url kepadanya): widget bertanya pada setiap muat siapa yang log masuk, dan pelanggan yang log keluar dari laman anda turut log keluar dari portal.

Generasi token Identiti Identitas

Untuk mod disahkan, pelayan anda menandatangani token jangka pendek untuk pelanggan yang log masuk dengan rahsia laman anda (Connectors → laman anda → Webhook Secret). Formatnya ialah v2.<exp>.<nonce>.<hmac>: exp ialah masa Unix paling lewat satu jam ke hadapan (10 minit adalah biasa), nonce ialah 16 aksara heksadesimal, dan hmac ialah HMAC-SHA256 bagi embed-identity|SITE_KEY|email|exp|nonce dengan e-mel ditukar kepada huruf kecil dan dipangkas. Widget menukarkannya sekali untuk sesi yang sah sehingga 24 jam dan boleh dibatalkan. Rahsia tidak pernah dimasukkan ke dalam halaman.

PHP KEPJAYA · menghasilkan token identitas
<?php
// Identity token for the ticket portal embed (PHP, no dependencies)
$secret = getenv("OPSIQ_SITE_SECRET");               // the site secret, server-side only
$email  = strtolower(trim($user["email"]));          // your signed-in customer
$exp    = time() + 600;                              // 10 minutes
$nonce  = bin2hex(random_bytes(8));                  // 16 hex characters
$mac    = hash_hmac("sha256", "embed-identity|SITE_KEY|$email|$exp|$nonce", $secret);
$token  = "v2.$exp.$nonce.$mac";
// Print $email and $token into data-customer-email and data-customer-token
\"Node. js\", menghasilkan tanda identitas
// Node.js, no dependencies
const crypto = require("crypto");

function opsiqTicketToken(email) {
  const e = String(email).trim().toLowerCase();
  const exp = Math.floor(Date.now() / 1000) + 600;     // 10 minutes
  const nonce = crypto.randomBytes(8).toString("hex"); // 16 hex characters
  const mac = crypto.createHmac("sha256", process.env.OPSIQ_SITE_SECRET)
    .update(["embed-identity", "SITE_KEY", e, exp, nonce].join("|")).digest("hex");
  return { email: e, token: ["v2", exp, nonce, mac].join(".") };
}

Ciri widget

Daftar tiket

Daftar yang dicari, disaring status.

Perbualan berbebenang

Paparan perbualan penuh dengan teks kaya, lampiran dan cap masa.

Autosimpan Draf

Draf balasan pelanggan disimpan secara automatik supaya mereka tidak kehilangan kerja jika mereka beralih ke halaman lain.

jajak pendapat langsung

Widget menyemak balasan baharu setiap ~12 saat.

Mengeluarkan / membuka kembali

Pelanggan dapat menyelesaikan atau membuka kembali tiket mereka sendiri dengan satu klik.

✅
Catatan staf internal tidak pernah ditunjukkan kepada pelanggan dalam benam tiket.
Sokongan

Kotak masuk Chat

Peti Masuk Sembang ialah tempat pasukan anda mengurus perbualan pelanggan secara langsung. Ia menunjukkan sembang aktif, perbualan yang ditugaskan, sembang yang dikendalikan AI dan sejarah yang diarkibkan.

Kotak masuk Chat
Kotak masuk ChatPeti masuk sembang ejen tiga panel: senarai perbualan, perbualan langsung dengan cip draf AI, dan panel konteks pelawat/CRM.Kotak masuk Chatruang kerjaKANJDJaneDimana pesanankuKANTOR MOMensahsoalan pengebilanRT& LukiskanDikendalikan AIDimana pesananku?Dihantar hari ini · UPSDraf AI sediaBalas...VIUSTORJane DoeAS · Chrome3 _lewati perintahLTV $480_CRMTahapan: Pelanggan1UNIFIEDSetiap chat hidup2CONTEXTPanel lawatitor + CRM3AI ASSISTKOMDraf & penulisan ulang
Satu peti masuk untuk setiap sembang langsung, senarai perbualan, bebenang dengan draf AI sedia digunakan, dan konteks penuh pelawat + CRM.

Pembicaraan pembual

Sembang aktif

Perbualan yang sedang berlangsung. Titik hijau = pelanggan sedang menaip atau aktif baru-baru ini.

Diurus oleh AI

Perbualan di mana AI menjawab. Anda boleh ambil alih bila-bila masa dengan mengklik "Sertai."

Ditugaskan padaku

Perbualan yang ditugaskan khusus kepada anda.

Sedang menunggu

Perbualan di mana pelanggan sedang menunggu respons.

Arsip

Perbualan yang telah selesai. Boleh dicari mengikut kata kunci, tarikh dan pelanggan.

Dilepaskan dari AI ke manusia

Apabila anda mengambil alih perbualan daripada AI, ikuti tiga peraturan ini:

1
Alfly

Perkenalkan diri anda dengan nama. "Hai, saya Sarah daripada pasukan sokongan."

2
Konteks referensi Ukraina

Tunjukkan awak baca perbualan. "Saya nampak awak tanya status pesanan awak."

3
Keharapan

Beritahu pelanggan apa yang akan berlaku seterusnya. "Saya sedang mengkaji perkara ini sekarang dan saya akan ada jawapan untuk anda dalam beberapa minit."

Menghidupkan/mematikan AI bagi setiap perbualan

Gunakan togol AI di bahagian atas setiap perbualan. Apabila AI dihidupkan, AI menjana respons. Apabila dimatikan, hanya ejen manusia boleh membalas. AI mengingati konteks perbualan walaupun dimatikan dan dihidupkan semula.

Mode Away / jam keluar

Konfigur jam kerja dalam Tetapan. Diluar jam kerja, AI boleh: (1) Teruskan menjawab kepada pelanggan, (2) Papar mesej "keluar" dan cipta tiket untuk diikuti, atau (3) Lumpuhkan sembang sepenuhnya dan papar borang tiket. Pilih perilaku yang sesuai dengan model sokongan anda.

Mengendalikan perbualan yang sukar

1
Tenang.

Jangan sesuaikan intensitas emosional pelanggan.

2
Pengumpul fakta

Sebelum membalas, kumpulkan maklumat yang berkaitan: butiran pesanan, status akaun, tiket terdahulu.

3
Escalasi awal

Jika situasi itu melibatkan bayaran balik, ancaman undang-undang, penyalahgunaan atau keselamatan, tingkatkan kepada ahli pasukan kanan dan jangan cuba mengendalikannya sendirian.

Bolehkah saya mempunyai sembang pasukan (ejen ke ejen)?+

Ya. Gunakan nota dalaman dalam perbualan untuk berkomunikasi dengan ejen lain. Nota ini tidak pernah kelihatan kepada pelanggan.

Apakah yang berlaku apabila saya menutup sembang?+

Perbualan dipindahkan ke Arkib. Jika pelanggan menghantar mesej baharu kemudian, perbualan baharu akan dibuat.

Sokongan

Saluran Pesanan

Sambungkan WhatsApp, Facebook Messenger, Instagram DM, Telegram dan LINE supaya mesej yang sudah dihantar oleh pelanggan kepada anda tiba dalam peti masuk yang sama dengan sembang laman web anda, dijawab oleh pembantu AI yang sama.

Setiap saluran berfungsi dengan cara yang sama setelah disambungkan: mesej pelanggan menjadi perbualan dalam Peti Masuk Sembang, pembantu AI anda menjawabnya menggunakan pengetahuan dan arahan yang sama seperti sembang laman web anda, dan mana-mana ejen boleh mengambil alih. Tiada apa-apa tentang AI anda yang perlu dikonfigurasikan bagi setiap saluran.

Apa hubungan terlihat seperti

Facebook Messenger & Instagram

Satu klik. Buka Penyambung → Facebook Messenger & Instagram DM, klik Sambung, log masuk dengan Facebook akaun yang mengurus Laman anda, dan pilih Halaman. Instagram datang dengannya apabila halaman anda mempunyai Instagram akaun profesional disambungkan.

WhatsApp

Satu klik apabila penyedia anda menawarkannya: buka penyambung Messaging Hub dan gunakan Connect WhatsApp, kemudian ikut pendaftaran berpandu Meta untuk memilih atau mencipta nombor WhatsApp Business anda. Jika tidak, tampal kelayakan daripada mana-mana 20 gerbang.

Telegram

Dua minit. Telegram, hantar /newbot, pilih nama dan nama pengguna berakhir dengan "bot", dan tampal token yang diberikan kepada anda ke dalam Telegram sambungan. OpsIQ mendaftar webhook untuk anda.

BARIS

Buat Pesan API Saluran di developer.line.biz, tampal rahasia dan token akses Channel, kemudian salin webhook URL Dipaparkan dalam OpsIQ Ke dalam LINE dan matikan replies-otomatisnya sendiri.

SMS

Tambah penyedia (Twilio, Vonage, Termii dan lain-lain) dalam Hab Pemesejan dengan kelayakan dan nombor penghantarnya.

✅
Setiap penyambung menunjukkan arahan langkah demi langkahnya sendiri di dalam laci, termasuk apa yang perlu disalin dan di mana dengan tepat. Anda tidak pernah memerlukan kelayakan pembangun untuk pilihan satu klik.

Ada saluran di

Gnectkan sebuah saluran tidak memulainya. Pergi ke Tetapan Profil → Klien: → Lanjutan → Saluran Pesanan Saraf, hidupkan togol utama dan kemudian saluran individu. Setiap saluran mempunyai suis balasan automatik AI tersendiri, jadi anda boleh merintis pada satu saluran sebelum membuka yang lain.

1
Buat saluran

Dalam Penyambung, menggunakan arahan dalam laci penyambung tersebut.

2
Tes sambungannya.

Ini membuat panggilan nyata ke penyedia dan memberitahu Anda apa yang salah jika ada sesuatu.

3
Menyalurkan saluran pesan

Tetapan → Sembang Pelanggan → Lanjutan. Hidupkan suis utama, kemudian saluran itu.

4
Ajukan pesan pada dirimu sendiri

Daripada akaun lain, hantar mesej kepada Halaman, nombor atau bot anda. Ia sepatutnya muncul dalam Peti Masuk Sembang dalam beberapa saat dan mendapat balasan AI.

Jendela Balas

Platform pemesejan mengehadkan tempoh masa sesebuah perniagaan boleh membalas selepas pelanggan menulis. OpsIQ menunjukkan baki masa pada setiap perbualan dan menguatkuasakan peraturan itu untuk anda.

WhatsApp

24 jam dari mesej terakhir pelanggan. Selepas itu anda hanya boleh menghantar templat yang diluluskan, yang anda konfigurasikan dalam tab Lanjutan yang sama.

Messenger & Instagram

24 jam untuk balasan biasa; ejen boleh menjawab sehingga 7 hari kemudian di bawah kelonggaran ejen manusia Meta.

Telegram_, LINE, SMS

Tidak ada jendela yang disimpul.

⚠️
Jika balasan gagal kerana tetingkap telah ditutup, perbualan menunjukkan sebabnya. Ini ialah peraturan platform, bukan had OpsIQ.

Soalan lazim

Adakah pelanggan nampak bahawa AI yang menjawab?+

Hanya jika Anda memberitahu mereka.

Bolehkah ejen mengambil alih di pertengahan perbualan?+

Ya. Buka perbualan dalam Peti Masuk Sembang dan klik Sertai. AI berhenti, anda menaip, dan pelanggan melihat bebenang yang berterusan di pihak mereka.

Bagaimana jika aku memutuskan saluran?+

Use Disambungkan pada penyambung. Sejarah pesan disimpan; pesan baru berhenti tiba, dan platform disuruh untuk menghentikan pengirimannya.

Bolehkah dua ruang kerja menggunakan Halaman Facebook yang sama?+

Tidak. sebuah Halaman milik satu ruang kerja pada suatu waktu. Menghubungkannya ke tempat lain memindahkannya, dan ruang kerja pertama berhenti menerima pesan, jadi putuskan dengan sengaja daripada menyambung kembali ke tempat lainnya.

Sokongan

Perbualan sembang sebenar

Contoh-contoh ini menunjukkan cara AI Pelanggan yang terlatih dengan baik sepatutnya mengendalikan senario biasa. Gunakannya untuk menguji latihan AI anda dan mengenal pasti kekurangan.

10 contoh perbualan

1Kembali pelanggan bertanya tentang pesanan

Skenario:
Pelanggan: Hai, saya membuat pesanan 3 hari lalu dan belum menerima sebarang pemberitahuan penghantaran lagi. Pesanan #ORD-5523.
Apa yang perlu dilakukan:

AI hendaklah: (1) Mencari pesanan #ORD-5523 melalui penyambung. (2) Melaporkan status semasa dan maklumat penjejakan jika ada. (3) Jika pesanan itu lewat, akui kelewatan tersebut dan berikan anggaran garis masa. (4) JANGAN mereka status penghantaran jika penyambung tidak mempunyainya.

2Prospect bertanya tentang harga

Skenario:
Pelanggan: Berapakah kos pelan Pro anda? Adakah anda menawarkan pengebilan tahunan?
Apa yang perlu dilakukan:

AI hendaklah: (1) Menjawab daripada pangkalan pengetahuan dengan harga semasa. (2) Menerangkan perbezaan antara pengebilan bulanan dan tahunan. (3) Jika jawapan tiada dalam pangkalan pengetahuan, nyatakannya dan tawarkan untuk menghubungkan mereka dengan jualan. (4) JANGAN mereka harga yang tiada dalam pangkalan pengetahuan.

3Pelanggan yang marah menuntut pengembalian dana

Skenario:
Pelanggan: Ini tidak masuk akal! Produk anda tidak berfungsi dan saya mahu wang saya dikembalikan SEKARANG.
Apa yang perlu dilakukan:

AI sepatutnya: (1) Mengakui kekecewaan itu dengan tenang. (2) Meminta nombor pesanan atau e-mel akaun. (3) Menerangkan proses bayaran balik. (4) Mencipta tiket sokongan atau memindahkan kepada ejen manusia. (5) JANGAN menjanjikan bayaran balik, itu memerlukan kelulusan manusia.

4Kasus ganda di pinggir.

Skenario:
Aku didakwa dua kali bulan ini. $29.99.
Apa yang perlu dilakukan:

AI sepatutnya: (1) Mengakui kebimbangan itu. (2) Mengumpul butiran yang berkaitan (e-mel, tarikh caj). (3) Menerangkan bahawa isu pengebilan memerlukan semakan manusia. (4) Mencipta tiket jabatan Pengebilan dengan butiran tersebut. (5) Menetapkan keutamaan kepada Tinggi.

5. Pelanggan multi-bahasa

Skenario:
Pelanggan: Bonjour, je voudrais savoir si vous livrez en France?
Apa yang perlu dilakukan:

AI sepatutnya: (1) Membalas dalam bahasa pelanggan jika bahasa itu disokong. (2) Menjawab soalan tentang penghantaran ke Perancis daripada pangkalan pengetahuan. (3) Jika bahasa itu tidak disokong, membalas dalam bahasa lalai dan menyebut bahasa yang tersedia.

6. Perbualan selepas waktu bekerja

Skenario:
Halo, ada orang di sana?
Apa yang perlu dilakukan:

AI sepatutnya: (1) Jika dikonfigurasikan untuk AI di luar waktu kerja, balas dan bantu. (2) Jika di luar waktu kerja mencipta tiket, katakan: "Pasukan kami tidak berada dalam talian pada masa ini. Saya telah mencipta tiket sokongan untuk anda dan seseorang akan membuat susulan semasa waktu perniagaan." (3) Berikan nombor tiket.

7Perbandingan pra pembelian belanja

Skenario:
Pelanggan: Bagaimana produk Anda dibandingkan dengan [Kompetitor X]?
Apa yang perlu dilakukan:

AI sepatutnya: (1) Menerangkan kekuatan produk anda secara fakta. (2) JANGAN memburuk-burukkan pesaing. (3) Jika terdapat halaman perbandingan dalam pangkalan pengetahuan, pautkan kepadanya. (4) Jika pelanggan bertanya tentang ciri yang anda tiada, berlaku jujur.

8Pelanggan ingin rekomendasi.

Skenario:
Pelanggan: Saya mengendalikan kedai dalam talian kecil dengan kira-kira 100 pesanan sebulan. Pelan manakah yang sesuai untuk saya?
Apa yang perlu dilakukan:

AI sepatutnya: (1) Bertanya soalan penjelasan jika perlu (cth., ciri mana yang paling penting). (2) Mengesyorkan pelan berdasarkan pangkalan pengetahuan. (3) Menerangkan mengapa pelan itu sesuai dengan keperluan mereka. (4) Menyebut bahawa mereka boleh bermula dengan pelan yang lebih kecil dan menaik taraf kemudian.

9. Pelanggan cuba mendapatkan diskaun tanpa kebenaran

Skenario:
Aku melihat online yang kau berikan 50% Boleh aku minta diskon?
Apa yang perlu dilakukan:

AI patut: (1) Menerangkan promosi semasa dengan sopan jika ada. (2) JANGAN mencipta atau menjanjikan diskaun yang tiada dalam pangkalan pengetahuan. (3) Jika pelanggan terus mendesak, tawarkan untuk menghubungkan mereka dengan pasukan jualan.

10. Pelanggan memerlukan bantuan dengan sesuatu ciri

Skenario:
Pelanggan: Bagaimanakah saya mengeksport data saya? Saya tidak dapat mencari butang eksport.
Apa yang perlu dilakukan:

AI sepatutnya: (1) Memberikan arahan langkah demi langkah daripada pangkalan pengetahuan. (2) Menyertakan laluan halaman dan lokasi butang yang tepat. (3) Jika ciri itu memerlukan pelan tertentu, nyatakan perkara itu. (4) Jika ciri itu tidak wujud, berterus terang dan cadangkan alternatif.

Sokongan

routing dan eskalasi chat

Apabila sembang langsung memerlukan orang sebenar, AI menjawab dua soalan: pasukan mana yang memiliki perbualan ini, dan siapa yang patut dimaklumkan. Kedua-duanya dikonfigurasikan dalam Tetapan, Client Chat, Aliran Sokongan, di bawah jabatan penghalaan AI.

Para departemen yang dapat digunakan oleh AI

2 kotak di panel itu adalah daftar putih departemen pindah ke kanan satu-satunya yang dapat AI rute atau tiket terbuka masuk apapun yang tersisa di kiri tidak terlihat olehnya bahkan jika departemen ada dan staf mulai sempit dan menambahkan departemen sebagai Anda staf mereka

💡
Jika tidak ada departemen yang diaktifkan sama sekali, OpsIQ jatuh kembali ke routing warisan di setiap departemen yang dapat ditemukan. anggaplah itu sebagai jaring pengaman, bukan pilihan konfigurasi.

Siapa yang menerima eskalasi

Inilah bahagian yang kebanyakan orang jangka perlu dikonfigurasi tetapi sebenarnya tidak perlu. Apabila AI menaikkan sembang, OpsIQ menghantar e-mel kepada orang yang dikaitkan dengan jabatan tersebut. Anda mengurus senarai itu sekali sahaja, pada halaman Team and Departments, dan kedua-dua eskalasi tiket dan eskalasi sembang mengikutinya.

Anggota pasukan Jabatan

Setiap admin aktif yang melekat pada departemen menerima salinan mereka sendiri. Ditangguhkan dan dilumpuhkan rekening dilewatkan.

Fadmin Primer Fabrik

Digunakan apabila tiada ahli pasukan dilampirkan, supaya peningkatan masih sampai kepada seseorang.

Tak ada yang dilampirkan.

Penghantaran tidak dapat dilakukan. Panel penghalaan menandakan jabatan itu dengan warna merah dan AI tidak memberitahu pelawat bahawa seorang manusia telah dimaklumkan.

⚠️
Alamat e-mel jabatan itu sendiri sengaja tidak digunakan sebagai penerima. Alamat itu ialah peti mel tiket masuk jabatan, iaitu alamat yang digunakan untuk memadankan mel masuk bagi membuka tiket. Peningkatan yang dihantar ke situ akan disalurkan semula sebagai tiket baharu dan bukannya sampai kepada seseorang.

Departemen tangkapan

Hanya satu jabatan yang membawa tanda tangkap-semua. Ia menerima sembang yang tidak dapat ditempatkan oleh AI dengan yakin, dan ia ialah pilihan terakhir, bukan laluan biasa.

1
Sinyal clear signal menang

Perkataan pengebilan dihalakan ke jabatan pengebilan, perkataan pengehosan dan ralat ke jabatan teknikal, perkataan pembelian ke jualan.

2
Pengkelas AI ke depan.

Jika kata kunci tidak muktamad, model membaca perbualan dan memilih daripada jabatan yang didayakan.

3
Lalu menangkap semua

Hanya ketika keduanya datang kosong Apakah departemen menangkap-semua menerima chat.

4
Petugas penjualan

Jika jabatan tangkap semua ialah jabatan jualan dan pelawat tidak menunjukkan isyarat ingin membeli, OpsIQ akan mencari jabatan sokongan atau teknikal sebagai gantinya, supaya soalan sokongan biasa tidak terkumpul di Jualan.

Apa yang diberitahu kepada pelawat

Jika e-mel eskalasi dihantar, AI memberitahu pelawat bahawa pasukan telah dimaklumkan. Jika ia tidak dapat dihantar, AI menyatakan sesuatu yang jujur dan mempelawa mereka meninggalkan mesej dalam sembang. Ia tidak akan mendakwa seorang manusia telah dimaklumkan apabila tiada e-mel dihantar.

Panel kata "Tiada siapa untuk memberitahu" bagi satu jabatan+

Tak ada yang dilampirkan ke dalamnya.

Bolehkah eskalasi sembang pergi ke tempat lain selain pasukan?+

Ya. Alamat tersuai yang pernah disimpan untuk sesuatu jabatan masih mengatasi senarai pasukan. Persediaan baharu hendaklah melampirkan orang kepada jabatan tersebut, supaya hanya ada satu tempat untuk diselenggara.

Kenapa aku dilewatkan?+

Semak sama ada ia jabatan jualan. Jika ya, dan pelawat tidak menunjukkan isyarat pembelian, OpsIQ sengaja menghalakan ke jabatan sokongan atau teknikal.

Sokongan

Kotak surat dan draf Email

OpsIQ boleh bersambung ke peti mel e-mel untuk mencipta tiket secara automatik daripada e-mel masuk dan menghantar balasan sebagai e-mel. Ia juga menyediakan balasan yang didrafkan oleh AI untuk semakan manusia.

E-mel
Email ke tiketKotak-surat berisi IMAP pada kotak surat di sebelah kiri memberi makan email masuk ke dalam tiket berbenang dengan balasan yang tertabur AI di sebelah kanan.E-melruang kerjasupport@you.com · IMAPPermintaan bayaran balikjane@acme.comIndianapolis tidak dapat log masukm.osei@shop.iovoice copyrita@studio.coTiket tiket 1042Dari email · BillingSaya ingin mendapatkan bayaran balik untukTuduhan pendua...Draf AISemak & hantar balasan1INGESTIMAP & meneruskan dalam2TO TICKETSDibebenangkan secara automatik3AI DRAFTSBalasan untuk ulasan
Tarik masuk e-mel melalui IMAP (atau pemajuan), tukarkan setiap satu menjadi tiket berutas, dan biarkan AI merangka balasan untuk disemak.

Menyambungkan peti mel

Protokol

IMAP (kebanyakan penyedia), Gmail API Nigoda (Google Area Kerja), atau Microsoft Graph (Outlook 365).

Tetapan diperlukan

Hos, port, penyulitan (SSL/TLS), nama pengguna, kata laluan atau kata laluan aplikasi, folder (biasanya INBOX).

Pemetaan Jabatan

Petakan peti mel ke bahagian tiket. Emel kepada [email protected] mencipta tiket dalam bahagian "Support".

Gmailsetup (langkah demi langkah)

1
Hidupkan pengesahan 2-Langkah

Pergi ke Google Account > Security > 2- Langkah Verifikasi dan mengaktifkannya.

2
Cipta Kata Laluan Aplikasi

Pergi ke Akaun Google > Keselamatan > Katalaluan Aplikasi. Pilih "Mel" dan "Lain-lain (OpsIQ)". Salin 16 Kata laluan -character.

3
Ke_masukkan di OpsIQ

Pergi ke E-mel > Peti Mel > Tambah. Tetapkan hos: imap.gmail.com, port: 993, penyulitan: SSL, nama pengguna: [email protected], kata laluan: kata laluan aplikasi.

4
Uji

Klik Uji Sambungan. Jika berjaya, OpsIQ akan mula meninjau e-mel baharu pada selang yang dikonfigurasikan.

konfigurasi 365 Outlook

1
Periksa IMAP *Vakta *

Di Outlook Seting rafter > Mail > Sync email, pastikan IMAP BAHASA diaktifkan.

2
Gunakan kata laluan aplikasi atau pengesahan moden

Jika MFA didayakan, cipta kata laluan aplikasi. Jika tidak, gunakan kata laluan biasa anda.

3
Ke_masukkan di OpsIQ

Host: outlook.office365.com, pelabuhan: 993, enkripsi: SSL Nama pengguna: [email protected].

cPanel setup webmail

1
Cari tetapan IMAP

Dalam cPanel > Email Accounts, klik akaun e-mel anda untuk tetapan IMAP.

2
Ke_masukkan di OpsIQ

Host: biasanya mail.yourdomain.com Nama pelayan anda, port: 993 (SSL) atau 143 Nama pengguna: alamat email lengkap.

AI draft email

Apabila auto-jawab ditetapkan ke mod "Draf", AI menghasilkan draf jawapan yang muncul dalam baris gilir Draf. Anda boleh:

Ulasan

Baca draf dan periksa ketepatannya.

Sunting

Ubah teks, nada atau kandungan sebelum menghantar.

Hantar

Luluskan draf dan hantarkannya sebagai balasan e-mel.

Buang

Padam draf jika ia tidak sesuai.

Hantar automatik

Jika keyakinan cukup tinggi dan hantar automatik didayakan, draf dihantar secara automatik selepas tempoh lengah yang boleh dikonfigurasikan.

Kenapa email tidak ditukarkan ke tiket?+

Periksa: (1) Apakah kotak surat terhubung dan sehat? Cari status hijau di Email > Kotak Surat. (2Apakah pekerjaan cron berjalan?3) Apakah email sedang disaring atau dipindahkan ke folder selain INBOX?

Boleh aku pakai kotak surat?+

Ya. Setiap peti mel boleh dipetakan kepada jabatan yang berbeza. [email protected] pergi ke Sokongan, [email protected] pergi ke Pengebilan.

Sokongan

Kepuasan pelanggan ifsufi (CSAT)

¡Ablat CSAT mengukur tiket dan kepuasan chat, permukaan respon tidak bahagia dan membandingkan AI dan hasil manusia.

Skrin produk
Kepuasan pelanggan ifsuifHalaman CSAT menggabungkan kad skor, susulan pengkritik, komen, pecahan mengikut jabatan dan ejen, serta maklum balas sembang.Kepuasan pelanggan ifsuifruang kerjaJAWAPAN386AVERAGE4.6POSITIVE91%ORANG KERJA HIDUPTindak lanjut Pencabutan Feksi12 Respons palsu dinilai1–2UlasanSurvei tiket cengkeDihantar 24 jam selepas ditutupAutomatikMaklum balas sembangAIO 4.5 · Manusia 4.7BandingkanPandangan Agen AgensiJumlah dan jumlah respon yang diberikan oleh badanPelatih1WATCH AVERAGEGunakan trend, tidak satu skor2FOLLOW DETRACTORSBaca komentarnya3COMPARE FAIRLYAI dan manusia
Halaman CSAT menggabungkan kad skor, susulan pengkritik, komen, pecahan mengikut jabatan dan ejen, serta maklum balas sembang.

Tinjauan tiket dijadualkan selepas penutupan (biasanya 24 jam kemudian). Respons positif ialah skor 4 atau 5. Gunakan baris gilir pengkritik untuk skor 1 atau 2 dan baca tiket/perbualan sebelum menghubungi pelanggan.

Maklum balas sembang dilaporkan secara berasingan untuk perbualan yang diselesaikan oleh AI dan yang dikendalikan oleh manusia. Saiz sampel yang kecil tidak patut digunakan untuk menyusun kedudukan ejen atau model.

Sokongan

Siaran emel pasukan

Halaman Platform E-mel membolehkan pengendali yang diberi kuasa menghantar mesej sekali sahaja kepada semua ejen aktif, ejen terpilih atau satu jabatan dan menyemak sejarah penghantaran.

Skrin produk
Platform E-melPenggubah e-mel pasukan menunjukkan khalayak, subjek, mesej dan sejarah penghantaran lalu.Platform E-melruang kerjaRECKIPIENTS12DELIVERED11GAGAL1ORANG KERJA HIDUPPenonton\"Fakta\"Ukrainian dipilihSubjekJadual giliran sokongan JulaiSiapPesan ToolCatatan jadwal dan eskalasiSiapSejarahHasil dan siaran sebelumnyaPaparan1CHOOSE PEOPLESemua, dipilih atau pasukan2WRITE CLEARLYSubjek dan pesan3REVIEW HISTORYHasil konfirmasi oleh Co.
Penggubah e-mel pasukan menunjukkan khalayak, subjek, mesej dan sejarah penghantaran lalu.

Halaman ini adalah untuk mesej operasi dalaman, bukan pemasaran pelanggan. Pilih khalayak betul yang paling kecil, pratonton nama dan alamat, kemudian hantar. Penghantaran menggunakan laluan e-mel keluar yang dikonfigurasikan dan merekodkan hasilnya.

Sokongan

Peti mel, penghantaran dan e-mel masuk

Konfigurasikan cara OpsIQ menghantar e-mel, menukar mesej masuk menjadi tiket dan membuktikan domain penghantar sudah sedia.

Skrin produk
Tetapan e- melTetapan emel menggabungkan laluan keluar, Dari identiti, pengambilan peti mel, semakan penghantaran dan ujian e-mel.Tetapan e- melruang kerjaKELUARSMTPMAILBOXES3DOMAINLulusORANG KERJA HIDUPPenyambung pilihanSMTP / penyedia sambunganDikonfigurasiAsal usul identitasSupport <support@example.com>SiapKotak-surat IMAP o-melsupport@example.com · INBOXPolingKebolehbebasanSPF · DKIM · DMARCLulus1CHOOSE OUTBOUNDPenyambung atau SMTP2CONNECT INBOXIMAP Poki atau pipa3ESTHantar dan sahkan
Tetapan emel menggabungkan laluan keluar, Dari identiti, pengambilan peti mel, semakan penghantaran dan ujian e-mel.

Email Outbound

Pentadbir penuh boleh memilih penyambung e-mel pilihan; OpsIQ beralih kepada penghantaran SMTP/mel yang dikonfigurasikan apabila sesuai. Tetapkan nama/alamat Daripada yang mudah dikenali, hantar ujian dan semak metrik kejayaan/kegagalan 24 jam.

Kotak - Kotak Mel

Peti mel IMAP memerlukan nama, alamat e-mel, jabatan sasaran, hos, port, mod keselamatan, nama pengguna, kata laluan, folder, keadaan tinjauan dan pilihan pengesahan sijil. Gunakan Sekarang kau akan menjadi Untuk memastikan pemeriksaan sebelum menunggu cron.

Penipisan instan buatan

Di server yang sama, pipa surat dapat menyampaikan pesan mentah RFC822 secara langsung. Sebuah server surat jauh dapat POST pesan mentah ke titik akhir inbound terlindung menggunakan tokennya. Kedua jalur memasukkan deduktasi yang sama , threading dan carket-routing pipeline.

Kebolehbebasan

Semakan SPF/DKIM/DMARC ialah bukti nasihat untuk domain Daripada yang dikonfigurasikan. Semakan hijau tidak menjamin penempatan dalam peti masuk, tetapi kegagalan perlu dibaiki sebelum menghantar mesej pengeluaran.

Sokongan

Sodium Support Portal Studio

Portal Studio Sokongan mereka bentuk dan menerbitkan pengalaman sokongan untuk pelanggan tanpa memerlukan aset imej luaran.

Skrin produk
Sodium Support Portal StudioPortal Studio menunjukkan pratonton responsif bersama kawalan tema, navigasi, pengetahuan, tiket, pembantu, borang, pengaki dan CSS.Sodium Support Portal Studioruang kerjaTEMPLATEModernYEHUWADesktopKETAMAANDrafORANG KERJA HIDUPTemaOtot dan tipografi warna merekSuntingNavigasi ke Pemanduan arahPengetahuan, tiket, pembantuSuntingFormulir tiketLapangan, routing dan salinanSuntingTerbitkanKesahihan dan hidupkanlahUlasan1CHOOSE TEMPLATEMula dari struktur2PREVIEW SIZESDesktop untuk mobile3PUBLISH SAFELYTinjau kemudian rilis
Portal Studio menunjukkan pratonton responsif bersama kawalan tema, navigasi, pengetahuan, tiket, pembantu, borang, pengaki dan CSS.

Gunakan templat sebagai titik permulaan, kemudian konfigurasikan tema, susun atur, navigasi, carian pengetahuan, borang tiket, pembantu, pengaki, jenama, tingkah laku tiket, CSS tersuai dan tetapan umum. Pratonton desktop, tablet dan mudah alih sebelum diterbitkan.

Sokongan

Kesenjangan pengetahuan ilmu pengetahuan

Baris gilir jurang pengetahuan mengumpulkan soalan pelanggan yang tidak dapat dijawab oleh AI dengan yakin supaya pasukan dapat meningkatkan liputan.

Skrin produk
Kesenjangan pengetahuan ilmu pengetahuanBaris gilir jurang menyusun kedudukan soalan yang terlepas atau berkeyakinan rendah dan menjejaki sama ada pasukan telah menyelesaikannya.Kesenjangan pengetahuan ilmu pengetahuanruang kerjaOPEN GAPS28REPEATED9RESOLVED116ORANG KERJA HIDUPBatas migrasi14 kali dike_tanyaTinggiSokongan hujung minggu8 kali dike_tanyaSederhanaPenghitungan balikan balik6 kali dike_tanyaSederhanaDaerah API3 kali dike_tanyaRendah1REVIEW QUESTIONLihat konteks perbualan2CHOOSE FIXArtikel atau prompt3RESOLVESahkan jawapan seterusnya
Baris gilir jurang menyusun kedudukan soalan yang terlepas atau berkeyakinan rendah dan menjejaki sama ada pasukan telah menyelesaikannya.

Buka sesuatu jurang untuk membaca soalan asal dan perbualan berdekatan, kemudian pilih pembetulan yang sesuai: kemas kini artikel sedia ada, cipta artikel pengetahuan baharu, tambah fakta perniagaan, betulkan data penyambung atau ubah arahan peningkatan. Tandakannya sebagai selesai hanya selepas penilaian atau ujian sebenar memberikan jawapan yang boleh diterima.

Sokongan

Pentadbiran halaman status

Halaman pentadbiran status memaklumkan kesihatan perkhidmatan dan insiden menggunakan komponen, keadaan semasa dan kemas kini.

Skrin produk
Administrasi Status AirAdministrasi status madya Daftar komponen dan insiden sehingga operator dapat mempublikasikan informasi layanan yang jelas dan terjepit waktu.Administrasi Status Airruang kerjaOVERALLBeroperasiKOMPON7INCIDENTS1ORANG KERJA HIDUPLaman sesawangBeroperasiHijauAPIKinerja degradedTontonlahEmail e-mel ingestionBeroperasiHijauInsiden semasaAPI Siasat kependaman.Buka1UPDATE COMPONENTPilih keadaan yang jelas2POST INCIDENTPemutakhiran waktu-ditamped3RESOLVEDitutup dengan ringkasan
Administrasi status madya Daftar komponen dan insiden sehingga operator dapat mempublikasikan informasi layanan yang jelas dan terjepit waktu.

Guna komponen undio menyatakan secara konsisten. Ketika sebuah insiden mempengaruhi pelanggan, menerbitkan pemberitahuan awal, menambahkan pemutakhiran yang ditambat waktu sebagai perubahan fakta, dan ditutup dengan ringkasan resolusi ringkas. Jangan gunakan halaman status sebagai log debug internal; diagnostik sensitif termasuk dalam OpsIQ Log log masuk dan server.

AIAI

Sediakan AI anda

Konfigurasi AI ialah tempat anda memilih pembekal AI, model dan kawalan kos. OpsIQ menyokong berbilang pembekal: Claude (Anthropic), GPT (OpenAI), Gemini (Google) dan Grok (xAI). Anda boleh menggunakan kunci API anda sendiri (BYOK) atau AI Terurus jika tersedia dalam pelan anda.

Tetapkan AI
Konfigurasi AIPanel tetapan AI: togol penyedia AI Terurus / BYOK, pemilih model dan meter belanjawan token bulanan.Konfigurasi AIruang kerjaKonfigurasi AIPenyediaAI TerurusKuncimu (Key)BYOK)Modelclaude · seimbangAnggaran belanja rumah tangga62%1TWO MODESDiagnous diagnosa AI atau BYOK_2PICK A MODELKedalaman Meter Kecepatan vs3BUDGETScocken Token caps & cost control
osis yang diurus AI atau kunci sendiri, pilih model untuk kecepatan vs kedalaman, dan bulanan cap dihabiskan dengan anggaran token.

Pencalonan sebuah penyedia

Claude (Anthropic)

Penaakulan yang kuat, berhati-hati dengan fakta, baik dalam mengikuti arahan yang kompleks. Terbaik untuk: perbualan sokongan, soalan teknikal, analisis terperinci.
claude-haiku-5-5 claude-sonnet-5-5 claude-opus-5-5

GPT (OpenAI)

Pantas, kreatif, pengetahuan am yang baik. Terbaik untuk: respons pantas, penulisan kreatif, soalan pengetahuan umum.
gpt-5.5 gpt-5.4 gpt-4o gpt-4o-mini

Figler Gemini _(Google)

Baik untuk soalan fakta, sokongan berbilang bahasa. Terbaik untuk: sokongan berbilang bahasa, carian fakta.
gemini-3.5-flash gemini-3-flash-preview gemini-3.1-flash-lite

grok (xAI)

Respons yang pantas dan ringkas. Terbaik untuk: jawapan pantas, nada santai.

Model yang disenaraikan ialah model yang ditawarkan hari ini. Ia berubah apabila pembekal melancarkan dan menamatkan model.

BYOK Dia telah mengurus AI

BYOK (Bawalah Kunci Sendiri)

Anda menyediakan kunci API dari penyedia. Anda membayar secara langsung penyedia. Kendali penuh atas pemilihan model dan penggunaan.

AI Terurus

AI disediakan sebagai sebahagian daripada pelan OpsIQ anda. Tiada kunci API diperlukan. Penggunaan diukur berdasarkan baki kredit AI pelan anda.

Persediaan langkah demi langkah

1
Pergi ke AI Konfigurasi

Dalam pentadbir OpsIQ, pergi ke Tetapan > Konfigurasi AI.

2
Penyedia Pilih peranti

Pilih provider AI-mu dari dropdown.

3
Key API key

Jika menggunakan BYOK, masukkan kunci API anda. Untuk AI terurus, ini dikendalikan secara automatik.

4
Model pilihan

Pilih model khusus yang hendak digunakan. Model yang lebih kecil lebih pantas dan lebih murah. Model yang lebih besar memberikan jawapan yang lebih berkualiti.

5
Sambungan utilitas

Klik "Uji sambungan" untuk mengesahkan kekunci API dan model berfungsi. Tanda semak hijau bermakna berjaya.

6
Simpan

Klik untuk mengaktifkan konfigurasi AI anda.

Kawalan kos

Anggaran belanja

Tetapkan perbelanjaan bulanan maksimum untuk token AI. Apabila bajet dicapai, ciri AI dikurangkan secara beransur-ansur (respons lebih pendek, tiada balasan automatik) dan bukannya berhenti sepenuhnya.

Batas token per-konversiasi

Token maksimum bagi setiap satu perbualan. Mengelakkan perbualan yang tidak terkawal daripada menggunakan kredit secara berlebihan.

Alap keseimbangan rendah

Ketika saldo kredit AI Anda turun di bawah ambang (baku: 50,000 tokens), peringatan muncul dalam admin. Atur ini dalam Konfigurasi AI.

Konfigurasi per-workspace

Konfigurasi AI adalah bagi setiap ruang kerja. Jika anda mengurus berbilang laman, setiap ruang kerja boleh menggunakan penyedia, model dan bajet yang berbeza. Ruang kerja mewarisi lalai global melainkan diatasi. Untuk mengkonfigurasi bagi setiap ruang kerja: tukar ke ruang kerja tersebut, kemudian pergi ke Konfigurasi AI dan simpan tetapan di sana.

Mendapatkan kekunci API

Anthropic(Claude)

Pergi ke console.anthropic.com > Kekunci _API > Cipta kekunci. Salin kekunci bermula dengan "sk-ant-".

OpenAI Fiji (GPT)

Pergi ke platform.openai.com > API Kekunci > Cipta kekunci rahsia baru. Salin kekunci bermula dengan "sk-".

Google (Gemini)

Pergi ke aistudio.google.com [Get] API Kunci, buat kunci untuk proyekmu.

xii (Gorok)

Pergi ke console.x.ai > API Kekunci. Cipta dan salin kekunci anda.

Kebodohan menguji persediaan Anda

Skenario:
Selepas memasukkan kekunci API anda, klik "Uji sambungan." Anda patut melihat tanda semak hijau dan tindak balas contoh dari AI.
Apa yang perlu dilakukan:

Jika ujian gagal: (1) Semak bahawa kunci API betul (tiada ruang tambahan). (2) Semak bahawa akaun anda telah menyediakan pengebilan dengan penyedia. (3) Semak bahawa nama model sah. (4) Jika menggunakan Managed AI, sahkan lesen anda aktif.

Mana yang terbaik penyedianya?+

Tiada satu pembekal yang terbaik untuk semua. Claude sangat baik untuk perbualan sokongan. GPT pantas dan serba boleh. Gemini mengendalikan pelbagai bahasa dengan baik. Cuba setiap satu dan lihat yang mana menghasilkan keputusan terbaik untuk kes penggunaan khusus anda.

Boleh aku tukar penyedia nanti?+

Ya. Tukar pembekal dan kunci API pada bila-bila masa. Sejarah perbualan sedia ada dikekalkan. AI akan menggunakan pembekal baharu untuk semua perbualan akan datang.

Apa yang terjadi ketika aku kehabisan kredit?+

AI merosot secara beransur-ansur: respons menjadi lebih pendek, balasan automatik dijeda, dan pentadbir memaparkan amaran baki rendah. Penjejakan teras, tiket dan CRM terus berfungsi tanpa AI.

AIAI

chat pelanggan murah & lebih cerdas

Satu set kawalan pilihan yang menjadikan sembang pelanggan anda sama ada lebih pintar (ia menaakul merentas akaun pelanggan seperti ejen manusia) atau lebih murah (ia menghantar kurang kepada AI, atau menjawab dalam langkah yang lebih sedikit). Setiap kawalan dimatikan secara lalai dan berdiri sendiri, menghidupkan satu kawalan tidak pernah mengubah tingkah laku lain. Kebanyakannya terletak di bawah Settings > Client Chat > Behaviour; beberapa terdapat pada Set up your AI dan Train your AI.

Jawapan Lebih Bijak (mod ejen)

Chatbot biasa menjawab satu soalan daripada satu carian. Dengan Mod Agen bila diaktifkan, pembantu boleh membuat beberapa pemeriksaan akaun baca-sahaja dalam satu pusingan dan rujukan silang mereka, cth. "adakah saya ada tiket terbuka, dan adakah baki saya cukup untuk pembaharuan seterusnya?" dijawab dalam satu jawapan dengan matematik dilakukan. Ia hanya melibatkan pelanggan yang telah disahkan pada soalan akaun atau bayar balik; segalanya lain berjalan laluan jawapan tunggal biasa.

Mod Agen

Sehingga beberapa carian baca sahaja bagi setiap giliran, dirujuk silang sebelum menjawab. Hidupkan apabila anda mempunyai platform yang disambungkan (WHMCS, Shopify, Stripe, Zendesk, dsb.). Mati = tingkah laku carian tunggal seperti hari ini, tidak berubah.

Kedalaman pemikiran untuk jawapan ejen

Sejauh mana model menaakul pada giliran yang kompleks (low/medium/high). Mulakan dengan Low; kebanyakan soalan sokongan dikendalikan dengan baik pada tahap itu.

Model Agen

Menetapkan model yang lebih berkebolehan khusus untuk giliran ejen yang kompleks, supaya sembang harian kekal pada model yang ringan dan murah dan hanya giliran yang sukar dikenakan kos untuk kedalaman. Kosong = model sembang pelanggan biasa anda.

Rancang lebih awal · jawapan sekali laluan (beta)

Langkah perancangan kecil memutuskan carian yang hendak ditarik dan sama ada pangkalan pengetahuan diperlukan, kemudian menjawab dalam SATU panggilan utama dan bukannya beberapa langkah. Togol kecil di bawah mod Ejen. Ia tidak boleh didayakan melainkan mod Ejen dihidupkan. Kualiti jawapan yang sama, lebih sedikit panggilan untuk soalan berbilang bahagian.

Perbualan & pemahaman

Memori lama lawan-perubahan (beta)

Menyimpan ringkasan berterusan yang pendek bagi mesej lama (nama, nombor tiket/invois, amaun, keputusan) supaya pembantu kekal konsisten merentas sembang yang sangat panjang tanpa menghantar semula keseluruhan transkrip. Paling sesuai untuk bebenang panjang yang banyak melibatkan sokongan; berpasangan dengan mod Ejen.

toleransi Topo bersikukuku

Baca kesalahan tatabahasa kecil ("tiket terbuka saya", "invocies tidak dibayar") sebagai perkataan yang dimaksudkan supaya maklumat betul dijumpai dan bukan terlepas. Berfungsi dengan setiap platform yang disambungkan. Mati secara lalai; berguna untuk sembang berat-mobile.

Konteks akaun ringkas

Hanya melampirkan petikan akaun pelanggan apabila soalan itu benar-benar berkenaan akaun mereka (baki, invois, tiket, perkhidmatan), dan melangkaunya untuk soalan umum. Mengurangkan kos tanpa kehilangan kualiti. Pembantu masih boleh mendapatkan akaun secara langsung apabila sesuatu giliran memerlukannya.

Penjimatan kos

Langkau pengetahuan mencari salam (beta)

"Hai", "terima kasih" dan "ok" tidak memulakan carian pangkalan pengetahuan, jawapan tersebut tak pernah menggunakannya. Sebarang mesej dengan kandungan sebenar masih mencari seperti biasa.

Balasan terlama diizinkan (token)

Mengehadkan panjang satu balasan. Panjang balasan ialah bahagian paling mahal dalam satu panggilan, jadi had yang munasabah (sekitar 500 untuk sokongan) ialah kawalan kos sembang yang paling berkesan. Ia hanya merendahkan had global anda, tidak pernah menaikkannya.

Pada menetapkan AI Anda

Kedalaman daya pikir kedirgdaya (kebiasaan & admin chat)

Sejauh mana model berfikir sebelum menjawab (minimum hingga tinggi). Kekalkan sembang pelanggan pada minimum/rendah untuk kelajuan; simpan tetapan yang lebih tinggi untuk analisis dan copilot pentadbir.

Model Per-AI (perkerjaan)

Setiap permukaan AI (sembang langsung, draf tiket, ringkasan, analisis, pembantu pentadbir, promosi, Risikan Laman Web dan banyak lagi) boleh dijalankan pada modelnya sendiri. Ringan di mana kelajuan penting, kukuh di mana kualiti penting. Kosong pada sesuatu permukaan = lalai penyedia untuk tugas itu.

Kawalan kos sembang admin

Pembantu pentadbir boleh menyimpan memori kerja yang terhad dan memuatkan hanya alat yang diperlukan oleh sesuatu soalan (alat ramping) dan bukannya setiap alat pada setiap giliran.

Ke atas Kereta AI Anda

Instruksi MAMAMampatkan

Arahan anda dihantar pada setiap giliran, jadi panjangnya merupakan kos berulang. Butang Mampatkan menulis semula satu slot supaya menyatakan perkara yang sama dengan lebih sedikit perkataan. Ia menolak penulisan semula jika ia akan menggugurkan mana-mana {variable} atau peraturan, dan melaporkan apa yang dilindunginya, jadi ia tidak pernah mengubah maksud secara senyap.

"Apa yang sudah ada dalam otak" (ℹ️)

Menunjukkan apa yang OpsIQ sudah tahu tentang perniagaan anda bagi setiap slot, supaya anda boleh memadam apa-apa yang anda ulangi dalam arahan anda sendiri.

💡
Ke manakah wang itu pergi? Untuk sembang sokongan yang pendek, input (arahan + data akaun + sejarah, dihantar pada setiap giliran) biasanya lebih mahal daripada balasan yang pendek, jadi caching dan konteks yang ringkas paling membantu di situ. Untuk kandungan yang dijana secara panjang, output yang mendominasi. Had panjang balasan dan tahap pemikiran yang lebih rendah memberi manfaat di situ. Lihat Set up your AI untuk mengekalkan caching gesaan, yang menjadikan bahagian besar yang berulang pada setiap giliran murah.
Adakah ini mengubah cara sembang menjawab pada masa ini?+

No Setiap kontrol dimatikan secara default dan independen. Mematikan satu pada hanya menambahkan perilakunya; mematikannya mengembalikan chatting untuk persis bagaimana itu bekerja sebelumnya.

Dalam urutan apakah saya patut menghidupkannya?+

Jalankan sembang harian pada model ringan dan tetapkan model Ejen yang lebih kuat. Kemudian, jika anda mempunyai platform yang disambungkan, dayakan mod Ejen, kemudian Rancang ke hadapan, kemudian Memori perbualan panjang. Seterusnya konteks ringkas, langkau pangkalan pengetahuan untuk ucapan salam, dan had balasan. Akhir sekali, mampatkan arahan anda. Perhatikan beberapa sembang sebenar selepas setiap perubahan.

kit Agen Admin: web pencarian, buku panduan, misi, transfer file

Sembang AI Pentadbir ialah jurutera yang bekerja, bukan sekadar kotak soalan. Ia boleh menyelidik pembetulan di web, menyimpan perpustakaan prosedur operasi anda, meronda pelayan anda mengikut jadual dan memindahkan fail. Kebanyakannya dijalankan dengan memintanya dalam sembang; satu-satunya perkara yang anda konfigurasikan terlebih dahulu ialah penyedia carian web yang digunakannya, pada halaman Sediakan AI anda.

Pencarian Web

Dalam Fungsi

Agen mencari web untuk dokumen, mesej ralat dan maklumat semasa sewaktu ia berfungsi. Keluar dari kotak ini menggunakan DuckDuckGo, yang tidak memerlukan kekunci dan tiada tetapan.

Buku Petunjuk

Di chat

Pustaka prosedur anda yang disimpan ("cara kami melakukan X di sini"). Ejen menulis satu prosedur selepas berjaya menyelesaikan tugas yang rumit dan mengikutinya pada kali seterusnya, jadi pengetahuan itu kekal selepas sembang tamat.

Misi

Jadwal

Rondaan baca sahaja berjadual. "Setiap pagi, semak ruang cakera dan log ralat, kemudian beritahu saya." Dapatan tiba di loceng admin anda.

Transfer Berkas iran

Di chat

Minta fail log dan dapatkan pautan muat turun peribadi, atau minta satu fail disalin dari satu pelayan yang disambungkan ke pelayan lain. Kedua-duanya dihadkan pada 5 MB.

Pencarian web Agen Admin (saat menyiapkan AI Anda)

Penyedia Pencarian Kebidanan

Apa yang ejen carian web gunakan. Lalai adalah DuckDuckGo: tanpa kunci, percuma, berfungsi pada setiap pemasangan. Brave Search, Tavily dan Serper.dev (Google hasil) biasanya mengembalikan keputusan yang lebih baik tetapi setiap memerlukan API kekunci dari penyedia itu. Jika penyedia kunci gagal untuk apa-apa sebab (kekunci buruk, kuota digunakan, masalah rangkaian), carian itu jatuh semula ke DuckDuckGo secara automatik, jadi carian tidak pernah menjadi gelap.

Cari API kunci

Kunci untuk penyedia pilihan anda, hanya diperlukan untuk Brave, Tavily atau Serper. Setelah disimpan, ia dilindungi dan tidak sekali-kali dipaparkan pada halaman lagi; tampal kunci baharu untuk menggantikannya. Penyedia berkunci hanya menjadi aktif apabila penyedia dan kuncinya kedua-duanya disimpan.

Buku Petunjuk

Apabila ejen baru bekerja melalui kerja yang anda mahu lakukan dengan cara sama lagi, kata "simpan sebagai runbook bernama nightly-cleanup". Dari situ ia melihat runbook mengikut nama dalam setiap sesi, dan apabila anda tanya untuk pekerjaan menurut nama (atau menerangkannya) ia tarik langkah-langkah dan ikut mereka. Anda boleh minta ia senaraikan, kemaskini atau padam runbooks bila-bila masa.

💡
Buku panduan operasi ialah panduan, bukan pas bebas. Apabila ejen mengikutinya, setiap langkah yang akan mengubah pelayan tetap melalui mod kebenaran semasa anda dan memaparkan kad kelulusan biasa. Buku panduan operasi tidak boleh sekali-kali memintas kelulusan.

Misi

Misi adalah kerja berulang yang ejen jalankan sendiri: setiap jam, sehari pada waktu ditetapkan, atau mingguan pada hari ditetapkan. Misi dibaca-sahaja oleh reka bentuk. Mereka boleh baca pelayan, data dan web, tetapi mereka tidak pernah mengubah apa-apa; mereka menyelidik dan melaporkan. Apabila misi selesai, penemuan akan muncul sebagai pemberitahuan di loceng admin anda. Katakan "jalankan rondaan pagi sekarang" untuk mulakan satu apabila diperlukan, atau minta ejen daftar, jeda atau buang misi.

⚠️
Misi berjalan di luar cron OpsIQ, jadi ia perlu ditetapkan (lihat Cron dan automasi). Satu-satunya "jalankan sekarang" dari sembang berfungsi walaupun antara pelaksanaan cron pada kebanyakan pelayan.

Memindahkan berkas-berkas

Minta fail ("perolehi log ralat hari ini dari pelayan web") dan ejen memulakannya dan membalas dengan pautan muat turun persendirian. Pautan hanya berfungsi untuk admin yang telah log masuk dan luput selepas kira-kira satu hari. Fail dihadkan pada 5 MB; bagi apa sahaja yang lebih besar, minta ejen memampat atau memotongnya pada pelayan terlebih dahulu.

Agena tersebut juga dapat menyalin berkas tunggal antara dua server yang terhubung, lagi-lagi sampai 5 MB_. Penulisan di destinasi diperlakukan seperti perubahan lain yang dibuat: dalam mode tanya Anda mendapatkan kartu persetujuan terlebih dahulu, file yang ada diundur, dan salinannya dapat dikembalikan. Untuk keselamatan, isi berkas dibaca ulang dari sumber pada saat salinan diterapkan, tidak diambil dari chat.

AIAI

Keangkuhanmu

Latihan AI ialah tempat anda mengajar OpsIQ cara berkelakuan. Anda menulis gesaan yang menentukan personaliti, sempadan, fokus pengetahuan dan peraturan peningkatan. Anggaplah ia seperti menulis manual latihan untuk ejen sokongan baharu.

AI Kereta AI
KeangkuhanmuBAHASA AI arahan editor dengan customer/Admin tab dan nada biasa-Inggris, selalu dan tidak pernah aturan.Keangkuhanmuruang kerjaAI Pelanggan OgosPentadbir AItonRamah, ringkas, tidak pernah memaksa.SentiasaCabulkan tuntutan manusia untuk sengketa.Tak pernahJanji akan dikembalikan tanpa memeriksa rekening.1TWO MANUALSPelanggan & admin AI2PLAIN ENGLISHTone, selalu, tidak pernah3GROUNDEDDitambah pengetahuan dasar Anda
¡Tatih AI seperti upah baru, Customer dan Admin manual ditulis dalam bahasa Inggris biasa (tone, selalu, tidak pernah), ditanahkan dalam KB Anda.

Dua kawasan latihan

AI promp pelanggan if

Ini adalah langkah paling penting untuk mendapatkan hak.

Prompt AI Admin

Mengawal cara AI membantu pasukan pentadbir anda dalam papan pemuka pengendali. Ini mengendalikan pertanyaan dalaman dan pelaksanaan tindakan.

Penulisan sebuah pernyataan pelanggan AI besar

Gesaan AI pelanggan anda perlu merangkumi bidang-bidang ini:

1
Identitas

Siapa AI? Berikan nama, peranan dan keperibadian. Contoh: "Anda Luna, seorang pembantu sokongan pelanggan yang mesra dan berpengetahuan untuk Acme Store."

2
style dan gaya

Bagaimana ia patut berkomunikasi? Contoh: "Bertindak profesional tetapi hangat. Guna bahasa mudah. Hindari jargon. Jaga jawapan ringkas (2-3 perenggan maks)."

3
Batas pengetahuan

Apa yang perlu dan tidak patut diketahui? Contoh: "Anda tahu tentang produk kami, harga, penghantaran, dan polisi pengembalian. Anda TIDAK tahu mengenai produk pesaing atau keputusan syarikat dalaman."

4
Aturan Escalasi

Bilakah ia patut diserahkan kepada manusia? Contoh: "Eskalasi ke ejen manusia bila: pelanggan meminta bayaran balik, menyebut tindakan undang-undang, melaporkan isu keselamatan, atau bertanya soalan yang sama tiga kali."

5
Hal-hal yang tidak pernah dilakukan

Had- had yang ketat. Contoh: "Jangan pernah janjikan bayaran balik. Jangan berkongsi formula harga dalaman. Jangan buat ciri produk yang tidak wujud. Jangan beri nasihat perubatan, undang-undang atau kewangan."

Contoh sempt

Contoh custome sempm AI · online store
You are Aria, a friendly customer support assistant for TechGear.

PERSONALITY:
- Warm and professional
- Concise (2-3 paragraphs max per response)
- Use simple language, no jargon
- If unsure, say so honestly

KNOWLEDGE:
- Our products: laptops, accessories, software subscriptions
- Pricing: as listed in the knowledge base
- Shipping: free over $50, 3-5 business days standard, 1-2 days express ($12)
- Returns: 30-day money-back guarantee, must be in original condition

ESCALATION (hand off to human):
- Refund requests over $100
- Account security concerns
- Legal threats or complaints
- Customer explicitly asks for a human

NEVER DO:
- Promise specific delivery dates (say "estimated")
- Share discount codes not in the knowledge base
- Make up product specifications
- Give financial or legal advice
Contoh custome customer AI prompt · hosting company
You are Atlas, an AI assistant for CloudHost web hosting.

TONE: Technical but accessible. Assume the customer has basic web knowledge.

KNOWLEDGE:
- Shared hosting, VPS, dedicated servers
- cPanel, DNS, SSL, email configuration
- WordPress, Joomla, Drupal installation
- Common error codes and troubleshooting

ESCALATION:
- Server outages affecting multiple customers
- Data loss or security breach reports
- Billing disputes over $50
- Complex migration requests

BOUNDARIES:
- Do NOT access customer servers or databases
- Do NOT change DNS records or passwords
- Always recommend the customer makes changes themselves
- For code issues, suggest steps but clarify you cannot debug their application

Menjelaskan waktu dengan cepat

1
Lancarkan dengan dasar

Mulailah dengan identitas, nada, dan batas kunci.

2
Tinjau Biografi Episoda

Baca perbualan di mana AI memberikan jawapan yang salah atau kurang optimum.

3
Update prompt

Tambah peraturan khusus untuk isu berulang. Contoh: jika AI terus menjanjikan bayaran balik, tambah "Jangan pernah janjikan bayarannya. Katakan anda akan escalate ke pasukan bil."

4
Pengetahuan tentang ilmu pengetahuan

Jika AI tidak dapat menjawab sesuatu soalan, tambah jawapannya ke Pangkalan Pengetahuan dan bukannya cuba memuatkan segala-galanya dalam gesaan.

⚠️
Pastikan arahan anda kurang daripada 2,000 patah perkataan. Arahan yang terlalu panjang boleh mengelirukan AI dan meningkatkan kos token. Letakkan maklumat terperinci dalam Pangkalan Pengetahuan sebaliknya.
Apa perbedaan antara prompt dan dasar pengetahuan?+

Gesaan menentukan personaliti, batasan dan peraturan. Pangkalan pengetahuan menyediakan maklumat fakta (butiran produk, harga, dasar). AI membaca kedua-duanya, tetapi gesaan membentuk tingkah laku manakala pangkalan pengetahuan menyediakan jawapan.

Bolehkah saya mempunyai gesaan berbeza untuk jabatan berbeza?+

Gesaan adalah bagi setiap ruang kerja. Jika anda memerlukan tingkah laku AI yang berbeza untuk jabatan yang berbeza, gunakan pangkalan pengetahuan untuk menyediakan maklumat khusus jabatan dan nyatakan konteks jabatan dalam gesaan anda.

AIAI

Sejarah AI

Sejarah AI menunjukkan setiap perbualan AI dengan pelanggan dan pentadbir. Gunakannya untuk mengaudit prestasi AI, mencari jawapan yang salah dan mengenal pasti jurang latihan.

Sejarah AI
Sejarah AILog giliran AI dengan lencana jenis, soalan dan jawapan, masa respons dan hasil.Sejarah AIruang kerjaSetiap giliran AI, direkamchotDimana pesananku?J: dihantar hari ini, penjejakan UPS…0.9sdijawabTiketDraf balasan untuk T-12345pengakuan bayaran balik telah didrafkan1.4sdraftedsistemdya\"Samakan tiket minggu ini\"Ringkasan 12 baris kembali2.1sdilakukanchotBatalkan rencanaku.Diserahkan pada manusia.0.7sescalated1EVERY TURNPenggesa, balas, tindakan2SEARCHABLETapis & eksport3OWNER-ONLYJejak audit lengkap
¡Audio Setiap giliran AI (chat, draf tiket, aksi admin) loging dengan prompt yang tepat, reply, durasi dan hasil.

Apa yang ditunjukkan oleh setiap perbualan

Tarikh dan masa

Waktu perbualan itu berlaku.

Identitas customer

Nama dan email jika diketahui, atau IP dan negara.

Saluran

Widget chatting, tiket auto-reply, draf email, atau admin AI.

_Mesej

Transkrip penuh perbualan: mesej pelanggan dan respons AI.

Penggunaan Token

Berapa banyak token yang digunakan oleh perbualan. Penggunaan token yang tinggi mungkin menunjukkan AI memberikan jawapan yang terlalu panjang lebar atau perbualan berpusing-pusing.

Tindakan yang diambil

Sebarang tindakan yang dilaksanakan oleh AI semasa perbualan (mencari pesanan, mencipta tiket, dan sebagainya).

Penawaran

Jika CSAT didayakan, penilaian kepuasan pelanggan untuk perbualan ini.

Kesulitan mencari masalah

Cari berdasarkan kata kunci

Cari topik tertentu untuk melihat bagaimana AI mengendalikannya. Contoh: cari "refund" untuk semak sama ada AI mengikuti polisi pengembalian anda.

Tapis menurut peringkat

Tunjukkan hanya perbualan yang dinilai rendah untuk menumpukan perhatian pada pelanggan yang tidak berpuas hati.

Penapis menurut saluran

Tunjukkan balasan automatik tiket sahaja untuk mengaudit respons automatik secara berasingan daripada sembang.

Urutkan berdasarkan penggunaan token

Perbualan yang menggunakan banyak token mungkin menunjukkan masalah: AI bercakap meleret, berpusing-pusing, atau gagal menjawab soalan.

Kegiatan rutin beraudit bersutradi

1
Semak perbualan yang mendapat penilaian rendah

Apa yang salah?

2
Semak perbualan dengan token yang tinggi

Ini mungkin menunjukkan kebingungan apakah AI mengulanginya sendiri?

3
Kemas kini latihan

Untuk jurang pengetahuan, tambah artikel ke Pangkalan Pengetahuan. Untuk isu tingkah laku, kemas kini gesaan AI. Untuk jawapan salah yang berulang, tambah peraturan pembetulan yang eksplisit.

Kesenjangan pengetahuan menemukan

Skenario:
Anda mencari "installation" dalam Sejarah AI dan menemui 15 perbualan di mana AI berkata "Saya tidak mempunyai arahan pemasangan khusus untuk produk ini."
Apa yang perlu dilakukan:

Ini bermakna Pangkalan Pengetahuan anda tidak mempunyai panduan pemasangan. Cipta artikel pangkalan pengetahuan untuk langkah pemasangan setiap produk. Selepas menambahnya, uji dengan bertanyakan soalan pemasangan kepada AI.

AIAI

AI wawasan

AI Insights menganalisis corak perbualan secara automatik dan mengetengahkan dapatan yang boleh diambil tindakan: soalan biasa, trend kepuasan, jurang pengetahuan dan corak peningkatan.

AI wawasan
Pemahaman AI (Hub Intelijen)The Intelligence Hub: sebuah AI Hari Ini Brief, Smart Alerts, sebuah Score-a-Lead / Analyse-a - Page alat, dan sebuah 14-Harian Pola Lalu Lintas.AI wawasanruang kerjaHari ini hari ini,Lalu lintas lalu lintas 12%; 3 Petunjuk panas .2Perjanjian pengadilan perlu ditindaklanjuti.Waspada Cerdas Ajar - HiburanTerjadi peningkatan galat pemeriksaan terhadap cengkerTerpaku pada /pricing_Pemandu panas baru dari ASPeruntungan pertama minggu laluDia mencetak sebuah Lead / Analisa sesebuah HalamanIP atau URL…Jalankan14 Pola Lalu Lintas Siang Hari1Hari ini hari ini,AI menulis ringkasan pagi2SMART ALERTSAnomali muncul3ON DEMANDFeasco a lead · analysis a page
The Real Intelligence Hub: sebuah tulisan AI Hari ini Brief, Smart Alerts untuk anomali, on-demand lead scoring dan analisis halaman, dan pola lalu lintas 14 hari.

Apa yang diperlihatkan oleh wawasan

Soalan teratas

Soalan yang paling kerap ditanya. Jika "Bagaimana saya menetapkan semula kata laluan saya?" adalah #1, pangkalan pengetahuan anda memerlukan panduan tetapkan semula Kata Laluan yang ketara.

Kepuasan yang berlebihan

Nilai CSAT dari waktu ke waktu Apakah kepuasan AI membaik atau menurun?

Tingkat Resolusi

Berapakah peratusan perbualan yang diselesaikan oleh AI tanpa campur tangan manusia? Kadar melebihi 70% adalah baik. Di bawah 50% bermakna AI memerlukan lebih banyak latihan.

Alasan Escalation

Sebab perbualan diserahkan kepada manusia. Sebab biasa: pelanggan meminta manusia, AI tidak dapat menjawab, topik sensitif, isu pengebilan.

Kesenjangan pengetahuan ilmu pengetahuan

Topik di mana AI kerap berkata "Saya tidak tahu" atau memberi jawapan dengan keyakinan rendah.

Panjang perbualan purata

Berapa banyak mesej bagi setiap perbualan. Perbualan yang sangat panjang (10+ mesej) mungkin menunjukkan AI tidak memahami soalan.

Menggunakan pemahaman untuk meningkatkan

Skenario:
AI Insights menunjukkan bahawa 23% daripada escalations adalah "Pelanggan bertanya tentang jaminan" dan AI tidak dapat menjawab.
Apa yang perlu dilakukan:

Ini adalah jarak pengetahuan yang jelas.1) Tulis artikel garansi yang komprehensif di Dasar Pengetahuan yang meliputi semua istilah garansial, proses klaim, dan eksklusi. (2(Inggris) Update AI promot untuk referensi informasi garansi. (3) Monitor AI Insights minggu depan untuk melihat apakah eskalasi garansi berkurang.

AIAI

Buku permainan AI Admin

Admin AI (Ask OpsIQ) membantu pasukan anda mengurus OpsIQ dari dalam papan pemuka pentadbir. Anda boleh memintanya mencari data, menerangkan ciri, meringkaskan tiket dan melaksanakan tindakan platform.

Pentadbir AI
Buku permainan AI AdminKotak arahan Ask-OpsIQ dengan kad tindakan platform yang diusulkan AI menunjukkan parameter dan mengesahkan/batalkan.Tanya OpsIQ_ruang kerjaTanya OpsIQ_Gantung perkhidmatan untuk akaun tertunggak #4821AIAITindakan yang diusulkan: suspend_serviceakaun: #4821 (tertunggak $120)platform: WHMCS · Reversibel · diauditKonfirmasiBatal1ASK ANYTHINGPerintah Plain-Inggris2PROPOSE FIRSTTindakan yang ditunjukkan sebelum berjalan3YOU CONFIRMSkop & diaudit
Beritahu admin AI apa yang Anda inginkan dalam bahasa Inggris biasa; itu mengusulkan tindakan yang tepat (diskop, reversibel, diaudit) dan menunggu konfirmasi Anda.

Apa yang boleh dilakukan oleh AI pentadbir

Cari data

Tanya: "Tunjukkan saya semua tiket dari [email protected]" atau "Apakah status arahan #ORD-5523?"

Ringkaskan

Tanya: "Ringkasan tiket 10 terakhir" atau "Apakah isu sokongan utama minggu ini?"

Terangkan ciri

Tanya: "Bagaimana saya tetapkan auto-balas?" atau "Apakah maksud kad kadar lencong?"

Tindakan Eksekusi ufuk

Tanya: "Cipta tiket untuk [email protected] mengenai bil" atau "Tutup tiket T-12345"

Pertanyaan platform

Tanya: "Berapa ramai pelawat yang kita dapat semalam?" atau "Berapakah hasil kita bulan ini?"

Contoh perbualan

Mencari pelanggan

Skenario:
Admin bertanya: "Cari pelanggan [email protected] dan tunjukkan saya aktiviti mereka baru-baru ini"
Apa yang perlu dilakukan:

AI mencari pelanggan merentas semua sumber data yang disambungkan: sesi pelawat, tiket, perbualan sembang, pesanan dan kenalan CRM. Ia memulangkan ringkasan aktiviti terkini dengan pautan ke setiap item.

Sedang mencari ringkasan harian

Skenario:
Admin bertanya: "Apa yang berlaku hari ini?"
Apa yang perlu dilakukan:

AI meringkaskan: "Hari ini anda mempunyai 245 pelawat (naik 12%), 8 tiket baharu (3 diselesaikan oleh AI), 2 pesanan baharu berjumlah $198, dan 1 peningkatan sembang tentang kelewatan penghantaran."

irankhania Menjalankan suatu tindakan

Skenario:
Admin bertanya: "Tukar tiket T-5523 keutamaan kepada Urgen"
Apa yang perlu dilakukan:

AI mengesahkan: "Saya akan ubah keutamaan tiket T-5523 dari Normal ke Urgent. Ini akan mempengaruhi pemasa SLA. Sahkan?" Anda sahkan, dan tindakan dilaksanakan.

💡
AI Admin hanya menjalankan tindakan yang terdaftar di Registry Aksi. Tidak dapat menemukan tindakan atau sistem akses di luar OpsIQ.
AIAI

Skenario AI Pelanggan

Bahagian ini merangkumi senario AI biasa yang berdepan dengan pelanggan, beserta tingkah laku yang dijangka dan petua latihan.

AI Pelanggan Ogos
Skenario AI PelangganPustaka soalan pelanggan yang dipasangkan dengan tingkah laku AI yang dijangka dan tag hasil bagi setiap satu.Skenario AI Pelangganruang kerjaPerpustakaan Skenario · perilaku AI yang diharapkan"Di mana pesanan saya?"Cari pesanan melalui penyambung, memberikan pelacakanBebas"Saya mahu bayaran balik"Mengakui, tidak pernah janji · tangan kepada manusiaPenyerahan"Adakah perkhidmatan turun?"Semak status, laporkan keadaan semasaStatus"Batal akaun saya"Ketahui niat, kemudian rute ke manusiaKonfirmasi1SCENARIOSSoalan lazim2EXPECTEDCara AI patut menjawab3ESTCari celah latihan
Pustaka soalan pelanggan sebenar dan cara tepat AI patut mengendalikan setiap satu, untuk menguji latihan anda dan mencari jurang.

Pustaka Skenario

Penyidikan status pesanan

Skenario:
Pelanggan: "Di mana pesanan saya #12345?"
Apa yang perlu dilakukan:

Tingkah laku AI yang dijangka: (1) Cari pesanan melalui konektor platform. (2) Laporkan status semasa (sedang diproses, telah dihantar, telah diterima). (3) Sertakan nombor penjejakan jika ada. (4) Jika pesanan lewat, akui kelewatan itu dan berikan anggaran garis masa. (5) Jangan sekali-kali mereka-reka maklumat penjejakan.

Permintaan tetapan semula kata laluan

Skenario:
Pelanggan: "Saya lupa kata laluan saya dan tidak dapat log masuk"
Apa yang perlu dilakukan:

Tingkah laku AI yang dijangka: (1) Berikan langkah tetapan semula kata laluan daripada pangkalan pengetahuan. (2) Sertakan pautan tetapan semula atau laluan halaman. (3) Nyatakan bahawa e-mel tetapan semula mungkin mengambil masa beberapa minit. (4) Cadangkan untuk menyemak folder spam. (5) Jika pelanggan masih tidak dapat menetapkan semula, majukan kepada manusia.

Permintaan ciri

Skenario:
Pelanggan: "Adakah anda boleh menambah mod gelap ke aplikasi mudah alih?"
Apa yang perlu dilakukan:

Tingkah laku AI yang dijangka: (1) Berterima kasih atas cadangan mereka. (2) Terangkan cara permintaan ciri dikendalikan (direkodkan, disemak, diberi keutamaan). (3) JANGAN berjanji bahawa ciri itu akan dibina. (4) Jika ciri yang serupa sudah wujud, nyatakannya.

Perbankan UU Kebebanan

Skenario:
Pelanggan: "Saya telah dikenakan caj tetapi perkhidmatan saya tidak berfungsi"
Apa yang perlu dilakukan:

Tingkah laku AI yang dijangka: (1) Akui kekecewaan itu. (2) Semak status perkhidmatan jika boleh. (3) Majukan kepada jabatan pengebilan dengan semua butiran. (4) JANGAN janjikan bayaran balik. (5) Tetapkan keutamaan tiket kepada Tinggi.

Soalan di luar topik

Skenario:
Pelanggan: "Bagaimana cuaca di London hari ini?"
Apa yang perlu dilakukan:

Tingkah laku AI yang dijangkakan: (1) Mengubah hala dengan sopan. "Saya pembantu sokongan [Company] dan boleh membantu soalan tentang produk dan perkhidmatan kami. Untuk maklumat cuaca, cuba perkhidmatan cuaca." (2) Tanya sama ada mereka mempunyai soalan tentang produk.

Bagaimana cara menguji perilaku AI pelanggan?+

Buka laman web anda dalam pelayar peribadi/inkognito dan bersembang dengan AI sebagai pelanggan. Cuba soalan biasa, kes luar biasa dan senario yang bersifat menentang. Semak bahawa AI mematuhi peraturan gesaan anda dan menggunakan kandungan pangkalan pengetahuan dengan betul.

AIAI

Pangkalan pengetahuan AI

Pangkalan Pengetahuan ialah pustaka artikel yang digunakan oleh AI untuk menjawab soalan. Apabila pelanggan bertanya sesuatu, AI mencari artikel berkaitan dalam pangkalan pengetahuan dan menggunakannya untuk menjana respons yang tepat dan berasas.

Pangkalan pengetahuan
Pangkalan pengetahuanSumber yang menyalurkan ke dalam stor pengetahuan, kemudian AI menjana jawapan yang berasas dan disertakan petikan sumber.Pangkalan pengetahuanruang kerjaSumberRangkak laman webArtikel bantuanSoalan LazimDok yang diimporPengetahuan tentang pengetahuansemantik + kata kunciAIAIJawapan berasas/ Dengan sumber yang dikutip."Bayaran balik mengambil masa 3–5hari perniagaan."1INGESTRangkak, Soalan Lazim, import2RETRIEVEKata kunci umastik +3GROUNDEDJawapan daripada kandungan anda
Rangkak laman web anda dan import dokumen ke dalam pangkalan pengetahuan; AI mendapatkan bahagian yang betul dan menjawab, berasaskan fakta dan dengan rujukan.

Bagaimana cara kerjanya

1
Pelanggan bertanya soalan

"Apa polisi pengembalian anda?"

2
AI mencari dasar pengetahuan

OpsIQ mencari artikel "Kempen Kembali" dengan sepadan kata kunci dan makna semantik.

3
AI menghasilkan tanggapan

AI membaca artikel dan menulis jawapan bahasa semula jadi berdasarkan kandungan artikel.

4
Pelanggan mendapat jawapan yang tepat

Respons berasaskan dasar sebenar anda, bukan data latihan umum AI.

Artikel yang bagus

Satu topik bahasan untuk setiap artikel

Tulis artikel berasingan untuk setiap topik: dasar pemulangan, kadar penghantaran, persediaan akaun, tetapan semula kata laluan. Jangan gabungkan topik yang tidak berkaitan.

Tulis seperti FAQ

Mulakan dengan soalan yang ditanya oleh pelanggan, kemudian berikan jawapannya. Ini membantu AI memadankan soalan dengan artikel.

Jadilah spesifik

"Kembalian mesti dimulakan dalam masa 30 hari dari penghantaran" lebih baik daripada "Kami mempunyai polisi pulangan."

Termasuk kasus pinggir

Bagaimana dengan produk digital?

Simpan sekarang

Menilai artikel setiap suku tahun. Hapuskan maklumat yang tidak terkini. Kemas kini harga, dasar dan prosedur apabila mereka berubah.

Artikel permulaan yang patut anda tulis

Penghantaran dan serahan

Kos penghantaran, tempoh tiba, penjejakan, penghantaran antarabangsa dan kelewatan pemprosesan.

Pemulangan dan bayaran balik

Jendela kembali, kondisi, proses, pengembalian kembali garis waktu, dan pengecualian.

Pengurusan akaun

Tetapan semula kata laluan, penukaran e-mel, pemadaman akaun dan eksport data.

Harga dan pengebilan

Penerangan pelan, kitaran pengebilan, kaedah pembayaran, invois dan mata wang.

Panduan produk

Cara menggunakan setiap produk atau ciri. Arahan langkah demi langkah dengan tangkapan skrin.

Pencarian Masalah

Masalah dan solusi umum. pesan kesalahan dan perbaikan mereka.

Informasi Kenalan

Jam kerja bisnis, saluran pendukung, waktu respon, dan jalur eskalasi.

Hukum dan Kepatuhan

Ringkasan dasar privasi, ringkasan terma perkhidmatan, permintaan data GDPR.

Pengetahuan penyambung

Setiap penyambung boleh menyumbang pengetahuan kepada AI. Apabila penyambung didayakan, artikel pengetahuan terbinanya (katalog produk, soalan lazim, penyelesaian masalah khusus platform) tersedia secara automatik kepada AI. Anda boleh menghidupkan atau mematikan pengetahuan penyambung bagi setiap penyambung dalam tetapan Penyambung.

anggaran belanja bagunan

Pangkalan pengetahuan mempunyai had token yang boleh dikonfigurasikan (lalai: 32,000 token) yang mengawal jumlah konteks pengetahuan yang dihantar kepada AI bagi setiap perbualan. Jika pangkalan pengetahuan anda sangat besar, AI memilih artikel yang paling relevan dalam bajet ini. Naikkan had jika AI tidak menemui artikel yang relevan; turunkan jika anda mahu mengurangkan kos token.

Berapa banyak artikel yang patut saya ada?+

Mulakan dengan 5-10 artikel yang meliputi soalan paling lazim anda. Tambah lagi apabila anda mengenal pasti jurang melalui Sejarah AI dan Wawasan AI. Kebanyakan perniagaan memerlukan 20-50 artikel untuk liputan yang menyeluruh.

Bolehkah saya mengimport artikel daripada sistem lain?+

Pada masa ini, artikel dicipta secara manual dalam OpsIQ. Anda boleh menyalin dan menampal kandungan daripada FAQ, pusat bantuan atau dokumen sedia ada.

Format artikel apa yang patut digunakan?+

AI memahami bahasa alami lebih baik daripada terstruktur HTML Tulis seperti yang akan kau jelaskan pada pelanggan.

AIAI

Penilaian AI dan Watchtower

Set penilaian mengubah soalan pelanggan kritikal ke dalam ujian yang boleh diulang untuk kualiti jawapan, kutipan, escalation dan keselamatan tindakan.

Skrin produk
Penilaian AIPenilaian AI menyenaraikan kes ujian emas, tingkah laku yang diperlukan, keputusan terkini dan larian Watchtower yang dijadualkan.Penilaian AIruang kerjaSETS6CASES84PASS RATE96%ORANG KERJA HIDUPDasar penghantaranDiperlukan pemetikanLulusPermintaan bayaran balikPerlu konfirmasi manusiaLulusKlaim tidak didukungTindakan terlarangLulusSoalan pemindahanSumber yang diharapkan untuk menghilangorg1CREATE CASESAturan dan masukan emas2RUN SAFELYUji kering atau eval langsung3WATCHJadwal harian atau mingguan
Penilaian AI menyenaraikan kes ujian emas, tingkah laku yang diperlukan, keputusan terkini dan larian Watchtower yang dijadualkan.

Pentadbir penuh boleh mencipta set penilaian dengan gesaan, label sumber yang dijangka, petikan yang diperlukan, peraturan pengesahan manusia, jangkaan peningkatan dan tindakan yang dilarang. Jalankan set secara terus, jalankan secara percubaan, atau main semula sejarah yang dipilih.

Menara Pengawal jadualkan periksaan harian atau mingguan melalui cron dan jalankan bilangan kes yang terhad (sehingga lapan per laluan terjadual). Tinjau kegagalan bersama penyedia/model, versi prompt, versi pengetahuan, tindakan diusulkan dan kos sebelum mengubah perilaku pengeluaran.

AIAI

Bahasa dan terjemahan Bahasa Fedo

Bahasa-bahasa neuran menerjemahkan teks ketampanan pelanggan dan perilaku yang digunakan ketika OpsIQ mengikuti bahasa pelanggan.

Skrin produk
BahasaHalaman Bahasa memaparkan bahasa sumber, terjemahan bahasa, keadaan draf/segera dan perilaku bahasa pelanggan.Bahasaruang kerjaSUMBERBahasa InggrisLANGUAGES4LANGSUNG3ORANG KERJA HIDUPBahasa PerancisInternet dan kontenArasJermanInternet dan kontenArasSpanyolTerjemahanDrafPengikut pelangganJawapan dalam bahasa yang dideteksiDihidupkan1SET SOURCEBahasa operator asal2ADD LANGUAGETerjemahkan terjemahan di latar belakang3PUBLISHDraf atau live
Halaman Bahasa memaparkan bahasa sumber, terjemahan bahasa, keadaan draf/segera dan perilaku bahasa pelanggan.

OpsIQ menterjemah teks untuk pelanggan yang dimasukkan oleh operator. Tetapkan bahasa sumber dengan betul sebelum mencipta terjemahan, tambah bahasa sasaran, kemudian semak draf sebelum menerbitkan. “Ikut bahasa pelanggan” mengawal bahasa respons; menterjemah antara muka widget mengawal butang, label dan teks sistemnya.

Skop terjemahan boleh ditetapkan kepada draf sahaja atau langsung. Jangan bergantung pada terjemahan mesin untuk teks undang-undang, bayaran balik, keselamatan atau keselamatan diri tanpa semakan manusia.

Setiap tempat yang menyimpan perkataan anda sendiri disenaraikan dengan kiraan mesejnya: mesej sembang pelanggan, promosi, mesej proaktif, aliran sembang, lawatan berpandu, pengumuman, gelembung penggoda dan Survei dan formulir. Permukaan tinjauan merangkumi setiap tinjauan yang diterbitkan sepenuhnya: tajuk, setiap soalan, setiap pilihan jawapan, butang, teks alu-aluan dan terima kasih, bingkai halaman dan halaman hasil. Kunci diikat pada ID soalan dan nilai pilihan, jadi menyusun semula soalan atau pilihan tidak akan menghilangkan terjemahan, dan menukar kata-kata satu mesej hanya menterjemah semula mesej itu. Tinjauan langsung yang diterbitkan ditawarkan secara lalai; draf turut disertakan apabila anda meluaskan skop.

Tinjauan e-mel selepas sembang mengikut bahasa yang sebenarnya digunakan oleh pelawat semasa bersembang, dengan syarat bahasa itu ialah bahasa yang anda tawarkan di sini; jika tidak, ia menggunakan bahasa sistem anda. Enam medannya yang boleh disunting turut diterjemahkan di halaman ini, dan tingkah laku ini mempunyai suisnya sendiri dalam tetapan Client Chat.

Pesan tiket dan portal merangkumi teks tetap yang ditaip oleh pengendali sekali dan kemudian diterima oleh setiap pelanggan dalam bahasa yang satu itu: pengakuan penerimaan tiket, pengesahan dibuka, ditutup dan maklum balas, penutup mengikut jabatan dan baris alu-aluan portal. (Balasan automatik AI tidak memerlukan semua ini, ia sudah pun menjawab dalam bahasa pelanggan.) Dengan Pelanggan email dalam bahasa mereka sendiri didayakan dalam OpsIQ Writing, e-mel tiket menentukan bahasa penerima mengikut susunan ini: bahasa yang mereka pilih dalam portal atau Pusat Bantuan (dibawa ke tiket), tetapan bahasa pada rekod kenalan mereka, kemudian bahasa yang mereka gunakan semasa menulis, dikesan secara setempat melalui julat skrip dan perkataan penanda, tanpa panggilan luaran. Hanya bahasa yang dipilih pada halaman Bahasa akan digunakan, jadi ciri ini tidak aktif sehingga bahasa ditambah. Pembalut e-mel HTML global sengaja tidak diterjemahkan: ia ialah penanda, bukan prosa. E-mel untuk kakitangan (pemberitahuan, makluman jabatan, ringkasan penganalisis, laporan berjadual, ringkasan mingguan) sentiasa menggunakan bahasa sistem.

PeopleOS HR

PeopleOS: sistem operasi tenaga kerja yang diatur

Anda akan menjalankan sepeda hidup karyawan dari permintaan untuk tidak bekerja dengan layanan mandiri mobile, aliran kerja yang didukung bukti, integrasi tipe dan kontrol manusia atas keputusan sensitif.

Peta sistem interaktif Infinografi
PeopleOS pusat perintah siklus hidupA tiga dimensi PeopleOS dashboard menghubungkan perekrutan, karyawan, gaji, belajar dan mengatur AI.PeopleOS pusat perintahKEHIDUPAN EVIDENORANG248PERANAN TERBUKTI12KAWALAN KAWAB15 / 15KULIH HIDUPRekrutAmbil kerjaMembesarUpahTransisiSATU DAKJURIdentitas + bukti pekerjaanKONTROL HUMANKebijaksanaan, pembetulan, pengambilalihanBUATKAN ITUOutcome Outcomes dan melepaskan bukti
PeopleOS menyimpan siklus hidup, kawal dan bukti pada satu rekod yang diuruskan.

Administrator

Bodan

Urus orang, organisasi, pengambilan, orientasi, dokumen, cuti, penyelarasan gaji, faedah, prestasi, pembelajaran, perhubungan pekerja, analitik dan tadbir urus.

Karyawan dan manajer

Layanan Diri

Gunakan portal yang mengutamakan mudah alih untuk rekod peribadi, permintaan, dokumen, orientasi, masa, penjelasan gaji, pembelajaran, maklumat syarikat dan hak.

Pembangun

Kepanjangan

Gunalah di pinggir hr.* Tindakan dan ulasan platform.hr.* operasi melalui satu kontrak, serta kelas penyambung bertaip. Indeks yang dijana dalam bahagian PeopleOS API menyenaraikan setiap satu bersama skopnya.

⚠️
PeopleOS bukanlah buku gaji, penasihat undang-undang, biro pemeriksaan latar belakang atau pembekal identiti. Sistem luaran bersertifikat menyimpan tanggungjawab tersebut. Semakan teknikal hijau tidak pernah mencipta kelulusan undang-Undang atau bukti pembekal.

Mendapatkan PeopleOS HR

PeopleOS HR dimasukkan dalam pelan Enterprise. Pada setiap pelan berbayar lain ia adalah tambahan: pemilik akaun membuka Akaun → Tambahan & Token, memilih satu aras PeopleOS HR dan sama ada memulakan percubaan percuma atau menambahnya secara langsung. Aras-aras berbeza dalam berapa ramai orang dan berapa banyak perekrutan, temubual dan aktiviti AI yang mereka lakukan. Harga dan had ditetapkan pada akaun, tidak ditulis ke dalam produk, jadi lihat aras semasa di Halaman pricing fredinApa modul lakukan, permukaan demi permukaan, adalah di PeopleOS HR product page.

Siapa yang boleh menambahnya

Pelan berbayar yang aktif. Pelan percuma tidak boleh menambahnya, dan pelan berbayar yang masih dalam tempoh percubaan pelannya sendiri perlu menunggu sehingga percubaan itu tamat.

Pengadilan bebas

Percubaan berjalan pada peringkat yang anda pilih. Apabila ia tamat tanpa pembelian, hak kelayakan dialih keluar dan tiada apa-apa yang dicaj. Tiada apa-apa yang dipadam: rekod kembali tersedia sebaik sahaja tambahan itu ditambah.

Bila tidak dimiliki

PeopleOS HR tidak muncul dalam bar sisi, palet perintah, Tetapan atau bantuan dalam-aplikasi. Pautan langsung ke halaman HR menawarkan add-on berbanding dengan halaman.

Mencapai topi yang lebih kencang

Apabila had peringkat dicapai, halaman itu menawarkan peringkat seterusnya. Mengedit atau mengalih keluar apa yang sudah wujud tidak pernah disekat.

Pasang yang disandarkan oleh diri sendiri

Kelayakan dibawa dalam lesen. Tambah alat tambah pada akaun OpsIQ anda dan pemasangan akan mengambilnya pada semakan lesen seterusnya.

PERINGATAN first-week

Semua di bawah ini ialah skrin sebenar; tiada apa-apa di sini yang memerlukan pembangun.

1
Bebebebekan module pada

Buka PeopleOS → HR Home. Papan bendera bermula dengan suis induk, PeopleOS HR: apabila ia dimatikan, tiada halaman HR atau permukaan pekerja boleh dicapai. Menghidupkan suis memerlukan pengesahan dua klik; mematikannya hanya satu klik. Suis AI di bawahnya (bantuan mendraf, saringan permohonan, pembantu autonomi, temu duga AI, penghantaran tawaran automatik, pengesahan identiti) kekal dimatikan sehingga anda membuat keputusan.

2
*Biarkan Copilot Setup melakukan konfigurasi *

Buka PeopleOS → Tetapkan Copilot dan nyatakan apa yang anda mahu dalam bahasa biasa: dasar cuti dengan hari dan notisnya, cuti umum untuk sesebuah negara, kategori kes dengan SLA-nya, had perbelanjaan, templat orientasi, denyut bulanan. Anda mendapat semula pelan dengan apa yang difahami dan apa yang diandaikan. Tiada apa-apa dijalankan sehingga anda mengesahkan; langkah berisiko sederhana memerlukan orang kedua; setiap larian meninggalkan resit.

3
Nama pabrik karyawan

Buka PeopleOS → Frontline → Reka bentuk log masukPada diri-hosted memasang sendiri portal hidup di /hr/<address>; Alamat Portal menamakannya semula serta-merta dan pautan log masuk lama terus berfungsi kerana alamat lama memajukan pelawat. Di awan, portal itu ialah /hr Kau tak perlu alamatnya.

4
Terbitkan laman web kerjaya anda

Buka PeopleOS → _MeneruskanSetiap posting yang Anda terbitkan dari permintaan yang disetujui muncul di halaman karir publik; link Openníno the public carers page Di puncak Rekrutmen menunjukkan persis apa yang calon lihat.

5
Daftarkan kiosk untuk peranti dikongsi

Buka PeopleOS → Baris Depan → Kiosk Diambil dan dipilih Daftarkan kios. Token peranti ditunjukkan sekali sahaja; buka halaman kiosk pada tablet atau PC (ia ialah /kiosk pada hos portal) dan tampalkannya. Kakitangan merekod masuk dengan e-mel kerja dan PIN mereka, atau dengan kod lencana jangka pendek daripada portal mereka. Membatalkan kiosk menghentikan peranti itu serta-merta.

6
Memutuskan apa yang dapat dilakukan karyawan untuk diri mereka sendiri

Buka Tetapan → HR. Setiap kuasa layan diri (rekod, permintaan, dokumen, cuti, penjelasan gaji dan sebagainya) ditetapkan kepada setiap pekerja, pengurus sahaja, atau satu pasukan dan pasukan di bawahnya. Setiap perubahan merekodkan siapa yang membuatnya dan sebabnya, dan kuasa yang anda matikan dijelaskan kepada pekerja dan bukannya hilang begitu sahaja.

7
Tambahkan orang dan beri mereka akses

Dihidupkan PeopleOS → Orang cipta orang itu, pekerjaannya dan pengurusnya. Sediakan akses portal hanya setelah orang itu mempunyai e-mel yang sah dan hubungan pekerjaan yang dirancang; jemputan dihantar dari skrin yang sama dan proses orientasi bermula daripada perjalanan yang anda sediakan.

Sepeda hidup

Rancang dan rekrut

¡Aturan yang disetujui, menerbitkan pekerjaan, menerima aplikasi melalui webhooks yang dapat dikembalikan ke dalam buku, ulasan struktur, wawancara jadwal, keputusan rekaman, penawaran isu dan sewa.

Kepemilikan dan penyediaan

Membangun bukti-kembali pada perjalanan naik kapal, mengumpulkan versi dokumen yang benar, peralatan permintaan, memberikan akses yang disetujui templat dan penyediaan akses portal kursi.

Bekerja dan tumbuh

Kendalikan cuti, jadual, penjelasan gaji, faedah, perbelanjaan, matlamat, maklum balas, penilaian, pembelajaran, kemahiran, peluang dalaman, penggantian dan analitik tenaga kerja.

Sokong dan lindungi

Menyediakan sokongan HR peribadi, kes hubungan pekerja yang ditadbir, penahanan undang-undang, permintaan data, pembetulan, penjelasan, rayuan dan semakan manusia yang bebas.

Perubahan dan pergi

. Gunakan perubahan kerja yang efektif-dated, mencabut akses, memulihkan peralatan, mendamaikan penyedia eksternal, menerapkan retensi dan menjaga bukti yang diperlukan.

Akses dan identitas

Individu kanonik memiliki rekod pekerjaan dan faset identiti luaran yang disahkan. E-mel ialah data hubungan yang boleh berubah, tidak sekali-kali kunci identiti kekal. Bacaan portal adalah berskop kendiri; paparan pengurus dan pentadbir memerlukan kebenaran yang eksplisit. Skop API berlapis di atas kebenaran laluan dan tidak sekali-kali memintasnya.

Add pekerja baru

Skenario:
Buat orang itu, menugaskan pekerjaan dan manajer, akses portal penyediaan, lalu buka perjalanan di kapal.
Apa yang perlu dilakukan:

Gunakan larian kering dan idempotensi untuk penulisan API. Sahkan bahawa individu itu mempunyai e-mel yang sah dan hubungan pekerjaan yang dimaksudkan sebelum memberikan akses.

Bersihkan identitas duplikat

Skenario:
Dua sistem luaran mengenal pasti pekerja yang sama secara berbeza.
Apa yang perlu dilakukan:

Pautkan kedua-dua faset yang disahkan kepada individu kanonik dan selesaikan konflik itu secara eksplisit. Jangan gabungkan rekod semata-mata kerana dua nilai e-mel yang boleh berubah adalah sepadan.

PeopleOS HR

Aliran kerja HR dan Portal Karyawan

Cara setiap bahagian utama PeopleOS dikendalikan dan apa yang dilihat oleh pekerja selepas log masuk.

Orang dan organisasi

Selenggara rekod kanonik individu, pekerjaan, jenis pekerja, pengurus, pasukan, lokasi, kemahiran, dokumen dan struktur organisasi bertarikh kuat kuasa.

Rekrut dan tawaran

Pindah dari permintaan yang disetujui ke posting, aplikasi, bukti terstruktur, wawancara, keputusan, penawaran dan sewa dengan rute akomodasi dan banding.

Dokumen dan dokumen Onboarding

Tugaskan langkah tertib khusus untuk setiap pemilik; kumpul, semak, tandatangan, tamatkan tempoh, tahan dan padam dokumen dengan bukti versi dan akses.

Waktu, cuti dan penjadwalan

Tentukan jenis cuti berasaskan dasar, baki, permohonan, kelulusan, cuti umum, ketersediaan, acara kalendar dan penyesuaian.

Gaji, faedah dan perbelanjaan

Terangkan gaji, serahkan peristiwa pekerja yang diluluskan kepada penggajian, selaraskan pengecualian, urus kelayakan faedah dan tadbir tuntutan bayaran balik.

Prestasi dan pertumbuhan yang dicapai oleh para pakar

Kendalikan matlamat, semakan berkala, maklum balas, ulasan, kalibrasi, pembelajaran, kemahiran, bimbingan, peluang dalaman dan penggantian.

Dinas dan hubungan HR

Berikan sokongan peribadi kepada pekerja sambil menyimpan bukti kes rungutan, tatatertib, pemberi maklumat dan kes termeterai dalam sempadan kebenaran khusus.

Analisis dan perencanaan

Gunakan ukuran tenaga kerja, pelan bilangan pekerja, penanda aras dan metrik pengalaman yang diperoleh daripada rekod; jangan sekali-kali menganggap hasil yang tiada sebagai kejayaan.

Karyawan Portal peta

Gambaran keseluruhan

Keperluan perhatian Anda, perubahan sejak kunjungan terakhir, permintaan terbuka, acara yang akan datang, pada saat kemajuan dan pengumuman.

Profil dan catatan

Pekerjaan bergaji, catatan yang diverifikasi, dokumen, izin, permintaan privasi dan permintaan pembetulan.

Sokongan dan tugasan HR

Perbualan peribadi, permintaan, tindakan yang memerlukan pekerja dan tugas milik syarikat dipaparkan secara berasingan.

Hari pertamamu

Bukti bukti kembali ke garis waktu dengan pemilik, negara bagian, selesai dan pekerjaan terblokir.

Waktu dan pergi

Imbangan, permintaan cuti, ketersediaan, jadwal dan konsekuensi kalender.

Keterampilan dan pertumbuhan

Pembelajaran, bukti kemahiran, matlamat, maklum balas, bimbingan dan peluang dalaman.

Bayaranku, menjelaskan

Pembayaran dana kompensasi bahasa dan informasi rekonsiliasi gaji karyawan diizinkan untuk melihat.

Syarikat

Direktori dan organisasi yang dikomandani oleh rekan-rekan informasi telah memilih atau membuat mereka dapat berbagi.

Hak dan keputusan hak - hak milik

Penjelasan, banding, persetujuan, pembetulan, akses dan permintaan penghapusan.

💡
Portal ini mengutamakan mudah alih. Kad akaun kekal boleh dicapai, navigasi dan kandungan menatal secara berasingan pada skrin lebar, dan navigasi mudah alih bertindih di atas halaman dan bukannya menolak atau menutupnya. Teks penerangan yang panjang sepatutnya diletakkan dalam komponen petua alat atau pendedahan yang boleh diakses.

Urutan operasi yang selamat

1
Konfigurasikan dasar dan kebenaran

Tetapkan bidang kuasa, peranan, laluan kelulusan, pengekalan, persetujuan dan kawalan ciri sebelum memuatkan rekod sebenar.

2
Penyedia eksternal Sambungan Uni Eropa

Pasang pakej bertandatangan yang sesuai, masukkan kelayakan dengan keistimewaan paling minimum dan lulus ujian sambungan dan pematuhan.

3
Jalankan dalam kotak pasir atau bayang

Keolahragaan full workflows dengan data deterministik dan membandingkan bukti yang diharapkan sebelum mengaktifkan eksekusi real-provider.

4
Lepaskan di bawah kendali ganda

Penyemak sah yang lain memeriksa bukti penyedia, keselamatan, privasi, undang-undang, keadilan dan kebolehcapaian.

PeopleOS HR

AI, keadilan, video dan kontrol hukum

PeopleOS menganggap automasi sebagai laluan alat yang diuruskan: kebenaran polisi, cubaan pelaksanaan, hasil penyedia dan bukti adalah fakta terpisah.

Agen AI dan pengendali agen

Setiap agen menggunakan alat bertipe terdaftar dengan tujuan, yurisdiksi, kelas risiko dan otonomi maksimum. pengambilalihan manusia, pemutus sirkuit, insiden dan perubahan yurisdiksi menghentikan eksekusi. Pembetulan mungkin membentuk sebuah dataset yang diusulkan tetapi tidak melatih apa-apa sampai orang yang berwenang menyelesaikan ulasan privasi.

Keadiladiladilan

Tentukan kohort, peraturan sampel minimum, metrik, identiti penilai dan penilaian yang dikeluarkan secara sah. Data yang tiada kekal tiada; ia tidak pernah ditukar menjadi lulus.

Penjelasan dan banding

Bina penjelasan daripada bukti keputusan dan dasar yang dimeterai. Hantar rayuan kepada manusia yang bebas dan simpan bukti hasil.

Yurisdiksi

Keluarkan pek dasar negara hanya dengan pemilik undang-undang bertanggungjawab yang dinamakan, sumber undang-undang yang dipetik dan ujian yang lulus. Perubahan undang-undang berketerukan tinggi menggantung laluan yang terjejas.

UU UE AI

Ketahanan sistem inventori, kelas risiko, fundamental-kanan dampak penilaian, pemberitahuan, pengawas, meteran dan bukti.

Batas penyaringan video

Provision tidak berpartisipasi

hr.interview.room.provision Hanya saja, hanya ada tempat pertemuan. hr.interview.room.connect boleh membuktikan media sampai kepada pekerja.

Persetujuan khusus Tujuan

Perekaman, transkripsi dan kehidupan biometrik adalah pilihan yang terpisah. Dengan drawal berlaku untuk tujuan terpilih.

Analisis penampilan tidak ada pada orang

Kontrak video toriza tidak memiliki bidang atau metode untuk emosi, perhatian, daya tarik, ras, cacat atau ketidakpedulian penampilan.

rute manusia dan teks

reviewer A dapat mengambil alih secara permanen untuk sesi, dan rute akomodasi teks tetap tersedia.

Pembalasan dan penghapusan cambuk

Penyambung melaporkan pengangkutan yang disulitkan, dasar pengekalan yang aktif dan rujukan media penyedia, dan mesti menyokong pemadaman yang boleh disahkan.

Ruang angkasa diciptakan, tak hadir

Skenario:
Ada sebuah kamar zoom URL _, tetapi jembatan media belum mengantarkan audio/video kepada pekerja wawancara.
Apa yang perlu dilakukan:

Dan jangan sampai wawancara manusia dan teks yang tersedia.

Panggilan balik mengatakan cek lulus

Skenario:
Selesai pemeriksaan webhook laporan latar belakang yang ditandatangani.
Apa yang perlu dilakukan:

Rekodkan panggilan balik sebagai petunjuk, kemudian semak dengan penyedia. Hanya respons status yang disahkan boleh mengemas kini semakan.

🚫
Penilaian kebolehcapaian teknikal boleh direkodkan oleh penilainya, tetapi pengesahan WCAG memerlukan individu yang berasingan. Bukti penyedia, pelepasan undang-undang dan bukti keadilan juga memerlukan pemilik sebenar yang dinamakan.
PeopleOS HR

PeopleOS API dan pengembangan sambungan

Gunakan General API untuk operasi HR yang ditadbir dan kontrak penyambung bertaip untuk sistem luaran yang berautoriti.

UmumAPISumber kebenaran

Hantar JSON ke POST /api/v1.phpTemukan permukaan yang mengalir melalui meta.actions, BukaAPI di /api/v1/openapi.php, dan Postman di /api/v1/postman.phpIndeks yang dihasilkan di bawah ini membawa hitungan pasti dari terakor hr.* Tindakan dan ulasan platform.hr.* Operasi-operasi magoin dalam pembangunan ini, jadi tidak ada di halaman ini yang diketik dengan tangan.

Orang Daftar
curl -sS https://your-opsiq.example/api/v1.php \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"action":"hr.people.list","page":1,"per_page":50}'
Tulislah tulisan yang ditulis dengan mesin kering
curl -sS https://your-opsiq.example/api/v1.php \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"action":"hr.people.create","display_name":"Ada Reaudit","primary_email":"[email protected]","worker_type":"employee","idempotency_key":"hire-2026-0042","dry_run":true}'

Guna hr.read atau hr.write hanya apabila perlu. Laluan pentadbir sasaran masih menyemak kebenarannya sendiri. Penulisan memerlukan kunci idempotensi yang stabil; penulisan berisiko tinggi memerlukan pengesahan. Cuba semula kegagalan sementara dengan kunci yang sama dan semak keadaan pemulihan selepas tamat masa yang tidak pasti.

Setiap tindakan yang diradang hr.*

✅
48 curated hr.* actions (22 reads, 26 writes) and 507 reviewed platform.hr.* operations, out of 2430 named actions in this build. Generated from the action registry, the same source as meta.actions, OpenAPI and Postman.

Orang - orang, organisasi dan identitas (9)

hr.employee.provision

Write. Scope: hr.write. Provision seatless employee access and send the invitation. Required: person_uuid.

hr.employee.restore

Write. Scope: hr.write. Lift an employee access suspension (written reason required) and provision again. Required: person_uuid, reason.

hr.identity.facets

Read. Scope: hr.read. List a person's identity facets and open conflicts. Required: person_uuid.

hr.identity.link

Write. Scope: hr.write. Link an identity facet to a person. Required: person_uuid, facet_type, facet_key.

hr.org.tree

Read. Scope: hr.read. Read the organisation tree.

hr.people.create

Write. Scope: hr.write. Create an HR person. Required: display_name.

hr.people.get

Read. Scope: hr.read. Get one HR person. Required: person_uuid.

hr.people.list

Read. Scope: hr.read. List HR people.

hr.people.update

Write. Scope: hr.write. Update an HR person. Required: person_uuid, display_name, primary_email.

Permintaan dan pengomposan (3)

hr.postings.list

Read. Scope: hr.read. List job postings.

hr.requisitions.create

Write. Scope: hr.write. Create a requisition. Required: title, openings, justification.

hr.requisitions.list

Read. Scope: hr.read. List requisitions.

Cuti, pembelajaran dan pasaran penyambung (3)

hr.learning.overview

Read. Scope: hr.read. Read courses, paths and enrolments.

hr.leave.overview

Read. Scope: hr.read. Read leave types and requests.

hr.marketplace.overview

Read. Scope: hr.read. Read HR connector accounts, conflicts and deliveries.

Pensijilan dan kesihatan penyambung (2)

hr.connectors.certify

Write. Scope: hr.write. Certify an HR connector (scope sandbox|production; production demands provider-side proof under dual control). Required: connector_class, connector_key, scope, evidence, submitted_by.

hr.connectors.health

Read. Scope: hr.read. One connector account's health: certification level and scope, last reconciliation verdict, failures and webhook backlog. Required: account_uuid.

Ruang wawancara (7)

hr.booking.slots_reconcile

Write. Scope: hr.write. Release booking slots whose claim never became a booked meeting.

hr.interview.room.connect

Write. Scope: hr.write. Connect the AI to interview media; refuses unless media really reaches the worker. Required: media_uuid.

hr.interview.room.consent

Write. Scope: hr.write. Record or withdraw consent for ONE interview purpose (recording, biometric_liveness, transcription). Required: media_uuid, purpose, state.

hr.interview.room.pause

Write. Scope: hr.write. Pause a live interview. Required: media_uuid.

hr.interview.room.provision

Write. Scope: hr.write. Provision an interview room (a place to meet — NOT AI participation). Required: session_uuid, transport, accommodation_route.

hr.interview.room.state

Read. Scope: hr.read. Read an interview room, including whether the AI is actually participating. Required: media_uuid.

hr.interview.room.takeover

Write. Scope: hr.write. A human takes the interview; the AI cannot speak in it again. Required: media_uuid, reason.

Agen dan jalur daur kehidupan (7)

hr.agent.incident.close

Write. Scope: hr.write. Close an agent incident — the same act that lifts the suspension it caused. Required: incident_uuid, resolution.

hr.agent.step

Write. Scope: hr.write. Run one agent step: gate verdict, execution and outcome reported separately. Required: run_uuid, agent_key, tool_key, jurisdiction, purpose.

hr.agent.step.status

Read. Scope: hr.read. What actually happened at a step (permitted, executed, proven, failed, compensated). Required: run_uuid, seq.

hr.agent.takeover

Write. Scope: hr.write. A human takes an agent run; no further agent steps are accepted. Required: run_uuid.

hr.agent.tool.grant

Write. Scope: hr.write. Grant an agent a tool for one jurisdiction and purpose, up to a risk ceiling. Required: agent_key, tool_key, jurisdiction, max_risk, purpose.

hr.agent.tools

Read. Scope: hr.read. List the registered typed tools an agent may use, and open agent incidents.

hr.lifecycle.lanes

Read. Scope: hr.read. Every lifecycle lane with its mode, KPIs and whether a live tool path really exists behind it.

Yurisdiksi Frekuensi (5)

hr.jurisdiction.capabilities

Read. Scope: hr.read. What this product may do in one country, per feature, with the law behind each answer. Required: code.

hr.jurisdiction.change.raise

Write. Scope: hr.write. Report a change in the law; a high or critical one suspends every lane in that jurisdiction at once. Required: pack_key, summary, severity.

hr.jurisdiction.coverage

Read. Scope: hr.read. Computed coverage for every market: released pack, named counsel owner, cited sources, passing tests.

hr.jurisdiction.explain

Read. Scope: hr.read. Why an action about one person is allowed, reduced or blocked, with the rule and citation. Required: person_uuid, feature.

hr.jurisdiction.pack.release

Write. Scope: hr.write. Put a drafted policy pack into effect; refused without a named counsel owner and a cited law. Required: release_uuid.

Keputusan dan banding (2)

hr.decisions.appeals

Write. Scope: hr.write. File an appeal against an AI decision on a person's behalf; it must be heard by an independent human. Required: decision_uuid, subject_type, subject_id, grounds.

hr.decisions.explanation

Read. Scope: hr.read. Plain-language explanation of one AI decision: what was looked at, which policy, and how to appeal. Required: decision_uuid, audience.

Kualiti AI (2)

hr.ai.corrections

Write. Scope: hr.write. Bundle recent reviewer corrections into a dataset; it is pending privacy review and trains nothing.

hr.ai.quality.overview

Read. Scope: hr.read. The AI quality board: sampled defect rate, override pressure per workflow, coaching reception.

Perbincangan dan retensi ketenagakerjaan (4)

hr.thread.delete

Write. Scope: hr.write. Delete a workforce conversation; refused while it is under legal hold. Required: thread_uuid, reason.

hr.thread.legal_hold

Write. Scope: hr.write. Place or lift a legal hold on a workforce conversation. Required: thread_uuid, on, reason.

hr.thread.retention

Write. Scope: hr.write. Set a conversation's retention class (standard|extended|permanent). Required: thread_uuid, retention_class.

hr.threads.retention_sweep

Write. Scope: hr.write. Run the conversation retention sweep; legal holds are never swept.

Keterlaluan dan pelepasan (4)

hr.experience.metrics

Read. Scope: hr.read. Measured persona experience metrics (self-service rate, decision cycle, coaching usefulness, quality) from live journeys.

hr.global.readiness

Read. Scope: hr.read. The whole launch picture: 15-gate leadership score, release readiness checks and jurisdiction coverage.

hr.readiness.read

Read. Scope: hr.read. Run the HR release readiness report.

hr.release.verify

Write. Scope: hr.write. Run the four HR release gates (schema, manifest, probe, readiness).

Kelas penyambung

Rekrut

hr_job_board, hr_background_check, hr_identity_verification, hr_assessment dan hr_tax_right_to_work.

Dipekerjakan dan diboarding

hr_esignature, hr_calendar, hr_video dan hr_equipment_it.

Operasi angkatan kerja

hr_payroll, hr_benefits, hr_learning, hr_expense_payment, hr_directory dan hr_data_warehouse.

Komunikasi

hr_messaging Kontraknya tidak berisi metode membaca pesan karyawan.

Titik akhir Gateway Penyedia Pembekal

PeopleOS Gateway Pembekal HR 1.0
GET    /v1/hr/health
POST   /v1/hr/job-postings
PATCH  /v1/hr/job-postings/{provider_ref}
POST   /v1/hr/job-postings/{provider_ref}/close
GET    /v1/hr/job-postings/{provider_ref}
POST   /v1/hr/background-checks
GET    /v1/hr/background-checks/{provider_ref}
POST   /v1/hr/identity-verifications
GET    /v1/hr/identity-verifications/{provider_ref}
DELETE /v1/hr/identity-subjects/{subject_ref}
POST   /v1/hr/payroll/worker-events
GET    /v1/hr/payroll/state?cursor=...
GET    /v1/hr/payroll/exceptions
POST   /v1/hr/equipment/requests
POST   /v1/hr/access/requests
GET    /v1/hr/provisioning/requests/{request_ref}
POST   /v1/hr/provisioning/requests/{request_ref}/revoke

Get laluan memerlukan HTTPS, menyekat sasaran yang tidak selamat/peribadi, menyemat hasil DNS yang disahkan, tidak mengikut sebarang ubah hala, mengehadkan saiz respons, memerlukan JSON, membawa idempotensi deterministik, dan menyokong HMAC bercap masa dalam kedua-dua arah. Webhook sentiasa menjadi petunjuk yang diikuti dengan pertanyaan semula kepada penyedia.

Pintu webhook yang tidak masuk akal

Tiga pintu publik di Amerika menerima panggilan balik penyedia: POST /opsiq/ajax_api.php?ajax=hr_connector_webhook iran (fields connector_class, connector_key, topic), ?ajax=hr_esign_webhook (connector_key, offer_uuid, provider_ref) dan ?ajax=hr_check_webhook (check_uuid). Setiap satu mengesahkan kandungan melalui konektor yang diperakui, memusnahkan penghantaran itu supaya ulang main gagal, dan hanya merekodkan pertanyaan semula yang belum selesai; jawapan pembekal itu sendiri yang mengubah rekod. Setiap penolakan sengaja diberikan jawapan generik yang sama. PeopleOS tidak menghantar sebarang peristiwa webhook keluar pada masa ini: webhooks.events.list Tidak ada nama di dalam hr Keluarga, jadi jajak pendapat hr.* dibaca atau digunakan hr.connectors.health.

Referensi terperinci tidak jelas

Buku pegangan Complete PeopleOS

Bacalah doc/contracts/PEOPLEOS_HR.md dalam pemasangan self-hosted untuk setiap pengendali, API, penyambung, webhook dan peraturan keluaran.

Kontrak pengembang desocuoper detogasi

Pakej Marketplace mengandungi README.md, DEVELOPER.md, connector_contract.json, hr_profile.json dan sebuah dokumen yang ditandatangani.

PeopleOS HR

Pengujian dan kesediaan pengeluaran

Tuntutan pelancaran dikira daripada bukti. Kesediaan pakej, pensijilan penyedia, kelulusan undang-undang, penilaian keadilan dan pengesahan kebolehcapaian sengaja diasingkan.

1
Kode dan kontrak disahkan

Jalankan semakan sintaks PHP, HR PHPUnit, pariti laluan/API, semakan OpenAPI/Postman, manifest pakej dan pengesahan JSON Schema.

2
Latihan penuh aliran kerja

Pengintaian uji rekruting, AI review, wawancara/video, onboarding, tanda tangan, cuti, gaji, portal, pemberitahuan, modal dan jalur kegagalan penyambung.

3
Uji kehandalan dan akses UI

Kendalikan susun atur desktop, tablet dan telefon; papan kekunci, fokus, label, kontras, aliran semula, petua alat, dialog, tatal pemberitahuan dan navigasi bebas.

4
Pengumpulan bukti eksternal

Gunakan perjalanan pergi balik dan pemadaman penyedia sebenar, keluaran dasar undang-undang, data keadilan yang mewakili dan pengesahan WCAG manusia yang bebas.

5
Lepaskan di bawah kendali ganda

Penyemak yang berbeza daripada penghantar meluluskan bukti penyambung dan keluaran. Batalkan atau gunakan suis henti pada penyambung jika buktinya tamat tempoh.

Apa arti dari hasil masing-masing

Pakej ditandatangani

Fail tidak berubah sejak tandatangan pakej yang dibenarkan. Ia tidak membuktikan akaun pihak ketiga berfungsi.

Kotak pasir dilewatkan

Perilaku dan transisi negara deterministik nutfah tidak sesuai. Ini tidak membuktikan suatu provider nyata, istilah residensi atau penghapusan.

Penyambung pengeluaran diperakui

Akaun ruang kerja tertentu telah lulus lima kewajipan pihak penyedia di bawah kawalan dwi.

Laporan Teknikal WCAG

Bukti yang terautomatik dan dievaluator ada untuk permukaan yang dinamai.

Lancarkan siap

Semua gerbang yang diperlukan berwarna hijau pada saat yang sama dan tidak ada bukti yang luput, dicabut, hilang atau bertentangan dengan kesehatan hidup.

⚠️
Jangan sekali-kali mencipta rekod undang-undang, keadilan, pembekal atau pengesahan bebas yang lulus semata-mata untuk melepasi pintu kawalan. Sebaliknya, rekodkan penghalang dan pemiliknya. Paparan kesediaan bernilai justeru kerana ia menolak dakwaan yang tidak disokong.
Mengapa penyambung sudah dipasang tetapi masih tidak tersedia?+

Pemasangan membuktikan kehadiran pakej. Dayakannya, simpan kelayakan sebenar dengan keistimewaan paling minimum, lulus ujian sambungan, kemudian berikan skop pengeluaran akaun PeopleOS yang sepadan menggunakan bukti penyedia yang tulen dan penyemak yang berbeza.

Mengapa webhook tidak mengubah catatan?+

Panggilan balik mungkin sah tetapi hanya petunjuk. Semak peti masuk webhook, titik akhir status penyedia dan hasil penyesuaian. PeopleOS mengubah keadaan berautoriti hanya selepas pertanyaan semula.

Di manakah API HR lengkap yang boleh dibaca mesin?+

Panggil meta.actions dan filter untuk rr. dan platform.hr.; atau gunakan/api/v1/openapi.phpDan/api/v1/postman.php.Mereka dihasilkan dari registry runtime yang sama.

Sokongan

Pusat bantuan

Pusat Bantuan anda ialah laman bantuan layan diri yang dibina daripada artikel yang anda terbitkan. Pelanggan boleh membaca dan mencarinya di halaman awamnya sendiri, dan terus di dalam widget sembang, supaya mereka boleh menemui jawapan sendiri sebelum mereka membuka perbualan. Semua kandungannya datang daripada pangkalan pengetahuan anda, jadi kandungan yang sama yang menjadi asas AI anda juga menggerakkan bantuan awam anda.

Di mana pelanggan Anda melihatnya

Veachines memiliki halaman publik

Laman bantuan yang kemas dan boleh dicari di /help.phpPelanggan dilayari oleh kategori, pencarian, dan membuka artikel apapun.

Di dalam widget sembang

Pautan bantuan dalam widget sembang supaya pelanggan boleh mencari artikel anda tanpa meninggalkan sembang. Jika mereka masih memerlukan seseorang, mereka hanya satu ketikan dari memulakan perbualan.

Hidupkannya

1
Buka halaman Pusat Bantuan

Pergi ke Config, then Help Center \"Madmin\" mu dan hidupkan Pusat Bantuan Publik.

2
Berikan nama dan lihat

Anda dapat mematikan navigasi atas untuk halaman bersih tanpa menu.

3
Terbitkan beberapa artikel

Tidak ada yang menunjukkan sampai Anda menerbitkan artikel untuk itu.

Artikel ke Pusat Bantuan

Artikel disimpan dalam pangkalan pengetahuan anda. Artikel muncul di Pusat Bantuan sebaik sahaja ia diterbitkan dan ditanda sebagai awam. Terdapat beberapa cara untuk melakukannya:

1 artikel

Buka artikelnya, tandai artikel itu diterbitkan, dan nyalakan opsi untuk memperlihatkannya di Pusat Bantuan.

BAHASA SEMUA

Gunalah Terbitkan Semua butang untuk menolak keseluruhan set yang diterbitkan ke Pusat Bantuan dengan satu klik, dan bukannya satu demi satu.

¡Fakta - FAQ menjadi artikel

Sudah memiliki FAQ? Gunakan ISS semua untuk Bantuan Mereka menjadi artikel bantuan sehingga mereka duduk di samping hal - hal lain.

Import pangkalan pengetahuan sedia ada

Pindah dari meja bantuan lain? Import KB pada tab Artikel membawa masuk pangkalan pengetahuan sedia ada untuk anda. Anda mempunyai tiga cara untuk menghalakannya ke kandungan anda:

Tampal URL_

Berikan alamat pusat bantuan semasa anda. Jika ia mengenal pasti platform tersebut (contohnya Zendesk), ia membaca pepohon kategori yang tepat daripada platform itu. Jika tidak, ia merangkak laman tersebut dan membina semula struktur daripada halaman-halamannya, mengimport artikel sebenar sahaja dan melangkau halaman log masuk, harga dan hubungi.

Pilih aplikasi yang tersambung

Jika sebuah platform sudah terhubung ke ruang kerja ini dan memegang dasar pengetahuan, ia muncul di dropdown bawah Import daripada aplikasi yang disambungkan. Pilih dan import, tanpa memerlukan URL atau kata laluan. Aplikasi hanya disenaraikan setelah ia disambungkan dan disediakan.

Muat naik CSV_

Tiada laman langsung untuk dirujuk? Muat naik hamparan dengan title, category, dan body Diletakkan di tiang-tiang. Parent / Child dalam lajur kategori untuk membina kategori bersarang.

Apapun cara yang Anda pilih, Anda mendapatkan Pertama, pratinjau pertama: artikel yang ditemuinya, dikumpulkan mengikut kategori, setiap satu dengan kotak semak supaya anda boleh mengetepikan apa-apa yang anda tidak mahu. Tiada apa yang disimpan sehingga anda mengklik Import. Selepas itu anda boleh Amerika/Obd keseluruhan import dengan satu klik, atau Segerakkan semula URL atau import aplikasi bersambung kemudian untuk menarik masuk artikel baharu dan yang telah diubah.

💡
Pembangun: setiap penyambung dapat mengiklankan pengetahuannya dasar untuk penurunan ini dengan menyatakan kb_capabilities Blok di dalamnya settings.json dargen (jenis kb_sourceDengan adapter Dan base_template). Lihat bahagian Penyambung dan rujukan penyambung platform.

Diorganisir dengan AI

Pusat bantuan yang rapi mudah dilayari dan lebih mudah dicari. Diorganisir dengan AI butang melakukan pengemasan untuk anda. Dengan satu klik, ia membaca artikel anda yang telah diterbitkan, menyusunnya ke dalam kategori yang wajar, dan menambah tag. Ia mencipta kategori apabila perlu, menggunakan semula kategori yang sudah sesuai, dan melangkau apa-apa yang telah anda susun, jadi anda boleh menjalankannya semula pada bila-bila masa anda menambah artikel baharu. Hidupkan What Let AI organising into subkategori dalam tetapan Pusat Bantuan dan ia juga boleh menyimpan artikel di bawah Parent / Child kategori, yang berguna sejurus selepas mengimport pangkalan pengetahuan yang mempunyai subbahagian.

💡
Kategori memberi pelanggan cara untuk menyemak imbas, dan tag menajamkan carian pada halaman awam dan dalam widget. Anda boleh menamakan semula atau memindahkan item selepas itu. AI memberi anda titik permulaan yang kukuh, bukan persediaan yang tidak boleh diubah.

Pusat Bantuan di dalam widget sembang anda

Anda boleh memaparkan Pusat Bantuan terus di dalam widget sembang supaya orang ramai mencari jawapan sebelum menghantar mesej kepada anda. Dalam tetapan widget sembang anda, pilih tempat pautan bantuan dipaparkan:

* Di kepala

Ikon bantuan kecil di atas widget.

Di dasar

Pautan teks di bawah kotak mesej, contohnya "Layari Pusat Bantuan". Anda boleh ubah kata-kata.

Kedua-duanya

Di bagian bawah dan di bagian bawah, untuk paling banyak penglihatan.

Pautan bantuan mempunyai kawalan warnanya sendiri di bawah tetapan Rupa widget. Biarkannya pada Tiada Kecocokkan dengan warna peluncur Anda, atau pilih Padat Warna atau warna GradienSeluruh pengalaman membantu mengikuti tema widgetmu, jadi selalu terlihat seperti bagian dari merekmu.

Letakkan pusat bantuan anda pada alamat web anda sendiri

Dari kotak, pusat bantuan Anda sudah memiliki alamat yang bersih dan dapat dibagikan sendiri (misalnya /help/your-help-center). Anda boleh pergi selangkah lagi dan menyajikannya di bawah domain ownJadi, pelanggan dan mesin pencari melihatnya sebagai bagian dari merek Anda, misalnya yourdomain.com/help atau help.yourdomain.comSemuanya terus bekerja pada domain Anda: link, gambar, pencarian dan peringkat artikel.

Di bawah laman web utama anda

Di Pusat Bantuan, buka Terbenam tab dan cari "Tunjukkan pusat bantuan anda pada alamat sesawang sendiri". Pilih seting (Cloudflare, Nginx atau Apache), salin blok sedia ada, dan tampalkannya ke dalam laman anda. Setiap pilihan mempunyai Panduan perlengkapan usifour butang di sebelahnya dengan langkah yang tepat.

Pada subdomain

Andorra help.yourdomain.com? Panel yang sama mempunyai pilihan subdomain. Pada Cloudflare, subdomain ialah laluan yang paling boleh dipercayai, dan ia memberikan anda alamat yang bersih tanpa apa-apa selepasnya.

💡
Nama pengguna Cloudflare Ini hanya menjalankan pekerjanya pada alamat yang ditunjang melalui Cloudflare Domain utama Anda sering menunjuk lurus ke website Anda, sehingga aturan yang ditempatkan pada domain utama dapat diam-diam tidak melakukan apa-apa. Cara yang dapat diandalkan adalah subdomain yang terkoneksi seperti help.yourdomain.comPanduan setup berjalan Anda melalui satu DNS catatan dan rute.
✅
Baik untuk SEO. Apabila Pusat Bantuan anda berada pada domain anda sendiri, enjin carian mengindeks artikel anda di bawah jenama anda. Setiap halaman mengisytiharkan alamatnya yang betul dan peta laman menyenaraikannya, jadi artikel yang sama tidak sekali-kali diindeks dua kali.
💡
Guna pautan bantuan dalam-widget juga? Dalam tetapan "Buka di pusat bantuan" bagi widget sembang, tetapkan Ke mana link pergi ke Anda sendiri bantuan domain pusat Kemudian artikel tersebut juga menghubungkan domain Anda dengan alamat yang sama, bukan pada alamat OpsIQ _.

Lihat bagaimana seluruh pusat bantuan Anda lakukan

Di luar suara tunggal-artikel, Pusat Bantuan memiliki sendiri analitik. Hidupkannya dalam tetapan Pusat Bantuan dan ia akan merekod secara senyap cara orang menggunakan bantuan anda: artikel yang paling banyak dilihat, apa yang mereka cari, dan carian yang tidak membuahkan hasil (senarai sedia untuk ditulis), serta menentukan negara dan peranti pelawat dengan sendiri, jadi ia tidak memerlukan widget sembang dipasang untuk membuat laporan. Setiap angka dipaparkan untuk kedua-dua Tempat bantuan Anda muncul, halaman publik dan in-widget bantuan, serta gabungan, sehingga Anda dapat melihat berapa banyak masing-masing benar-benar digunakan.

💡
Analitik kekal dimatikan sehingga anda menghidupkannya, dan anda boleh menjadikan alamat IP pelawat tanpa nama. Tiada apa-apa direkodkan sebelum anda bersetuju.

Pilih apa yang tampak di setiap bagian halaman

Setiap bagian Pusat Bantuan (kategori di halaman utama, artikel populer, daftar artikel pada halaman kategori dan lebih) memiliki aturan sederhana tersendiri. Semua Barang-barang, tetapkan nombor, yang terkini, atau hanya satu-satunya yang Anda ciri dengan bintang. Apabila peraturan menutup senarai, pelanggan masih mendapat pautan "Tunjukkan semua", jadi tiada apa yang benar-benar di luar jangkauan.

Anda juga boleh tentukan bagaimana suara berguna kelihatan: tersembunyi, nisbah "12 dari 14 found this helpful", or plain thumbs counts. A minimum- votes setting stops a brand new article showing an awkward "0keluar dari0".

Lihat artikel mana yang sedang dikerjakan

Setiap artikelnya menunjukkan sebuah Apakah ini membantu? gesaan. Setiap undian ya atau tidak dikira bagi setiap artikel, jadi anda dapat melihat sepintas lalu artikel mana yang menjawab soalan dengan baik dan mana yang perlu ditulis semula. Undian berulang daripada pelawat yang sama diabaikan, jadi kiraan kekal jujur.

Teks dan label

Anda dapat mengubah heading dan label pada Pusat Bantuan untuk mencocokkan suara Anda. Biarkan setiap bidang kosong dan itu jatuh kembali ke standar yang masuk akal, jadi anda hanya mengedit kata-kata yang ingin anda ubah.

✅
Pusat Bantuan osis berbagi satu perpustakaan dengan AI Anda. Setiap artikel yang Anda terbitkan di sini adalah konten yang sama yang digunakan oleh AI untuk menjawab chat dan tiket, sehingga meningkatkan satu memperbaiki yang lain.

Soalan lazim

Apakah saya perlu menulis konten terpisah untuk Pusat Bantuan?+

Tidak, artikel ini dibangun dari artikel dasar AI yang sama yang telah digunakan.

Boleh aku menyimpan artikel internal?+

Hanya artikel yang Anda terbitkan dan tandai publik muncul di Pusat Bantuan.

Adakah pelanggan masih boleh menghubungi seseorang?+

Ya. Pautan bantuan widget hanya satu ketikan dari memulakan perbualan, jadi layan diri tidak pernah memerangkap sesiapa.

Pertumbuhan & SEO

Risikan Laman Web (suite SEO)

Site Intelligence ialah suite SEO dan keterlihatan carian terbina dalam OpsIQ. Ia merangkak laman web anda seperti enjin carian, menjejaki kedudukan anda, membuat kajian kata kunci, memantau pautan balik dan pesaing, mengimbas kehadiran peta tempatan anda, menyemak kelajuan halaman, dan menjadikan semuanya laporan sedia untuk pelanggan, dengan penganalisis AI yang menerangkan apa yang perlu dibaiki dan boleh menyediakan draf pembaikan. Ia ialah ciri premium; apabila didayakan ia muncul sebagai Site Intelligence di bar sisi. Data setiap domain kekal berasingan, rangkak, kedudukan dan laporan tidak pernah bercampur antara domain.

Kecerdasan Laman
Papan pemuka Kecerdasan LamanPapan pemuka SEO yang menunjukkan skor kesihatan laman, penjejakan kedudukan kata kunci dan trend trafik.Kecerdasan Lamanyoursite.com86KESEHATAN SITE3 Masalah kritikalPelacakan pangkat kata kuncihelpdesk ai#3life live chat saas#7Amunisi untuk agensi#12Klik organik1ORANG CRAWLMenemukan masalah teknis2TRACKPangkat, kata kunci, backlinks3AI AIANALISTPenjelasan dan draf perbaikan
Gambaran keseluruhan Site Intelligence: skor kesihatan laman web daripada perangkakan terkini, penjejakan kedudukan kata kunci secara langsung, trend klik organik, dan gelung tiga langkah: rangkak, jejak, biarkan AI merangka pembaikan.

Mendapatkan Kecerdasan Laman

Site Intelligence ialah sebahagian daripada pelan yang menyertakannya. Pada pelan yang tidak menyertakannya, ia berfungsi sama seperti PeopleOS HR: pemilik akaun membuka Akaun → Tambahan & Token, memilih peringkat Site Intelligence dan memulakan percubaan percuma atau terus menambahkannya. Pelan percuma, atau pelan berbayar yang masih dalam tempoh percubaan pelannya sendiri, tidak boleh menambahkannya. Selagi ia belum dimiliki, suite tersebut disembunyikan daripada bar sisi dan pautan terus menawarkan tambahan itu; apabila had peringkat dicapai, halaman menawarkan peringkat seterusnya; apabila percubaan tamat tanpa pembelian, hak tersebut dibuang dan tiada caj dikenakan. Peringkat dan harga disimpan pada akaun, jadi lihat peringkat semasa di Halaman pricing fredin.

Larilah kepayahan mulai dari sini

A merangkak adalah OpsIQ mengunjungi halaman Anda dengan cara mesin pencari, untuk menemukan masalah teknis: putus link, hilang judul, tipis konten, lambat halaman, masalah indeks.

1
Mulai merangkak

Pada Overview, klik untuk memulai crawl. OpsIQ _baris gilir dan bekerja melalui halaman Anda di latar belakang; indikator status menunjukkan kemajuan.

2
Baca laporannya.

Setiap isu dikelompokkan oleh keparahan sehingga Anda menang pertama.

3
Biar AI membantu

Analis AI analisa menghasilkan singkat bahasa-biasa saja tentang apa yang salah dan mengapa hal itu penting, dan dapat menghasilkan saran untuk memperbaiki Anda sebelum menerapkan.

Apa yang dijejaki oleh Site Intelligence

Rangkak & kesihatan laman

Memindai halaman Anda untuk masalah teknis SEO dan daftar setiap halaman dengan masalahnya.

Pelacakan pangkat

Tambah kata kunci yang penting bagi anda; OpsIQ menyemak kedudukan laman web anda dan menjejaki pergerakannya dari semasa ke semasa.

Penyelidikan kata kunci

Discover ide kata kunci baru untuk target, dengan pelatih kata kunci AI untuk membantu prioritise.

Pautan balik

Lihat siapa yang memaut kepada anda, muat semula senarai, dan tolak pautan yang anda tidak mahu dikaitkan dengan laman web anda.

Pengkompetisi

Tambah domain pesaing dan bandingkan visibilitasmu terhadap mereka, dengan analisis AI pesaing.

Grid lokal (peta)

Ogoza Scan lokal-listing visibilitas melintasi grid geografis untuk melihat di mana Anda muncul di peta, ditambah Google Business Profile alat.

Kecepatan PageVice

Jalankan semakan kelajuan halaman supaya anda boleh membaiki halaman perlahan yang menjejaskan kedudukan dan penukaran.

Kandungan AI

BAHASA dan draf konten yang ditujukan pada kata kunci yang Anda tuju.

Laporan

Membangun laporan yang mudah dicetak, pelanggan siap melaporkan segala sesuatu di atas.

Sambungkan Google untuk data yang akurat

Dua penghubung Google membuat perkiraan menjadi bilangan real:

Konsol Pencarian Google buatan Forbes

Carian

Tarik pertanyaan carian, klik dan tera yang tepat seperti yang dilaporkan Google untuk laman web anda, petakan harta anda, dan ketengahkan peluang kedudukan terus daripada data Google sendiri.

Google Analytics 4

Lalu Lintasan Lalu Lintas

Bawa data lalu lintas dan keterlibatanmu bersama data SEO-mu, jadi laporan menunjukkan visibilitas dan perilaku bersama.

Laporan fresh yang dijadwalkan & berlabel putih

Anda tidak perlu menjalankan semuanya secara manual. Penyegaran berjadual menjalankan semula rangkakan, semakan kedudukan, semakan kata kunci, penyegaran pautan balik, imbasan grid tempatan dan penjanaan laporan mengikut kekerapan (harian atau mingguan bergantung pada pelan dan volum). Semua ini berjalan melalui cron OpsIQ, lihat bahagian Cron dan automasi. Laporan yang dijana dieksport sebagai dokumen yang boleh dicetak dan sedia untuk pelanggan: agensi menghantar kemas kini SEO berkala kepada setiap pelanggan, dan kerana data setiap domain adalah berasingan, setiap pelanggan hanya melihat data mereka sendiri.

✅
Sesetengah ciri Site Intelligence memanggil pembekal data luaran dan AI melalui pembekal yang dikonfigurasikan dalam OpsIQ. Ciri ini berfungsi serta-merta apabila suite tersebut didayakan untuk pelan anda. Jika muat semula tidak berjalan, pastikan cron OpsIQ sedang berjalan (lihat Cron dan automasi).
Apa aku perlu menambahkan sesuatu ke situsku untuk pelacakan SEO?+

Buat trafik dan data pencarian yang tepat, sambungkan Google Search Console dan GA4.

Bolehkah saya menjejak lebih daripada satu domain?+

Tambahkan setiap domain secara terpisah; mereka merangkak, peringkat dan laporan tetap sepenuhnya terisolasi satu sama lain.

Berapa kerapkah saya patut merangkak?+

Mingguan sudah memadai untuk kebanyakan laman; rangkak atas permintaan selepas perubahan besar pada kandungan atau struktur. Tetapkan jadual supaya anda tidak pernah lupa.

Pertumbuhan & SEO

Laksana Automatik (Ejen SEO)

Auto-Implement ialah bahagian Site Intelligence yang benar-benar melaksanakan pembetulan yang disyorkan oleh rangkakan dan penganalisis AI, bukan sekadar memberi nasihat. Ejen bekerja secara ketat berdasarkan apa yang telah ditemui oleh Site Intelligence (ia tidak sekali-kali boleh mereka perubahan) dan membawa setiap pembetulan melalui gelung selamat yang sama: pratonton larian kering, kelulusan anda bagi setiap langkah, penulisan langsung, syot kilat automatik, dan rangkak semula yang membuktikan bilangan isu terbuka telah berkurangan. Ia ialah ciri khas Managed AI sahaja; ia muncul sebagai tindakan Auto-Implement (roket) di dalam bahagian Site Intelligence, dan ia dimatikan sehingga anda menghidupkannya.

Pengimplemen-Otome
Agen SEO Auto-ImplementAliran yang menunjukkan SEO merekomendasikan perbaikan bergerak melalui pratinjau, persetujuan dan tulisan langsung, dengan proce-it re-crawl.Pengimplemen-Otomeyoursite.comPerbaikan sarananAdd missing <title>Diluluskanafx robot. txtDiluluskanSerahkan sitemap.xmlulasanPRAWASAN DRY-RUN (DIFF)+ <title>AI Helpdesk - OpsIQ</title>+ <meta name=description ...>- <title>Home</title>AperroveSkip jingBUKTIKAN - RANGKAK SEMULAIsu terbuka 124Snapshot disimpan1YEHUWADiff dry-run dari setiap perbaikan2AKAN MENGGUNAKAN & WRITTENSSH Dirumahi API3PROVE DAN ROLLBACKSelit semula + snapshot
Cara sesuatu sesi berjalan: ejen menyenaraikan pembaikan yang telah disyorkan oleh Site Intelligence, menunjukkan perbezaan larian kering bagi setiap satu, menggunakan yang anda luluskan melalui SSH atau API yang dihoskan, mengambil petikan sebelum setiap penulisan, dan merangkak semula untuk membuktikan bilangan isu terbuka telah berkurang.

Apa yang boleh diubahnya

Agen hanya pernah melaksanakan pembaikan yang Intelijen Laman (atau penganalisis AI) telah dinasihatkan untuk domain itu. Melalui platform yang disokong meliputi:

Konfigurasi server ik

sitemap.xml, robots.txt, serta peraturan ubah hala, kanonik dan pengepala dalam .htaccess (Apache / LiteSpeed) atau konfigurasi nginx.

rantaian Redirect

Meringkaskan rantaian ubah hala berbilang lompatan kepada satu lompatan terus ke URL akhir, di dalam blok .htaccess terurus yang sama, supaya kelajuan dan nilai pautan tidak lagi bocor melalui lompatan tambahan.

Page <head>

Judul halaman yang hilang atau lemah, keterangan meta, tag kanonik dan blok terstruktur-data (skema).

WordPress SEO

Yoast, Rank Math dan SEOPress judul & meta, dan teks alt gambar, diterapkan melalui WP-CLI pada SSH Jalur vingia atau REST API Di jalan tuan rumah.

WordPress Data terstruktur

Menambah JSON-LD (skema) pada halaman yang tidak memilikinya. Pada laluan SSH, pembantu terurus yang kecil (pemalam wajib guna) mencetak penanda supaya ia berfungsi dengan atau tanpa pemalam SEO; pada laluan dihoskan, pemalam SEO anda yang membawanya.

Pautan internal

* Tambahkan satu link internal yang relevan ke dalam data yang telah ada WordPress Satu link per halaman, tidak pernah di dalam heading, link yang ada atau shortcode, dan selalu disetujui oleh Anda terlebih dahulu.

Isian halaman-tipis menulis ulang

Draf isi penggantian penuh untuk halaman tipis (dinyalakan oleh opsi merangkak, lihat di bawah). Setiap draf ditinjau dan disetujui oleh Anda sebelum apa pun diterbitkan, dan konten lama disimpan sehingga dapat dipulihkan.

Cache halaman WordPress)

Hagnoshi menyalakan W3 Total Cache page caching ketika crawl menemukan masalah kecepatan dan plugin yang terpasang, sehingga halaman melayani lebih cepat.

Shopify SEO

Produk dan koleksi SEO judul & deskripsi, halaman dan blog-artikel SEO, ditambah 301 Arahkan ke arah, melalui Shopify Admin API.

Webflow SEO

Per-halaman SEO judul dan meta deskripsi melalui Webflow Data API ^ a b c d e f g h i j k l m n o p q r s t u v 2.

Sediakan pembaikan secara automatik (dua pilihan rangkak)

Dan dia memutuskan berapa banyak agen yang akan berbaris untuk Anda sebelum waktu.

Sediakan pembetulan AI secara automatik selepas setiap rangkakan

Setiap craw juga menulis konten perbaikan konkret (judul, deskripsi meta, teks alt, skema, redirects) untuk apa yang ditemukan, sehingga fixes siap meninjau dan menerapkan momen crawl finishes daripada dijana nanti pada permintaan. Menggunakan kredit AI pada setiap merangkak.

Konten english menulis ulang (halaman thin)

Agen tersebut mungkin menyusun konten pengganti penuh untuk halaman tipis. Tidak ada yang pernah diterbitkan sendiri: setiap draf muncul sebagai perubahan yang Anda tinjau secara berdampingan dan disetujui atau ditolak, konten sebelumnya disimpan sehingga reversibel, dan terbatas pada beberapa halaman per lulus. Penggunaan kredit AI per draf.

💡
Kedua pilihan hanya mempersiapkan dan membuat draf kerja setiap perubahan masih melalui persetujuan per langkah yang sama, snapshot dan rollback sebagai perbaikan lain, sehingga menghidupkan mereka tidak pernah menempatkan apa pun hidup dengan sendirinya.

Dua cara menghubungkan

SSH / SFTP Jalur

Diurus Sendiri

Untuk laman web di pelayan anda sendiri, ejen bersambung melalui SSH/SFTP menggunakan kelayakan yang anda simpan, menyunting konfigurasi pelayan dan fail halaman secara terus, dan menjalankan WP-CLI untuk WordPress. Paling sesuai apabila anda mempunyai akses shell dan mahukan kawalan penuh ke atas fail.

Di--API Path ari (tidak ada SSH)

Tidak ada shell

Untuk platform yang tidak membenarkan SSH, ejen berfungsi sepenuhnya melalui penyambung API rasmi, WordPress (REST + Application Passwords), Webflow (Data API v2) dan Shopify (Admin API). Tiada apa-apa yang dipasang pada hos.

💡
Wix dan Squarespace tidak mempunyai API awam untuk menulis SEO, jadi pada platform tersebut Auto-Implement berjalan dalam mod nasihat: ia menunjukkan kepada anda perubahan tepat yang perlu dibuat (tajuk, meta atau tetapan yang tepat) untuk anda gunakan secara manual. Semua yang lain adalah baca sahaja dan selamat.

Jangan nyalakan konektornya.

Agen mencapai setiap platform melalui sambungan:

Dalam Fungsi

Penyambung Shopify dan WordPress disertakan bersama OpsIQ, hanya dayakannya di bawah Penyambung dan tambah kelayakan kedai / laman.

Dari Pasar

WebflowAda instalasi Wix dan Squarespace dari Penyambung→Pasar, lalu menghubungkan dengan cara yang sama.

Bagaimana sesi berjalan

1
Memetik obat-obatan

Buka Auto-Implement (roket) daripada bahagian Site Intelligence. Ia menyenaraikan isu yang telah ditemui oleh Site Intelligence dan boleh dibaikinya pada domain ini.

2
Setiap perubahan prapaparan

Untuk setiap pembetulan, ejen menunjukkan diff larian kering (tepat apa yang akan ditulisnya) sebelum apa-apa menyentuh laman langsung.

3
Langkah demi langkah Approve

Anda menyetujui (atau melewatkan) setiap perubahan secara individual. Tidak ada yang diterapkan tanpa Anda eksplisit pergi-ahead pada langkah itu.

4
Ia menulis, kemudian gambar

Pada persetujuan agen membuat perubahan hidup atas SSH Orang Amerika Serikat atau yang di rumah API Dan menyimpan gambar pertama, sehingga setiap perubahan dapat dikembalikan.

5
Buktikan, hidup

Sambil menggunakan setiap perubahan, ejen serta-merta menyemak semula halaman yang sama itu dan menunjukkan keputusan “dibaiki secara langsung” bagi setiap langkah, jadi anda dapat melihat setiap pembaikan berlaku pada halaman langsung ketika ia berlaku. Pada akhirnya, ia merangkak semula seluruh laman dan mengesahkan bahawa bilangan isu terbuka telah berkurang.

Pengamanan Keselamatan &

SEO sahaja

Ejen hanya boleh melakukan apa yang disyorkan oleh Site Intelligence untuk domain itu. Ia tidak boleh membuat perubahan sewenang-wenangnya pada laman atau pelayan anda.

Persetujuan per-langkah

Setiap penulisan dipratonton sebagai perbezaan dan hanya digunakan selepas anda meluluskan langkah khusus itu.

& Rulas balik snapshot

Snapshot disimpan sebelum setiap tulisan, sehingga perubahan apapun dapat dikembalikan.

Hidup per-langkah bukti

Setiap halaman yang diubah diperiksa ulang segera ditulis dan mendapat putusan \"langsung tetap\", sehingga sebuah perbaikan dikonfirmasi terhadap halaman langsung segera, tidak hanya dalam penutupan re-crawl.

Kandungan bahasa Inggris tidak pernah diterbitkan secara oto

Pautan dalaman dan penulisan semula kandungan halaman nipis mempunyai impak yang lebih tinggi, jadi ia sentiasa ditunjukkan kepada anda untuk kelulusan dan tidak pernah digunakan secara automatik, apa jua mod yang anda jalankan.

Hanya mengurus-AI

Auto-Implementasi berjalan pada AI Terurus; ia dihalang bila ruangkerja menggunakan kekuncinya sendiri (BYOK).

Penagihan

Token AI dibilkan seperti biasa mengikut penggunaan anda, ditambah satu yuran rata setiap penggunaan bagi setiap sesi Auto-Implement, kedua-duanya diambil daripada kredit Managed-AI yang sama.

✅
Auto-Implement dimatikan secara lalai. Dayakannya di halaman konfigurasi AI (kad Auto-Implement) dan pastikan penyambung untuk platform anda disambungkan terlebih dahulu.
Apa itu mengubah sesuatu tanpa bertanya?+

Tidak. Setiap perubahan dipratonton sebagai perbezaan larian percubaan dan hanya digunakan selepas anda meluluskan langkah itu dengan tepat. Syot kilat disimpan sebelum setiap penulisan supaya anda boleh membuat pengembalian.

Apakah aku perlu akses SSH _?+

Tidak pada WordPress, Shopify OR atau ORANG Webflow Mereka bekerja melalui pejabat mereka. APIs Tidak ada akses shell. SSH Hanya satu dari dua jalur, digunakan ketika Anda ingin agen untuk menyunting konfigurasi server dan file secara langsung pada server Anda sendiri.

Bagaimanakah saya tahu ia berjaya?+

Selepas menggunakan pembaikan yang diluluskan, ejen merangkak semula laman web dan menunjukkan bilangan isu terbuka sebelum dan selepas, supaya anda boleh mengesahkan bahawa pembaikan itu mengurangkan isu.

Akankah ia menulis ulang atau menerbitkan sendiri konten halaman?+

No. AI konten menulis ulang kembali off sampai Anda menyalakannya dalam pilihan merangkak, mereka terbatas pada beberapa halaman tipis per lulus, dan setiap draf ditunjukkan kepada Anda untuk persetujuan samping-bersisi sebelum apa pun yang diterbitkan. Isi sebelumnya disimpan, sehingga sebuah penulisan ulang selalu dapat dikembalikan.

Boleh aku menggunakannya dengan kunci AI sendiri?+

Tidak. Auto-Implement hanya untuk AI Terurus dan disekat di bawah BYOK. Ia mengebil token AI seperti biasa serta satu yuran tetap bagi setiap penggunaan untuk setiap sesi, daripada kredit AI Terurus yang sama.

Pertunangan pertumbuhan wanfan &

Survey Studio

Survey Studio ialah ruang kerja untuk mencipta tinjauan boleh sunting yang boleh dihantar sebagai halaman kendiri yang kaya, widget laman web atau benaman sebaris. Produk semasa juga menyediakan pautan yang dihoskan, pratonton draf bertandatangan, jemputan peribadi, perkongsian kod QR, penyemakan imbas respons dan analitik khusus tinjauan. Widget laman web ialah satu pilihan penghantaran; ia bukan takrifan tinjauan.

⚠️
Batas target lawan-perlawanan: pengalaman penciptaan dan pratonton premium, keupayaan Connector Builder survey keupayaan, dan sempadan pendaftaran/kesihatan pembekal milik Survey kini tersedia. Survey Studio masih memerlukan seni bina berbilang penggunaan yang bebas, Survey Identity Gateway dengan token bertandatangan, pendawaian penyasaran/pemboleh ubah, aliran penghantaran CRM Outreach dan bertaip surveys.* API.

Wheridon membuat survei

1
Pilihlah bagaimana orang akan mengambilnya

Wizard semasa menawarkan Halaman & pautan berdiri sendiri, Widget laman web dan Benaman sebaris. Aliran sasaran yang diluluskan bermula dengan jenis tinjauan dan kemudian menambah penggunaan e-mel CRM, pautan peribadi dan QR sebagai pilihan utama.

2
Pilih tujuan

Pilih NPS, CSAT, CES, maklum balas produk, selepas pembelian, pembatalan, orientasi, laman web, acara, webinar, sokongan, prospek/demo, percubaan percuma, testimoni, penyelidikan, pekerja, pengambilan atau maklum balas umum.

3
Woindon Gunakan templat lengkap atau Mula kosong

Katalog semasa mempunyai templat permulaan sedia untuk diedit yang dikumpulkan mengikut tujuan. Memilih templat akan mencipta draf salinan: mengubah tinjauan anda tidak mengubah templat permulaan atau tinjauan lain.

4
Sesuaikan atau Cepat ulasan

Sesuaikan membuka setiap kawalan soalan, reka bentuk, tingkah laku dan penghantaran. Semakan pantas membuka draf yang sama pada semakan akhir paparan pelanggan. Tiada apa-apa diterbitkan atau dihantar secara automatik.

Pilihan dan perilaku sekarang

Laman & pautan Standalone

Halaman responsif berjenama dengan URL tersendiri. Gunakan jemputan peribadi dan tarikh luput apabila setiap penerima memerlukan pautan terkawal. Perkongsian QR menghala ke pengalaman yang dihoskan ini.

Widget laman web

Saluran lama yang telah dipindahkan. Ia boleh menggunakan peraturan halaman, geografi, peranti, pelawat, tarikh, pensampelan, tempoh bertenang, lawatan dan kuota. Ia masih disokong oleh jambatan widget aktif lama sementara seni bina penggunaan sedang dibina.

Tertanam dalam garis

Tinjauan responsif yang diletakkan dalam halaman, portal, produk atau pusat bantuan. Ia tidak memerlukan Promotion Studio.

E-mel

Pada masa ini Studio boleh menjana HTML jemputan dan pautan peribadi. Penghantaran hujung ke hujung daripada kenalan/segmen CRM, dengan persetujuan, penindasan, penjadualan, cuba semula dan korelasi respons, ialah sasaran integrasi CRM Outreach yang diluluskan.

Desain dan pratinjau Enterprise

Halaman kaji selidik mempunyai tema milik kaji selitik dan keluarga susunatur halaman, kawalan responsif, salam dan salinan penyelesaian, dan pralihat draf yang ditandatangani. Pralihat perancang adalah lebar penuh di bawah editor, bukan rel sisi sempit. Ia menggunakan masa jalankan sebenar dalam bingkai kotak pasir dan menyokong lebar desktop, tablet dan telefon; laluan pralihat tidak menulis jawapan atau analisis.

💡
Survey Studio tidak bergantung pada Promotion Studio. Penyasaran, identiti, aset, paparan dan analitik semasa larian mestilah dimiliki oleh Survey. Kandungan promosi hanya boleh digunakan semula melalui salinan atau import eksplisit sekali sahaja yang mencipta data Survey yang berasingan; suntingan Promotion Studio kemudian tidak boleh memberi kesan.

Produk bentuk penuh

Penyaluran Independen

Aras

Satu tinjauan boleh mempunyai penggunaan halaman, widget, benaman, e-mel CRM, pautan peribadi dan QR yang diversikan secara berasingan, masing-masing dengan keadaan, reka bentuk, khalayak dan analitiknya sendiri. Setiap tinjauan boleh dijeda, dinyahdayakan atau dipadamkan.

Jangkauan CRM dan kempen

Aras

Bina khalayak yang disahkan daripada segmen CRM dan penyambung yang menyokong Survey, bekukan ia ke dalam versi yang tidak boleh diubah, keluarkan satu jemputan bertandatangan bagi setiap orang, dan hantar melalui penyambung e-mel keluar yang dipinkan dengan bukti penghantaran bagi setiap jemputan.

KATA dan validasi lapangan frekuensi

Aras

Peluncur, pilihan imej, muat naik fail, tandatangan, alamat, telefon, tajuk dan teks kaya, dengan panjang min/maks, praset e-mel/URL/nombor, teks ralat tersuai dan parameter URL pra-isi bagi setiap soalan.

Logika, rumus, hasil

Aras

Kumpulan syarat AND/OR, peraturan cabang, enjin formula yang selamat ke atas jawapan, dan julat skor yang membawa halaman hasilnya sendiri: kuiz berskor tiba pada keputusannya.

Bahasa, kios, prefill

Aras

Senarai juntai bahasa pelawat yang hanya menyenaraikan bahasa yang mempunyai terjemahan sebenar, mod kiosk untuk tablet kongsi (sasaran lebih besar, set semula automatik, tiada ubah hala), pembina pautan praisi, serta teks lencana selamat dan pengaki yang boleh disunting.

Tes Versi A/B

Aras

Terbitkan versi pencabar pada mana-mana penempatan dengan pembahagian trafik. Pelawat diberikan versi secara tetap, respons ditanda dengan versi yang benar-benar disajikan, dan jadual perbandingan menunjukkan respons, kadar penyelesaian dan skor purata bagi setiap versi. Naikkan pemenang dengan satu klik.

Bernage bersuapan Weekly

Aras

Emel mingguan dengan KPIs kaji selidik 7 hari terakhir, kaji selitik paling sibuk, Pulse Maklum Balas dan penerangan AI terkini, dihantar melalui sambungan keluar yang dipegang. Konfigurkannya dalam Pusat Penghantaran, Automatik.

Pimpinan

Aras

Senarai akses bagi setiap tinjauan mengehadkan siapa yang boleh mengedit, menerbitkan atau memadam sesuatu tinjauan. Kelulusan penerbitan (empat mata) memerlukan pentadbir kedua untuk melepaskan draf yang tepat; pengeditan menetapkan semula kelulusan. Pautan kongsi draf membolehkan penyemak melihat draf sebenar tanpa log masuk.

Platform pengembang untuk bandar

Aras

Kontrak Penyambung 2.2, tindakan surveys.* dan feedback.* bertaip pada api/v1, acara survey.* kanonik, webhook bertandatangan yang tahan lama dengan format geganti Slack dan Google Sheets, dan eksport PDF bagi satu respons.

Pertunangan pertumbuhan wanfan &

Analisis Survei dan Maklum Balas adalah produk yang berbeza

Survey Analytics menerangkan bagaimana sesuatu tinjauan itu sendiri sampai kepada orang dan berprestasi. Feedback menerangkan apa yang dikatakan oleh pelanggan merentas semua sumber yang dibenarkan dan apa yang patut dilakukan oleh perniagaan mengenainya. Kedua-dua produk dipautkan antara satu sama lain tetapi tidak berkongsi atau menulis ganti kebenaran analitik.

Analisis Survei

Dimasuki daripada tinjauan individu dalam Survey Studio, bukan daripada navigasi sisi global. Ia mengukur kelayakan, pendedahan, tingkah laku pencetus, permulaan, penyiapan, pengabaian, geseran soalan dan cabang, masa, hasil penggunaan/kempen/versi dan kebolehpercayaan masa jalan.

Gambaran Keseluruhan & Peti Masuk Maklum Balas

Satu suapan kronologi yang tahu kebenaran untuk jawapan Survei selesai, maklum balas widget lama, sembang dan tiket CSAT, respon balik tiket, penarafan jawapannya AI pelanggan, undi berguna pangkalan pengetahuan dan sumber luaran/suai yang diluluskan.

Analitik

. . Analyzes pelanggan yang berarti: tren metrik asli, topik/tema, sentimen, emosi, maksud, mendesak, permintaan, keluhan, pujian, perjalanan/produk/layanan/pelepasan segmen, detraktor dan hasil tertutup-loop.

Kepemilikan data berbobot

Sumber informasi yang dapat dibangun kembali sumber referensi dan sinyal, kemudian beban bukti yang diizinkan pada permintaan.

⚠️
Halaman Maklum Balas semasa masih mempunyai pelayar respons Tinjauan dan peti masuk widget lama yang berasingan, dan jumlah AInya belum lagi menggunakan model sumber ternormal yang penuh. Reka bentuk bersatu Gambaran Keseluruhan / Peti Masuk / Analitik / Sumber & kesihatan ialah sasaran pelaksanaan.

NPS, CSAT, CES, bintang, ibu jari dan kebergunaan mesti sentiasa mengekalkan kaedah, skala, sampel, tempoh tarikh dan penyebut asalnya. Ia tidak boleh sekali-kali digabungkan menjadi satu purata yang tidak dijelaskan.

Pertumbuhan & SEO

Studio Promosi

Promotion Studio menukar laman web anda menjadi enjin penukaran. Reka bentuk pop timbul, sepanduk, slaid masuk, bar atas/bawah, paparan skrin penuh, blok sebaris dan juga ubah hala berdasarkan negara, kemudian tunjukkan mesej yang betul kepada pelawat yang betul pada masa yang betul. Semuanya disampaikan melalui widget OpsIQ yang sudah ada di laman anda, jadi tiada apa-apa tambahan untuk dipasang. Anda boleh mereka bentuk dan menyimpan kempen pada bila-bila masa; ia hanya dipaparkan setelah anda Menerbitkannya dan studio dihidupkan untuk ruang kerja anda.

Studio Promosi
Pereka Promotion StudioPereka kempen visual dengan palet blok, pop timbul pada kanvas dan panel sasaran.Promotion Studio - PerekaBLOKxSelamat datang, {first_name}_!Dapatkan 15% Kau tidak boleh ikut perintah pertamamuSAVE15K K K K Kyaip kuponkuPENSASARANNegaraAmerika Serikat, CAPemicuKeluar-intentPisahkan A/B50 / 50Terbitkan1TAK BERDESAGMe_ngus blok ke kanvas2SASARANNegara, halaman, penonton3UkuranPemenang A/B + wawasan AI
Pereka visual: palet blok di sebelah kiri, kempen anda pada kanvas (di sini pop timbul kupon yang diperibadikan menggunakan token {first_name}), dan panel sasaran + terbitkan di sebelah kanan.

Gambar besar

Kempen

Apa

Satu promosi: pop timbul, sepanduk, bar, luncur masuk, skrin penuh, blok sebaris atau ubah hala geo. Setiap satu mempunyai matlamat: jualan, prospek, pendaftaran, sembang, tinjauan, pengumuman.

Versi Desain &

Bagaimana

Anda membina rupa dalam editor visual. Setiap simpanan mencipta versi baharu, jadi anda sentiasa boleh kembali ke versi sebelumnya. Tiada apa yang akan hilang.

Target

WhoNone

Siapa yang melihatnya: negara, halaman, peranti, sumber trafik, pelawat kembali berbanding baharu, jadual, dan (dengan penyambung) pelanggan anda yang log masuk.

Pencetus

Bila

Bila ia muncul: serta-merta, selepas kelewatan, semasa menatal, pada niat keluar, semasa melahu, apabila diklik, selepas N halaman, atau daripada aktiviti sembang / tiket.

Analitik

Hasil

Tera langsung, kadar klik, penukaran, corong keciciran, pecahan mengikut negara / halaman / peranti, pemenang A/B dan pandangan AI.

Luncurkan promosi pertama Anda dalam 5 langkah

1
Mula dari templat atau kosong

Buka Promotion Studio dan klik Kempen baharu, atau pilih reka bentuk siap sedia daripada galeri Templat. Draf akan dibuka dalam pereka.

2
Desain itu

Seret masuk blok, tajuk, teks, butang, imej, lencana, statistik, pemasa kiraan mundur, borang, kupon, video, penilaian, roda putar. Gayakan warna, kecerunan dan kesan 3D dengan peluncur. Pratonton Desktop / Tablet / Mudah Alih, dan gunakan Gerak bebas untuk meletakkan apa-apa sahaja di mana-mana.

3
Kepribadian itu

Taip token seperti {first_name}, {country} atau {company} ke dalam mana-mana teks. Semasa dipaparkan, token itu menjadi nilai sebenar pelawat.

4
Sasaran & pemicu

Pilih siapa yang melihatnya (negara, halaman, peranti, khalayak) dan bila ia dicetuskan (lengahan, tatal, niat keluar). Biarkan peraturan kosong untuk bermaksud semua orang.

5
Cek, kemudian terbitkan

Klik Semak untuk imbasan pra-lancar pantas, kemudian Terbitkan. Ia akan hidup dalam beberapa saat dan mula mengumpul analisis.

Blok yang boleh anda bina

Kandungan _Nobal

Inisi

Kepala, paragraf, daftar, kutipan, gambar, ikon, lencana, statistik, pembagi dan ruang, blok bangunan dari pesan apapun.

Panggilan untuk tindakan

Inisi

Butang dengan tindakan sebenar: buka pautan, mulakan sembang, cipta tiket, salin kupon atau lompat ke satu halaman.

Kesusahan & penangkapan

Premium

Penghitung quedown, formulir (email / telepon / teks), kupon terkutip dan pita video.

Gamifikasi & maklum balas

Premium

Roda putar-ke-menangan, kartu goresan, rating bintang NPS / dan corong multi langkah.

Susun atur & kesan

Premium

Lajur, bar kemajuan, perkongsian sosial, penanda bukti sosial, dua langkah ya/tidak, kuiz, dan kesan 3D, condong, cahaya, paralaks, glassmorphism.

Token Personalisasi

Ini adalah daftar atau kutipan.

Token yang tersedia vinada
From the visit:   {country} {city} {device} {page_path} {utm_source} {referrer}
From your CRM:    {first_name} {last_name} {email} {company} {segment} {lifecycle_stage}
From a connector: {balance_due} {unpaid_invoices}   (logged-in customers only)

Referensi Target Baru

Lokasi

Paparkan hanya di (atau sembunyikan daripada) negara, bandar atau zon waktu yang dipilih melalui GeoIP. Sesuai untuk tawaran khusus wilayah atau ubah hala geo.

Halaman & URLs_

Batasi halaman tertentu dengan menggunakan sama dengan / dimulai-dengan / berisi / regex, dan abaikan halaman juga.

Peranti

Desktop, tablet atau mobile, misalnya sebuah batang langsing pada mobile, modal pada desktop.

Jenis lawati

Æð New, return, dikenal (dalam CRM Anda) atau anonim; segmen CRM, tahap daur hidup, skor utama atau bahasa peramban.

Sumber lalu lintas

Mengikut UTM (utm_source, utm_campaign) atau laman web perujuk, contohnya hanya pelawat daripada iklan tertentu.

Frekuensi Jadwal &

Tarikh mula / tamat, tetingkap masa dalam sehari, dan berapa kerap seseorang boleh melihatnya (setiap sesi, setiap hari, selepas mereka menutup / mengklik / menukar).

Lalu lintas A/B tercerai

Dari audiote yang datang dan menjalankan varian head-to-head; orang yang sama selalu melihat varian yang sama.

Penonton (dilog masuk)

Dengan penyambung diaktifkan, target oleh live account state, misalnya pelanggan dengan invoice yang tidak dibayar, atau pelanggan aktif.

Pencetus

Pilih cara promosi dipaparkan: Serta-merta, selepas kelewatan, pada kedalaman tatal, pada niat keluar, semasa melahu, apabila sesuatu elemen diklik, selepas beberapa halaman dilihat, apabila borang ditinggalkan, atau daripada aktiviti sembang / tiket. Pembangun boleh mencetuskannya daripada kod mereka sendiri dengan window.OpsIQPromo.fire('event').

Sasarkan pelanggan yang log masuk (penyambung)

Inilah yang menjadikan promosi OpsIQ istimewa: sambungkan platform seperti WHMCS (atau mana-mana penyambung yang menyokong khalayak) dan studio boleh menyasarkan pelawat mengikut keadaan akaun langsung mereka.

1
Tonton penyambung penonton

Di bawah Penyambung, dayakan penyambung yang mendedahkan fakta khalayak (WHMCS melakukannya secara terus). Pelanggan dikenali dengan selamat apabila log masuk ke platform tersebut, OpsIQ tidak pernah mempercayai e-mel yang ditaip.

2
Tambahkan peraturan penonton

Dalam Penyasaran > Khalayak kempen, wajibkan log masuk dan tambah peraturan seperti invois belum dibayar >= 1, langganan tertunggak, atau kredit akaun > 0.

3
Kepribadian dengan data mereka

Guna token seperti {first_name} atau {balance_due} Sebuah "Anda mempunyai invois terlambat" peringatan menulis dirinya.

✅
Sasaran khalayak adalah selamat daripada kegagalan: jika penyambung tidak dapat mengesahkan sesuatu fakta (atau pelawat tidak log masuk), promosi itu tidak dipaparkan, jadi tawaran yang disasarkan mengikut pengebilan tidak akan sampai kepada orang yang salah. Membina penyambung anda sendiri? Lihat "Sasaran khalayak promosi" di bawah.

Perdagangan berkoneksi (tenaga super studio)

Kad produk daripada kedai anda

Data langsung

Blok Produk menarik item sebenar (nama, harga, harga jualan, imej, pautan) terus dari WHMCS, WooCommerce, Shopify atau anda OpsIQ bil. Tandakan "Kekal segar" dan kad mengemaskini harga dari platform setiap jam semasa diterbitkan.

Kupon yang disediakan oleh kedai

Kupon

Blok kupon boleh mencipta kod diskaun sebenar di kedai anda sebaik sahaja anda menerbitkan, jadi kod yang didedahkan kepada pelawat sentiasa berfungsi semasa pembayaran.

Pendapatan pesanan-kebenaran

Atribusi Ubi

Pesanan sebenar daripada platform anda dipadankan semula dengan kempen setiap jam (melalui kod kupon yang digunakan atau e-mel prospek) supaya hasil yang anda lihat datang daripada jualan sebenar, bukan anggaran.

Bukti sosial nyata

Kepercayaan

Penanda bukti sosial boleh dimulakan dengan pesanan terkini yang tulen ("Ada memesan Starter Plan · 2j lalu"), nama pertama dan item sahaja, tidak sekali-kali e-mel atau jumlah.

Eksperimen ulir & perjalanan

A/B variant & auto-winner

Bahagikan trafik merentas varian reka bentuk; biarkan studio menaikkan pemenang statistik secara automatik, atau serahkan trafik kepada pengoptimum bandit yang mengalihkan pelawat ke arah yang menukar apabila bukti terkumpul.

Peningkatan holdout

Simpan sebahagian pelawat yang tidak melihat apa-apa, supaya anda boleh membuktikan bahawa kempen itu sendiri yang menyebabkan peningkatan.

varians Segmen

Kandungan berbeza bagi setiap khalayak dalam kempen yang SAMA (pelawat mudah alih, troli besar, pelanggan yang kembali), setiap segmen mendapat versinya sendiri.

Eksperimen Pemicu Uber

Varianwan juga dapat menguji KETIKA untuk muncul: langsung vs tertunda vs keluar-intent, diukur head-to-head.

Perjalanan (berrantai)

Sasarkan berdasarkan apa yang dilakukan seseorang dengan kempen lain ("melihat kempen A tetapi tidak menukar") untuk membina urutan promosi berbilang langkah.

Teh

Pil kecil yang boleh dibuka semula oleh pelawat selepas menutup kempen, jadi pop timbul yang ditutup tidak hilang selama-lamanya.

Ketahui apa yang berlaku

Klik peta panas

Pereka Bentuk

Dalam pereka, togol peta haba untuk melukis klik pelawat sebenar di atas setiap blok reka bentuk anda.

Saluran langkah antah

Saluran

Kempen berbilang langkah menunjukkan dengan tepat di mana orang tercicir, skrin demi skrin.

Bandingkan kempen

Studio

Letakkan sehingga empat kempen bersebelahan (tera, klik, penukaran), dengan nilai terbaik diserlahkan.

Cerita bercerita dan cernaan bersuapan bersuap

AIAI

Setiap Isnin, satu ringkasan akan muncul dalam pemberitahuan anda; butang cerita mingguan 📖 menulis ringkasan bahasa mudah dengan langkah seterusnya bila-bila masa anda mahu.

Bekerja dengan nyaman

Ide copilot &

Bersembang dengan kopilot reka bentuk untuk mengedit kanvas ("jadikan tajuk utama mendesak, tambah pemasa kiraan undur"), dapatkan idea kempen daripada data trafik anda sendiri, terjemahkan kempen mengikut negara, atau baiki skor reka bentuk yang rendah secara automatik.

Import Kit Brand

Satu perintah ifiah membaca website Anda dan mengusulkan warna merek asli dan font; simpan dan setiap pemilih mengarah dengan mereka.

Corong berbilang skrin

Blok Steps mendapat penyuntingan sebenar bagi setiap skrin: tab untuk setiap skrin, tambah atau susun semula skrin, dan pratonton turut mengikut.

Versi & kehadiran bernama

Namakan versi penting ("Calon pelancaran"), pulihkan mana-mana versi, dan lihat amaran apabila rakan sepasukan sedang menyunting kempen yang sama.

Garis & penguasa peranti

Lihat desktop, tablet dan mobile secara berdampingan dalam satu pandangan; togolkan para penguasa piksel untuk penempatan yang tepat.

Saluran & halaman palsu

Setiap kempen juga boleh menjadi halaman kendiri yang dihoskan untuk bio dan kod QR, urutan titisan e-mel untuk prospek yang dikumpul, atau draf tolak web satu klik.

Keselamatan peringkat enterprise

¡Terbitkan jendela beku (change-freeze period), sebuah jeda darurat switch-all, persetujuan, jejak audit dan versi rollback.

Apa aku perlu menambahkan kode ke situsku?+

Promosi akan disampaikan oleh widget OpsIQ yang sama yang sudah anda pasang.

Adakah pelawat akan melihat pop timbul yang sama berulang kali?+

Tidak. Tetapkan had kekerapan (setiap sesi / setiap hari, atau berhenti selepas seseorang menutup, mengklik atau bertukar). Lalai yang munasabah digunakan.

Siapa yang boleh menerbitkan?+

Penerbitan, penjedaan, pengarkiban dan pengembalian semula terhad kepada pemilik ruang kerja dan pentadbir penuh. Mana-mana ahli pasukan boleh mencipta dan mereka bentuk draf.

Pertumbuhan & SEO

Perancang Promosi

Promotion Designer ialah editor blok responsif untuk membina, menyemak, membuat versi dan menerbitkan pengalaman kempen.

Skrin produk
Perancang PromosiPereka menggabungkan kanvas langsung, pratonton peranti, blok, pemboleh ubah pemperibadian, ulasan dan sejarah versi.Perancang Promosiruang kerjaVIEWPORTDesktopVERSI UNGKAPANv12KETAMAANDrafORANG KERJA HIDUPBlok HeroKepala Keluarga, media dan CTASuntingTawaran blokKeterbatasan dan batas waktuSuntingPersonalisasiKekerapan dan kempen variabelSiapCek peluncuran dan peluncuranKomentar dan validasi hirokataUlasan1BUILD BLOCKSedit bentangan langsung2YEHUWADesktop, tablet, mudah alih3PUBLISHVersi terjemahan rilis
Pereka menggabungkan kanvas langsung, pratonton peranti, blok, pemboleh ubah pemperibadian, ulasan dan sejarah versi.

Guna blok untuk menyusun pengalaman, pratinjau setiap viewport yang didukung dan sisipkan variabel personalisasi yang disetujui. Review komentar dan AI-media terbukti sebelum peluncuran. Menyimpan versi sehingga desain sebelumnya dapat diperiksa atau dipulihkan.

Pertumbuhan & SEO

Templat promosi

Templat menyediakan galeri permulaan yang boleh dicari dan dikategorikan untuk kempen Promotion Studio.

Skrin produk
Templat promosiGaleri templato menyaring tata letak premium dan menerapkan warna merek area kerja ketika sebuah templat menjadi draft.Templat promosiruang kerjaKATEGORIPenukaranRESULTS24JENAMADiterapkanORANG KERJA HIDUPTawaran keluarKekebalan dengan urgensi dan KTAPratontonSambutan pelawat baharuDaftar manfaat dan manfaatPratontonPelancaran produkPahlawan, bukti dan hitung mundurPratontonPermintaan feedbackPrompt survei CompactPratonton1FILTERKategori dan pencarian2YEHUWAPeriksa desain lengkapnya.3USEAis
Galeri templato menyaring tata letak premium dan menerapkan warna merek area kerja ketika sebuah templat menjadi draft.

Pencarian atau penyaring berdasarkan kategori, muat hasil tambahan, pralihat pengalaman lengkap, kemudian pilih Guna templat. Kempen baharu kekal sebagai draf dan boleh diubah dalam Promotion Designer sebelum diterbitkan.

Pertumbuhan & SEO

Promosi anasir

Analitik promosi menghubungkan tera dan klik kepada penukaran, konteks khalayak, hasil tindakan penyambung dan pembelajaran kempen.

Skrin produk
Promosi anasirAnalitik promosi memaparkan prestasi utama, pecahan khalayak dan pencetus, eksport bakal pelanggan dan hasil tindakan penyambung.Promosi anasirruang kerjaIMPRESSIONS42.8kKTR6.4%CONVERSIONS814ORANG KERJA HIDUPNegaraBritania Raya · 31%_KehancuranHalaman/pricing · 22%KehancuranPemicuKeterbatasan keluar fyter_ 44%KehancuranTindakan penyambungCoupon diciptakan · 97% KejayaanUjilat Outcome1UkuranTera kepada penukaran2SLICEHalaman, negara, peranti3LEARN\"Ajari\"
Analitik promosi memaparkan prestasi utama, pecahan khalayak dan pencetus, eksport bakal pelanggan dan hasil tindakan penyambung.

Baca tera, kadar klik lalu dan penukaran bersama-sama. Pecahkan hasil mengikut negara, halaman, pencetus dan peranti; eksport prospek yang ditangkap apabila perlu. Hasil tindakan penyambung menunjukkan sama ada tindakan susulan yang dijanjikan oleh promosi benar-benar dijalankan. Ringkasan cerapan dan pembelajaran AI patut dianggap sebagai hipotesis untuk disahkan, bukan bukti automatik.

Pertumbuhan & SEO

Pengumuman

Pengumuman menerbitkan mesej dalam ruang pemberitahuan widget dengan penyasaran, jadual dan seruan tindakan secara pilihan.

Skrin produk
PengumumanEditor Pengumuman merangkumi kandungan, CTA, khalayak, segmen, peraturan halaman, tarikh aktif dan gaya visual.Pengumumanruang kerjaKASIH3AUDIENCESegmenTAJUKJul 22–29ORANG KERJA HIDUPGelaranPenyelenggaraan perencanaan borosSiapKandungan _NobalMesej MarkdownSiapCTABaca berita terbarunya.PilihanPeraturanHalaman - halaman yang sangat menentukan · pelanggan aktifSasaran1WRITETajuk dan Markdown2SASARANKecantikan, segmen, halaman3TAJUKJendela aktif
Editor Pengumuman merangkumi kandungan, CTA, khalayak, segmen, peraturan halaman, tarikh aktif dan gaya visual.

Pilih semua pelawat, pelawat yang telah log masuk atau pelawat baharu; secara pilihan, kecilkan khalayak dengan segmen kenalan dan peraturan halaman. Tetapkan tarikh aktif dari/aktif hingga dan bendera aktif. Pratetap gaya dan warna premium mengubah persembahan tetapi tidak menggantikan kandungan yang jelas.

Pertumbuhan & SEO

Kempen tolak

Kempen push menghantar pemberitahuan pelayar kepada pelawat yang melanggan selepas mereka meninggalkan laman.

Skrin produk
Kempen tolakKomposer dorong menunjukkan jangkauan langganan, konten, media, tindakan, aturan sasaran dan keadaan jadwal.Kempen tolakruang kerjaSUBSCRIBERS8,214SAST31.6kCLICK RATE5.8%ORANG KERJA HIDUPGelaranKeretamu menungguSiapBadanKembali hari ini untuk penghantaran percumaSiapCTAGerobak OpenSiapJadwalHantar sekarang atau dijadualkanDraf1PREPARE PUSHGelaran, tubuh, ikon2SASARANKecantikan, segmen, halaman3SENDSekarang, jadwal atau draft
Komposer dorong menunjukkan jangkauan langganan, konten, media, tindakan, aturan sasaran dan keadaan jadwal.

Konfigurasikan kunci Web Push terlebih dahulu di bawah tetapan Web Push. Kempen boleh merangkumi tajuk, kandungan, ikon, imej utama, lencana, CTA dan sehingga dua butang tindakan; pemberitahuan berterusan kekal sehingga pelawat berinteraksi dengannya.

Sasarkan mengikut khalayak, segmen kenalan pilihan dan peraturan halaman. Simpan draf, jadualkan atau hantar serta-merta. Gunakan metrik langganan dan klik untuk menilai capaian. HTTPS dan service worker yang dihoskan dengan betul diperlukan pada laman web pihak ketiga yang dibenamkan; lihat Web Push pada laman web pihak ketiga.

Pertumbuhan & SEO

Pesan proaktif

Mesej Proaktif menghubungi secara automatik sebaik sahaja tingkah laku pelawat sepadan dengan sesuatu peraturan, sebelum mereka bertanya. Anda membina setiap satu sebagai peraturan dengan tiga bahagian: apa yang patut berlaku, bila ia patut dicetuskan, dan berapa kerap. Semuanya dihantar melalui widget OpsIQ yang sudah ada di laman web anda.

Proaktif Minimal
Pesan proaktifA komposer proaktif-rule dalam tiga bagian: memilih tindakan (chat, banner, tour, push, email), menambahkan kondisi, dan menetapkan pendinginan frekuensi.Pesan-pesan Proaktifruang kerjaTindakan1 ·Pesan chatBannerPerlumbaanTolakE-mel2 · Kondisipage = /pricingWaktu di halaman > 20s_kembali3 Frekuensi status tidak diketahuiSatu kali per sesiStatus1TINDAKANSembang, sepanduk, e-mel, push…2CONDITIONSHalaman, waktu, skor, kembali3FREQENSITempoh bertenang bagi setiap pelawat
Setiap aturan proaktif adalah tiga pilihan: apa yang terjadi (chat, banner, tour, push, email, webhook), kapan (kondisi), dan seberapa sering (cooldown).

Tiga bagian dari sebuah aturan

1
Apa yang seharusnya terjadi (tindakan)

Paparkan gelembung sembang atau sepanduk pada halaman, mulakan Lawatan Berpandu, hantar push web atau e-mel, tugaskan kepada jabatan, atau cetuskan webhook. Token seperti {{visitor_name}} dan {{page_title}} menjadi nilai sebenar.

2
Bila ia patut dicetuskan (syarat)

Hadkan siapa yang mencetuskannya: halaman/URL, masa di halaman, kedalaman tatal, skor prospek, kembali berbanding baharu, melahu. Tanpa syarat, peraturan itu dicetuskan untuk setiap pelawat. Tambahkan sekurang-kurangnya satu untuk menyasarkannya. Syarat digabungkan dengan AND.

3
Seberapa sering (frekuensi)

¡Ditetapkan pendinginan sehingga orang yang sama tidak terganggu, misalnya sekali per sesi atau sekali per hari. setiap aturan memiliki status on/off.

⚠️
Togol ruangkerja "Lakukan peraturan masa/idle setiap jam" membolehkan tindakan sisi-pelayan (emel, tolak, webhook, tajuk) dinyalakan pada jadual untuk kenalan yang diketahui yang semasa ini tidak berada pada halaman, jadi anda boleh "emel lead panas idle" secara automatik. Ia memerlukan cron OpsIQ berjalan. Tinggalkannya mati jika anda hanya mahu tekan segar pada halaman.
Akankah api untuk semua orang?+

Hanya jika anda tidak menambah sebarang syarat. Tambah sekurang-kurangnya satu syarat (halaman, skor prospek, pelawat kembali…) untuk menyasarkan pelawat yang betul.

Apa kaitan ini dengan arus dan tur?+

Mereka bekerja sama: aturan proaktif dapat memulai Tour Guided, dan sebuah Chatbot Flow dapat dipicu oleh aturan proactive. Mulai dengan aturan pesan- chat tunggal, kemudian melapisi yang lain.

Pertumbuhan & SEO

mengalir ing-ing

Chatbot Flows menyusun skrip perbualan bercabang di dalam widget sembang anda (ucapan salam, jawapan kata kunci, laluan berpandu) tanpa kod. Aliran ialah satu set langkah yang bersambung (nod): anda bertanya satu soalan, pelawat memilih satu pilihan, dan aliran menghantar mereka ke cabang yang sepadan. Hanya aliran Aktif dijalankan pada laman web anda.

Bagaimana cara kerjanya
mengalir ing-ingKanvas aliran: nod ucapan aluan bercabang kepada tiga butang pilihan, setiap satu membawa ke langkah seterusnya, mencari pesanan, atau menyerahkan kepada manusia.AluHai! Apa yang boleh saya bantu?Jejak pesanan sayaSoalan pengebilan¡Ched to a humanCarilah perintah→ Agen manusiaPencetus: Ucapan alu-aluan · Kata kunci · Manual · Selepas butiran · Apabila sembang tamat
mengalir ing-ing

Aliran Furut vs AI · ketika digunakan yang

Guna aliran

Apabila laluan boleh diduga dan anda mahu ia sama setiap kali: langkah tempahan, wizard pulangan, pemilih "rancangan mana?", mengumpul e-mel sebelum penghantaran. Aliran tidak pernah improvisasi.

Gunalah AI

Apabila soalan terbuka, "adakah ini berfungsi dengan setup saya?". AI Chat Pelanggan menjawab dari pengetahuan yang dilatih anda. Aliran boleh menyerahkan kepada AI (atau manusia) pada mana-mana langkah.

Pencetus

Alu

Berjalan sebagai mesej pembuka apabila pelawat membuka sembang buat kali pertama.

Katakunci

Dijalankan apabila pelawat menaip perkataan yang anda senaraikan (cth. bayaran balik, harga, batal).

Selepas butiran / Selepas kelewatan

Bermula sebaik sahaja butiran hubungan dikongsi, atau selepas tempoh tertentu dalam perbualan.

Semasa sembang tamat / Proaktif

¡Dilaksanakan sebagai chatting membungkus (misalnya peringkat), atau dimulai oleh peraturan Proactive Message.

Bina satu dari empat langkah

1
Cipta aliran

Klik Aliran Baru, namakan, pilih jenis pemicu (dan kata kunci jika Kata Kunci), simpan. Mulai dimatikan.

2
Buka kanvas

Klik Edit Kanvas. Pembina visual tempat anda menambah langkah (mesej, soalan dengan butang, cabang) dan menyambungkannya.

3
(Dan cabang-cabang) dari tanah liat, yaitu ranting-ranting dan ranting-bengkel yang ada di dalamnya (dan daun-daunan)

Untuk setiap pilihan, menarik cabang ke langkah berikutnya.

4
Hidupkannya

Klik Hidupkan. Aliran akan hidup dalam widget anda dengan serta merta. Lumpuhkan bila-bila masa tanpa kehilangan reka bentuk.

mengalir Do menggantikan AI?+

Tidak. Kedua-duanya berjalan bersebelahan. Gunakan aliran untuk laluan yang boleh dijangka dan AI untuk soalan terbuka; aliran sentiasa boleh menyerahkan kepada salah satu daripadanya.

Pertumbuhan & SEO

Tur pemanduan

Lawatan Berpandu ialah panduan langkah demi langkah yang menunjuk ke bahagian halaman anda dengan gelembung pertuturan dan lampu sorot, membimbing pelawat melalui orientasi atau ciri baharu. Ia bertema sepenuhnya dan dibina dalam pereka visual dengan pratonton langsung. Lawatan hanya dijalankan apabila ia ditandakan Aktif.

Bagaimana cara kerjanya
Tur pemanduanHalaman yang dimalapkan dengan gelang sorotan di sekeliling butang Tambah urus niaga dan gelembung ucapan bertema yang berbunyi Langkah 1 daripada 4 dengan butang Seterusnya.Perjanjian tambahanSTEP 1 ATAU 4Cipta urus niaga pertama andaKlik di sini untuk menambahkan kesepakatan ke pipa Anda.Next→
Tur pemanduan

Bagaimana tur dibangun

Langkah-langkah

Setiap langkah menyasarkan satu elemen dan menunjukkan gelembung dengan teks anda. Tambah seberapa banyak hentian yang diperlukan oleh panduan langkah demi langkah dan susun mengikut urutan.

Tema Praset &

Mulai dari praset atau desain gelembung sendiri (warna, gradien, sorotan) dengan pratayang langsung di sebelah kanan.

Pemicu

Secara pilihan, pautkan Peraturan Proaktif supaya lawatan berpandu bermula secara automatik apabila peraturan itu dicetuskan (cth. lawatan pertama pelawat yang kembali ke papan pemuka).

Tool yang aktif

Tur A hanya boleh dijalankan sementara Active dicentang. Tak perlu membawanya turun tanpa menghapusnya.

Bina satu dari empat langkah

1
Tur baru

Klik Lawatan Berpandu Baharu, namakannya, dan secara pilihan pautkan Peraturan Proaktif supaya ia bermula secara automatik.

2
Langkah pertama

Tambahkan setiap hentian: pilih elemen yang dituju dan tulis teks gelembung. Susun ulang sampai jalur mengalir.

3
Desain itu

Ambil praset atau gaya gelembung sendiri.

4
Membiarkan

Tikik Aktif dan simpan. tur sekarang dapat dijalankan, dengan pemicunya sendiri, atau dimulai oleh aturan Proactive Message.

Bagaimana tur dimulai?+

Melalui pencetusnya sendiri, atau melalui tindakan "Lawatan berpandu" dalam peraturan Mesej Proaktif, jadi anda yang menentukan pelawat mana melihat lawatan mana dan bila.

Pertumbuhan & SEO

Sasaran penukaran

Matlamat Penukaran menukar aktiviti yang penting kepada anda (peristiwa webhook masuk, mesej sembang, penyelesaian tiket) menjadi penukaran yang direkodkan dengan atribusi penuh. Apabila aktiviti itu dicetuskan, OpsIQ merekodkan penukaran terhadap kenalan dan mengaitkannya kembali dengan kempen, segmen dan sumber yang membawa ke situ.

Bagaimana cara kerjanya
Sasaran penukaranAliran matlamat: peristiwa webhook payment. succeeded menjadi konversi "beli" direkodkan bernilai $49, dihubungkan kepada sumber dan kampanyenya, dengan chip praset permulaan pantas di atas.Cepat mulai_NafiStripe pembelianBuku demo milik Universitas Negeri ThronePenyamukuan Surat Kabarpayment.succeededBidik web yang tidak masuk akalPenukaran"beli" · $49Atributsumber · kempen
Sasaran penukaran

Tentukan tujuan dalam tiga langkah

1
Ambil aktivitas pemicunya.

Klik tujuan konversi baru. Pilih jenis aktivitas yang dihitung sebagai konversi, atau gunakan preset awal-cepat, pembelian Stripe, Demo dipesan, penandatanganan Newsletter atau Langganan dimulai.

2
Nama itu dan menetapkan nilai

Æberi nama konversi (pembelian, buku demo, pendaftaran) dan secara opsional nilai tetap dan jendela atribusi.

3
Simpan

Mulai saat itu, setiap kali aktivitas kebakaran, OpsIQ Rekan-rekam konversi terhadap kontak dengan atribusi ke sentuhan sebelumnya.

✅
Matlamat sudah disambungkan kepada webhook masuk: sebarang matlamat yang pencetusnya sepadan dengan jenis peristiwa masuk akan dicetuskan secara automatik sebaik sahaja peristiwa itu tiba. Gunakan halaman Webhook Masuk untuk menyambungkan Stripe, Calendly atau mana-mana sistem yang boleh menghantar POST JSON.
Apakah yang boleh menjadi penukaran?+

Sebarang aktiviti yang direkodkan: peristiwa webhook masuk (payment.succeeded), tangkapan e-mel sembang, penyelesaian tiket, apa sahaja pada garis masa kenalan.

Analitik

Papan dashboards

Papan Pemuka Tersuai membolehkan anda membina paparan anda sendiri bagi metrik yang penting, dan bukannya bergantung hanya pada Gambaran Keseluruhan standard. Tambah widget yang anda mahu, seret dan ubah saiznya mengikut susun atur yang anda suka, simpan, dan kongsikannya dengan pasukan anda.

Papan dashboards
Papan dashboardsPembina papan pemuka dengan jubin widget KPI dan carta, zon lepas bergaris putus, dan butang Tambah widget.Papan Dash Kebiasaanruang kerjaDashboard SayaBezaid + Tambah widgetVISTORS2,481PELAYAN$8.2kTRAFFICDi sini, dia akan menyeret widgetMUKA TOP/pricing/docs/signup1ADD WIDGETSTangga lagu Tik metriks &2ARRANGEPulihkan & saiz semula3BERKAITANBersama timmu
Bina papan anda sendiri: tambah widget KPI, carta dan senarai, seret dan ubah saiznya mengikut susun atur yang anda mahu, kemudian kongsikannya dengan pasukan.

Bina satu dari tiga langkah

1
Wiget tambahan

Klik Widget Tambah dan pilih metrik atau bagan yang ingin anda lacak. Ulang semua yang anda inginkan di papan tulis.

2
Atur bentangan

widget drag untuk reposisi dan seret tepi mereka untuk mengubah ukuran. KPIs di atas, bagan di bawah. apapun yang terbaik.

3
Simpan & berbagi

Simpan papan pemuka dan kongsikannya dengan pasukan anda supaya semua orang memantau angka yang sama.

✅
Jaga papan terpisah untuk kerja-kerja terpisah (kaunter "lihat sehari" dengan kiraan hidup, dan kaunter "tinjauan bulanan" dengan carta trend) supaya masing-masing tetap fokus.
Pertumbuhan & SEO

Kempen jangkauan

Outreach ialah enjin e-mel 1:1 dan pukal OpsIQ: tulis mesej yang diperibadikan atau jalankan kempen kepada segmen CRM, dengan pengesanan balasan, kawalan masa penghantaran, penjejakan buka/klik, piksel penjejakan dan nyahlanggan satu klik. Ia dikawal oleh persetujuan dan mematuhi CAN-SPAM / CASL.

Ke Luar Negeri
Kempen jangkauanSkrin Outreach dengan tab Composer/Campaigns/Templates/Replies dan jadual kempen yang menunjukkan bilangan dihantar, kadar buka dan kadar balas.Ke Luar Negeriruang kerjaKempenPenggubahTemplateBalasanKEMPENSASTBukaRUPLYSurat kabar Juni1,20048%7%Tindak lanjut percobaan34062%14%¡Win-back82039%5%Pengesanan balasan menghentikan susulan secara automatik · nyahlanggan dengan satu klik pada setiap penghantaran11:1 & BULKKarang atau kempen2TRACKEDBukaan, klik, balasan3COMPLIANTLangganan Un langgan dibangunkan dalam
Enjin Jangkauan: hantar secara 1:1 atau jalankan kempen kepada satu segmen, jejak bukaan dan balasan, dan kekal patuh dengan pengesanan nyahlanggan dan balasan terbina dalam.

\"4 Tab\"

Penggubah

Write a personalised1:1E-mail dengan {tokens} Dari kontak dan CRM.

Kempen

Hantar ke segmen CRM, berjadual atau sekarang, dengan had dan kawalan masa penghantaran.

Template

Templat pesan yang dapat dikembalikan untuk pengulangan jarak jauh.

Balasan

Pengenal jejak deteksi balasan palsu mencatat respon dan auto-stop tindak lanjut kepada siapa saja yang menjawab.

Cara kempen berjalan

1
\"Tak Ada Penonton\"

Pilih segmen CRM (atau muat naik senarai). Penindasan dan persetujuan diterapkan secara automatik.

2
Gubah

¡Oinza menulis pesan dengan token pribadi; pratinjau terhadap kontak nyata.

3
Jadual & hantar

Hantar sekarang atau pada masa terbaik. Piksel penjejakan merekodkan bukaan; klik dan balasan diatribusikan.

✅
Jangkauan bergantung pada persetujuan dan senarai sekatan, menyertakan pautan berhenti melanggan satu klik pada setiap penghantaran, dan mematuhi CAN-SPAM / CASL. Balasan menghentikan susulan selanjutnya secara automatik.
Analitik

Laporan yang dijadwalkan

Laporan Berjadual menghantar set metrik pilihan melalui e-mel kepada penerima pilihan mengikut jadual (harian, mingguan atau bulanan) sebagai PDF label putih yang boleh dicetak. Tetapkan sekali dan laporan akan tiba di peti masuk secara automatik melalui cron OpsIQ.

Laporan yang dijadwalkan
Laporan yang dijadwalkanSkrin laporan berjadual: jadual laporan dengan jadual waktu, penerima dan masa terakhir dihantar, serta butang Simpan laporan.Laporan yang Dijadwalkanruang kerjaLaporan yang dijadwalkanLaporan SimpanORANGTAJUKRECKIPIENTSAWASTLalu lintas mingguanMon9:00team@acme.com2d laluLaporan klien SEOAustraliaclient@shop.ioKehajar Jun 1_Ringkasan penjualanHarianowner@acme.comtodayDibebaskan sebagai label putih PDF Melalui OpsIQ Fiji cron1AUTOMATEDSetiap hari · mingguan · bulanan2WHITE-LABELPDF Ke pelanggan3RECKIPIENTSEmel sesuai jadwal
Tetapkan laporan sekali (set metrik, julat, jadual, penerima) dan OpsIQ menghantar PDF label putih melalui e-mel secara automatik mengikut kekerapan anda.

AKAN membuat laporan

1
Pilih apa yang hendak dihantar

Pilih set metrik (trafik, SEO, jualan, sokongan…) dan julat tarikh.

2
Set jadwal & penerima

Harian, mingguan atau bulanan, pada waktu yang Anda pilih, kepada satu atau lebih penerima surel.

3
Simpan

Simpan dan dayakan. Laporan dijana dan dihantar melalui e-mel dengan sendirinya mengikut jadual, tanpa langkah manual.

💡
Laporan berjadual dijalankan melalui cron OpsIQ, jika laporan tidak tiba, pastikan cron sedang berjalan (lihat Cron dan automasi).
Privasi

Kepatuhan kerahsiaan

Halaman Privasi & Pematuhan ialah satu-satunya tempat untuk menunjukkan kepada juruaudit bahawa anda mengendalikan data peribadi secara bertanggungjawab: lejar persetujuan, log akses pentadbir, kediaman data dan dasar pengekalan anda, serta DPA yang sedia untuk dicetak, dalam satu paparan bertab. Hanya pentadbir penuh boleh membukanya.

Kepatuhan kerahsiaan
Kepatuhan kerahsiaanSkrin Privasi & Pematuhan: tab untuk Lejar persetujuan, Log akses, Residensi dan DPA, dengan jadual lejar persetujuan yang menunjukkan pemberian dan penarikan balik mengikut saluran.Kepatuhan Privasi &ruang kerjaBuku besar KonsenLog akses technicalKeperluanDPAKONTACTKANINTINDAKANTARIKHjane@acme.comE-mailDikabulkanKehajar Jun 12_m.osei@shop.iopushBatalKehajar Jun 10_rita@studio.comarketingDikabulkanKehajar Jun 9_Bukti yang dapat dicari dari setiap persetujuan hibah dan dibatalkan, melalui saluran1KONSENT LEDGERBukti dari setiap hibah2ACCESS LOGAndika menyentuh data3DPATemplat dapat dicetak
Satu skrin sedia untuk juruaudit: lejar persetujuan yang boleh dicari (pemberian/pembatalan mengikut saluran), log akses tentang siapa yang menyentuh data, tetapan lokasi penyimpanan/pengekalan, dan DPA yang boleh dicetak.

\"4 Tab\"

Buku besar Konsen

Rekod yang boleh dicari bagi setiap pemberian dan penarikan balik persetujuan, mengikut kenalan, saluran (e-mel, tolakan, SMS, dalam widget), tindakan, sumber dan tarikh. Bukti anda bahawa kenalan telah bersetuju (atau menarik diri).

Log akses technical

Siapa dalam pasukan anda yang melihat, menyunting, mengeksport, memadam atau menghantar mesej berkaitan data kenalan, beserta pentadbir, kenalan, tindakan, sebab yang dinyatakan dan IP. Tepat seperti yang diminta oleh pengawal selia.

Ketahanan kembali dan retensi

Perihal di mana data ruang kerja ini tinggal, mengatur berapa hari baris aktivitas disimpan (0 = Selamanya), dan merekam data controller Anda dan DPO.

DPA Templat

Addendum Pengolahan Data yang dapat dicetak yang mengisi kendali, alamat, DPO, residensi dan retensi. Cetak atau simpan sebagai PDF.

✅
Privacy & Compliance berpasangan dengan Cookie consent studio (yang mengumpul persetujuan) dan halaman Export (yang menghasilkan salinan data untuk DSAR). Lihat juga Cron dan automasi untuk pembersihan pengekalan setiap malam.
Penyambung

Konnect platform Anda

Penyambung menghubungkan OpsIQ dengan platform luaran: kedai e-dagang, sistem pengebilan, pemproses pembayaran, penyedia e-mel dan API tersuai. Setelah disambungkan, AI boleh mencari pesanan, data pelanggan, langganan dan banyak lagi, serta mengambil tindakan dengan kelulusan anda.

Bagaimana cara kerjanya
Pusat penghubungTeras OpsIQ disambungkan kepada WHMCS, Shopify, Stripe, WooCommerce, SendGrid dan Google Business Profile, setiap satu memaparkan status disambungkan.WHMCSShopifyStripeWooCommerceSendGridGoogle BPOpsIQKORE1PLUG IN25+ penyambung pra-bangun2AI CONTEXTData platform Real vinis3ACTIONSSelesai dengan persetujuan Anda
Penyambung

Kapal dengan OpsIQ

Ini adalah saat Anda memasang dan hanya perlu bukti mereka.

WHMCS

Penagihan

Pengebilan pengehosan web: klien, perkhidmatan, tiket, invois, domain, pelayan.

Shopify

¡Amerce E-commerce

E-dagang: pesanan, pelanggan, produk, inventori, pembayaran, webhook.

WooCommerce

¡Amerce E-commerce

E-dagang WordPress: pesanan, pelanggan, produk, kupon, penghantaran.

WordPress

CMS

Kandungan dan pengguna di laman WordPress.

[ Gambar di hlm.

Pembayaran

Bayaran dan titik penjualan: pesanan, pelanggan, katalog.

osCommerce

¡Amerce E-commerce

Legacy e-commerce: pesanan, pelanggan, produk.

Hotel Botble

Jembatan Zakan

Laman web hotel Botble CMS melalui jambatan OpsIQ yang ditandatangani. Pelaksanaan rujukan untuk platform tanpa API.

Zendesk

Sokongan

OFANDdesk: tiket, pengguna, organisasi, komentar.

Profil Bisnis Google Fale

Pemasaran

Bisnis lokal: ulasan, posting, Q&A, wawasan. Gunakan OAuth_.

Kalendar Google

Produktivitas Produktif

Kalendar dan peristiwa. Gunakan OAuth_.

GmailDanIMAP

E-mel

Kotak surat: surat masuk dan outbound, sinkronisasi buku alamat.

SendGrid

E-mel

Penghantaran e-mel: hantar e-mel dan urus templat.

Mailgun

E-mel

Penghantaran e-mel: hantar e-mel melalui Mailgun.

Slack, Telegram, LINE, X DM

Pesanan Saraf

Saluran pemesejan untuk perbualan masuk dan keluar.

Saluran Meta

Pesanan Saraf

\"Syahashi Facebook Messenger, Instagram DM dan WhatsApp\".

Site Intelligence (GA4, Search Console)

Analitik

Analisis dan pencarian data untuk SEO suite.

Pengkayaan Website dan CRM import

CRM

Pengayaan syarikat dan import pelanggan secara pukal.

Ada yang tersedia dari pasar

Ini ialah pakej yang diterbitkan, bukan sebahagian daripada pemasangan. Pasang satu daripada Penyambung, Marketplace dan ia akan disalin ke dalam folder penyambung langsung, selepas itu ia berfungsi sama seperti yang di atas.

Stripe

Pasaran dalam talian

Pembayaran: caj, pelanggan, invois, langganan, pembayaran keluar, pertikaian.

BigCommerce

Pasaran dalam talian

¡Agoza E-commerce: pesanan, pelanggan, produk, kategori, merek.

Magento 2

Pasaran dalam talian

E-dagang: pesanan, pelanggan, produk, kategori, inventori.

PrestaShop

Pasaran dalam talian

E-dagang: pesanan, pelanggan, produk, peraturan troli, syarikat penghantaran.

OpenCart

Pasaran dalam talian

¡Agoza E-commerce: pesanan, pelanggan, produk, kategori.

Amazon SES, Postmark, Resend

Pasaran dalam talian

Penghantaran e-mel transaksi.

Jira, Linear

Pasaran dalam talian

Tak ada masalah dan proyek pelacakan.

Zuz, Microsoft Calendar, Outlook Mail

Pasaran dalam talian

Meetings, kalender dan surat.

DocuSign, Apollo, SerpApi, Google Analytics

Pasaran dalam talian

Signature, prospekting, pencarian dan analisis data.

Webflow_, Wix, Squarespace

Pasaran dalam talian

Platform website milik kinford.

💡
Senarai penyambung berubah apabila pakej diterbitkan. Senarai yang sahih untuk pemasangan ANDA ialah halaman Penyambung: apa yang disenaraikan di sana ialah apa yang ditemui oleh masa jalan, dan tab Marketplace menunjukkan apa yang boleh anda tambah.

Memasang penyambung

1
Pergi ke Penyambung

Pergi ke Penyambung dalam bar sisi pentadbir.

2
Cari penyambung

Layari daftar atau pencarian. Penyambung dikelompokkan berdasarkan kategori.

3
Hidupkannya

Klik penyambung dan togol Dayakan.

4
Kelayakan Gagal

Isi medan yang diperlukan: kunci API, URL, token dan lain-lain. Setiap penyambung mempunyai keperluan khusus yang didokumenkan dalam panel tetapannya.

5
Sambungan utilitas

Klik "Uji Sambungan." Hasil hijau bermakna sambungan boleh mencapai platform luar. Hasil merah menunjukkan ralat.

6
Konfigurasikan ciri

Pilih ciri yang hendak didayakan: penyegerakan pengetahuan, penyegerakan webhook, tindakan AI. Tidak semua penyambung menyokong semua ciri.

Apa yang diberikan oleh penyambung kepada anda

Konteks AI

AI boleh mencari data pelanggan, pesanan, langganan dan banyak lagi melalui penyambung. Apabila pelanggan bersembang, AI mempunyai data platform sebenar untuk dirujuk.

Konteks AI (pengarang penyambung)

ContextProvider sambungan anda menyuap tiket-AI dengan ringkasan akaun baca-sahaja pemilik tiket. Selesai pelanggan oleh customer_id Ketika diketahui; sebaliknya, pada tiket auto-replise, di mana bendera ctx customer_trust_email Benar, lihat rekeningnya. customer_email \"Penerima tiket\" \"Lapisan Jauh\" \"Mengekspos\"... /context/customer-by-email Ini yang membuat kutipan AI sebagai saldo/invoice nyata daripada mengatakan \"tolong log in.\" Hormati togol kelas data operator (customer_sections, customer_allow_creditDan tetap baca-saja, jangan pernah memancarkan rahasia.

Direktori pelanggan (pengarang penyambung)

Konektormu, IdentificationProvider memberi makan tiga pencarian tiket universal: lookupCustomerById() (kartu pelanggan), lookupCustomerServices() (meja produk/layanan), dan listCustomers($query,$limit): pemilih "Cari pelanggan atau taip e-mel" pada borang asal Komposisi-Tiket-Baru. Kembalikan baris {id, external_id, name, email, company, phone, platform, platform_label}. Aturan Remote: Jika pelanggan Anda tinggal di database atau layanan lain, menjemput mereka melalui platform Anda API Di dalam metode-metode ini, tidak pernah membaca tabel sistem lain secara langsung (dalam OpsIQ DB mereka adalah pemegang tempat kosong, itulah sebabnya sebuah bacaan lokal mengembalikan seorang pemetik kosong). Gatekan jalur jarak jauh pada konfigurasi anda API URL Tetap baca lokal hanya sebagai fallback yang sama-DB.

Tiket yang disalurkan melalui e-mel, pengesanan & penghalaan (pengarang penyambung)

Ketika inbound email menjadi tiket asli, OpsIQ mendeteksi pengirim dengan memanggil lookupCustomerById(0, ['email'=>$sender]) di sepanjang setiap sambungan; yang pertama "mempunyai" pelanggan dan platform Slugfol yang dicap pada ticket.created Peristiwa vini sebagai _pipe_owner_platform Jadi WHMCS-Kebiasaan pelanggan email membuka tiket masuk WHMCS (WHMCS Penomoran nutfah, dicerminkan sebagai satu), sementara pengirim yang tidak diketahui tetap tamu pribumi. Jika cermin penghubungmu tiket asli ke platform sendiri, anda ticket.created pengendali mesti bergantung pada semakan ini: if (array_key_exists('_pipe_owner_platform',$payload) && $payload['_pipe_owner_platform'] !== '<your-slug>') return;. Kunci ini tiada pada tiket bukan paip (sembang/manual/AI), jadi tiket tersebut dicerminkan seperti sebelum ini. Kawalan bagi setiap jabatan terletak di bawah Pasukan & Jabatan → Buka tiket melalui e-mel (Sesiapa sahaja / Pelanggan sahaja / Dimatikan).

Tindakan

AI boleh melakukan tindakan melalui penyambung: mencipta tiket, mengemas kini pesanan, membatalkan langganan, semuanya dengan kelulusan anda melalui Trust Layer.

Pengetahuan tentang pengetahuan

Penyambung menyumbangkan artikel pengetahuan khusus platform kepada AI. Penyambung Shopify menambah penyelesaian masalah e-dagang; penyambung WHMCS menambah pengetahuan pengehosan.

Import pangkalan pengetahuan (pengarang penyambung)

Jika platform anda memuatkan pangkalan pengetahuan, nyatakan a kb_capabilities blok di settings.json dargen (jenis kb_source) dan penyambung anda muncul dalam editor Pusat Bantuan di bahagian → Import dari aplikasi yang terhubung Penurunan nama tak ada metode untuk diimplementasikan: namakan sebuah bawaan adapter (zendesk Pusat Bantuan Pohon-Past-Pusat API, atau crawl untuk mana-mana laman web KB) dan base_template Nama samaran seperti https://{subdomain}.zendesk.com, yang diisi oleh OpsIQ daripada tetapan tersimpan penyambung anda. Kelayakan tidak sekali-kali meninggalkan pelayan; pelayar hanya menghantar slug penyambung. Untuk menyokong platform baharu, tambahkan opsiq_kb_<platform>_manifest() Adaptor dan referensinya dengan nama. connectors/PLATFORM_CONNECTORS.md §5.

Webhook

Sesetengah penyambung mendaftarkan webhook dengan platform luaran untuk pemberitahuan acara masa nyata (pesanan baharu, kemas kini tiket, dan sebagainya).

Pelacakan penjualan

Penyambung e-dagang menyalurkan data hasil ke dalam papan pemuka Jualan untuk atribusi dan analitik.

💡
Konektor terhad kepada ruang kerja masing-masing. Setiap ruang kerja boleh mempunyai konektor berbeza yang didayakan dengan bukti kelayakan yang berbeza. Ruang kerja WHMCS menggunakan konektor WHMCS; ruang kerja Shopify menggunakan konektor Shopify.
Boleh aku gunakan beberapa penyambung sekaligus?+

Ya. Anda boleh menggunakan Shopify untuk pesanan dan Stripe untuk pembayaran dalam ruang kerja yang sama. AI menggabungkan data daripada semua penyambung yang didayakan.

Bagaimana jika platform saya tidak terdaftar?+

Gunakan Connector Builder untuk mencipta penyambung tersuai bagi mana-mana platform yang mempunyai REST API. Atau semak Marketplace untuk penyambung yang dibina oleh komuniti.

Adakah penyambung berfungsi dengan OpsIQ yang dihoskan sendiri?+

Ya. Penyambung berfungsi dengan cara yang sama dalam kedua-dua edisi awan dan hos sendiri.

Penyambung

Kontrak penyambung jualan dan pengebilan

Setiap penyambung perdagangan menggunakan kontrak peristiwa neutral platform yang sama. WHMCS ialah pelaksanaan rujukan, tetapi SaaS Bridge, kedai, pembekal pembayaran, penyambung pasaran dan pakej Connector Builder mesti mematuhi peraturan yang sama.

Apa yang mesti diterbitkan oleh setiap penyambung perdagangan

Salah satu buku besar berwithritatif

Publish realised economic events to opsiq_sales_events through CommerceEventRegistry::normalize(). Do not build a connector-specific Sales table or make core analytics query a remote platform directly.

Identitas sumber yang stabil

platform ialah slug pendaftaran penyambung, seperti whmcs, shopify atau opsiq_saas. traffic_source mengandungi atribusi pemerolehan yang disahkan apabila diberikan; jika tidak, gunakan slug yang sama sebagai sandaran. Simpan pengecam, bukan label paparan. OpsIQ menentukan nama penyambung yang mesra dalam UI.

Kekurangdataan

event_id mestilah deterministik. Petakan sekurang-kurangnya satu order_ref, invoice_ref atau subscription_ref yang tidak boleh diubah supaya cubaan semula webhook dan pengisian semula mengemas kini peristiwa yang sama dan bukannya mencipta jualan berganda. service_ref mengenal pasti produk atau tika perkhidmatan yang terjejas apabila ada.

Sumber timestamp

occurred_at ialah masa pembayaran atau acara ekonomi yang dilaporkan oleh platform sumber. Jangan sekali-kali menggantikan tarikh pembayaran sejarah dengan masa import.

Wang dan FX

Hantar amaun sumber dan mata wang ISO tiga huruf yang sah. Jika tetapan penyambung mendayakan penukaran FX OpsIQ, pelaporan ditukar kepada mata wang pelaporan ruang kerja; jika tidak, laporan mengekalkan mata wang kedai atau platform pengebilan. Kod penyambung tidak boleh menetapkan mata wang pelaporan atau kadar pertukaran secara tetap dalam kod.

Siklus hidup berasaskan bukti

Gunakan new, renewal, upgrade, refund, credit atau unknown. Klasifikasikan berdasarkan sebab invois, hubungan langganan atau perkhidmatan, jenis item baris, atau medan sumber berautoriti yang lain. Pembelian berulang oleh pelanggan yang sama tidak semestinya satu pembaharuan.

Batas penjualan

Hanya resit dagangan berbayar yang positif, iaitu baharu, pembaharuan, naik taraf atau yang benar-benar tidak diketahui, tergolong dalam Jualan & Penukaran. Bayaran balik dilaporkan oleh analitik bayaran balik dan hasil bersih. Kredit akaun, tambah nilai dompet, tambah nilai token dan Tambah Dana kekal sebagai acara lejar pengebilan dan tidak pernah dikira sebagai jualan, penukaran, jumlah pesanan atau hasil jualan.

CRM Ukur terpisah

Urus niaga CRM mewakili saluran jualan dan aktiviti urus niaga. Ia bukan jualan platform perdagangan melainkan platform pengebilan atau kedai yang disambungkan mengeluarkan pesanan berbayar atau invois yang telah direalisasikan melalui kontrak ini.

Setiap sinyal pembayaran akan membuka baris

Jangan bergantung pada satu nama acara. Apabila platform menghantar beberapa pengesahan untuk satu pembayaran (invois dibayar, pesanan dibayar, transaksi ditambah, pembayaran selesai), mana-mana daripadanya boleh membuka baris lejar sebaik sahaja platform mengesahkan jualan itu telah dibayar; cap jari jualan menggabungkan yang lain menjadi satu baris.

Rekonsiliasi terjadualisasi (Kontrak 2.3)

A connector whose platform can list completed sales declares sales_reconciliation and implements SalesReconciliationInterface::reconcileSales(). Core re-reads the platform list on a schedule (once per workspace interval, bounded, cursored) through the same idempotent writer, so a dropped webhook cannot lose revenue. Conformance fails a package that can list history but does not reconcile. The Connector Builder derives the capability from the sales backfill action.

Keledai ini kemudian hidup (Contract 2.5)

A sale can be refunded, voided, cancelled, marked unpaid, corrected or deleted after it was recorded. Every sales connector reports those facts and core applies them through the append-only contract: a refund, a void or a delete is a NEW dated contra row (refund.completed, sale.voided, sale.deleted) written by CommerceEventContract::recordReversal(), plus a marker on the recorded sale (reversed_at, reversal_kind, refunded_amount). A voided or deleted sale leaves the Sales page; a refunded sale keeps its gross and reduces net. Emit invoice.refunded (with the refunded amount), invoice.voided / invoice.cancelled / invoice.unpaid, invoice.updated and invoice.deleted from your platform; core maps order.* and payment.* aliases too.

Pencarian pengesahan (Kontrak 2.5)

sales_reconciliation 1.1 adds SaleLookupInterface::lookupSale($settings, $ledgerRow). Core walks the workspace's own ledger rows for your platform (newest first, bounded, cursored, once per row per day) and asks your connector what the platform says NOW about each sale: status, gross amount and currency, refunded amount and date, line items and the buyer. Answer null when the call failed; answer found=false ONLY when the platform positively says the record is gone (a 404, "Invoice ID Not Found"). Core never demotes a sale on an unknown answer. Shipped connectors implement it over their native API; a package that can list sales must implement it (conformance error).

Barang dan negara garis wilayage adalah medan kontrak (jual 1.3)

Pass the platform's line list on the row as items (any common shape: WHMCS items, Shopify line_items, Stripe lines.data) and the buyer's billing country as country_code. CommerceEventContract::upsertSaleRow($table, $row, $items) writes opsiq_sales_items and fills country/device from the buyer's own telemetry when the row has none. A thin webhook never erases what a fuller delivery wrote.

Sebuah joint penyediaan tidak dijual (jual 1.3)

AfterModuleCreate, license.created, subscription.created dan yang sejenis membuktikan HUBUNGAN, bukan resit. Jangan sekali-kali menulisnya sebagai baris yang dibayar: penyambung WHMCS pernah merekodkan harga berulang perkhidmatan, dalam mata wang lalai penyambung, tanpa pelanggan, di sebelah invois sebenar, dan bulan yang menjana kira-kira $460 terbaca sebagai $92,703. Selesaikan hook kepada invoisnya dan rekodkan ITU melalui satu writer.

Penghargaan melalui deskripsi

Tambah nilai baki yang barisnya tidak mempunyai jenis ("Add funds", tambah nilai dompet atau token) dikelaskan sebagai credit daripada penerangannya oleh SaleLifecycleClassifier (line_descriptions) dan tidak pernah dikira sebagai jualan.

Penggunaan kredit adalah pembayaran (standar)

Invois yang dijelaskan daripada kredit akaun dibayar sepenuhnya pada tarikhnya sendiri: jualan, nilainya dan tunainya diiktiraf pada masa itu. Tambahan dana atau tambahan kredit ialah pergerakan baki: tidak sekali-kali jualan dan tidak sekali-kali tunai dengan sendirinya; wangnya diiktiraf apabila kredit itu dibelanjakan. Bayaran balik ialah tunai keluar. Perbezaan kadar pertukaran berbanding widget pendapatan platform itu sendiri ialah perbezaan yang diterima; peraturan ini tidak.

Penghargaan yang ditambahkan dilaporkan sendiri (dimajukan)

Tambah nilai (tambah dana, tambah kredit, tambah nilai dompet atau token) ialah baris `credit` kitaran hayat: ia tidak pernah disertakan dalam hasil, nilai bersih, tunai atau penukaran. Halaman Jualan melaporkannya dalam jubin Kredit ditambah tersendiri, berasingan daripada jualan, dalam mata wang asas pada kadar platform itu sendiri. Penyambung melaporkan tambah nilai sebagai baris kredit (peraturan Builder jenis credit, atau jualan yang semua barisnya dibaca sebagai tambah nilai), dan bayaran balik tambah nilai ialah baris kontra credit.refunded yang mengurangkan Kredit ditambah, bukan sekali-kali jualan. Dompet Storefront melakukan perkara yang sama secara asli.

Bentuk harga (Kontrak 2.6)

Gross stays gross in amount. Every sale now also carries subtotal, discount_amount and coupon_code, tax, shipping_amount, fee_amount (only as the platform reports it, never estimated), payment_method, gateway, fulfilment_status and fulfilled_at, and each line item its own discount. Pass them on the row or let core read them: CommerceEventContract::moneyFacts() reads the common keys of every platform (Shopify, WooCommerce, Stripe, BigCommerce, Magento, Squarespace, Square, the SaaS invoice, WHMCS promotion lines). 0 and an empty code mean 'none'; NULL means 'not said'; a thin replay never blanks a value a fuller delivery wrote.

Dua figur net (Kontrak 2.6)

Hasil produk bersih ialah kasar tolak cukai tolak penghantaran (diskaun sudah ditolak daripada kasar). Penerimaan bersih ialah tunai tolak yuran get laluan tolak bayaran balik. Kedua-duanya datang daripada lajur masing-masing; tiada apa pun yang menulis ganti nilai kasar, jadi halaman Jualan boleh memaparkan kasar, diskaun, cukai, penghantaran, yuran, bayaran balik dan kedua-dua nilai bersih sebagai satu carta air terjun.

Disputs (Kontrak 2.6)

A chargeback is reported through CommerceEventContract::recordDispute(): open writes a dated sale.disputed contra row and flags the sale (disputed revenue, not yet reversed), won closes the flag, lost reverses the sale through the same refund contra path with the dispute as its reference. Emit charge.dispute.created / dispute.created / chargeback.created and the closed variants; lookupSale() may answer dispute_status, dispute_ref, dispute_amount and disputed_at.

Satu penulis astronot per platform

Platform yang membuat pengumuman pada bas peristiwa dan juga memiliki penulis lejar penyambung menetapkan commerce_ledger_owner=connector pada SETIAP peristiwa perdagangan yang dicetuskannya (invoice.*, order.*, subscription.*, payment.*), bukan hanya invoice.paid; jika tidak, penulis generik teras akan merekodkan salinan pendua.

Proyeksi yang berasal

opsiq_conversions dan ringkasan papan pemuka ialah unjuran keserasian yang dibina semula daripada lejar. Penyambung tidak boleh menganggap unjuran sebagai sumber kebenaran kewangan. Semakan kontrak boleh menilai semula baris terbitan tanpa memadam sejarah pengebilan yang mendasarinya.

Batas platform jauh Remote

Penyambung jauh membaca platformnya melalui API yang disahkan dan dikonfigurasikan. Ia tidak boleh sekali-kali bergantung pada jadual pangkalan data pada pelayan yang sama. site_key domain yang disahkan secara tepat dibekalkan oleh ConnectorRegistry dan mesti digunakan pada setiap penulisan lejar dan isi semula. Skop ruang kerja atau kumpulan hanyalah pengagregatan semasa membaca; ia tidak boleh sekali-kali meluaskan pemilikan peristiwa yang disimpan.

Contoh pay-event parent annion

Perdagangan Bermerek
{
  "event_id": "acme_store:invoice:INV-1042",
  "event_name": "invoice.paid",
  "platform": "acme_store",
  "order_ref": "ORDER-884",
  "invoice_ref": "INV-1042",
  "subscription_ref": "SUB-28",
  "service_ref": "SERVICE-91",
  "status": "paid",
  "lifecycle_type": "renewal",
  "amount": 129.00,
  "currency": "USD",
  "traffic_source": "acme_store",
  "occurred_at": "2026-07-23 08:30:27"
}

Pemetaan Connector Builder

Apabila Jualan dan pengebilan didayakan dalam Pembina Penyambung, petakan jumlah, mata wang, status sumber dan tarikh sumber, serta sekurang-kurangnya satu rujukan pesanan, invois atau langganan. Petakan lifecycle_type apabila API mendedahkan bukti kitaran hayat yang berwibawa. SalesIngest yang dijana menghantar setiap baris melalui penormal CommerceEventRegistry yang sama seperti yang digunakan oleh penyambung terbina dalam dan penyambung pasaran.

⚠️
Kredit dan Tambah Dana sengaja dikekalkan untuk sejarah pengebilan, konteks baki pelanggan dan analisis lejar. Mengecualikannya daripada Jualan tidak memadamkannya; ia hanya menghalangnya daripada mengembungkan prestasi perdagangan.

lifecycle_type menentukan apa yang menjadi kesepakatan CRM

lifecycle_type bukan label analitik. OpsIQ membacanya untuk menentukan sama ada sesuatu jualan masuk ke saluran jualan CRM, jadi setiap penyambung jualan sedang membuat keputusan saluran jualan, sama ada disengajakan atau tidak.

baharu

¡Omerance Opens a close-won deal (bisnis baru).

pembaharuan, naik taraf

Direkodkan sebagai hasil berulang. Tiada urusan perniagaan baharu — pembaharuan bertukar mengikut lengkung kebarangkalian yang berbeza dan mencampurkannya merosakkan kedua-dua ramalan.

bayaran balik, kredit

Tidak pernah membuka urus niaga, dalam apa jua mod. Wang yang dipulangkan kepada pelanggan bukan satu kemenangan.

Æfl / tidak diketahui

Penjualannya hanya rekaman tapi tidak pernah mencapai saluran pipa.

Satu penjualan, satu baris ledger: identitas adalah SALE, bukan acara

Jangan cocokkan pada event_id dan masukkan diri anda. event_id is platform:eventName:externalIdSebuah platform yang mengumumkan satu pembayaran dua kali — sebagai invoice.paid Dan lagi sebagai payment.completed Nama yang digunakan untuk memukul dan tidak ada yang perlu diperingatkan.

💡
Ditemui pada pemasangan rujukan: enam invois dengan tiga baris lejar setiap satu, daripada tiga laluan kod yang menggunakan tiga skema event_id yang berbeza. Semuanya membawa 0.00 jadi tiada jumlah yang kelihatan salah, dan sebarang proses kemudian yang memulihkan amaun sebenar akan mengira satu pembayaran sebanyak tiga kali.

Cari tahu siapa yang akan menjual (penghasilan)sale_fingerprint), cocok dengan baris yang sudah ada di atasnya, melestarikan aslinya event_id semasa kemas kini, dan menapis kepada lajur sebenar:

Satu-satunya cara yang didukung untuk menulis buku besar penjualan
\OpsIQ\Commerce\CommerceEventContract::upsertSaleRow('opsiq_sales_events', $row);
Penjualan yang sama, banyak kejadian

invoice.paid, payment.completed dan sale.completed bagi satu invois berkongsi satu cap jari dan mengemas kini satu baris.

Pengubahsaizan tetap terpisah

Wang yang keluar ialah fakta yang berbeza daripada wang yang masuk. Bayaran balik invois mengekalkan identitinya sendiri, jadi ia tidak sekali-kali boleh menulis ganti pembayaran yang dibalikkannya.

Tak ada referensi, tak ada sidik jari.

Baris yang tidak membawa rujukan pesanan, invois, langganan atau perkhidmatan tidak mendapat cap jari langsung, jadi dua baris yang tidak berkaitan tidak akan bertembung hanya kerana kedua-duanya tiada id.

Rujukan rujukan falkn

voice_ref, kemudian order_reff, lalu langgan_reaf, maka service_refe — yang terkuat pertama, jadi satu penjualan menyimpan identitas stabil.

Buku besar itu adalah tambahan-hanya: tidak pernah menulis ulang penjualan

Pembayaran kembali, pembatalan atau pembetulan adalah Baru baru ditampatkan masuk. Jangan sekali-kali mengubah baris yang dibetulkannya. Menulis semula pembayaran menjadi bayaran balik nampak kemas tetapi merosakkan tiga perkara sekali gus:

Itu menghancurkan pendapatan kotor

Jualan kasar dan kadar bayaran balik tidak lagi dapat dipisahkan — sedangkan kadar bayaran balik ialah metrik yang hendak dimaklumkan oleh pembalikan itu.

Buku ini terbalik dalam periode yang salah

Pembayaran balik bulan Mac untuk penjualan Januari mesti mengurangkan bulan Mac. Menulis semula baris Januari secara senyap-senyap memulihkan tempoh tertutup.

Itu merusak jejak audit

Catatan buku besar yang terjadi pada suatu titik dalam waktu.

Jadi penyambung melaporkan pembalikan itu dan bukannya menggunakannya: pulangkan refunded_at dan refund_amount seiring dengan kitaran hayat jualan itu sendiri, dan biarkan pemanggil menulis bayaran balik sebagai barisnya sendiri yang bertarikh pada masa bayaran balik itu berlaku. Kedua-duanya tidak akan sekali-kali bertembung, kerana cap jari jualan memisahkan pemulangan daripada jualan.

💡
Prinsip yang sama digunakan untuk jumlah. Jangan "perbaiki" jumlah yang disimpan kepada nilai semasa platform: bil diluluskan dari kredit akaun secara sah mencatatkan 0 pada masa pembayaran, dan wang telah dicatatkan apabila pelanggan mengisi semula. Memulihkan nilai muka mengiranya dua kali.

Klasifikasi kontrak

OpsIQ Memutuskan sepeda hidup Pernah sekali, in \OpsIQ\Commerce\SaleLifecycleClassifierSebuah penyambung menyatakan hanya yang mana dari Ini adalah platform sendiri Kata-kata berarti apa, dengan menerapkan \OpsIQ\Connectors\SalesLifecycleConnectorInterface::salesLifecycleVocabulary()Jangan uraikan kembali penalarannya.

Kosakata pernyataan, delegasikan keputusan
public static function salesLifecycleVocabulary(): array
{
    return [
        'credit'             => ['addfunds'],                  // adds balance, sells nothing
        'upgrade'            => ['upgrade'],                   // resizes an existing commitment
        'recurring'          => ['hosting', 'domainrenew'],    // continues something owned
        'acquisition'        => ['domainregister'],            // obtains something new
        'recurring_prefixes' => ['domainaddon'],               // families that grow over releases
    ];
}

$lifecycle = \OpsIQ\Commerce\SaleLifecycleClassifier::classify([
    'explicit'    => $platformSaidSo,     // wins outright when present
    'line_types'  => $types,              // your platform's own line/item types
    'vocabulary'  => self::salesLifecycleVocabulary(),
    'is_order'    => $cameFromANewOrder,
    'is_refunded' => $moneyWentBack,
]);
💡
Keutamaan adalah tetap dan dikongsi: eksplisit, kemudian dibayar balik/dibatalkan, kemudian kredit, kemudian naik taraf, kemudian is_order, kemudian berulang, kemudian pemerolehan, kemudian tidak diketahui. Naik taraf terletak di atas semakan pesanan kerana platform juga membuat pesanan untuk naik taraf; berulang terletak di bawahnya kerana invois pertama langganan baharu membawa jenis baris berulang. Bagi jualan bukan pesanan yang samar-samar, pengelas cenderung kepada hasil dan menjauhi saluran jualan.

Terangkan seluruh kosakata platform

Inilah kegagalan yang paling mahal kosnya tetapi paling tidak kelihatan salah. Penyambung WHMCS memadankan ['hosting','addon','domain'] Daftar yang dibaca sebagai lengkap. WHMCS tidak memancarkan telanjang Domain Jenis vinashi untuk garis domain nyata; ia memancarkan DomainRegister, DomainRenew, DomainTransfer, PromoHosting, PromoDomain, DomainAddon* dan UpgradeMereka semua jatuh melewati daftar ke unknown: 1,288 voices, tiga tahun, tidak ada kesalahan dan tidak ada log line.

Setiap pelanggan baharu mengimport sejarahnya melalui pengisian semula penyambung, jadi pepijat pengelasan tidak menjejaskan satu ruang kerja sahaja — ia menjejaskan setiap ruang kerja yang pernah bermula melalui penyambung itu, pada saat mereka mula-mula melihat saluran jualan mereka. Ambil perbendaharaan kata daripada dokumentasi platform atau banci data langsung, dan padankan keluarga yang semakin berkembang dengan Awalan fiks Jadi, kakak tidak ada yang pernah melihat belum digolongkan dengan kerabatnya bukan menghilang.

💡
Semakan praktikal: kira berapa banyak baris anda sendiri yang berakhir sebagai unknown. Penyambung jualan yang sihat mengelaskan hampir semuanya. Aliran unknown yang berterusan hampir tidak pernah bermaksud data yang anda tiada — ia ialah perbendaharaan kata yang tidak pernah dipelajari oleh penyambung untuk dibaca.

Membaiki sejarah yang diimport

Setiap penyambung jualan OpsIQ yang dihantar melaksanakan ini — WHMCS, Shopify, WooCommerce, osCommerce, SaaS Bridge, Stripe, BigCommerce and Magento 2. Treat it as expected, not optional: a customer imports their old records on day one, so a classification fix that cannot reach that history only helps people who signed up afterwards. Implement \OpsIQ\Connectors\SalesLifecycleRepairInterface::reclassifySale() Kau sudah punya apa saja yang kau punya. tools/crm_backfill_sales_lifecycle.php kemudian membaiki sejarah import penyambung anda tanpa kod khusus bagi setiap penyambung: larian kering secara lalai, membuat sandaran sendiri dan mengesahkan bilangan baris sebelum menulis, boleh diundur melalui lejar buat asal, dan ia tidak sekali-kali menulis bacaan yang gagal sebagai jawapan.

💡
Jika penyambung anda tidak boleh membaca semula rekod lampau (penyambung webhook sahaja tidak boleh), jangan buat stub untuk kaedah tersebut. Stub yang mengembalikan unknown lebih teruk daripada tiada pelaksanaan langsung: pengisian semula akan menulis semula baris yang baik sebagai tidak dikelaskan dan melaporkan kejayaan. Laksanakan antara muka perbendaharaan kata sahaja.
💡
Rujukan pakej terperinci kekal tersedia dalam connectors/CONNECTOR_EVENTS.md dan connectors/PLATFORM_CONNECTORS.md dalam pengedaran sumber hos sendiri.
Penyambung

Kontrak acara perjalanan

Journey Intelligence menerima satu sampul peristiwa yang neutral platform daripada widget pelayar, penyambung terbina dalam, SaaS Bridge, pakej pasaran dan output Pembina Penyambung. Nama khusus platform diterjemahkan di pinggir; kod corong, atribusi dan Kecerdasan Laman hanya menggunakan peristiwa kanonik.

Keisolasian dan batas kepercayaan

Kunci reser-domain exacity

Setiap peristiwa terikat pada site_key domain yang disahkan. Penyambung mesti mengambil kunci itu daripada ConnectorRegistry atau titik akhirnya yang disahkan, tidak sekali-kali daripada kandungan permintaan yang tidak dipercayai. Domain menyimpan rekod berasingan; kumpulan domain hanyalah agregat pada masa bacaan.

Identitas yang tidak terjamah

event_id diperlukan untuk penyambung dan mesti deterministik untuk acara asli yang sama. Cubaan semula, webhook dan isian semula mengemas kini satu acara dan bukannya menduplikasi perjalanan atau jualan.

Nama pribumi ditambah nama kanonik

Waxear source_event_name untuk bukti dan troubleshooting, kemudian memetakannya ke event_name_canonical. Core analytics tidak boleh bercabang pada slug connector.

Bukti pelayan menang

Pemerhatian pelayar boleh memulakan atau menyimpulkan sesuatu perjalanan. Peristiwa konektor yang disahkan mengesahkan pendaftaran, log masuk, pembayaran, pembelian, pembaharuan, bayaran balik dan hasil akhir yang lain. Token korelasi sah yang terikat pada laman ialah gabungan paling kukuh; token yang tidak sah ditolak dan ID yang terbenam di dalamnya tidak dipercayai.

Privasi

Hantar hanya pengecam dan medan yang diperlukan untuk perjalanan yang diisytiharkan. Patuhi tetapan persetujuan, penyamaran dan pengekalan. Jangan sekali-kali meletakkan bukti kelayakan, data kad, rahsia pengesahan atau kandungan mesej peribadi dalam sifat.

Sampul surat Canonical

Sampul peristiwa perjalanan
{
  "contract_version": 1,
  "event_id": "myshop:order:884:paid",
  "source": "myshop",
  "source_event_name": "order.paid",
  "event_name_canonical": "commerce.purchase.completed",
  "site_key": "exact_domain_site_key",
  "occurred_at": "2026-07-23T08:30:27Z",
  "visitor_id": "optional-browser-visitor",
  "session_id": "optional-browser-session",
  "journey_id": "optional-journey",
  "attempt_id": "optional-attempt",
  "correlation_token": "optional-signed-token",
  "customer_ref": "C-42",
  "user_email": "[email protected]",
  "object_type": "order",
  "object_ref": "884",
  "order_ref": "884",
  "outcome": "succeeded",
  "evidence_level": "server_confirmed",
  "confidence": 1,
  "properties": {"amount": 129, "currency": "USD"}
}

Taksonomi Canonical

Gunakan nama paling sempit yang benar. Keluarga yang disokong termasuk acara halaman/CTA penglibatan; pendaftaran akaun, log masuk, MFA dan tetapan semula kata laluan; peringkat prospek dan borang; produk, troli, daftar keluar, pembayaran, pembelian, langganan, pembaharuan dan bayaran balik; tera dan penukaran promosi; acara pusat bantuan, sembang dan tiket; acara keselamatan; dan acara tersuai dengan ruang nama. Nama terminal yang biasa ialah account.signup.succeeded, account.login.succeeded, lead.form.succeeded, commerce.payment.succeeded, commerce.purchase.completed, commerce.subscription.renewed dan commerce.refund.completed.

Gangguan, konfirmasi dan pengabaian Browser

Widget boleh berfungsi tanpa penyambung dengan memerhati struktur halaman, tindakan borang, hasil DOM dan log perjalanan pelawat. Bukti tersebut kekal digredkan secara jelas sebagai diperhatikan atau disimpulkan. Penyambung menambah pengesahan pelayan yang sahih dan boleh mengaitkannya dengan percubaan pelayar yang sama. Pengabaian mula-mula disimpan sebagai calon; ia menjadi diabaikan hanya selepas tempoh ketidakaktifan yang ditetapkan dalam UI dan hanya apabila tiada pemulihan atau kejayaan yang berlaku kemudian.

Atribusi dan pendapatan

Atribusi mengutamakan token korelasi bertandatangan yang sah, kemudian rujukan perjalanan, percubaan, sesi atau dagangan yang tepat, kemudian graf identiti yang dipersetujui, dan akhirnya padanan tingkah laku yang terhad. Jualan yang tidak sepadan kekal tanpa atribusi. Pemberat lejar berbilang sentuhan mesti berjumlah 1. Hasil beratribusi Site Intelligence membaca lejar ini; kredit, tambah nilai dompet, tambah nilai token dan Add Funds tidak pernah menjadi penukaran pembelian. Tingkah laku FX penyambung kekal dikawal oleh tetapan penyambung itu.

⚠️
Model atribusi, tetingkap tinjauan semula, pengendalian trafik terus, keyakinan minimum, had masa peninggalan dan takrifan corong ialah dasar UI. Kod penyambung tidak boleh menetapkannya secara tegar.

Pemanifest dan Pembina Penyambung

deklarasi perjalanan penghubung
{
  "capabilities": ["sales", "journey_events"],
  "journey_capabilities": {
    "journey_events": true,
    "payments": true,
    "subscriptions": false,
    "correlation_token": false,
    "backfill": true
  },
  "journey_event_mappings": [{
    "source_event_name": "order.paid",
    "event_name_canonical": "commerce.purchase.completed",
    "field_map": {
      "order_ref": "order.id",
      "customer_ref": "order.customer_id",
      "amount": "order.total",
      "currency": "order.currency",
      "occurred_at": "order.paid_at"
    }
  }]
}

Isytiharkan hanya keupayaan yang benar-benar disediakan oleh pakej. Pembina Penyambung mengesahkan pemetaan dan menjana penyesuai neutral platform yang sama yang digunakan oleh pakej pihak pertama. Pengambilan perjalanan menerima satu peristiwa atau satu kelompok terhad sebanyak 100 melalui titik akhir integrasi disahkan yang dijana.

💡
Buku besar perniagaan tetap sumber kewangan yang benar. Jambatan perniagaan-ke-perjalanan menerbitkan hasil yang disahkan oleh pelayan dan menyelaraskan atribut selepas upsert buku besar idempoten sedia ada, jadi satu pembayaran tidak pernah menjadi dua jualan.
Penyambung

AI tindakan bekerja

Setiap sambungan menyatakan satu set tindakan: perkara yang AI boleh lakukan melalui platform luar. Tindakan adalah jambatan antara "AI kata" dan "AI buat."

Tindakan AI ony
AI tindakan bekerjaPermintaan pelanggan dipetakan kepada kad tindakan jenis padam, kemudian senarai semak: kebenaran disemak, anda mengesahkan, API dipanggil.AI tindakan bekerjaruang kerja"Batal langganan saya"pelangganAIAIcancel_subscriptiondeletePerlu konfirmasiParam voice_id (dari konteks)JENIS AKSIreadtulisdeleteKeizinan & peran diperiksaKau mengkonfirmasi tindakannya.API yang disebut · hasil dilaporkan1DECLAREDSetiap tindakan daftar penyambung2GATEDIzin + konfirmasi3THEN RUNAPI Panggilan, hasil kembali
Permintaan menjadi tindakan yang diisytiharkan (baca/tulis/padam berjenis) yang disemak kebenarannya, disahkan, kemudian dilaksanakan dan dilaporkan.

Bejana aksi sepeda hidup

1
Pelanggan customer meminta sesuatu

"Batal langganan saya." AI mengenal pasti ini memerlukan tindakan "cancel_subscription".

2
Hak pemeriksaan AI untuk mencari

Adakah tindakan ini dibenarkan? Adakah ia didayakan? Adakah pengguna semasa mempunyai peranan yang betul?

3
AI mengumpul parameter

Tindakan ini memerlukan ID langganan. AI mencarinya daripada konteks pelanggan atau bertanya kepada pelanggan.

4
Pengesahan Kepastian Menyadari

AI meminta konfirmasi sebelum mengeksekusi.

5
Eksekusi

Tindakan tersebut menyebut platform eksternal sebagai API_.

6
Hasil

AI melaporkan hasilnya kepada pelanggan.

Jenis aksi kinashi

Tindakan Baca Ukraina

cari data tanpa mengubah apapun contoh: list_orders, get_customer aman, tidak ada konfirmasi yang diperlukan

Tindakan penulisan somesomesome

oucle (Aturan) Membuat atau mengubah data. Contoh: create_ticet, update_order. Mungkin memerlukan konfirmasi.

Tindakan padam

Mengeluarkan data. contoh: concel_subscription. selalu memerlukan konfirmasi.

Tindakan HTTP ugilla

Diputuskan dalam tindakan.json, generik API Panggilan yang didefinisikan secara deklalaratif.

Tag kapabilitas Aspect

Medan "capability" pilihan bagi setiap tindakan dalam actions.json, iaitu tag kelas yang neutral terhadap penyambung (cth. "tickets" untuk membaca/mencari tiket, "ticket_create" untuk membuka tiket). OpsIQ mengawal keseluruhan kelas secara seragam merentas setiap penyambung: bacaan tiket digugurkan daripada AI apabila pengendali mematikan Kesedaran Tiket AI, dan penciptaan tiket dikhaskan untuk penyusun OpsIQ sendiri (supaya alat cipta sesebuah penyambung tidak boleh menduplikasinya). Isytiharkannya dan penyambung anda akan mematuhi kontrak. OpsIQ tidak sekali-kali perlu mengetahui nama tindakan anda. Pembina Penyambung memaparkannya sebagai senarai lungsur Keupayaan bagi setiap tindakan.

Tindakan kod

Dilaksanakan dalam PHP dalam kelas penyambung. Kawalan penuh ke atas logik.

Definisi tindakan se Contoh sebol
{
  "lookup_order": {
    "label": "Look up an order",
    "description": "Find an order by ID or email",
    "method": "GET",
    "endpoint": "/admin/api/2024-01/orders.json",
    "params": {
      "order_id": { "type": "string", "label": "Order ID" },
      "email":    { "type": "email",  "label": "Customer email" }
    }
  }
}
Penyambung

Bina penyambung

Connector Builder membolehkan anda mencipta penyambung lengkap untuk mana-mana platform yang mempunyai REST API. Tiada pengekodan diperlukan untuk penyambung asas.

Bina penyambung
Pembina PenyambungBorang konektor tanpa kod: nama, jenis pengesahan, URL asas, pemetaan tindakan, ujian yang lulus dan butang terbitkan.Pembina Penyambungruang kerjaPembina PenyambungNamaPlatformku berpenyakit penyakitJohnOAuth 2.0 Fiji (PKCE)Asas URL_https://api.example.com/v2AksiGET/customers → List_customersTes osis lulusPakej penyambung1NO-CODENama, otentifikasi, pangkalan URL2ANY APIKunci, Bearer, Basic, HMAC, OAuth_3PUBLISHInto /connectors/<slug>/
Halakan pembina kepada mana-mana REST API. Tetapkan pengesahan, URL asas dan tindakan, ujinya, dan terbitkan penyambung yang berfungsi. Tiada kod diperlukan.

Penyedia bahan Complete Neil API liputan sinyal

Setiap penyambung API yang dijana boleh mendedahkan tindakan Native API Read dan Native API Write yang berasingan. Tindakan pilihan kekal diutamakan; tindakan asli meliputi titik akhir penyedia yang ditambah kemudian. Masa jalan menyokong badan REST, GraphQL, JSON, borang, XML, mentah dan berbilang bahagian, penomboran halaman terhad, pengepala versi API dan idempotensi sambil mengekalkan kelayakan dalam tetapan penyambung ruang kerja.

⚠️
Pakej Marketplace diperoleh daripada /marketplace_connectors serta /connectors yang dibundel. Naikkan versi pakej, jana semula kontrak dan dokumentasi, jalankan ujian pematuhan, kemudian tandatangani semula dan terbitkan versi Marketplace yang baharu.

Wizard Connector Builder

Penyihir memiliki enam langkah, menunjukkan sebagai tab di atas. Simpan _Draf di bahagian kaki menyimpan kerja anda pada bila-bila masa.

1
Identitas dan profil

Nama, slug, deskripsi dan ikon, kemudian memilih profil kontrak: Standard API, Commerce, Helpdesk, Mailbox, Site Intelligence, SaaS Bridge, Local PHP Platform, atau Platform tanpa API_ apabila platform tidak menyediakan apa-apa yang boleh dipanggil dan OpsIQ perlu memasang jambatan. Profil memilih titik permulaan keupayaan yang lengkap; anda masih boleh melaraskan keupayaan individu.

2
John

Pilih corak pengesahan yang digunakan oleh platform dan isikan medannya. Masukkan juga bukti kelayakan ujian sebenar di sini: ia digunakan untuk ujian sambungan pada langkah seterusnya, dan ia tidak disimpan selepas anda menerbitkan.

3
Uji

Masukkan URL asas API dan titik akhir pengesahan, kemudian jalankan ujian sambungan langsung menggunakan kelayakan daripada langkah 2. Lakukan ini sebelum anda mentakrifkan sebarang tindakan; jika pengesahan atau URL asas salah, setiap tindakan yang anda tulis selepas itu akan gagal atas sebab yang sama dan anda akan menyahpepijat perkara yang salah.

4
Tindakan

Takrifkan setiap operasi: nama, kaedah HTTP, laluan titik akhir, parameter, pemetaan medan respons, dan tetapan kebolehpercayaan yang diterangkan di bawah. Anda boleh menjalankan setiap tindakan secara individu terhadap API langsung daripada langkah ini.

5
Pencetus

Petakan peristiwa webhook yang dihantar oleh platform anda kepada peristiwa OpsIQ, supaya perkara yang berlaku pada platform anda boleh memulakan kerja dalam OpsIQ.

6
Semakan, kontrak korporat dan penerbitan

Review every action, trigger and capability. Enterprise profiles expose the generated queue, worker, hook, migration, ticket-mirror, attachment and conflict contract before publishing. Publishing writes the package into /connectors/<slug>/.

⚠️
Penerbitan BAHASA TIDAK menjalankan suite kesesuaian. Terbitkan hanya validasi bentuk wizard dan memancarkan peringatan yang tidak menghalangi. Suite penuh — berkas manifes, kapabilitas, kontrak identitas-token dan cek bridge-snippet — berjalan ketika Anda menekan Dry-run, dan lagi saat pemasangan. Tekan Dry - lari sebelum Anda kapal, setiap kali.

Apa yang dilakukan oleh penerbitan yang tidak ditunjukkan oleh borang kepada anda

Lima tingkah laku penjana ini mengejutkan orang. Tiada satu pun pepijat; semuanya akan menghabiskan satu petang anda jika anda menemuinya secara tidak sengaja.

Satu soalan menentukan laluan terus: adakah platform itu menyediakan API?

Jawab dalam langkah 1 dengan memilih mod data-akses (atau "Platform tanpa API" profil). API menyatakan mod native_api and emits the <slug>_api_call passthrough. Bridge mode declares platform_bridge Sebaliknya, dia dan STRIPS native_api walaupun spesifikasi lama membawanya, supaya manifest, kelas yang dijana dan dokumen kepakaran tidak boleh bercanggah. ai_brain_aware Ada yang ditambahkan.

SILENCE MEANS "itu mempunyai API"

Pembina mengikuti jawapan anda; ia tidak bekerja kebenaran keluar untuk dirinya sendiri, dan piawai apabila tiada yang dikatakan adalah API Jadi, tiada...API platform mesti AKTIVITI kata begitu — pilih "Platform dengan tiada API" profil, tetapkan akses data ke jambatan, atau tanda platform_bridge; any one of the three is enough and they cannot contradict each other. Skip the question on a platform with no API and you are back to the old failure: a dead <slug>_api_call the model keeps reaching for. This used to be stamped unconditionally, so the trap is now escapable rather than gone.

Gagal uji sambungan ke GET /ping_

Jika kau meninggalkan jalur verifikasi kosong, Builder menulis /ping ke dalam penyambung yang dijana dan ke dalam blok ujian profile.json. Hampir tiada platform sebenar yang menyediakan laluan itu, jadi Test Connection gagal dengan HTTP 404 pada setiap pemasangan dan kelihatan seperti salah konfigurasi pelanggan, bukannya kecacatan pakej. Tetapkan laluan pengesahan yang benar-benar dijawab oleh platform anda. Bagi penyambung jambatan, halakan kepada titik akhir diagnostik anda sendiri — ia membuktikan keseluruhan rantaian dalam satu panggilan: jambatan telah digunakan, kunci sepadan, dan jambatan boleh mencapai pangkalan data.

Pepublikasian ulang masih menimpa edit tangan Anda

Keupayaan kini mengikut jawapan akses data, jadi ia tidak lagi menyimpang. Semua yang lain yang dijana masih menyimpang: edit ContextProvider.php atau mana-mana fail lain yang dikeluarkan dan penerbitan seterusnya akan menggantikannya. Satu-satunya pengecualian yang dilindungi ialah fail jambatan — wizard hanya menulis ganti jambatan yang membawa penandanya sendiri, jadi jambatan yang ditulis tangan dibiarkan.

Penerbitan semula memadam fail

Nyahtanda sesuatu keupayaan dan penerbitan seterusnya akan membuang fail penyedianya. Suntingan manual pada mana-mana fail yang dijana — terutamanya ContextProvider.php — akan ditulis ganti tanpa amaran. Salin keluar penyesuaian anda dahulu, atau ambil alih pemilikan pakej dengan memadam .opsiq-builder.json (selepas itu wizard tidak lagi akan mengurusnya).

release_status release selalu pralihat

Wizard tidak mempunyai kawalan untuknya. Pakej yang bertujuan untuk dihantar sebagai pengeluaran mesti ditukar release_status secara manual dalam settings.json — dan suntingan itu merosakkan tandatangan, jadi tandatangani semula selepas itu.

Tandatangan membuktikan integriti, bukan asal usul

Pakej Pembina ditandatangani dengan kunci simetri pemasangan ini sendiri. Itu dapat mengesan usikan. Ia tidak membuktikan siapa yang menulis pakej itu, dan mana-mana pemasangan yang memegang kunci yang sama boleh menghasilkan tandatangan yang sama. Anggap pakej yang ditandatangani secara setempat sebagai ditandatangani sendiri.

Tabrakan Slug tubrukan hanya diperiksa dalam satu pohon

Penerbitan menolak slug yang sudah wujud di bawah /connectors/. Ia tidak menyemak /marketplace_connectors/, jadi pakej pihak pertama yang ditulis secara manual dengan slug yang sama boleh terlindung.

💡
Wizard tidak mempunyai langkah pengarangan pengetahuan. Fail pengetahuan yang menerangkan platform anda dijana untuk anda daripada nama, penerangan, jenis pengesahan dan tindakan yang anda tentukan, dan ia dimuatkan ke dalam AI apabila penyambung didayakan.

Mendefinkan suatu tindakan (langkah 4)

Setiap tindakan mempunyai tetapan berikut. Hanya empat yang pertama diperlukan; selebihnya mengawal siapa yang boleh menjalankannya dan sejauh mana ia berhati-hati.

Kunci dan label aksi bagi paraf

Kekunci adalah apa yang AI panggil; label ialah apa yang manusia baca. Kekunci dinama ruang dengan slug sambungan anda secara automatik, jadi dua sambungan boleh mempunyai "list_orders" tanpa berlanggar.

Metode HTTP

GET, POST, PUT, PATCH atau DELETE.

URL Jalur

Ditambahkan ke dasar URL Gunakan {name} Misalnya, placeholders /opportunities/{id}/stage

Parameter fecth

Untuk setiap parameter, Anda juga memilih di mana ia pergi: badan, Jalur, pertanyaan atau pengepala. Parameter laluan mengisi {placeholder}; parameter pertanyaan ditambahkan pada URL.

Pemetaan respon stensue

Katakanlah mana bidang di JSON Respons afgon berarti apa, yang merupakan nama pelanggan, yaitu email, yang adalah urutan total. inilah yang memungkinkan AI membaca data platform Anda daripada menebaknya.

Siapa yang boleh menggunakannya

Pasukan anda (AI admin), pelanggan yang log masuk (sembang pelanggan), kedua-duanya, atau pembantu penulisan. Tindakan pelanggan hanya dijalankan untuk pelanggan yang log masuk, dan medan identiti dikunci kepada mereka secara automatik supaya seorang pelanggan tidak boleh bertanya tentang pelanggan lain.

Kemudikan diperlukan konfirmasi

Seorang manusia mesti meluluskan sebelum tindakan itu dijalankan.

** Destructive *

Menandakan tindakan sebagai memadam atau mengubah keadaan. Digunakan untuk memberi amaran sebelum ia dijalankan.

Keizinan diperlukan

Pentadbir mesti memegang kebenaran ini supaya AI boleh menjalankan tindakan bagi pihak mereka; pentadbir penuh sentiasa lulus. Pilih daripada manage_integrations, manage_general, manage_billing, manage_sales_bridge, manage_knowledge, manage_appearance, manage_behavior, manage_permissions, manage_dangerzone, reply_to_chats, escalate_to_ticket, send_agent_email, atau tiada, yang bermaksud mana-mana pentadbir yang disahkan.

Keterangan / Petunjuk AI

Opsyenal, tetapi berbaloi ditulis. Ia memberitahu AI bila untuk mencapai tindakan ini, contohnya "Gunakan ini apabila admin meminta untuk menukar peringkat pembahagian". Petunjuk yang baik ialah perbezaan antara tindakan yang digunakan dengan betul oleh AI dan satu yang diabaikan.

Kemampuan berbakat

Tag kelas pilihanonal , baik tiket (pembacaan tiket atau lookup) atau ticket_create (membuka tiket). Tagging memungkinkan OpsIQ gerbang seluruh kelas sekaligus, misalnya, menyembunyikan tiket dibaca ketika operator mematikan kesadaran tiket AI.

Path Daftar orgone

Untuk titik akhir yang mengembalikan daftar, jalur bertitik ke array, misalnya data atau data. item

Laluan ralat

Sebuah bidang tubuh yang kehadirannya berarti panggilan gagal, misalnya kesalahan. pesan, berguna untuk APIs HTTP yang kembali itu 200 Gagal gagal.

Jalankan

Setiap aksi dapat dijalankan terhadap API langsung dari langkah ini, sehingga Anda dapat memperbaiki jalur atau nama lapangan yang salah sebelum orang lain menggunakannya.

⚠️
Tindakan tulis dilindungi secara lalai. Mana-mana tindakan yang menggunakan POST, PUT, PATCH atau DELETE pada mulanya memerlukan kebenaran manage_integrations dan Ini disengaja. tindakan menulis baru gagal ditutup daripada membiarkan AI mengubah data Anda tanpa pengawasan.
💡
Untuk boleh dipanggil daripada sembang pelanggan, tindakan mestilah baca sahaja: biarkan kedua-dua Memerlukan pengesahan dan Merosakkan tidak ditandakan. Tindakan yang boleh dicetuskan oleh pelanggan dan juga mengubah keadaan bukanlah sesuatu yang wizard akan benarkan anda keluarkan secara tidak sengaja.

Menerima 5)

Langkah Pemicu Memicu memberimu webhook URL Untuk mendaftar dengan platform Anda, dan membenarkan setiap permintaan yang tiba di atasnya.

Kepala Tandatangan:

Kepala header Anda tanda-tanda platform dengan, misalnya X-Hub-Signature-256_.

Algoritma tandatangan Algojo tandatangan Algagoritme

HMAC-SHA1, HMA C-SHA256 atau HMA-SHA512.

Skema tandatangan bagi _andk:

Ringkas, iaitu cerna hex atau base64 biasa. Atau gaya Stripe, format t=…,v1=… yang digunakan oleh Stripe dan beberapa platform yang menirunya.

Awalan tandatangan

Beberapa platform awalan digest, misalnya sha256=. biarkan kosong jika anda tidak.

Pemetaan Peristiwa - Peristiwa yang dilakukan oleh virus

Petakan setiap acara yang dihantar oleh platform anda kepada acara OpsIQ yang sepatutnya dicetuskan.

Auto-daftar webhook

Jika platform anda mempunyai API untuk mengurus webhooknya sendiri, anda tidak perlu mendaftarkan URL secara manual. Buka Auto-daftarkan webhook ini yang diaktifkan Dan arahkan pada dua tindakan yang anda definisikan dalam langkah 4_:

Aksi Cipta-webhook

Anda memberikan nama parameter yang membawa URL_, secara opsional yang membawa daftar peristiwa, dan jalur dalam respon yang memegang id webhook baru.

Padam aksi damhan-webhook

Dipanggil apabila penyambung dinyahaktifkan, menggunakan id yang ditangkap di atas, supaya menyahaktifkan penyambung juga menghentikan platform anda daripada menghantar ke titik akhir yang sudah mati.

Keupayaan Anda dapat beralih pada

Profil dan keupayaan ditakrifkan oleh Connector Contract 2.2. Keupayaan yang dijana dan deklaratif dikeluarkan secara terus; keupayaan Enterprise menjana EnterpriseExtension.php Perancah dengan kabel sepeda hidup runtime.

Tindakan

Operasi yang boleh dijalankan oleh AI pada platform anda: menyenaraikan pesanan, mencari pelanggan, mengeluarkan bayaran balik.

Pencetus

Requind menerima webhooks dari platform Anda dan mengubahnya menjadi OpsIQ events.

Tiket AI

AI Triage dan Copilot balasan pada tiket yang kekal di platform anda. Pilih titik akhir yang mengembalikan satu tiket bersama balasannya dan petakan medannya; OpsIQ membaca bebenang itu melaluinya.

Kolab Folder, dan kontak

Dan sinkronkan buku alamatmu ke dalam CRM OpsIQ _.

Import customer ustomer

Selak senarai pelanggan anda halaman demi halaman dan import setiap satu sebagai kenalan OpsIQ. Inilah yang dijalankan oleh butang Import.

Konteks

Tolak data langsung daripada platform anda ke dalam setiap perbualan AI.

Identitas

Kenal pasti pelanggan anda yang mana satu pelawat itu, dan paparkan profil serta pembelian mereka pada tiket.

Jualan dan pengebilan

Salurkan peristiwa hasil dan angka MRR ke dalam papan pemuka OpsIQ.

Tiket masuk ke arah luar

Tukarkan tiket dan e-mel yang dihantar oleh platform anda melalui webhook kepada urutan sokongan OpsIQ.

Balasan keluar

Mempos OpsIQ _-_ para staf menjawab kembali ke platform thread berasal dari.

Pengguna sinkronis

Import akaun kakitangan anda ke dalam pengguna pentadbir OpsIQ.

Departemen-departmen Neuch

Import jabatan sokongan anda ke dalam OpsIQ.

Target Promo dan produk pakan

Biarkan Promotion Studio menyasarkan fakta yang anda ketahui tentang seseorang, dan paparkan produk sebenar anda dalam promosi.

Penyedia Survey Studio

Fakta Survei Terverifikasi-server ekspose, variabel yang kabur dan halaman penerima CRM Outreach terbelenggu melalui SurveyProvider yang didedikasikan. php. Ini tidak menggunakan kembali waktu berjalan Promosi.

Pemblokiran IP Pribumi

Bila OpsIQ blok IP, memanggil blok platform anda sendiri API jadi blok dikuatkuasakan di sana juga.

Peristiwa keselamatan

Reception diblokir-IP Sinyal ancaman dari... OpsIQ.

Pengetahuan Platform untuk AI

Setiap penyambung yang anda bina disertakan dengan rujukan ringkas yang menerangkan apa platform anda dan apa yang dilakukan oleh tindakannya. AI pentadbir OpsIQ membacanya setiap kali penyambung anda didayakan, jadi ia memahami platform anda dan bukan sekadar melihat senarai nama tindakan. Ini dijana untuk anda.

Laluan terus API

Penyambung anda sentiasa mendapat panggilan serba guna supaya AI boleh mencapai titik akhir yang anda tidak takrifkan tindakan bertaip untuknya. Gunakan tindakan bertaip di mana boleh; ini ialah jalan keluar kecemasan.

Canonical Connector Contract 2.2 referensi

Versi Kontrak: 2.7 · 59 capabilities · 8 profiles.

Profil penghubung

standard_api · Standard REST or GraphQL API

Actions, triggers, OAuth/API-key authentication and optional context/identity mappings. Capabilities: actions, triggers, native_api, ai_brain_aware.

commerce · Commerce and billing platform

Customers, orders, sales, subscriptions, billing, promotions and journey events. Capabilities: actions, triggers, journey_events, sales, sales_reconciliation, billing, sync_orders, customer_import, survey, promo_audience, promo_feed, context, identity.

helpdesk · Helpdesk and ticket platform

Inbound tickets, outbound replies/notes, customer roster, AI triage and bidirectional ticket mirroring. Capabilities: actions, triggers, inbound_ticket, outbound_reply, outbound_note, ai_tickets, customer_import, survey, context, identity, ticket_mirror, ticket_merge, attachment_bridge, conflict_resolution.

mailbox · Mailbox and email provider

Inbound/outbound mail, address-book sync, multi-account OAuth and CRM timeline integration. Capabilities: inbound_email, outbound_email, mailbox, email_mailbox, oauth, actions, customer_import, ai_reply.

site_intelligence · Site Intelligence data provider

SEO, analytics, search-console, local-search or monitoring provider with scheduled sync. Capabilities: actions, triggers, site_intelligence, seo, scheduled_workers, durable_queue.

saas_bridge · SaaS bridge

Deep two-way SaaS integration with customers, billing, identity, tickets, webhooks, queues, attachments and workers. Capabilities: actions, triggers, webhook, context, identity, customer_import, survey, journey_events, sales, sales_reconciliation, billing, inbound_ticket, outbound_reply, ticket_mirror, ticket_merge, attachment_bridge, durable_queue, scheduled_workers, database_migrations, conflict_resolution, enterprise_hooks, admin_assets.

no_api_bridge · Platform with no API (OpsIQ installs a bridge)

For a self-hosted PHP application that serves no callable API. The wizard generates a signed bridge file the operator drops into their own site, plus the typed actions that read and write through it. Capabilities: actions, platform_bridge, ai_brain_aware.

local_php_platform · Local PHP platform bridge

WHMCS-style local hooks, database access, two-way tickets, billing/customer sync, queues and migrations. Capabilities: actions, native_data, context, identity, customer_import, survey, journey_events, sales, sales_reconciliation, billing, inbound_ticket, outbound_reply, ticket_mirror, ticket_merge, attachment_bridge, durable_queue, scheduled_workers, database_migrations, conflict_resolution, enterprise_hooks, admin_assets.

Kemampuan untuk dapat diolah oleh kinical

Tindakan usil

Universal actions. Capability version: 1.0. Mode: generated. Runtime methods: registerActions. Package files: actions.json.

Pemicu ham

Inbound event triggers. Capability version: 1.0. Mode: generated. Runtime methods: handleWebhook. Package files: actions.json.

webhook

Inbound webhook endpoint. Capability version: 1.0. Mode: generated. Runtime methods: handleWebhook.

journey_events

Universal Journey Event Contract mapping. Capability version: 1.1. Mode: generated. Interfaces: OpsIQ\Connectors\JourneyEventConnectorInterface. Package files: settings.json.

context

AI context providers. Capability version: 1.0. Mode: generated. Runtime methods: contextProviders. Interfaces: OpsIQ\Connectors\ContextConnectorInterface. Package files: ContextProvider.php.

guest_lookup

Guest record lookup without login (reference + proof match). Capability version: 1.0. Mode: generated. Runtime methods: contextProviders. Interfaces: OpsIQ\Connectors\ContextConnectorInterface. Package files: GuestLookupProvider.php.

identiti

Admin/customer identity providers. Capability version: 1.0. Mode: generated. Runtime methods: identityProviders, detectAdmin, detectCustomer. Interfaces: OpsIQ\Connectors\IdentityConnectorInterface. Package files: IdentityProvider.php.

sales

Sales and revenue ingestion. Capability version: 1.4. Mode: generated. Interfaces: OpsIQ\Connectors\CommerceConnectorInterface. Package files: SalesIngest.php.

sales_reconciliation

Scheduled sales-ledger reconciliation and verification against the platform. Capability version: 1.2. Mode: generated. Runtime methods: reconcileSales, lookupSale. Interfaces: OpsIQ\Connectors\SalesReconciliationInterface, OpsIQ\Connectors\SaleLookupInterface.

billing

Cross-platform billing snapshot. Capability version: 1.0. Mode: generated. Runtime methods: billingProviders. Interfaces: OpsIQ\Connectors\BillingConnectorInterface. Package files: BillingProvider.php.

payments

Payment-provider capability bus. Capability version: 1.0. Mode: generated. Runtime methods: paymentsCapabilities.

Perdagangan

Sell through chat: canonical commerce role map. Capability version: 1.0. Mode: declarative. Package files: commerce_roles.json.

inbound_ticket

External ticket/email to OpsIQ ticket ingestion. Capability version: 1.0. Mode: generated. Runtime methods: handleWebhook. Interfaces: OpsIQ\Connectors\TicketMirrorConnectorInterface.

outbound_reply

Reply mirroring to the external platform. Capability version: 1.0. Mode: generated. Runtime methods: pushReply. Interfaces: OpsIQ\Connectors\TicketMirrorConnectorInterface.

ticket_merge

Ticket merges applied on the platform (native merge or private transcript note). Capability version: 1.0. Mode: generated. Runtime methods: mergeTickets. Interfaces: OpsIQ\Connectors\TicketMergeConnectorInterface.

ticket_custom_fields

Ticket custom fields in and out (sensitive values sealed, never sent to a platform). Capability version: 1.0. Mode: generated. Runtime methods: ticketCustomFieldPolicy. Interfaces: OpsIQ\Connectors\TicketCustomFieldsConnectorInterface.

secure_details_request

Secure Details Request shown as a native platform form (submissions always go to OpsIQ). Capability version: 1.0. Mode: generated. Runtime methods: presentSecureDetailsRequest. Interfaces: OpsIQ\Connectors\SecureDetailsRequestConnectorInterface.

sync_users

Staff/customer synchronisation. Capability version: 2.0. Mode: generated. Runtime methods: listCustomers. Interfaces: OpsIQ\Connectors\CustomerImportConnectorInterface. Package files: SyncImport.php.

sync_departments

Department/team synchronisation. Capability version: 1.0. Mode: generated. Package files: SyncImport.php.

sync_orders

Order roster and order-event synchronisation. Capability version: 1.0. Mode: declarative. Interfaces: OpsIQ\Connectors\CommerceConnectorInterface.

sync_products

Product, catalog and inventory synchronisation. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

sync_projects

Project, issue and workspace synchronisation. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

customer_import

CRM customer roster import. Capability version: 2.0. Mode: generated. Runtime methods: listCustomers, backfillChunk. Interfaces: OpsIQ\Connectors\CustomerImportConnectorInterface.

security_events

Receive and emit security events. Capability version: 1.1. Mode: generated. Runtime methods: securityCapabilities, syncBlockedIp, removeBlockedIp. Interfaces: OpsIQ\Connectors\SecuritySyncConnectorInterface.

security_native_block

Native remote IP/CIDR blocking. Capability version: 1.0. Mode: generated. Runtime methods: syncBlockedIp, removeBlockedIp. Interfaces: OpsIQ\Connectors\SecuritySyncConnectorInterface.

survey

Survey identity, audiences, recipients and variables. Capability version: 1.0. Mode: generated. Runtime methods: surveyAudienceCatalog, surveyAudienceFacts, surveyVariableCatalog, surveyVariables, surveyRecipientPage. Interfaces: OpsIQ\Connectors\SurveyConnectorInterface. Package files: SurveyProvider.php.

reply_feedback

Ticket reply feedback mirror (platform reply ratings land via the portal write method). Capability version: 1.0. Mode: generated. Runtime methods: replyFeedbackCatalog, pullReplyFeedback. Interfaces: OpsIQ\Connectors\ReplyFeedbackConnectorInterface.

promo_audience

Promotion targeting facts. Capability version: 1.0. Mode: generated. Runtime methods: subscribers. Interfaces: OpsIQ\Connectors\PromotionConnectorInterface.

promo_feed

Promotion product/content feed. Capability version: 1.0. Mode: generated. Interfaces: OpsIQ\Connectors\PromotionConnectorInterface.

email_mailbox

Mailbox bus, outbound mail and address-book sync. Capability version: 1.0. Mode: generated. Runtime methods: emailAccounts. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.

inbound_email

Receive inbound email. Capability version: 1.0. Mode: declarative. Runtime methods: poll, handleWebhook. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.

outbound_email

Send outbound email. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.

mailbox

Mailbox connector. Capability version: 1.0. Mode: declarative. Runtime methods: emailAccounts. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.

ai_tickets

AI triage and Inbox Copilot for remote tickets. Capability version: 1.0. Mode: generated. Runtime methods: loadTriageContext. Package files: AiOperations.php.

ai_reply

AI-assisted reply drafting. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

ai_brain_aware

Connector expertise supplied to Admin AI. Capability version: 1.0. Mode: generated. Package files: ai_expertise_admin.md, ai_api_reference.md.

native_api

Native API passthrough. Capability version: 1.0. Mode: generated. Runtime methods: registerActions.

platform_bridge

Signed platform bridge (for platforms with no API). Capability version: 1.0. Mode: generated. Runtime methods: registerActions. Package files: bridge/.

native_data

Local database/platform data adapter. Capability version: 1.0. Mode: declarative. Runtime methods: nativeDataProviders. Interfaces: OpsIQ\Connectors\NativeDataConnectorInterface.

kim

CRM capability provider (calendar, enrichment, telephony or customer data). Capability version: 1.0. Mode: declarative. Runtime methods: crmCapabilities. Interfaces: OpsIQ\Connectors\CrmCapabilityConnectorInterface.

block_registry

Remote sender block-registry synchronisation. Capability version: 1.0. Mode: declarative. Runtime methods: blockSender, unblockSender, isSenderBlocked. Interfaces: OpsIQ\Platform\BlockRegistryInterface.

inbound_comment

Inbound comment ingestion. Capability version: 1.0. Mode: declarative. Runtime methods: handleWebhook.

outbound_note

Outbound private note. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

outbound_notification

Outbound notification delivery. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

oauth

OAuth 2.0 authorisation. Capability version: 1.0. Mode: generated.

reviews

Review ingestion and response. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

local

Local search/location data. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

seo

SEO data and actions. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

site_intelligence

Site Intelligence provider. Capability version: 1.0. Mode: declarative. Runtime methods: siteIntelligenceProviders. Interfaces: OpsIQ\Connectors\SiteIntelligenceConnectorInterface.

analitik

Analytics data provider. Capability version: 1.0. Mode: declarative. Runtime methods: analyticsCapabilities.

comms

Communications/video-meeting provider. Capability version: 1.0. Mode: declarative. Runtime methods: commsCapabilities.

admin_assets

Connector-provided admin/account/public browser assets. Capability version: 1.0. Mode: generated. Runtime methods: adminAssets. Interfaces: OpsIQ\Connectors\AdminAssetConnectorInterface.

enterprise_hooks

Platform-native hooks and lifecycle callbacks. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.

durable_queue

Durable outbox/inbox queue and retry policy. Capability version: 2.0. Mode: extension. Package files: EnterpriseExtension.php.

ticket_mirror

Bidirectional ticket mirror with conflict handling. Capability version: 2.0. Mode: extension. Interfaces: OpsIQ\Connectors\TicketMirrorConnectorInterface. Package files: EnterpriseExtension.php.

attachment_bridge

Attachment upload/download transfer. Capability version: 2.0. Mode: extension. Package files: EnterpriseExtension.php.

database_migrations

Connector-owned schema migrations. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.

scheduled_workers

Connector-owned scheduled/background workers. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.

conflict_resolution

Two-way sync conflict strategy. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.

⚠️
Spesifikasi Builder kekal sebagai sumber yang berwibawa. Letakkan peraturan perniagaan khusus platform dalam titik sambungan yang dijana; kitaran hayat pakej, baris gilir, pekerja, migrasi dan ujian pematuhan kekal diurus oleh Builder.

Tetapan kebolehpercayaan pada setiap tindakan

Cuba Semula

Berapa kali panggilan yang gagal dicuba semula, dengan tempoh tunggu yang berganda pada setiap percubaan. Hanya tamat masa, ralat 429 dan ralat 5xx dicuba semula; ralat 4xx ialah kesalahan permintaan anda dan mengulanginya hanya akan menghabiskan had kadar anda.

Batas kadar morf

Had seminit untuk tindakan ini, supaya pencetus yang sibuk tidak membebankan platform anda. Biarkan pada 0 untuk tiada had.

Kehabisan data

Berapa lama untuk menunggu platform Anda sebelum menyerah.

Pengesahan Kepastian Menyadari

Memerlukan manusia meluluskan sebelum tindakan dijalankan. Gunakannya untuk apa sahaja yang memusnahkan.

Jenis otentikasi Arondisemen Agodin

Langkah ke - 2 Ambil yang cocok dengan platformmu. API Dokumentasi dokumentasi, generator memancarkan klien HTTP yang tepat untuk itu.

Key_kunci API pada header

Kunci statik yang dihantar sebagai pengepala tetap, contohnya X-API-Key. Anda memberikan nama pengepala dan label yang patut dipaparkan oleh borang pentadbir. Ini menghantar kunci sebagai pengepala sahaja; jika API anda menjangkakan kunci sebagai parameter pertanyaan, gunakan Pengepala tersuai atau penyambung kod penuh.

Token Bearer kin

Token sent as Authorization: Bearer <token>. Common for modern APIs.

Auth

Nama pengguna dan kata laluan, dikodkan dalam base64 ke dalam pengepala Authorization. Anda memilih label yang ditunjukkan oleh kedua-dua medan pada borang admin.

Tandatangan HMAC

Kunci publik ditambah rahasia, dengan badan permintaan ditandatangani.

OAuth 2.0 (Klien)

Server-ke-server, tanpa interaksi pengguna dan tanpa pengalihan. Anda memberikan token URL dan sebuah skop opsional; admin memasok ID klien dan rahasia. Gunakan ini ketika isu platform Anda kredensial ke aplikasi daripada ke orang.

OAuth 2.0 (butang Sambung)

Aliran kod kebenaran dengan PKCE, untuk Stripe, Shopify, Slack dan QuickBooksAnda memberi kebenaran. URL, the token URL dan skop. Selepas menerbitkan, pentadbir klik Sambung pada sambungan, mengesahkan di platform anda, dan OpsIQ menyimpan token segar semula dan mints akses token pada permintaan. Pautan balik URI untuk mendaftar dalam OAuth aplikasi dipaparkan pada halaman tetapan sambungan.

Kepala rumahan

Bentuk-bebas JSON peta pengepala untuk apa-apa yang corak di atas tidak meliputi, contohnya {"X-API-Key":"{api_key}","X-Tenant":"{tenant_id}"}. Setiap tempat letak menjadi medan pada borang admin.

💡
PKCE terpakai pada aliran butang Sambung sahaja. Aliran kelayakan klien tiada ubah hala dan tiada langkah pengguna, jadi PKCE tidak terpakai padanya.

Gaya peginasi

Ofset

Parameter offset dan batas DPRD. Contoh: ?offset=100&pembatas kata-kata=50.

Halaman

Contoh: ?page=3&Lapisan_halaman=50.

Kursor

Ufun menggunakan token kursor dari respon sebelumnya.

header Link Nizaid

Guna pengepala respon Pautan dengan rel="next".

Lanjutan: kode PHP suai

connector. php RETURNS sebuah instansi. Ini tidak menyatakan kelas bernama yang diburu OpsIQ _. Nama metode dibawah ini adalah yang diperlukan ConnectorInterface; mendapatkan salah satu kesalahan adalah fatal pada beban, bukan peringatan.

penghubung. php — kontrak yang sebenarnya, minimal dan dapat dijalankan
<?php
/* connectors/myplatform/connector.php */
declare(strict_types=1);

use OpsIQ\Connectors\AbstractConnector;

require_once __DIR__ . '/Client.php';

return new class extends AbstractConnector {

    /* ── the three identity methods. NOT identifier()/label(). ── */
    public function slug(): string        { return 'myplatform'; }
    public function name(): string        { return 'My Platform'; }
    public function description(): string { return 'Orders and customers from My Platform.'; }

    public function capabilities(): array { return ['actions', 'context']; }

    public function settingsSchema(): array
    {
        $f = __DIR__ . '/settings.json';
        if (!is_file($f)) return [];
        $j = json_decode((string)file_get_contents($f), true);
        return is_array($j['settings'] ?? null) ? $j['settings'] : [];
    }

    /* ── NOTE THE ARGUMENT. testConnection() with no parameter is a fatal. ── */
    public function testConnection(array $settings): array
    {
        try {
            $resp = \OpsIQ\Connectors\MyPlatform\Client::callWithSettings($settings, 'GET', '/me', [], []);
            $code = (int)($resp['http_code'] ?? 0);
            return ($code >= 200 && $code < 300)
                ? ['success' => true,  'info'  => ['message' => 'Connection OK', 'http_code' => $code]]
                : ['success' => false, 'error' => "Verify endpoint returned HTTP $code"];
        } catch (\Throwable $e) {
            return ['success' => false, 'error' => 'Test failed: ' . $e->getMessage()];
        }
    }

    public function onEnable(array $settings): array  { return ['success' => true]; }
    public function onDisable(array $settings): array { return ['success' => true]; }

    public function handleWebhook(array $payload, array $headers, array $settings): array
    {
        return ['success' => true, 'note' => 'No triggers declared.'];
    }

    /* Inherited from AbstractConnector: reads actions.json for you.
     * Override only to ADD actions the manifest cannot express. */
    public function registerActions(array $settings): array
    {
        return parent::registerActions($settings);
    }
};
⚠️
Three things that fatal at class load rather than failing gracefully. The identity methods are slug(), name() and description() — not identifier() and label(). testConnection() TAKES an array of settings; a no-argument version is an incompatible signature. And there is no $this->http() or runAction() on AbstractConnector — HTTP goes through your own Client.php or through an action declared in actions.json.

Cermin tiket ke dalam sistem tiket asal

Apabila platform anda memiliki tiket, cerminkannya ke dalam OpsIQ daripada penyambung anda menggunakan pembantu pengambilan tiket yang diwarisi oleh penyambung anda (create untuk tiket baharu, add-reply untuk susulan). Pancarkan dan langgan peristiwa tiket universal dalam penyambung anda melalui subscribers() Metode , ticket.created, ticket.replied, ticket.updated, ticket.deletedAuto-reply, eskalasi, SLA dan CSAT semua hook acara yang sama, sehingga Anda mewarisi mereka tanpa kode tambahan.

Jika kau menangani ticket.deleted, anda juga mengendalikan penggabungan. Sebuah tiket gabungan membawa membawa merged_into dan tidak dihantar kepada penyambung yang mengisytiharkan ticket_mergeurdon ; penggabungan tiba sekali sebagai ticket.merged sebaliknya, supaya anda boleh menggabungkan di platform anda dan bukannya menutup tiket yang digabungkan di sana. Lihat Kemampuan gabungkan tiket (Kontrak 2.4).

Kata orang yang menulis pesan pembukaan

Tiket selalu untuk Pelanggan, tapi pesan pembukaan mungkin ditulis oleh staff: ejen membuka tiket bagi pihak pelanggan, atau menghubungi secara proaktif. Setiap helpdesk menyokong perkara ini, jadi ia sebahagian daripada kontrak universal ticket.created kontrak daripada sesuatu yang setiap sambungan menyelesaikan secara peribadi.

author_type

Klien (default) atau admin. Abaikan dan pelanggan diasumsikan.

author_id

ID staf ketika author_type=admin. Jangan pernah id pelanggan.

author_name

Nama paparan ejen atau jabatan. Kembali ke "Kad".

author_email

Agen agen alamat. tidak pernah pelanggan satu pesan staf di bawah email pelanggan adalah laporan dan audit error.

Ini bukan kosmetik. Konsumer membaca author_type Sebuah pembukaan tertulis staf dilaporkan sebagai client Dan membuat gema platform Anda dari pembukaan yang terlihat seperti pesan pelanggan segar, yang kemudian mendarat sebagai duplikat dan membalik tiket ke dijawabPetakan sinyal platformmu di dalamnya di konektormu Penormal acara nizomisJangan di dalam konsumen.

Pemblokiran terpusat

Ketika agen memblokir pengirim, yang berlaku di seluruh Setiap saluran serta-merta (e-mel, sembang, portal, widget dan setiap kembar penyambung) kerana sekatan dikuatkuasakan secara berpusat, sebelum mana-mana penyambung melihat mesej itu. Penyambung anda mewarisinya tanpa melakukan apa-apa. Tiada kerja masuk untuk dilaksanakan dan tiada cara untuk melakukannya dengan salah.

Bagian opsional adalah Kemudimengatakan pada platform anda pelanggan diblokir disini. Implementasi hanya jika platform anda dapat menyatakan sesuatu yang setara.

capabilities ()

Mesti termasuk block_registry DAN kelas itu mesti melaksanakan BlockRegistryInterface. Bendera itu satu dakwaan; antara muka itu jaminannya. Daftar itu memerlukan kedua-duanya.

blockSender($b)

Menerima jenis (emel|domain|ip), nilai, sebab, admin_id, tamat_pada, kunci_laman. Kembalikan [hasil, perincian?, rujukan_jauh?].

unblockSender($b)

muatan yang sama, dibalik pasti tidak menguntungkan melepaskan sesuatu yang tidak pernah diblokir adalah noop, bukan kesalahan.

isSenderBlocked($b)

Untuk rekonsiliasi, jadi drift dilaporkan daripada ditemukan oleh pelanggan.

Nilai hasil

ok

Digunakan untuk platform anda. Sertakan remote_ref bila anda memiliki id yang layak untuk direkam.

noop

Sudah di negara bagian yang diminta.

unsupported

Platformmu tidak memiliki konsep yang setara.

irango gagal

Anda boleh melakukannya dan ia tidak berjaya. Sertakan butiran; ia akan masuk ke jejak audit.

Menolak ialah jawapan yang betul. Banyak platform tidak mempunyai konsep "halang penghantar ini" dan hanya menawarkan penangguhan AKUNTANSI, yang berhentikan bil, log masuk dan perkhidmatan berbanding hanya menyokong mel. Memeta "agen menghalang alamat spam" ke "tutup akaun klien ini" akan membiarkan satu klik salah menghalang perkhidmatan pelanggan yang membayar. Jika itu satu-satunya tuas anda ada, kembali unsupported Dan biarkan saja.

Pencacahan Colak juga mencakup kasus di mana platform boleh melakukannya tetapi tidak akan membenarkan anda. Semak sama ada terdapat API, bukan ciri: tuil yang hanya wujud dalam UI admin platform ialah tuil yang tidak dimiliki oleh penyambung anda.

Contoh · Zendesk (perlaksanaan referensi)

Bacalah connectors/zendesk/connector.php alongside this. It is short, and every branch below is a decision you will face too.

→ ok

PUT /api/v2/users/{id} dengan suspended=true. Permintaan baharu daripada pengguna akhir yang digantung dialihkan ke Tiket Digantung dan bukannya membuka tiket baharu, benar-benar idea yang sama dengan menyekat pengirim, dan ia tidak menghentikan sebarang pengebilan kerana pengguna akhir Zendesk tidak mempunyai pengebilan. Mengembalikan id pengguna sebagai remote_ref.

domain → tidak didukung

Zendesk HANY Zendesk s CAN suspensi seluruh domain, tetapi hanya melalui suspend: kata kunci dalam textrea daftar blok Admin Center, dan tidak ada API _menulis bidang tersebut. Fiturnya ada; tuas tidak.

ip →RAS tidak didukung

Tidak ada blok IP _tersedia.

alamat → noop tidak diketahui

Zendesk tidak dapat menggantung terlebih dahulu alamat yang tidak pernah dilihatnya. Tiada apa-apa untuk dilakukan bukanlah satu kegagalan, dan sekatan setempat masih menghentikan tiket itu.

ejen atau admin → tidak disokong

Staf yang sedang menunggu akan mengunci rekan kerja dari helpdesk. alamat staf yang mencapai daftar blok jauh lebih mungkin menjadi kesalahan daripada instruksi, memeriksa peran sebelum Anda bertindak di atasnya.

Baris terakhir itulah yang patut ditiru. Kontrak tidak dapat menghalang anda daripada memetakan satu blok kepada sesuatu yang merosakkan, jadi setiap penyambung perlu menentukan sendiri apa yang akan ditolaknya. Menolak dengan jelas, dengan detail Operator dapat membaca, mengalahkan mematuhi.

Laporan jujur. Perhatikan seberapa sedikit dari baris-baris itu ok. Itulah hasil yang betul, bukan kekurangan: sekatan domain tetap berfungsi (ia dikuatkuasakan dalam teras sebaik sahaja ditulis); cuma ia tidak boleh dicerminkan ke luar. Mengembalikan ok Untuk sesuatu yang tidak kau lakukan akan memberitahu operator blok mencapai platformmu ketika itu tidak pernah meninggalkan OpsIQ_.

Aturan

\"Hantaman lokal selalu menang\"

Ia ditulis SEBELUM anda dipanggil dan kekal apa pun yang anda kembalikan. Anda tidak boleh menghalang pengendali daripada menyekat seseorang.

Jangan pernah melempar

A throw dianggap tidak didukung dan direkam. Return gagal dengan detail sebaliknya sehingga alasan bertahan hidup.

Jadilah idempoten

Blok yang sama mungkin diumumkan lebih dari sekali.

Cepat kembali

Fan-out adalah sinkron dengan klik operator. Antrian kerja lambat daripada memegang permintaan terbuka.

Jangan panggil kembali

Jangan sekali-kali menghantar semula ke dalam OpsIQ daripada pengendali anda. Pendaftaran melangkau penyambung asal, tetapi lompatan kedua akan menyebabkan gelung.

Setiap pengumuman ditulis untuk opsiq_block_registry_log (operasi, jenis, nilai, sebab, pentadbir, asal, slug penyambung, keputusan, butiran dan cap masa) supaya pengendali boleh melihat bahawa sekatan datang dari platform anda dan bukan daripada ejen, serta apa yang dilakukan oleh setiap penyambung terhadapnya.

Mendorong lampiran dengan benar

Tangan seorang attachments array kepada create()/addReply(). Setiap item membawa fail dalam salah satu daripada tiga bentuk:

content_b64

Base64 dari byte file RAW, digunakan untuk berkas di belakang auth (kebanyakan kasus inbound). OpsIQ decodes dan host ulang file untuk Anda. Bentuk paling portabel.

url Sumber/sumber_url

A public httpsURL(e.g. a.Zendeskcontent_url). Mesti https; melewati pemeriksaan SSRF / ijinkan daftar sebelum disimpan.

stored_path

Rujukan file tersimpan yang sudah Anda tulis (apa yang dihasilkan oleh penggubah asli).

Items also accept filename, mime_type and size_bytes. Caps: 12 MB/file, ~24 MB total, 10 files per call. Most platform read APIs return attachment Nama file hanya (tidak byte), jadi pola inbound yang dapat diandalkan adalah: baca byte di mana kode Anda sudah berjalan (di dalam platform, atau dari muatan webhook), base64 mereka, dan kapal mereka sebagai content_b64 Di acara itu.

Outbound (OpsIQ →platform Anda). Ketika agen melampirkan file, ticket.replied Muatan memberi Anda file balasan sebagai stored_path Barang-barang di bawah OpsIQ Baca dan tekan dalam format platform Anda sendiri, dan periksa dokumen platform, hal pengkodean: WHMCS Kau ingin base64_encode(json_encode([[name,data]])) (JSON, bukan serialize); Zendesk upload mentah bytes ke /uploads.json \"Dia akan membuat token\" comment.uploads; Gmail menghantar mesej multipart/mixed RFC-822 yang dikodkan base64url dalam raw; Amazon SES inbound attachments need the S3 receive action (the SNS path caps at 150 KB).

Platform jarak jauh: API + webhook, tidak pernah ada tabel aplikasi lain

Jika platform Anda adalah aplikasi atau basis data terpisah yang diberikan oleh kedua orang (SaaS yang dihoskan, WHMCS jauh, pangkalan data lain pada pelayan yang sama), Tidak pernah menulis tabelnya secara langsung: penulisan merentas pangkalan data akan jatuh pada mana-mana sambungan yang aktif dan terlepas baris sebenar tanpa disedari. Sentiasa: Kemudi ====Memanggil platform ditandatangani REST API (replies, status, departemen, deletes); Kekejaman masuk = platform POSTs sebuah webhook ditandatangani, Anda handleWebhook() Memverifikasinya dan membakar pencocokannya. ticket.* Untuk menghentikan lingkaran cermin, tandai apa yang Anda tekan dengan penanda asal (misalnya. mirror_origin:'opsiq'); platform memantulkannya semula dalam webhook dan pengendali masuk anda melangkau pantulannya sendiri. Semak OpsIQEvents::isMirroredEvent() Di atas setiap handler.

Cerminkan status, keutamaan & jabatan

Balasan menukar status secara automatik, satu Agen agen seorg Balas →_ answered, a pelanggan Balas →_ customer_reply; cerminkan dengan cara yang sama. Untuk perubahan eksplisit, langgan ticket.updated dan baca payload['changes'] dargon (e. g. {status:'closed'}).

Status: Set kanunisable OpsIQ_ adalah open, customer_reply, answered, in_progress, pending, closed. Simpan peta dua hala yang kecil kepada perbendaharaan kata platform anda, dan pastikan lajur anda benar-benar menerima nilai yang anda tulis (an ENUM A nilai hilang akan diam-diam dijatuhkan ke kosong oleh beberapa database). Departemen Luar Negeri: Nama departemen OpsIQ tidak berarti di sisi Anda, jangan sekali-kali menghantarnya. Hantar deskriptor (name, email dan slugDan menyelesaikannya melawan departemenmu sendiri lewat e-mail.→Nama font→Jadi, \"Billing Department\" mendarat di Kau Departemen Billing Ketimbang UmumPemicu pada keduanya ticket.escalated Dan department_id Pergantian di dalam ticket.updated.

💡
Pencerminan status / keutamaan / subjek / jabatan / pemadaman dikawal oleh togol bagi setiap penyambung (mirror_status_changes, mirror_priority_changes, mirror_subject_changes, mirror_department_changes, mirror_deletes) yang dibaca melalui pembantu kongsi OpsIQ\Connectors\MirrorOptions. Benamkan blok itu dalam settings.json anda dan setiap penyambung pencerminan tiket membaca togol tersebut dengan cara yang sama.

Kemudikan tiket ke produk / layanan

Jika pelanggan memilih produk tertentu semasa membuka tiket, stamp petunjuk supaya ejen melihat kad perkhidmatan terfokus (dengan satu-klik "lihat produk lain" modal untuk selebihnya). Serahkan mana-mana daripada ini ke create():

related_service_id

Preferred: the service id exactly as it appears in your IdentityProvider::lookupCustomerServices() list (each service's id). Unambiguous match.

related_service_label

Sebuah platform service-code, mis. WHMCS - - -- ---- - -=--396) / D11 (domain11). OpsIQ Füphne menguraikan tipe-huruf opsional + id dan cocok dengan daftar layanan Anda, dengan type guard sehingga kode domain tidak pernah cocok dengan produk dari id yang sama. Expose ref yang sepadan pada setiap layanan untuk pertandingan yang tepat.

related_domain

Nama domain A; dipertandingkan sebagai substring terhadap detail / domain masing-masing layanan.

💡
Buat daftar lampiran sekali, dalam bentuk di atas, dan OpsIQ Sisa: tuan rumah URLs Anda tidak perlu menulis penanganan berkas per platform.
⚠️
Kunci tindakan terdiri daripada huruf kecil, digit dan garis bawah. Builder menerima 3 hingga 80 aksara dan juga membenarkan titik; stor tindakan menerima 2 hingga 100 aksara tanpa titik, jadi gunakan huruf, digit dan garis bawah sahaja dan anda memenuhi kedua-duanya. Menambah tindakan tidak mencipta laluan AJAX, jadi tiada apa-apa untuk dijana semula — simpan semula penyambung dan ia akan disegerakkan.

Biarkan AI membangunnya untukmu

Anda tidak perlu mengisi enam langkah itu secara manual. Terangkan penyambung dalam perkataan anda sendiri dan AI OpsIQ akan mendraf keseluruhan spesifikasi, menjalankannya melalui pengesah yang sama yang digunakan oleh wizard, dan menunjukkan pelan kepada anda sebelum apa-apa ditulis ke cakera. Terdapat dua tempat untuk melakukannya, dan kedua-duanya menghasilkan pakej yang sama.

Di wizard

Buka Penyambung → + Tambah penyambung → Bina penyambungPada langkah 1 Anda akan melihat ✨Buatkan untukku.. Taip untuk apa penyambung itu — platform, apa yang patut dibaca dan ditulis oleh OpsIQ, dan siapa yang menggunakannya — tambah akar API jika anda mengetahuinya, dan tekannya. Pembantu persediaan mengisi setiap langkah daripada draf, dan anda menyemak serta mengedit sama seperti anda menaipnya sendiri. Pada langkah 6 panel yang sama muncul sebagai ✨Dimurnikan dengan AI, jadi anda boleh meminta perubahan ("juga baca bil") daripada menyunting medan.

Dengan bertanya OpsIQ_

Buka Tanya OpsIQ_ Kopilot co-pilot di mana saja dalam admin dan katakan apa yang kau inginkan. kau tidak perlu menyebutkan sebuah tindakan atau tahu penyihir itu ada.

1
Mintalah untuk itu

Sebagai contoh: "Buatkan saya sambungan untuk TrelloIa patut daftar papan dan senarai saya, membaca kad, dan mencipta kad pada papan. Trello menggunakan API "Kopilot menjawab dalam satu ayat dan menunjukkan Drafkan penyambung ini Kartu kartu. pesan Anda singkat, jadi letakkan platform, baca dan tulis di dalamnya.

2
Konfirmasi draft

Belum ada apa-apa yang ditulis. Kopilot mendrafkan spesifikasi, mengesahkannya, dan membalas dengan pelan: apa yang dilakukan oleh konektor, tindakan yang akan didedahkannya (tindakan tulis ditandakan), andaian yang dibuatnya, dan soalan yang masih perlu anda jawab, biasanya bukti kelayakan mana yang perlu dibekalkan. Draf itu disimpan di bawah satu id dan kekal tersedia selama 24 jam.

3
Katakan "bina"

Copilot co-pilot menunjukkan Bina card naming the connector and its slug. This one writes: it publishes the package into /connectors/<slug>/. Confirm it and you get the path back, together with the setting you still have to fill.

4
Kelayakan untuk Enter \"Frout\" dan diaktifkan

Penyambung baharu diterbitkan tetapi TIDAK didayakan, dan ia tidak menyimpan sebarang rahsia. Buka tetapannya, masukkan kunci API atau token, tekan UjiKalau begitu HidupkanSampai kau melakukannya, itu tidak ada gunanya.

💡
Kedua-dua kad memerlukan klik anda. Langkah draf tidak menulis apa-apa langsung; langkah bina ditanda sebagai merosakkan dan sentiasa meminta pengesahan. AI tidak boleh menerbitkan penyambung, mendayakannya, atau memasukkan kelayakan dengan sendirinya.

Apa AI adalah dan tidak diperbolehkan untuk melakukan

-Valator adalah dinding

Spesifikasi yang didraf melalui validate() yang sama seperti yang digunakan oleh butang Terbitkan dalam wizard. Jika ia tidak lulus, AI diberikan ralat tersebut dan mencuba lagi, sehingga tiga kali, dan kemudian menolak dengan kata-kata pengesah itu sendiri. Draf yang gagal tidak sekali-kali menjadi pakej.

Ini tidak menulis surat kelayakan

Draf menamakan corak pengesahan dan medan tetapan; ia tidak pernah mereka kunci, token atau rahsia. Anda mengisinya kemudian pada halaman tetapan penyambung.

Ia menjawab dengan soalan, bukan tekaan

Apa-apa yang tidak dapat diketahuinya — ID akaun anda, rantau mana, titik akhir mana antara dua yang didedahkan oleh pelan anda — dikembalikan sebagai soalan pada rancangan itu dan bukannya andaian senyap.

Sebuah titik akhir yang diciptakan gagal keras

AI tidak pernah disuruh untuk menemukan jalan, tetapi tidak ada model yang sempurna.

Pakej itu biasa sahaja

Apa yang ia keluarkan adalah pakej Pembina biasa: fail dijana sama, kontrak sama, tandatangan sama, boleh disunting dalam wizard, boleh dipadam dari halaman Penyambung. Tiada jenis "penyambung AI" terpisah.

Modelmu membuat rancangan.

Kualiti bergantung pada model yang anda konfigurasikan di bawah Tetapan → AI. Model kecil yang murah mendrafkan penyambung yang betul tetapi ringkas dan bertanya lebih banyak soalan; model yang lebih kukuh mendapat lebih banyak titik akhir dengan betul pada kali pertama. Tukarkannya di bawah konfigurasi AI; tiada perkara lain yang perlu diubah.

⚠️
Kopilot hanya boleh menjalankan tindakan yang benar-benar didaftarkan dalam pemasangan ini. Jika tindakan Connector Builder tiada — pelan yang tidak merangkuminya, atau peranan tanpa manage_connectors Kopilot mengatakan demikian daripada menawarkan kartu yang tidak akan berfungsi jika diklik.
Penyambung

Jual melalui sembang: peta peranan dagangan

Penyambung yang boleh menjual — platform kedai, sistem tempahan, gerbang pembayaran — mengisytiharkan operasi MILIKNYA SENDIRI yang menjawab peranan perdagangan kanonik OpsIQ. Isytiharkannya dan penyambung itu muncul di bawah Tetapan → Sembang Pelanggan → Menjual melalui sembang secara automatik; berhenti mengisytiharkan dan ia hilang. Tiada senarai untuk didaftarkan.

Berkas: commerce_roles.json

Pengisytiharan itu terletak dalam failnya sendiri di akar pakej — Kehadiran file adalah klaim. Ia tidak boleh berada dalam connector_contract.jsonBerkas itu diregenerasi oleh alat pengepakan dan skemanya menolak kunci yang tidak diketahui, sehingga blok yang ditambahkan tangan akan gagal validasi dan kemudian ditulis-ganti.

commerce_roles.json
{
  "commerce": {
    "roles": {
      "catalog_search": { "operation": "acme_search_products", "transport": "http" },
      "customer_lookup": { "operation": "acme_customer_lookup", "transport": "http" },
      "quote":          { "operation": "acme_quote_order",     "transport": "http" },
      "payment_methods": { "operation": "acme_payment_methods", "transport": "http" },
      "order_get":      { "operation": "acme_get_order",       "transport": "http" },
      "order_create":   { "operation": "acme_create_order",    "transport": "http",
                          "recovery": "acme_get_order" }
    },
    "customer_ordering": {
      "enabled": true,
      "version": 1,
      "mode": "direct_order",
      "audience": "clients_only",
      "account_flow": "existing_client",
      "payment_flow": "connector_methods",
      "identity_parameter": "external_customer_id",
      "quantity_parameter": "quantity",
      "label": "Acme Store",
      "checkout_hosts": [],

      "transaction_kind": "purchase",
      "decision_mode": "immediate",
      "payment_timing": "on_confirmation",
      "reversibility": "reversible",
      "cancellation_flow": "platform_only",
      "fulfilment_presence": "remote_delivery",
      "notify_flow": "platform_automatic",
      "customer_fields": {"name": "required", "email": "required", "address": "required", "phone": "optional"},
      "client_tools": ["catalog_search", "catalog_get", "quote"],
      "account_timing": "before_quote"
    }
  }
}

Aturan, dan mengapa masing-masing ada

Peranan adalah kosakata tertutup

OpsIQ Peran yang tidak pernah dinyatakan tidak ada — menyatakan adalah seluruh kontrak.

Operasi ini pasti salah satu tindakanmu.

Semua operasi yang dipetakan pasti ada dalam dirimu. actions.jsonKesalahan tatabahasa menyatakan keupayaan yang tidak boleh dijalankan, dan ia muncul kepada pelanggan sebagai "Saya boleh memeriksanya untuk anda" diikuti dengan tiada apa-apa.

Sebuah peran baca tidak pernah menunjuk pada operasi destruktif

Peranan baca (katalog, ketersediaan, sebut harga, carian pesanan) mesti dipetakan kepada operasi yang tidak mengubah apa-apa pada platform anda.

Peran menulis tidak pernah memetakan ke operasi catatan generik

Pemetaan Pelepasan order_create ke selit meja mentah — record.create, db.insert, recordCreateSebuah baris yang ditulis langsung melewati harga platform Anda, penguncian saham dan konfirmasi surat, menghasilkan perintah sistem Anda sendiri tidak sepenuhnya percaya.

Peran menulis menyatakan operasi pemulihan

Satu carian idempoten yang menjawab "adakah penulisan saya berakhir?". Masa tamat paling berbahaya adalah satu selepas platform anda mungkin telah mencipta perintah; tanpa carian pemulihan, pilihan hanyalah cuba lagi secara buta atau kehilangannya.

Peranan pembayaran yang gagal-pembayaran penyedia-NYAN membawa tiga kewajiban tambahan

Pakej yang berhubung terus dengan penyedia pembayaran mesti juga mengisytiharkan payment_profile (Surrences, negara, metode dan Persekitaran Keanehan — lingkungan yang tidak dinyatakan adalah bagaimana integrasi tes mengambil pembayaran langsung), webhook_verify (Skema tandatangan nyata penyedia; komparasi rahasia generik ditolak) dan event_map (acara penyedia kepada acara kanonik). Penyambung peniaga yang hanya melaksanakan record_payment Kewaspadaan yang sudah diverifikasi bukti pembayaran kanonik; tidak boleh berpura-pura menjadi gerbang.

Isytiharkan cara pelanggan boleh membuat pesanan daripada kedai yang disambungkan

Penyambung peniaga dan penyambung get laluan pembayaran ialah kontrak yang berbeza. Di bawah Pelanggan kedai yang disambungkan membuat pesananPilih mode terdalam yang dapat dibuktikan oleh platform pilihan telah dipaketkan didalam signed commerce_roles.json; Kedai dan Sembang Pelanggan membacanya semula pada masa pelaksanaan. Oleh itu, mengalih keluar peranan atau menyahdayakan/menyahpasang penyambung akan membatalkan cadangan yang telah dipaparkan sebelum ini dan bukannya meninggalkan kuasa yang sudah lapuk.

catalog_only

Peta Peta catalog_search atau catalog_get. OpsIQ boleh mencari dan menerangkan produk, tetapi ia tidak boleh memaparkan pesanan yang boleh dilaksanakan atau pengesahan pembayaran. Setiap pakej kekal pada tetapan lalai yang jujur ini sehingga tindakan sebut harga bertaip dan pembayaran/pesanannya sendiri lulus kontrak yang lebih mendalam dan pensijilan Marketplace; jangan sekali-kali menyimpulkan sokongan transaksi daripada nama platform.

platform_checkout

Juga peta quote dan platform_checkout. Tindakan peniaga—bukan OpsIQ core—kembali checkout_url, checkout_reference dan sebut harga kanonik. URL mestilah HTTPS, nama hosnya mesti sepadan dengan customer_ordering.checkout_hosts Nama dan nama host HTTPS berasal dari checkout_host_setting, dan sebut harga boleh kekal tidak lebih daripada 15 minit. Pautan kekal produk, URL troli yang dihimpun secara setempat atau URL kembali bukanlah keupayaan pembayaran yang dikeluarkan oleh peniaga.

direct_order

Juga peta quote, order_create dan order_get, dengan order_create.recovery. Core memuat semula sebut harga sejurus sebelum pelaksanaan, membekalkan kunci idempotensi, dan memanggil operasi pemulihan selepas setiap hasil yang tidak diketahui sebelum sebarang cubaan semula. Apabila payment_flow=opsiq_gateway, ia juga mesti memetakan record_payment dengan operasi pemulihan/baca semula yang berwibawa. OpsIQ secara aktif mengesahkan transaksi get laluan, memadankan jumlah, mata wang, pedagang dan rujukan pesanan, menulis rujukan pembekal sekali, kemudian membaca semula invois/pesanan pedagang. mark_invoice_paid togol status ditolak kerana ia tidak membawa bukti pembayaran. Tindakan create mesti memanggil logik perniagaan harga, stok dan pesanan platform itu sendiri; penulisan terus ke pangkalan data ditolak.

Verifikasi identitas, dan apa yang operator dapat mengubah

Apabila OpsIQ mengendalikan pembayaran, pelanggan sembang mesti sampai ke email_otp sebelum pesanan dicipta — OpsIQ menghantar kod 6 digit melalui e-mel dan memintanya. Ini bukan sesuatu yang boleh dielakkan oleh penyambung; ia ialah tahap jaminan minimum yang dituntut oleh kernel pelaksanaan untuk order_create.

Kecuali satu, dan siapa yang mengendalikannya

Operator mungkin menerima alamat yang belum diverifikasi ONLY mana penghubung Anda menyatakan fulfilment_presence: customer_present. Tetamu hotel mesti hadir sendiri, jadi alamat yang salah hanya menyalah hantar resit dan bilik itu masih ada. Isytiharkan remote_delivery — dihantar, diperuntukkan, dimuat turun — dan pengesahan diperlukan walau apa pun tetapan pengendali, kerana nilai keluar semata-mata berdasarkan alamat itu. Menetapkan minimum_assurance atau reversibility: irreversible Adonan juga menghilangkan kemampuan operator untuk melewatkannya.

Berapa lama kode berlangsung

Tiga puluh minit secara lalai, boleh dikonfigurasikan oleh pengendali dari 5 minit hingga 24 jam. Pelanggan melihat kiraan mundur langsung yang dipaparkan dalam Mereka sendiri kode yang sudah kadaluarsa mengatakan begitu jelas dan menawarkan yang baru daripada melaporkan kode tidak sah — pelanggan mengetik kode yang benar-tapi-lama tidak membuat kesalahan, dan memberitahu mereka telah mengirimkannya putaran yang sama.

Perkara yang mesti diberikan oleh pelanggan: customer_fields

Nama dan email selalu diperlukan dan dikumpulkan terlebih dahulu. address, phone dan company as required atau optional untuk disesuaikan dengan perniagaan: kedai yang menghantar bungkusan mengisytiharkan alamat sebagai wajib; hotel mengisytiharkan telefon sebagai wajib, kerana tetamu yang tidak dapat dihubungi tidak mempunyai kenalan tempahan. Pembantu memintanya dalam perbualan sebelum memberikan sebut harga, dan OpsIQ menolak untuk membuat pesanan yang tidak mempunyai medan wajib. Pembina menulis peta yang dinormalkan, termasuk garis dasar, supaya kontrak pada cakera adalah eksplisit.

Sayan_timasi

at_order (lalai) membenarkan penulisan pesanan mencipta akaun pembeli kali pertama. Isytiharkan before_quote apabila platform anda menetapkan harga mengikut akaun — WHMCS mengenakan cukai mengikut profil pelanggan itu sendiri dan memberikan sebut harga dalam mata wang pelanggan — dan OpsIQ mencipta akaun itu melalui customer_create tindakan sebaik sahaja medan yang diperlukan diketahui, kemudian meminta sebut harga untuk akaun tersebut, supaya kad pengesahan membawa jumlah yang akan anda invoiskan sebenarnya. Memerlukan account_flow: connector_signup.

Fetch asisten, tidak membaca: client_tools

Dengan perintah, asisten tidak pernah membaca katalog yang ditempelkan. commerce_catalog_search (pertanyaan kosong ialah gambaran keseluruhan keluarga produk; hasil yang melebihi had disenaraikan mengikut nama), commerce_catalog_get Dan untuk satu barang penuh, dan commerce_quote, yang mencipta kad pengesahan bertandatangan di pihak pelayan melalui dinding yang sama seperti yang sentiasa ada pada laluan penyambung. Satu alat bagi setiap kata kerja, penyambung anda sebagai parameter, jadi kedai dengan enam penyambung mendapat tiga alat dan bukannya lapan belas. client_tools Tidak ada artinya setiap yang dipetakan, dan catalog_only konektor tidak pernah membuat sebut harga. Pengesahan tidak pernah menjadi alat: butang kad di web, nombor kad di saluran, dan tiada apa-apa yang dikatakan oleh model akan membelanjakan wang. Di saluran, pelanggan membalas dengan NOMBOR pada kad — itu sahaja sudah mengesahkan apabila satu pilihan pembayaran ditawarkan, dan nombor serta nama pembayaran apabila terdapat beberapa pilihan. Nombor ialah satu-satunya perkara yang mesti tepat: perkataan “sahkan” adalah pilihan, jarak, perkataan di sekelilingnya dan tanda baca diabaikan, dan nama pembayaran dipadankan tidak kira bagaimana ia dieja. Nombor yang tidak sepadan dengan sebarang sebut harga langsung dalam perbualan itu dianggap sembang biasa, jadi pelanggan yang menaip nombor rumah akan dijawab, bukan ditolak. Keseluruhan kad — kuantiti, jumlah, pilihan pembayaran, arahan balasan dan tarikh luput — ditulis dalam bahasa PELANGGAN apabila pengesanan bahasa sembang dihidupkan (Tetapan → Sembang Klien), bukan bahasa ruang kerja.

Apa yang perlu ada pada item katalog anda

id, name, sebuah pelanggan-aman summary, a category Keluarga produk atau produk (inilah cara kata pelanggan menemukan item yang namanya kode), currency, unit_amount_minor, available, dan input_schema undi menamakan bidang tersebut sebagai kebutuhan pesanan. Pencarian memberikan skor kata pelanggan terhadap nama, keluarga, siklus dan ringkasan.

Menolak dengan alasan pelanggan dapat bertindak pada

Kembalikan {"success":false,"error":"…","missing":["domain"],"retryable":true} Bila nilai salah atau hilang, penolakan nama itu missing atau retryable ¡Oobia mencapai verbatim pelanggan; kegagalan telanjang tetap generik sehingga tidak ada kebocoran internal.

Mata wang geo dan hentian kecemasan

Apabila pengendali menghidupkan Mata wang geo (Client Chat → Behaviour), pelanggan membaca harga dalam mata wang mereka sendiri pada setiap permukaan — teks sembang, kad web, kad teks saluran dan mata wang pembukaan kedai dalam talian — menggunakan stor FX platform sendiri. Harga anda tidak sekali-kali digantikan: kad memaparkan angka pelawat di sebelah jumlah kedai, dan get laluan memproses tepat jumlah yang dipaparkannya. \"Berjualan\" [Setingan] → Commerce) adalah kill switch: katalog, kutipan dan look-up tetap terbuka; mengusulkan dan mengkonfirmasi berhenti di setiap saluran.

Jika menjual melalui chat tidak berperilaku

Peniaga tidak dapat dihubungi

Meterai pakej telah rosak: satu fail telah disunting selepas ditandatangani. Terbitkan semula pakej itu. Salinan pasaran yang dipasang tidak pernah disunting di tempatnya; kemas kininya daripada panel pasaran.

Pesanan dihentikan seketika untuk kedai ini pada masa ini

Suis pemutus sedang hidup. Tetapan → Perdagangan → Jeda semua jualan.

Pemertian freak belum tersedia di saluran ini

Saluran itu tidak ditandakan di bawah Tempat pelanggan boleh membeli. Log pelayan menamakan saluran itu. Pembantu diberitahu pada permulaan perbualan, jadi ia menjawab soalan dan memetik harga katalog tetapi tidak sekali-kali mengumpul butiran atau mengeluarkan kod pengesahan yang tidak dapat dipenuhinya pada saluran itu.

Asistennya menjelaskan sebuah item tapi tidak ada kartu yang muncul

Setiap panggilan di log sebagai [opsiq][commerce][client_tool] Dengan alasan: id item yang salah, sebuah bidang yang item tidak menyatakan, domain yang diambil, atau penolakan pedagang sendiri. baca log sebelum mempercayai parafrase asisten.

Asisten mengatakan tidak dapat melihat produk

Halaman ini milik ruang kerja lain. Setiap widget laman web milik satu ruang kerja, dan penyambung kedai mesti didayakan di sana.

Balasan templat dan bukannya jawapan

“Beritahu saya sedikit lagi tentang apa yang anda perlukan” bermaksud panggilan kepada penyedia AI itu sendiri gagal; Sejarah AI menunjukkan ralat yang tepat di bawah giliran itu, dan alat tidak pernah dicapai.

edit penyambung tidak menunjukkan dalam chat

Pekerja dimulakan semula apabila kod berubah dalam masa seminit, tetapi perbualan akan memainkan semula kad terakhirnya. Mulakan perbualan baharu untuk menguji.

Pelawat dari Nigeria melihat dolar walaupun Mata wang geo dihidupkan

Pastikan pangkalan data geo-IP telah dikonfigurasikan (Sembang Klien → Geo) dan mata wang pelawat mempunyai kadar FX; tanpa kadar, OpsIQ memaparkan harga kedai dan bukannya nombor yang salah.

Jumlah anda ialah satu-satunya angka yang menggerakkan wang

Kutipan A membawa unit_amount_minor, quantity dan total_amount_minor, dan memang menggoda untuk menganggap yang ketiga boleh diterbitkan daripada dua yang pertama. Ia tidak boleh, dan andaian itu telah pun menyebabkan seorang pelanggan kehilangan wang sebenar.

quantity ialah apa yang dipilih oleh PELANGGAN — satu bilik, satu lesen, satu polisi. Pendarab anda boleh jadi sesuatu yang tidak pernah dilihat oleh OpsIQ: malam, tempat duduk, kitaran pengebilan, jarak, berat, peringkat. Sebuah hotel menyebut harga satu bilik untuk tiga malam sebagai kuantiti 1, unit 105,000, jumlah 315,000. OpsIQ mendarabkan unit dengan kuantiti untuk menetapkan harga kad pengesahan, menunjukkan 105,000 kepada tetamu, dan kemudian mengenakan caj 315,000 yang sebenarnya dipulangkan oleh pedagang. Bersetuju dengan satu angka dan dikenakan caj angka lain ialah perkara paling buruk yang boleh dilakukan oleh kontrak ini.

Peraturan

total_amount_minor Hanya satu-satunya figur OpsIQ Pertunjukan, tanda-tanda, tuduhan dan perdamaian terhadap. unit_amount_minor Jika jumlah Anda tidak persis seperti yang Anda inginkan, kutipan Anda salah —OpsIQ Karena total yang telah disesuaikan secara bermanfaat adalah salah satu yang tidak pernah kau setujui untuk kehormatan.

Apa arti dari tindakan kutipanmu ini?

Jika garis keturunan Anda tidak berdamai — unit kali beberapa jumlah keseluruhan tidak pernah sama dengan total Anda — OpsIQ _menanggapi semuanya sebagai satu baris dengan harga yang sebenarnya daripada menciptakan kehancuran yang tidak mendamaikan apa pun.

Enam jawapan yang menjadikan kontrak ini sesuai untuk mana-mana industri

Pengisytiharan di atas bermula sebagai pengisytiharan sebuah kedai: beli sesuatu, bayar sekarang, ia milik anda, anda boleh membatalkan. Setiap satu daripada empat itu ialah andaian yang tidak dikongsi oleh sesetengah perniagaan sebenar. Bank yang memindahkan wang tidak boleh membatalkannya. Penanggung insurans tidak boleh berkata "disahkan" sehingga penjamin insurans telah menyemak. Tukang membuat invois kemudian. Klinik mengenakan bayaran kepada seseorang yang bukan pesakit. Tanpa cara untuk menyatakannya, perniagaan tersebut sama ada salah menggambarkan proses mereka sendiri kepada pelanggan atau tidak dapat disambungkan langsung.

Jadi penyambung transaksi menjawab enam soalan lagi. Setiap orang yang baku untuk membaca ketat — tidak menyatakan apa-apa sentiasa selamat dan tidak pernah membenarkan, kerana tidak menyatakan apa-apa ialah apa yang dilakukan oleh pengarang apabila mereka belum mempertimbangkan soalan itu.

transaction_kind

purchase, booking, subscription, bill_payment, transfer, application, top_up, renewal. Kamus berbanding tingkah laku: ia memutuskan perkataan yang dibaca pelanggan anda. Memanggil pemindahan wayar sebagai "permintaan" membuatkan pembantu bunyi seperti tidak memahami perniagaan yang dibincangkan, dan tiada jumlah paip betul dapat dipulihkan daripadanya. Lalai kepada purchase.

decision_mode

immediate atau deferredPilihlah deferred untuk apa-apa yang dibawa ke pengunderaitan, penilaian kredit, rujukan, kemasukan atau jawatankuasa. OpsIQ kemudian menyatakan Diserahkan Lebih dari Perjanjian disahkan, dan menyerahkan nombor rujukan supaya pelanggan boleh bertanya tentangnya. Memberitahu seseorang bahawa permohonannya telah disahkan sedangkan ia masih di tangan manusia ialah perkara paling merosakkan yang boleh dilakukan oleh pembantu sembang untuk perniagaan terkawal selia, dan itulah tingkah laku lalai setiap aliran berbentuk runcit. Lalai kepada immediate.

payment_timing

on_confirmation, deposit_then_balance, invoice_later atau no_paymentIni menentukan apakah OpsIQ _buka halaman pembayaran Sama sekali tidak, sehingga tidak dapat diidamkan dari payment_flow Itu kata Siapa yang menerima wang itu, ini menyatakan Apakah dan kapan. Kerja yang anda invoiskan kemudian, dan permohonan yang tidak dikenakan kos untuk dihantar, berakhir pada pengesahan dan bukannya sampai ke senarai gerbang pembayaran yang kosong atau salah.

reversibility

reversible atau irreversible. Ini perkara paling penting yang dinyatakan oleh penyambung kewangan. Bilik boleh dilepaskan dan bungkusan boleh dipulangkan; pemindahan yang telah selesai tidak boleh — tiada buat asal, wang sudah berada di pihak lain, dan satu-satunya jalan ialah meminta orang yang tidak dikenali memulangkannya. Mengisytiharkan irreversible secara automatik memaksa cancellation_flow ke none dan melarang sebarang tetapan pengendali daripada melangkau pengesahan identiti, Apa lagi yang dikatakan deklarasi ini. Dua medan yang bercanggah bukan keadaan yang boleh diselesaikan semasa masa jalan berdasarkan yang mana dibaca dahulu. Lalai kepada reversible.

cancellation_flow

none, platform_only atau connector_cancel. Peranan pembatalan sudah wujud tanpa sebarang peraturan tentang siapa yang boleh mencapainya, dan dua tekaan yang salah gagal ke arah yang bertentangan: teka terbuka dan satu mesej sembang membatalkan tempahan berbayar tanpa sebarang yuran disebut; teka tertutup dan pelanggan yang mahu membatalkan disuruh menelefon. connector_cancel diperlukan tambahan tambahan cancellation_quote dan order_cancel dengan pemulihan — OpsIQ tidak sekali-kali membatalkan sebelum menyatakan kosnya. Lalai kepada none.

fulfilment_presence

customer_present atau remote_delivery. Sama ada alamat e-mel yang belum disahkan boleh menyebabkan sesiapa menanggung kerugian. Tetamu hotel mesti hadir sendiri, jadi alamat yang salah hanya menyalahhalakan resit dan bilik itu masih ada; bungkusan yang dipos, pelayan yang diperuntukkan atau pautan muat turun pula dihantar berdasarkan alamat itu semata-mata. Inilah yang menjadikan tetapan "lalu pengesahan emel" operator tersedia, dan ia diisytiharkan oleh anda, bukan dipilih oleh mereka — jadi pertimbangan sebuah hotel tidak akan diwarisi oleh penyambung yang menghantar barangan. Lalai kepada remote_delivery.

minimum_assurance dan disclosure Nama [pilihan]

minimum_assurance iranios memungkinkan Anda permintaan Lebih banyak lagi bukti identiti daripada yang dikehendaki OpsIQ, tidak pernah kurang — bank yang mewajibkan pengesahan tambahan untuk pemindahan sedang menggunakan kontrak ini. Menetapkannya juga menarik balik keupayaan pengendali untuk melangkau pengesahan bagi penyambung anda, kerana keputusan risiko peniaga sendiri mengatasi kemudahan pengendali. disclosure Kata-kata yang ditunjukkan ore butang pengesahan, untuk kadar, yuran atau hak bertenang yang mesti anda paparkan; tanpanya, perniagaan terkawal menyeludup kata-kata wajib ke dalam nama produk.

notify_flow

platform_automatic, platform_triggered atau noneKapan OpsIQ Dia mengambil pembayaran yang tidak pernah berjalan, jadi apapun itu biasanya email tidak pernah kebakaran. platform_triggered memerlukan order_notify peranan dengan pemulihan, dan OpsIQ hanya bertanya selepas bacaan semula pembayaran membuktikan wang telah direkodkan. Mengisytiharkan none Kau membuat...OpsIQ Karena jika tidak, pelanggan membayar tidak mendengar apa-apa sama sekali. none.

Kontrak yang sama, sembilan bisnis tak terkait

Tiada satu pun daripada ini direka bentuk secara khusus. Setiap satu ialah kontrak yang menjawab dengan jujur untuk industri yang berbeza, dengan OpsIQ tidak mengetahui apa-apa tentang mana-mana daripadanya.

Satu kontrak, sembilan industri
Hotel        booking      immediate  deposit_then_balance  reversible    -> payment page, "confirmed", identity may be waived
Online shop  purchase     immediate  on_confirmation       reversible    -> payment page, "confirmed", identity always verified
Bank         transfer     immediate  on_confirmation       IRREVERSIBLE  -> payment page, no cancel route, never waived
Insurer      application  DEFERRED   no_payment            reversible    -> no payment page, "submitted", never "confirmed"
Utility      bill_payment immediate  on_confirmation       IRREVERSIBLE  -> payment page, nothing to give back
Clinic       booking      immediate  invoice_later         reversible    -> NO payment page, billed afterwards
Tradesman    booking      immediate  invoice_later         reversible    -> NO payment page, invoiced on completion
Telecom      top_up       immediate  on_confirmation       IRREVERSIBLE  -> payment page, final once sent
University   application  DEFERRED   no_payment            reversible    -> no payment page, decision follows
Acara berbayar diberikan ke platform

Selepas pembayaran Storefront asli disahkan secara aktif dan dimuktamadkan, OpsIQ memancarkan payment.completed dengan order_id, payment_id/provider_ref, gatewayTepatnya amount_minor, ISO currency, pelanggan, line items, channel dan paid_at. Penyambung pedagang mesti mengekalkan bukti itu melalui record_payment dan membacanya semula; penyambung pembayaran berhos menggunakan peristiwa bayaran berautoriti miliknya sendiri dan tidak boleh menerima penulisan pembayaran pendua.

AI adalah seorang mengusulkan, bukan sumber otoritas

Model boleh memilih produk dan kuantiti yang diisytiharkan, tetapi ia tidak boleh memilih nama operasi, menjana URL pembayaran keluar atau mencipta keadaan peniaga daripada teks. Pelanggan menerima kad bertandatangan yang tepat dan mesti menekan butang pengesahannya. Pengesahan itu terikat pada ruang kerja, penyambung, item, kuantiti, sebut harga, mata wang, bebenang dan tarikh luput.

Pelanggan sosial tetap mengalir tanpa ada email.

WhatsApp, Messenger, Instagram, Telegram, LINE, SMS dan X menggunakan akaun saluran yang disahkan oleh pembekal sebagai identiti pelanggan. Cadangan ditandatangani kepada akaun saluran itu dan pengesahan masih melalui kawalan sebut harga baharu, stok, idempotensi, pembayaran dan pemulihan yang sama. Pelanggan media sosial menggunakan tindakan pengesahan sekali guna yang tepat yang dipaparkan dalam perbualan mereka; teks biasa seperti “ya” tidak sekali-kali menjadi kuasa pesanan.

Sejarah tatanan sejarah mengikuti identitas yang tepat, tidak pernah menebak email

Pesanan asli diindeks mengikut identiti saluran yang legap, jadi AI boleh menjawab “di mana pesanan saya?” tanpa meminta e-mel atau nombor pesanan. Untuk sejarah kedai yang disambungkan, pautkan identiti saluran kepada rekod CRM/klien ruang kerja dan laksanakan carian pelanggan/pesanan yang berautoriti dalam penyambung. Pembekal konteks pelanggan menerima pautan yang disimpan itu; mereka tidak boleh memilih akaun berdasarkan nama paparan atau e-mel yang ditaip dalam sembang. Dengan satu pesanan yang sepadan, AI menjawab terus; dengan beberapa, ia meringkaskan padanan dan bertanya yang mana satu; dengan tiada, ia menyatakan tiada sejarah yang dipautkan.

Buat muatan universal: medan diketik dan identitas server-own

Teras tidak mengandungi cabang WHMCS, hotel, SaaS, kedai, bank, produk, laluan atau vendor. Tindakan sebut harga yang bertaip parameters ialah borang pelanggan dan skema slot AI. Penyambung tempahan boleh mengisytiharkan tarikh dan tetamu; penyambung pengebilan boleh mengisytiharkan kitaran; penyambung korporat pada masa hadapan boleh mengisytiharkan medan selamatnya sendiri. OpsIQ membersihkan kawalan primitif dan menghantar nilai yang dikumpul hanya kepada tindakan penyambung yang dipetakan.

Aksi kutipan Typed
{
  "action_id": "acme_customer_quote",
  "scope": "client",
  "is_destructive": false,
  "parameters": [
    {"name":"external_customer_id","type":"string","required":true},
    {"name":"item_id","label":"Product","type":"string","required":true},
    {"name":"quantity","label":"Quantity","type":"integer","required":true,"minimum":1},
    {"name":"cycle","label":"Billing cycle","type":"select","required":false,
     "options":[{"value":"monthly","label":"Monthly"},{"value":"annual","label":"Annual"}]}
  ]
}

Untuk Æð clients_only, tetapkan customer_ordering.identity_parameter kepada parameter tindakan yang menerima id pelanggan luaran penyambung. Medan ini tidak sekali-kali dipaparkan kepada pelanggan dan sebarang nilai yang dibekalkan oleh pemanggil akan dibuang; OpsIQ hanya menyuntik id daripada pautan penyambung yang disahkan. Pembayaran sebagai tetamu membiarkannya kosong. E-mel yang ditaip ialah bukti untuk carian tetamu yang diisytiharkan, bukan log masuk dan bukan kuasa pembelian.

Domain kelompok: akaun pelanggan yang log masuk dan konfigurasi penyambung adalah milik ruang kerja portal utama kumpulan. Walau bagaimanapun, token identiti mesti ditandatangani untuk laman ahli yang tepat yang membenamkan widget, menggunakan rahsia webhook ahli itu. OpsIQ mengesahkan permukaan itu dahulu dan hanya selepas itu menyelesaikan perdagangan dan pelanggan yang dipautkan melalui laman utama kumpulan. Jangan sekali-kali menggantikan kunci laman ahli dengan kunci utama dan jangan sekali-kali menyalin rahsia utama ke laman ahli.

Sampul kanonik yang mesti dikembalikan oleh penyambung

Katalog
{
  "success": true,
  "data": {"items":[{
    "id":"42", "name":"Example product", "summary":"Customer-safe summary",
    "currency":"USD", "unit_amount_minor":2500, "available":true,
    "selection":{"item_id":"42"}
  }]}
}
Petikan
{
  "success": true,
  "data": {
    "quote_id":"opaque", "currency":"USD",
    "unit_amount_minor":2500, "total_amount_minor":5000,
    "selection":{"item_id":"42","quantity":2},
    "expires_at":"2026-08-31T14:05:00Z"
  }
}

Tanggapan platform-checkout mengulang kutipan kanonikal yang valid dan menambahkan HTTPS checkout_url. Teras menyegarkan sebut harga semasa pengesahan dan membandingkan mata wang, jumlah dan pilihan stabil dengan tepat. Penyambung menterjemah respons platformnya ke dalam sampul ini; teras tidak pernah menterjemah medan vendor atau membina URL peniaga.

Jadikan get laluan yang dibina oleh pengendali tersedia dalam Kedai asli dan sembang

Kemampuan pembayaran hanya tidak menempatkan gerbang di depan pelanggan. Get laluan pembayaran Store asli blok dalam Pembina Penyambung. Ia menambah kontrak berversi yang eksplisit, memetakan penciptaan pembayaran dan carian pembayaran aktif, dan menyenaraikan benarkan domain pembayaran yang dihoskan oleh pembekal. Setelah penyambung dipasang, didayakan dan dipilih di bawah tetapan Perdagangan, get laluan yang sama dipaparkan dalam Kedai awam, modal Kedai, pembayaran sembang klien dan pembayaran autonomi. Tiada slug pembekal yang dikodkan secara tetap.

Kontrak gateway Pribumi Store
{
  "commerce": {
    "roles": {
      "checkout_create": { "operation": "acme_checkout_create", "transport": "http",
                           "recovery": "acme_payment_status" },
      "payment_status":  { "operation": "acme_payment_status", "transport": "http" },
      "payment_profile": { "operation": "acme_payment_profile", "transport": "http" },
      "webhook_verify":  { "operation": "acme_webhook_verify", "transport": "http" },
      "event_map":       { "operation": "acme_event_map", "transport": "http" },
      "payment_refund":  { "operation": "acme_refund", "transport": "http",
                           "recovery": "acme_refund_status" }
    },
    "storefront_gateway": {
      "enabled": true, "version": 1, "label": "Acme Pay",
      "checkout_hosts": ["checkout.acmepay.com", "*.acmepay.com"]
    }
  }
}
Keluaran pemeriksaan Canonical

Peta aksi pemeriksaan . checkout_url Dan, ketika penyedia memiliki satu, session_idItu URL Mestinya HTTPS, tidak berisi kelayakan, dan cocok dengan host yang terdaftar.

Keluaran status Canonical

Aksi status yang dilakukan oleh penyedia segar API Peta dan pencarian paid Sebagai sebuah boolean nyata, amount_minor Dan sebagai bilangan bulat, currency Á sebagai kode ISO tiga huruf, dan provider_ref. URL pemulangan, rentetan pertanyaan, muatan klien, atau arahan “disahkan” yang dibekalkan penyambung tidak sekali-kali menjadi kebenaran pembayaran.

Kontrak bayaran balik pilihan

Jika get laluan menyokong bayaran balik, petakan payment_refund Dan tindakan pemulihannya, penciptaan pengembalian kembali akan kembali dengan ketat. accepted dan completed boolean plus provider_ref); pemulihan melakukan pencarian penyedia dan pengembalian status. Tanpa kedua-dua tindakan itu, OpsIQ tidak mengiklankan bayaran balik penyambung.

Siapa yang mengkonfirmasi perintah

Penyambung tidak sekali-kali menulis status pesanan OpsIQ. OpsIQ membandingkan jumlah dan mata wang yang dikembalikan dengan tepat dan merekodkan rujukan penyedia; hanya selepas itu teras melakukan peralihan yang disahkan oleh penyedia. Pindahan bank manual kekal sebagai satu-satunya aliran yang boleh diluluskan oleh ejen yang dinamakan.

✅
Dalam Pembina Penyambung, tandakan Perdagangan, petakan peran, dan konfigurasi baik Pelanggan kedai yang disambungkan membuat pesanan, Get laluan pembayaran Store asliPenyihir mengesahkan deklarasi dan menulis commerce_roles.json. Penerbitan masih menggunakan proses semakan dan tandatangan Marketplace yang biasa; kontrak ini tidak sekali-kali memintas pengesahan pakej atau menjadikan penyambung tidak boleh dinyahpasang. Sahkan mana-mana pakej secara manual dengan php tools/verify_commerce_contracts.php.
💡
Transport adalah http untuk API jauh atau bridge Untuk operasi bernama di jembatan yang dikerahkan (lihat NO-APIPola di bawah). Peranan adalah transport-agnostik; runtime hanya perlu transportasi yang dinyatakan sehingga dapat memparodikan sebuah jembatan versi.
Penyambung

Menjual melalui sembang TANPA penyambung: Tindakan & Pencetus

Kontrak dagangan di atas tidak memerlukan pakej konektor. Jika platform anda milik anda sendiri — pejabat belakang tersuai, API dalaman, sistem yang tiada sesiapa menyediakan konektor untuknya — anda boleh mencapai jentera jualan yang sama dengan dua alat yang sudah anda gunakan untuk mengintegrasikan apa-apa sahaja: Tindakan tersuai (titik akhir HTTP anda, ditakrifkan pada halaman Tindakan) dan Pencetus (webhook peristiwa). Kontrak yang sama, kad yang sama, jaminan identiti yang sama, kernel pembayaran yang sama, resit yang sama. Satu-satunya yang tiada ialah pakej, kerana tiada kod pihak ketiga untuk ditandatangani.

Bagaimana semuanya bersepadu

Saudara membangun satu aksi adat setiap peran perdagangan — masing - masing adalah titik akhir HTTPS yang polos di pihak Saudara, yang didefinisikan di bawah AI dan Otomasi → Actions dengan URL, pengepala auth dan parameternya. Kemudian anda simpan satu pengisytiharan yang memetakan peranan ke tindakan-tindakan itu. Dari masa itu kedai anda muncul dalam sembang seperti yang dilindungi oleh sambungan: kutipan AI dari Kau Aksi kutipan , kartu konfirmasi dirender, pelanggan memverifikasi email mereka, panggilan kernel urutan Kau Tindakan perintah dengan kunci iddempotensi, OpsIQ Merebut pembayaran melalui pintu masuk, dan Kau Tiada apa-apa tentang pengalaman pelanggan yang mengatakan "biasa".

pengisytiharan pengisytiharannya

Simpan JSON sebagai tetapan ruang kerja commerce_custom_integration (Tetapan → tetapan lanjutan, atau melalui API tetapan REST). Bentuknya sama seperti yang terdapat dalam pakej commerce_roles.json (Yang mempunyai kebun-kebun yang bersusun-susun) atau dalam bentuk besar-besar, action penamaan ultah nama id tindakan kebiasaan anda:

commerce_custom_integration
{
  "enabled": true,
  "roles": {
    "catalog_search":  { "action": "acme_catalog" },
    "quote":           { "action": "acme_quote" },
    "order_get":       { "action": "acme_order_get" },
    "customer_create": { "action": "acme_customer_create",
                         "recovery": "acme_customer_by_email" },
    "order_create":    { "action": "acme_order_create",
                         "recovery": "acme_order_by_key" },
    "record_payment":  { "action": "acme_record_payment",
                         "recovery": "acme_payment_by_key" }
  },
  "customer_ordering": {
    "enabled": true, "version": 1,
    "mode": "direct_order",
    "audience": "guests_and_clients",
    "account_flow": "connector_signup",
    "payment_flow": "opsiq_gateway",
    "label": "Acme Store",
    "identity_parameter": "client_identifier",
    "quantity_parameter": "quantity",
    "transaction_kind": "purchase",
    "fulfilment_presence": "remote_delivery",
    "notify_flow": "platform_automatic"
  }
}

Akhirnya, tambahkan custom_commerce kepada penyambung yang didayakan untuk jualan di bawah Tetapan → Sembang Pelanggan → Menjual melalui sembang. Kemasukan disemak semula pada Setiap permintaan, dan ia menolak dengan alasan yang dinamakan bukannya menyembunyikan storan anda secara senyap: peranan mod anda memerlukan yang memetakan ke tiada apa-apa, peranan tulis tanpa tindakan pemulihan (§15.7 — menulis hasilnya tidak boleh ditanya semula ditolak), tindakan yang telah dipadam atau dilumpuhkan sejak anda simpan.

Apa yang mesti dilakukan oleh setiap tindakan

Kembali ke amplop penyambung

Respond Kemuliaan {"success": true, "data": { ... }} — atau {"success": false, "error": "a sentence a customer may read"}Tindakanmu Jalur keberhasilan respon Di bagian sampul surat seharusnya ada titik di dalam.

Penyalahgunaan: total semua-in, dalam satuan minor

Kembalikan quote_id, product_name, quantity, unit_amount_minor, total_amount_minor, currency, selection, selection_summary, expires_atSemua dalam bahagian "jumlah anda adalah satu-satunya nombor yang bergerak wang" di atas terpakai secara harfiah: cukai, yuran dan penambah masuk ke jumlah anda, kerana jumlah anda ialah apa yang ditandatangani, ditunjukkan dan dikenakan.

Perintah menciptakan: kehormatan kunci iddempotensi

Kau menerima idempotency_key, yang ditandatangani total_minor dan currency, yang disahkan customer_email, dan parameter sebut harga anda sendiri. Simpan kunci bersama pesanan; jika anda sudah mencipta pesanan untuknya, kembalikan pesanan itu dan bukannya mencipta pesanan kedua. Sahkan jumlah wang — jika sistem anda mengenakan harga yang berbeza daripada jumlah yang ditandatangani, tolak secara boleh cuba semula dan bukannya mengenakan caj kurang. Kembalikan reference Kau mengenali platformmu.

Pemulihan: jawapan tentang SATU penulisan

order_by_key menerima kunci idempotensi dan menjawab {"found": true, "order": {...}} atau {"found": false}. found:false ialah satu janji — OpsIQ mungkin mencuba semula penulisan itu berdasarkannya. Suapan status atau senarai pesanan terkini bukanlah jawapan tentang satu penulisan.

Pembayaran catatan: jalan penyelesaian sendiri

Menerima id transaksi get laluan sebagai kunci idempotensi berserta rujukan pesanan anda, selepas OpsIQ mengesahkan jumlah dan mata wang secara aktif dengan get laluan. Tandakan pesanan sebagai dibayar melalui logik platform anda sendiri: cetuskan e-mel anda sendiri, kurangkan stok anda sendiri. Kembalikan platform_notified: true Jika platformmu email pelanggan itu sendiri.

Input kartu dari parameter aksi Anda

Sebarang parameter yang anda isytiharkan pada tindakan QUOTE anda (selain parameter identiti) yang belum dikumpulkan oleh AI dipaparkan pada kad pengesahan sebagai input yang diisi sendiri oleh pelanggan — domain, tarikh, tempat duduk. Labelkannya dengan baik; label itulah yang dibaca oleh pelanggan.

Pemicu: mendengar penjualan Anda sendiri

Dua peristiwa dicetuskan pada bas peristiwa kongsi, jadi webhook dan automasi anda mendengar setiap jualan sembang di mana sahaja ia dilaksanakan:

commerce.order.created

Sebaik sahaja pesanan tiba di pihak peniaga, sebelum pembayaran: rujukan, penyambung (atau custom_commerce), amaun, mata wang, e-mel pelanggan, id bebenang.

commerce.payment.confirmed

Tepat sekali bagi setiap pesanan, apabila get laluan mengesahkan pembayaran secara aktif. Ia menggunakan tuntutan yang sama yang menghalang resit pendua, jadi ia tidak boleh mencetuskan webhook anda dua kali.

Bila perlu beralih kepada penyambung

Integrasi tersuai ialah konfigurasi ruang kerja: ia melayani kedai ANDA, pada ruang kerja ANDA. Sebaik sahaja anda mahu mengedarkan integrasi itu — ruang kerja lain, pasaran, pengversian, tandatangan, pemasangan berbayar — bungkus tindakan yang sama dan pengisytiharan yang sama sebagai penyambung. Kontrak itu tidak berubah; hanya pembalutnya yang berubah.

Penyambung

Sambungkan sebuah platform yang tidak memiliki API (pola jembatan)

Banyak platform sebenar langsung tidak menyediakan REST API. CMS hotel, sistem pengebilan lama, alat dalaman yang dibina khas. Anda masih boleh menulis penyambung OpsIQ yang lengkap untuknya: penyambung itu disertakan dengan satu fail PHP yang diletakkan oleh pengendali ke dalam akar web awam mereka sendiri, dan fail itulah API tersebut. Halaman ini ialah keseluruhan corak itu, dengan peraturan yang menjadikannya selamat untuk dijalankan dan sebab di sebalik setiap peraturan.

Bentuknya

Penyambung biasa memanggil API pihak lain. Penyambung jambatan membawa API sendiri. Tiada perkara lain yang berubah: tindakan yang sama, penyedia konteks yang sama, kontrak identiti yang sama, susun atur pakej yang sama.

1
Anda menulis satu berkas PHP

It lives in your package at bridge/opsiq-<platform>-bridge.php. It talks to the platform's database directly, or boots the platform's framework, or both. It answers JSON.

2
Operator itu menyalinnya ke dalam akar web mereka

Di sebelah index. php. Tidak ada kode platform yang dimodifikasi, tidak ada plugin terpasang, tidak akan ada yang mempertahankan di seluruh platform upgrade.

3
Panel penghubung itu menyerahkan filenya kepada mereka

settings.json anda mengisytiharkan webhook_help.snippet_template. Halaman penyambung memaparkannya sebagai fail yang boleh disalin dengan tetapan langsung mereka sudah digantikan, jadi tiada apa-apa yang perlu disunting secara manual.

4
OpsIQ Nama ini server-ke-server

Client.php anda menghantar permintaan GET dengan kunci kongsi dalam pengepala X-Opsiq-Bridge-Key. Tetapan URL asas ialah akar laman platform.

✅
Pembina Penyambung boleh cipta ini untuk anda sekarang. Pilih "Platform dengan tiada API"profil (atau tetapkan akses data ke jambatan) dan ia mengeluarkan fail jambatan, snippet panel yang sepadan dan tindakan ditakrif yang membaca dan menulis melaluinya - untuk Laravel aplikasi membaca.envnya, untuk WordPress membaca wp-config.php, atau dengan keizinan yang anda tampalkan untuk apa-apa lagi. Mod jambatan memperbaiki pengesahan kepada OpsIQ protokol jambatan: sambungan selamat dijana api_key Ketika diaktifkan, mengirimkannya sebagai X-Opsiq-Bridge-KeyDan mengikatkan nilai yang sama dengan nilai tersimpan ke OPSIQ_BRIDGE_KEY Penulis tangan hanya ketika platform Anda bukan dari mereka, atau ketika Anda perlu perilaku jembatan yang dihasilkan tidak meliputi. Sebuah jembatan tulisan tangan aman dari penyihir: itu hanya menimpa file jembatan yang membawa penanda sendiri.
💡
Semua yang terdapat pada halaman ini ditunjukkan dalam PHP terhadap MySQL, kerana itulah pelaksanaan rujukan dan satu-satunya gabungan yang disokong sepenuhnya oleh saluran pembungkusan. Corak itu sendiri tidak bergantung pada bahasa atau enjin: lihat "Jambatan dalam bahasa lain dan pangkalan data lain" untuk get dalam Node, Python, Go, Ruby, .NET dan Java, pertanyaan introspeksi untuk PostgreSQL, SQL Server, SQLite dan Oracle, dan setara MongoDB — bersama kekangan pembungkusan yang menentukan cara jambatan bukan PHP sampai kepada pengendali.

Model keselamatan, dan sebab setiap peraturan wujud

File ini duduk di sebuah webroot publik di belakang satu kunci berbagi. fakta itu mendorong setiap aturan dibawah ini. jangan bersantaikan salah satunya untuk membuat jembatanmu lebih sederhana.

Dan tak pernah ada penelepon yang menyediakan SQL_

Bukan klausa WHERE, bukan serpihan ORDER BY, bukan parameter pertanyaan mentah "sekali ini sahaja". Pemanggil menamakan jadual, lajur dan nilai; fail anda yang membina pernyataan itu. Sebaik sahaja pemanggil boleh menyumbang teks SQL, satu kunci yang dikongsi menjadi pelaksanaan pangkalan data sewenang-wenangnya.

Nama jadual dan lajur disahkan berdasarkan information_schema

Pengecam tidak boleh diikat sebagai parameter, jadi ia perlu disemak sebaliknya. Baca senarai jadual dan lajur sebenar untuk pangkalan data INI dan tolak apa sahaja yang tiada di dalamnya. Pengecam yang bukan objek sebenar skema ini tidak dapat mencapai pertanyaan langsung — itulah yang menjadikannya selamat untuk mendedahkan setiap jadual.

Setiap nilai adalah parameter batas

Ijin tanpa pengecualian, termasuk nilai di dalam pencarian. Pengenal yang sah ditambah nilai terikat adalah pasangan yang membuat total permukaan dan nil permukaan injeksi.

Bacaan universal, tulis didaftar-izin

Ini adalah aturan yang paling ingin dilewati orang.

Lajur rahsia disunting semasa dibaca dan ditolak semasa ditulis

Padankan pada NAMA lajur: password, remember_token, secret, api_key, private_key, salt, token. Gantikan nilai dengan pemegang tempat semasa keluar. Tolak penulisan sepenuhnya semasa masuk — menulis cincangan kata laluan mentah bukanlah satu operasi, ia ialah perangkap yang berbahaya. Arahkan pengendali ke aliran kata laluan platform itu sendiri.

Deletes adalah satu-baris, oleh kunci utama

Tidak sekali-kali pemadaman pukal, tidak sekali-kali pemadaman mengikut penapis. Pembuangan pukal ialah cara sesebuah pangkalan data musnah. Jika seseorang benar-benar memerlukannya, mereka boleh melakukannya di platform tersebut.

Bacaan BARIS dipetakan-baris

Hadkan parameter limit dengan siling yang tegas. Pertanyaan yang terlepas kawalan tidak boleh dapat mencurahkan pangkalan data melalui mesej sembang.

Gagal ditutup sampai kunci ditetapkan

Jambatan yang belum dikonfigurasi menjawab 403 kepada segala-galanya. Jambatan yang membantu sebelum dikonfigurasi ialah jambatan yang telah membantu orang yang tidak dikenali.

Perbandingan kunci waktu-milar, kunci dalam header

hash_equals, tidak sekali-kali ==. Kunci diletakkan dalam X-Opsiq-Bridge-Key, bukan dalam rentetan pertanyaan, supaya ia tidak masuk ke log akses, log proksi dan pengepala Referer.

Hanya

Semua yang dilakukan jembatan adalah terlihat sebagai GET dengan parameter validasi, dan OpsIQ _adalah satu-satunya penelepon.

Baca universal, tuliskan — dan mengapa

Inilah peraturan yang sering dipertikaikan, jadi berikut ialah alasannya secara penuh. Pembantu sepatutnya boleh MELIHAT seluruh platform: itulah yang menjadikannya berguna, dan bacaan tidak boleh memusnahkan apa-apa. Penulisan berbeza. Fail ini terletak dalam akar web awam di sebalik SATU kunci yang dikongsi. Jika kunci itu bocor, permukaan penulisan tanpa sekatan menjadikan kebocoran itu setara dengan kawalan penuh pangkalan data — pengguna pentadbir baharu, jadual tempahan yang dikosongkan. Senarai benarkan bermaksud kunci yang bocor masih tidak dapat mencapai jadual yang tidak pernah didayakan oleh pengendali.

⚠️
Kad kelulusan OpsIQ mengawal AI, bukan kekunci. Pengurus yang mengklik Benarkan pada tindakan merosakkan adalah kawalan atas pembantu. Ia bukan kawalan terhadap siapapun yang mempunyai kunci jambatan. Itu dua ancaman berbeza, dan senarai-boleh adalah jawapan kepada yang kedua.
Kawalan untuk pengendali, daripada jambatan Botble
/* ── WRITE ALLOW-LIST — which tables the assistant may CHANGE here.
 *
 * READS are unrestricted: the assistant can see every table in the platform.
 * WRITES are limited to this list, because this file sits in a PUBLIC webroot
 * behind ONE shared key — an allow-list means that even a leaked key cannot
 * reach a table you never enabled (no new admin users, no emptied bookings).
 *
 * Comma-separated table names. Add tables as you need them — e.g. append
 * ',pages,posts' to let the assistant edit site content. Set it to '*' to
 * allow every table, deliberately. Empty falls back to the hotel defaults. ── */
const OPSIQ_WRITE_TABLES = 'ht_bookings,ht_booking_rooms,ht_booking_addresses,ht_rooms,ht_room_types,ht_customers,customers';

Dua butiran dalam semakan di bawah mudah tersilap. Nama jadual tiba sudah DILERAIKAN, membawa awalan jadual pemasangan, manakala pengendali menulis senarai yang dibenarkan tanpa awalan kerana itulah yang biasanya akan mereka taip. Bandingkan kedua-dua cara atau pemasangan berawalan secara senyap tidak membenarkan apa-apa dan setiap penulisan akan gagal. Penolakan itu juga mesti menerangkan sebabnya, kerana orang yang membacanya ialah admin dalam tetingkap sembang, bukan pembangun dengan surih tindanan.

Pemeriksaan daftar-izin, verbatim dari marketplace_connectors/bobble/bridge/opsiq-boble-bridge. php
/** Tables a WRITE may touch. Empty = the built-in defaults. */
$writeAllowed = static function (string $table) use ($prefix): bool {
    $raw = trim((string)(defined('OPSIQ_WRITE_TABLES') ? OPSIQ_WRITE_TABLES : ''));
    if ($raw === '') $raw = 'ht_bookings,ht_booking_rooms,ht_rooms,ht_customers,customers';
    if (trim($raw) === '*') return true;                     // explicit opt-in to everything
    $bare = ($prefix !== '' && stripos($table, $prefix) === 0) ? substr($table, strlen($prefix)) : $table;
    foreach (explode(',', $raw) as $t) {
        $t = trim($t);
        if ($t === '') continue;
        if (strcasecmp($t, $table) === 0) return true;
        if (strcasecmp($t, $bare)  === 0) return true;
        if ($prefix !== '' && strcasecmp($prefix . $t, $table) === 0) return true;
    }
    return false;
};

/** One refusal, one explanation — used by every write op. */
$requireWritable = static function (string $table) use ($writeAllowed): void {
    if ($writeAllowed($table)) return;
    opsiq_bridge_out(['success' => false, 'error' =>
        'write_not_allowed: "' . $table . '" is not in this bridge\'s write allow-list. '
        . 'Reads are unrestricted. To permit writes here, add the table to OPSIQ_WRITE_TABLES '
        . 'in opsiq-botble-bridge.php (or set it to "*" to allow every table).'], 403);
};

Gerbang, penuh

4 cek, dalam urutan ini sebelum ada yang menyentuh data.

4 gerbang, dalam urutan
<?php
declare(strict_types=1);

/* ── EDIT THIS: a long random secret (40+ chars). Empty = bridge OFF. ── */
const OPSIQ_BRIDGE_KEY = '';

header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store');

function opsiq_bridge_out(array $payload, int $code = 200): void
{
    http_response_code($code);
    echo json_encode($payload, JSON_UNESCAPED_SLASHES);
    exit;
}

/* 1. Fail closed. An unconfigured bridge answers nothing to anyone. */
if (OPSIQ_BRIDGE_KEY === '' || strlen(OPSIQ_BRIDGE_KEY) < 24) {
    opsiq_bridge_out(['success' => false, 'error' => 'bridge_not_configured'], 403);
}
/* 2. One method. */
if (strtoupper((string)($_SERVER['REQUEST_METHOD'] ?? '')) !== 'GET') {
    opsiq_bridge_out(['success' => false, 'error' => 'method_not_allowed'], 405);
}
/* 3. Constant-time key comparison, key from a header (never the query string). */
$given = (string)($_SERVER['HTTP_X_OPSIQ_BRIDGE_KEY'] ?? '');
if ($given === '' || !hash_equals(OPSIQ_BRIDGE_KEY, $given)) {
    opsiq_bridge_out(['success' => false, 'error' => 'forbidden'], 403);
}
/* 4. Only now read credentials and connect. */

Pengenalpasti pengesahan terhadap informasi_schema

Ini adalah bahagian yang mengubah "pembantu boleh mencapai sebarang jadual" dari tidak bertanggungjawab kepada selamat. Selesai nama jadual panggilan terhadap skema sebenar, toler awalan jadual hilang atau tambahan, dan kembalikan null untuk apa-apa lagi. Semuanya di bawah kemudian bekerja dengan nama yang wujud secara membuktikan.

Pengenalpastian validasi dan reaksi, verbatim dari jembatan Botble
/** Real tables in THIS database — the allow-list, straight from the DB. */
$allTables = static function () use ($pdo, $db): array {
    static $cache = null;
    if ($cache !== null) return $cache;
    $st = $pdo->prepare('SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ? ORDER BY TABLE_NAME');
    $st->execute([$db]);
    return $cache = array_map('strval', $st->fetchAll(PDO::FETCH_COLUMN));
};

/** Resolve a caller-supplied table name to a REAL one, or null. */
$resolveTable = static function (string $name) use ($allTables, $prefix): ?string {
    $name = trim($name);
    if ($name === '' || !preg_match('/^[A-Za-z0-9_]+$/', $name)) return null;
    $tables = $allTables();
    foreach ($tables as $t) if (strcasecmp($t, $name) === 0) return $t;
    /* Tolerate a missing or extra table prefix. */
    foreach ($tables as $t) {
        if (strcasecmp($t, $prefix . $name) === 0) return $t;
        if ($prefix !== '' && strcasecmp($prefix . $t, $name) === 0) return $t;
    }
    return null;
};

/** Column introspection: table => [column => true]. Cached per request. */
function opsiq_bridge_columns(PDO $pdo, string $db, string $table): array
{
    static $cache = [];
    if (isset($cache[$table])) return $cache[$table];
    $stmt = $pdo->prepare('SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?');
    $stmt->execute([$db, $table]);
    $cols = [];
    foreach ($stmt->fetchAll(PDO::FETCH_COLUMN) as $c) $cols[strtolower((string)$c)] = true;
    return $cache[$table] = $cols;
}

/** Columns whose VALUES must never leave the platform. */
$secretCol = static function (string $c): bool {
    return (bool)preg_match('/(^|_)(password|remember_token|secret|api_key|private_key|salt|token)($|_)/i', $c);
};
/** Columns a write may never touch — auth material. */
$writeBanned = static function (string $c): bool {
    return (bool)preg_match('/(^|_)(password|remember_token)($|_)/i', $c);
};
/** Strip secret values from a row before it leaves the server. */
$redact = static function (array $row) use ($secretCol): array {
    foreach ($row as $k => $v) if ($secretCol((string)$k)) $row[$k] = '[redacted]';
    return $row;
};

Operasi baca dan operasi tulis, lengkap

Perhatikan apa yang diikat dan apa yang disahkan. Lajur penapis disemak berdasarkan senarai lajur sebenar dan kemudian diinterpolasi sebagai pengecam; nilainya diikat. Had dikepit. Baris disunting keluar dalam perjalanan keluar. Kemas kini menolak kunci primer dan sebarang lajur pengesahan, dan mencap updated_at apabila jadual itu mempunyainya.

BAHAYA membaca tabel apa pun — pengenal yang tervalidasi, nilai batas, baris berkabel
case 'query': {
    $t = $resolveTable((string)($_GET['table'] ?? ''));
    if ($t === null) opsiq_bridge_out(['success' => false, 'error' => 'unknown_table'], 404);
    $cols = opsiq_bridge_columns($pdo, $db, $t);
    if (!$cols) opsiq_bridge_out(['success' => false, 'error' => 'unknown_table'], 404);

    $sql = "SELECT * FROM `$t` WHERE 1=1";
    $args = [];

    /* Equality filter: column must be REAL, value is bound. */
    $wc = strtolower(trim((string)($_GET['where_column'] ?? '')));
    if ($wc !== '') {
        if (!isset($cols[$wc])) opsiq_bridge_out(['success' => false, 'error' => 'unknown_column: ' . $wc], 400);
        $sql .= " AND `$wc` = ?";
        $args[] = (string)($_GET['where_value'] ?? '');
    }
    /* Ordering: column validated, direction from a fixed pair. */
    $ob = strtolower(trim((string)($_GET['order_by'] ?? '')));
    if ($ob !== '' && isset($cols[$ob])) {
        $dir = strtoupper(trim((string)($_GET['order'] ?? 'DESC'))) === 'ASC' ? 'ASC' : 'DESC';
        $sql .= " ORDER BY `$ob` $dir";
    } elseif (isset($cols['id'])) {
        $sql .= " ORDER BY `id` DESC";
    }
    /* Hard row cap. */
    $lim = (int)($_GET['limit'] ?? 25);
    if ($lim < 1)   $lim = 25;
    if ($lim > 200) $lim = 200;
    $off = max(0, (int)($_GET['offset'] ?? 0));
    $sql .= " LIMIT $lim OFFSET $off";

    $st = $pdo->prepare($sql);
    $st->execute($args);
    $rows = array_map($redact, $st->fetchAll());
    opsiq_bridge_out(['success' => true, 'data' => [
        'table' => $t, 'returned' => count($rows), 'rows' => $rows,
    ]]);
}
Tulis satu baris — jadual dalam senarai dibenarkan, lajur pengesahan ditolak, satu baris mengikut kunci utama
case 'record.update': {
    $t = $resolveTable((string)($_GET['table'] ?? ''));
    if ($t === null) opsiq_bridge_out(['success' => false, 'error' => 'unknown_table'], 404);
    $requireWritable($t);                       // the allow-list, before anything else
    $cols = opsiq_bridge_columns($pdo, $db, $t);
    $pk   = $primaryKey($t);
    $id   = (string)($_GET['id'] ?? '');
    if ($id === '') opsiq_bridge_out(['success' => false, 'error' => 'id_required'], 400);

    $set = json_decode((string)($_GET['set'] ?? ''), true);
    if (!is_array($set) || !$set) opsiq_bridge_out(['success' => false, 'error' => 'set_json_required'], 400);

    $frag = []; $args = [];
    foreach ($set as $col => $val) {
        $col = strtolower(trim((string)$col));
        if (!isset($cols[$col]))  opsiq_bridge_out(['success' => false, 'error' => 'unknown_column: ' . $col], 400);
        if ($writeBanned($col))   opsiq_bridge_out(['success' => false, 'error' => 'refused: "' . $col . '" is auth material - change it through the platform own password flow, never by direct write.'], 400);
        if ($col === $pk)         opsiq_bridge_out(['success' => false, 'error' => 'refused: the primary key cannot be rewritten.'], 400);
        if (is_array($val) || is_object($val)) $val = json_encode($val, JSON_UNESCAPED_SLASHES);
        $frag[] = "`$col` = ?";
        $args[] = ($val === null) ? null : (string)$val;
    }
    if (isset($cols['updated_at']) && !isset($set['updated_at'])) $frag[] = '`updated_at` = NOW()';

    $before = $pdo->prepare("SELECT * FROM `$t` WHERE `$pk` = ? LIMIT 1");
    $before->execute([$id]);
    $prev = $before->fetch();
    if (!$prev) opsiq_bridge_out(['success' => false, 'error' => 'not_found'], 404);

    $args[] = $id;
    $up = $pdo->prepare("UPDATE `$t` SET " . implode(', ', $frag) . " WHERE `$pk` = ? LIMIT 1");
    $up->execute($args);
    opsiq_bridge_out(['success' => true, 'data' => [
        'table' => $t, 'id' => $id, 'changed' => $up->rowCount(),
        'before' => $redact(array_intersect_key($prev, $set)),
    ]]);
}

Perbedaan skema bertahan hidup

Versi platform berbeza-beza. Lajur berpindah, dinamakan semula, atau tiada. Jambatan yang mengandaikan satu skema hanya berfungsi pada satu pemasangan. Sebaliknya, periksa dan sesuaikan: pilih hanya lajur yang wujud di sini, terima awalan jadual, dan cuba ejaan rujukan yang munasabah.

Toleransi skema, dari jembatan Botble
/* Only ever select columns that exist on THIS install. */
$pick = static function (array $cols, array $wanted, string $alias = 'b'): string {
    $out = [];
    foreach ($wanted as $c) if (isset($cols[$c])) $out[] = "`$alias`.`$c`";
    return $out ? implode(', ', $out) : "`$alias`.*";
};

/* References vary: stored with or without a leading "#", with or without an
 * operator-configured alpha prefix, or only as a numeric id. Try every
 * plausible form — the PROOF match is what actually gates disclosure, so
 * tolerant matching here is safe. */
$refCandidates = [$ref, '#' . $ref];
$digitsOnly = preg_replace('/\D+/', '', $ref);
if ($digitsOnly !== '' && $digitsOnly !== $ref) {
    $refCandidates[] = $digitsOnly;
    $refCandidates[] = '#' . $digitsOnly;
}
$refCandidates = array_values(array_unique($refCandidates));
💡
Berikan jambatan anda op=diag yang melaporkan hanya STRUKTUR — jadual mana yang diselesaikan, lajur mana yang mempunyai jadual utama, dan SHAPE rujukan terkini dengan setiap digit ditogol. Ianya kunci-getar seperti segala-galanya lain, dan ia menukar "carian tidak menemui apa-apa" dari tiket sokongan kepada jawapan sepuluh saat. Jangan biarkannya mengembalikan rekod sebenar.

Kesalahan seragam dan jebakan enumerasi

Satu bentuk untuk segalanya

Success is {"success":true,"data":{...}}. Failure is {"success":false,"error":"snake_case_reason"}. Your Client.php and every action then have exactly one response shape to handle.

Tidak ditemui dan tiada padanan mesti sama

Pada permukaan carian, rujukan yang tidak wujud dan rujukan yang buktinya tidak sepadan mesti menghasilkan respons YANG SAMA. Jawapan yang berbeza menjadikan jambatan anda satu oracle yang mengesahkan rujukan mana yang sebenar, iaitu eksport senarai pelanggan percuma bagi sesiapa yang sabar.

Jangan sekali-kali dedahkan sebabnya kepada pelawat

Jambatan boleh memberikan butiran tepat kepada OpsIQ. Apa yang sampai kepada pelawat ditentukan oleh OpsIQ, dalam satu penolakan yang tetap.

Fail yang boleh disalin dalam panel penyambung

Operator tidak sekali-kali membuka repositori anda. Mereka membuka panel penyambung dalam OpsIQ dan menekan Salin. Salinan itu datang daripada settings.json, dan ia mesti program yang sama seperti bridge/*.php.

setting.json- panel untuk penghubung jembatan
{
  "settings": [
    { "key": "base_url", "label": "API base URL", "type": "text", "required": true },
    { "key": "api_key",  "label": "Bridge key",   "type": "password", "required": true,
      "autogenerate": true,
      "help": "Auto-generated the moment you enable the connector. It must match OPSIQ_BRIDGE_KEY inside the bridge file; the copyable file below already carries this value once saved." }
  ],
  "webhook_help": {
    "title": "One file, three surfaces",
    "body": "This platform has no public REST API, so this ONE file IS the API. Copy it into the site PUBLIC webroot, keeping the filename.",
    "snippet_filename": "opsiq-yourplatform-bridge.php   (drop next to the site index.php)",
    "snippet_template": "<?php\n/* ... the whole bridge file ... */\nconst OPSIQ_BRIDGE_KEY = \u0027{{setting:api_key}}\u0027;\n..."
  },
  "snippet_bindings": [
    { "assignment": "OPSIQ_BRIDGE_KEY", "setting": "api_key" }
  ]
}
{{setting:key}} carries live values

The connector panel substitutes {{setting:<key>}} in the snippet with that connector's saved value, so the copied file already contains the operator's generated bridge key and needs no hand-edit. An empty or unsaved setting leaves the token visible, so the operator can see exactly what is still missing.

P_bindings snippet bertahan hidup regenerasi

Isytiharkan setiap penetapan rahsia yang dijana secara eksplisit. Alat penyegerakan membina semula salinan panel daripada jambatan yang dihantar, kemudian memulihkan OPSIQ_BRIDGE_KEY = {{setting:api_key}} daripada pengikatan ini. Tanpanya, naik taraf boleh menyalin fail pakej tanpa kunci dengan tepat dan membuang secara senyap pemegang tempat kunci pengendali yang boleh digunakan. Connector Builder menghasilkan pengikatan ini secara automatik untuk pakej jambatan yang dijana.

Pemegang tempat lain adalah disubstitusi server-side

Hanya itu saja,{webhook_url}, {webhook_path}, {webhook_secret}, {site_key}, {base_url}Dan{slug}AYAT diisi sebelum panel pernah melihat snippet.

¡webhook_help mungkin adalah satu objek atau daftar

Daftar A memberikan beberapa snippet dalam satu panel, misalnya file bridge dan hook relay terpisah.

🚫
Jangan pertahankan snippet dengan tangan. Berkas jembatan dan salinan panel adalah dua salinan dari satu program, dan mereka AKAN hanyut — sebuah jembatan ditingkatkan dan salinannya tidak ada panelnya, jadi siapa pun yang memasang ulang dan menyalin dari panel yang dipasangi jembatan lama dan secara diam-diam kehilangan setiap kapabilitas baru. Tidak ada yang mendeteksinya: konformance pased, tanda tangan lulus, tes lulus.
Tetap membuat dua salinan identik
# Regenerate every package's panel snippet from its bridge file
php tools/sync_connector_bridge_snippets.php --apply

# Show what would change, without writing
php tools/sync_connector_bridge_snippets.php

Drift is now a failing conformance check, not a support ticket: the verifier compares the two line by line (ignoring the {{setting:...}} placeholders, which are supposed to differ) and names the first line that differs. Run the sync tool as the last step before every release, right before signing.

Apa yang patut didedahkan oleh jambatan

Operasi berbentuk khusus dan permukaan data universal, bersama-sama. Operasi khusus memberikan jawapan yang kemas dan dibina untuk tujuan tertentu bagi soalan yang benar-benar ditanya orang; operasi universal meliputi segala yang lain supaya pembantu tidak pernah buntu.

Bentuk baca

statistik, senarai objek utama dengan penapis, satu objek dengan baris berkaitannya, katalog barangan yang dijual, carian pelanggan dengan sejarah. Ini memberikan AI jawapan yang baik dalam satu panggilan dan bukannya lima.

Tulisan berbentuk

Dua atau tiga perubahan negara bagian yang penting — status, batal. Simpan nilai yang diterima yang diijinkan.

Perdagangan Jenis Kapeda

Untuk platform yang dapat dijual membongkar katalog yang dibangun tujuan, kutipan, checkout/order dan operasi pembayaran-keniscayaan, kemudian petakan mereka dalam commerce_roles.json dengan transport: bridgeJangan pernah memetakan peran penulisan perdagangan untuk catatan universal. create/update permukaan.

Penemuan Universal

jadual (dengan bilangan baris) dan penerangan (lajur, jenis, kunci primer, serta bendera boleh dibaca dan boleh ditulis bagi setiap lajur). Beginilah cara pembantu mempelajari platform yang tidak anda jangkakan.

Baca dan tulis Universal

lema, record. get, records. create, record, update, record-delete. setiap dari mereka divalidasi seperti yang ditunjukkan di atas.

Identitas, sebelum gerbang kunci

Probe identiti dipanggil oleh PELAYAR PENTADBIR, dari asal yang sama, jadi ia tidak boleh menghantar pengepala tersuai. Pengesahannya ialah sesi platform itu sendiri. Letakkannya sebelum pintu kunci, jauhkannya daripada semua data rekod, dan jangan sekali-kali membenarkannya memulangkan rahsia. Lihat halaman identiti penyambung.

Diagnostik Diagnosis

op=diag, structure only, masked.

Peta peran perdagangan Jembatan Edan
{
  "commerce": {
    "roles": {
      "catalog_search": {"operation":"hotel_catalog_search","transport":"bridge"},
      "quote":          {"operation":"hotel_quote","transport":"bridge"},
      "order_create":   {"operation":"hotel_order_create","transport":"bridge",
                           "recovery":"hotel_order_get"},
      "order_get":      {"operation":"hotel_order_get","transport":"bridge"},
      "record_payment": {"operation":"hotel_record_payment","transport":"bridge",
                           "recovery":"hotel_order_get"}
    },
    "customer_ordering": {
      "enabled":true, "version":1, "mode":"direct_order",
      "audience":"guests_and_clients", "account_flow":"guest_checkout",
      "payment_flow":"opsiq_gateway"
    }
  }
}
💡
Peranan kanonik mengawal urutan dan kuasa; operasi jambatan mengekalkan payload bertaip platform itu sendiri. Hotel mungkin memerlukan tarikh tiba, tarikh bertolak dan tetamu, WHMCS mungkin memerlukan klien sedia ada atau pendaftaran milik penyambung, dan platform SaaS mungkin memerlukan kitaran pengebilan. Core tidak sekali-kali mengekodkan medan tersebut secara tetap. Jambatan mesti memanggil perkhidmatan perniagaan platform supaya stok, cukai, invois, e-mel pengesahan dan hook semuanya berjalan.
⚠️
record_payment bukan jalan pintas untuk menandakan sebagai dibayar. Terima hanya bukti pembekal yang disahkan oleh pelayan: pesanan tepat, peniaga, jumlah, mata wang ISO, rujukan pembekal, cap masa disahkan yang baharu dan kunci idempotensi. Simpan ia melalui API pembayaran/invois platform, kemudian kembalikan bacaan semula pesanan atau invois yang berwibawa. Keputusan yang tidak diketahui mesti menjalankan pemulihan sebelum sebarang cubaan semula.
💡
Penyambung baca sahaja tidak memerlukan senarai benar langsung. Jika platform anda hanya menjawab soalan, hantar jambatan tanpa operasi tulis dan seluruh kelas risiko tulis akan hilang. Tambah operasi tulis apabila seseorang memintanya.

Daftar cek sebelum Anda kapal jembatan

Jembatan itu menolak segalanya tanpa kunci

Ujinya. Namakan semula pemalar kepada kosong dan sahkan setiap operasi menjawab 403.

Kunci yang salah ditolak dalam waktu konstan

¡Afine hash_equals, dan kunci dibaca dari header saja.

Nama meja yang dibuat-buat ditolak

Dan nama tabel yang asli dengan awalan yang salah masih menyelesaikan.

Lajur kata laluan tidak sekali-kali muncul dalam bacaan

Dan sebuah tulisan yang menyebutkan nama satu ditolak dengan penjelasan.

Sebuah surat ke meja di luar daftar-izin ditolak

Dengan pesan yang memberitahu operator bagaimana memperluasnya.

snippet panel ini cocok dengan berkas jembatan

php alat/sync_connector_bridge_snippets. php melaporkannya dalam langkah.

Memasang semula penyambung tidak mencukupi

Jika pakej anda disertakan dengan fail jambatan, pengendali yang menaik taraf penyambung itu JUGA mesti mengatur letak semula fail itu ke dalam webroot mereka. Nyatakannya dalam kandungan panel dan dalam CHANGELOG anda, pada setiap keluaran.

Penyambung

Memboot kerangka platform sendiri dari jembatan

Jambatan yang hanya membaca boleh menggunakan SQL. Jambatan yang MENCIPTA sesuatu pada platform (pesanan, tempahan, invois berbayar) mesti melalui lapisan aplikasi platform itu sendiri, dan menjalankan lapisan itu tanpa antara muka adalah tempat setiap kegagalan halus dalam corak ini berlaku. Semua yang di bawah dipelajari melalui pengalaman pahit pada integrasi langsung, setiap peraturan menangani kecacatan sebenar yang tidak menghasilkan sebarang ralat di mana-mana.

Sebuah baris pada basis data bukanlah perintah

ORANG raw firlow membuat catatan bayangan

Baris itu muncul, pentadbir menyenaraikannya, namun ia masih bukan rekod yang dipercayai platform sebagai ciptaannya sendiri: tiada nombor rujukan asli, tiada cangkuk model, tiada acara, tiada invois, tiada e-mel pelanggan, tiada pautan berfungsi untuk pelanggan. Pelanggan memetik rujukan yang tidak pernah dikeluarkan oleh platform kepada kakitangan yang tidak dapat menemuinya. Cipta melalui perkhidmatan platform itu sendiri; jika ia hanya mendedahkan perkhidmatan selepas pembayaran, cipta graf yang dijangkakannya dan serahkan pada sempadan yang ditetapkannya.

Jangan sekali-kali melaksanakan semula penomboran platform

Dua sampel format rujukan membuatkan ia kelihatan mudah untuk dihasilkan semula, dan menghasilkannya semula ialah penulisan bayangan yang sama pada satu tahap lebih rendah: pada hari platform mengubah skemanya, setiap rekod anda menjadi salah dan tiada apa yang memberi amaran kepada anda. Panggil penjananya (refleksi boleh mencapai penjana bukan statik), dan baca semula nilai yang disimpan dan bukannya mempercayai apa yang anda hantar.

Lajur platform mengekalkan makna platform

Sebelum anda menyimpan apa-apa yang anda ada dalam lajur platform, cari setiap pembaca. Lajur bernama seperti slot bebas boleh memuatkan: pada integrasi rujukan, id_transaksi terbukti menjadi token pautan pelanggan "lihat tempahan anda" yang dihantar melalui emel dipecahkan melalui: satu ringkasan idempotency disimpan di sana dengan senyapnya rosak setiap pautan tetamu. Kekalkan buku catatan anda dalam jadual milik jambatan: UNIQUE(operasi, kunci_idempotensi) adalah penjaga main semula, kehad menolak kembar serentak, dan pencarian pemulihan membaca jadual yang sama yang ditulis oleh ciptaan. Cipta jadual itu BEFORE beginTransaction: MySQL DDL mengumumkan transaksi terbuka secara tidak langsung.

Peristiwa, pendengar dan perangkap email ganda

Baca kod sumber perkhidmatan sebelum menghantar peristiwanya

Jika perkhidmatan platform yang anda panggil sudah pun menghantar peristiwa itu, menghantarnya sendiri akan menghantar dua e-mel pengesahan kepada pelanggan dan menjana dua invois. Jika tiada apa-apa yang mendengar, penghantaran tidak menghantar apa-apa. Kedua-dua kegagalan ini tidak menimbulkan ralat. Gunakan refleksi pada kaedah itu, potong baris sumbernya, dan baca apa yang sebenarnya dilakukannya: tekaan berdasarkan nama malah regex ke atas badannya pun pernah tersilap sebelum sumber kod memastikannya.

nickee getListeners() menyembunyikan kebenaran; getRawLeeners () menceritakannya

Laravel membalut pendengar kelas dalam fungsi tanpa nama, jadi getListeners() melaporkan [email protected] untuk segala-galanya. getRawListeners() menamakan kelas sebenar. Jangan sekali-kali hantar acara yang pendengarnya tidak dapat anda namakan.

ShouldQueue tidak bermakna "jalankan kemudian"

Dengan queue=sync (standar pada banyak instalasi produksi) pendengar antrian menjalankan INLINE dalam permintaan bridge Anda. Konteks boot IS konteks rendernya: setiap pendaftaran atau cacat URL di tanah but Anda di inbox pelanggan. Periksa konfigurasi('queue. default') sebelum penalaran tentang dimana apapun berjalan, dan lihat di lapangan kerja/failed_jobs sebelum menganggap seorang pekerja terlibat.

Penjaga penjaga ari dengan platform negara sendiri

Servis yang menghantar tanpa syarat mesti dipanggil tepat sekali. Penanda yang tidak boleh dialihkan adalah keadaan rekod platform sendiri (hanya panggilan sementara rekod masih menunggu), bukan bendera "dihantar" selari anda yang boleh bersetuju dengannya.

Boot tanpa kepala bukanlah boot web

Daftar apa yang daftar boot web

Template variables, module settings, filter hooks: platform service providers often register them only on a web request. On the reference integration the email handler substitutes only REGISTERED variables: every value was set correctly and the customer's confirmation still rendered with empty name, phone and link, no error anywhere, because registration lives in a runtime registry the headless boot never filled. Find the platform's registration call (for Botble: EmailHandler::addTemplateSettings with the module's email config) and make it in your boot, exactly as the platform's own provider does.

Semua Pin PinURLAkar, bukan hanya router

Titik-titik permintaan yang telah ditangkap di anjungan Anda, jadi rute (), url() dan aset() menghasilkan site.com/publik/opsiq-bridge.php/checkout/TOKEN: sebuah sambungan pelanggan melalui JSON endpoint. forceRootUrl(config('app.url')) memperbaiki generator; disk STORAGE memiliki akar sendiri, sehingga logo email tetap rusak sampai sistem berkas.disks.public.url ¡ ditetapkan juga (ia menyelesaikan secara malas, jadi mengaturnya di boot bekerja, dan hanya ketika kosong atau script-relative: sebuah CDN operator URL Kau tak boleh membatalkannya.

Komit sebelum Anda menyerahkan

Layanan platform membaca melalui koneksi mereka sendiri dan tidak dapat melihat transaksi terbuka Anda. Dipanggil sebelum melakukan, layanan pasca pembayaran menemukan tidak ada pembayaran yang selesai, diam-diam meninggalkan catatan tanpa dibayar, dan masih kebakaran acaranya, sehingga pelanggan diemail tentang catatan platform berpikir tidak dibayar. Lakukan grafik, kemudian panggilan.

Aturan jujur

(Tidak ada bayang yang jatuh) tidak ada bayangan yang mundur

Jika laluan asal tidak boleh dicapai, tolak dengan ralat yang boleh cuba semula SEBELUM sebarang wang bergerak. Jangan pernah mencipta rujukan, jangan pernah kemaskini status secara raw untuk membuat rekod separuh-integrasi kelihatan selesai. Pembayaran yang telah disahkan yang pemprosesan aslinya gagal pergi ke penyelarasan sebagai needs_attention: wang itu sebenar, keadaan adalah jujur "dibayar, belum diproses".

Fakta-fakta laporan, bukan deklarasi Anda

"Perkhidmatan telah berjalan" dan "pelanggan telah dimaklumkan" ialah fakta yang berbeza: integrasi rujukan menghantar e-mel yang kelihatan lengkap dengan setiap medan kosong sementara bendera ran menyatakan benar. Kembalikan keduanya secara berasingan (pemprosesan selesai, pemberitahuan dicuba), kekalkan platform_notified bagi setiap panggilan yang memaksa pengesahan sandaran OpsIQ apabila platform tidak memproses, dan jangan sekali-kali mendakwa penghantaran: peti masuk tidak dapat diperhatikan daripada pelayan.

Ukur, lalu tulis

Sertakan probe keupayaan baca sahaja dalam jambatan: kewujudan kelas, tandatangan kaedah, kepingan sumber bagi kaedah yang ingin anda panggil, pendengar mentah, pemacu baris gilir, dan (apabila soalan boleh dijawab dengan memanggil fungsi yang tidak berbahaya) panggilan langsung itu sendiri. Lima teori tentang satu e-mel kosong gugur apabila diuji dengan ukuran sebelum kod sumber memberi jawapan muktamad. Satu pusingan probe hanya memerlukan salinan fail; satu penulisan yang salah pada platform langsung boleh menyebabkan kehilangan pelanggan.

Penyambung

Jembatan dalam bahasa lain dan basis data lainnya

Corak jambatan bukan corak PHP. Yang dipanggil oleh OpsIQ ialah titik akhir HTTP, jadi fail itu boleh ditulis dalam Node, Python, Go, Ruby, .NET atau Java, dan stor di belakangnya boleh menjadi mana-mana enjin SQL atau MongoDB. Yang BERBENTUK PHP ialah saluran pembungkusan, dan kekangan itu menentukan cara jambatan anda sampai kepada operator. Baca bahagian penghantaran dahulu: itulah bahagian yang mengejutkan orang.

Perkara yang sebenarnya diperlukan oleh penyambung

Ini adalah kontraknya, tak ada yang menyebut bahasa.

Transportasi

Satu permintaan untuk panggilan.

Pengesahan

Ada rahasia yang dikongsi dalam X-Opsiq-Bridge-Key pengepala permintaan, dibandingkan dalam masa malar. Bukan parameter pertanyaan, bukan kuki, bukan pengesahan Basic.

Parameter fecth

Rentetan pertanyaan. op Nama-nama permukaan, do Nama operasi, sisanya adalah argumen operasi.

Sambutan

JSON. {"success":true,"data":{...}} atau {"success":false,"error":"snake_case_reason"}Aplikasi . Content-Type/jsonDan tak ada caching.

Kode status kode status code

200 Untuk sukses. 403 Kunci yang tidak dikonfigurasi atau salah, 404 Tidak ditemukan, 405 Metode yang salah, 400 argumen buruk, 501 Skema ini tak didukung.

Itu saja

Tiada rangka kerja, tiada masa jalan, tiada pustaka OpsIQ di pihak anda. Jika ia boleh menyajikan itu, ia boleh menjadi jambatan.

Penghantaran: apa yang boleh berada dalam bridge/, dan apa yang tidak boleh

Pakej bertandatangan meliputi senarai tetap sambungan fail, dan fail di luar senarai itu ditinggalkan daripada ZIP. Jambatan dalam bahasa yang tidak diliputi oleh senarai itu oleh itu tidak boleh dihantar di dalam pakej — tetapi ia juga tidak lagi boleh hilang tanpa disedari. Sejak 26 Ogos 2026, fail dalam bridge/ yang akan digugurkan oleh pembungkus ialah kegagalan pematuhan yang keras, jadi pakej enggan lulus dan bukannya dipasang tanpa jambatan di dalamnya.

Bagaimana sebuah bridge/ folder diperlakukan pada waktu membangun
bridge/bridge.php     ->  SHIPPED, and drift-checked against the panel snippet
bridge/server.js      ->  SHIPPED, and drift-checked against the panel snippet
bridge/bridge.py      ->  REFUSED at conformance: "Bridge files are packaged" FAILS
bridge/bridge.rb      ->  REFUSED at conformance
bridge/main.go        ->  REFUSED at conformance
bridge/Bridge.cs      ->  REFUSED at conformance
bridge/Bridge.java    ->  REFUSED at conformance
PHP dan JavaScript — didukung sepenuhnya

Kapal file di ZIP yang ditandatangani, dan pengverifikasi snippet menyimpan panel Anda salinan byte-identical untuk itu, mana saja dari dua itu. cek drift membaca setiap berkas di bridge/, bukan hanya yang PHP, sehingga jembatan yang ditingkatkan dengan salinan panel basi gagal membangun dalam kedua bahasa.

Kelainan — antarkan melalui panel saja

Coretan panel ialah teks biasa yang tidak tahu bahasa apa yang dikandungnya, jadi ia berfungsi untuk mana-mana timbunan teknologi. Letakkan keseluruhan program dalam webhook_help.snippet_template, namakan fail itu dalam snippet_filename, dan JANGAN tinggalkan salinan dalam bridge/ — semakan pematuhan akan menolak pakej itu daripada menghantarnya dalam keadaan kosong. Nyatakan dengan jelas dalam webhook_help.body bahawa pengendali menyalin fail ini dan bukannya mendapatkannya daripada pakej.

Jika anda benar-benar memerlukan bahasa lain DI DALAM pakej

Widen PackageSigner::EXTENSIONS deliberately, then re-sign and re-seed. That is a decision about what executable code Nabtech distributes, so make it on purpose — do not discover it from a missing file.

💡
Nama file di webhook_help.snippet_filename apabila pakej anda mengandungi lebih daripada satu jambatan. Itulah cara pengesah mengetahui jambatan mana yang dimiliki oleh sesuatu salinan panel; tanpanya, pasangan yang kabur dilaporkan sebagai amaran pematuhan dan coretan itu dibiarkan tanpa disemak.
⚠️
Tujuan semakan hanyutan ialah fail jambatan dan salinan panelnya merupakan dua salinan bagi satu program dan PASTI akan menyimpang. Jana semula dan bukannya menyunting secara manual: php tools/sync_connector_bridge_snippets.php --applyLalu tandai ulang paketnya.

Gerbang, dalam enam bahasa

Empat semakan yang sama dalam susunan yang sama di mana-mana: gagal tertutup tanpa kunci, satu kaedah, perbandingan kunci masa malar daripada pengepala, kemudian sambung. Satu-satunya perangkap sebenar ialah perbandingan itu, dan ia perangkap yang berbeza dalam setiap bahasa.

⚠️
Bandingkan ringkasan SHA-256 bagi kedua-dua kunci dan bukannya kunci itu sendiri. Ia betul dalam setiap bahasa, dan ia mengelakkan hakikat bahawa beberapa pembanding masa malar sama ada melontar ralat atau membocorkan maklumat apabila panjang tidak sepadan — timingSafeEqual dalam Node menimbulkan RangeError apabila panjang penimbal berbeza, yang menukar kunci yang salah menjadi 500 dan bukannya 403.
Node. js — gerbang
// Node.js — no dependencies
const http = require("http"), crypto = require("crypto"), url = require("url");

const BRIDGE_KEY = process.env.OPSIQ_BRIDGE_KEY || "";   // empty = bridge OFF

const sameKey = (a, b) => {
  const ha = crypto.createHash("sha256").update(String(a)).digest();
  const hb = crypto.createHash("sha256").update(String(b)).digest();
  return crypto.timingSafeEqual(ha, hb);                 // equal lengths, always
};
const out = (res, payload, code = 200) => {
  res.writeHead(code, { "Content-Type": "application/json; charset=utf-8",
                        "Cache-Control": "no-store" });
  res.end(JSON.stringify(payload));
};

http.createServer(async (req, res) => {
  if (BRIDGE_KEY.length < 24)         return out(res, { success: false, error: "bridge_not_configured" }, 403);
  if (req.method !== "GET")           return out(res, { success: false, error: "method_not_allowed" }, 405);
  const given = req.headers["x-opsiq-bridge-key"] || "";
  if (!given || !sameKey(BRIDGE_KEY, given))
                                      return out(res, { success: false, error: "forbidden" }, 403);

  const q = url.parse(req.url, true).query;
  // ... dispatch on q.op / q.do exactly as the PHP bridge does
}).listen(process.env.PORT || 8787);
Python — gerbang
# Python — Flask
import hashlib, hmac, os
from flask import Flask, request, jsonify

app = Flask(__name__)
BRIDGE_KEY = os.environ.get("OPSIQ_BRIDGE_KEY", "")      # empty = bridge OFF

def same_key(a: str, b: str) -> bool:
    return hmac.compare_digest(
        hashlib.sha256(a.encode()).digest(),
        hashlib.sha256(b.encode()).digest(),
    )

def out(payload, code=200):
    resp = jsonify(payload)
    resp.status_code = code
    resp.headers["Cache-Control"] = "no-store"
    return resp

@app.before_request
def gate():
    if len(BRIDGE_KEY) < 24:
        return out({"success": False, "error": "bridge_not_configured"}, 403)
    if request.method != "GET":
        return out({"success": False, "error": "method_not_allowed"}, 405)
    given = request.headers.get("X-Opsiq-Bridge-Key", "")
    if not given or not same_key(BRIDGE_KEY, given):
        return out({"success": False, "error": "forbidden"}, 403)
Pergi, Ruby, . NET dan Java — perbandingan yang sama
// Go
func sameKey(a, b string) bool {
    ha := sha256.Sum256([]byte(a))
    hb := sha256.Sum256([]byte(b))
    return subtle.ConstantTimeCompare(ha[:], hb[:]) == 1
}

func gate(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json; charset=utf-8")
        w.Header().Set("Cache-Control", "no-store")
        key := os.Getenv("OPSIQ_BRIDGE_KEY")
        if len(key) < 24 { out(w, 403, "bridge_not_configured"); return }
        if r.Method != http.MethodGet { out(w, 405, "method_not_allowed"); return }
        given := r.Header.Get("X-Opsiq-Bridge-Key")
        if given == "" || !sameKey(key, given) { out(w, 403, "forbidden"); return }
        next(w, r)
    }
}

// Ruby
def same_key?(a, b)
  OpenSSL.secure_compare(Digest::SHA256.digest(a.to_s), Digest::SHA256.digest(b.to_s))
end

// C# / .NET
static bool SameKey(string a, string b) =>
    CryptographicOperations.FixedTimeEquals(
        SHA256.HashData(Encoding.UTF8.GetBytes(a)),
        SHA256.HashData(Encoding.UTF8.GetBytes(b)));

// Java
static boolean sameKey(String a, String b) throws Exception {
    MessageDigest d = MessageDigest.getInstance("SHA-256");
    return MessageDigest.isEqual(d.digest(a.getBytes(UTF_8)), d.digest(b.getBytes(UTF_8)));
}

Pengenalpasti pengesahan pada setiap mesin basis data

Sifat keselamatannya tidak berubah: nama jadual atau lajur yang dibekalkan oleh pemanggil mesti disemak berbanding skema sebenar sebelum diinterpolasi, dan setiap nilai mesti menjadi parameter terikat. Hanya pertanyaan introspeksi, aksara petikan dan klausa penomboran halaman yang berbeza.

MySQLDanMariaDB

Tabel: SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?. Lajur: sama seperti terhadap information_schema.COLUMNS dengan AND TABLE_NAME = ?. Petik dengan backtick, menggandakan setiap backtick di dalamnya. Penomboran halaman dengan LIMIT n OFFSET m.

PostgreSQL

Pandangan informasi_schema yang sama dari kata-kata kecil, WHERE table_schema = $1 [biasanya] public). Petik dengan tanda petik berganda, menggandakan setiap tanda petik berganda di dalamnya. Penomboran halaman dengan LIMIT n OFFSET mPerhatikan aturan lipatan: pengenal tak terkutip dilipat ke huruf kecil, jadi bandingkan kasus-tidak sensitif ketika Anda menyelesaikan sebuah nama.

SQLServer

Paparan INFORMATION_SCHEMA yang sama. Petik dengan kurungan segi empat, menggandakan setiap kurungan penutup di dalamnya. Penomboran halaman memerlukan ORDER BY: ORDER BY [id] DESC OFFSET @o ROWS FETCH NEXT @n ROWS ONLY.

SQLite

Tabel: SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'. Lajur: SELECT name FROM pragma_table_info(?) — gunakan bentuk bernilai jadual itu, kerana PRAGMA table_info(x) tidak boleh menerima parameter terikat dan mengundang interpolasi rentetan di situ ialah lubang yang anda cuba tutup. Gunakan petikan berganda. Halaman dengan LIMIT n OFFSET m.

Oracle

Tabel: SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = :owner; lajur daripada ALL_TAB_COLUMNSKutipan dengan kutipan ganda, dan ingat lipatan pengenal tak terkutip ke kasus UPPER, kebalikan dari PostgreSQL_. Page with OFFSET :o ROWS FETCH NEXT :n ROWS ONLY Pada 12c dan kemudian.

MongoDB

Tiada SQL, jadi tiada interpolasi pengecam dan tiada parameter terikat — disiplin yang berbeza untuk matlamat yang sama. Lihat di bawah.

Pertanyaan introspeksi bagi setiap enjin
-- MySQL / MariaDB
SELECT TABLE_NAME  FROM information_schema.TABLES  WHERE TABLE_SCHEMA = ?;
SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?;

-- PostgreSQL
SELECT table_name  FROM information_schema.tables  WHERE table_schema = $1;
SELECT column_name FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2;

-- SQL Server
SELECT TABLE_NAME  FROM INFORMATION_SCHEMA.TABLES  WHERE TABLE_SCHEMA = @schema;
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = @table;

-- SQLite
SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%';
SELECT name FROM pragma_table_info(?);

-- Oracle
SELECT TABLE_NAME  FROM ALL_TABLES      WHERE OWNER = :owner;
SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE OWNER = :owner AND TABLE_NAME = :tbl;
💡
Selesaikan, kemudian gunakan nama yang TELAH DISELESAIKAN. Jangan sekali-kali hantar ejaan pemanggil terus ke kueri walaupun selepas menyemaknya — cari nama sebenar dalam senarai yang anda baca daripada skema dan sisipkan nama itu. Ia tidak memerlukan kos apa-apa dan ia menutup jurang antara "nama ini sepadan dengan sesuatu" dan "inilah nama yang akan saya jalankan".

MongoDBAturan yang sama, tanpaSQL

Tiada rentetan pertanyaan untuk disuntik, jadi orang menganggap tiada apa yang perlu dikawal. Ada: dokumen penapis. Menghantar JSON yang dibekalkan oleh pemanggil terus ke dalam find() membolehkan pemanggil menghantar {"$ne": null} atau {"$gt": ""} Di mana kau mengharapkan nilai, dan secara diam-diam memilih setiap dokumen.

MongoDB — Koleksi koleksi nicked-list, filter berkekuatan skalar, proyeksi sebagai reaction
// Node + the official driver
const names = (await db.listCollections({}, { nameOnly: true }).toArray()).map(c => c.name);

function resolveCollection(given) {
  if (!/^[A-Za-z0-9_.-]+$/.test(given || "")) return null;
  return names.find(n => n.toLowerCase() === String(given).toLowerCase()) || null;
}

const coll = resolveCollection(q.collection);
if (!coll) return out(res, { success: false, error: "unknown_collection" }, 404);

// Build the filter from a validated field and a SCALAR value. Never spread
// caller JSON into it: {"$ne":null} would match every document.
const filter = {};
if (q.where_field) {
  if (!/^[A-Za-z0-9_.]+$/.test(q.where_field))
    return out(res, { success: false, error: "unknown_field: " + q.where_field }, 400);
  filter[q.where_field] = String(q.where_value ?? "");   // String() is the guard
}

// Projection is the redaction allow-list: drop secrets, never return them.
const projection = { password: 0, remember_token: 0, api_key: 0, secret: 0, token: 0 };

const limit = Math.min(Math.max(parseInt(q.limit ?? "25", 10) || 25, 1), 200);
const rows  = await db.collection(coll)
                      .find(filter, { projection })
                      .limit(limit)
                      .skip(Math.max(0, parseInt(q.offset ?? "0", 10) || 0))
                      .toArray();
Nama koleksi dari daftarCollections

Itu informasi_schemamu.

Kumpulkan setiap nilai filter ke skalar

UDANG A String() atau Number() di sekitarnya adalah keseluruhan pertahanan terhadap suntikan operator. Sebuah dokumen dimana Anda mengharapkan nilai adalah NoSQL setara dengan kutipan menyimpang.

Proyeksi adalah aturan reksaan

Dikecualikan dari bidang yang berbentuk rahasia dalam proyeksi sehingga mereka tidak pernah meninggalkan server, daripada menghapusnya dari hasil setelahnya.

Pemadaman kekal satu dokumen mengikut _id

HapusOne dengan _id yang diselesaikan. Jangan hapusMany, dan jangan pernah filter yang dipengaruhi oleh penelepon.

Writes tinggal diperbolehkan-didaftar

Penalaran yang sama dengan SQL_: namakan koleksi sebuah tulisan mungkin menyentuh, dan menolak sisanya dengan penjelasan.

Titik akhir identitas dalam bahasa lain

Kuar identitas adalah setengah lainnya dari jembatan, dan itu HTTP juga. Blok penandatangan identik dalam setiap bahasa: base64url muatan, HMAC_-SHA256 string tersebut, bergabung dengan sebuah titik.

✅
Jangan tulis ini dengan tangan dari awal. Tetapan, Portal Sokongan menyediakan laluan sedia guna bagi setiap bahasa untuk portal (token sekali guna, dua minit). Laman Jauh, laman anda, Kod, C. Kenal pasti pelanggan yang log masuk secara automatik menyediakan versi sembang bagi setiap bahasa (token satu jam serta pengendali muat semula). Ambil penandatangan daripada versi yang sepadan dengan susunan teknologi anda.
Apa yang akan berubah ketika kau menggunakannya kembali

Coretan tersebut menjana token penyerahan PORTAL, yang sengaja lebih ketat: ia membawa jti dan single_use:true dan hayatnya kira-kira 120 saat kerana ia dihantar dalam URL. Token identiti jambatan atau widget tidak membawa kedua-duanya dan menggunakan exp yang lebih panjang, dari beberapa minit hingga beberapa jam.

Apa yang tetap sama

site_key, iat, exp dan authenticated:true di peringkat atas, serta subjek admin atau pelanggan dengan id dan nama pengguna atau e-mel. Tuntutan yang sama, tandatangan yang sama, rahsia yang sama.

Kedua-duanya bentuk token memverifikasi

Sebuah tiga bagian JWT ditandatangani HS256 bekerja, dan begitu juga dua-bagian base64url muatan ditambah hex HMAC Anda menggunakan perpustakaan bahasa Anda yang menjadi alami — perpustakaan JWT biasanya merupakan jalur pendek di luar PHP.

Jangan pernah mint di browser

Benar dalam setiap bahasa. Menandatangani di sisi klien bermaksud menghantar rahsia laman kepada setiap pelawat.

Memilih, jujur

Platformnya PHP

Tulis jambatan dalam PHP. Ia dihantar dalam pakej, ia disemak untuk penyimpangan, dan ia boleh memulakan rangka kerja platform itu sendiri untuk membaca sesi langsung bagi siasatan identiti. Tiada pilihan lain yang memberi anda ketiga-tiganya.

Platform ini Node

Kapal jembatan . js, tanda dan drift diperiksa persis seperti PHP satu.

Platformnya adalah Python, Ruby, Go, NET atau Java

Hantar melalui petikan kod panel dan nyatakannya dalam kandungan panel; jangan tinggalkan fail dalam bridge/, kerana semakan pematuhan akan menolak pakej tersebut. Selain itu, penyambung ini sepenuhnya biasa: tindakan, penyedia konteks, identiti dan carian tetamu semuanya berfungsi dengan cara yang sama, kerana tiada satu pun daripadanya peduli apa yang menjawab panggilan HTTP itu.

Anda tidak dapat menjalankan proses pada host platform

Jika begitu, corak jambatan bukan alat yang sesuai. Jambatan wujud untuk mencapai platform dari dalam hosnya sendiri. Jika anda hanya boleh mencapainya dari luar, anda sedang menulis penyambung API biasa terhadap apa sahaja permukaan yang didedahkannya.

⚠️
Satu lagi kekangan yang wajar dirancang: probe identiti perlu membaca sesi log masuk platform, yang biasanya bermaksud berjalan di dalam proses platform itu sendiri atau sekurang-kurangnya pada hosnya dengan akses kepada stor sesinya. Jambatan yang ditulis dalam bahasa yang berbeza daripada platform boleh menyajikan data dengan selesa tetapi mungkin masih sukar menjawab op=admin_identity. Jika itu keadaan anda, sediakan jambatan data dalam bahasa anda dan probe identiti dalam bahasa platform.
Penyambung

Berikan asisten kedua bagian: tindakan DAN konteks

Ini adalah satu perkara paling biasa yang hilang dari sambungan yang "berfungsi tetapi tidak berguna". Tindakan membiarkan AI melakukan sesuatu. Bahagian konteks membolehkannya BELAJAR sesuatu. Penyambung memerlukan kedua-duanya, dan kebanyakan soalan yang ditanya oleh admin dijawab oleh konteks, tidak pernah oleh tindakan. Penyangkut dengan aksi sempurna dan tiada pembekal konteks akan melaporkan secara jujur bahawa ia tidak dapat melihat apa-apa.

Dua bagian

Tindakan - tindakan yang dilakukan oleh AI

Diputuskan dalam tindakan.jsonorg atau dikembalikan oleh registerActions(). Model memilih satu, mengisi parameternya, dan OpsIQ Tindakan untuk kata kerja: batalkan pemesanan ini, buka tiket itu, ubah status ini.

Bagian - bagian konteks Konteks bahasa Yunani — bagaimana AI mengetahui hal - hal

Dikumpulkan oleh ContextProvider sebelum model berjalan. "Berapa banyak pesanan bulan ini", "siapa pelanggan terkini saya", "apa yang kami jual" semua diselesaikan melalui carian konteks, dan tidak pernah menyentuh tindakan sama sekali.

⚠️
Gejala penyedia yang hilang: pembantu menjawab "Tiada penyambung diaktifkan membekalkan bahagian konteks ini" walaupun penyambung telah dipasang, diaktifkan dan lulus ujian sambungannya. Tiada apa-apa dilog, tiada ralat. Mesej itu bermaksud tiada penyedia menuntut bahagian tersebut.

kosakata daerah universal

OpsIQ Tugas Anda adalah memutuskan apa yang masing-masing berarti di platform Anda dan menjawabnya.

Gagal menorder / cont_ing_orders

Apa sahaja yang dikira sebagai transaksi pada platform anda: pesanan, tempahan, reservasi, kerja, penghantaran. pending_orders ialah senarai yang sama yang ditapis kepada yang belum selesai.

Klien

Senarai pelanggan.

products

Apa yang dijual oleh platform: produk, bilik, pelan, perkhidmatan.

billing

Jumlah hasil dan jumlah berbentuk wang, serta kiraan mengikut keadaan.

Tiket, layanan, domain, server, aktivitas

Gunakanlah ini jika platform Anda benar - benar memiliki mereka.

Apa pun yang lain platform Anda telah

Isytiharkan sendiri. Penyedia yang mengisytiharkan sections(): ['licenses','shipments'] akan menggabungkan kedua-duanya ke dalam senarai benarkan carian universal, jadi carian khusus platform menjadi tersedia tanpa perubahan pada teras.

Kesilapan yang merugikan sehari

Sebuah penyedia konteks MUST mengimplementasikan antarmuka. Tipe registry memeriksanya, jadi kelas yang hanya melihat ke kanan dilewatkan — tanpa kesalahan, dimanapun.

ContextProvider.php — kontrak, daripada pakej rujukan Botble
use OpsIQ\Platform\ContextProviderInterface;

/* MUST implement ContextProviderInterface: ContextRegistry::collectAll()
 * type-checks it, so a provider that merely LOOKS right is skipped and every
 * section answers "No enabled connector supplied this context section" — the
 * exact symptom, with no error anywhere. */
final class ContextProvider implements ContextProviderInterface
{
    public function slug(): string  { return 'yourplatform_context'; }
    public function label(): string { return 'Your Platform (orders, customers, products)'; }
    public function priority(): int { return 30; }   // lower renders earlier

    /** ADMIN only. The guest surface has its own provider and its own rules. */
    public function surfaces(): array { return ['admin']; }

    /** The universal section names this connector can answer. */
    public function sections(): array
    {
        return ['orders', 'pending_orders', 'clients', 'products', 'billing'];
    }

    public function isAvailable(): bool
    {
        try {
            $s = \OpsIQ\Connectors\ConnectorRegistry::getSettings('yourplatform') ?: [];
            return trim((string)($s['base_url'] ?? '')) !== '' && trim((string)($s['api_key'] ?? '')) !== '';
        } catch (\Throwable $e) {
            return false;
        }
    }

    public function build(array $ctx): string
    {
        $section = strtolower(trim((string)($ctx['section'] ?? '')));
        $limit   = max(3, min(50, (int)($ctx['limit'] ?? 20)));
        $query   = trim((string)($ctx['query'] ?? ''));
        try {
            switch ($section) {
                case 'orders':
                case 'pending_orders': return $this->orders($limit, $query, $section === 'pending_orders');
                case 'clients':        return $this->customers($limit, $query);
                case 'products':       return $this->products($limit);
                case 'billing':        return $this->billing();
            }
        } catch (\Throwable $e) {
            return '';   // a provider must NEVER break prompt assembly
        }
        return '';
    }
}
Daftarkannya dari penyambung

Laksanakan ContextConnectorInterface dan pulangkan penyedia anda daripada contextProviders(). Kelas penyambung juga boleh melaksanakan ContextProviderInterface secara terus dan didaftarkan sebagai dirinya sendiri.

Aundy Kembali teks biasa, bukan JSON_

build () mengembalikan blok teks yang dikonkatenkan ke dalam prompt. Tuliskannya untuk pembaca: sebuah heading, kemudian satu baris per baris.

Kembali '' daripada melempar

Sebuah penyedia yang melempar di log dan dilewatkan, tapi mengembalikan '' adalah kontraknya.

Ukrainian Pembina tidak dapat menulis section() untuk anda

ContextProvider.php yang dijana disertakan dengan sections(): array { return []; } dan wizard tidak mempunyai medan untuknya. Isikannya secara manual — dan ingat bahawa menerbitkan semula daripada wizard akan MENULIS GANTI fail itu. Salin suntingan anda keluar terlebih dahulu.

⚠️
Tetapkan TOTAL yang benar, bukan bilangan baris yang anda hantar. Halaman bukanlah jumlah. Penyedia yang menyenaraikan dua puluh baris tanpa mengatakan begitu akan mendapat pembantu dengan yakin menjawab "anda mempunyai 20 bookings" apabila platform memegang 669. Satu COUNT murah dan satu baris eksplisit — "TOTAL pada fail: 669 (senarai ini memaparkan yang terkini 20 hanya)" — adalah penyelesaian keseluruhan, dan kiraan yang salah dengan yakin lebih buruk daripada tiada kiraan.
Sebuah blok bagian yang tidak dapat disalah hitung
$lines = ['YOUR PLATFORM — ORDERS (live, newest first)'];
$lines[] = 'TOTAL orders on file: ' . (int)$total
         . ' (this list shows the newest ' . count($rows) . ' only — never count these rows to answer "how many")'
         . ' | by status: ' . $byStatus;
foreach ($rows as $r) {
    $lines[] = '#' . (int)$r['id'] . ' ' . $r['reference'] . ' | ' . $r['status']
             . ' | amount ' . $r['amount'] . ' | ' . substr((string)$r['created_at'], 0, 16);
}
$lines[] = 'Use yourplatform_get_order (order_id) for the full record.';
return implode("\n", $lines);

Namailah tindakan Anda jadi OpsIQ BAHASA dapat membaca dari tulisan

OpsIQ KATA-KATA dalam aksi_id, dan itu sengaja konservatif: apa pun yang tidak dapat dikenali dianggap sebagai tulisan dan menuntut kartu persetujuan.

1
Keke_malasan adalah destruktif atau kemenangan konfirmasi_perlu

Jika keduanya sudah diatur, tindakannya selalu perlu persetujuan.

2
Sebuah kata tulis di mana saja dalam id membuatnya menulis

tambah, cipta, buka, kemas kini, sunting, ubah, ubah suai, padam, alih keluar, musnahkan, batalkan, bayar balik, gantung, tamatkan, aktifkan, luluskan, tolak, hantar, tandakan, set semula, tangkap, batalkan transaksi, tutup, buka semula, tugaskan, tarik balik, berikan, tetapkan, togol, dayakan, nyahdayakan, keluarkan, jana, gunakan, caj, bayar, peruntukkan, perbaharui, naik taraf, gabungkan, alihkan, pindahkan, eskalasikan, benderakan, daftar, segerakkan, tolak keluar, import, jalankan, cetuskan, mulakan, hentikan, mulakan semula dan beberapa lagi.

3
Kemudian kata baca membuatnya dibaca

get, list, search, find, view, show, fetch, count, lookup, describe, read, export, preview, test, ping, status, summary, detail, recent, history, check, log, stats, metrics, overview, revenue, breakdown, report, analytics, balance, usage, quota, snapshot, insights, feed, draft, triage, classify, suggest.

4
Maka metode HTTP memutuskan

GETET, HEAD dan PILIHAN dibaca.

5
Jika tidak, itu adalah sebuah tulisan

Tidak dikenali, itu berarti persetujuan diperlukan.

⚠️
Kata tulis lema dicentang BEFORE dibaca kata-kata, sehingga nama campuran seperti get_and_sync_orders diklasifikasikan sebagai WRITE. Pilih satu kata kerja, letakkan pertama, dan tetap bersih: list_order, get_customer, search_booking, cancel_booked, set_order_status.

Hanya menyatakan asli_api jika platform benar-benar memiliki satu

The native_api capability registers a generic <slug>_api_call passthrough so the model can reach endpoints your typed actions do not cover. On a platform with no API it is worse than useless: the model keeps reaching for a tool that cannot succeed, instead of using the tools that can.

Builder memutuskannya daripada jawapan akses data anda

Say the platform has an API and it declares native_api and emits the passthrough. Say it has none (bridge mode, or the "Platform with no API" profile) and it declares platform_bridge instead and strips native_api, so the two can never both be true. You no longer hand-edit this.

Pakej yang ditulis secara manual tetap mesti melakukannya dengan betul

Jika anda menulis manifest sendiri, isytiharkan tepat satu daripada native_api atau platform_bridge. Semakan pematuhan menganggap platform_bridge sebagai jalan keluar yang dijangka ada pada penyambung jambatan, dan Pembina menolak spesifikasi yang menuntut platform_bridge pada penyambung API.

¡Keep ai_api_reference. md jujur baik cara

On a connector that declares native_api the admin brain heads that file with a line naming <slug>_api_call. Without native_api it is headed neutrally instead, so a bridge connector no longer advertises a tool it does not have. Describe your real surface — for a bridge, that is your op and do vocabulary, not a REST endpoint table.

Ajarlah otak admin tentang platformmu.

Declare ai_brain_aware and ship two Markdown files. They are read from the INSTALLED package directory (opsiq/connectors/<slug>/) for ENABLED connectors only, and injected into the admin agent's system prompt.

ai_expertise_admin.md

Apa ini platform IS, bagaimana data dibentuk, apa yang objeknya disebut, dan quirks yang sebaliknya akan membuat asisten menebak. tulis untuk rekan kompeten yang belum pernah melihat platform.

ai_api_reference.md

Untuk penghubung jembatan ini adalah opmu dan lakukan kosakata dengan parameter mereka, bukan tabel titik akhir REST.

Anggaran Pendapatan

Kira-kira 6,000 aksara disimpan bagi setiap penyambung, dan kira-kira 24,000 aksara untuk keseluruhan blok merentas setiap penyambung yang didayakan. Melebihi had bagi setiap penyambung, fail anda akan dipotong; ringkaskannya sebelum pemotong melakukannya.

Bayaran Presisi Kepertimbangan

Fail-fail ini membezakan antara pembantu menggunakan alat jadual universal anda dan pembantu menjawab daripada bahagian yang salah kerana tiada apa yang pernah memberitahunya bahawa alat tersebut wujud.

💡
Kedua-dua fail mesti berada dalam pakej YANG DIPASANG, bukan hanya dalam pepohon sumber anda. Ia adalah fail pakej biasa, jadi ia dilindungi oleh tandatangan dan dihantar dalam ZIP — ini juga bermakna menyunting salah satunya selepas menandatangani akan memecahkan meterai. Tandatangan semula.
Penyambung

Identiti ID melalui penyambung: admin, pelanggan, portal

Satu kontrak tandatangan melayan tiga permukaan. Tugas sambungan adalah untuk menukar "siapa yang log masuk ke platform" menjadi token ditandatangani OpsIQ boleh mengesahkan, dan kemudian untuk memperkenalkan subjek yang disahkan dalam OpsIQBentuk's. Penyambung tidak pernah mengesahkan kebenaran sesiapa — platform lakukan, dan tandatangan membawa pernyataan itu.

Tiga permukaan, satu penanda

Admin - staf Anda, di dalam backend Anda

Subjek admin bagi para petugas. Widget memuat di dalam panel admin platform dan setiap anggota staf dipadankan dengan OpsIQ agen mereka sendiri. Berjalan penuh pada halaman widget admin.

Pelanggan — pelanggan yang mendaftar masuk, dalam client chat

Subjek pelanggan. Inilah yang membolehkan pelanggan yang telah log masuk mendapat KESELURUHAN akaun mereka dan bukannya carian tanpa nama: setiap pesanan, butiran penuh, dan sebarang tindakan layan diri yang anda benarkan.

Portal Portal — link yang dalam ke portal pendukung

Tuntutan yang sama serta jti dan single_use, dengan hayat 120 saat, kerana token itu dibawa dalam URL dan mesti boleh digunakan sekali sahaja. Jangan bina yang ini sendiri: Tetapan, Support Portal menyediakan coretan sedia guna bagi setiap bahasa, dan platform menjananya untuk anda apabila kawasan akaun berjalan pada pelayan ini.

Kontrak muatan

Ini adalah klaim yang di periksa oleh para penerang tidak ada pilihan apapun contoh sebagian dari tempat lain mungkin menyarankan.

site_key

Peringkat atas. Mesti sama dengan kunci tapak permintaan, jika tidak token akan ditolak.

Aquina iat dan exp

Peringkat atas, saat unix. exp mesti pada masa hadapan dan selepas iat. Token yang lebih daripada kira-kira satu minit pada masa hadapan akan ditolak. Pastikan hayatnya singkat — beberapa minit hingga beberapa jam.

Gagal disahkan: benar

Peringkat teratas, di sebelah exp. Penegasan platform anda bahawa manusia sebenar telah log masuk.

Platform

Peringkat atas. Slug pendek yang menamakan asal. Disyorkan, dan ia membolehkan penyedia identiti penyambung membezakan tokennya sendiri daripada token platform lain.

admin atau pelanggan

Objek yang menamakan subjek. Ia mesti membawa id yang tidak kosong, dan nama pengguna atau e-mel — pintu akses bagi setiap pentadbir memadankan pada medan itu. Sertakan kedua-duanya jika anda mempunyai kedua-duanya.

Minting, verbatim dariBotbleJembatan jambatan
$payload = [
    'site_key'      => $cfgSiteKey,
    'iat'           => time(),
    'exp'           => time() + 6 * 3600,
    'authenticated' => true,
    'platform'      => 'yourplatform',
    /* 'admin' or 'customer' — OpsIQ stamps the matching session identity
     * from whichever key is present. */
    $opsiqSubject   => $subjectPayload,
];
$payload64     = rtrim(strtr(base64_encode(json_encode($payload, JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
$identityToken = $payload64 . '.' . hash_hmac('sha256', $payload64, $cfgSecret);

Dua pemverifikasi, dan kegagalan yang mereka sebabkan

OpsIQ mempunyai dua pengesah token, dan kedua-duanya tidak serupa. Mengetahui perkara ini menjimatkan masa sepetang anda, kerana gejalanya langsung tidak menyerupai puncanya.

Widget admin milik sistem

opsiq/embed/admin_ajax.php membawa pengesah setempat yang menerima bendera disahkan dalam mana-mana kedudukan. Senarai perbualan, sejarah dan belum dibaca semuanya melaluinya, jadi semuanya disahkan dengan baik.

Pemverifikasi bersama yang lebih ketat

opsiqKetermasukkan/ke_identitas_customer_identity_token_verify.php duduk di belakang aliran chat dan core AJAXAPISecara historis, bendera diperlukan di tingkat TOP.

Gejalanya

Sejarah dan perbualan berfungsi. Setiap pusingan sembang menjawab "Log masuk admin diperlukan". Ia dibaca seperti pepijat sesi dan bukan: token tiada bendera aras atas.

Apa yang dilakukan oleh teras semasa

Sekarang ini menerima bendera di tingkat atas atau di dalam subjek, jadi kontraknya seragam. inti yang lebih tua hanya membaca tingkat atas. keluarkan bentuk kanonik dan paketmu bekerja pada setiap rilis.

✅
Ini kini disemak oleh mesin. Mana-mana fail dalam pakej anda yang menjana token identiti diimbas secara statik berdasarkan kontrak, dan muatan yang akan ditolak oleh platform gagal semakan pematuhan dengan fail dan baris yang tepat. Jalankannya sendiri: php tools/verify_identity_contracts.php.

Pelanggan bertandatangan signed dalam chat klien

Dua perkara mesti benar. Teras mesti mengecap pelanggan yang disahkan, dan penyambung anda mesti mengemukakannya.

1
Jembatanmu atau titik akhirmu adalah sebuah token pelanggan

Penandatangan yang sama seperti untuk pentadbir, dengan subjek pelanggan. Baca pelanggan daripada sesi platform itu sendiri. Jika platform anda melog masuk pelanggan pada guard yang berbeza daripada pentadbir, baca guard yang anda mahukan dan jangan sekali-kali beralih merentas subjek — begitulah caranya pelanggan boleh diberikan token pentadbir.

2
Core diverifikasi dan stempel itu

Diatas token yang valid, stempel inti subjek yang telah diverifikasi ke dalam sesi. Penyedia Anda membaca identitas yang terbukti; tidak pernah disahkan.

3
IdentificationProvider Anda menyajikannya

detectCustomer () mengembalikan OpsIQ bentuk. Ia MAHU melaksanakan OpsIQ\Platform\IdentityProviderInterface, atau pendaftar melepasinya secara senyap — perangkap yang sama seperti penyedia konteks.

4
Tindakan customer-scoped Anda menerima pelanggan_id

Dan OpsIQ Dia menguncinya ke identitas yang telah diverifikasi sebelum eksekusi.

IdentificationProvider. php — baca identitas yang terbukti, hadirkan dalam bentuk OpsIQ
use OpsIQ\Platform\IdentityProviderInterface;

final class IdentityProvider implements IdentityProviderInterface
{
    public function slug(): string  { return 'yourplatform_identity'; }
    public function label(): string { return 'Your Platform identity (bridge-signed identity_token)'; }
    public function priority(): int { return 25; }   // ahead of the generic session provider

    public function isAvailable(): bool
    {
        try {
            $s = \OpsIQ\Connectors\ConnectorRegistry::getSettings('yourplatform') ?: [];
            return trim((string)($s['base_url'] ?? '')) !== '';
        } catch (\Throwable $e) { return false; }
    }

    public function detectAdmin(): ?array
    {
        $row = $this->sessionRowFor('_opsiq_admin_identity');
        if (!$row || !$this->isOurs($row)) return null;
        return [
            'id'       => (int)($row['id'] ?? 0),
            'name'     => $this->displayName($row, 'Admin'),
            'email'    => (string)($row['email'] ?? ''),
            'username' => (string)($row['username'] ?? ''),
            'role'     => (string)($row['role'] ?? ''),
            'platform' => 'yourplatform',
            'source'   => 'yourplatform_identity_token',
        ];
    }

    public function detectCustomer(): ?array
    {
        $row = $this->sessionRowFor('_opsiq_customer_identity');
        if (!$row || !$this->isOurs($row)) return null;
        return [
            'id'       => (int)($row['id'] ?? 0),
            'name'     => $this->displayName($row, 'Customer'),
            'email'    => (string)($row['email'] ?? ''),
            'phone'    => (string)($row['phone'] ?? ''),
            'platform' => 'yourplatform',
            'source'   => 'yourplatform_identity_token',
        ];
    }

    /* A session identity stamped by ANOTHER platform's token must not be
     * claimed here. An empty platform is accepted because older bridges did
     * not stamp one, and the site key already scoped the token. */
    private function isOurs(array $row): bool
    {
        $p = strtolower(trim((string)($row['platform'] ?? '')));
        return $p === '' || $p === 'yourplatform' || $p === 'remote';
    }

    private function sessionRowFor(string $key): ?array
    {
        if (session_status() !== PHP_SESSION_ACTIVE) return null;
        $row = $_SESSION[$key] ?? null;
        return (is_array($row) && (int)($row['id'] ?? 0) > 0) ? $row : null;
    }
}

Tindakan customer-scoped: dua kunci, keduanya diperlukan

Model tidak boleh memilih data siapa yang dibacanya.OpsIQ Satu kunci adalah bug jauh dari kebocoran; dua kunci adalah kontrak.

Perancis1 — OpsIQ Menggantikan parameter identitas

Sebelum pelanggan-chat tindakan berjalan, OpsIQ Keislient_id, userid, customer_email, cusen_identifier, client'id, losken_id. Account_id mengambil id numerik yang telah diverifikasi; clien_identifier, cuser_identfier (claient_identification), account_identier mengambilnya sebagai string; email, clicent_e mail, cusent_ email, user_emel mengambil surel terverifikasi. Apa pun model yang diusulkan dibuang.

Perancis 2 — Kau membuat platformmu setiap pertanyaannya

Ambil id yang diberikan kepada anda dan tambahkannya pada klausa WHERE bagi setiap bacaan dan setiap penulisan pada permukaan itu. Jangan sekali-kali mempercayai rujukan dalam permintaan itu sahaja. Pelanggan yang log masuk dan bertanya tentang pesanan orang lain mesti menerima hasil kosong, bukan dilarang.

Namakan parameter anda jadi kunci 1 _dapat menemukannya

Anda menyebutnya customer_id, bukan cust atau ref. A parameter OpsIQ Dia tidak mengenali parameter yang tidak dapat dikunci.

⚠️
Berikan permukaan pelanggan yang telah log masuk operasinya SENDIRI, berasingan daripada operasi pentadbir, walaupun SQL kelihatan serupa. Dua permukaan dengan peraturan berbeza kekal jujur; satu permukaan dengan satu bendera menjadi kebocoran pada hari seseorang mengedit cabang yang salah.

Tiada pendawaian halaman: siasatan yang diisytiharkan oleh penyambung

You can spare the operator all page wiring. Add an admin_identity_probe_url setting (https only) pointing at your identity endpoint. The plain admin-widget loader from Remote Sites, Codes then works with no page attributes at all: the widget discovers the endpoint through the connector, calls it with the site key and widget token, and authenticates each admin individually. A page can still override with a data-identity-endpoint attribute or window.OpsIQAdminIdentityEndpoint.

settings.json — tetapan probe
{
  "key": "admin_identity_probe_url",
  "label": "Admin identity probe URL",
  "type": "text",
  "placeholder": "https://your-site.com/opsiq-yourplatform-bridge.php?op=admin_identity",
  "help": "Set this to your bridge admin_identity endpoint and the plain admin-widget loader works with NO page wiring: the widget probes this URL by itself, the bridge answers with the signed identity of the CURRENTLY logged-in admin, and every admin is matched to their own OpsIQ agent. Leave empty to keep the admin embed off."
}
Kuar itu disebut oleh peramban

Autentikasinya adalah sesi platform.

Ini menjawab bentuk yang tetap

{"success":true,"authenticated":true,"admin":{...},"identity_token":"..."} — and {"success":false,"authenticated":false,"error":"..."} when nobody is signed in.

Tak ada rahasia lama di sumber halaman

Hanya tanda tangan, token kadaluarsa.

Pelaksanaan titik akhir penuh untuk Laravel, WordPress, WHMCS, Symfony dan PHP biasa, ditambah dengan yang sukar diperolehi Laravel spesifikasi dan arahan penyelesaian masalah, adalah pada halaman widget pentadbir. Mereka adalah kod yang sama untuk subjek pelanggan: tukar penjaga yang anda baca dan kekunci subjek yang anda tandatangani.

Penyambung

Penerbitan: Pengeditan folder tidak diterbitkan

Cara paling biasa untuk mensia-siakan satu petang ialah mengedit penyambung di bawah marketplace_connectors/, memasangnya semula, dan mendapati tiada apa yang berubah. Pemasangan tidak membaca folder itu. Ia menarik ZIP bertandatangan daripada katalog marketplace. Penerbitan ialah urutan yang memasukkan perubahan anda ke dalam ZIP itu.

Mengapa suntingan tidak melakukan apa-apa

marketplace_connectors/<slug>/ is the SOURCE

Di sinilah anda bekerja. Tiada apa-apa yang dipasang daripadanya.

Katalog ini memiliki ZIP yang ditandatangani

Instalasi yang ZIP, pastikan tanda tangan dan membongkarnya sampai Anda membangun kembali ZIP.

Pembina Penyambung menerbitkan ke tempat lain

It writes into /connectors/<slug>/ on this install. That is a local connector, not a marketplace release. The two paths do not overlap.

Urutan rilis

1
Mampatkan versi dalam berkas TWO

settings.json dan connector_contract.json. Semakan pematuhan membandingkan kedua-duanya dan gagal jika slug, versi atau set keupayaan tidak sepadan. Tambahkan entri CHANGELOG.md semasa anda di situ — ia adalah fail yang diwajibkan.

2
Synkronisasi-semula snippet jembatan

php tools/sync_connector_bridge_snippets.php --apply — only relevant if your package ships bridge/*.php, and mandatory if it does. Skipping it means the panel hands operators the previous bridge.

3
Tandatangan semula setiap pakej

php tools/resign_all_connectors.php: tandatangan meliputi cincangan fail, jadi SEBARANG suntingan membatalkannya. Tandatangan paling akhir, selepas setiap fail dimuktamadkan.

4
KATA KOKASI KOTAK, kemudian benih

Penyemai menandatangani setiap pakej semasa ia membina ZIP, dan ia berjalan dalam konteks di mana kunci tidak boleh dibaca daripada tetapan — jadi kunci itu mesti datang daripada persekitaran.

5
Redoeploy file jembatan, jika Anda kapal satu

Ini TIDAK menyentuh salinan yang duduk di dalam webroot operator.

Seluruh rilis, dalam rangka
# 2 — hold the panel copy identical to the shipped bridge
php tools/sync_connector_bridge_snippets.php --apply

# 3 — re-sign (do this last, after every file is final)
php tools/resign_all_connectors.php

# 4 — the seeder reads the signing key from the ENVIRONMENT only
export OPSIQ_CONNECTOR_SIGNING_KEY="$(php -r 'require "bootstrap/init.php"; echo opsiq_setting("connector_signing_key","");')"
php saas/scripts/maint/seed_marketplace_free.php --apply --only=<slug>

# verify before and after
php tools/verify_identity_contracts.php
php vendor/bin/phpunit tests/phpunit/Unit/Connectors
⚠️
Mengapa eksport bukan pilihan: penandatangan mencari kekunci dalam OPSIQ_CONNECTOR_SIGNING_KEY pertama dan tetapan connector_signing_key kedua. Pencambah berjalan pada bootstrap SaaS dan tools/sign_connector. php tidak but apa-apa, jadi dalam kedua-dua tetapan pembaca tidak wujud — tanpa variabel persekitaran tiada kunci, dan anda dapat "Tiada kunci tandatangan tersedia" atau setiap pakej dilaporkan sebagai signing_failed. Hanya tools/resign_all_connectors. php but OpsIQ dan boleh cari kekunci sendiri.

Apa sebenarnya kapal

Hanya berkaskan fail penutup tandatangan

ZIP dibina daripada senarai fail penandatangan itu sendiri, jadi fail tersesat yang berada dalam folder pakej anda tidak dihantar. Itu disengajakan: dahulu fail yang tidak ditandatangani pernah ikut sampai kepada pelanggan.

Sambungan Tertutup Kulit

php,json, js,css, md, txt,html, sh, svg, png, jpg, jpeg, gif, webp, ico, yml, yaml — secara rekursif, termasuk bridge/ dan tes/. tanda tangan.jsonungsu sendiri dikecualikan dari hashes dan kemudian ditambahkan ke ZIP sehingga pemasangan dapat memverifikasi.

Apa-apa yang lain dilaporkan sebagai not_packaged

Sebuah berkas yang Anda harapkan untuk kapal yang muncul di sana berarti ada perpanjangan yang salah atau lokasi yang salah — bukan kesuksesan diam - diam.

Mengomendoborkan setiap file tertutup memecahkan segel

Termasuk file Markdown.

Fail yang diperlukan dalam pakej boleh edar

connector.php

Mesti mengembalikan tika ConnectorInterface.

settings.json

Manifes: slug, name, version, manifest_version, compatibility, capabilities, connector_contract_version, settings.

connector_contract.json

Kontrak yang boleh dibaca mesin. Slug, versi dan set keupayaannya mesti sama dengan settings.json.

README. md, DEVELOPER. mD, CHANGELOG. m d

Semua tiga sudah diperiksa untuk keberadaan dan ukuran minimum.

Sebuah berkas yang dinyatakan sebagai kemampuan

Setiap keupayaan menamakan fail yang dijangkanya — ContextProvider.php untuk konteks, IdentityProvider.php untuk identiti, GuestLookupProvider.php untuk guest_lookup, dan seterusnya — melainkan penyambung melaksanakan keupayaan itu secara sebaris.

Tak ada yang terlihat seperti bukti kelayakan

Keselarasan mengumbas ketiga berkas Markdown untuk nilai-nilai berbentuk rahasia dan kunci pribadi, dan gagal dalam sebuah hit.

Periksalah sebelum kau mengirimkannya

Suite pematuhan penuh adalah sama dengan yang dijalankan oleh pemasangan. Ia menyemak manifest terhadap kontrak kanonik, bahawa keupayaan masa jalan dan manifest bersetuju, bahawa setiap keupayaan yang diisytiharkan mempunyai fail dan kaedahnya, kontrak token identiti dalam setiap fail pencetak, padanan coretan jambatan, kebersihan senarai dibenarkan carian tetamu, keunikan tindakan dan keselamatan pengesahan, serta tandatangan pakej.

Jalankan keempatnya sebelum setiap rilis
# conformance for every marketplace package
php tools/test_marketplace_connector_conformance.php

# the identity-token contract, statically, with file:line on failure
php tools/verify_identity_contracts.php

# the connector unit suite
php vendor/bin/phpunit tests/phpunit/Unit/Connectors

# the release gate
php tools/release_gate_connectors.php
💡
Satu kegagalan memang dijangka dan bukan masalah: semakan tandatangan pakej melaporkan amaran semasa anda masih menyunting. Ia hilang sebaik sahaja anda menandatangani semula. Setiap kegagalan lain ialah kegagalan sebenar.
Penyambung

Rujukan pakej dan kitaran hayat penyambung

Ini ialah kontrak peringkat sumber untuk membina penyambung yang boleh ditemui, dikonfigurasi, disahkan, didayakan, dilaksanakan, diuji, ditandatangani dan diedarkan oleh OpsIQ.

Rujukan pengembang
Pakej konektorPakej penyambung mempunyai pelaksanaan penyambung dan manifest yang wajib, dengan tindakan, resipi, pengetahuan, aset dan metadata tandatangan yang pilihan.Pakej konektordeveloperMANIFESTv1KULIH HIDUPDiurus oleh mustahilKERJASkopORANG KERJA HIDUPconnector.phpKelas / kilang penyambungDiperlukansettings.jsonManifest dan skema tetapanDiperlukanactions.jsonDefinisi aksi takrifan tagPilihansignature.jsonData meta tandatangan pakejKeluaran Melepas1DECLAREManifes dan kemampuan2IMPLEMENTSiklus hidup dan pembekal3YALIDATEUji, tandatangani, bungkus
Pakej penyambung mempunyai pelaksanaan penyambung dan manifest yang wajib, dengan tindakan, resipi, pengetahuan, aset dan metadata tandatangan yang pilihan.

Pakej minimum

connectors/example_platform/
├── connector.php          # connector implementation / entry point
├── settings.json          # manifest + configuration schema
├── actions.json           # optional action catalogue
├── README.md              # setup, scopes, webhooks and limits
├── workflow_recipes.json  # optional reusable recipes
├── knowledge.json         # optional provider knowledge
├── profile.json           # optional connector profile
├── src/                   # optional client/provider classes
├── assets/                # optional admin assets
└── signature.json         # signed release metadata

Kontrak manifest

settings.json Nama samaran 1. Pengesah menjangkakan slug, name, version, manifest_version, compatibility, description dan capabilities. Compatibility mengisytiharkan opsiq_min dan opsiq_maxStatus pelepasan adalah salah satu dari produksi, beta, praja atau Templat; kematangan keupayaan menggunakan tahap L1–L6. Pakej lama boleh dinormalkan dengan amaran, tetapi pakej baharu sepatutnya lulus tanpa amaran.

Antara muka penyambung teras

  • Identiti dan penyiapan: slug(), name(), description(), capabilities(), settingsSchema(), testConnection().
  • Siklus Hidup: onEnable() dan onDisable(). Penyahdayaan mestilah tidak memusnahkan; pembersihan data ialah operasi berasingan yang disengajakan.
  • Segerakkan masuk: handleWebhook(), poll(), backfill(). Tinjauan berkala mengendalikan kerja tambahan; isian semula mengimport sejarah dan mesti selamat untuk diulang.
  • Sodium Support: pushReply() di mana platform menerima balasan.
  • Tindakan: registerActions() membekalkan kontrak tindakan yang boleh dilaksanakan.
  • Keselamatan: securityCapabilities(), syncBlockedIp(), removeBlockedIp(), testSecuritySync().

Asas abstrak juga menawarkan pengisian balik bersaiz kecil, senarai pelanggan, penemuan/ciptaan akaun emel, ahli, pengesanan admin/pelanggan, pembekal bil/konteks/identiti, ekstrak respons, cuba semula panggilan HTTP, akses laluan JSON, penarafan kabur dan bantuan paginasi.

Keupayaan dan otentikasi

Nama keupayaan yang disokong termasuk actions, triggers, context, identity, sales, billing, inbound_ticket, outbound_reply, sync_users, sync_departments, security_events, customer_import, security_native_block, promo_audience, promo_feed, email_mailbox, native_api, ai_brain_aware dan ai_tickets. Pembina menyediakan templat pengesahan kunci API, bearer, basic, HMAC, kelayakan klien OAuth 2, kod kebenaran OAuth 2 dan tersuai.

Rejis lifecycle

  1. Penemuan memuatkan pakej dan mengesahkan manifesnya.
  2. Konfigurasi nutfah disimpan per ruang kerja; rahasia dienkripsi.
  3. Ujian sambungan membuktikan keizinan tanpa mengaktifkan penyambung.
  4. Panggilan yang dapat dibenarkan onEnable(), menyelaraskan definisi tindakan dan dapat memulai backfill awal.
  5. Eksekusi polling/webhook/langgan selalu membawa konteks ruang kerja.
  6. Panggilan tidak dilumpuhkan onDisable() dan menghentikan aktiviti tanpa memadam data yang diimport.
  7. Pembersihan adalah operasi eksplisit terpisah.

Aturan ke-betulan cogoin

  • LUCU menggunakan kunci ruang kerja/site dalam setiap baca, tulis, kunci cache, kunci dedullikasi dan pencarian webhook.
  • Buat backfill, webhook ingestion dan tulis aksi idempoten. Rekam ID eksternal/event ID dimanapun platform menyediakan satu.
  • Untuk sistem remote, gunakan mereka. API Tidak pernah menganggap tabel basis data mereka ada di OpsIQ Koneksi.
  • Kemuliaan kembali terstruktur, kesalahan penyimpanan pelanggan. Jangan pernah membuka rahasia, jejak penyedia mentah atau keberadaan ruang kerja lain.
  • Isytiharkan hanya keupayaan yang benar-benar dilaksanakan oleh pakej. Satu actions.json katalog tidak menjadikan sesuatu tindakan boleh digunakan sehingga penyambung dipasang, didayakan, dikonfigurasikan dan sambungannya sah.

Uji dan lepas

Jalankan lint PHP, pengesahan manifest, ujian sambungan, ujian skema tindakan, ujian tandatangan/main semula webhook, ujian pengasingan ruang kerja, ujian ulangan isi semula, ujian penyambung yang dinyahdayakan dan ujian kegagalan/cuba semula. Pakej marketplace kemudiannya perlu ditandatangani dan disahkan, merangkumi dokumentasi persediaan/kebenaran/webhook, dan menyatakan status keluarannya yang sebenar. Jubin penyambung dan manifest ialah isyarat ketersediaan yang berautoriti.

Penyambung

Resipi penyambung

Resipi langkah demi langkah untuk persediaan penyambung yang biasa.

Resepi
Resipi penyambungWasit penyiapan Shopify _sebagai senarai cek: membuat aplikasi, memberikan skop, menempelkan token dan tes, mengaktifkan webhooks, menempatkan perintah uji.Resipi penyambungShopify· Shopify dengan webhooksA_dji dibuat oleh program gubahan pada Shopify adminSkop cengke_lintang skop: baca_orders, read_customers...Path Simpan domain + token, klik UjiAktifkan sinkronisasi Webhook (urutan auto-daftar)Kediaman → muncul pada Sales di 30s_1STEP BY STEPResep Sajian Salinan-Salinan2REAL PLATFORMSShopify · WHMCS · Stripe· GBP3KETAHUIPesanan ujian dipaparkan dalam 30s
Setiap resep adalah daftar cek Anda mengikuti dari atas ke bawah, di sini, Shopify dengan webhooks urutan waktu nyata, diverifikasi oleh perintah tes.

Resepi: Shopify dengan webhooks masa-sebenar

Skenario:
Matlamat: Sambungkan Shopify dengan penyegerakan pesanan automatik dan pematuhan GDPR.
Apa yang perlu dilakukan:

1. Create a custom app in Shopify admin (Settings > Apps > Develop apps). 2. Grant scopes: read_orders, read_customers, read_products, write_customers. 3. Copy the Admin API access token. 4. In OpsIQ Connectors > Shopify, enter store domain and token. 5. Click Test Connection. 6. Enable Webhook sync, OpsIQ registers order/customer webhooks automatically. 7. GDPR webhooks register automatically (data_request, customers/redact, shop/redact). 8. Verify: place a test order, check it appears in OpsIQ Sales within 30 seconds.

Resepsi: WHMCS temuan

Skenario:
Matlamat: Sambungkan WHMCS supaya AI boleh mencari pelanggan, perkhidmatan, tiket dan invois.
Apa yang perlu dilakukan:

1. In WHMCS admin, Setup > Staff Management > Manage API Credentials. Create a key. 2. In OpsIQ Connectors > WHMCS, enter URL, API identifier, and secret. 3. Click Test Connection. 4. Verify: ask the admin AI "Find client [email protected]". WHMCS data should appear.

AYAT T Stripe pembayaran

Skenario:
Tujuan: Melacak pembayaran Stripe dan biarkan AI mencari transaksi.
Apa yang perlu dilakukan:

1. In Stripe Dashboard > Developers > API keys, create a restricted key (read: Customers, Charges, Invoices, Subscriptions). 2. In OpsIQ Connectors > Stripe, enter the restricted key. 3. Test Connection. 4. Add webhook endpoint in Stripe: copy the webhook URL shown on the connector's own settings page. It carries a per-connector token and looks like https://your-domain.com/api/connectors.php?slug=stripe&token=THE_TOKEN A URL without the token is rejected with "Missing slug or token". 5. Select events: charge.succeeded, invoice.paid, customer.subscription.updated. 6. Copy the webhook signing secret to OpsIQ. 7. Verify: make a test payment, check it in OpsIQ Sales.

cipe: Profil Bisnis Google

Skenario:
Tujuan: Sambungkan GBP untuk manajemen tinjauan, posting, dan wawasan.
Apa yang perlu dilakukan:

1. Create a Google Cloud project, enable Business Profile API. 2. Create OAuth 2.0 credentials (Web application). 3. Set redirect URI: copy it from the connector's own settings page. Google and Microsoft connectors share one slug-less callback: https://your-domain.com/connectors.php?oauth=callback Everything else uses https://your-domain.com/connectors.php?slug=<slug>&oauth=callback OAuth redirect URIs must match EXACTLY, and a URI missing oauth=callback is read as a webhook and answered with "Missing slug or token". 4. In OpsIQ, enter Client ID and Client Secret. 5. Click Authorize, sign in, grant access. 6. Select your business location. 7. Verify: reviews, posts, and insights should appear.

Penyambung

Lanjutkan CRM & Site Intelligence

OpsIQ subsistem terbuka untuk pelanjutan. Penyambung boleh menyambungkan keupayaan baru ke dalam CRM atau Kecerdasan Tapak tanpa perubahan kepada OpsIQ core, melalui pendaftaran keupayaan platform (\OpsIQ\Platform\CapabilityRegistry). Nyatakan keupayaan, melaksanakan set kaedah kecilnya, hantar sambungan, OpsIQ mengesannya dan menyambungkannya ke dalam UI, Pelanggan 360 garis masa dan prompt pemasangan.

Opertenden CRM & SI
Kemampuan beronsonPenyambung di sebelah kiri menyalurkan data ke bas keupayaan (CRM, Site Intelligence, Analytics) yang ditemui oleh CapabilityRegistry.Kemampuan beronsonruang kerjaKonektormu\"Menyatakan kemampuan\"CRMKalender · Pengkayaan · esign · pembayaran · kotak suratKecerdasan Lamanleng_engengengketakanAnalitikTe_natis webofifine · laporan & tidak terjawabCapabilityRegistryMenurut analisa, ia & kabel garis waktu UI +1DECLAREKejang-kejang, bukan edit inti2PLUG INCRM · SI · Bas Analisis3AUTO-WIREDUI, garis waktu, prompts
Penyambung mengisytiharkan keupayaan (kalendar, pengayaan, data kedudukan, analitik…) dan OpsIQ menyambungkannya secara automatik ke CRM dan Site Intelligence, tanpa perubahan teras.

Kemampuan untuk mengungkapkan

Oklaratif (setting.json)

* Tambahkan a * <domain>_capabilities tatasusunan, terbaik untuk penyambung tanpa kod/pasaran. Domain: crm, site_intelligence.

Kode dalam kode (connector. php)

Implementasi crmCapabilities() / siCapabilities() Kemuliaan kembali yang sama.

Oceola declare sebuah penyedia kalender CRM (setting.json)

Skenario:
Matlamat: jadikan penyambung kalendar muncul dalam panel Jadualkan mesyuarat CRM.
Apa yang perlu dilakukan:

"crm_capabilities": [ { "type": "calendar", "label": "Calendar (Acme)", "actions": ["createEvent","listEvents","freeBusy"], "requires_auth": true } ]

Ogois Declare a Site Intelligence provider (setting.json)

Skenario:
Tujuan: memberi makan data lokal daftar ke dalam Site Intelligence.
Apa yang perlu dilakukan:

"site_intelligence_capabilities": [ { "type": "local_listing", "actions": ["listLocations","listReviews","getInsights"], "requires_auth": true } ]

Bus kapabilitas dan metode mereka permukaan

Kalendar / kalender kim / krim Kalendar

createEvent($settings,$params) →¡event_id,html_link,meet_link}; listEvents; freeBusy. Didorong oleh \OpsIQ\CRM\CalendarBridge.

Kerikil / pengayaan

enrich($settings,$params) → {success,traits}. Didorong oleh \OpsIQ\CRM\EnrichmentBridge (juga berjalan secara automatik pada syarikat cipta apabila penyedia disambungkan).

krm / esign

sendForSignature($settings,$params) → {success,envelope_id,sign_url}. Didorong oleh \OpsIQ\CRM\EsignBridge.

site_intelligence / local_listing

listLocations, listReviews, getInsightsKapal melalui penghubung Google Business Profile.

site_intelligence / rank_data

keywordRanks($settings,$params) → {success,ranks}. Didorong oleh \OpsIQ\SiteIntelligence\RankDataBridge. Kapal: Penyambung SerpApi.

analitik / web_analitik

report($settings,$params) zumunc (sync/export) + ingest($settings,$events) (import). Digerakkan oleh \OpsIQ\Analytics\WebAnalysisBridge. Penghantaran: Google Analytics (GA4) sambungan. Data _API untuk laporan, Protokol Pengukuran untuk import. Analisis terbuka untuk sambungan seperti CRM + Kecerdasan Laman (domain analytics / analytics_capabilities).

pembayaran luahan /pembayaran_pemprovider

listPayments, customerPayments, createPaymentLink. Dipandu oleh \OpsIQ\Payments\PaymentBridge. Papar pembayaran pelanggan pada garis masa CRM + hantar pautan bayaran dalam perjanjian. Penghantaran: Stripe Penyambung Pembayaran. Domain payments / payments_capabilities.

Kotak surat / e-mel_sync

listMessages + sendMessage. Dipandu oleh \OpsIQ\Peti Mel\MailboxBridge. E-mel pelanggan pada garis masa Pelanggan 360 + hantar e-mel dari perjanjian. Penghantaran: Gmail + sambungan Outlook/Microsoft _365. Domain mailbox / mailbox_capabilities.

Dikongsi OAuth App + SATU arah semula

Semua sambungan Google berkongsi satu aplikasi melalui \OpsIQ\OAuth\SharedGoogleApp. Set google_oauth_client_id/_secret sekali dan Kalendar, Analisis, Profil Perniagaan + Gmail semua berfungsi (melalui-penyambung "(opsyenal)" medan adalah gantian). Mereka juga berkongsi ONE redirect URI, <site>/connectors.php?oauth=callback (tiada slug bagi setiap penyambung), kerana Google tidak menyediakan API untuk menambah URI ubah hala pada aplikasi; OpsIQ memulihkan penyambung daripada OAuth bertandatangan state nonce. Daftarkan URI tunggal itu sekali dan setiap penyambung Google (sedia ada + akan datang) memberi kebenaran tanpa sebarang persediaan Console lagi. Kembalikan SharedGoogleApp::resolve(...)Orang - orang di Yunani redirect_uri Dari Mu oauthParams(); jangan pernah keras-kodkan pautan balik per-slug. Penyambung Microsoft lakukan yang sama melalui \OpsIQ\OAuth\SharedMicrosoftApp (microsoft_oauth_*).

Butang import dikawal mengikut keupayaan

Butang Import And Pelanggan import butang dipaparkan HANYA untuk penyambung yang benar-benar melaksanakannya, dikesan melalui refleksi, jadi tiada bendera yang perlu diisytiharkan. Gantikan backfill() atau backfillChunk() untuk melayakkan butang Import; atasi listCustomers() (kembali {emel, nama_pertama, …} halaman) untuk memperoleh pelanggan Import. Wariskan AbstractConnector tanpa operasi dan butang kekal tersembunyi, jadi UI tidak pernah menawarkan import yang tidak dapat dilakukan oleh penyambung.

AI melintasi bus

Ejen CRM mencadangkan dan menempah mesyuarat berdasarkan isyarat urus niaga (\OpsIQ\CRM\MeetingProposer → CalendarBridge), dan memperkaya akaun baharu secara automatik, iaitu gelung “AI mengendalikan CRM”, yang dilaksanakan merentasi bas penyambung.

Pencarian tiket pelanggan-chat (fetchTicket())

Dua-tier, tidak ada perubahan inti

Apabila pelawat menyebut nombor tiket dalam sembang pelanggan ("apakah status T-000123?"), OpsIQ menyelesaikannya dalam dua peringkat. Aras 1 membaca stor tiket OpsIQ yang dikongsi, setiap penyambung dengan inbound_ticket mencerminkan tiketnya di sana, jadi tiket yang disegerakkan terus berfungsi untuk SEMUA penyambung tanpa sebarang kod khusus bagi setiap penyambung. Aras 2 LUKAN adalah sebuah fallback untuk tiket OLD yang tidak pernah dicerminkan: core calls an PILIHAN fetchTicket() pada setiap penyambung yang didayakan yang melaksanakannya. Ia ialah duck-typed (ditemukan oleh method_exists(), seperti contextProviders()/audienceCatalog()Jadi, tanda tangan ConnectorInterface Tak tersentuh dan penyambung yang tak memerlukannya (email/chat sources yang menciptakan tiket secara natif) hanya mengabaikannya.

⚠️
Kepemilikan adalah wajib dan Anda untuk menegakkan. fetchTicket() menerima identiti pelawat yang TELAH DISAHKAN dalam $ctx (client_id + client_email, identiti disahkan yang sama yang digunakan oleh AI sembang pelanggan). Kenal pasti pelanggan platform daripada identiti itu dan tanya HANYA tiket pelanggan tersebut, kemudian semak semula pemilikan pada rekod terperinci. Kembalikan null Tidak pernah ada data pelanggan lain. null menurunkan dengan baik kepada "tidak dapat mencari tiket itu".
connector.php, kontrak fetchTicket() (rujukan: connectors/whmcs dan connectors/zendesk)
<?php
// connector.php — OPTIONAL universal client-chat ticket resolver (Tier 2).
// Only add it if your platform keeps its OWN ticket store that may hold tickets
// not yet mirrored into OpsIQ. Return the normalised array below, or null.
//
// $ref      = ['mode' => 'id'|'tid', 'value' => string]  (from extract_ticket_ref)
// $ctx      = ['client_id' => int, 'client_email' => string]  (VERIFIED visitor)
// $settings = your connector settings
public function fetchTicket(array $ref, array $ctx, array $settings): ?array
{
    try {
        $email = trim((string)($ctx['client_email'] ?? ''));
        $cid   = (int)($ctx['client_id'] ?? 0);
        if ($cid <= 0 && $email === '') return null;            // no verified identity → refuse

        // 1) Resolve THIS visitor on your platform (by verified email/id).
        // 2) List ONLY their tickets and match $ref against the ticket number/id.
        // 3) Re-confirm ownership on the detail record before returning.
        //    On any miss/mismatch/error → return null (never leak).

        return [
            'tid'        => 'T-000123',     // the customer-facing reference
            'id'         => 123,            // your internal id
            'status'     => 'open',
            'subject'    => '…',
            'department' => 'Billing',     // '' if your platform has none
            'priority'   => 'high',
            'opened_at'  => '2026-06-29 10:00:00',
            'last_reply' => '2026-06-29 12:00:00',
            'message'    => 'opening message text',
            'replies'    => [               // oldest → newest; opening message may be first
                ['who' => 'You',   'date' => '…', 'message' => '…'],
                ['who' => 'Staff', 'date' => '…', 'message' => '…'],
            ],
        ];
    } catch (\Throwable $e) {
        error_log('[yourslug][fetchTicket] ' . $e->getMessage());
        return null;                                             // graceful degrade
    }
}

Bagaimana platform menggunakannya

Discovery

CapabilityRegistry::providers($domain,$type) Daftar penyedia illey dengan status terpasang/dibenarkan/siap (berdasarkan sistem berkas; DB hanya untuk bendera yang diaktifkan).

Pemilihan

CapabilityRegistry::active($domain,$type) mengembalikan pembekal sedia pertama bersama penyambung dan tetapannya yang dimuatkan. Jambatan memanggil ini dan bukannya mengekodkan slug secara tetap.

Beritahu-ke-pasang

Apabila sesuatu ciri memerlukan keupayaan yang belum disambungkan, UI memaparkan gesaan Sambung/Pasang satu klik, bukan sekali-kali kawalan yang mati.

Panduan penuh

Lihat connectors/PLATFORM_CONNECTORS.md (CRM + Risikan Laman Web) dan connectors/CRM_CONNECTORS.md dalam pakej.

Penyambung

Carian layan diri pelanggan & bayaran balik (bina penyambung anda untuk sembang pelanggan)

Pelanggan yang telah log masuk boleh bertanya kepada AI chat pelanggan mengenai akaun mereka sendiri ("saldo saya", "permintaan saya","ada sokongan jawab tiket saya") dan, jika perniagaan membenarkannya, meminta bayaran balik. Semuanya dikuasakan oleh pengisytiharan pesambung anda: tiada perubahan inti OpsIQ, tiada hardcoding platform. AI memanggil pencarian anda sebagai alat asli (ia tidak dapat mencipta satu), identiti dikunci sisi-pelayan ke pelanggan yang disahkan, dan hasil secara automatik dipotong untuk AI.

Memperlihatkan penampilan pelanggan

Dalam anda actions.json, tindakan baca sahaja menjadi boleh dipanggil oleh pelanggan dengan KETIGA-TIGANYA: "scope":"client", "requires_confirmation":false, "is_destructive":falseGunakan "scope":"both" apabila carian yang sama juga perlu boleh dipanggil oleh pasukan anda dalam AI pentadbir. Perbendaharaan kata penuhnya ialah admin, client, both dan system (system tidak sampai kepada mana-mana AI — laluan API dan webhook sahaja). Apa-apa yang lain ditolak terus: pengesahan pakej gagal dan tindakan itu tidak dipasang. Tiada writing Skop Skop — asisten penulisan disajikan admin Tindakan siap.

Aturan identitas (mandatory)

Namakan parameter identitas Anda dari set standar. Terkunci ke id numerik yang telah diverifikasi: client_id, clientid, customer_id, user_id, userid, account_idTerkunci ke id yang sebagai string: client_identifier, customer_identifier, account_identifierTerkunci ke email yang sudah diverifikasi: email, client_email, customer_email, user_email. OpsIQ mengunci dan mengisinya secara automatik daripada pelanggan log masuk yang disahkan oleh platform; AI tidak sekali-kali melihat atau memilih identiti. Nama bukan standard akan gagal secara tertutup (ditolak, tidak sekali-kali dibocorkan).

Perkara yang mesti kekal untuk pentadbir sahaja

Apa-apa yang tidak diskop oleh identiti itu: fetch-by-bare-id (order_id/ticket_id Itu adalah kebocoran silang pada platform apapun. "scope":"admin".

Pembentukan hasil (kunci yang membawa jawapan)

Hasil pencarian lentural dipangkas secara struktural sebelum mencapai AI: kunci berbentuk rahasia dijatuhkan, string panjang dan daftar ditutup, medan kosong dipotong, dan peta datar lebih lebar dari tutup kunci menyimpannya kunci yang mengandungi jawapan dahulu, wang (credit, balance, amount, total, due, paid), identitas (email, *name, phone, company), state (status, active, expir*, renew*), tarikh, medan pelan/produk/domain/perkhidmatan/langganan/pesanan/invois/tiket, mata wang, kiraan dan stats/summary/totals, sebelum baki tempat diberikan kepada kunci lain bermula daripada nilai terkecil. Panduan praktikal: namakan medan anda dengan perbendaharaan kata standard itu dan kembalikan medan yang menjawab soalan pelanggan dan bukannya lambakan platform mentah 100 kunci; medan yang dinamakan di luar perbendaharaan kata itu bersaing untuk baki tempat dan boleh dipangkas daripada muatan yang sangat lebar.

Bayaran balik · apa yang disediakan oleh penyambung anda

Dua operasi mentah, tanpa dasar: (1) bacaan pengesahan pembayaran yang boleh ditapis mengikut identiti DAN rujukan transaksi (API anda mesti menggabungkan penapis dengan DAN), contohnya. whmcs_get_transactions); (2) suatu tindakan pengembalian dana yang dilaksanakan (scope:"admin", requires_confirmation:true, is_destructive:true, tidak pernah pelanggan-diekspos), mis. whmcs_refund_order. Perniagaan memilih kedua-dua kunci dalam Tetapan → Client Chat; OpsIQ mengesahkan semula pembayaran di bahagian pelayan, menggunakan kotak dasar perniagaan (had jumlah, tempoh umur, had bulanan), mengeluarkan dalam lingkungan kotak itu, dan memfailkan tiket semakan untuk semua yang lain.

Pembuat kode-No

Editor tindakan Pembina Penyambung mempunyai kawalan yang sama: tetapkan "Siapa boleh guna" kepada pelanggan yang telah log masuk, tinggalkan kedua-dua kotak semak tulis dimatikan, dan gunakan nama parameter identiti piawai.

Perlaksanaan referensi bereformasi

Entri "Perkhidmatan Sendiri Pelanggan" dalam connectors/whmcs/actions.json, woocommerce/actions.json, oscommerce/actions.jsonKontrak penuh di connectors/README.md §8.1–8.2 Dan ConnectorInterface::registerActions().

Penyambung

Carian tetamu — benarkan pelawat menjejaki tempahan, penghantaran atau pesanan TANPA log masuk (guest_lookup)

Hotel, kurier dan banyak platform perdagangan melayan pelanggan yang memegang rujukan tetapi tiada log masuk: tetamu dengan pengesahan tempahan, penerima dengan nombor penjejakan. guest_lookup keupayaan (Connector Contract, mod: generated) membolehkan penyambung ANDA melayani pelawat tersebut dalam AI sembang klien — tiada perubahan teras OpsIQ, tiada pengekodan keras platform. Penyambung anda mengisytiharkan APA yang membuktikan kelayakan dan MEDAN MANA yang kelihatan; OpsIQ menguatkuasakan suis, pendikitan dan penolakan seragam.

Model kepercayaan

Bukti referensi +, tidak pernah identitas

Pelawat memberikan rujukan rekod (dipadankan dengan regex yang anda isytiharkan) serta bukti yang anda pilih — biasanya e-mel pada rekod itu. Tindakan ambil anda mendapatkan rekod itu DI PELAYAN berdasarkan rujukan; penyedia yang dijana oleh OpsIQ membandingkan bukti dengan rekod YANG DIAMBIL. Input pelawat tidak pernah dipercayai, dan tiada identiti yang disahkan dicipta: padanan itu hanya melayakkan pelawat kepada medan yang dibenarkan bagi rekod tersebut, tidak lebih.

Penyandang seragam (tidak ada oracle enumerasi)

Tidak dijumpai dan bukti tidak sepadan menghasilkan SATU jawapan yang sama. AI diarahkan secara jelas supaya tidak sekali-kali mengesahkan sama ada sesuatu rujukan wujud dan tidak sekali-kali mereka butiran rekod. Cubaan dihadkan kadarnya bagi setiap perbualan + IP oleh teras sebelum penyambung anda dirujuk.

Ott-in ganda, keduanya default OFF

Tiada apa yang melayani tetamu sehingga perniagaan membenarkan SUATU atau kedua-dua suis: kawalan ruangkerja luas dalam Tetapan → Keselamatan → "Pelihatan rekod tetamu dalam sembang klien" (dihalang kebenaran DAN selalu disahkan katalaluan, walaupun bila langkah naik opsyenal dipadam), dan sambungan anda sendiri guest_lookup_enabled togol tetapan. Memasang atau mendayakan penyambung sahaja tidak pernah membuka permukaan tetamu.

Permukaan tamu yang berdedikasi

Penyedia yang dijana mendaftar pada guest Permukaan konteks Ukraina — secara struktural terpisah dari admin dan customer. Penyedia konteks sedia ada tidak pernah dirujuk untuk pelawat tanpa nama, dan penyedia tetamu tidak pernah dirujuk untuk pelawat yang telah log masuk. ctx yang diterimanya membawa mesej sembang, id bebenang dan e-mel pra-sembang yang didakwa (belum disahkan) oleh pelawat sebagai calon bukti — tiada medan identiti.

(Yang mengatakan) atau yang dikatakan (di dalam Kitab yang di dalam kitab) yakni Alquran.

1
Takrifkan aksi pengambilan

Pada langkah Aksi, tambahkan tindakan baca-saja yang mengembalikan satu catatan dengan referensinya (misalnya. GET /bookings/{booking_number}) dan memetakan bidang respon dengan alias: status, kedatangan, keberangkatan, kamar_tipe, customer_email...

2
Tik-Tik-Cik-Gok-Gincang--

Pada langkah kemampuan, memungkinkan guest_lookupPanel berdedikasi muncul: pilih aksi pengambilan, namakan parameter referensi, beri pola referensi (tubuh regex seperti \bBK-[0-9]{4,10}\b), namakan rekod ("booking"), dan pilih bukti — emel pada rekod (dinasihatkan) atau tiada (rujukan sahaja, untuk status-hanya penjejak kurier).

3
Memungkinkan untuk menyeleksi bidang yang tampak

Tandakan dengan tepat medan yang boleh dilihat oleh tetamu. Semua yang lain DIGUGURKAN — tidak sekali-kali disunting. Builder menolak medan berbentuk PII (e-mel, telefon, alamat, pembayaran…) dalam senarai yang dibenarkan, dan suite pematuhan get keluaran menyemak semula peraturan yang sama sebelum diterbitkan, jadi spesifikasi yang disunting secara manual tidak dapat menyelitkannya. Ambil perhatian bahawa pengesahan semasa pemasangan hanya meliputi manifes dan tandatangan, jadi jalankan suite pematuhan itu sendiri sebelum anda menghantarnya. Medan bukti itu sendiri tidak sekali-kali boleh dipaparkan.

4
Terbitkan dan dayakan

Ubi Pembangun dipancarkan GuestLookupProvider.php — pelaksanaan kukuh yang kanonik, sama untuk setiap pakej yang dijana — dan menambah guest_lookup_enabled togol pada tetapan penyambung anda. Perniagaan menghidupkan kedua-dua suis itu dan AI sembang mula menawarkan carian apabila pelawat bertanya tentang jenis rekod anda.

Peraturan kontrak

Hanya ruas berbentuk Status

Fikirkan "apa yang akan dicetak kurier pada halaman penjejak awam": status, tarikh, bilik atau kategori perkhidmatan, kiraan. Nama-nama, perincian hubungan, alamat jalan, data pembayaran dan nota teks bebas tidak ada tempat dalam sembang anonim — Pembina dan keserasian menolaknya.

AI menjawab HANYA dari blok

Penyedia yang dihasilkan itu mengakhiri keluarannya dengan instruksi untuk hanya menjawab dari ladang yang terdaftar dan menawarkan tiket untuk hal lain.

Pengikut terus bekerja

Penyedia memperoleh semula rujukan daripada mesej terkini pelawat dalam perbualan yang sama, jadi "dan bila waktu daftar keluar?" berfungsi tanpa menaip semula rujukan. Rujukan yang dipadankan dan e-mel bukti diingati pada urutan sembang sebagai CALON, jadi soalan susulan tidak bertanya semula. Ia hanya calon: setiap giliran masih mengambil semula rekod di pelayan dan membandingkan semula bukti sebelum mengeluarkan walau satu medan.

Pakej yang ditulis secara manual

Pakej pasaran boleh membekalkan sendiri GuestLookupProvider.php implementing ContextProviderInterface dengan surfaces(): ['guest']Ikuti kontrak yang dihasilkan itu tepat -- mengambil referensi, mempromosi server sampingan, menolak seragam, hanya output yang diizinkan daftar - dan menyatakan guest_lookup in capabilitiesKonformance memverifikasi permukaan tamu dan memindai daftar ijin untuk PII.

💡
Carian tetamu ialah konteks baca sahaja untuk AI sembang. Ia tidak pernah melaksanakan tindakan, tidak pernah mencipta identiti, dan tidak pernah membuka laluan tindakan layan diri pelanggan di atas — laluan itu masih memerlukan pelanggan log masuk yang disahkan oleh platform.
Penyambung

Pemarsuan penonton promosi (promo_audiensi)

Biarkan Promotion Studio menyasarkan kempen mengikut keadaan pelanggan dan pengebilan secara LANGSUNG daripada PLATFORM ANDA: "mempunyai invois belum dibayar", "pesanan belum selesai", "langganan dibatalkan". Mana-mana penyambung (pra-pasang, pasaran, atau yang anda bina sendiri) menyertai dengan melaksanakan dua kaedah kecil. Tiada perubahan teras OpsIQ, tiada pengekodan keras platform: penyambung anda muncul sebagai platform dalam tab penyasaran studio dengan senarai juntai fakta sendiri, dan beberapa penyambung boleh diaktifkan serentak.

Penonton Promo yang hadir
Pembidik penonton promosiIdentitas yang sudah dikonfirmasi disahkan ke penonton konektorFlags panggilan menghasilkan fakta yang mendorong aturan target, dengan catatan yang gagal ditutup.Pembidik penonton promosiruang kerjaDidaftar-dalamIdentiti DisahkanPenonton audiensFlags()KonektormuFAKTA SAKTAunpaid_invoices = 2PERATURANunpaid_invoices ≥ 1Kempen dipaparkanGagal tertutup: klien tidak dikenali atau sebarang ralat → kempen kekal tersembunyi.1TWO METHODSPenonton yang hadirCatalog + Flags2LIVE STATEBelum dibayar, belum selesai, status3FAIL-SAFETidak pernah menunjukkan kepada orang yang salah
Penyambung anda menjawab fakta pengebilan secara langsung untuk pelawat yang log masuk; studio menyasarkan berdasarkannya, dan gagal secara tertutup supaya tawaran pengebilan tidak sekali-kali sampai kepada orang yang salah.

Bagaimana cara kerjanya

1
Bolak fakta Anda

Laksanakan audienceCatalog() pada kelas penyambung anda. Ia memulangkan label dan senarai kunci yang boleh dijawab oleh platform anda. Setiap kunci muncul dalam senarai juntai studio di bawah nama platform anda.

2
Jawapan untuk satu pelanggan

Implement audienceFlags(array $identity). OpsIQ calls it at delivery time with the VERIFIED logged-in visitor identity (from the widget identity token, the same identity the client chat AI uses). Return a flat key => value map.

3
Selesai

Dayakan penyambung. Tab Penyasaran Promotion Studio akan mendapat bahagian "Pelanggan & pengebilan" yang menyenaraikan platform anda; pentadbir membina peraturan seperti "unpaid_invoices >= 1"; setiap fakta juga menjadi pemboleh ubah pemperibadian seperti {unpaid_invoices}.

penghubung. php, kontrak yang sangat luar biasa
public function audienceCatalog(): array
{
    return ['label' => 'My Billing Platform', 'keys' => [
        ['key' => 'unpaid_invoices', 'label' => 'Unpaid invoices (count)', 'type' => 'number'],
        ['key' => 'pending_orders',  'label' => 'Pending orders (count)',  'type' => 'number'],
        ['key' => 'client_status',   'label' => 'Client status',           'type' => 'text'],
    ]];
}

public function audienceFlags(array $identity): array
{
    // $identity = verified token payload: ['email' => ..., 'id' => ..., 'name' => ...]
    $email = strtolower(trim((string)($identity['email'] ?? '')));
    if ($email === '') return [];
    $client = $this->api('GetClient', ['email' => $email]); // your platform call
    if (!$client) return []; // unknown client -> return [] (fails CLOSED)
    return [
        'unpaid_invoices' => (int)$client['unpaid_count'],
        'pending_orders'  => (int)$client['pending_orders'],
        'client_status'   => (string)$client['status'],
    ];
}

Peraturan kontrak

Anjurkan kemampuan

Tambah 'promo_audience' Ke penghubungmu capabilities() array sehingga platform dan marketplace mencantumkannya sebagai audien-capable (pengemuan juga bekerja dari kehadiran metode, tetapi menyatakan itu adalah sinyal bersih). Pra-dipasang connectors/whmcs penyambung ialah pelaksanaan rujukan yang lengkap.

Nama kunci origami

snake_case huruf kecil, 2-60 aksara, sepadan dengan ^[a-z0-9_]+$. Jenis: number, text, bool. Kunci tidak diisytiharkan yang dikembalikan oleh audienceFlags() masih boleh digunakan dalam peraturan, tetapi isytiharkan semua yang anda sokong supaya pentadbir dapat melihatnya.

Identiti telah disahkan

The $identity array comes from the signed widget identity token issued by the customer site at login, never from client-supplied fields. If your platform cannot resolve the identity, return an empty array.

Kegagalan · selalu ditutup

Pada SEBARANG ralat (API tidak berfungsi, pelanggan tidak ditemui, tamat masa) kembalikan []. Peraturan yang faktanya tiada menyebabkan kempen TIDAK dipaparkan. Tetingkap timbul yang disasarkan mengikut pengebilan tidak boleh sekali-kali sampai kepada orang yang salah; OpsIQ juga menguatkuasakan perkara ini dalam pemadan peraturan.

Prestasi

audienceFlags() dipanggil paling banyak sekali bagi setiap penyambung bagi setiap paparan halaman, dan HANYA apabila kempen yang diterbitkan benar-benar menggunakan peraturan platform anda. Pelawat tanpa nama tidak menggunakan sebarang panggilan. Hadkan kepada 1-2 panggilan API; OpsIQ menyimpan hasil dalam memori sepanjang permintaan.

Pengendali disediakan secara percuma

Admin - admin menggabungkan kunci Anda dengan =, !=, >, >=, <, <=, berisi, ditetapkan, kosong, Anda hanya memberikan nilai.

Token Personalisasi

Setiap fakta juga berfungsi sebagai pemboleh ubah dalam salinan kempen: {unpaid_invoices}, {client_status}, serta yang terbina dalam {first_name} dan {client_email}. Nilai dibersihkan sebelum dipaparkan.

Tidak ada kode pasar penyambung

Fakta automatik

Penyambung marketplace deklaratif (JSON sahaja) mendapat promo_audience secara PERCUMA: jika penyambung anda mengisytiharkan sumber customers/users, invoices, orders atau subscriptions, OpsIQ memperoleh customer_status, unpaid_invoices, amount_due, pending_orders, active_subscriptions dan subscription_status daripada tindakan carian sedia ada anda. Tiada kod langsung.

Katalog langganan (setting.json)

Tambah objek audience_capabilities · {"label": "Platform Saya", "keys": [{"key":"open_carts", "label", "Open carts", "type": ""}]}, untuk kawal tepat fakta (dan label) yang muncul dalam dropdown studio.

Keberanian Anda

1
Dayakan penyambung

Penyambung > penyambung anda > Dayakan. Kemudian buka tab Sasaran mana-mana kempen. Platform anda mesti muncul di bawah "Klien & pengebilan (penyambung)".

2
Membina aturan

Tambah: Platform anda · kekunci · >= · 1 dan tetapkan "Klien yang log masuk sahaja". Simpan dan terbit.

3
Tentukan kedua arah

Log masuk ke platform anda sebagai klien yang sepadan dengan peraturan (tetingkap timbul mesti dipaparkan) dan sebagai klien yang tidak sepadan (tetingkap timbul mesti kekal tersembunyi). Pelawat yang tidak log masuk tidak sekali-kali sepadan dengan peraturan untuk pengguna yang log masuk.

Cetuskan kempen daripada kod anda sendiri (pencetus tersuai)

Mengapa

Selain pencetus terbina dalam (lengah, tatal, niat keluar, melahu, klik, halaman dilihat, aktiviti sembang / tiket), anda boleh mencetuskan kempen dari mana-mana sahaja dalam laman anda atau bahagian hadapan penyambung, selepas langkah pembayaran yang berjaya, apabila troli ditinggalkan, apabila SPA anda menukar laluan, dan sebagainya.

Bagaimana

Tetapkan pencetus kempen kepada Tersuai Xahford dengan nama peristiwa (misalnya. checkout_failed), kemudian sebut hook global dari halaman Anda:

JS bahagian hadapan laman web / penyambung anda
// Any campaign whose Custom trigger event matches will be evaluated
// (it still respects targeting, frequency caps and audience rules).
window.OpsIQPromo && window.OpsIQPromo.fire('checkout_failed');
💡
Mencetuskan peristiwa tidak sekali-kali memintas penyasaran atau kekerapan. Ia hanya melepaskan “bila”. Kempen masih perlu melepasi setiap peraturan (geo, khalayak, persetujuan, had) sebelum ia dipaparkan.
✅
Panduan lengkap cara-cara-memakai (desain, blok, analitik, A/B, penerbitan) tinggal di Pusat Bantuan In-app dibawah Engage → Promotion Studio. Keupayaan di sini ditemui secara automatik daripada mana-mana penyambung yang DIDAYAKAN dalam connectors/ atau marketplace_connectors/. Tiada apa-apa yang perlu didaftarkan. Sertakan dua kaedah itu, dan studio akan melakukan selebihnya.
Penyambung

Keupayaan sambungan survei (Kontrak 2.2)

Butang survey Kemampuan keandalan penyakit memungkinkan setiap pasokan platform memverifikasi adaptor identitas pelanggan, fakta audiens, variabel aman dan kandidat penerima untuk Survey Studio. promo_audience dan tidak memberikan penyambung pemilikan ke atas tinjauan, respons, analitik atau penghantaran e-mel.

💡
Status pelaksanaan. Pengarangan telah lengkap dan boleh digunakan hari ini: Connector Contract 2.2, SurveyConnectorInterface, panel pembangun yang berdedikasi, dihasilkan SurveyProvider.php, metadata pakej dan pengasingan pematuhan semuanya disertakan. Penggunaan belum lagi disambungkan: SurveyConnectorRegistry telah dilaksanakan dan diuji, tetapi belum ada masa jalan Tinjauan yang memanggilnya, jadi kesihatan penyedia tidak dipaparkan dalam UI pentadbir dan tiada pakej penyambung yang diterbitkan mengisytiharkan keupayaan ini. Pengeluaran token bertandatangan Survey Identity Gateway, penyasaran dan integrasi pemboleh ubah, perwujudan CRM Outreach serta pemetaan penyedia pertama yang dihantar kekal sebagai fasa berasingan. Bina berdasarkan kontrak ini sekarang; jangkakan masa jalan mula menggunakannya dalam keluaran akan datang.

Tanggung jawab penyedia senilai -

Katalog dan fakta yang menarik

Nyatakan fakta kanonikal yang ditip dan selesaikan nilai hanya untuk subjek terikat ruangkerja, disahkan-pelayan. Fakta tipikal termasuk order_count, last_order_status, cancelled_order _count, customer_created_at, active_subscription_count dan open_ticket_count.

Katalog dan nilai variabel Daftarbel

Isytiharkan pemboleh ubah pelanggan, akaun, pesanan, langganan dan sokongan dengan jenis, kepekaan dan konteks yang dibenarkan. Teks tinjauan memerlukan nilai sandaran dan pelepasan konteks output.

Pengirim pesan

Secara pilihan, senaraikan calon untuk CRM Outreach dengan ID luaran yang stabil, halaman yang terbatas, kursor yang deterministik dan metadata berkaitan persetujuan. Survey membekukan khalayak yang dipilih sebelum sebarang penghantaran.

Identitas

Terima identiti hanya daripada Survey Identity Gateway selepas pengesahan tandatangan token, tempoh tamat, tujuan, penyambung dan ruang kerja. E-mel, ID, tag atau fakta pengebilan yang diberikan oleh pelayar tidak sekali-kali berwibawa.

Kesehatan waktu kerja

SurveyConnectorRegistry direka untuk melaporkan pembekal yang serasi, disekat dan tidak tersedia tanpa mendedahkan tetapan, laluan, identiti mentah atau mesej pengecualian, dan pembekal yang disekat tidak sekali-kali boleh dipanggil. Permukaan pelaporan belum lagi didedahkan dalam UI pentadbir: pada masa ini pembekal yang disekat hanya tidak aktif.

Aturan gagal yang telah dilampirkan

Kunci yang tidak diisytiharkan, jenis yang salah, nilai terlalu besar, ketidakpadanan subjek, tamat masa penyambung dan identiti yang tidak diketahui akan ditolak. Peraturan penyasaran yang memerlukan fakta yang tidak tersedia tidak akan sepadan. Halaman penerima dihadkan dan diaudit. Nilai sensitif tidak pernah dipaparkan dalam pratonton awam atau log.

Gerbang pembebasan Builder

Kontrak 2.2 Kapal-kapal kemampuan masuk registry, antarmuka, panel pemetaan Survey, dihasilkan SurveyProvider.php, versi keupayaan, rujukan README/pembangun dan lekapan pematuhan. Profil commerce, helpdesk, jambatan SaaS dan PHP setempat menyertakannya; penyambung API Standard memilih untuk menyertainya. Get statik menolak pembekal Tinjauan yang memanggil ruang nama, jadual atau keupayaan Promosi.

💡
Salin daripada Promosi hanya untuk import: Pembina boleh menterjemah pemetaan Promosi yang serasi sekali sahaja, menyimpan salinan lengkap milik Tinjauan dan merekodkan asal usulnya. Memadam atau mengubah pemetaan Promosi tidak boleh mengubah tingkah laku Tinjauan.
Penyambung

Keupayaan maklum balas balasan (Contract 2.2)

Butang reply_feedback keupayaan ini mencerminkan penilaian setiap balasan milik platform ke dalam OpsIQ. Bintang yang diberikan pelanggan kepada balasan kakitangan di dalam kawasan pelanggan WHMCS akan muncul pada balasan YANG SAMA dalam utas admin OpsIQ, dengan cip yang sama, kredit ejen, entri halaman Maklum Balas dan pengiraan Pasukan & Prestasi seperti penilaian yang diberikan pada tiket portal OpsIQ. Satu storan, satu cip, satu saluran paip; penyambung hanya menterjemah.

Satu-satunya jalan menulis

Terdapat tepat dua laluan masuk dan satu kebenaran. Tiket portal OpsIQ ditulis secara asli. Tiket platform mengalir melalui penyambung, dan teras merekodkan setiap peristiwa melalui ReplyFeedback::recordMirrored(): lajur yang sama, peraturan staf sahaja, semantik satu penilaian bagi setiap balasan dengan yang terkini diguna pakai, cop ruang kerja dan pengindeksan Suara Pelanggan yang digunakan oleh penulisan portal. Penyambung tidak pernah menulis baris maklum balas sendiri.

Konforming (empat berkas, kemudian re-sign)

1
connector_contract.json

Add the capability. reply_feedback entry: versi 1.0_, ReplyFeedbackConnectorInterface, metode replyFeedbackCatalog dan pullReply Feedback, menyiratkan inbound_ticet.

2
settings.json

Tambah reply_feedback ke senarai keupayaan. Inilah yang dibaca oleh penemuan penyambung.

3
spec.json

Declare reply_feedback. modes (poll dan/atau webhook) dan skala rating platform. Inilah yang dibaca oleh gerbang konformance.

4
Kelas waktu kerja Jerman

Laksanakan antara muka itu, senaraikan reply_feedback dalam capabilities(), kemudian tandatangani semula pakej itu.

Tanggung jawab penyedia senilai -

Katalog

Isytiharkan mod, skala penilaian platform itu sendiri (teras menormalkannya kepada skala asli 1-5), dan sebarang token reaksi. Katalog mesti selaras dengan spec.json.

Terjemahan Fell

Dia tidak pernah menulis.

Kekurangdataan

quest_id adalah stabil per STATE feedback, sehingga acara yang diputar ulang merupakan no-op dan overwrite rating yang berubah (terakhir menang, seperti portal).

Kursor disiplin

Halaman zombi terikat dan deterministik; kursor yang tidak maju mengakhiri run.

Keselamatan Probe

Dengan tanpa konfigurasi, kembalikan halaman kosong yang lengkap daripada melempar. Pelari conformance probe dengan argumen kosong.

Resolusi gagal-ditutup

Intinya menyelesaikan setiap peristiwa kepada jawapan setempat oleh penanda cermin yang cermin tiket sudah stamp (<slug>:<ticket>:reply:<reply>). Peristiwa yang tidak dapat diselesaikan akan digugurkan, tidak sekali-kali diteka; maklum balas hanya dilampirkan pada balasan kakitangan; dan kredit ejen sentiasa datang daripada pengarang sedia ada balasan tersebut. Penulisan penilaian tidak pernah mengubah kepengarangan. Inilah sebabnya keupayaan ini memerlukan inbound_ticket atau ticket_mirror.

Contoh kegojokan: WHMCS_

WHMCS _simpan client-rea per-reply peringkat bintang dalam tblticketreplies.ratingItu. WHMCS penyambung menyatakan mode jajak pendapat dengan 1-5 skala, kapal a ticket_reply_ratings Perintah estafet dalam file jembatan, dan menerjemahkan setiap baris ke dalam sebuah peristiwa yang id cocok whmcs:<ticket>:reply:<reply> penanda yang sudah dicop oleh cermin tiketnya. Selepas menaik taraf penyambung, salin semula fail jambatan ke pelayan WHMCS supaya arahan baharu itu wujud di sana.

💡
Kontrak pemaju penuh dengan antaramuka, bentuk peristiwa, peraturan normalisasi dan senarai semak keserasian: doc/contracts/TICKET_REPLY_FEEDBACK_CAPABILITY.md dalam pakej OpsIQ. Penerimaan: nilaikan balasan di dalam platform, tunggu semakan berkala setiap jam, dan balasan yang sama dalam OpsIQ menunjukkan cip itu, halaman Maklum Balas menyenaraikannya, dan acara yang dimainkan semula tidak mengubah apa-apa.
Penyambung

Kemampuan gabungkan tiket (Kontrak 2.4)

Butang ticket_merge Kemampuan keandalan kecacatan membuat penggabungan tiket di OpsIQ sebuah penggabungan pada setiap platform tiket yang terhubung. Tiket peron yang disimpan menerima pesan tiket yang digabung, dimulai dengan setiap pesan pembukaan tiket yang digabungkan, alih-alih tiket platform yang digabung hanya ditutup.

Mengapa ada

Penggabungan dalam OpsIQ memindahkan setiap mesej tiket yang digabungkan ke dalam tiket yang dikekalkan dan mengalih keluar tiket yang digabungkan. Sebelum Kontrak 2.4, penyambung hanya menerima ticket.deleted bagi setiap tiket yang digabungkan. WHMCS menutup tiket itu dan tiket WHMCS yang dikekalkan tidak pernah menerima apa yang mula-mula ditulis oleh pelanggan: subjek menunjukkan [MERGED] dan kandungannya hilang.

Apa yang dihantar oleh teras

ticket. merged (sekali per bergabung)

ticket_id, ticket_number, subject dan external_ref bagi tiket yang DIKEKALKAN; native_table (opsiq_tickets); site_key; sources, iaitu tiket yang digabungkan, yang paling lama dahulu, setiap satu dengan ticket_id, ticket_number, subject, external_ref, client_name, client_email, created_at dan messages [{reply_id, author_type, author_name, created_at, body}]; merged_by; merged_at. Mesej ialah perbualan yang boleh dilihat oleh pelanggan, ditangkap sebelum pemindahan. Nota dalaman tidak sekali-kali disertakan.

ticket.deleted (bagi setiap tiket yang digabungkan)

Masih dicetuskan, kini dengan merged_into {ticket_id, ticket_number, external_ref}. Teras tidak menghantarnya kepada penyambung yang mengisytiharkan ticket_merge; pengguna lain boleh membezakan penggabungan daripada pemadaman.

Biok web luar biasa

ticket.merged ialah peristiwa yang boleh dihantar. Titik akhir webhook SaaS yang melanggan ticket.deleted juga menerima ticket.merged, supaya integrasi yang dibina sebelum 2.4 dapat mengetahui tentang penggabungan itu.

Apa yang dilakukan oleh penyambung anda

Nyatakan

List ticket_merge in capabilities() and settings.json, and implement TicketMergeConnectorInterface::mergeTickets(array $merge, array $settings). Required on Contract 2.4 for any package that declares ticket_mirror or handles ticket.deleted; conformance fails it otherwise.

Gabungkan secara asli apabila boleh

When the kept ticket and a merged ticket both have a copy on your platform (TicketMergeContract::twins() resolves them from external_ref), call the platform's own merge.

Jika tidak, tambahkan catatan pribadi

A merged ticket with no copy on your platform: add TicketMergeContract::transcript() to the kept platform ticket as a PRIVATE note. Never a public reply, which would email the customer their own old messages.

\"Melaporkan apa yang tidak bergabung\"

Kembalikan {ok, mode, merged, noted, unmerged, error}. Setiap salinan gabungan yang tidak dapat anda gabungkan dimasukkan ke dalam unmerged, dan teras menggunakan pengendalian padam biasa anda (tutup, atau padam dengan mirror_deletes) tepat pada salinan tersebut. Kembalikan mode unsupported hanya apabila platform tiada penggabungan dan tiada nota peribadi. Kegagalan pengangkutan atau pengesahan ialah ok=false bersama sebabnya; ia direkodkan dalam Diagnostik.

Keangkuhanmu

Tetapan cermin yang sama yang mengawal pencerminan tiket anda yang lain turut mengawal penggabungan.

Cantuman Cantumkan yang dimulai pada platform Anda

Resolve the platform ids and call TicketMergeContract::applyInbound(['<prefix>'], $keptId, $mergedIds). OpsIQ merges its copies with _origin=mirror, so nothing is pushed back to you.

Perlaksanaan perkapalan

WHMCS

CangeTicket (ticketid = tiket disimpan, gabungketketikids = tiket tergabung) ketika keduanya berada di WHMCSAddTicketNote dengan transkrip yang lain OpsIQ Keluarkan salinan ketika staf bergabung dalam WHMCS.

Zendesk

POST /api/v2/tickets/{id}/merge.json dengan ulasan gabungan peribadi (sehingga lima tiket bagi setiap panggilan), serta transkrip sebagai ulasan peribadi pada tiket yang dikekalkan, kerana Zendesk menutup tiket yang digabungkan tanpa memindahkan ulasannya.

Jembatan OpsIQ SaaS

POST /v1/tickets/{id}/merge dengan source_ids, yang memindahkan jawapan portal dan lampiran; jawapan dalaman membawa transkripsi untuk tiket yang tidak pernah pada portal. A /manage merge menggabungkan OpsIQ salinan.

Pembina Penyambung

ticket_merge diterbitkan, tidak pernah ditanda: pakej yang dijana mengisytiharkannya apabila ia memautkan tiket platform yang diciptanya (pelanggan ticket.created dengan link ticket dihidupkan), mengendalikan ticket.deleted, atau mengisytiharkan ticket_mirror. Pada langkah Tiket, di bawah Cantuman Cantum Baru, pilih tindakan gabung platform (petakan merge.target_remote_id, dan merge.source_remote_ids atau merge.source_remote_id) dan tindakan nota peribadi (petakan note.remote_id dan note.body). mergeTickets() yang dijana menggunakan kedua-duanya. Tanpa kedua-duanya, Builder memberi amaran bahawa mesej tiket yang digabungkan tidak akan sampai ke platform.

💡
Kontrak penuh: doc/contracts/CONNECTOR_CONTRACT.md, section Ticket gabungkan dua tiket dalam OpsIQ yang keduanya ada di platform, kemudian buka tiket yang disimpan pada platform. pesan pertama tiket yang digabung ada disana.
Penyambung

Medan tersuai tiket dan Butiran selamat (Kontrak 2.7)

Kontrak 2.7 menambah dua keupayaan pilihan. ticket_custom_fields membawa medan yang diisi pelanggan pada borang tiket platform ke dalam OpsIQ, dan kembali, dalam satu bentuk, dengan rahsia dimeterai. secure_details_request membolehkan platform yang boleh memaparkan borangnya sendiri memaparkan Permintaan butiran selamat. Pakej Kontrak 2.6 kekal sah tanpa kedua-duanya.

Satu bentuk

"custom_fields": [
  {"key": "website",  "label": "Website",  "type": "url",      "value": "https://example.com", "sensitive": false},
  {"key": "username", "label": "Username", "type": "text",     "value": "shopadmin",           "sensitive": false},
  {"key": "password", "label": "Password", "type": "password", "value": "<secret>",       "sensitive": true}
]
Binanya

TicketCustomFieldsContract::normalise($platformFields) menerima senarai objek medan atau peta kunci kepada nilai, memetakan jenis platform (WHMCS tickbox, dropdown, link; Zendesk tagger, partialcreditcard) kepada text, textarea, select, checkbox, radio, date, number, email, url, phone, password dan secure, menyambung senarai dengan ", " dan membuang entri yang rosak.

Apa yang sensitif

Jenis password atau secure, sensitive: true, atau kunci atau label yang menyebut kata laluan, rahsia, kunci API, token, PIN, CVV, kod auth atau EPP, kod pemulihan atau nombor kad. Medan teks bernama "cPanel password" tetap dianggap kata laluan.

Kemudi

Hantar senarai bersama tiket (TicketService::create dengan custom_fields) atau kemudian dengan TicketFields::recordExternal($ticketId, $fields, 'your_slug'). Medan biasa ditunjukkan pada tiket; medan sensitif dimeterai dan tidak sekali-kali sampai ke badan tiket, e-mel, log, peristiwa atau AI.

Ke Luar Kejam

Hantar sahaja TicketCustomFieldsContract::outbound($fields). Ia mengecualikan setiap medan sensitif: rahsia tidak sekali-kali dihantar ke platform.

Tidak sekali-kali dalam badan webhook

OpsIQ menyimpan setiap badan webhook untuk dimainkan semula. Jika platform menyimpan medan rahsia, hantar isyarat dengan ID tiket sahaja dan tarik nilai melalui saluran anda yang disahkan. Geganti WHMCS menghantar ticket.custom_fields_ready dan OpsIQ memanggil arahan ticket_custom_fields yang ditandatangani.

Nyatakan

List ticket_custom_fields in capabilities() and settings.json, and implement TicketCustomFieldsConnectorInterface::ticketCustomFieldPolicy(), which returns inbound, outbound, source and sensitive_types.

Permintaan butiran selamat

Lalai untuk setiap platform ialah pautan selamat: OpsIQ menyiarkan pautan sekali guna melalui laluan balasan biasa penyambung anda dan pelanggan menjawab di OpsIQ. Anda tidak perlu membina apa-apa untuk itu. Hanya platform yang boleh memaparkan borangnya sendiri mengisytiharkan secure_details_request dan melaksanakan presentSecureDetailsRequest(array $descriptor, array $ticket, array $settings). Deskriptor tidak sekali-kali membawa nilai:

{
  "version": "1.0", "request_id": "sdr_8f2c1a9b", "ticket_id": 4182, "mode": "native_form",
  "url": "https://opsiqai.com/api/secure_details.php?t=<token>",
  "submit_url": "https://opsiqai.com/api/secure_details.php",
  "expires_at": "2026-10-13T09:00:00Z",
  "fields": [{"key": "website", "label": "Website", "type": "url", "required": true},
             {"key": "password", "label": "Password", "type": "password", "required": true}]
}
Sahkan dahulu

SecureDetailsRequestContract::validate($descriptor) menolak medan yang mempunyai nilai, nilai lalai atau jawapan, sebarang kunci yang tidak ditakrifkan oleh kontrak, URL yang bukan https pada satu hos OpsIQ, dan tarikh luput yang telah lalu atau lebih 7 hari ke hadapan. Deskriptor yang tidak sah mengembalikan ok=false tanpa memanggil platform.

Serahan pergi ke OpsIQ

Borang dihantar ke submit_url. Pakej anda tidak sekali-kali mengumpul, menyimpan, melog atau memajukan jawapan.

Berundur dengan jujur

Kembalikan ok=false dengan mode unsupported apabila borang tidak dapat dipaparkan; OpsIQ kemudian menghantar pautan sebagai gantinya.

connector_contract.json: blok tickets

"tickets": {
  "custom_fields": "both",
  "secure_details": "link",
  "sensitive_types": ["password"],
  "note": "Fields are read over the signed relay command."
}

custom_fields ialah inbound, outbound, both atau not_applicable dan mesti selaras dengan keupayaan. secure_details ialah link, native_form (dengan secure_details_request) atau not_applicable. Nyatakan not_applicable, dengan sebabnya dalam note, apabila laluan balasan anda awam atau untuk kakitangan sahaja: OpsIQ kemudian tidak sekali-kali menyiarkan pautan melalui anda. Semakan pematuhan menggagalkan pakej tiket 2.7 tanpa blok ini, dan menyemak bahawa ia menggunakan normalise() untuk masuk, outbound() untuk keluar dan validate() sebelum memaparkan borang.

Penyambung yang disediakan

WHMCS

Kedua-dua arah. Medan tersuai tiket sokongan ditarik melalui geganti bertandatangan sebaik sahaja WHMCS menyimpannya; medan kata laluan dimeterai. Medan biasa dihantar semula pada OpenTicket, dipadankan mengikut id medan atau label. Pasang semula opsiq_relay.php pada pelayan WHMCS selepas menaik taraf.

Zendesk

Masuk. custom_fields diberi tajuk daripada takrifan medan tiket akaun; nilai senarai juntai bawah menunjukkan namanya; medan kad kredit separa dimeterai.

Jembatan OpsIQ SaaS

Dua hala, sedia untuk hari meja sokongan SaaS menyimpan medan tersuai.

Gmail

Tiada medan tersuai. Pautan selamat dihantar sebagai balasan e-mel kepada pelanggan.

WordPress, Shopify, WooCommerce

Tiada medan tersuai dan tiada pautan selamat: balasan mereka ialah ulasan awam atau nota pesanan, jadi pelanggan menerima pautan melalui e-mel atau dalam portal.

Pembina Penyambung

Pada langkah Tiket, Bidang langganan mengambil laluan payload senarai medan platform (serta laluan kunci, label, jenis dan nilai pilihan dalam satu medan) berserta jenis medan rahsia platform. Butiran selamat kekal pada Pautan selamat dalam balasan melainkan platform mendokumenkan titik akhir yang memaparkan borang; jika begitu pilih tindakan itu dan petakan descriptor.submit_url. Kedua-dua keupayaan diperoleh daripada apa yang anda konfigurasikan.

💡
Kontrak penuh: doc/contracts/CONNECTOR_CONTRACT.md, bahagian Medan tersuai tiket dan Butiran selamat. Penerimaan: buka tiket pada platform dengan medan laman web dan kata laluan diisi; dalam OpsIQ laman web ditunjukkan pada tiket dan kata laluan ditunjukkan sebagai medan dimeterai yang hanya boleh ditunjukkan oleh kakitangan dengan Lihat butiran selamat.
Penyambung

Pasaran penghubung

Marketplace membolehkan anda menemui, memasang dan menerbitkan penyambung yang dibina oleh komuniti.

Pasaran dalam talian
Pasaran penghubungGrid kad konektor komuniti yang boleh dicari dengan kategori, butang pasang dan penilaian bintang.Pasaran penghubungruang kerjaCari penyambung…Amerika/Ocean CalendlyJadualInstal★ 4.8HubSpotCRMInstal★ 4.6MailchimpE-melInstal★ 4.7QuickBooksAkuntansi KesarjanaanInstal★ 4.5TwilioSMSInstal★ 4.9NotionDokumentasiInstal★ 4.41DISCOVERPenyambung komuniti2INSTALSatu klik3PUBLISHSign & serahkan milikmu
Semak imbas penyambung komuniti, pasang dengan satu klik, atau tandatangani dan terbitkan penyambung anda sendiri; peringkat prapasang dan pasaran kedua-duanya boleh dicari.

Mencari dan memasang penyambung

1
Layari hingar

Cari dengan nama, kategori, atau platform.

2
Ulasan

Periksa deskripsi, tindakan yang didukung, dan rating.

3
Instal

Klik Pasang. Pakej penyambung dimuat turun dan dipasang ke marketplace_connectors/.

4
Konfigurkan

Dayakannya dalam Penyambung, masukkan bukti kelayakan API, dan uji.

Penerbitan sebuah penyambung

1
Bina dan uji

Gunakan Connector Builder. Sahkan bahawa semua tindakan berfungsi.

2
Pakej

Khadikan generic profile.json Tindakan.json Pengetahuan.json, dan berkas PHP.

3
Tandatangani

Run php tools/sign_connector.php <slug> to sign ONE package (it also accepts a path). It does not boot OpsIQ, so give it the key: either --key=<secret> or the OPSIQ_CONNECTOR_SIGNING_KEY environment variable, otherwise it stops with "No signing key available". tools/resign_all_connectors.php re-signs EVERY package on the install and reads the key from settings by itself, but it can also mint a NEW install-wide signing key, so reach for it only when that is what you want.

4
Merahkan

Muat naik melalui aliran penyerahan pasaran untuk semakan.

Dua penyambung tiers

connectors/: apa yang sebenarnya dijalankan

Akar penemuan masa jalan. Semua di sini adalah langsung: penyambung yang disertakan dengan OpsIQ, apa sahaja yang dipasang daripada marketplace, dan apa sahaja yang diterbitkan oleh Connector Builder pada pemasangan ini.

marketplace_connectors/ — tempat pakej dikarang

SUMBER penerbitan bagi pakej pasaran pihak pertama. Ia bukan akar penemuan: tiada apa-apa di sini yang aktif sehingga ia dibungkus, ditandatangani, disemai ke dalam katalog dan dipasang, pada ketika itu satu salinan akan masuk ke connectors/.

💡
Lihat di kedua-dua tempat. Pakej yang anda hasilkan di bawah marketplace_connectors/ bukanlah salinan yang berjalan — pemasangan menyalinnya ke dalam connectors/, dan hanya salinan itu ditemui semasa masa jalan. Stripe, BigCommerce, Magento 2, PrestaShop, OpenCart, Amazon SES, Postmark dan Resend semuanya pakej pasaran: pasang satu sebelum mengharapkan untuk menemuinya dalam Penyambung.
Pembangun

API dan pembangun webhook

The API dan Webhook Builder membolehkan anda mencipta sendiri API titik hujung dan pendengar webhook di dalam OpsIQ tanpa menulis PHP mentah.

API pembuat
API dan pembangun webhookWhatspermanger memilih tipe pemicu (inbound webhook, jadwal, acara, manual) yang feeding ke dalam aksi yang dapat dikonfigurasi.API & pembangun webhookruang kerjaPENCETUSBidik web yang tidak masuk akalJadwal (kron)OpsIQ AcaraManual UmuNameAksiPetakan medan masuk →cipta tiket / maklumkan / panggil APISimpan titik akhir1TRIGERSWebhook · jadual · peristiwa · manual2NO RAW PHPDibangun di UI3TINDAKANMedan Peta, kemudian jalankan
Build endpoint tanpa PHP mentah: pilih pemicu (inbound webhook, jadwal, acara atau manual), kemudian peta medan ke suatu tindakan.

Pencetus

Peristiwa

Lari ketika sesuatu terjadi di OpsIQ, atau ketika sistem eksternal memposting acara yang cocok ke webhook Anda URL Ketik nama acaranya, misalnya tiket.

Jadwal

Anda tidak perlu mengingatnya.

Frasa

Dijalankan apabila pentadbir meminta AI melakukannya dalam bahasa biasa. Tambah frasa yang sepatutnya sepadan, contohnya cari pelanggan.

Bidik web yang tidak masuk akal

Sistem luaran menghantar HTTP POST ke URL webhook OpsIQ anda dengan nama peristiwa. Mana-mana pencetus yang mendengar peristiwa itu akan dicetuskan.

Hanya menjalankannya kadang-kadang: kondisi

Pemicu peristiwa dapat membawa kondisi, sehingga hanya berjalan ketika data masuk cocok. Tanpa syarat itu berjalan setiap kali kebakaran terjadi.

Sibuk

Sebuah jalur ke dalam data peristiwa. Gunakan titik untuk nilai bersarang, misalnya customer. email.

Padankan semua atau apapun

Pilih sama ada setiap peraturan mesti sepadan, atau hanya salah satu daripadanya.

Tes teks

==, tidak sama, berisi, tidak mengandung, dimulai dengan, adalah salah satu dari, bukan salah satu. Pencocokan mengabaikan modal.

Ujian nombor

AVA lebih besar dari, setidaknya, kurang dari, paling banyak. Angka ditulis sebagai teks masih dibandingkan dengan benar.

Tes Presensi

Æða ada, hilang, kosong, tidak kosong.

Hanya halaman on-call engineer untuk tiket mendesak

Skenario:
Peristiwa ticket.created, dengan satu peraturan: keutamaan sama dengan segera.
Apa yang perlu dilakukan:

Aksinya berjalan untuk tiket yang mendesak dan dilewatkan untuk hal lain.

💡
Jika Anda meninggalkan aturan kosong pemicu berjalan pada setiap acara yang cocok, yang perilaku sama seperti sebelum kondisi ada.

Tindakan

Hantar webhook

Hantar HTTP POST ke URL luaran dengan muatan tersuai.

Buat tiket

Cipta tiket sokongan dengan jabatan, subjek dan mesej yang ditentukan.

Hantar e-mel

Hantar e-mel dengan templat tersuai.

Catatan terbarui oleh technical record

Update pelanggan, tiket, atau rekaman CRM.

Jalankan tindakan penyambung

Laksanakan tindakan berdaftar daripada penyambung yang didayakan dengan kebenaran penyambung dan peraturan pengesahannya.

Jalankan OpsIQ Umum API _Aksi

Cari katalog General API bernama yang lengkap. Medan, skop, kebenaran, pengesahan, idempotensi dan sokongan larian percubaan datang daripada kontrak tindakan langsung; aliran kerja dilaksanakan dalam konteks ruang kerja dan pentadbir yang disimpan.

Permintaan API _parent pengirim penyedia

Gunakan tindakan Native API Read atau Native API Write yang disahkan pada penyambung apabila titik akhir penyedia tidak mempunyai tindakan yang dikurasi. Kelayakan kekal di dalam penyambung dan hanya laluan penyedia relatif yang diterima.

✅
Pembina Tindakan & Pemicu, /api/v1.php, OpenAPI dan Postman gunakan ActionContractRegistry yang sama, jadi tindakan boleh dipilih tidak dapat dialihkan dari dokumentasi masa jalan.
Pembangun

Buku masak Pemicu Pemipu

Resep pemicu-aksi yang siap-digunakan untuk automasi umum.

Bagaimana cara kerjanya
Buku masak Pemicu PemipuAliran resep: sebuah uptime. down webhook melewati filter produksi, kemudian fans keluar untuk membuat tiket mendesak dan memberitahu Slack.uptime.downmonitor webhookjika dihasilkanfilterBuat tiket pentingBeritahu Slack #ops
Buku masak Pemicu Pemipu

Auto-create tiket dari pemantauan

Skenario:
Sistem pemantauan menghantar POST apabila pelayan terhenti.
Apa yang perlu dilakukan:

Trigger: Inbound webhook Condition: payload.status = "down" Action: Create ticket · Dept: Technical, Subject: "Server {{payload.hostname}} down", Priority: Urgent

Pemberitahuan Slack atas perintah besar

Skenario:
Pesanan Slack setiap kali pelanggan memesan di atas $100_.
Apa yang perlu dilakukan:

Trigger: Event (order.completed) Condition: order.amount > 100 Action: Send webhook to Slack incoming webhook URL with order details

E-mel digest Mingguan

Skenario:
Ringkasan email ke manajemen setiap Senin pukul 9 pagi.
Apa yang perlu dilakukan:

Trigger: Schedule (Monday 09:00) Action: Send email with last week's stats pulled from the REST API

Escalat tiket basi

Skenario:
Jika tiket tidak mendapat balasan selama 24 jam, tugaskan kepada ketua pasukan.
Apa yang perlu dilakukan:

Trigger: Schedule (every hour) Condition: ticket.status = "Open" AND ticket.last_reply_age > 86400 Action: Assign to team-lead, add internal note

Pembangun

Membina tindakan pertama Anda

Panduan ini mencipta tindakan penyambung yang ringkas dari awal.

Membina tindakan
Membina tindakanBentuk aksi-takdefinisi: name lookup_order, sebuah permintaan GET ke /orders/{id}, parameter id tipe, dan lewat 200 Tes.Tindakan baruruang kerjaTindakan baruNamalookup_orderPermintaanGET/orders/{id}Param-paramstring · id · leaderUrutan 200 · yang ditemukan1DEFINENama, metode, titik akhir2PARAMSInput typed kinetik3EST_Hasil langsung 200
Buat satu tindakan dari awal. 200.

Dua jenis aksi

Sebelum anda bermula, tentukan yang mana satu anda perlukan. Kedua-duanya dikonfigurasikan dalam skrin yang sama.

Fighanic Call an external API_

Tindakan ini menghantar permintaan HTTP ke platform anda. Pilih ini apabila OpsIQ perlu menghubungi dan melakukan sesuatu di pihak anda.

Woadin Jalankan tindakan penyambung

Tindakan ini menjalankan sesuatu yang telah disediakan oleh penyambung yang dipasang. Pilih ini apabila kerja itu sudah tersedia dan anda hanya mahu mencetuskannya. Anda memilih tindakan penyambung daripada senarai, jadi tiada apa-apa yang perlu disambungkan.

✅
Pilihan kedua ialah cara anda menggunakan semula semua yang sudah boleh dilakukan oleh penyambung anda tanpa membinanya semula: membaca bebenang tiket, mencari pelanggan, mengimport kenalan dan sebagainya. Pilih tindakan penyambung daripada senarai juntai bawah dan selesai.
1
Woagon Rencanakan aksi

Contoh: "lookup_product". Lihat produk mengikut nama, harga balik, stok dan keterangan.

2
Takrif dalam tindakan_json

Takrifan aksi:

Tindakan.json — Bentuk nyata yang nyata
{
  "actions": [
    {
      "action_id": "lookup_product",
      "label": "Look up a product",
      "category": "Catalogue",
      "description": "Find a product by name and return price, stock and description.",
      "scope": "admin",
      "requires_confirmation": false,
      "is_destructive": false,
      "delivery_type": "http",
      "http_method": "GET",
      "http_url": "/api/products/search",
      "parameters": [
        { "name": "name", "type": "string", "required": true, "in": "query",
          "description": "Product name to search for" }
      ],
      "returns": [
        { "alias": "id",          "path": "data.id",             "type": "string" },
        { "alias": "name",        "path": "data.name",           "type": "string" },
        { "alias": "price",       "path": "data.price",          "type": "number" },
        { "alias": "stock",       "path": "data.stock_quantity", "type": "number" }
      ]
    }
  ]
}
⚠️
Tiga perkara yang menyebabkan tindakan gagal mendaftar sama sekali. action_id adalah PERLU dan mesti 2 ke 100 aksara huruf kecil, digit dan garis bawah — masukan tanpa satu ditolak secara langsung. Manifest adalah objek dengan senarai "tindakan", bukan peta yang diketuk oleh nama tindakan. Dan pemetaan tindak balas ialah "kembali" dengan laluan DOTTED (data.id), bukan JSONPath ($.data.ID) — tiada kekunci "response_mapping", "method", "endpoint" atau "params" dimana-mana dalam pendaftaran.
3
Uji dengan kering-lari

Dalam langkah Semakan Pembina Penyambung, tekan Larian kering. Ia menjalankan senarai semak pematuhan penuh terhadap pakej anda dan, apabila anda telah memberikan kelayakan, membuat ujian sambungan sebenar. Ia tidak menggunakan data sampel.

4
Penggunaan AI tentusah secara exvery

AI untuk mencari dan menjalankan aksi.

⚠️
Menambah tindakan ke actions.json TIDAK mencipta laluan AJAX, jadi tiada apa-apa untuk dijana semula. Tindakan penyambung disegerakkan ke dalam OpsIQ apabila penyambung didayakan atau tetapannya disimpan: simpan semula penyambung itu dan tindakan baharu akan muncul. tools/gen_route_registry.php meliputi penghantaran AJAX pentadbir dan tiada kaitan dengan tindakan penyambung.
Pembangun

Titik akhir peristiwa yang tidak terbatas

Tanda terima titik akhir yang tidak bertandatangan JSON Dari sistem lain dan mengubahnya menjadi aktivitas kontak yang rumit yang dapat memberi makan garis waktu, mencetak gol dan alur kerja.

Skrin produk
Titik akhir yang tidak terbatasSetiap sumber masuk memiliki sumber sendiri URL, rahasia, pemetaan dan hasil aktivitas baru-baru ini.Titik akhir yang tidak terbatasruang kerjaSUMBER5ACCEPTED12.4kREJECTED18ORANG KERJA HIDUPPlatform Billingacara LanggananKesehatanAplikasi produkAcara pendaftaran dan penggunaanKesehatanID Peristiwaprovider_event_iddargupe_TandatanganX-OpsIQ-Inbound-SignatureOOB HMAC1CREATE SOURCEURL Rahasia dan rahasia2MAP PAYLOADEmail, acara dan ID3KETAHUIHMAC kemudian menelan
Setiap sumber masuk memiliki sumber sendiri URL, rahasia, pemetaan dan hasil aktivitas baru-baru ini.

Cipta satu sumber bagi setiap sistem penghantaran. OpsIQ mencipta URL/token dan rahsia. Hantar JSON dengan Content-Type: application/json Dan tanda tangan mayat mentah yang tepat menggunakan HMAC-SHA256:

X-OpsIQ-Inbound-Signature: sha256=<hex hmac>

Peta laluan JSON untuk emel kenalan, nama acara dan ID acara opsyenal. ID acara adalah kekunci deduplikasi yang disukai. Aktiviti diterima memasuki garis masa kenalan dan boleh mempengaruhi skor lead, segmen, peraturan siklus hidup dan aliran kerja.

Tolak tandatangan yang tidak sah sebelum menghuraikan data perniagaan. Putar rahsia dengan mengemas kini kedua-dua pihak dalam tempoh yang terkawal; jangan log rahsia itu.

Pembangun

Operasi webhook luar angkasa

Pentadbiran webhook keluar mencipta langganan bertandatangan, menguji titik akhir dan memantau kesihatan penghantaran tak segerak dan cubaan semula.

Skrin produk
Biok web luar biasaHalaman webhook keluar menyenaraikan titik akhir HTTPS, langganan acara, kesihatan penghantaran dan ujian bertandatangan dengan satu klik.Biok web luar biasaruang kerjaENDPOINTS7SUCCESS99.2%MENANGIS4ORANG KERJA HIDUPCermin CRMKontak.* dan kesepakatan.*KesehatanSodium Support busTiket.* dan chatting.*KesehatanGudang Data*Cuba lagiKiriman tesMuatan sampel yang ditandatangani oleh signedSiap1SUBSCRIBEHTTP URL acara dan peristiwa2AUTHENTICATETanda tangan HMAC untuk nama pengguna3OBSERVERel dan retrie
Halaman webhook keluar menyenaraikan titik akhir HTTPS, langganan acara, kesihatan penghantaran dan ujian bertandatangan dengan satu klik.

Pentadbir penuh mencipta titik akhir HTTPS, memilih peristiwa tertentu atau kad bebas, menyimpan rahsia dengan selamat dan menghantar ujian. OpsIQ menandatangani muatan mentah dengan HMAC-SHA256:

X-OpsIQ-Signature: sha256=<hex hmac>

Sahkan tandatangan sebelum menyahsiri atau mengambil tindakan. Penghantaran adalah tak segerak dan dicuba semula secara automatik selepas kira-kira 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hoursGunakan rel yang baru-baru ini untuk memeriksa status, kode respon dan hitungan percobaan.

Penerima anda mesti idempoten kerana mana-mana sistem tak segerak boleh menghantar semula. Pulangkan respons 2xx hanya selepas penerimaan yang kekal.

Pembangun

Webhook

Webhooks membiarkan sistem eksternal memberitahu OpsIQ Bila terjadi sesuatu (dalam perjalanan), dan biarkan OpsIQ Kogminal sistem eksternal ketika sesuatu terjadi secara internal (outbound).

Webhook
Biok web luar biasaSkrin webhook keluar: jadual titik akhir dengan nama, peristiwa yang dilanggan, titik status penghantaran terkini, dan butang Hantar ujian.Biok web luar biasaruang kerjaTitik akhir UkiranTitik akhir SimpanNAMAKEPADAKEHILANGSlack#Valertshttps://hooks.slack.com/…crm.deal.won, perintahUjiCermin CRMhttps://api.acme.com/hookKontak.*, tiket diciptakanUjiZapierhttps://hooks.zapier.com/…chat.startedUji1ENDPOINTSNama, peristiwa, URL_2SIGNEDHMAC + auto-cuba semula3SEND TESTKiriman verifikasi untuk provery
Skrin webhook keluar sebenar: setiap titik akhir dengan acaranya, kesihatan penghantaran terkini, dan butang Hantar ujian satu klik, ditandatangani dan dicuba semula.

Biok web luar biasa

Langganan

Ke Tetapan > Jatik Web. Tambah titik akhir URL dan pilih acara yang akan diterima.

Peristiwa Lenyap

Langganan ke acara tertentu, atau ke ["*"] Daftar lengkap untuk pemasanganmu ada di bawah, dan webhooks.events.list mengembalikannya sebagai JSON.

Cuba lagi

Penghantaran gagal cuba semula dengan backoff eksponen. Selepas 15 kegagalan berturut-turut, titik akhir dilumpuhkan secara automatik.

Menandatangan

Setiap penghantaran ditandatangani. X-OpsIQ-Signature carries v2=<hex>Dan tali yang ditandatangani adalah version.timestamp.delivery_id.body Jangan hanya tubuh saja, selalu pastikan dan selalu membangun kembali benangnya.

Perlindungan SSRF

OpsIQ tidak akan menghantar ke IP peribadi/dalaman (127.x, 10.x, 172.16.x, 192.168.x, 169.254.169.254).

Kiriman segerak

Webhooks disampaikan melalui antrian kerja, bukan menghalangi operasi OpsIQ _.

ID peristiwa yang Staable

Setiap acara memiliki event_id unik yang tetap sama melintasi retries untuk dedukasi.

Apa yang tiba bersama setiap penghantaran

X-OpsIQ-Event

Nama peristiwa, misalnya ticket.created.

X-OpsIQ-Delivery

Id penghantaran. Ia kekal sama merentas cubaan semula — gunakannya untuk mengabaikan pendua.

X-OpsIQ-Timestamp

Saat Unix pada masa tandatangan. Tolak apa-apa yang lebih lama daripada kira-kira lima minit.

X-OpsIQ-Signature

Nama samaran sebagai v2=<hex>Berpisah pada =Sisi kiri adalah versi, sisi kanan adalah nilai yang Anda bandingkan.

X-OpsIQ-Signature-Version

Skema yang digunakan, pada masa ini v2Baca dari header daripada hard-coding itu, dan kode Anda terus bekerja jika v3 pernah ditambahkan.

⚠️
Talian yang ditandatangani oleh Fuu adalah version.timestamp.delivery_id.bodyHanya dengan cara yang paling umum, tubuh yang tidak mentah itu sendiri.

Mengesahkan penghantaran

PHP PHP · verifikasi OpsIQ webhook
<?php
// Read the raw body BEFORE any framework parses it — the signature covers
// the exact bytes we sent, so a re-encoded array will not match.
$raw      = file_get_contents("php://input");
$sigHeader= $_SERVER["HTTP_X_OPSIQ_SIGNATURE"] ?? "";   // "v2=<hex>"
$ts       = (string)($_SERVER["HTTP_X_OPSIQ_TIMESTAMP"] ?? "");
$delivery = (string)($_SERVER["HTTP_X_OPSIQ_DELIVERY"] ?? "");
$secret   = "your endpoint signing secret";   // shown once when you add the endpoint

// 1. Refuse a stale delivery. This is what stops a captured request being replayed.
if ($ts === "" || abs(time() - (int)$ts) > 300) {
    http_response_code(401);
    exit(json_encode(["error" => "Stale delivery"]));
}

// 2. The header names its own version: "v2=<hex>".
[$version, $received] = array_pad(explode("=", $sigHeader, 2), 2, "");

// 3. Rebuild exactly what OpsIQ signed.
$canonical = $version . "." . $ts . "." . $delivery . "." . $raw;
$expected  = hash_hmac("sha256", $canonical, $secret);

// 4. Constant-time compare, so a timing attack cannot reveal the secret.
if ($received === "" || !hash_equals($expected, $received)) {
    http_response_code(401);
    exit(json_encode(["error" => "Invalid signature"]));
}

// 5. Accept. Deliveries retry, so treat a delivery id you have already
//    processed as a success and do the work only once.
$event = json_decode($raw, true);
// ... your handling ...

http_response_code(200);
echo json_encode(["received" => true]);
Node. js · sahkan OpsIQ webhook
const crypto = require("crypto");

// express.raw gives you the exact bytes OpsIQ signed. express.json() does not.
app.post("/opsiq-webhook", express.raw({ type: "application/json" }), (req, res) => {
  const raw      = req.body;                                  // Buffer
  const sig      = req.headers["x-opsiq-signature"]  || "";   // "v2=<hex>"
  const ts       = req.headers["x-opsiq-timestamp"]  || "";
  const delivery = req.headers["x-opsiq-delivery"]   || "";
  const secret   = process.env.OPSIQ_WEBHOOK_SECRET;

  // 1. Reject stale deliveries (replay protection).
  if (!ts || Math.abs(Date.now() / 1000 - Number(ts)) > 300) {
    return res.status(401).json({ error: "Stale delivery" });
  }

  // 2. Split "v2=<hex>" into its version and its value.
  const [version, received] = sig.split("=", 2);

  // 3. Rebuild what OpsIQ signed: version.timestamp.delivery_id.body
  const canonical = Buffer.concat([
    Buffer.from(`${version}.${ts}.${delivery}.`),
    raw,
  ]);
  const expected = crypto.createHmac("sha256", secret).update(canonical).digest("hex");

  // 4. Constant-time compare. Lengths must match first or timingSafeEqual throws.
  const a = Buffer.from(expected), b = Buffer.from(received || "");
  if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
    return res.status(401).json({ error: "Invalid signature" });
  }

  // 5. Accept, and make the work idempotent on the delivery id.
  const event = JSON.parse(raw.toString("utf8"));
  res.json({ received: true });
});

Setiap peristiwa yang boleh dihantar oleh pemasangan ini

Dihasilkan dari pembangunan yang berjalan, sehingga selalu cocok dengan versi Anda.

✅
53 events can be delivered to a webhook endpoint on this install. Subscribe with ["*"] for all of them, or name the ones you want. The General API action webhooks.events.list mengembalikan senarai ini sama seperti JSON, jadi kod anda tidak perlu keras-kodkannya.

analitik (1)

analytics.anomaly

Fired by PHASE_ANOMALY_ALERTS when a daily KPI (sessions, pageviews, conversions, revenue) deviates from its same-weekday 4-week baseline beyond the configured threshold. Payload: day (required), title, site_key, anomalies.

Perdagangan (2)

commerce.order.created

Fired the moment a chat-confirmed order lands on the merchant platform (connector or custom-actions integration) - before payment. Subscribe to sync carts, reserve stock, or notify fulfilment systems. Payload: reference (required), connector, amount_minor, currency, customer_email, thread_id, occurred_at.

commerce.payment.confirmed

Fired exactly once per order when the gateway actively verifies the payment (amount and currency exact). This is the settlement signal - it rides the same claim that prevents duplicate receipts, so it can never double-fire. Payload: reference (required), connector, occurred_at.

kenalan (6)

contact.conversion

Fired by OpsIQ.

contact.erased

Fired by OpsIQ.

contact.lifecycle_changed

Fired by OpsIQ.

contact.status_changed

Fired by OpsIQ.

contact.tag_added

Fired by OpsIQ.

opsiq.contact.upsert

Fired by OpsIQ.

conversation (5)

conversation.assigned

Fired when a conversation is assigned to an agent or unassigned. Payload: thread_id (required), site_key, assigned_admin_id, by_admin_id, occurred_at.

conversation.created

Fired when a new Client Chat conversation (thread) is opened. Payload: thread_id (required), site_key, channel, client_email, client_name, visitor_id, created_at.

conversation.message.created

Fired when a visible message is written to a conversation by the visitor, an agent, the AI or the system. Internal notes do not fire. Payload: thread_id (required), message_id (required), site_key, sender_type, admin_id, message, has_attachment, created_at.

conversation.rated

Fired when the visitor rates a conversation (1-5 stars). Payload: thread_id (required), site_key, stars, comment, trigger, admin_id, occurred_at.

conversation.resolved

Fired when an agent resolves a conversation and hands it back to the AI. Payload: thread_id (required), site_key, by_admin_id, occurred_at.

kim (6)

crm.company.created

Fired when a CRM company/account is created. Payload: company_id (required), name.

crm.deal.created

Fired when a CRM deal/opportunity is created (by an order, the capture agent, or a human). Payload: deal_id (required), title, amount, currency, scope.

crm.deal.lost

Fired when a deal is moved to a Lost stage (closed-lost). Payload: deal_id (required), stage, amount.

crm.deal.stage_changed

Fired when a deal moves to a different pipeline stage. Payload: deal_id (required), stage, amount.

crm.deal.won

Fired when a deal is moved to a Won stage (closed-won). Payload: deal_id (required), stage, amount.

crm.task.created

Fired when a CRM task is created (incl. AI-suggested next-step / renewal tasks). Payload: task_id (required), title.

E-mail (2)

email.bounced

Fired by OpsIQ.

email.replied

Fired by OpsIQ.

feedback (13)

feedback.analysis.completed

Fired when a Voice-of-Customer analysis run completes. Payload: analysis_run_id (required), workspace_key, sample_count, model_version.

feedback.detractor.detected

Fired when a newly indexed response meets its metric-specific detractor rule. Payload: feedback_item_id (required), workspace_key, source_kind, metric_kind, classification.

feedback.follow_up.completed

Fired when a Feedback follow-up is completed. Payload: feedback_item_id (required), workspace_key, actor_admin_id, outcome_code.

feedback.item.assigned

Fired when Feedback ownership changes. Payload: feedback_item_id (required), workspace_key, assignee_admin_id, team_id, actor_admin_id.

feedback.item.indexed

Fired when a source record is added to or refreshed in the canonical Feedback index. Payload: feedback_item_id (required), source_kind, source_id, workspace_key, metric_kind, classification.

feedback.item.redacted

Fired when source deletion or redaction removes Feedback content from the index. Payload: feedback_item_id (required), workspace_key, source_kind.

feedback.item.status_changed

Fired when the Feedback workflow state changes. Payload: feedback_item_id (required), workspace_key, state, actor_admin_id.

feedback.item.tagged

Fired when a tag is added to or removed from Feedback. Payload: feedback_item_id (required), workspace_key, tag, operation.

feedback.item.updated

Fired when a canonical Feedback item changes. Payload: feedback_item_id (required), workspace_key, change.

feedback.source.failed

Fired when a Feedback source replay or incremental index operation fails. Payload: workspace_key, source_kind (required), error_code, checkpoint.

feedback.source.lagging

Fired when a Feedback source checkpoint is behind its expected freshness window. Payload: workspace_key, source_kind (required), lag_seconds, last_success_at.

feedback.theme.detected

Fired when a canonical topic or theme signal is attached to Feedback. Payload: feedback_item_id (required), workspace_key, theme_key, confidence.

feedback.urgent.detected

Fired when an urgent Feedback signal is detected. Payload: feedback_item_id (required), workspace_key, source_kind, signal_key.

invoice (3)

invoice.created

Fired when an invoice is generated. Payload: invoice_id (required), customer_id, customer_email, amount, currency, due_date, items.

invoice.overdue

Fired when an invoice passes its due date unpaid. Payload: invoice_id (required), customer_id, customer_email, amount, currency, days_overdue.

invoice.paid

Fired when an invoice is paid in full. Payload: invoice_id (required), customer_id, customer_email, amount, currency, paid_at.

order (1)

order.created

Fired when a new order is placed. Payload: order_id (required), customer_id, customer_email, amount, currency, items, status, source.

pembayaran ultah (3)

payment.completed

Fired when a payment succeeds. Payload: order_id (required), payment_id, provider_ref, customer_id, customer_email, amount, amount_minor, currency, gateway, invoice_id, items, paid_at.

payment.failed

Fired when a payment attempt fails. Payload: order_id, customer_id, customer_email, amount, currency, gateway, reason.

payment.refunded

Fired when a refund is issued. Payload: order_id, refund_id, customer_id, customer_email, amount, currency, reason.

keselamatan (1)

security.alert

Fired by PHASE_SECURITY_ALERTS when a security rule trips: failed-login wave, new automatic IP blocks, or a tamper-evidence (audit/consent hash chain) verification failure. Payload: rule (required), title, site_key, count, blocks, errors.

subscription (3)

subscription.cancelled

Fired when a subscription is cancelled. Payload: subscription_id (required), plan_name, customer_id, customer_email, cancel_reason, cancelled_at, ends_at.

subscription.created

Fired when a subscription is started. Payload: subscription_id (required), plan_id, plan_name, customer_id, customer_email, amount, currency, interval, trial_ends_at, next_billing_at.

subscription.renewed

Fired when a subscription renews successfully. Payload: subscription_id (required), plan_name, customer_id, customer_email, amount, currency, next_billing_at.

Tiket (6)

ticket.closed

Fired when a ticket is closed or resolved. Payload: ticket_id (required), resolution, closed_by_type, closed_by_id.

ticket.created

Fired when a new support ticket is opened. Payload: ticket_id (required), ticket_number, subject, department_id, department_name, customer_id, customer_email, priority, message, author_type, author_id, author_name.

ticket.merged

Fired when one or more tickets are merged into another ticket. Payload: ticket_id (required), ticket_number, subject, external_ref, native_table, site_key, sources, merged_by, merged_at.

ticket.renumbered

Fired when a connector mirror adopts the remote platform's ticket number for an OpsIQ ticket. Payload: ticket_id (required), old_number (required), ticket_number (required), connector, external_ref.

ticket.replied

Fired when a reply is posted to a ticket. Payload: ticket_id (required), reply_id, author_type, author_id, author_name, message.

ticket.status_changed

Fired when a ticket moves to another status (including reopen and close). Payload: ticket_id (required), ticket_number, old_status, new_status, changed_by.

user (1)

user.registered

Fired when a new user/customer account is created. Payload: user_id (required), email, firstname, lastname, company, country, source.

Bagaimanakah saya menguji webhook secara setempat?+

Guna ngrok untuk mengekspos server lokal Anda. Tetapkan titik akhir webhook ke ngrogk URL_ Anda.

Bagaimana jika titik akhirku sementara turun?+

OpsIQ mencuba semula dengan tempoh menunggu eksponen. Jika titik akhir anda pulih dalam tetingkap cubaan semula, tiada acara yang hilang.

Pembangun

Kunci API

API Permintaan otentikasi kunci ke server OpsIQ EST API Setiap kunci memiliki izin terskop.

Kunci API
Kunci APISkrin kunci API: panel pengeluaran dengan cip tahap akses dan skop, di sebelah senarai kunci sedia ada yang disembunyikan dengan butang batal.Kunci APIruang kerjaKeluarkan kunciAksesHanya Baca-bacaDilarangSkopcontacts.readtickets.readevents.writeKuncinya adalah:KuncimuIntegrasi Zapieropq_••••4f2aBatalAplikasi mobileopq_••••91c7BatalEksport analitikopq_••••2db0Batal1SCOPEDHanya baca-saja atau terbatas2PER-ACTIONAmbil skop yang tepat3REVOCABLEPutar kapan saja
Skrin kunci API sebenar: keluarkan kunci berskop, baca sahaja atau terhad dengan memilih skop yang tepat, dan batalkan mana-mana kunci pada bila-bila masa.

Mencipta sebuah kunci API

1
Pergi ke Tetapan > API Kekunci _Tipta:

Navigasi ke manajemen kunci API.

2
Klik Untuk Cipta Kunci

Berikan nama deskriptif.

3
Pilih skop

Berikan kunci hanya apa yang diperlukan. Skop datang dalam membaca dan menulis pasangan per area, sehingga sebuah integrasi pelaporan dapat diberikan baca dan tidak ada lagi.

Skop yang ada

Pilih set tersempit yang melakukan pekerjaan. admin memenuhi setiap skop di bawah, jadi gunakannya hanya apabila anda benar-benar memerlukan akses yang luas.

¡crm. read / crm. write

Kenalan, syarikat, urus niaga, aktiviti, segmen, jangkauan, penukaran, kitaran hayat dan webhook CRM.

Tiket. read / tiket. write

Senaraikan dan baca tiket serta mesejnya; balas, kemas kini, buka dan jalankan operasi baris gilir secara pukal.

conversations.read / conversations.write

Baca perbualan sembang langsung dan sejarah mesej; hantar mesej, tugaskan dan tukar status.

kinch

Entri pangkalan pengetahuan.

read / chat. write

Templat balasan yang disimpan.

connectors.read

Lihat penyambung yang dipasang, apa yang boleh dilakukannya, dan uji kelayakan mereka.

automations.read

Kau lihat tindakanmu, pemicu dan sejarah mereka.

departments.read

Departemen-Departemen Waffeogon tersedia untuk routing.

notifications.read

Pemberitahuan palsu untuk operator bernama.

analytics.read

Bahagian laporan, eksport CSV dan takrifan laporan berjadual.

site_intelligence.read

Tapak yang dipantau dan laporan SEO-nya.

files.read

Pautan muat turun bertandatangan untuk lampiran.

status.write

Status komponen halaman dan insiden.

Penulisan

AI witter pembantu: draft, summarise, translate, critripte, compose, analisa.

sistemdya

Segala-galanya, termasuk sebilangan kecil tindakan sensitif yang sengaja tidak boleh dicapai oleh mana-mana skop sempit: memadam kenalan, menukar tetapan privasi dan membaca log akses.

💡
Panggil meta. actions dengan kunci anda untuk melihat persis apa yang dapat dijalankan pada pemasangan anda. yang selalu lebih dapat diandalkan daripada bekerja dari daftar.

Aras akses universiti

Semua

Kuncinya mungkin akan memanggil apapun yang memungkinkannya.

Hanya Baca-baca

Setiap tulisan ditolak, apapun yang diskop katakan pilihan paling aman untuk melaporkan, dashboard dan apa pun yang tidak boleh mengubah data.

Dilarang

Kau daftarkan tindakan yang tepat yang mungkin dihubungi kunci.

4
Salin kunci

Ditunjukkan sekali sahaja. Bermula dengan "opq_". Simpan dengan selamat.

🚫
Tidak pernah berbagi API kunci di kode publik, client-side JavaScript, atau kontrol versi. Gunakan variabel lingkungan.
Pembangun

Sambungkan laman web anda

The OpsIQ widget adalah JavaScript snippet yang anda tambah ke laman web anda untuk penjejak, sembang AI, penciptaan tiket dan pengenalan pelanggan.

Bagaimana cara kerjanya
Sambungkan laman web andaSebuah tag skrip satu baris di kiri dan, di kanan, halaman web dengan gelembung OpsIQ chat muncul di sudut.<!-- paste before </body> --><script src="https://cdn.opsiq.io/w.js" data-site="ws_8a2f" async></script>
Sambungkan laman web anda

Pemasangan Asas .

snippet widget dasar snippet
<script src="https://your-opsiq-domain.com/widget.php"
  data-site-key="site_abc123"
  async></script>

Paste before the closing </body> tag. The script loads asynchronously and does not block page rendering.

Atribut konfigurasi ahli

data-site-key

Wajib. Kunci laman anda daripada Laman Bersambung.

data-mode

Opsyenal. "chat" (piawai), "tickets", atau "both".

data-position

Opsyenal. "kanan bawah" (piawai) atau "kiri bawah".

data-color

Kode heksa warna primer.

data-greeting

Pesan ucapan awal.

data-language

Opsyenal. Bahasa UI: "en", "es", "fr", "de", "pt", "ar", dll

data-identity-token

Pilihan. Token identiti bertandatangan yang dijana pelayan.

Sokongan SPA

Pelacakan rute Manual SPA Manual
// Manually notify OpsIQ of a route change (for custom routers)
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["pageview", {
  url: window.location.href,
  title: document.title,
}]);

Peraturan CSP

Peraturan CSP untuk widget
script-src 'self' https://your-opsiq-domain.com;
connect-src 'self' https://your-opsiq-domain.com;
frame-src https://your-opsiq-domain.com;
Apakah widget memperlambat website saya?+

Tidak. Kurang daripada 15 KB selepas gzip, dimuatkan secara tak segerak selepas kandungan halaman.

Bolehkah saya menyesuaikan rupa?+

Gunakan data-color untuk warna utama. Hubungi sokongan untuk pilihan pengatasan CSS.

Pembangun

Resepi pemasangan Widget

Panduan pemasangan khusus platform.

Bagaimana cara kerjanya
Resepi pemasangan WidgetPlatform pasang kad untuk WordPress, Shopify dan Google Tag Manager, masing-masing menyatakan di mana untuk menambah widget.WPWordPressPasang plugin, enterKunci situsmu, simpan.KedaiShopifyTampal snippet ke dalamTema . liquid sebelum /body._Vidania GTMPengurus Tag X. A. G.Tag HTML Custom, semua halaman.
Resepi taplak

WordPress

Skenario:
Tambah pada semua halaman laman WordPress.
Apa yang perlu dilakukan:

Option 1: Edit theme footer.php, paste snippet before </body>. Option 2: Use "Insert Headers and Footers" plugin > Scripts in Footer. Option 3: Use a child theme footer.php to survive theme updates.

Shopify

Skenario:
Tambah ke kedai Shopify anda.
Apa yang perlu dilakukan:

Online Store > Themes > Edit Code > Layout > theme.liquid. Paste before </body>. Save.

React / Next. js

Skenario:
Tambahkan ke aplikasi React atau Next. js.
Apa yang perlu dilakukan:

In Next.js, use next/script in app/layout.tsx: import Script from "next/script"; <Script src="https://your-opsiq.com/widget.php" data-site-key="site_abc" strategy="lazyOnload" />

WHMCS

Skenario:
Tambah ke area klien WHMCS _mu.
Apa yang perlu dilakukan:

Setup & > Seting Umum > Lain-lain > Kandungan Pengaki Global. Tampal snippet. atau sunting footer. tpl template Anda.

Google Tag Manager

Skenario:
Tambah melalui GTM.
Apa yang perlu dilakukan:

Bina Kebiasaan HTML Tag, tampal snippet. Pemicu: Semua Halaman. Terbitkan.

Pembangun

Widget Admin edoksi di backend anda (satu kontrak, setiap platform)

Benamkan pembantu pentadbir OpsIQ — sembang pentadbir, peti masuk tiket dan AI Writing — di dalam panel pentadbir platform ANDA SENDIRI, supaya pasukan anda tidak perlu meninggalkan alat mereka. Seperti identiti pelawat dan SSO portal, ini ialah SATU kontrak generik yang dilaksanakan dalam ~15 baris kod pelayan platform anda — corak yang sama yang digunakan oleh Zendesk, Intercom dan Discourse untuk SSO. Tiada pemalam khusus platform yang perlu ditunggu: mana-mana tindanan yang boleh mengira HMAC boleh melakukannya hari ini.

Step 1 — garis embed

Dari Laman Jauh → laman anda → Kod, salin baris pemuat dan tambahkan ke halaman panel admin anda (kaki termasuk, templat tata letak, atau kotak custom-JS admin-only):

Satu-garis dibenamkan
<script async src="https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=SITE_KEY&identity_token=TOKEN_FROM_STEP_2"></script>

Langkah ke -2Niat OpsIQ ifogles yang mendaftar masuk (server-signed)

Hanya aplikasi ANDA yang tahu admin mana yang log masuk — itu bukan kelemahan, itulah model keselamatannya. Pelayan anda menjana token bertandatangan jangka pendek daripada sesi anda sendiri, sama seperti token identiti pelawat, ditandatangani dengan rahsia webhook laman yang sama:

PHP PHP · tandai identitas admin dari sesi anda
<?php
$secret  = "opsiq_whsec_your_site_secret";   // Remote Sites → Codes
$payload = json_encode([
    "site_key"      => "SITE_KEY",
    "iat"           => time(),
    "exp"           => time() + 6 * 3600,
    "authenticated" => true,          // REQUIRED, top level — see note below
    "platform"      => "your-platform",
    "admin"    => [
        "id"            => (string)$admin->id,      // from YOUR session
        "name"          => $admin->name,
        "username"      => $admin->username,
        "email"         => $admin->email,
        "role"          => $admin->role,
        "authenticated" => true,
    ],
]);
$payload64 = rtrim(strtr(base64_encode($payload), "+/", "-_"), "=");
$identityToken = $payload64 . "." . hash_hmac("sha256", $payload64, $secret);
// Put $identityToken into the embed line (identity_token=…), or expose it as
// window.OpsIQAdminIdentityToken before the loader script.
Akses bagi setiap admin, secara automatik

Setiap admin yang log masuk ke platform anda dipadankan secara individu: OpsIQGerbang akses per-admin's menyelesaikan nama pengguna + emel token terhadap satu OpsIQ ejen (laman pasukan; guna senarai "emel sepadan" ejen bila e-mel platform berbeza) dan gunakan ruangkerja, jabatan dan keizinan peti masuk ejen THAT. Anggota staf baru = tambahkan ejen dalam OpsIQ; tiada perubahan bebenang.

Peranan Peranan bersama

Apa sahaja rentetan peranan yang dihantar oleh platform anda dipaparkan di pihak OpsIQ untuk atribusi; kebenaran sentiasa datang daripada rekod ejen OpsIQ, tidak sekali-kali daripada peranan yang didakwa.

Mengapa tidak membaca kue log masuk kami?

Pelayar tidak pernah menghantar cecikut admin anda ke asal lain — tiada pembekal boleh "hanya mengesan" login lintas-domain anda. Setiap produk serius menyelesaikan ini dengan cara yang sama: pelayan anda menjamin, ditandatangani. Itu adalah keseluruhan kontrak.

Tak ada mode yang dibagikan di situsmu sendiri.

Di luar hos OpsIQ tiada mod tanpa tandatangan atau log masuk berkongsi: pemuat kekal tersembunyi sehingga token pentadbir bertandatangan diterima. Nilai token=… dalam pemuat Kod ialah kunci widget yang hanya mengenal pasti laman; ia tidak sekali-kali boleh melog masuk sesiapa pun.

Butang authenticated Bendera tahbisan — diletakkan di tingkat TOP

Bendera ini ialah penegasan pelayan anda bahawa seorang manusia benar-benar telah log masuk, dan OpsIQ menolak sebarang token tanpanya. Letakkan "authenticated" => true beside site_key/iat/exp, BUKAN hanya di dalam objek admin objek. OpsIQ semasa menerimanya dalam mana-mana kedudukan, tetapi keluaran lama hanya membaca peringkat atas — dan kegagalannya mengelirukan: senarai perbualan, sejarah dan belum dibaca semuanya disahkan dengan baik sementara setiap giliran sembang menjawab "Log masuk pentadbir diperlukan", yang kelihatan seperti pepijat sesi tetapi sebenarnya bukan. Jika anda melihat pembahagian yang tepat seperti itu, semak bendera ini dahulu.

Kebersihan Token ifisi

Tandatangan di pelayan sahaja, jangan sekali-kali dalam JavaScript pelayar. Pastikan exp singkat (beberapa minit hingga beberapa jam); OpsIQ menolak token yang telah tamat tempoh dan yang bertarikh hadapan, dan tandatangan itu mengikat token kepada kunci laman anda.

Perlaksanaan referensi bereformasi

clients/php/opsiq_admin_identity_endpoint_example.php dalam Connector SDK ialah versi PHP biasa; fail jambatan penyambung Botble Hotel melakukannya daripada sesi Laravel (op=admin_identity). Kedua-duanya hanyalah kontrak ini dalam dialek platform masing-masing — salin yang paling hampir dengan stack anda.

Tiada pendawaian halaman (kuar yang diisytiharkan oleh penyambung)

Ketika Anda OpsIQ Konektor menyimpan titik akhir identitas Anda di dalamnya admin_identity_probe_url tetapan, baris pemuat BIASA sahaja yang diperlukan oleh halaman pentadbiran anda: widget mengesan probe daripada penyambung, memanggilnya dengan kunci tapak + token widget anda, dan mengesahkan setiap pentadbir secara automatik. Halaman masih boleh menggantikannya dengan data-identity-endpoint atribut atau atribut mikro atau window.OpsIQAdminIdentityEndpoint.

💡
\"Rahasia Penandatanganan\" sudah ada untukmu. Dalam Laman Jauh, laman web anda, Kod, Pilihan 3, Log masuk kakitangan anda, setiap contoh sudah mengandungi rahsia laman web ini sendiri, jadi kod berfungsi sebaik sahaja ditampal: tiada apa yang perlu disalin atau dikonfigurasikan. Contoh di halaman ini menunjukkan opsiq_whsec_YOUR_SITE_SECRET Setiap contoh mencari OPSIQ_SITE_SECRET (atau tetapan rangka kerja anda sendiri, yang dinamakan dalam notanya) pada pelayan terlebih dahulu dan menggunakannya apabila ia ditetapkan, supaya anda boleh memindahkan rahsia keluar dari fail bila-bila masa anda mahu, contohnya untuk memutarnya tanpa menyunting kod. Walau apa pun, fail itu berjalan pada pelayan anda sahaja: jangan sekali-kali menampalnya ke dalam halaman web atau JavaScript pelayar, dan jangan sekali-kali menyerahkannya ke repositori awam, kerana sesiapa yang memegang rahsia itu boleh log masuk sebagai mana-mana pelanggan atau kakitangan anda. WHMCS dan Botble tidak memerlukan semua ini: cangkuk WHMCS tiba dengan rahsia sudah diisi, dan panel penyambung Botble mengisikannya ke dalam jambatan.

Kode lengkap, platform demi platform

Setiap contoh mencetak tag Admin Chat hanya untuk anggota staf signed-in, dengan token ditandatangani ditambahkan, dan menjawab refresh widget (?opsiq_identity_refresh=1&role=admin) dengan {"success":true,"identity_token":"…"} atau 401. Tapak Jauh, tapak anda, Kod, Pilihan 3, Log masuk kakitangan anda mencetak kod yang sama dengan kunci tapak dan rahsia anda telah diisi.

⚠️
Token pentadbir terdiri daripada dua bahagian: base64url(payload), satu titik, kemudian HMAC-SHA256 heks bagi teks base64url itu. Ia bukan JWT, dan JWT ditolak. Objek admin memerlukan id dan email, dan exp mesti dalam tempoh 24 jam.

WHMCS

✅
Nothing to add: the WHMCS hook in Option 1 already signs your logged-in staff into Admin Chat and refreshes the token. Do not paste the Option 3 loader as well.
1

Install the Option 1 hook as includes/hooks/opsiq_tracker.php.

2

Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

includes/hooks/opsiq_tracker.php
/* WHMCS: no extra code. Option 1 (the All-in-One WHMCS Hook) signs the logged-in
 * admin into Admin Chat on every admin page and answers ?opsiq_identity_refresh=1&role=admin. */

Botble (connector bridge)

✅
Nothing to add: the Botble bridge signs your logged-in admins. Copy the bridge from the Botble connector panel (it arrives with OPSIQ_HOST, OPSIQ_SITE_KEY and OPSIQ_SITE_SECRET filled in), then put its one admin_embed line in Botble's admin Custom JS.
1

In Botble admin → Custom JS, add: <script async src="https://YOUR-BOTBLE-SITE/opsiq-botble-bridge.php?op=admin_embed"></script>

2

Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

public/opsiq-botble-bridge.php
<!-- Botble admin → Custom JS. The bridge signs the logged-in admin; nothing secret is in the page. -->
<script async src="https://YOUR-BOTBLE-SITE/opsiq-botble-bridge.php?op=admin_embed"></script>

PHP (no dependencies)

1

Save as opsiq-admin-chat.php. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

At the very top of every ADMIN page, before any output: require 'opsiq-admin-chat.php'; opsiq_admin_chat_refresh(); and before </body>: <?= opsiq_admin_chat_tag() ?> (it replaces the Option 3 loader).

3

Replace opsiq_admin_chat_user() with your signed-in staff member. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

opsiq-admin-chat.php
<?php
/* opsiq-admin-chat.php — sign your logged-in staff into OpsIQ Admin Chat. */

// WHO IS SIGNED IN AS STAFF — replace the body. Return null for anyone who is not staff.
function opsiq_admin_chat_user(): ?array
{
    $u = $_SESSION['admin'] ?? null;    // e.g. ['id' => 3, 'email' => '…', 'username' => '…', 'name' => '…', 'role' => 'Owner']
    return is_array($u) && !empty($u['id']) && !empty($u['email']) ? $u : null;
}

// The admin token is base64url(payload) . '.' . hex HMAC — NOT a JWT.
function opsiq_admin_chat_token(array $u): string
{
    $secret = (string) (getenv('OPSIQ_SITE_SECRET') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; the environment wins when set
    if ($secret === '') return '';                           // fail closed: no Admin Chat
    $now = time();
    $payload = rtrim(strtr(base64_encode(json_encode([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 3600,                      // at most 24 hours
        'authenticated' => true,
        'platform'      => 'php',
        'admin'         => [
            'id'       => (string) $u['id'],                 // REQUIRED
            'email'    => (string) $u['email'],              // REQUIRED
            'username' => (string) ($u['username'] ?? ''),
            'name'     => (string) ($u['name'] ?? ''),
            'role'     => (string) ($u['role'] ?? ''),
        ],
    ], JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
    return $payload . '.' . hash_hmac('sha256', $payload, $secret);
}

// Call at the top of every admin page, before any output.
function opsiq_admin_chat_refresh(): void
{
    if (empty($_GET['opsiq_identity_refresh'])) return;
    header('Content-Type: application/json; charset=utf-8');
    header('Cache-Control: no-store');
    $u = opsiq_admin_chat_user();
    $t = $u ? opsiq_admin_chat_token($u) : '';
    if ($t === '') { http_response_code(401); echo json_encode(['success' => false, 'login_required' => true]); exit; }
    echo json_encode(['success' => true, 'role' => 'admin', 'identity_token' => $t]);
    exit;
}

// Print before </body> on admin pages. Prints nothing for anyone who is not staff.
function opsiq_admin_chat_tag(): string
{
    $u = opsiq_admin_chat_user();
    $t = $u ? opsiq_admin_chat_token($u) : '';
    if ($t === '') return '';
    $src = 'https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=' . rawurlencode($t);
    return '<script async src="' . htmlspecialchars($src, ENT_QUOTES) . '" data-opsiq-widget="admin-chat"></script>';
}

Laravel

1

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET=… in .env with 'opsiq' => ['site_secret' => env('OPSIQ_SITE_SECRET')] in config/services.php on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Save the class as app/Support/OpsiqAdminChat.php; adjust isStaff() to your admin guard or role. Add the refresh middleware from the bottom of the code to your admin routes.

3

In your admin Blade layout before </body>: {!! \App\Support\OpsiqAdminChat::tag() !!}. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

app/Support/OpsiqAdminChat.php
<?php
// app/Support/OpsiqAdminChat.php — no packages needed.
namespace App\Support;

final class OpsiqAdminChat
{
    /** WHO IS STAFF — adjust to your admin guard, role or gate. */
    private static function staff()
    {
        $user = auth('web')->user();                    // or auth('admin')->user()
        return ($user && $user->can('access-admin')) ? $user : null;
    }

    /** The admin token is base64url(payload) . '.' . hex HMAC — NOT a JWT. */
    public static function token(): string
    {
        $user = self::staff();
        $secret = (string) (config('services.opsiq.site_secret') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; config wins when set
        if (!$user || $secret === '') return '';
        $now = time();
        $payload = rtrim(strtr(base64_encode(json_encode([
            'site_key'      => 'YOUR_SITE_KEY',
            'iat'           => $now,
            'exp'           => $now + 3600,
            'authenticated' => true,
            'platform'      => 'laravel',
            'admin'         => [
                'id'       => (string) $user->id,           // REQUIRED
                'email'    => (string) $user->email,        // REQUIRED
                'username' => (string) ($user->username ?? $user->email),
                'name'     => (string) $user->name,
                'role'     => 'Admin',
            ],
        ], JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
        return $payload . '.' . hash_hmac('sha256', $payload, $secret);
    }

    /** For the admin Blade layout, before </body>. Prints nothing for non-staff. */
    public static function tag(): string
    {
        $t = self::token();
        if ($t === '') return '';
        return '<script async src="' . e('https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=' . rawurlencode($t)) . '" data-opsiq-widget="admin-chat"></script>';
    }
}

/* Refresh — Admin Chat asks ?opsiq_identity_refresh=1&role=admin on the admin page it is on.
 * app/Http/Middleware/OpsiqAdminChatRefresh.php, added to your admin route group:
 *
 *   public function handle($request, \Closure $next) {
 *       if (!$request->query('opsiq_identity_refresh')) return $next($request);
 *       $t = \App\Support\OpsiqAdminChat::token();
 *       return $t === ''
 *           ? response()->json(['success' => false, 'login_required' => true], 401)->header('Cache-Control', 'no-store')
 *           : response()->json(['success' => true, 'role' => 'admin', 'identity_token' => $t])->header('Cache-Control', 'no-store');
 *   }
 */

WordPress / WooCommerce

1

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, add define('OPSIQ_SITE_SECRET', '…'); to wp-config.php instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Paste into your theme's functions.php or a small plugin. It shows Admin Chat inside wp-admin to users who can manage_options; change the capability to suit your team.

3

Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

functions.php
/* functions.php or a small plugin — OpsIQ Admin Chat inside wp-admin. */

if (!defined('OPSIQ_SITE_SECRET')) define('OPSIQ_SITE_SECRET', 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; wp-config.php wins when set

function opsiq_admin_chat_token(): string {
    if (!is_user_logged_in() || !current_user_can('manage_options')) return '';     // who counts as staff
    if (!defined('OPSIQ_SITE_SECRET') || OPSIQ_SITE_SECRET === '') return '';
    $u   = wp_get_current_user();
    $now = time();
    // The admin token is base64url(payload) . '.' . hex HMAC — NOT a JWT.
    $payload = rtrim(strtr(base64_encode(wp_json_encode([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 3600,
        'authenticated' => true,
        'platform'      => 'wordpress',
        'admin'         => [
            'id'       => (string) $u->ID,                   // REQUIRED
            'email'    => (string) $u->user_email,           // REQUIRED
            'username' => (string) $u->user_login,
            'name'     => (string) $u->display_name,
            'role'     => (string) (reset($u->roles) ?: 'administrator'),
        ],
    ])), '+/', '-_'), '=');
    return $payload . '.' . hash_hmac('sha256', $payload, OPSIQ_SITE_SECRET);
}

// Refresh: Admin Chat asks ?opsiq_identity_refresh=1&role=admin on the admin page it is on.
add_action('admin_init', function () {
    if (empty($_GET['opsiq_identity_refresh'])) return;
    nocache_headers();
    $t = opsiq_admin_chat_token();
    if ($t === '') wp_send_json(['success' => false, 'login_required' => true], 401);
    wp_send_json(['success' => true, 'role' => 'admin', 'identity_token' => $t]);
});

// The loader, on every wp-admin page, for staff only.
add_action('admin_footer', function () {
    $t = opsiq_admin_chat_token();
    if ($t === '') return;
    echo '<script async src="' . esc_url('https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=' . rawurlencode($t)) . '" data-opsiq-widget="admin-chat"></script>';
});

Node.js / Express

1

No packages needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

adminRouter.use(opsiqAdminChat) on your ADMIN routes, after your session middleware; adjust isStaff(). It answers the refresh and sets res.locals.opsiqAdminChatTag.

3

Print res.locals.opsiqAdminChatTag (unescaped) before </body> in your admin layout. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

opsiq-admin-chat.js
// opsiq-admin-chat.js — no packages needed.
const crypto = require("crypto");

const isStaff = (user) => !!(user && user.isAdmin);        // WHO IS STAFF — adjust

// The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
function opsiqAdminChatToken(user) {
  const secret = process.env.OPSIQ_SITE_SECRET || "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; the environment wins when set
  if (!isStaff(user) || !secret) return "";
  const now = Math.floor(Date.now() / 1000);
  const payload = Buffer.from(JSON.stringify({
    site_key: "YOUR_SITE_KEY",
    iat: now,
    exp: now + 3600,                                        // at most 24 hours
    authenticated: true,
    platform: "node",
    admin: { id: String(user.id), email: user.email, username: user.username || user.email, name: user.name || "", role: user.role || "Admin" },  // id + email REQUIRED
  })).toString("base64url");
  return payload + "." + crypto.createHmac("sha256", secret).update(payload).digest("hex");
}

// adminRouter.use(opsiqAdminChat)
function opsiqAdminChat(req, res, next) {
  const token = opsiqAdminChatToken(req.user);
  if (req.query.opsiq_identity_refresh) {
    res.set("Cache-Control", "no-store");
    return token
      ? res.json({ success: true, role: "admin", identity_token: token })
      : res.status(401).json({ success: false, login_required: true });
  }
  res.locals.opsiqAdminChatTag = token
    ? '<script async src="' + ("https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + encodeURIComponent(token)).replace(/"/g, """) + '" data-opsiq-widget="admin-chat"></script>'
    : "";
  next();
}

module.exports = { opsiqAdminChat };

Python (Flask)

1

No packages beyond Flask and flask-login. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Call init_opsiq_admin_chat(app) where you create the app, and adjust is_staff().

3

In your admin base template before </body>: {{ opsiq_admin_chat_tag }}. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

opsiq_admin_chat.py
# opsiq_admin_chat.py — Flask + flask-login, no other packages.
import base64, hashlib, hmac, json, os, time, urllib.parse
from flask import request, jsonify
from flask_login import current_user
from markupsafe import Markup, escape

def is_staff(user):                                           # WHO IS STAFF — adjust
    return user.is_authenticated and getattr(user, "is_admin", False)

def opsiq_admin_chat_token():
    secret = os.environ.get("OPSIQ_SITE_SECRET") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    if not secret or not is_staff(current_user):
        return ""
    now = int(time.time())
    # The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
    payload = base64.urlsafe_b64encode(json.dumps({
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": True, "platform": "python",
        "admin": {"id": str(current_user.id), "email": current_user.email,           # REQUIRED
                  "username": getattr(current_user, "username", current_user.email),
                  "name": getattr(current_user, "name", ""), "role": "Admin"},
    }, separators=(",", ":")).encode()).decode().rstrip("=")
    return payload + "." + hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()

def init_opsiq_admin_chat(app):
    @app.before_request
    def _opsiq_admin_refresh():
        if request.args.get("opsiq_identity_refresh"):
            t = opsiq_admin_chat_token()
            if t:
                resp = jsonify({"success": True, "role": "admin", "identity_token": t})
            else:
                resp = jsonify({"success": False, "login_required": True})
                resp.status_code = 401
            resp.headers["Cache-Control"] = "no-store"
            return resp

    @app.context_processor
    def _opsiq_admin_tag():
        t = opsiq_admin_chat_token()
        if not t:
            return {"opsiq_admin_chat_tag": ""}
        src = "https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + urllib.parse.quote(t, safe="")
        return {"opsiq_admin_chat_tag": Markup('<script async src="%s" data-opsiq-widget="admin-chat"></script>' % escape(src))}

Django

1

No packages needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in settings.py (for example os.environ["OPSIQ_SITE_SECRET"]) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Add "yourapp.opsiq_admin_chat.OpsiqAdminChatMiddleware" to MIDDLEWARE (after AuthenticationMiddleware) and "yourapp.opsiq_admin_chat.opsiq_admin_chat" to TEMPLATES context_processors. Staff = user.is_staff.

3

In your admin base template before </body>: {{ opsiq_admin_chat_tag }}. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

opsiq_admin_chat.py
# yourapp/opsiq_admin_chat.py — no packages needed.
import base64, hashlib, hmac, json, time, urllib.parse
from django.conf import settings
from django.http import JsonResponse
from django.utils.html import format_html

def opsiq_admin_chat_token(user):
    secret = getattr(settings, "OPSIQ_SITE_SECRET", "") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; settings win when set
    if not secret or not user.is_authenticated or not user.is_staff:
        return ""
    now = int(time.time())
    # The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
    payload = base64.urlsafe_b64encode(json.dumps({
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": True, "platform": "django",
        "admin": {"id": str(user.pk), "email": user.email, "username": user.get_username(),   # id + email REQUIRED
                  "name": user.get_full_name(), "role": "Superuser" if user.is_superuser else "Staff"},
    }, separators=(",", ":")).encode()).decode().rstrip("=")
    return payload + "." + hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()

class OpsiqAdminChatMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        if request.GET.get("opsiq_identity_refresh"):
            t = opsiq_admin_chat_token(request.user)
            resp = (JsonResponse({"success": True, "role": "admin", "identity_token": t}) if t
                    else JsonResponse({"success": False, "login_required": True}, status=401))
            resp["Cache-Control"] = "no-store"
            return resp
        return self.get_response(request)

def opsiq_admin_chat(request):
    t = opsiq_admin_chat_token(request.user)
    if not t:
        return {"opsiq_admin_chat_tag": ""}
    src = "https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + urllib.parse.quote(t, safe="")
    return {"opsiq_admin_chat_tag": format_html('<script async src="{}" data-opsiq-widget="admin-chat"></script>', src)}

.NET / C#

1

No packages needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OpsIQ:SiteSecret (user-secrets, the OpsIQ__SiteSecret environment variable or Key Vault) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

In Program.cs after app.UseAuthentication(): app.Use(OpsiqAdminChat.Refresh); staff = users in the "Admin" role (adjust).

3

In your admin layout before </body>: @Html.Raw(OpsiqAdminChat.Tag(Context)). Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

OpsiqAdminChat.cs
// OpsiqAdminChat.cs — no packages needed.
using System.Net;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;

public static class OpsiqAdminChat
{
    // The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
    public static string Token(HttpContext ctx)
    {
        var secret = ctx.RequestServices.GetRequiredService<IConfiguration>()["OpsIQ:SiteSecret"];
        if (string.IsNullOrEmpty(secret)) secret = "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; configuration wins when set
        if (string.IsNullOrEmpty(secret) || !ctx.User.IsInRole("Admin")) return "";      // WHO IS STAFF — adjust
        var now = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
        var json = JsonSerializer.Serialize(new Dictionary<string, object> {
            ["site_key"] = "YOUR_SITE_KEY", ["iat"] = now, ["exp"] = now + 3600,
            ["authenticated"] = true, ["platform"] = "dotnet",
            ["admin"] = new Dictionary<string, string> {
                ["id"] = ctx.User.FindFirstValue(ClaimTypes.NameIdentifier) ?? "",      // REQUIRED
                ["email"] = ctx.User.FindFirstValue(ClaimTypes.Email) ?? "",            // REQUIRED
                ["username"] = ctx.User.Identity?.Name ?? "", ["name"] = ctx.User.Identity?.Name ?? "", ["role"] = "Admin" },
        });
        var payload = Convert.ToBase64String(Encoding.UTF8.GetBytes(json)).TrimEnd('=').Replace('+', '-').Replace('/', '_');
        using var h = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
        return payload + "." + Convert.ToHexString(h.ComputeHash(Encoding.UTF8.GetBytes(payload))).ToLowerInvariant();
    }

    // app.Use(OpsiqAdminChat.Refresh)
    public static async Task Refresh(HttpContext ctx, Func<Task> next)
    {
        if (string.IsNullOrEmpty(ctx.Request.Query["opsiq_identity_refresh"])) { await next(); return; }
        ctx.Response.Headers["Cache-Control"] = "no-store";
        var t = Token(ctx);
        if (t == "") { ctx.Response.StatusCode = 401; await ctx.Response.WriteAsJsonAsync(new { success = false, login_required = true }); return; }
        await ctx.Response.WriteAsJsonAsync(new { success = true, role = "admin", identity_token = t });
    }

    public static string Tag(HttpContext ctx)
    {
        var t = Token(ctx);
        if (t == "") return "";
        return "<script async src=\"" + WebUtility.HtmlEncode("https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + Uri.EscapeDataString(t)) + "\" data-opsiq-widget=\"admin-chat\"></script>";
    }
}

Ruby on Rails

1

No gems needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

include OpsiqAdminChat in your admin base controller; adjust opsiq_staff.

3

In your admin layout before </body>: <%= opsiq_admin_chat_tag %>. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

app/controllers/concerns/opsiq_admin_chat.rb
# app/controllers/concerns/opsiq_admin_chat.rb — no gems needed.
require "base64"
require "cgi"
require "json"
require "openssl"

module OpsiqAdminChat
  extend ActiveSupport::Concern

  included do
    before_action :opsiq_admin_identity_refresh
    helper_method :opsiq_admin_chat_tag
  end

  private

  def opsiq_staff                                        # WHO IS STAFF — adjust
    current_user if respond_to?(:current_user, true) && current_user&.try(:admin?)
  end

  # The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
  def opsiq_admin_chat_token
    secret = ENV["OPSIQ_SITE_SECRET"].presence || "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    staff = opsiq_staff
    return "" if secret.blank? || staff.nil?
    now = Time.now.to_i
    payload = Base64.urlsafe_encode64({
      site_key: "YOUR_SITE_KEY", iat: now, exp: now + 3600,
      authenticated: true, platform: "rails",
      admin: { id: staff.id.to_s, email: staff.email,              # REQUIRED
               username: staff.try(:username).to_s, name: staff.try(:name).to_s, role: "Admin" }
    }.to_json, padding: false)
    payload + "." + OpenSSL::HMAC.hexdigest("SHA256", secret, payload)
  end

  def opsiq_admin_identity_refresh
    return unless params[:opsiq_identity_refresh].present?
    response.headers["Cache-Control"] = "no-store"
    t = opsiq_admin_chat_token
    return render(json: { success: false, login_required: true }, status: :unauthorized) if t.blank?
    render json: { success: true, role: "admin", identity_token: t }
  end

  def opsiq_admin_chat_tag
    t = opsiq_admin_chat_token
    return "" if t.blank?
    helpers.tag.script(nil, async: true, src: "https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=#{CGI.escape(t)}", data: { opsiq_widget: "admin-chat" })
  end
end

Java (Spring Boot)

1

No libraries needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set opsiq.site.secret (for example from OPSIQ_SITE_SECRET) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Replace staff() with your admin lookup. The filter answers the refresh; @ControllerAdvice exposes opsiqAdminChatTag to views.

3

Admin Thymeleaf layout before </body>: <th:block th:utext="${opsiqAdminChatTag}"/>. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

OpsiqAdminChat.java
// OpsiqAdminChat.java — no libraries needed.
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.util.HtmlUtils;

@Component
@ControllerAdvice
public class OpsiqAdminChat implements Filter {
    @Value("${opsiq.site.secret:opsiq_whsec_YOUR_SITE_SECRET}")   // this site's secret; opsiq.site.secret wins when set
    private String secret;

    /** WHO IS STAFF — replace: id, email, username, name, role. Null for anyone else. */
    private Map<String, String> staff(HttpServletRequest req) {
        if (req.getUserPrincipal() == null || !req.isUserInRole("ADMIN")) return null;
        String n = req.getUserPrincipal().getName();
        return Map.of("id", n, "email", n, "username", n, "name", n, "role", "Admin");
    }

    // The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
    String token(HttpServletRequest req) {
        Map<String, String> u = staff(req);
        if (u == null || secret.isEmpty()) return "";
        try {
            long now = System.currentTimeMillis() / 1000;
            Map<String, Object> claims = new LinkedHashMap<>();
            claims.put("site_key", "YOUR_SITE_KEY"); claims.put("iat", now); claims.put("exp", now + 3600);
            claims.put("authenticated", true); claims.put("platform", "java"); claims.put("admin", u);   // id + email REQUIRED
            String payload = Base64.getUrlEncoder().withoutPadding().encodeToString(new ObjectMapper().writeValueAsBytes(claims));
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
            return payload + "." + HexFormat.of().formatHex(mac.doFinal(payload.getBytes(StandardCharsets.UTF_8)));
        } catch (Exception e) { return ""; }
    }

    @Override // Admin Chat refreshing on the admin page it is on
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        if (req.getParameter("opsiq_identity_refresh") == null) { chain.doFilter(request, response); return; }
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("Cache-Control", "no-store");
        res.setContentType("application/json");
        String t = token(req);
        if (t.isEmpty()) { res.setStatus(401); res.getWriter().write("{\"success\":false,\"login_required\":true}"); return; }
        res.getWriter().write("{\"success\":true,\"role\":\"admin\",\"identity_token\":\"" + t + "\"}");
    }

    @ModelAttribute("opsiqAdminChatTag")
    public String tag(HttpServletRequest req) {
        String t = token(req);
        if (t.isEmpty()) return "";
        String src = "https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + URLEncoder.encode(t, StandardCharsets.UTF_8);
        return "<script async src=\"" + HtmlUtils.htmlEscape(src) + "\" data-opsiq-widget=\"admin-chat\"></script>";
    }
}

Go

1

No modules needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Replace staff() with your session lookup and wrap your admin router: OpsiqAdminChatRefresh(adminMux).

3

Pass OpsiqAdminChatTag(r) to your admin layout and print it before </body>. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

opsiq_admin_chat.go
// opsiq_admin_chat.go — standard library only.
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/base64"
    "encoding/hex"
    "encoding/json"
    "html"
    "html/template"
    "net/http"
    "net/url"
    "os"
    "time"
)

type OpsiqStaff struct{ ID, Email, Username, Name, Role string }

// WHO IS STAFF — replace with your session lookup. Return nil for anyone who is not staff.
func staff(r *http.Request) *OpsiqStaff { return nil }

// The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
func opsiqAdminChatToken(r *http.Request) string {
    u, secret := staff(r), os.Getenv("OPSIQ_SITE_SECRET")
    if secret == "" {
        secret = "opsiq_whsec_YOUR_SITE_SECRET" // this site's secret; the environment wins when set
    }
    if u == nil || secret == "" {
        return ""
    }
    now := time.Now().Unix()
    body, _ := json.Marshal(map[string]any{
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": true, "platform": "go",
        "admin": map[string]string{"id": u.ID, "email": u.Email, "username": u.Username, "name": u.Name, "role": u.Role}, // id + email REQUIRED
    })
    payload := base64.RawURLEncoding.EncodeToString(body)
    mac := hmac.New(sha256.New, []byte(secret))
    mac.Write([]byte(payload))
    return payload + "." + hex.EncodeToString(mac.Sum(nil))
}

// OpsiqAdminChatRefresh answers Admin Chat's ?opsiq_identity_refresh=1&role=admin.
func OpsiqAdminChatRefresh(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if r.URL.Query().Get("opsiq_identity_refresh") == "" {
            next.ServeHTTP(w, r)
            return
        }
        w.Header().Set("Cache-Control", "no-store")
        w.Header().Set("Content-Type", "application/json")
        if t := opsiqAdminChatToken(r); t != "" {
            json.NewEncoder(w).Encode(map[string]any{"success": true, "role": "admin", "identity_token": t})
            return
        }
        w.WriteHeader(http.StatusUnauthorized)
        json.NewEncoder(w).Encode(map[string]any{"success": false, "login_required": true})
    })
}

// OpsiqAdminChatTag prints the loader for staff only.
func OpsiqAdminChatTag(r *http.Request) template.HTML {
    t := opsiqAdminChatToken(r)
    if t == "" {
        return ""
    }
    src := "https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + url.QueryEscape(t)
    return template.HTML(`<script async src="` + html.EscapeString(src) + `" data-opsiq-widget="admin-chat"></script>`)
}

Implementasi identitas titik akhir pada Laravel (note keras-won)

Jika platform anda adalah Laravel (Botble, Bagisto, aplikasi langganan) dan titik akhir anda adalah fail standalone yang but kerangka kerja untuk membaca admin log masuk, tiga spesifikasi akan menjimatkan masa anda — masing-masing menghasilkan kegagalan pengeluaran sebenar sebelum ia dipelajari:

Ikat permintaan SEBELUM bootstrap

Penyedia perkhidmatan anda mungkin menyelesaikan request Laravel sendiri mengikat sepeda hidup yang ditangkap permintaan pertama di dalam Kernel::handle() Cermin - cermin yang urutan: $app->instance('request', Request::capture()) SEBEL $kernel->bootstrap(), atau Anda mendapatkan "Klas sasaran [permintaan] tidak wujud".

Prefiks session-cookie HMAC-keyed

Laravel moden memberi awalan pada nilai kuki dengan HMAC yang dikira DENGAN KUNCI APLIKASI (CookieValuePrefix) — sebuah dataran sha1(name."v2") Jangan pernah cocokkan dengan itu. CookieValuePrefix::validate($name, $decrypted, $keys), dengan struktur jatuh kembali (40Zahnic chars + | * Di posisi *40Beritahu: sesi id lebih panjang dari40chars (81Awalan = masih melekat) dan sesi yang hanya memuat dengan _token Di dalamnya.

Di mana login tinggal

\"Stempel Authentis\" adalah login_<guard>_<sha1(guard class)> Untuk penjaga web yang baku: 'login_web_' . sha1(Illuminate\Auth\SessionGuard::class)Pindai apapun login_* Kunci numerik α sebagai jatuh kembali untuk penjaga adat.

Umukan seperti jembatan lakukan

Kapal A debug=1 Mode oleof yang memberi nama STEP gagal dan pengecualian — tangkapan buta-semua membuat penyebaran langsung tidak terdiagnosable. Jembatan Botble (dari v1.0.7) adalah referensi: penanda langkah di kernel/bind/bootstrap/decrypt/session/auth/db.

Laravel · lengkap identitas titik akhir (salinan, set kedua konstanta, dilakukan)
<?php
/* identity endpoint · LARAVEL (Botble, Bagisto, any Laravel admin)
 * Drop this in your PUBLIC web root, e.g. /opsiq-identity.php
 * Answers: {"success":true,"authenticated":true,"admin":{...},"identity_token":"..."} */
define("OPSIQ_SITE_KEY", "SITE_KEY");
define("OPSIQ_SITE_SECRET", "opsiq_whsec_your_site_secret");   // Remote Sites → Codes

header("Content-Type: application/json");
$step = "boot";
try {
    require __DIR__ . "/../vendor/autoload.php";
    $app = require_once __DIR__ . "/../bootstrap/app.php";

    $step = "bind";
    // ORDER MATTERS: bind the request BEFORE bootstrapping, or providers that
    // resolve "request" during boot throw "Target class [request] does not exist".
    $request = Illuminate\Http\Request::capture();
    $app->instance("request", $request);

    $step = "bootstrap";
    $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
    $kernel->bootstrap();

    $step = "session";
    $app["session"]->driver()->setId($request->cookie(config("session.cookie")));
    $app["session"]->driver()->start();

    $step = "auth";
    $user = auth()->guard("web")->user();   // use YOUR admin guard name
    if (!$user) {
        echo json_encode(["success" => false, "authenticated" => false, "error" => "no admin session"]);
        exit;
    }

    $step = "sign";
    $admin = [
        "id"            => (string)$user->id,
        "name"          => (string)($user->name ?? $user->username),
        "username"      => (string)($user->username ?? $user->email),
        "email"         => (string)$user->email,
        "role"          => (string)optional($user->roles->first())->name,
        "authenticated" => true,
    ];
    $payload = json_encode([
        "site_key"      => OPSIQ_SITE_KEY,
        "iat"           => time(),
        "exp"           => time() + 6 * 3600,
        "authenticated" => true,          // TOP LEVEL — required
        "platform"      => "laravel",
        "admin"         => $admin,
    ], JSON_UNESCAPED_SLASHES);
    $p64   = rtrim(strtr(base64_encode($payload), "+/", "-_"), "=");
    $token = $p64 . "." . hash_hmac("sha256", $p64, OPSIQ_SITE_SECRET);

    echo json_encode(["success" => true, "authenticated" => true,
                      "admin" => $admin, "identity_token" => $token]);
} catch (\Throwable $e) {
    // debug=1 names the failing STEP — never ship a blind catch-all
    $err = ($_GET["debug"] ?? "") === "1"
        ? get_class($e) . " at [" . $step . "]: " . $e->getMessage()
        : "identity unavailable";
    echo json_encode(["success" => false, "authenticated" => false, "error" => $err]);
}

Type yang sama pada tumpukan lain

Hanya baris "siapa yang log masuk?" berubah — blok tandatangan sama di mana-mana. Tandatangan pada pelayan, tidak pernah dalam JavaScript.

WordPress · WHMCS· Symfony · PHP biasa — tukar pencarian, simpan penandatangan
<?php
/* The ONE helper every platform shares. Keep it verbatim. */
function opsiq_identity_token(array $admin, string $siteKey, string $secret, string $platform): string {
    $payload = json_encode([
        "site_key"      => $siteKey,
        "iat"           => time(),
        "exp"           => time() + 6 * 3600,
        "authenticated" => true,          // TOP LEVEL — OpsIQ refuses the token without it
        "platform"      => $platform,
        "admin"         => $admin + ["authenticated" => true],
    ], JSON_UNESCAPED_SLASHES);
    $p64 = rtrim(strtr(base64_encode($payload), "+/", "-_"), "=");
    return $p64 . "." . hash_hmac("sha256", $p64, $secret);
}

/* ── WORDPRESS ─────────────────────────────────────────────────────────── */
require_once ABSPATH . "wp-load.php";
if (!current_user_can("manage_options")) { /* not an admin → refuse */ }
$u = wp_get_current_user();
$admin = ["id" => (string)$u->ID, "name" => $u->display_name,
          "username" => $u->user_login, "email" => $u->user_email,
          "role" => implode(",", $u->roles)];

/* ── WHMCS (inside an addon/hook, admin area) ──────────────────────────── */
$aid = (int)($_SESSION["adminid"] ?? 0);
if ($aid <= 0) { /* not an admin → refuse */ }
$row = Capsule::table("tbladmins")->where("id", $aid)->first();
$admin = ["id" => (string)$row->id, "name" => trim($row->firstname . " " . $row->lastname),
          "username" => $row->username, "email" => $row->email, "role" => "administrator"];

/* ── SYMFONY ───────────────────────────────────────────────────────────── */
$u = $security->getUser();                    // Symfony\Bundle\SecurityBundle\Security
if (!$u) { /* not an admin → refuse */ }
$admin = ["id" => (string)$u->getId(), "name" => $u->getName(),
          "username" => $u->getUserIdentifier(), "email" => $u->getEmail(),
          "role" => implode(",", $u->getRoles())];

/* ── PLAIN PHP / your own app ──────────────────────────────────────────── */
session_start();
if (empty($_SESSION["admin_id"])) { /* not an admin → refuse */ }
$admin = ["id" => (string)$_SESSION["admin_id"], "name" => $_SESSION["admin_name"] ?? "",
          "username" => $_SESSION["admin_username"] ?? "", "email" => $_SESSION["admin_email"] ?? "",
          "role" => $_SESSION["admin_role"] ?? ""];

/* ── then, on EVERY stack ──────────────────────────────────────────────── */
$token = opsiq_identity_token($admin, "SITE_KEY", "opsiq_whsec_your_site_secret", "wordpress");
echo json_encode(["success" => true, "authenticated" => true,
                  "admin" => $admin, "identity_token" => $token]);

Apabila ia tidak berfungsi — diagnosis mengikut urutan ini

Kata konsol, tidak pernah muncul Widget, konsol mengatakan "token identiti admin ditandatangan diperlukan"

Tidak, tidak. identity_tokenBuka titik akhir URL langsung di dalam peramban admin yang masuk &debug=1 — anda akan melihat langkah gagal. Pada Laravel ini hampir selalunya item permintaan-ikatan atau cecikut-prefiks di atas.

Sejarah dan perbualan berfungsi, tetapi setiap giliran sembang menyatakan "Log masuk pentadbir diperlukan"

Ini adalah pembagian klasik. authenticated bendera — titik akhir widget itu sendiri menerima token, manakala pengesah kongsi di sebalik strim sembang menolaknya. Tambah "authenticated" => true beside exp.

--admin tidak disediakan dalam OpsIQ" Fiji (HTTP401)

Token telah disahkan, tetapi nama pengguna + e-melnya tidak sepadan OpsIQ ejen. Tambahkan ejen dalam OpsIQ → Pasukan, atau tambah emel platform ke senarai e-mel sepadan ejen itu apabila ia berbeza daripada mereka OpsIQ e- mel.

Keaneka_semua 403s dari peramban tetapi bekerja dengan curl

Sebuah lampu depan sedang menolak salah satu dari tajuk permintaanmu. OPTIONS echo dan gema asal permintaan, atau hindari saja tajuk suai — widget hanya perlu kuki.

Kemarin bekerja kemarin, gagal hari ini

Periksa exp: token sengaja dibuat berumur pendek. Widget menyiasat semula secara automatik, jadi ini biasanya bermaksud titik akhir berhenti melihat sesi — penggiliran kunci aplikasi, perubahan pemacu sesi, atau perubahan domain kuki.

💡
Widget admin untuk mensahkan tersembunyi sampai identitasnya selesai, dan setiap panggilan chat/inbox/data ditegakkan sisi-server terhadap yang cocok OpsIQ Agen agen polina terlepas dari apa pun yang dinyatakan oleh halaman. Token membuka UI; ijin selalu berasal dari OpsIQ.
Pembangun

Identitas layorator

Identiti menghubungkan pelawat tanpa nama dengan pelanggan yang dikenali. Apabila dikenal pasti, OpsIQ memautkan sejarah pelayaran, sembang dan tiket kepada profil pelanggan.

Bagaimana cara kerjanya
Identitas layoratorSatu aliran: pengguna log masuk di laman web anda, anda mengeluarkan token identiti bertandatangan, dan OpsIQ menyatukan sesi, sembang dan tiket mereka ke dalam satu profil.Log masuk ke log penggunaTuk di situsmuToken bertandatanganIdentiti identitas_token (HMAC)Profil iranfifisessions+ sembangTiket untuk nicket +
Identitas layorator

Dua tingkat identitas, dan ketika masing-masing cukup

Aras Adonan 1 — Dia seorang petunjuk yang tidak ditugaskan

Anda memberitahu widget siapa pelawat itu dengan objek JavaScript biasa. Ia mengisi e-mel dan id pelanggan pada log pelawat, jadi papan pemuka anda menunjukkan trafik yang log masuk dan sesi-sesi dicantumkan. Ia hanyalah PETUNJUK: sesiapa sahaja boleh menyuntingnya dalam pelayar mereka, jadi OpsIQ tidak sekali-kali mengeluarkan data akaun berdasarkannya.

Aras 2 — tanda pengenal

Pelayan anda menandatangani token berumur pendek dengan rahsia webhook tapak. OpsIQ mengesahkan tandatangan itu dan hanya selepas itu menganggap orang tersebut sebagai pelanggan yang terbukti. Inilah tahap yang membuka jawapan akaun dalam sembang pelanggan dan carian penyambung. Gunakannya untuk apa-apa yang tidak boleh dilihat oleh orang asing.

⚠️
Tahap 1 ialah kemudahan paparan. Tahap 2 ialah pengesahan identiti. Jika sesuatu soalan hanya boleh dijawab untuk pemegang akaun sebenar, anda memerlukan Tahap 2.
💡
Anda tidak perlu menulis Aras 2 dengan tangan: Tapak Jauh → tapak anda → Kod → C. Pelanggan yang dilog masuk menghasilkan kod tandatangan dan pengendali segar semula untuk PHP, WordPress, Laravel, Node.js, Python, Django,.NET, Rails, Java dan Go. WHMCS hook and the Botble sambungan jambatan telah menandatangani pelanggan. Identiti mengatakan siapa pelanggan; pesanan atau tempahan mereka mencapai sembang melalui sambungan (dengan fail jambatan hanya apabila platform tidak mempunyai ) API).

Aras 1 -- petunjuk tak bertandatangan

MUKA Set objek SEBELUM skrip widget, atau panggilan mengidentifikasi() nanti begitu aplikasi Anda tahu siapa yang ditandatangani. Kedua formulir dibaca; gunakan mana saja sesuai dengan halaman Anda.

JavaScript· kedua bentuk yang didukung
<!-- Form A: set the global before the loader -->
<script>
  window.OpsIQClient = {
    id:    "cust_1001",
    email: "[email protected]",
    name:  "Jane Smith",
    plan:  "pro"
  };
</script>
<script async src="https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY"></script>

<!-- Form B: identify later, e.g. after a client-side login -->
<script>
  window.opsiq.identify({
    id:    "cust_1001",
    email: "[email protected]",
    name:  "Jane Smith",
    plan:  "pro"
  });
</script>
⚠️
Only these forms are read: the window.OpsIQClient global, window.opsiqConfig.user, and window.opsiq.identify(). There is no OpsIQ.push(['identify', ...]) queue and no OpsIQClientSignature global — if you find either in an old note, it does nothing.

Aras 2 — token identitas-server

Tepat kontrak token yang sama dengan widget admin, dengan customer Subyek bukannya subjek admin Tanda tangani di server dan berikan ke widget. dua rincian memutuskan apakah itu membenarkan, dan keduanya mudah untuk salah:

HMAC meliputi rentetan BASE64URL, bukan JSON

Tandatangani $payload64Tidak $payloadTanda tangan mentah JSON menghasilkan token yang terlihat benar dan ditolak setiap kali dengan tanda tangan tidak cocok.

BARIS base64url, unpadded

Terjemahkan Terjelma +/ ke -_ Dan stripthe = Paddings. Plain base64 terjadi untuk bertahan hidup hari ini; base64url adalah kontrak dan merupakan apa yang setiap OpsIQ pemverifikasi dan referensi connector emitor emitions.

dikonfirmasi pergi di tingkat TOP

Fijiangola_ provinces. kgm site_key, iat dan exp. Ia ialah pengesahan anda bahawa manusia sebenar telah log masuk, dan OpsIQ menolak token tanpanya.

pelanggan. id adalah wajib

Token yang hanya membawa e-mel disahkan sebagai tandatangan dan kemudian digugurkan secara senyap. Sentiasa hantar id.

Tetap eksp pendek

Beberapa minit hingga beberapa jam. Token itu ialah penegasan sesi, bukan kelayakan untuk disimpan.

PHP - tandai token identitas pelanggan (kode ini tepat)
<?php
/* Server-signed customer identity. Runnable as-is: set the two constants. */
$siteKey = "YOUR_SITE_KEY";                        // Remote Sites -> Codes
$secret  = "opsiq_whsec_your_site_secret";         // Remote Sites -> Codes

$payload = json_encode([
    "site_key"      => $siteKey,
    "iat"           => time(),
    "exp"           => time() + 3600,
    "authenticated" => true,                       // TOP LEVEL - required
    "platform"      => "your-platform",
    "customer"      => [
        "id"            => (string)$user->id,      // REQUIRED
        "email"         => (string)$user->email,   // REQUIRED
        "name"          => (string)$user->name,
        "plan"          => (string)($user->plan ?? ""),
        "authenticated" => true,
    ],
], JSON_UNESCAPED_SLASHES);

/* base64url(payload) . "." . hex HMAC-SHA256 OF THAT STRING. */
$payload64 = rtrim(strtr(base64_encode($payload), "+/", "-_"), "=");
$token     = $payload64 . "." . hash_hmac("sha256", $payload64, $secret);

/* Hand it to the widget either way: */
printf(
    '<script async src="https://YOUR-OPSIQ/widget.php?site_key=%s&identity_token=%s"></script>',
    rawurlencode($siteKey),
    rawurlencode($token)
);
// or, if the loader is already on the page:
// echo '<script>window.opsiqConfig = window.opsiqConfig || {}; '
//    . 'window.opsiqConfig.identityToken = ' . json_encode($token) . ';</script>';
🚫
Tandatangan di pelayan sahaja. Token yang dijana dalam JavaScript pelayar bermakna menghantar rahsia laman kepada setiap pelawat, yang memberi sesiapa sahaja keupayaan untuk menyamar sebagai mana-mana pelanggan.

Kontrak yang sama, tiga permukaan

Sembang pelanggan di laman web anda

subjek pelanggan, dihantar sebagai identity_token kepada widget.php. Telah diterangkan di atas. Pilihan: dengan coretan A dan penyambung, sembang itu sudah mengesahkan pelanggan dengan sendirinya (nombor tempahan atau pesanan dengan bukti, atau kod yang dihantar melalui e-mel sebelum pesanan). Laman Jauh, Kod, C menjana kod untuk pengecaman automatik pelanggan yang sudah log masuk di laman anda.

Sembang pentadbir di dalam bahagian belakang anda

subjek admin, dihantar ke opsiq/embed/admin_widget. php. Penandatangan sama, kekunci subjek berbeza. Lihat "Widget Admin dalam bahagian belakang anda".

Sogijah Mendukung portal yang dalam

Varian yang lebih ketat: tuntutan yang sama serta jti dan single_use:true, dan hayat 120 saat, kerana token dihantar dalam URL dan mesti boleh digunakan sekali sahaja. Jangan tulis sendiri. Tetapan, Portal Sokongan mempunyai coretan sedia guna untuk bahasa anda, dan platform menjananya untuk anda apabila kawasan akaun anda berjalan pada pelayan ini.

Bagaimana jika pelawat mengosongkan kuki?+

Mereka menjadi anonim sampai mereka diidentifikasi lagi. OpsIQ Dia menghubungkan catatan anonim baru ke profil pelanggan saat petunjuk atau token tiba.

Mengapakah token saya disahkan untuk log pelawat tetapi tidak untuk soalan akaun?+

Itulah pembahagian Tahap 1 / Tahap 2. Petunjuk tanpa tandatangan mengisi log pelawat dan tiada apa-apa lagi. Jawapan akaun memerlukan tandatangan yang disahkan.

Pembangun

Portal sign-in: kode untuk setiap platform

Hantar pelanggan yang sudah log masuk ke aplikasi anda terus ke portal sokongan anda, dalam keadaan sudah log masuk, tanpa kata laluan kedua. Halaman ini menerangkan cara serahan itu berfungsi, setiap tuntutan dalam token, persediaan, dan laluan lengkap untuk setiap platform. Tetapan, Portal Sokongan memaparkan kod yang sama dengan alamat portal dan kunci ruang kerja anda sendiri telah diisi.

Bagaimana cara kerjanya

1
Pelanggan mengklik Sokongan dalam aplikasi anda

Pautan itu menghala ke laluan kecil pada pelayan ANDA, contohnya /support-portal. Jangan sekali-kali ke pautan yang sudah mengandungi token: token dalam halaman akan bocor melalui sumber halaman, sejarah pelayar dan pengepala Referer.

2
Periksa rute siapa yang menandatanganinya

Ia membaca pelanggan daripada sesi anda sendiri. Pelawat yang belum log masuk akan dihantar ke halaman log masuk anda dahulu dan kembali ke laluan tersebut selepas itu.

3
Rutenya menandakan token satu kali

JWT HS256 standard yang ditandatangani dengan rahsia tandatangan ruang kerja ini, yang hanya dipegang oleh pelayan anda. Ia tamat tempoh selepas 120 saat dan hanya boleh digunakan sekali.

4
Rute rute mengarah ke portal

Ke halaman portal asal pelanggan apabila portal memintanya (opsiq_portal_return, diterima hanya di dalam alamat portal anda), jika tidak ke halaman utama portal. Respons membawa Referrer-Policy: no-referrer dan Cache-Control: no-store.

5
Portal itu membenarkan dan menandatangani pelanggan di

Kegunaan, kunci ruang kerja, ekspiri dan id satu kali diperiksa. Pelanggan ditemukan atau dibuat melalui email dan permintaan mereka yang ada dicocokkan dengan mereka.

Token, klaim dengan klaim

site_key

Kunci ruang kerja Anda. Sebuah token yang dibuat untuk area kerja lain ditolak bahkan ketika ditandatangani dengan benar.

Menyalahkan

Masa dikeluarkan dan tamat tempoh, dalam saat. Token portal hidup selama 120 saat: ia hanya perlu bertahan untuk satu ubah hala.

Gagal disahkan: benar

Kenyataan aplikasi anda bahawa ia benar-benar telah melog masuk orang ini. Wajib, di peringkat teratas.

Veygon jti + single_use: benar

Sebuah id acak dan bendera satu kali. link yang sama tidak dapat digunakan dua kali.

Platform

Label bebas untuk asal pelanggan (php, wordpress, whmcs…). Dipaparkan dalam profil pelanggan.

pelanggan. id dan pelanggan. email

Kedua-duanya diperlukan. id adalah id pelanggan aplikasi anda sendiri; email adalah bagaimana portal menemukan pelanggan dan sesuai dengan permintaan mereka.

Nama pelanggan/ external_id

Nama paparan pilihan, dan id yang disimpan oleh OpsIQ untuk platform anda.

Tetapkan

1
Salin rutenya.

Tetapan, Portal Sokongan, Log masuk lancar daripada aplikasi anda. Pilih platform yang digunakan oleh aplikasi anda; kod di bawah senarai itu sudah diisi dengan alamat portal dan kunci ruang kerja anda, beserta nota bernombor untuk platform tersebut.

2
Rahasianya sudah ada dalam kode.

Laluan yang disalin mengandungi rahsia tandatangan ruang kerja ini, jadi ia berfungsi sebaik sahaja ditampal. Untuk mengelakkannya daripada berada dalam fail, tetapkan OPSIQ_SITE_SECRET (atau tetapan rangka kerja anda) pada pelayan: nilai itu digunakan terlebih dahulu. Jangan sekali-kali meletakkan laluan itu dalam halaman, JavaScript, aplikasi mudah alih atau repositori awam: sesiapa yang memegang rahsia itu boleh log masuk sebagai mana-mana pelanggan.

3
Pautkan butang Sokongan anda ke laluan

Misalnya https://your-app.com/support-portal.

4
Jadikan butang Log masuk portal menggunakan aplikasi anda

Portal Studio, halaman masuk, Gunakan login website saya, halaman login Anda URL: set ke rute yang sama. Portal menambahkan opsiq_portal_return dengan sendirinya dan rute membawa pelanggan kembali ke halaman itu, menandatanganinya.

5
Pilihan: tanda tangan di mana-mana

Tetapan, Portal Sokongan, Log keluar di mana-mana: URL log keluar aplikasi anda, supaya log keluar daripada portal turut melog keluar pelanggan daripada aplikasi anda.

6
Uji

Jana pautan ujian yang ditandatangani pada halaman tetapan yang sama untuk menyemak bahagian portal sahaja, kemudian buka laluan anda semasa log masuk ke aplikasi anda.

✅
WHMCS Tidak perlu kode: WHMCS hook dari Remote Sites sudah menandatangani klien ke portal dan membawa mereka kembali ke halaman mereka berada di.
💡
\"Rahasia Penandatanganan\" sudah ada untukmu. Dalam Tetapan, Portal Sokongan, Log masuk lancar daripada aplikasi anda, setiap contoh sudah mengandungi rahsia laman web ini sendiri, jadi kod berfungsi sebaik sahaja ditampal: tiada apa-apa yang perlu disalin atau dikonfigurasi. Contoh di halaman ini menunjukkan opsiq_whsec_YOUR_SITE_SECRET Setiap contoh mencari OPSIQ_SITE_SECRET (atau tetapan rangka kerja anda sendiri, yang dinamakan dalam notanya) pada pelayan terlebih dahulu dan menggunakannya apabila ia ditetapkan, supaya anda boleh memindahkan rahsia keluar dari fail bila-bila masa anda mahu, contohnya untuk memutarnya tanpa menyunting kod. Walau apa pun, fail itu berjalan pada pelayan anda sahaja: jangan sekali-kali menampalnya ke dalam halaman web atau JavaScript pelayar, dan jangan sekali-kali menyerahkannya ke repositori awam, kerana sesiapa yang memegang rahsia itu boleh log masuk sebagai mana-mana pelanggan atau kakitangan anda. WHMCS dan Botble tidak memerlukan semua ini: cangkuk WHMCS tiba dengan rahsia sudah diisi, dan panel penyambung Botble mengisikannya ke dalam jambatan.

Rute lengkap, platform demi platform

OpsIQ server (self-hosted)

1

For a self-hosted OpsIQ: the route runs on your own OpsIQ server, so there is no secret to copy. OpsIQ reads this workspace's signing secret itself.

2

Save it as a page on that server, e.g. support-portal.php, and point your "Support" link at it.

3

Replace the body of $currentUser so it returns your signed-in customer (id, email, name), or null for a guest, and /login with your login page.

OpsIQ server (self-hosted)
/* OpsIQ server (self-hosted) — save as e.g. support-portal.php on your OpsIQ
 * server and link your "Support" button to it. OpsIQ reads the workspace's
 * signing secret itself, so there is nothing secret to copy. */

if (!function_exists('opsiq_portal_signed_url_for_site')) {
    require_once '/path/to/opsiq/opsiq/opsiq.portal_identity.php';
}

// 1. WHO IS SIGNED IN — replace the body. Return null for a guest.
$currentUser = static function (): ?array {
    $u = $_SESSION['user'] ?? null;
    return is_array($u) && !empty($u['id']) && !empty($u['email']) ? $u : null;
};
$user = $currentUser();
if (!$user) {
    header('Location: /login?return=' . urlencode($_SERVER['REQUEST_URI'] ?? '/'), true, 302);
    exit;
}

// 2. WHERE TO LAND — the portal page they came from, only if it is on the portal.
$portal = 'https://YOUR-OPSIQ/portal/your-workspace';
$back   = preg_replace('/#.*$/', '', (string)($_GET['opsiq_portal_return'] ?? ''));
$target = ($back === $portal || strpos($back, $portal . '/') === 0 || strpos($back, $portal . '?') === 0)
    ? $back : $portal;

// 3. MINT a one-time link (120 s) for this workspace.
$url = opsiq_portal_signed_url_for_site($target, 'YOUR_SITE_KEY', [
    'id'    => $user['id'],        // REQUIRED
    'email' => $user['email'],     // REQUIRED
    'name'  => $user['name'] ?? '',
], 120);
if (!$url) {
    http_response_code(503);       // fail closed: never send a customer to a guessed address
    exit('Support portal is not configured yet.');
}

header('Referrer-Policy: no-referrer');   // the token is in the URL
header('Cache-Control: no-store');
header('Location: ' . $url, true, 302);
exit;

PHP (no dependencies)

1

Save the snippet as a page in your app, e.g. support-portal.php.

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment (hosting panel, .env or SetEnv) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Replace the body of $currentUser with your app's signed-in customer, and /login with your login page.

PHP (no dependencies)
/* support-portal.php — a redirect route in your own app.
 * Mint at CLICK time: a token baked into an href leaks through page source,
 * browser history and the Referer header. */

// 1. WHO IS SIGNED IN — replace the body with your app's own session. Return null for a guest.
$currentUser = static function (): ?array {
    $u = $_SESSION['user'] ?? null;            // e.g. ['id' => 7, 'email' => '…', 'name' => '…']
    return is_array($u) && !empty($u['id']) && !empty($u['email']) ? $u : null;
};
$user = $currentUser();
if (!$user) {                                  // a guest: sign in first, then come back here
    header('Location: /login?return=' . urlencode($_SERVER['REQUEST_URI'] ?? '/'), true, 302);
    exit;
}

// 2. THE SECRET — server-side only. Fail closed without it.
$secret = (string) (getenv('OPSIQ_SITE_SECRET') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; the environment wins when set
if ($secret === '') { http_response_code(503); exit('Support portal is not configured.'); }

// 3. WHERE TO LAND — the portal page they came from, only if it is on the portal.
$portal = 'https://YOUR-OPSIQ/portal/your-workspace';
$back   = preg_replace('/#.*$/', '', (string)($_GET['opsiq_portal_return'] ?? ''));
$target = ($back === $portal || strpos($back, $portal . '/') === 0 || strpos($back, $portal . '?') === 0)
    ? $back : $portal;

// 4. MINT the token (standard HS256 JWT).
$b64 = static function ($v) {
    return rtrim(strtr(base64_encode(json_encode($v, JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
};
$now = time();
$signing = $b64(['alg' => 'HS256', 'typ' => 'JWT']) . '.' . $b64([
    'site_key'      => 'YOUR_SITE_KEY',
    'iat'           => $now,
    'exp'           => $now + 120,                // URL-borne tokens live ~2 minutes
    'authenticated' => true,
    'jti'           => bin2hex(random_bytes(16)),
    'single_use'    => true,                      // one-time link; replay is refused
    'platform'      => 'php',
    'customer'      => [
        'id'          => $user['id'],             // REQUIRED
        'email'       => $user['email'],          // REQUIRED
        'name'        => $user['name'] ?? '',
        'external_id' => (string) $user['id'],
    ],
]);
$token = $signing . '.' . rtrim(strtr(base64_encode(hash_hmac('sha256', $signing, $secret, true)), '+/', '-_'), '=');

// 5. GO. The default is https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
$url = $target . (strpos($target, '?') === false ? '?' : '&')
     . 'site_key=' . rawurlencode('YOUR_SITE_KEY') . '&identity_token=' . rawurlencode($token);
header('Referrer-Policy: no-referrer');       // the token is in the URL
header('Cache-Control: no-store');
header('Location: ' . $url, true, 302);
exit;

Laravel

1

Run: composer require firebase/php-jwt

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET=… in .env with 'opsiq' => ['site_secret' => env('OPSIQ_SITE_SECRET')] in config/services.php on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Paste the route into routes/web.php. The auth middleware sends guests to your login and back.

Laravel
/* routes/web.php — composer require firebase/php-jwt
 * Link customers to  route('support.portal') */

Route::get('/support-portal', function (\Illuminate\Http\Request $request) {
    $user   = $request->user();                                   // guaranteed by ->middleware('auth')
    $secret = (string) (config('services.opsiq.site_secret') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; config wins when set
    abort_if($secret === '', 503, 'Support portal is not configured.');   // fail closed

    // Where to land: the portal page they came from, only if it is on the portal.
    $portal = 'https://YOUR-OPSIQ/portal/your-workspace';
    $back   = preg_replace('/#.*$/', '', (string) $request->query('opsiq_portal_return', ''));
    $target = ($back === $portal || str_starts_with($back, $portal . '/') || str_starts_with($back, $portal . '?'))
        ? $back : $portal;

    $now   = time();
    $token = \Firebase\JWT\JWT::encode([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 120,
        'authenticated' => true,
        'jti'           => bin2hex(random_bytes(16)),
        'single_use'    => true,
        'platform'      => 'laravel',
        'customer'      => [
            'id'          => $user->id,          // REQUIRED
            'email'       => $user->email,       // REQUIRED
            'name'        => $user->name,
            'external_id' => (string) $user->id,
        ],
    ], $secret, 'HS256');

    // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    $url = $target . (str_contains($target, '?') ? '&' : '?')
         . 'site_key=' . rawurlencode('YOUR_SITE_KEY') . '&identity_token=' . rawurlencode($token);

    return redirect()->away($url)
        ->header('Referrer-Policy', 'no-referrer')
        ->header('Cache-Control', 'no-store');
})->middleware('auth')->name('support.portal');

WordPress

1

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, add define('OPSIQ_SITE_SECRET', '…'); to wp-config.php, above "That's all, stop editing", instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Paste the snippet into your theme's functions.php, or a small plugin (Code Snippets works).

3

Create an empty page with the slug support-portal and link your "Support" menu item to it. Guests are sent to wp-login and back.

WordPress
/* functions.php, or a small plugin. Create an empty page with the slug
 * "support-portal" and link customers to it. */

add_action('template_redirect', function () {
    if (!is_page('support-portal')) return;
    if (!is_user_logged_in()) { auth_redirect(); }                 // login, then back here

    $secret = defined('OPSIQ_SITE_SECRET') ? OPSIQ_SITE_SECRET : 'opsiq_whsec_YOUR_SITE_SECRET';   // this site's secret; wp-config.php wins when set
    if ($secret === '') wp_die('Support portal is not configured.', '', ['response' => 503]);   // fail closed

    // Where to land: the portal page they came from, only if it is on the portal.
    $portal = 'https://YOUR-OPSIQ/portal/your-workspace';
    $back   = preg_replace('/#.*$/', '', isset($_GET['opsiq_portal_return']) ? wp_unslash((string) $_GET['opsiq_portal_return']) : '');
    $target = ($back === $portal || strpos($back, $portal . '/') === 0 || strpos($back, $portal . '?') === 0)
        ? $back : $portal;

    $user = wp_get_current_user();
    $b64  = static function ($v) {
        return rtrim(strtr(base64_encode(wp_json_encode($v)), '+/', '-_'), '=');
    };
    $now     = time();
    $signing = $b64(['alg' => 'HS256', 'typ' => 'JWT']) . '.' . $b64([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 120,
        'authenticated' => true,
        'jti'           => bin2hex(random_bytes(16)),
        'single_use'    => true,
        'platform'      => 'wordpress',
        'customer'      => [
            'id'          => $user->ID,              // REQUIRED
            'email'       => $user->user_email,      // REQUIRED
            'name'        => $user->display_name,
            'external_id' => (string) $user->ID,
        ],
    ]);
    $token = $signing . '.' . rtrim(strtr(base64_encode(hash_hmac('sha256', $signing, $secret, true)), '+/', '-_'), '=');

    // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    $url = $target . (strpos($target, '?') === false ? '?' : '&')
         . 'site_key=' . rawurlencode('YOUR_SITE_KEY') . '&identity_token=' . rawurlencode($token);
    nocache_headers();
    header('Cache-Control: no-store');
    header('Referrer-Policy: no-referrer');
    wp_redirect($url, 302);                                       // wp_redirect, not wp_safe_redirect: the portal is another host
    exit;
});

WHMCS

✅
Already using the OpsIQ WHMCS hook from Sites (includes/hooks/opsiq_tracker.php)? It already signs your customers into the portal and brings them back to the page they were on, so you do not need this snippet. Just set Portal Studio → Sign-in page → Your login page URL to your WHMCS client area login. Use the code below only if you are not installing that hook.
1

Save part 1 as opsiq_support.php in your WHMCS root (next to clientarea.php).

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the hook, set $opsiq_site_secret = '…'; in configuration.php instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Save part 2 as includes/hooks/opsiq_support_link.php to add Support to the client-area menu.

WHMCS
/* Two files you own — no OpsIQ module, nothing to keep updated.
 *
 * 1) Save this part as  opsiq_support.php  in your WHMCS root. */

require __DIR__ . '/init.php';

$ca = new WHMCS\ClientArea();
$ca->initPage();
$ca->requireLogin();                                         // login, then back here

$secret = '';
if (is_file(__DIR__ . '/configuration.php')) {
    include __DIR__ . '/configuration.php';                  // defines $opsiq_site_secret
    $secret = isset($opsiq_site_secret) ? (string) $opsiq_site_secret : 'opsiq_whsec_YOUR_SITE_SECRET';   // this site's secret; configuration.php wins when set
}
if ($secret === '') { http_response_code(503); exit('Support portal is not configured.'); }   // fail closed

// Where to land: the portal page they came from, only if it is on the portal.
$portal = 'https://YOUR-OPSIQ/portal/your-workspace';
$back   = preg_replace('/#.*$/', '', (string)($_GET['opsiq_portal_return'] ?? ''));
$target = ($back === $portal || strpos($back, $portal . '/') === 0 || strpos($back, $portal . '?') === 0)
    ? $back : $portal;

$uid    = (int) $ca->getUserID();
$client = localAPI('GetClientsDetails', ['clientid' => $uid]);

$b64 = static function ($v) {
    return rtrim(strtr(base64_encode(json_encode($v, JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
};
$now     = time();
$signing = $b64(['alg' => 'HS256', 'typ' => 'JWT']) . '.' . $b64([
    'site_key'      => 'YOUR_SITE_KEY',
    'iat'           => $now,
    'exp'           => $now + 120,
    'authenticated' => true,
    'jti'           => bin2hex(random_bytes(16)),
    'single_use'    => true,
    'platform'      => 'whmcs',
    'customer'      => [
        'id'          => $uid,                       // REQUIRED
        'email'       => $client['email'] ?? '',     // REQUIRED
        'name'        => trim(($client['firstname'] ?? '') . ' ' . ($client['lastname'] ?? '')),
        'external_id' => (string) $uid,
    ],
]);
$token = $signing . '.' . rtrim(strtr(base64_encode(hash_hmac('sha256', $signing, $secret, true)), '+/', '-_'), '=');

// Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
$url = $target . (strpos($target, '?') === false ? '?' : '&')
     . 'site_key=' . rawurlencode('YOUR_SITE_KEY') . '&identity_token=' . rawurlencode($token);
header('Referrer-Policy: no-referrer');
header('Cache-Control: no-store');
header('Location: ' . $url, true, 302);
exit;

/* 2) And this part as  includes/hooks/opsiq_support_link.php  to put a
 *    Support entry in the client-area navbar:
 *
 *    add_hook('ClientAreaPrimaryNavbar', 1, function ($navbar) {
 *        $navbar->addChild('opsiqSupport', [
 *            'label' => 'Support',
 *            'uri'   => 'opsiq_support.php',
 *            'order' => 60,
 *        ]);
 *    });
 */

Node.js / Express

1

Run: npm i jsonwebtoken

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment (.env with dotenv, or your host's settings) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Paste the route after your session / passport setup. Change /login if your login page lives elsewhere.

Node.js / Express
// npm i jsonwebtoken
const jwt = require("jsonwebtoken");
const crypto = require("crypto");

const PORTAL = "https://YOUR-OPSIQ/portal/your-workspace";
const onPortal = (u) => u === PORTAL || u.startsWith(PORTAL + "/") || u.startsWith(PORTAL + "?");

app.get("/support-portal", (req, res) => {
  const user = req.user;                                  // set by your session / passport
  if (!user) return res.redirect("/login?next=" + encodeURIComponent(req.originalUrl));

  const secret = process.env.OPSIQ_SITE_SECRET || "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; the environment wins when set
  if (!secret) return res.status(503).send("Support portal is not configured.");   // fail closed

  // Where to land: the portal page they came from, only if it is on the portal.
  const back = String(req.query.opsiq_portal_return || "").replace(/#.*$/, "");
  const target = onPortal(back) ? back : PORTAL;

  const token = jwt.sign({
    site_key: "YOUR_SITE_KEY",
    authenticated: true,
    jti: crypto.randomBytes(16).toString("hex"),
    single_use: true,                                     // one-time link
    platform: "node",
    customer: {
      id: user.id,                                        // REQUIRED
      email: user.email,                                  // REQUIRED
      name: user.name,
      external_id: String(user.id),
    },
  }, secret, { algorithm: "HS256", expiresIn: 120 });     // sets iat + exp

  // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
  const url = target + (target.includes("?") ? "&" : "?")
    + "site_key=" + encodeURIComponent("YOUR_SITE_KEY") + "&identity_token=" + encodeURIComponent(token);
  res.set("Referrer-Policy", "no-referrer").set("Cache-Control", "no-store").redirect(302, url);
});

Node.js (no dependencies)

1

No packages needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Replace currentUser() with your app's signed-in customer, then call supportPortal(req, res) for GET /support-portal in your server.

Node.js (no dependencies)
// No packages needed — Node's own crypto is enough.
const crypto = require("crypto");

const PORTAL = "https://YOUR-OPSIQ/portal/your-workspace";
const b64 = (obj) => Buffer.from(JSON.stringify(obj)).toString("base64url");

// 1. WHO IS SIGNED IN — replace with your app's session lookup. Return null for a guest.
function currentUser(req) {
  return req.user || null;                                // { id, email, name }
}

// GET /support-portal
function supportPortal(req, res) {
  const here = new URL(req.url, "http://local");
  const user = currentUser(req);
  if (!user) {                                            // a guest: sign in first, then come back
    res.writeHead(302, { Location: "/login?next=" + encodeURIComponent(req.url) });
    return res.end();
  }
  const secret = process.env.OPSIQ_SITE_SECRET || "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; the environment wins when set
  if (!secret) { res.writeHead(503); return res.end("Support portal is not configured."); }

  // Where to land: the portal page they came from, only if it is on the portal.
  const back = (here.searchParams.get("opsiq_portal_return") || "").replace(/#.*$/, "");
  const target = (back === PORTAL || back.startsWith(PORTAL + "/") || back.startsWith(PORTAL + "?")) ? back : PORTAL;

  const now = Math.floor(Date.now() / 1000);
  const signing = b64({ alg: "HS256", typ: "JWT" }) + "." + b64({
    site_key: "YOUR_SITE_KEY",
    iat: now,
    exp: now + 120,
    authenticated: true,
    jti: crypto.randomBytes(16).toString("hex"),
    single_use: true,
    platform: "node",
    customer: { id: user.id, email: user.email, name: user.name, external_id: String(user.id) },
  });
  const token = signing + "." + crypto.createHmac("sha256", secret).update(signing).digest("base64url");

  // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
  const url = target + (target.includes("?") ? "&" : "?")
    + "site_key=" + encodeURIComponent("YOUR_SITE_KEY") + "&identity_token=" + encodeURIComponent(token);
  res.writeHead(302, { Location: url, "Referrer-Policy": "no-referrer", "Cache-Control": "no-store" });
  res.end();
}

Python (Flask / FastAPI)

1

Run: pip install pyjwt (the Flask example also uses flask-login).

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Paste into the module that creates your app. @login_required sends guests to your login view and back.

Python (Flask / FastAPI)
# pip install pyjwt flask-login
import os, secrets, time, urllib.parse
import jwt
from flask import request, redirect, abort
from flask_login import login_required, current_user

PORTAL = "https://YOUR-OPSIQ/portal/your-workspace"

def portal_link(user, back=""):
    secret = os.environ.get("OPSIQ_SITE_SECRET") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    if not secret:
        abort(503, "Support portal is not configured.")     # fail closed
    back = back.split("#", 1)[0]
    target = back if (back == PORTAL or back.startswith(PORTAL + "/") or back.startswith(PORTAL + "?")) else PORTAL
    now = int(time.time())
    token = jwt.encode({
        "site_key": "YOUR_SITE_KEY",
        "iat": now,
        "exp": now + 120,                                   # URL-borne: ~2 minutes
        "authenticated": True,
        "jti": secrets.token_hex(16),
        "single_use": True,                                 # one-time link
        "platform": "python",
        "customer": {
            "id": user.id,                                  # REQUIRED
            "email": user.email,                            # REQUIRED
            "name": getattr(user, "name", ""),
            "external_id": str(user.id),
        },
    }, secret, algorithm="HS256")
    # Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    return (target + ("&" if "?" in target else "?")
            + "site_key=" + urllib.parse.quote("YOUR_SITE_KEY", safe="")
            + "&identity_token=" + urllib.parse.quote(token, safe=""))

@app.route("/support-portal")
@login_required
def support_portal():
    resp = redirect(portal_link(current_user, request.args.get("opsiq_portal_return", "")), code=302)
    resp.headers["Referrer-Policy"] = "no-referrer"
    resp.headers["Cache-Control"] = "no-store"
    return resp

Django

1

Run: pip install pyjwt

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in settings.py (for example os.environ["OPSIQ_SITE_SECRET"]) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Paste the view into views.py and add path("support-portal/", views.support_portal) to urls.py. @login_required sends guests to LOGIN_URL and back.

Django
# pip install pyjwt   —   urls.py: path("support-portal/", views.support_portal)
import secrets, time, urllib.parse
import jwt
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, HttpResponseRedirect

PORTAL = "https://YOUR-OPSIQ/portal/your-workspace"

@login_required
def support_portal(request):
    secret = getattr(settings, "OPSIQ_SITE_SECRET", "") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; settings win when set
    if not secret:                                       # fail closed
        return HttpResponse("Support portal is not configured.", status=503)

    # Where to land: the portal page they came from, only if it is on the portal.
    back = request.GET.get("opsiq_portal_return", "").split("#", 1)[0]
    target = back if (back == PORTAL or back.startswith(PORTAL + "/") or back.startswith(PORTAL + "?")) else PORTAL

    now = int(time.time())
    token = jwt.encode({
        "site_key": "YOUR_SITE_KEY",
        "iat": now,
        "exp": now + 120,
        "authenticated": True,
        "jti": secrets.token_hex(16),
        "single_use": True,
        "platform": "django",
        "customer": {
            "id": request.user.pk,                        # REQUIRED
            "email": request.user.email,                  # REQUIRED
            "name": request.user.get_full_name(),
            "external_id": str(request.user.pk),
        },
    }, secret, algorithm="HS256")

    # Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    url = (target + ("&" if "?" in target else "?")
           + "site_key=" + urllib.parse.quote("YOUR_SITE_KEY", safe="")
           + "&identity_token=" + urllib.parse.quote(token, safe=""))
    resp = HttpResponseRedirect(url)
    resp["Referrer-Policy"] = "no-referrer"
    resp["Cache-Control"] = "no-store"
    return resp

.NET / C#

1

Run: dotnet add package System.IdentityModel.Tokens.Jwt

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OpsIQ:SiteSecret (user-secrets, the OpsIQ__SiteSecret environment variable or Key Vault) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Paste into Program.cs after app.UseAuthentication(). RequireAuthorization() sends guests to your login and back.

.NET / C#
// dotnet add package System.IdentityModel.Tokens.Jwt   —   Program.cs
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;

const string Portal = "https://YOUR-OPSIQ/portal/your-workspace";

app.MapGet("/support-portal", (HttpContext ctx, IConfiguration cfg) =>
{
    var secret = cfg["OpsIQ:SiteSecret"];
    if (string.IsNullOrEmpty(secret)) secret = "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; configuration wins when set
    if (string.IsNullOrEmpty(secret))                     // fail closed
        return Results.StatusCode(503);

    var id    = ctx.User.FindFirstValue(ClaimTypes.NameIdentifier) ?? "";   // REQUIRED
    var email = ctx.User.FindFirstValue(ClaimTypes.Email) ?? "";            // REQUIRED
    var name  = ctx.User.Identity?.Name ?? "";

    // Where to land: the portal page they came from, only if it is on the portal.
    var back = (ctx.Request.Query["opsiq_portal_return"].ToString()).Split('#')[0];
    var target = (back == Portal || back.StartsWith(Portal + "/") || back.StartsWith(Portal + "?")) ? back : Portal;

    var key   = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
    var now   = DateTimeOffset.UtcNow;
    var payload = new JwtPayload
    {
        { "site_key",      "YOUR_SITE_KEY" },
        { "iat",           now.ToUnixTimeSeconds() },
        { "exp",           now.AddSeconds(120).ToUnixTimeSeconds() },
        { "authenticated", true },
        { "jti",           Guid.NewGuid().ToString("N") },
        { "single_use",    true },
        { "platform",      "dotnet" },
        { "customer", new Dictionary<string, object>
            { { "id", id }, { "email", email }, { "name", name }, { "external_id", id } } },
    };
    var token = new JwtSecurityTokenHandler().WriteToken(new JwtSecurityToken(new JwtHeader(creds), payload));

    // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    var url = target + (target.Contains('?') ? "&" : "?")
        + "site_key=" + Uri.EscapeDataString("YOUR_SITE_KEY") + "&identity_token=" + Uri.EscapeDataString(token);
    ctx.Response.Headers["Referrer-Policy"] = "no-referrer";
    ctx.Response.Headers["Cache-Control"] = "no-store";
    return Results.Redirect(url);
}).RequireAuthorization();

Ruby on Rails

1

Add gem "jwt" to the Gemfile and run bundle install.

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment (or Rails credentials) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Save as app/controllers/support_controller.rb and add get "/support-portal", to: "support#portal" to routes.rb. Devise's authenticate_user! sends guests to login and back.

Ruby on Rails
# Gemfile: gem "jwt"   —   routes.rb: get "/support-portal", to: "support#portal"
require "jwt"
require "securerandom"
require "cgi"

class SupportController < ApplicationController
  before_action :authenticate_user!                      # login, then back here

  PORTAL = "https://YOUR-OPSIQ/portal/your-workspace"

  def portal
    secret = ENV["OPSIQ_SITE_SECRET"].presence || "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    return head :service_unavailable if secret.blank?    # fail closed

    # Where to land: the portal page they came from, only if it is on the portal.
    back = params[:opsiq_portal_return].to_s.split("#").first.to_s
    target = (back == PORTAL || back.start_with?(PORTAL + "/", PORTAL + "?")) ? back : PORTAL

    now = Time.now.to_i
    token = JWT.encode({
      site_key:      "YOUR_SITE_KEY",
      iat:           now,
      exp:           now + 120,
      authenticated: true,
      jti:           SecureRandom.hex(16),
      single_use:    true,
      platform:      "rails",
      customer: {
        id:          current_user.id,                    # REQUIRED
        email:       current_user.email,                 # REQUIRED
        name:        current_user.try(:name).to_s,
        external_id: current_user.id.to_s
      }
    }, secret, "HS256")

    # Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    url = target + (target.include?("?") ? "&" : "?") +
          "site_key=#{CGI.escape("YOUR_SITE_KEY")}&identity_token=#{CGI.escape(token)}"
    response.headers["Referrer-Policy"] = "no-referrer"
    response.headers["Cache-Control"] = "no-store"
    redirect_to url, allow_other_host: true
  end
end

Java (Spring Boot)

1

Add io.jsonwebtoken:jjwt-api, jjwt-impl and jjwt-jackson (0.12+).

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set opsiq.site.secret in application.properties (for example from OPSIQ_SITE_SECRET) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Replace currentUser() with your user lookup. With Spring Security the route must be authenticated so guests go to login and back.

Java (Spring Boot)
// io.jsonwebtoken:jjwt-api / jjwt-impl / jjwt-jackson (0.12+)
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import jakarta.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.Principal;
import java.time.Instant;
import java.util.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.servlet.view.RedirectView;

@Controller
public class SupportPortalController {
    private static final String PORTAL = "https://YOUR-OPSIQ/portal/your-workspace";

    @Value("${opsiq.site.secret:opsiq_whsec_YOUR_SITE_SECRET}")   // this site's secret; opsiq.site.secret wins when set
    private String secret;

    /** WHO IS SIGNED IN — replace with your own lookup: id, email, name. */
    private Map<String, Object> currentUser(Principal principal) {
        return Map.of("id", principal.getName(), "email", principal.getName(), "name", principal.getName());
    }

    @GetMapping("/support-portal")
    public RedirectView supportPortal(Principal principal, HttpServletResponse response,
                                      @RequestParam(name = "opsiq_portal_return", defaultValue = "") String back) {
        if (principal == null) return new RedirectView("/login");               // login, then back here
        if (secret.isEmpty()) throw new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE);   // fail closed

        // Where to land: the portal page they came from, only if it is on the portal.
        back = back.split("#", 2)[0];
        String target = (back.equals(PORTAL) || back.startsWith(PORTAL + "/") || back.startsWith(PORTAL + "?")) ? back : PORTAL;

        Map<String, Object> user = currentUser(principal);
        Map<String, Object> customer = Map.of(
            "id",          user.get("id"),                 // REQUIRED
            "email",       user.get("email"),              // REQUIRED
            "name",        user.get("name"),
            "external_id", String.valueOf(user.get("id")));

        Instant now = Instant.now();
        String token = Jwts.builder()
            .claim("site_key", "YOUR_SITE_KEY")
            .claim("authenticated", true)
            .claim("single_use", true)                     // one-time link
            .claim("platform", "java")
            .claim("customer", customer)
            .id(UUID.randomUUID().toString())              // jti
            .issuedAt(Date.from(now))
            .expiration(Date.from(now.plusSeconds(120)))
            .signWith(Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)), Jwts.SIG.HS256)
            .compact();

        // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
        String url = target + (target.contains("?") ? "&" : "?")
            + "site_key=" + URLEncoder.encode("YOUR_SITE_KEY", StandardCharsets.UTF_8)
            + "&identity_token=" + URLEncoder.encode(token, StandardCharsets.UTF_8);
        response.setHeader("Referrer-Policy", "no-referrer");
        response.setHeader("Cache-Control", "no-store");
        return new RedirectView(url);
    }
}

Go

1

Run: go get github.com/golang-jwt/jwt/v5

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Replace currentUser() with your session lookup and register http.HandleFunc("/support-portal", supportPortal).

Go
// go get github.com/golang-jwt/jwt/v5
package main

import (
    "crypto/rand"
    "encoding/hex"
    "fmt"
    "net/http"
    "net/url"
    "os"
    "strings"
    "time"

    "github.com/golang-jwt/jwt/v5"
)

const portal = "https://YOUR-OPSIQ/portal/your-workspace"

type User struct{ ID, Email, Name string }

// WHO IS SIGNED IN — replace with your session lookup. Return nil for a guest.
func currentUser(r *http.Request) *User { return nil }

func supportPortal(w http.ResponseWriter, r *http.Request) {
    user := currentUser(r)
    if user == nil { // login, then back here
        http.Redirect(w, r, "/login?next="+url.QueryEscape(r.URL.RequestURI()), http.StatusFound)
        return
    }
    secret := os.Getenv("OPSIQ_SITE_SECRET")
    if secret == "" {
        secret = "opsiq_whsec_YOUR_SITE_SECRET" // this site's secret; the environment wins when set
    }
    if secret == "" { // fail closed
        http.Error(w, "Support portal is not configured.", http.StatusServiceUnavailable)
        return
    }

    // Where to land: the portal page they came from, only if it is on the portal.
    back := strings.SplitN(r.URL.Query().Get("opsiq_portal_return"), "#", 2)[0]
    target := portal
    if back == portal || strings.HasPrefix(back, portal+"/") || strings.HasPrefix(back, portal+"?") {
        target = back
    }

    jti := make([]byte, 16)
    rand.Read(jti)
    now := time.Now().Unix()
    token, err := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
        "site_key":      "YOUR_SITE_KEY",
        "iat":           now,
        "exp":           now + 120,
        "authenticated": true,
        "jti":           hex.EncodeToString(jti),
        "single_use":    true,
        "platform":      "go",
        "customer": map[string]any{
            "id":          user.ID,    // REQUIRED
            "email":       user.Email, // REQUIRED
            "name":        user.Name,
            "external_id": fmt.Sprint(user.ID),
        },
    }).SignedString([]byte(secret))
    if err != nil {
        http.Error(w, "sign failed", http.StatusInternalServerError)
        return
    }

    // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    sep := "?"
    if strings.Contains(target, "?") {
        sep = "&"
    }
    w.Header().Set("Referrer-Policy", "no-referrer")
    w.Header().Set("Cache-Control", "no-store")
    http.Redirect(w, r, target+sep+"site_key="+url.QueryEscape("YOUR_SITE_KEY")+"&identity_token="+url.QueryEscape(token), http.StatusFound)
}

Ketika ada sesuatu yang salah

Portal terbuka, tapi ditandatangani

Rahsia atau kunci ruang kerja tidak sepadan dengan ruang kerja ini, token lebih lama daripada 120 saat (semak jam pelayan), atau pautan yang sama dibuka dua kali. Jana pautan ujian bertandatangan: jika ia berfungsi, bandingkan tuntutan token anda dengan contoh.

Itu selalu mendarat di portal rumah

Alamat pemulangan tidak berada di dalam alamat portal anda, jadi ia sengaja diabaikan. Bandingkan dengan URL Portal yang dipaparkan dalam Tetapan.

Tamu-tamu Tego mendapat kesalahan daripada log masuk anda

Cari /login pada route dengan halaman log masuk anda yang sebenarnya, dan pastikan daftar masuk anda kembali ke alamat yang diberikan.

Ini bekerja untuk beberapa pelanggan saja

ouser. email atau customer. id kosong untuk mereka.

Pembangun

confident log-in pelanggan

Pilihan. Kebanyakan laman web tidak memerlukan ini: dengan coretan sembang biasa dan penyambung, sembang mengesahkan pelanggan dengan sendiri, menggunakan nombor tempahan atau pesanan beserta bukti untuk carian dan kod yang dihantar melalui e-mel sebelum membuat pesanan. Tambahkan ini apabila anda mahu pelanggan yang sudah log masuk di laman web anda dikenali secara automatik, bersama seluruh akaunnya. WHMCS sudah melakukannya melalui cangkuknya. Laman Jauh, laman web anda, Kod, C memaparkan kod yang sama dengan kunci laman anda telah diisi.

Bagaimana cara kerjanya

1
Halaman anda mencetak tag sembang

Untuk pelanggan bertandatangan widget URL borough &identity_tokenTidak ada rahasia di halaman: hanya sebuah token yang berakhir.

2
Sembang mengesahkan token

Tandatangan, kunci ruang kerja dan tarikh luput. Pelanggan kemudiannya dikenali pada setiap permintaan sembang, dan penyambung anda boleh menjawab tentang pesanan, tempahan atau invois mereka sendiri.

3
Sewa chat ini segar sebelum jam selesai

Ia memanggil halaman yang ia berada pada dengan?opsiq_identity_refresh=1&role=pelanggan. Kod anda menjawab {"success":true,"identity_token":"…"} semasa pelanggan dilog masuk, atau 401 dengan {"success":false,"login_required":true} bila mereka tidak. Itulah sebabnya pengendali kemaskini mesti berjalan sebelum halaman anda mencetak apa-apa.

Bagaimana ia berbeza daripada token portal

Masa Hidup

Satu jam (exp = iat + 3600) dan bukannya 120 saat, kerana ia dibawa bersama setiap permintaan sembang dan bukannya satu ubah hala.

Tak ada jti atau single_use

Token yang sama digunakan untuk setiap pesan sampai menyegarkan menggantikan itu.

Sama seperti yang lain.

site_key, iat, exp, diotentikasi: benar, platform, dan pelanggan dengan id dan email yang diperlukan. rahasia yang sama, tanda tangan yang sama.

💡
Identiti menyatakan SIAPA pelanggan itu. Pesanan, tempahan atau invois mereka sampai ke sembang melalui penyambung: penyambung yang memanggil API platform anda, atau, apabila platform anda tiada API, penyambung beserta fail jambatannya (pembina penyambung akan membuatnya).
💡
\"Rahasia Penandatanganan\" sudah ada untukmu. Dalam Laman Jauh, laman web anda, Kod, C, setiap contoh sudah mengandungi rahsia laman web ini sendiri, jadi kod berfungsi sebaik sahaja ditampal: tiada apa-apa yang perlu disalin atau dikonfigurasi. Contoh di halaman ini menunjukkan opsiq_whsec_YOUR_SITE_SECRET Setiap contoh mencari OPSIQ_SITE_SECRET (atau tetapan rangka kerja anda sendiri, yang dinamakan dalam notanya) pada pelayan terlebih dahulu dan menggunakannya apabila ia ditetapkan, supaya anda boleh memindahkan rahsia keluar dari fail bila-bila masa anda mahu, contohnya untuk memutarnya tanpa menyunting kod. Walau apa pun, fail itu berjalan pada pelayan anda sahaja: jangan sekali-kali menampalnya ke dalam halaman web atau JavaScript pelayar, dan jangan sekali-kali menyerahkannya ke repositori awam, kerana sesiapa yang memegang rahsia itu boleh log masuk sebagai mana-mana pelanggan atau kakitangan anda. WHMCS dan Botble tidak memerlukan semua ini: cangkuk WHMCS tiba dengan rahsia sudah diisi, dan panel penyambung Botble mengisikannya ke dalam jambatan.

Kode lengkap, platform demi platform

WHMCS

✅
Nothing to add: the WHMCS hook in Option 1 already signs your signed-in clients into the chat, refreshes the token on long visits, and signs staff into Admin Chat. No connector is needed for this.
1

Install the Option 1 hook as includes/hooks/opsiq_tracker.php. Do not also paste the plain chat tag.

2

Optional: add the WHMCS connector under Connectors if you also want the chat to answer about invoices, services and tickets. Identity works without it.

includes/hooks/opsiq_tracker.php
/* WHMCS: no extra code. Option 1 (the All-in-One WHMCS Hook) signs the signed-in
 * client into Client Chat, answers ?opsiq_identity_refresh=1 and signs staff into
 * Admin Chat. No connector is needed for identity. */

Botble (connector bridge)

✅
Nothing to add for bookings: the Botble connector takes bookings as a guest checkout and finds existing bookings by booking number and proof, so guests do not need to sign in. Admins are signed in through the bridge (op=admin_embed).
1

Install the Botble connector under Connectors, copy its bridge file from the connector panel and upload it to public/. The panel fills in OPSIQ_HOST, OPSIQ_SITE_KEY and OPSIQ_SITE_SECRET for you.

2

Botble has no API, so the bridge file is how the chat reads rooms and takes bookings. To also recognise a guest who is already signed in on the hotel site, use the Laravel option with your customer guard.

public/opsiq-botble-bridge.php
/* Botble: no extra code for bookings.
 * The connector books as a guest checkout and finds bookings by booking number + proof.
 * In public/opsiq-botble-bridge.php fill OPSIQ_HOST, OPSIQ_SITE_KEY and OPSIQ_SITE_SECRET.
 * Admins: op=admin_embed */

PHP (no dependencies)

1

Save as opsiq-chat.php. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

At the very top of every page (or your front controller), before any output: require 'opsiq-chat.php'; opsiq_chat_refresh();

3

Just before </body> on every page: <?= opsiq_chat_tag() ?> — it replaces the plain chat tag. Replace opsiq_chat_user() with your signed-in customer.

opsiq-chat.php
<?php
/* opsiq-chat.php — signed-in customers for OpsIQ Client Chat. */

// WHO IS SIGNED IN — replace the body with your app's session. Return null for a guest.
function opsiq_chat_user(): ?array
{
    $u = $_SESSION['user'] ?? null;               // e.g. ['id' => 7, 'email' => '…', 'name' => '…']
    return is_array($u) && !empty($u['id']) && !empty($u['email']) ? $u : null;
}

function opsiq_chat_token(array $u): string
{
    $secret = (string) (getenv('OPSIQ_SITE_SECRET') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; the environment wins when set
    if ($secret === '') return '';                           // fail closed: plain chat, no identity
    $b64 = static fn($v) => rtrim(strtr(base64_encode(json_encode($v, JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
    $now = time();
    $signing = $b64(['alg' => 'HS256', 'typ' => 'JWT']) . '.' . $b64([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 3600,                      // the widget refreshes before this
        'authenticated' => true,
        'platform'      => 'php',
        'customer'      => [
            'id'          => $u['id'],                       // REQUIRED
            'email'       => $u['email'],                    // REQUIRED
            'name'        => $u['name'] ?? '',
            'external_id' => (string) $u['id'],
        ],
    ]);
    return $signing . '.' . rtrim(strtr(base64_encode(hash_hmac('sha256', $signing, $secret, true)), '+/', '-_'), '=');
}

// Call at the top of every page, before any output.
function opsiq_chat_refresh(): void
{
    if (empty($_GET['opsiq_identity_refresh'])) return;
    header('Content-Type: application/json; charset=utf-8');
    header('Cache-Control: no-store');
    $u = opsiq_chat_user();
    $t = $u ? opsiq_chat_token($u) : '';
    if ($t === '') { http_response_code(401); echo json_encode(['success' => false, 'login_required' => true]); exit; }
    echo json_encode(['success' => true, 'role' => 'customer', 'identity_token' => $t]);
    exit;
}

// Print before </body> on every page, instead of the plain chat tag.
function opsiq_chat_tag(): string
{
    $src = 'https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY';
    $u = opsiq_chat_user();
    $t = $u ? opsiq_chat_token($u) : '';
    if ($t !== '') $src .= '&identity_token=' . rawurlencode($t);
    return '<script async src="' . htmlspecialchars($src, ENT_QUOTES) . '" data-opsiq-widget="client-chat"></script>';
}

Laravel

1

Run: composer require firebase/php-jwt. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET=… in .env with 'opsiq' => ['site_secret' => env('OPSIQ_SITE_SECRET')] in config/services.php on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Save the class as app/Support/OpsiqChat.php, and add the small OpsiqChatRefresh middleware from the bottom of the code to the web group, so the widget can refresh its token on any page.

3

In your main Blade layout, just before </body>: {!! \App\Support\OpsiqChat::tag() !!}

app/Support/OpsiqChat.php
<?php
// app/Support/OpsiqChat.php — composer require firebase/php-jwt
namespace App\Support;

use Firebase\JWT\JWT;

final class OpsiqChat
{
    public static function token(): string
    {
        $user = auth()->user();
        $secret = (string) (config('services.opsiq.site_secret') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; config wins when set
        if (!$user || $secret === '') return '';                 // guest, or not configured
        $now = time();
        return JWT::encode([
            'site_key'      => 'YOUR_SITE_KEY',
            'iat'           => $now,
            'exp'           => $now + 3600,
            'authenticated' => true,
            'platform'      => 'laravel',
            'customer'      => [
                'id'          => $user->id,                      // REQUIRED
                'email'       => $user->email,                   // REQUIRED
                'name'        => $user->name,
                'external_id' => (string) $user->id,
            ],
        ], $secret, 'HS256');
    }

    /** For Blade: {!! \App\Support\OpsiqChat::tag() !!} before </body>. */
    public static function tag(): string
    {
        $src = 'https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY';
        $t = self::token();
        if ($t !== '') $src .= '&identity_token=' . rawurlencode($t);
        return '<script async src="' . e($src) . '" data-opsiq-widget="client-chat"></script>';
    }
}

/* Refresh: the widget asks ?opsiq_identity_refresh=1 on the page it is on.
 * Laravel 11+ — bootstrap/app.php:
 *
 *   ->withMiddleware(function ($middleware) {
 *       $middleware->web(append: \App\Http\Middleware\OpsiqChatRefresh::class);
 *   })
 *
 * app/Http/Middleware/OpsiqChatRefresh.php:
 *
 *   public function handle($request, \Closure $next) {
 *       if (!$request->query('opsiq_identity_refresh')) return $next($request);
 *       $t = \App\Support\OpsiqChat::token();
 *       return $t === ''
 *           ? response()->json(['success' => false, 'login_required' => true], 401)->header('Cache-Control', 'no-store')
 *           : response()->json(['success' => true, 'role' => 'customer', 'identity_token' => $t])->header('Cache-Control', 'no-store');
 *   }
 */

WordPress / WooCommerce

1

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, add define('OPSIQ_SITE_SECRET', '…'); to wp-config.php instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Paste into your theme's functions.php or a small plugin. It prints the chat itself, so remove the plain chat tag if you added one.

3

For WooCommerce orders in the chat, add the WooCommerce connector under Connectors.

functions.php
/* functions.php or a small plugin — OpsIQ Client Chat with signed-in customers. */

if (!defined('OPSIQ_SITE_SECRET')) define('OPSIQ_SITE_SECRET', 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; wp-config.php wins when set

function opsiq_chat_token(): string {
    if (!is_user_logged_in() || !defined('OPSIQ_SITE_SECRET') || OPSIQ_SITE_SECRET === '') return '';
    $u   = wp_get_current_user();
    $b64 = static fn($v) => rtrim(strtr(base64_encode(wp_json_encode($v)), '+/', '-_'), '=');
    $now = time();
    $signing = $b64(['alg' => 'HS256', 'typ' => 'JWT']) . '.' . $b64([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 3600,
        'authenticated' => true,
        'platform'      => 'wordpress',
        'customer'      => [
            'id'          => $u->ID,                     // REQUIRED
            'email'       => $u->user_email,             // REQUIRED
            'name'        => $u->display_name,
            'external_id' => (string) $u->ID,
        ],
    ]);
    return $signing . '.' . rtrim(strtr(base64_encode(hash_hmac('sha256', $signing, OPSIQ_SITE_SECRET, true)), '+/', '-_'), '=');
}

// Refresh: the widget asks ?opsiq_identity_refresh=1 on the page it is on.
add_action('init', function () {
    if (empty($_GET['opsiq_identity_refresh'])) return;
    nocache_headers();
    $t = opsiq_chat_token();
    if ($t === '') wp_send_json(['success' => false, 'login_required' => true], 401);
    wp_send_json(['success' => true, 'role' => 'customer', 'identity_token' => $t]);
});

// The chat tag, on every front-end page.
add_action('wp_footer', function () {
    $src = 'https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY';
    $t = opsiq_chat_token();
    if ($t !== '') $src .= '&identity_token=' . rawurlencode($t);
    echo '<script async src="' . esc_url($src) . '" data-opsiq-widget="client-chat"></script>';
});

Node.js / Express

1

Run: npm i jsonwebtoken. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

app.use(opsiqChat) after your session / passport middleware. It answers the refresh and sets res.locals.opsiqChatTag.

3

Print res.locals.opsiqChatTag (unescaped) just before </body> in your layout, instead of the plain chat tag.

opsiq-chat.js
// opsiq-chat.js — npm i jsonwebtoken
const jwt = require("jsonwebtoken");

function opsiqChatToken(user) {
  const secret = process.env.OPSIQ_SITE_SECRET || "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; the environment wins when set
  if (!user || !secret) return "";
  return jwt.sign({
    site_key: "YOUR_SITE_KEY",
    authenticated: true,
    platform: "node",
    customer: { id: user.id, email: user.email, name: user.name, external_id: String(user.id) },  // id + email REQUIRED
  }, secret, { algorithm: "HS256", expiresIn: 3600 });     // sets iat + exp
}

// app.use(opsiqChat) — after your session / passport middleware.
function opsiqChat(req, res, next) {
  const token = opsiqChatToken(req.user);
  if (req.query.opsiq_identity_refresh) {                  // the widget refreshing on this page
    res.set("Cache-Control", "no-store");
    return token
      ? res.json({ success: true, role: "customer", identity_token: token })
      : res.status(401).json({ success: false, login_required: true });
  }
  const src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + (token ? "&identity_token=" + encodeURIComponent(token) : "");
  res.locals.opsiqChatTag = '<script async src="' + src.replace(/"/g, """) + '" data-opsiq-widget="client-chat"></script>';
  next();
}

module.exports = { opsiqChat };

Python (Flask)

1

Run: pip install pyjwt flask-login. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Call init_opsiq_chat(app) where you create the app. It answers the refresh and gives templates opsiq_chat_tag.

3

In your base template, just before </body>: {{ opsiq_chat_tag }}

opsiq_chat.py
# opsiq_chat.py — pip install pyjwt flask-login
import os, time, urllib.parse
import jwt
from flask import request, jsonify
from flask_login import current_user
from markupsafe import Markup, escape

def opsiq_chat_token():
    secret = os.environ.get("OPSIQ_SITE_SECRET") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    if not secret or not current_user.is_authenticated:
        return ""
    now = int(time.time())
    return jwt.encode({
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": True, "platform": "python",
        "customer": {"id": current_user.id, "email": current_user.email,       # REQUIRED
                     "name": getattr(current_user, "name", ""), "external_id": str(current_user.id)},
    }, secret, algorithm="HS256")

def init_opsiq_chat(app):
    @app.before_request
    def _opsiq_refresh():
        if request.args.get("opsiq_identity_refresh"):
            t = opsiq_chat_token()
            resp = jsonify({"success": True, "role": "customer", "identity_token": t}) if t \
                else (jsonify({"success": False, "login_required": True}), 401)
            if isinstance(resp, tuple):
                resp[0].headers["Cache-Control"] = "no-store"
            else:
                resp.headers["Cache-Control"] = "no-store"
            return resp

    @app.context_processor
    def _opsiq_tag():
        t = opsiq_chat_token()
        src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + ("&identity_token=" + urllib.parse.quote(t, safe="") if t else "")
        return {"opsiq_chat_tag": Markup('<script async src="%s" data-opsiq-widget="client-chat"></script>' % escape(src))}

Django

1

Run: pip install pyjwt. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in settings.py (for example os.environ["OPSIQ_SITE_SECRET"]) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Add "yourapp.opsiq_chat.OpsiqChatMiddleware" to MIDDLEWARE (after AuthenticationMiddleware) and "yourapp.opsiq_chat.opsiq_chat" to TEMPLATES context_processors.

3

In your base template, just before </body>: {{ opsiq_chat_tag }}

opsiq_chat.py
# yourapp/opsiq_chat.py — pip install pyjwt
import time, urllib.parse
import jwt
from django.conf import settings
from django.http import JsonResponse
from django.utils.html import format_html

def opsiq_chat_token(user):
    secret = getattr(settings, "OPSIQ_SITE_SECRET", "") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; settings win when set
    if not secret or not user.is_authenticated:
        return ""
    now = int(time.time())
    return jwt.encode({
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": True, "platform": "django",
        "customer": {"id": user.pk, "email": user.email,             # REQUIRED
                     "name": user.get_full_name(), "external_id": str(user.pk)},
    }, secret, algorithm="HS256")

class OpsiqChatMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        if request.GET.get("opsiq_identity_refresh"):
            t = opsiq_chat_token(request.user)
            resp = (JsonResponse({"success": True, "role": "customer", "identity_token": t}) if t
                    else JsonResponse({"success": False, "login_required": True}, status=401))
            resp["Cache-Control"] = "no-store"
            return resp
        return self.get_response(request)

def opsiq_chat(request):
    t = opsiq_chat_token(request.user)
    src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + ("&identity_token=" + urllib.parse.quote(t, safe="") if t else "")
    return {"opsiq_chat_tag": format_html('<script async src="{}" data-opsiq-widget="client-chat"></script>', src)}

.NET / C#

1

Run: dotnet add package System.IdentityModel.Tokens.Jwt. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OpsIQ:SiteSecret (user-secrets, the OpsIQ__SiteSecret environment variable or Key Vault) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

In Program.cs, after app.UseAuthentication(): app.Use(OpsiqChat.Refresh);

3

In _Layout.cshtml before </body>: @Html.Raw(OpsiqChat.Tag(Context))

OpsiqChat.cs
// OpsiqChat.cs — dotnet add package System.IdentityModel.Tokens.Jwt
using System.IdentityModel.Tokens.Jwt;
using System.Net;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;

public static class OpsiqChat
{
    public static string Token(HttpContext ctx)
    {
        var secret = ctx.RequestServices.GetRequiredService<IConfiguration>()["OpsIQ:SiteSecret"];
        if (string.IsNullOrEmpty(secret)) secret = "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; configuration wins when set
        if (string.IsNullOrEmpty(secret) || ctx.User.Identity?.IsAuthenticated != true) return "";
        var id = ctx.User.FindFirstValue(ClaimTypes.NameIdentifier) ?? "";      // REQUIRED
        var email = ctx.User.FindFirstValue(ClaimTypes.Email) ?? "";            // REQUIRED
        var creds = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)), SecurityAlgorithms.HmacSha256);
        var now = DateTimeOffset.UtcNow;
        var payload = new JwtPayload {
            { "site_key", "YOUR_SITE_KEY" }, { "iat", now.ToUnixTimeSeconds() }, { "exp", now.AddSeconds(3600).ToUnixTimeSeconds() },
            { "authenticated", true }, { "platform", "dotnet" },
            { "customer", new Dictionary<string, object> { { "id", id }, { "email", email }, { "name", ctx.User.Identity?.Name ?? "" }, { "external_id", id } } },
        };
        return new JwtSecurityTokenHandler().WriteToken(new JwtSecurityToken(new JwtHeader(creds), payload));
    }

    // app.Use(OpsiqChat.Refresh) — the widget refreshing on the page it is on.
    public static async Task Refresh(HttpContext ctx, Func<Task> next)
    {
        if (string.IsNullOrEmpty(ctx.Request.Query["opsiq_identity_refresh"])) { await next(); return; }
        ctx.Response.Headers["Cache-Control"] = "no-store";
        var t = Token(ctx);
        if (t == "") { ctx.Response.StatusCode = 401; await ctx.Response.WriteAsJsonAsync(new { success = false, login_required = true }); return; }
        await ctx.Response.WriteAsJsonAsync(new { success = true, role = "customer", identity_token = t });
    }

    public static string Tag(HttpContext ctx)
    {
        var t = Token(ctx);
        var src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + (t != "" ? "&identity_token=" + Uri.EscapeDataString(t) : "");
        return "<script async src=\"" + WebUtility.HtmlEncode(src) + "\" data-opsiq-widget=\"client-chat\"></script>";
    }
}

Ruby on Rails

1

Add gem "jwt" and run bundle install. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

include OpsiqChat in ApplicationController.

3

In app/views/layouts/application.html.erb before </body>: <%= opsiq_chat_tag %>

app/controllers/concerns/opsiq_chat.rb
# app/controllers/concerns/opsiq_chat.rb — Gemfile: gem "jwt"
require "jwt"
require "cgi"

module OpsiqChat
  extend ActiveSupport::Concern

  included do
    before_action :opsiq_identity_refresh
    helper_method :opsiq_chat_tag
  end

  private

  def opsiq_chat_token
    secret = ENV["OPSIQ_SITE_SECRET"].presence || "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    return "" if secret.blank? || !respond_to?(:current_user, true) || current_user.nil?
    now = Time.now.to_i
    JWT.encode({
      site_key: "YOUR_SITE_KEY", iat: now, exp: now + 3600,
      authenticated: true, platform: "rails",
      customer: { id: current_user.id, email: current_user.email,          # REQUIRED
                  name: current_user.try(:name).to_s, external_id: current_user.id.to_s }
    }, secret, "HS256")
  end

  def opsiq_identity_refresh
    return unless params[:opsiq_identity_refresh].present?
    response.headers["Cache-Control"] = "no-store"
    t = opsiq_chat_token
    return render(json: { success: false, login_required: true }, status: :unauthorized) if t.blank?
    render json: { success: true, role: "customer", identity_token: t }
  end

  def opsiq_chat_tag
    t = opsiq_chat_token
    src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + (t.present? ? "&identity_token=#{CGI.escape(t)}" : "")
    helpers.tag.script(nil, async: true, src: src, data: { opsiq_widget: "client-chat" })
  end
end

Java (Spring Boot)

1

Add io.jsonwebtoken:jjwt-api, jjwt-impl and jjwt-jackson (0.12+). This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set opsiq.site.secret (for example from OPSIQ_SITE_SECRET) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Replace currentUser() with your user lookup. The filter answers the refresh on every page; @ControllerAdvice exposes opsiqChatTag to views.

3

Thymeleaf layout before </body>: <th:block th:utext="${opsiqChatTag}"/>

OpsiqChat.java
// OpsiqChat.java — io.jsonwebtoken:jjwt-api / jjwt-impl / jjwt-jackson (0.12+)
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.Principal;
import java.time.Instant;
import java.util.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.util.HtmlUtils;

@Component
@ControllerAdvice
public class OpsiqChat implements Filter {
    @Value("${opsiq.site.secret:opsiq_whsec_YOUR_SITE_SECRET}")   // this site's secret; opsiq.site.secret wins when set
    private String secret;

    /** WHO IS SIGNED IN — replace with your lookup: id, email, name. Null for a guest. */
    private Map<String, Object> currentUser(Principal p) {
        return p == null ? null : Map.of("id", p.getName(), "email", p.getName(), "name", p.getName());
    }

    String token(HttpServletRequest req) {
        Map<String, Object> u = currentUser(req.getUserPrincipal());
        if (u == null || secret.isEmpty()) return "";
        Instant now = Instant.now();
        return Jwts.builder()
            .claim("site_key", "YOUR_SITE_KEY").claim("authenticated", true).claim("platform", "java")
            .claim("customer", Map.of("id", u.get("id"), "email", u.get("email"), "name", u.get("name"),
                                      "external_id", String.valueOf(u.get("id"))))          // id + email REQUIRED
            .issuedAt(Date.from(now)).expiration(Date.from(now.plusSeconds(3600)))
            .signWith(Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)), Jwts.SIG.HS256)
            .compact();
    }

    @Override // the widget refreshing on the page it is on
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        if (req.getParameter("opsiq_identity_refresh") == null) { chain.doFilter(request, response); return; }
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("Cache-Control", "no-store");
        res.setContentType("application/json");
        String t = token(req);
        if (t.isEmpty()) { res.setStatus(401); res.getWriter().write("{\"success\":false,\"login_required\":true}"); return; }
        res.getWriter().write("{\"success\":true,\"role\":\"customer\",\"identity_token\":\"" + t + "\"}");
    }

    @ModelAttribute("opsiqChatTag")
    public String tag(HttpServletRequest req) {
        String t = token(req);
        String src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + (t.isEmpty() ? "" : "&identity_token=" + URLEncoder.encode(t, StandardCharsets.UTF_8));
        return "<script async src=\"" + HtmlUtils.htmlEscape(src) + "\" data-opsiq-widget=\"client-chat\"></script>";
    }
}

Go

1

Run: go get github.com/golang-jwt/jwt/v5. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Replace currentUser() with your session lookup, and wrap your router: http.ListenAndServe(addr, OpsiqChatRefresh(mux)).

3

Pass OpsiqChatTag(r) to your layout template and print it before </body>.

opsiq_chat.go
// opsiq_chat.go — go get github.com/golang-jwt/jwt/v5
package main

import (
    "encoding/json"
    "fmt"
    "html"
    "html/template"
    "net/http"
    "net/url"
    "os"
    "time"

    "github.com/golang-jwt/jwt/v5"
)

type OpsiqUser struct{ ID, Email, Name string }

// WHO IS SIGNED IN — replace with your session lookup. Return nil for a guest.
func currentUser(r *http.Request) *OpsiqUser { return nil }

func opsiqChatToken(r *http.Request) string {
    u, secret := currentUser(r), os.Getenv("OPSIQ_SITE_SECRET")
    if secret == "" {
        secret = "opsiq_whsec_YOUR_SITE_SECRET" // this site's secret; the environment wins when set
    }
    if u == nil || secret == "" {
        return ""
    }
    now := time.Now().Unix()
    t, err := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": true, "platform": "go",
        "customer": map[string]any{"id": u.ID, "email": u.Email, "name": u.Name, "external_id": fmt.Sprint(u.ID)}, // id + email REQUIRED
    }).SignedString([]byte(secret))
    if err != nil {
        return ""
    }
    return t
}

// OpsiqChatRefresh answers the widget's ?opsiq_identity_refresh=1 on any page.
func OpsiqChatRefresh(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if r.URL.Query().Get("opsiq_identity_refresh") == "" {
            next.ServeHTTP(w, r)
            return
        }
        w.Header().Set("Cache-Control", "no-store")
        w.Header().Set("Content-Type", "application/json")
        if t := opsiqChatToken(r); t != "" {
            json.NewEncoder(w).Encode(map[string]any{"success": true, "role": "customer", "identity_token": t})
            return
        }
        w.WriteHeader(http.StatusUnauthorized)
        json.NewEncoder(w).Encode(map[string]any{"success": false, "login_required": true})
    })
}

// OpsiqChatTag is printed before </body> in your layout.
func OpsiqChatTag(r *http.Request) template.HTML {
    src := "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY"
    if t := opsiqChatToken(r); t != "" {
        src += "&identity_token=" + url.QueryEscape(t)
    }
    return template.HTML(`<script async src="` + html.EscapeString(src) + `" data-opsiq-widget="client-chat"></script>`)
}

Ketika ada sesuatu yang salah

Sembang melayan pelanggan yang log masuk sebagai tetamu

Tag tersebut dicetak tanpa identity_token (rahasia hilang pada server, sehingga kode gagal ditutup), atau kunci ruang kerja atau rahasia token tidak cocok.

Dikenali pada mulanya, kemudian menjadi tetamu selepas kira-kira sejam

Pengendali muat semula tidak dicapai: ia mesti dijalankan sebelum sebarang output, pada setiap halaman tempat sembang dipaparkan.

Bahasa chat biasa menunjukkan dua kali

Alih keluar tag sembang biasa daripada templat anda: kod ini mencetak sembang itu sendiri.

Pembangun

Portal tanpa kepala: halaman sokongan anda sendiri pada API pelanggan

Bina halaman sokongan dalam aplikasi anda sendiri, dengan reka bentuk anda sendiri: tapak React atau Vue, aplikasi mudah alih, atau halaman yang dipaparkan oleh pelayan anda. Ia berfungsi pada permintaan, balasan, pangkalan pengetahuan dan sembang langsung yang sama seperti portal yang dihoskan, jadi pasukan anda menjawab dalam satu peti masuk sama ada cara. API pelanggan termasuk dalam pelan yang merangkumi portal tanpa kepala (Tetapan, Lesen menunjukkan milik anda), dan setiap panggilan dikira dalam kuota API portal bulanan.

Bagaimana cara kerjanya

1
Pelayan anda menandatangani token identiti sekali guna

Untuk pelanggan yang log masuk ke aplikasi anda, pelayan anda menandatangani token HS256 pendek dengan rahsia penandatanganan tanpa kepala ruang kerja ini, yang dicipta di bawah Tetapan > Support Portal > Bina portal anda sendiri (pembangun) dan dipaparkan sekali. Ia bukan rahsia laman yang digunakan oleh widget, pautan log masuk dan penyambung, dan ia tidak pernah meninggalkan pelayan anda.

2
Tukarkan dengan token pelanggan

POST /api/customer/v1/session dengan site_key dan identity_token. Jawapan membawa access_token (bermula dengan opqc_), token_type Bearer dan expires_in 900. OpsIQ hanya menyimpan cincangannya.

3
Panggil API sebagai pelanggan itu

Hantar Authorization: Bearer dengan token pelanggan. Setiap jawapan hanya tentang pelanggan itu, dan hanya dalam ruang kerja ini.

4
Perbaharui dan log keluar

Apabila panggilan menjawab 401 token.invalid, tandatangani token identiti baharu dan tukarkan semula. Apabila pelanggan log keluar dari aplikasi anda, POST /api/customer/v1/session/revoke.

Token identiti, tuntutan demi tuntutan

aud: "opsiq.portal"

Menyatakan token itu untuk API pelanggan. Token log masuk Portal atau sembang ditolak di sini.

site_key

Kunci ruang kerja anda. Ia mesti sepadan dengan site_key yang anda hantar ke POST session.

Menyalahkan

Masa dikeluarkan dan masa tamat, dalam saat. Token boleh hidup paling lama 300 saat; 120 sudah memadai.

jti

ID rawak 16 hingga 64 aksara heksadesimal. Setiap token identiti berfungsi sekali.

customer.email

Diperlukan. Pelanggan dicari mengikut e-mel dalam ruang kerja ini, atau dicipta, dan permintaan sedia ada mereka dipadankan kepada mereka.

customer.id, name, external_id

Pilihan. ID anda sendiri untuk pelanggan dan nama paparan.

Dari mana ia boleh dipanggil

Daripada pelayar

Halaman anda mesti berada di salah satu alamat milik ruang kerja ini (laman-lamannya dan alamat yang dihoskan OpsIQ) atau di alamat yang anda tambah di bawah Tetapan > Support Portal > Bina portal anda sendiri (pembangun) > Alamat yang dibenarkan. Padanan mesti tepat: skema dan hos. Mana-mana halaman lain menerima 403 cors.origin_not_allowed dan tiada pengepala CORS.

Daripada pelayan anda

Panggilan pelayan tidak menghantar Origin, jadi ia dibenarkan dari mana-mana. Titik akhir pelanggan tetap memerlukan token pelanggan.

Tiada kuki

API tidak pernah membaca atau menetapkan kuki. Hantar credentials: omit daripada pelayar.

Titik akhir Ukiran

POST /api/customer/v1/session

Exchange a one-time identity token for a 15-minute customer token. Send site_key and identity_token. No customer token needed: name the workspace with site_key.

POST /api/customer/v1/session/revoke

Revoke the customer token that makes the call. Use it when the customer signs out of your app. Needs a customer token.

GET /api/customer/v1/me

The customer the token stands for: id, email and name. Needs a customer token.

GET /api/customer/v1/config

What your pages need to draw the request form: brand, departments, form fields and the expected first reply time. No customer token needed: name the workspace with site_key.

GET /api/customer/v1/requests

The customer's requests. Filters: status, department, priority, sort and page_size; page on with cursor (or offset). Needs a customer token.

GET /api/customer/v1/requests/summary

Counts of the customer's requests by status, for a badge or a dashboard tile. Needs a customer token.

GET /api/customer/v1/requests/{number}

One request with its customer-visible replies. Internal notes are never included. Needs a customer token.

POST /api/customer/v1/requests

Open a request. Send subject, body and optionally department_id and form fields. The Idempotency-Key header is required, so a retry never opens two. Needs a customer token.

POST /api/customer/v1/requests/{number}/replies

Add the customer's reply. Send body; the Idempotency-Key header is required. Needs a customer token.

POST /api/customer/v1/requests/{number}/solve

Mark the request solved for the customer. Needs a customer token.

POST /api/customer/v1/requests/{number}/reopen

Reopen a solved request, optionally with a reason and a message. Needs a customer token.

POST /api/customer/v1/requests/{number}/csat

Rate the help the customer received: rating from 1 to 5 and an optional comment. Needs a customer token.

GET /api/customer/v1/notifications/preferences

The customer's e-mail notification choices. Needs a customer token.

PUT /api/customer/v1/notifications/preferences

Save the customer's e-mail notification choices. Needs a customer token.

GET /api/customer/v1/kb/search

Search the knowledge base with q. No customer token needed: name the workspace with site_key.

GET /api/customer/v1/kb/categories

Knowledge base categories with their article counts. No customer token needed: name the workspace with site_key.

GET /api/customer/v1/kb/articles/{slug}

One published article by its slug. No customer token needed: name the workspace with site_key.

GET /api/customer/v1/variables

The Studio variables catalogue, so your pages can show the same values the hosted portal shows. No customer token needed: name the workspace with site_key.

POST /api/customer/v1/stream-ticket

A single-use stream ticket, valid 60 seconds, and the stream_url to open with it. Send number to watch one request. Needs a customer token.

GET /api/customer/v1/stream

Acara dihantar pelayan untuk senarai permintaan, atau satu permintaan. Dibuka dengan tiket strim dalam alamat, bukan pengepala.

POST /api/customer/v1/chat

Start a live chat as the signed-in customer. Returns the chat token used by the two chat endpoints below. Needs a customer token.

POST /api/customer/v1/chat/{chat}/messages

Send a chat message. The chat must belong to the token's customer. Needs a customer token.

GET /api/customer/v1/chat/{chat}/messages

Messages after a given id (after). The chat must belong to the token's customer. Needs a customer token.

Menulis dengan selamat

Pelanggan datang daripada token

name, email atau client_id dalam badan permintaan diabaikan. Permintaan yang dibuka melalui API sentiasa milik pelanggan token itu.

Idempotency-Key

Diperlukan pada permintaan POST dan balasan POST: kunci rawak sehingga 512 aksara, baharu untuk setiap mesej baharu. Cubaan semula dengan kunci sama mengembalikan jawapan pertama (idempotent_replay: true) dan tidak menghantar dua kali. Tanpa kunci, panggilan menjawab 400 idempotency_key_required.

Tiada cabaran penyemak imbas

Token pelanggan yang disahkan melangkau captcha portal. Semakan e-mel sekali pakai dan setiap had kadar tetap terpakai.

Kemas kini langsung

EventSource tidak boleh menghantar pengepala Authorization, jadi strim dibuka dengan tiket. Panggil POST /api/customer/v1/stream-ticket (hantar number untuk memantau satu permintaan) dan buka stream_url yang dikembalikan. Tiket hanya berfungsi sekali dan selama 60 saat sahaja, dan pelayan menamatkan setiap strim selepas kira-kira 30 saat: dapatkan tiket baharu setiap kali. Acara: ready, ticket (satu permintaan berubah), tickets (senarai berubah) dan bye.

¡Live chat

POST /api/customer/v1/chat memulakan sembang sebagai pelanggan yang log masuk dan mengembalikan token sembangnya. Hantar mesej dengan POST /api/customer/v1/chat/{chat}/messages dan baca yang baharu dengan GET /api/customer/v1/chat/{chat}/messages?after=ID. Sembang milik pelanggan lain dijawab 404, walaupun dengan token sembangnya.

Apa yang tidak pernah dilihat oleh token pelanggan

Catatan internal Catatan internal

Nota khusus kakitangan tidak pernah muncul dalam permintaan, sembang, strim atau webhook yang dibina daripada titik akhir ini.

Pelanggan lain

Hanya permintaan yang boleh dilihat pelanggan dalam portal yang dihoskan: milik mereka sendiri dan yang dikongsi dengan mereka.

Ruang kerja lain

Token tergolong dalam satu ruang kerja. Jika digunakan pada yang lain, ia ditolak.

Menukar rahsia

Cipta rahsia baharu dan pilih berapa lama rahsia lama akan terus berfungsi (serta-merta, 1 jam, 24 jam atau 7 hari), supaya anda boleh menyebarkan tanpa masa henti. Halaman ini mempunyai pemeriksa token yang menjalankan semua semakan tanpa menghabiskan token.

Had dan ralat

Setiap ralat mempunyai bentuk yang sama: {"success":false,"error_code":"…","error":"…"}. Buat keputusan mengikut error_code, bukan teks, yang mungkin diterjemahkan.

401 token.required / token.invalid

Tiada token pelanggan, atau yang telah tamat tempoh atau dibatalkan. Tukar dengan token identiti baharu.

400 site.missing, 404 site.unknown

Namakan ruang kerja dengan site_key (titik akhir tanpa token pelanggan) atau kunci itu bukan ruang kerja aktif.

403 cors.origin_not_allowed

Halaman ini tidak berada di alamat yang dibenarkan. Tambahkannya di bawah Tetapan > Support Portal > Bina portal anda sendiri (pembangun) > Alamat yang dibenarkan.

403 plan.feature_unavailable

Pelan ruang kerja tidak termasuk portal tanpa kepala.

429 rate.limited

Log masuk: 30 setiap 10 minit bagi setiap alamat. Panggilan: 600 sejam bagi setiap token dan 1,200 sejam bagi setiap pelanggan. Tunggu Retry-After.

429 plan.limit_reached

Kuota API portal bulan ini sudah habis. Ia diperbaharui bulan depan.

401 identity.*

POST session menolak token identiti: identity.invalid (tandatangan), identity.expired, identity.lifetime (melebihi 300 saat), identity.replayed (jti sudah digunakan), identity.audience, identity.site_mismatch atau identity.email.

💡
Webhook membawa acara yang sama seperti yang dicetuskan portal yang dihoskan, termasuk ticket.created, ticket.replied dan ticket.status_changed, jadi bahagian belakang anda diberitahu tentang permintaan tanpa tinjauan. Lihat Webhooks.

Kod

Pelayan: tandatangani token identiti
// Your server (Node). The secret stays here.
const { signIdentityToken } = require('./opsiq-portal');
app.get('/opsiq-identity', requireLogin, (req, res) => {
  res.set('Cache-Control', 'no-store');
  res.json({ identity_token: signIdentityToken({
    siteKey: process.env.OPSIQ_SITE_KEY,
    secret: process.env.OPSIQ_HEADLESS_SECRET,
    customer: { id: req.user.id, email: req.user.email, name: req.user.name },
  }) });
});
Pelayar: klien
// Your page. Load clients/node/opsiq-portal.js from the Connector SDK; it adds window.OpsIQPortal.
const portal = new OpsIQPortal.PortalClient({
  url: 'https://YOUR-OPSIQ-ADDRESS',
  siteKey: 'YOUR_SITE_KEY',
  getIdentityToken: async () => (await (await fetch('/opsiq-identity')).json()).identity_token,
});
const list = await portal.listRequests({ status: 'open' });
const made = await portal.createRequest({ subject: 'Invoice question', body: 'Hello, my invoice shows the wrong address.' });
portal.watch({ number: made.ticket_number }, (event, data) => console.log(event, data));
curl
curl -s https://YOUR-OPSIQ-ADDRESS/api/customer/v1/session \
  -H 'Content-Type: application/json' \
  -d '{"site_key":"YOUR_SITE_KEY","identity_token":"IDENTITY_TOKEN"}'

curl -s https://YOUR-OPSIQ-ADDRESS/api/customer/v1/requests \
  -H 'Authorization: Bearer opqc_CUSTOMER_TOKEN'

curl -s -X POST https://YOUR-OPSIQ-ADDRESS/api/customer/v1/requests/ABC-123456/replies \
  -H 'Authorization: Bearer opqc_CUSTOMER_TOKEN' -H 'Idempotency-Key: 9f2c41d0' \
  -H 'Content-Type: application/json' -d '{"body":"Thanks, that fixed it."}'

Versi PHP bagi laluan identiti ialah clients/php/opsiq_headless_portal_example.php dalam muat turun Connector SDK.

Pembangun

Plug dan SDK

OpsIQ memberi anda kod siap sedia untuk stack yang paling biasa. Anda menyalinnya ke projek sendiri; tiada apa yang perlu dipasang daripada Composer, npm atau PyPI. Muat turun Connector SDK daripada halaman Muat Turun dalam akaun anda dan buka folder clients untuk bahasa anda.

Bagaimana cara kerjanya
Plug dan SDKConnector SDK termasuk kod siap sedia untuk PHP, Node.js, WooCommerce, Python, Laravel dan Symfony.PHPKlien referensi PHP difusKlien/php/HisnoJSKe_padah klien Node.jsclients/node/opsiq-sdk.jsWPJambatan jualan WooCommerceDrop-in WordPress pluginBAHASAPython, Laravel, SymfonyKlien dan jembatan acara
Plug masuk & SDK
PHP (klien/php)

Berkas PHP biasa yang kau masukkan ke situsmu. universal_sales_sender.php melaporkan jualan sebaik sahaja pembayaran disahkan. remote_action_receiver.php dan opsiq_action_receiver_example.php Kau membiarkan AI Admin menjalankan tindakan yang disetujui di situsmu. opsiq_admin_identity_endpoint_example.php Katagori OpsIQ yang mana admin anda telah mendaftar masuk. opsiq_hr_people_example.php Kata ward menunjukkan bagaimana memanggil PeopleOS _HR actions.

Node.js (klien/node)

opsiq-sdk.js menghantar peristiwa kepada OpsIQ dan menyemak bahawa webhook yang anda terima benar-benar datang daripada OpsIQ. Salin ke projek anda dan wajibkannya.

Python (klien/python)

opsiq.py menghantar peristiwa, dan termasuk pembantu Flask kecil untuk menerima tindakan dengan selamat.

Laravel (clients/laravel)

OpsIQServiceProvider.php memajukan peristiwa Laravel biasa anda kepada OpsIQ, jadi trigger anda aktif tanpa kod tambahan.

Symfony (clients/symfony)

OpsIQEventSubscriber.php Diagnona melakukan hal yang sama untuk peristiwa Symfony dan Doktrin.

WooCommerce (clients/wordpress)

opsiq-woocommerce-sales-bridge.php ialah pemalam WordPress yang melaporkan setiap jualan WooCommerce yang selesai kepada OpsIQ. Anda akan menemui nilai yang diperlukannya di bawah Sites → Codes → Sales Bridge.

Widget laman web

Widget penjejakan dan sembang bukan sebahagian daripada muat turun. Salin kodnya daripada Laman → Kod dan tampalkannya ke dalam laman web anda. Pelanggan yang log masuk, peristiwa tersuai dan kawalan sembang diterangkan di bawah Identiti pelawat.

Penyambung platform

Shopify, WooCommerce dan platform lain yang disokong bersambung melalui penyambung masing-masing pada halaman Penyambung.

⚠️
Setiap permintaan mesti menyatakan workspace mana ia dimiliki. Setiap klien meminta kunci tapak workspace anda, dan OpsIQ menolak permintaan yang tidak menyertakannya. Baca clients/README.md dalam SDK sebelum anda mula.

Menyebut tindakan dari PHP

Contoh PHP
// Send the request to /api/v1.php with one of your API keys
$ch = curl_init("https://your-opsiq.com/api/v1.php");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer opq_your_key",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "action" => "crm.contacts.list",
        "status" => "lead",
        "limit"  => 25,
    ]),
]);
$contacts = json_decode(curl_exec($ch), true);
Pembangun

API tinjauan, peristiwa dan automasi tanpa penyambung

Survey Studio direka untuk menggunakan General API bertaip, pelaksana dalaman, bas peristiwa dan operasi webhook yang sama seperti bahagian OpsIQ yang lain. Ini membolehkan pembangun melakukan integrasi hujung ke hujung tanpa membina penyambung berpakej.

⚠️
Status pelaksanaan: katalog langsung pada masa ini hanya mendedahkan platform.get.survey.config dan platform.save.survey.config. Keluarga surveys.* dan feedback.* keluarga di bawah ialah kontrak sasaran yang diluluskan dan mesti mengembalikan unknown_action Nama itu terdaftar.

Keluarga aksi sasaran

Tipe, templat dan peluncuran cepat

surveys.types.*, surveys.templates.* dan surveys.quick_launch.* Daftar, pratayang, instantiate dan validate lengkap starter.

Survei dan versi

surveys.create|get|list|update|archive|duplicate I'mfid ditambah versi, validasi dan penerbitan tindakan.

Ledakan dan target

surveys.deployments.*, surveys.links.*, surveys.audiences.*, surveys.triggers.* dan surveys.variables.*.

Keterlibatan dan tanggapan

surveys.invitations.*, surveys.campaigns.*, surveys.recipients.*, surveys.responses.*, eksport, penyuntingan maklumat sensitif dan analitik.

Webhook, import dan Suapan Balik

surveys.webhooks.*, surveys.imports.*, feedback.items.*, feedback.analytics.*, feedback.sources.* dan feedback.analysis.*.

Aliran tanpa penyambung

1
Buat dan publikasikan melalui General API_

Guna typed survey.* tindakan dengan kunci yang dipini ruang kerja. Tulis menyatakan izin, risiko, konfirmasi, idemptensi dan perilaku yang berjalan kering.

2
Terimalah acara bisnismu.

Hantar acara yang ditandatangani ke webhook masuk, contohnya pembatalan pesanan atau langkah orientasi yang telah selesai. Perlindungan main semula menyahpenduakan ID acara.

3
Faliagon Map it in Actions & Triggers

Pilih tindakan OpsIQ General API seperti mengeluarkan jemputan Tinjauan atau menyediakan kempen, kemudian petakan medan daripada muatan pencetus yang telah disahkan.

4
Langganan untuk Survey peristiwa

Hantar subset kitaran hayat survey.* yang selamat untuk perniagaan dan didokumenkan ke titik akhir anda dengan tandatangan, penapis, cubaan semula, log dan main semula yang dibenarkan.

Target acara Canonical

Katalog kongsi akan merangkumi status penerbitan Tinjauan/penempatan, keputusan khalayak dan pencetus, jemputan, paparan/mula/separa/sambung semula/selesai/tinggal, penyembunyian maklumat respons, status kempen dan kegagalan penghantaran. Masa fokus, tatal dan soalan yang bervolum tinggi kekal dalam storan Analitik Tinjauan melainkan didokumenkan secara jelas untuk diedarkan.

✅
Penyambung adalah pilihan. Ia menambah penemuan platform yang boleh diguna semula, identiti yang disahkan, fakta, pemboleh ubah dan penghitungan penerima. General API serta Actions & Triggers/webhook kekal sebagai laluan integrasi lengkap untuk pembangun yang tidak memerlukan penyambung berpakej.
Pembangun

Memerlukan API

The OpsIQ REST API membolehkan anda mengakses secara berprogram semua ciri-ciri platform.

Bagaimana cara kerjanya
Memerlukan APISebuah terminal yang menunjukkan POST ke OpsIQ API Dia memiliki kunci Bearer, daftar tiket terbuka, dan halaman JSON Responsisisi mata.$ curl -X POST https://your-domain.com/api/v1.php \-H "Authorization: Bearer opq_..."200 OK{ "data": [{ "id": 4192, "ticket_number": "T-4192","subject": "Card declined", "status": "open" },... more tickets ...], "page": 1, "per_page": 50, "has_more": true }
Memerlukan API

Format permintaan

Ukir kunci sebagai Authorization: Bearer opq_... atau X-OpsIQ-Key: opq_...Gunakan satu header autentikasi, bukan keduanya.

Format permintaan API _Fong
POST https://your-opsiq-domain.com/api/v1.php
Authorization: Bearer opq_your_api_key
# Alternative header: X-OpsIQ-Key: opq_your_api_key
Content-Type: application/json

{
  "action": "endpoint.name",
  "site_key": "site_abc123"
}

Aksi umum

API ini berasaskan tindakan: hantar action Setiap administrator terdaftar, nama anggota badan. JSON Operasi telah stabil bernama tindakan. {"action":"meta.actions"} (tidak diperlukan kunci) untuk daftar otoritatif, per-install, kontrak permintaan, data meta risiko dan ruang lingkup. platform.routes.* Jembatan jambatan tetap hanya untuk integrasi yang lebih tua.

crm.contacts.list

Daftar kontak CRM (scope crm. read). Params: q, status, sumber, tag, skor utama, batas.

crm.contacts.upsert

Param: email plus field, tag, catatan.

crm.deals.list

Senaraikan urus niaga CRM (skop crm.read). Parameter: status, stage_id, company_id, owner_admin_id, pipeline_id, limit.

crm.activities.record

Rekodkan aktiviti kitaran hayat/perniagaan untuk kenalan (skop crm.write). Parameter: email atau contact_id, event, value, currency.

crm.conversions.record

Rekod penukaran (skop crm.write). Parameter: contact_id atau email, conversion_type, value, currency.

crm.events.list

Tinjau aliran acara CRM (skop crm.read). Param: limit.

tickets.list

Senaraikan tiket (skop tickets.read). Parameter: page, per_page, sort, order, status, priority, department_id, assigned_admin_id, client_email, search.

tickets.get

Satu tiket dan pesannya (scope ticket. read). Params: ticet_id atau ticke_number, include_message, message_limit.

tickets.reply

Hantar balasan kepada tiket (skop tickets.write). Parameter: ticket_id atau ticket_number, body, author_type, author_name, internal.

tickets.update

Kemas kini tiket (skop tickets.write). Parameter: ticket_id atau ticket_number, status, priority, subject, department_id, assigned_admin_id.

tickets.open

Buka tiket sokongan (skop tickets.write). Parameter: customer_email, customer_name, subject, body, priority.

tickets.bulk

Buat operasi antrian besar-besaran (scope tickets. write). Params: operasi, id.

conversations.list

Senaraikan perbualan sembang langsung (skop conversations.read). Parameter: page, per_page, status, assigned_admin_id, client_email, search.

conversations.get

Perbincangan dan pesannya (scopepecakapan. read). Param: conversation_id atau thread_key, include_message.

conversations.messages

Sejarah pesan terhalaman di_halaman (scopepecakapan. read). Param: conversation_id, page, per_page, include_internal.

conversations.send

Kata-kata: conversation_id, message, pengirim_type, internal.

conversations.update

Tugaskan, status semula atau tajuk semula perbualan (skop conversations. write). Params: conversation_id, status, assigned_admin_id.

connectors. list / . get / test

Lihat penyambung mana yang dipasang, apa yang boleh dilakukan oleh setiap satu, dan sama ada bukti kelayakannya berfungsi (skop connectors.read).

automations.actions.list

Tindakan yang akan dijalankan oleh pembangun Aksi Anda (skop automasi. read).

automations.triggers.list

Apa yang akan dicetuskan dan dalam keadaan apa (skop automations.read).

automations.runs.list

Sejarah eksekusi angori untuk debugging sebuah integrasi (automasi skop. read). Params: status, action_key.

departments.list

Departemen-Departmen Departemen- Departemen Luar Negeri Anda dapat rute tiket ke (scopedepartement. read).

notifications.list

Pemberitahuan untuk seorang operator (skop notifications.read). Parameter: admin_id (wajib), unread_only.

analytics.export

Bagian laporan dari badan laporan sebagai CSV (skop analytics. read). Param: bagian, praset, dari, ke. Call analyts. sections. list untuk nilai yang valid.

. list / . reports. list

Laman web yang dipantau dan laporan SEO mereka (skop site_intelligence.read).

Perdagangan. produk. daftar / . get

Katalog Kedai anda, mengikut halaman (skop commerce.read). Penapis: aktif, kategori, carian. .get mengembalikan satu produk dengan variannya.

Perdagangan. orders. list / . get

Pesanan kedai (skop commerce.read). Penapis: status, payment_method, channel, customer_email. Dapatkan satu mengikut order_id atau rujukan ORD- miliknya, berserta item baris. Pemegang checkout gerbang langsung tidak akan dikembalikan.

commerce.refunds.list

Permintaan bayaran balik dan statusnya (skop commerce.read).

commerce.quotes.create

Harga senilai harga untuk pelanggan (skop perdagangan. tulis). store Tidak ada perintah, tidak ada pembayaran.

Tiket.csat_. list / . get / ,metrics

Respons kepuasan-pengabdi pelanggan sebagai data (scope ticket. read). Tapis dengan rating, tiket, agen atau periode; .metrics Angka yang sama menunjukkan papan dashboard.

conversations.ratings.list

Perbualan sembang yang telah dinilai oleh pelawat anda, berserta komen, perkara yang mendorong penilaian itu dan ejen yang dikreditkan (skop conversations.read).

knowledge.articles.list

Halaman melalui artikel Pusat Bantuan Anda (scope kb. read).

knowledge.articles.get

Artikel Pusat Bantuan Satu oleh id (scoscope kb. read). Params: article_id.

webhooks.events.list

Setiap acara yang boleh anda langgankan pada titik akhir webhook, bersama muatannya. Tersedia pada setiap pelan, jadi anda boleh membina dengannya sebelum anda membeli.

files.get

UDD yang bertanda tangan pendek untuk lampiran (berkas skop. read). Params: referensi, ttl.

security.check

Tanya sama ada sesuatu IP atau e-mel disekat atau mencurigakan di sini (skop security.read). Menggabungkan tembok api IP, senarai sekatan spam tiket dan keputusan Security AI yang dicache. Parameter: ip, email.

security.report

Laporkan penyalahgunaan yang diperhatikan oleh sistem anda (skop security.write). Direkodkan sebagai peristiwa keselamatan, diklasifikasikan oleh Security AI dengan serta-merta, dan pentadbir dimaklumkan tentang keputusan berisiko tinggi. Parameter: ip, email, kind, reason, source.

security.blocklist.add / .list

Urus peraturan spam yang paip tiket laksanakan (skop security. write / security. read). Storan sama seperti kawal "Blok penghantar" halaman Tiket. Parameter: jenis (emel, domain, ip), nilai, sebab, tamat masa.

💡
meta.actions sentiasa berwibawa. Ia memulangkan setiap tindakan yang tersedia pada pemasangan anda beserta skop yang diperlukan oleh setiap satu, jadi anda tidak perlu meneka atau mengekodkan senarai ini secara tetap.

Pengumpan, penyaringan dan pengurutan

Setiap daftar aksi menggunakan parameter yang sama, jadi kau mempelajarinya sekali.

halaman / per_halan

Nombor halaman bermula pada 1, dan saiz halaman. Lalai 50, maksimum 200. limit dan offset juga diterima jika anda lebih suka menggunakannya.

Urut / urutan

Lapangan usch untuk diurut, dan asc atau desc (desc standard). Setiap tindakan menerima set tetap dari medan ort; apa pun diabaikan daripada kesalahan.

filters

Filter Hantar Füder sebagai objek, atau luluskan filter sebagai parameter aras-atas. Penyaring tidak diketahui diabaikan.

Apa yang kembali

Barang, halaman, per halaman, jumlah, total dan has_more. teruslah minta halaman sampai has-more adalah palsu.

Dihalaman, disaring, diurutkan daftar permintaan
POST /api/v1.php
Authorization: Bearer opq_your_api_key

{
  "action": "tickets.list",
  "status": "open",
  "priority": "urgent",
  "sort": "created_at",
  "order": "desc",
  "page": 1,
  "per_page": 50
}

Kesalahan

Setiap kegagalan mengembalikan bentuk yang sama, dengan stabil code yang boleh anda gunakan untuk bercabang. Jangan padankan pada medan yang boleh dibaca manusia error Teks, yang mungkin dikata ulang.

Respons kesalahan pada penderita:
{
  "success": false,
  "code": "missing_scope",
  "error": "API key missing required scope. Needed one of: tickets.read, admin",
  "request_id": "req_8f2c1a9d4b7e"
}
oward hilang_api_key / invalid_apii_key

Tiada kunci dihantar, atau kunci salah atau telah tamat tempoh. HTTP 401.

missing_scope

Kunci ini sah tetapi tidak memiliki skop yang diperlukan oleh aksi ini. HTTP 403_.

kunci_baca-sahaja / tindakan_terhad

Kuncinya hanya-baca, atau tindakan ini tidak ada dalam daftar-benarnya. HTTP 403_.

unknown_action

Tiada tindakan sedemikian. Panggil meta.actions untuk senarai semasa. HTTP 400.

invalid_parameter

Parameter yang diperlukan tidak hadir, atau nilai tidak diterima. HTTP 400_.

not_found

Catatan gonhadine tidak ada, atau tidak berada di ruang kerja kunci ini dapat melihat. HTTP 404_.

plan_feature_locked

Pelan anda tidak termasuk ciri yang dimiliki oleh tindakan ini. Badan respons menamakan feature, yang plan_name Dalam kekuatan dan kekuatan upgrade_url. Mencuba semula tidak akan membantu; pelan itu perlu diubah. HTTP 402.

license_required

Lisensi pemasangan tidak aktif, jadi tak ada tindakan yang akan dijalankan sampai dikembalikan. HTTP 402_.

selling_paused

Khusus perdagangan: kedai telah mematikan jualan, jadi tiada apa yang boleh disebut harga atau dipesan. HTTP 400.

rate_limited

Batas per jam bagi kunci ini digunakan. HTTP 429_.

server_error

Ada sesuatu yang gagal di pihak kita. 500.

Semoga selamat kembali

Jika penulisan tamat masa, anda tidak dapat mengetahui sama ada ia berjaya. Hantar idempotency_key undi dan ulang panggilan yang sama mengembalikan hasil asli daripada melakukan pekerjaan dua kali.

Penulisan palsu
{
  "action": "tickets.reply",
  "ticket_id": 4192,
  "body": "Thanks, that is now fixed.",
  "idempotency_key": "your-unique-id-for-this-attempt"
}
Berapa lama itu berlangsung

Kunci A diingat untuk 24 Jam-jam melawan tindakan yang sama dan API Kuncinya.

Apa yang kau dapatkan

Respon asli, ditambah idempoten_replay: benar sehingga Anda dapat mengatakan itu adalah replay.

Kegagalan tetap dapat dicoba kembali

Hanya penulisan sukses yang diingati. Jika panggilan gagal, mengirimkannya lagi dengan kunci yang sama menjalankannya lagi, yaitu apa yang Anda inginkan.

Bacaan

Bacaan tidak mengabaikan kunci, mengulangi bacaan tidak berbahaya.

Testing tanpa mengubah apapun

Tambah dry_run: true Kunci, skop dan parameter Anda semua diperiksa secara normal, lalu panggilan berhenti sebelum sesuatu dibuat atau diubah.

Pengeringan dijalankan: verifikasi kelayakan dan muatan dengan aman
{
  "action": "tickets.update",
  "ticket_id": 4192,
  "status": "closed",
  "dry_run": true
}

{
  "success": true,
  "dry_run": true,
  "would_execute": true,
  "message": "Authorised and validated. No write was performed because dry_run was set."
}
✅
Gunakan dry_run semasa anda membina. Ia ialah cara terpantas untuk mengesahkan bahawa kunci mempunyai skop yang betul dan muatan anda dibentuk dengan betul, tanpa mencipta data ujian yang kemudiannya perlu anda bersihkan.

Batasan kadar laklak

Batas Per-key vin

Had jam yang boleh dikonfigur setiap API key (default ) 1000 permintaan setiap jam). Tetapkannya per kekunci di bawah Tetapan,API Kunci.

Dilebihi jika dilampaui

HTTP 429 dengan kod rate_limited, serta pengepala Retry-After yang memberitahu anda berapa saat untuk menunggu. Had ditetapkan semula pada permulaan jam seterusnya.

Mengetahui di mana Anda berdiri

Setiap respon yang dibawa oleh X-RateLimit-Limit, X-RateLimit - Remaining dan X-ReatLimit rest (sebuah timestamp Unix). Perhatikan Sisa dan pelan-pelan sebelum Anda kehabisan daripada menunggu untuk ditolak.

Meceritakan 429 Dari 401

429 bermakna tunggu dan cuba lagi. 401 bermakna kunci itu sendiri salah atau telah tamat tempoh, jadi mencuba semula tidak akan membantu sehingga anda membetulkan kunci itu.

Pra-auth penjaga angkatan brutal

Percobaan gagal-auth berulang dari satu IP Kunci yang sah tidak pernah melakukan perjalanan ini.

Praktek terbaik

Perlahankan apabila Remaining semakin rendah, dan patuhi Retry-After selepas 429 dan bukannya mencuba semula serta-merta.

Versi dan kestabilan

Versi semasa

v1. Setiap respons membawa X-OpsIQ-API-Version dan X-OpsIQ-API-Status supaya anda boleh mengesahkan apa yang sedang anda hubungi.

Bagaimana kau akan diperingatkan?

Jika versi pernah dipensiunkan, respon memperoleh standar Deprekasi dan header Sunset, dan meta. actions melaporkan usang dan sunset_at. Periksa mereka dalam pemantauan Anda dan Anda tidak akan pernah terkejut.

Apa yang tidak akan berubah

Nama aksi yang ada, parameter dan kode kesalahan mereka. Tindakan baru dan medan opsional baru mungkin ditambahkan kapan saja, jadi abaikan bidang yang tidak Anda kenali daripada gagal pada itu.

Integrasi lengkap, mulai menyelesaikan

Ini adalah seluruh loop: menemukan pekerjaan, membacanya, bertindak di atasnya, dan mengkonfirmasi apa yang Anda lakukan.

Fuir kerja tiket penuh melalui API_
# 1. Discover what this install offers and what each action needs.
POST /api/v1.php
{"action":"meta.actions"}

# 2. Find the urgent open tickets.
POST /api/v1.php
Authorization: Bearer opq_your_api_key
{"action":"tickets.list","status":"open","priority":"urgent","per_page":25}

# 3. Read one, including its conversation history.
{"action":"tickets.get","ticket_id":4192}

# 4. Reply, safely enough to retry if the network drops.
{"action":"tickets.reply","ticket_id":4192,
 "body":"We have issued the refund.","idempotency_key":"reply-4192-attempt-1"}

# 5. Close it.
{"action":"tickets.update","ticket_id":4192,"status":"closed"}

# 6. Page through anything larger: keep going until has_more is false.
{"action":"tickets.list","page":2,"per_page":50}
💡
Semua di atas berfungsi dengan cara yang sama untuk perbualan: conversations. list, conversations. get, conversation. send dan conversations,update mengikut corak yang sama, parameter dan bentuk tindak balas.

Contoh - contoh lain yang lebih banyak dikerjakan

Setiap dari ini adalah lengkap, dapat dijalankan sepotong integrasi nyata daripada fragmen.

Halaman melalui setiap catatan, dalam tiga bahasa

Aturannya sama di mana-mana: teruslah bertanya untuk halaman berikutnya sampai has_more Jangan pernah menebak total.

· Python · halaman melalui setiap tiket terbuka
import requests

API  = "https://your-opsiq-domain.com/api/v1.php"
HEAD = {"Authorization": "Bearer opq_your_api_key"}

def every(action, **params):
    """Yield every record for a list action, one page at a time."""
    page = 1
    while True:
        r = requests.post(API, headers=HEAD,
                          json={"action": action, "page": page, "per_page": 200, **params},
                          timeout=30)
        r.raise_for_status()
        body = r.json()
        if not body.get("success"):
            raise RuntimeError(f"{body.get('code')}: {body.get('error')}")
        yield from body.get("items", [])
        if not body.get("has_more"):
            return
        page += 1

for ticket in every("tickets.list", status="open"):
    print(ticket["ticket_number"], ticket["subject"])
· Node. js · halaman melalui setiap lead
const API = "https://your-opsiq-domain.com/api/v1.php";
const HEAD = { Authorization: "Bearer opq_your_api_key", "Content-Type": "application/json" };

async function* every(action, params = {}) {
  for (let page = 1; ; page++) {
    const res  = await fetch(API, {
      method: "POST",
      headers: HEAD,
      body: JSON.stringify({ action, page, per_page: 200, ...params }),
    });
    const body = await res.json();
    if (!body.success) throw new Error(`${body.code}: ${body.error}`);
    yield* body.items ?? [];
    if (!body.has_more) return;
  }
}

for await (const contact of every("crm.contacts.list", { status: "lead" })) {
  console.log(contact.email);
}
PHP PHP · halaman melalui setiap tiket terbuka
<?php
$api = "https://your-opsiq-domain.com/api/v1.php";

function opsiq(string $action, array $params = []): array {
    global $api;
    $ch = curl_init($api);
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => [
            "Authorization: Bearer opq_your_api_key",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => json_encode(["action" => $action] + $params),
        CURLOPT_TIMEOUT    => 30,
    ]);
    $body = json_decode((string)curl_exec($ch), true) ?: [];
    curl_close($ch);
    if (empty($body["success"])) {
        throw new RuntimeException(($body["code"] ?? "error") . ": " . ($body["error"] ?? "unknown"));
    }
    return $body;
}

$page = 1;
do {
    $res = opsiq("tickets.list", ["status" => "open", "page" => $page, "per_page" => 200]);
    foreach ($res["items"] as $t) {
        echo $t["ticket_number"], " ", $t["subject"], PHP_EOL;
    }
    $page++;
} while (!empty($res["has_more"]));

Setiap kegagalan yang gagal API Akan kembali

Branch pada codeJangan pernah bicara errorBungkus ini adalah seluruh kontrak dalam satu fungsi.

FOG GPETH Python · sebuah klien yang menangani setiap kode kesalahan dengan benar
import time, requests

RETRYABLE = {"server_error", "handler_unavailable"}

def call(action, **params):
    for attempt in range(4):
        r = requests.post(API, headers=HEAD, json={"action": action, **params}, timeout=30)
        body = r.json()
        if body.get("success"):
            return body

        code = body.get("code")

        if code == "rate_limited":
            # Honour Retry-After rather than guessing.
            time.sleep(int(r.headers.get("Retry-After", 60)))
            continue

        if code in RETRYABLE:
            time.sleep(2 ** attempt)
            continue

        # Everything below is permanent: retrying cannot fix it.
        if code == "plan_feature_locked":
            raise RuntimeError(f"Plan {body['plan_name']} lacks {body['feature']}: {body['upgrade_url']}")
        if code in ("missing_scope", "read_only_key", "action_restricted"):
            raise RuntimeError(f"This API key cannot do that: {body['error']}")
        if code in ("invalid_api_key", "missing_api_key"):
            raise RuntimeError("The key is wrong or expired; retrying will not help.")
        raise RuntimeError(f"{code}: {body.get('error')} (request_id {body.get('request_id')})")

    raise RuntimeError("Gave up after repeated retries")

Tangani skor kepuasan yang buruk dalam masa sejam

Baca skor rendah, buka tiket untuk masing-masing, dan jangan pernah bertindak pada satu sama dua kali.

Tutuplah lingkaran pada pelanggan yang tidak bahagia
# 1. Yesterday's detractors.
POST /api/v1.php
{"action":"tickets.csat.list","filters":{"max_rating":2},"days":1,"per_page":100}

# 2. For each one, open a follow-up ticket. The idempotency key is derived
#    from the response id, so re-running the job creates nothing twice.
POST /api/v1.php
{"action":"tickets.open",
 "customer_email":"[email protected]",
 "subject":"Following up on your feedback",
 "body":"We saw your rating and want to put it right.",
 "priority":"high",
 "idempotency_key":"csat-followup-8821"}

# 3. The same shape works for chat: conversations.ratings.list with
#    {"filters":{"max_stars":2},"days":1} returns the comment, what
#    prompted the rating and which agent it is credited to.

Berikan sebut harga untuk item dan bertindak berdasarkan jawapan peniaga

Penolakan yang memberitahu anda apa yang perlu dikumpul
POST /api/v1.php
{"action":"commerce.quotes.create","source":"whmcs","item_id":"47","quantity":1}

# The merchant needs more from the customer before it can price this:
{
  "success": false,
  "code": "quote_refused",
  "error": "We need the domain this hosting plan is for.",
  "actionable": true,
  "missing": ["domain"]
}

# Ask the customer for exactly what "missing" names, then quote again.
POST /api/v1.php
{"action":"commerce.quotes.create","source":"whmcs","item_id":"47",
 "fields":{"domain":"example.ng"}}

{
  "success": true,
  "source": "whmcs",
  "quote": {
    "quote_id": "…",
    "totals": { "total": { "amount_minor": 306027, "currency": "NGN" }, "currency": "NGN" },
    "expires_at": "2026-09-05T12:34:56+00:00"
  },
  "ordering": { "creates_order": false, "confirm_via_api": false }
}
⚠️
Nak totals.total sama seperti yang dipulangkan. Kuantiti tidak selalu mendarab harga seunit — hotel menyebut harga satu bilik untuk tiga malam — jadi angka yang anda kira sendiri mungkin berbeza daripada apa yang sebenarnya akan dicaj oleh peniaga.

Sebuah penerima webhook yang aman untuk dijalankan dalam produksi

Sahkan, nyahpenduakan, jawab dengan cepat, kemudian lakukan kerja itu. Penghantaran dicuba semula, jadi peristiwa yang sama boleh tiba lebih daripada sekali.

PHP · penerima webhook berbentuk produksi
<?php
// (verification exactly as in the Webhooks section, omitted here for brevity)

$event    = json_decode($raw, true);
$name     = $_SERVER["HTTP_X_OPSIQ_EVENT"] ?? ($event["event"] ?? "");
$delivery = $_SERVER["HTTP_X_OPSIQ_DELIVERY"] ?? "";

// 1. Already seen this delivery? Say OK and stop — do not redo the work.
if ($db->alreadyProcessed($delivery)) {
    http_response_code(200);
    exit(json_encode(["ok" => true, "duplicate" => true]));
}

// 2. Answer FAST. Anything slow belongs on your own queue: OpsIQ treats a
//    timeout as a failure and will retry the whole delivery.
$db->markProcessed($delivery);
$queue->push($name, $event);

http_response_code(200);
echo json_encode(["ok" => true]);

// 3. Your worker then routes on the event name.
//    conversation.rated        -> alert the team on a 1 or 2 star rating
//    ticket.created            -> mirror into your own helpdesk
//    crm.deal.won              -> post to #sales-alerts
//    commerce.payment.confirmed-> release the order in your fulfilment system

Pelan dan hak kelayakan

Setiap tindakan tergolong dalam satu ciri produk, dan pelan anda menentukan ciri yang anda miliki. Jika pelan anda tidak termasuk sesuatu ciri, tindakan itu menjawab 402 — selepas kunci anda disemak, jadi pemanggil yang tidak disahkan tidak mengetahui apa-apa tentang pelan anda, dan sebelum apa-apa dicipta, jadi penulisan yang disekat tidak pernah berlaku separuh jalan.

Tindakan yang dikunci mengikut pelan
{
  "success": false,
  "code": "plan_feature_locked",
  "feature": "commerce",
  "plan_locked": true,
  "plan_name": "Growth",
  "upgrade_url": "https://…",
  "request_id": "req_8f2c1a9d4b7e"
}
Bagaimana menceritakannya selain dari masalah hak

403 bermaksud KUNCI terlalu sempit — keluarkan semula dengan skop yang betul dan ia akan berfungsi. 402 bermaksud AKAUN tidak mempunyai ciri itu — tiada kunci yang boleh membukanya, pelan perlu ditukar.

Jangan cuba semula 402

Ini tidak transient. permukaan permukaan upgrade_url kepada sesiapa yang memiliki akaun itu dan bukannya berundur dan mencuba semula.

Skop sistemmin tidak melaluinya

Skop menyatakan apa yang diwakilkan oleh pengeluar kunci; pelan menyatakan apa yang dibeli oleh akaun. Kunci berskop pentadbir masih mendapat 402 untuk ciri yang tiada dalam pelan.

Cari tahu sebelum Anda kapal

Butang feature kebutuhan setiap aksi kinode diterbitkan dalam direktori aksi di bawah dan di meta.action, supaya anda boleh menyemak semasa binaan dan bukannya mendapati masalah dalam pengeluaran.

Cara tercepat untuk melihat persis di mana kunci berdiri adalah meta.me. Ia melaporkan pelan yang berkuat kuasa, setiap ciri yang dibawanya, dan setiap tindakan yang tidak boleh dipanggil oleh kunci ini berserta sebab bagi setiap satu.

meta. me — apa yang dapat dilakukan kunci ini sebenarnya
POST /api/v1.php
Authorization: Bearer opq_your_api_key

{"action":"meta.me"}

{
  "success": true,
  "key": { "name": "Reporting", "scopes": ["tickets.read"], "permissions_mode": "read_only" },
  "plan": { "name": "Growth", "features": { "ticket_system": true, "commerce": false } },
  "capabilities": {
    "available_action_count": 812,
    "blocked_actions": {
      "commerce.orders.list": "plan_locked:commerce",
      "tickets.reply":        "read_only"
    }
  }
}
✅
Panggil meta. me pertama bila integrasi bertingkah laku berbeza antara dua pemasangan. Ia menjawab "mengapa kekunci ini tidak boleh lakukan itu" dalam satu permintaan, tanpa sesiapa membuka admin.

Menyalahkan harga

commerce.quotes.create harga satu item untuk seorang pelanggan. Ia tidak mencipta apa-apa — tiada pesanan, tiada sesi pembayaran, tiada stok yang dimiliki — jadi ia selamat untuk menghubungi semasa pelanggan masih membuat keputusan.

Kutipankan item
POST /api/v1.php
Authorization: Bearer opq_your_api_key

# Your own Store
{"action":"commerce.quotes.create","source":"store","item_id":"12","quantity":2}

# A connected merchant platform, priced for a known customer
{"action":"commerce.quotes.create","source":"whmcs","item_id":"47",
 "fields":{"domain":"example.ng"},
 "customer":{"connector_customer_id":"1042"}}
Pedagang kaya-raya menang total

Untuk platform yang terhubung, totalnya berasal dari pedagang itu dan tidak pernah dihitung ulang di sini.

Refusals word you what is mist

Jika peniaga memerlukan maklumat lanjut daripada pelanggan, anda akan mendapat quote_refused dengan missing Mengeluarkan daftar nama ladang untuk dikumpulkan, dan pedagang itu sendiri yang akan ditunjukkan.

Kepesanan bukan API panggilan

Kutipan adalah indikatif. Konfirmasi terjadi di mana pelanggan berada — kartu yang ditandatangani dalam chat, atau checkout pedagang sendiri - tidak pernah melalui API_. Tanggapan mengatakan begitu dalam ordering.

Ketika menjual dijual dijedakan

Jika kedai telah mematikan jualan, jawapan sebut harga selling_paused dan bukannya meletakkan harga pada sesuatu yang tiada siapa boleh beli.

Tak ada titik akhir lain

Hampir semua yang anda perlukan ialah satu POST ke /api/v1.phpIni pengecualian, dan untuk apa masing-masing.

/api/v1/openapi.php · /api/v1/postman.php · /api/docs/

Kontrak mesin dan rujukan manusia. Tiada kunci diperlukan, jadi anda boleh meneroka sebelum memilikinya.

/api/ai_stream.php

Peristiwa yang dihantar pelayan untuk balasan sembang langsung semasa ia dijana. Satu strim, bukan tindakan JSON.

/api/writing.php

Semua yang dilakukannya juga tersedia sebagai writing.* tindakan pada /api/v1.php, iaitu tempat kerja baharu sepatutnya diletakkan.

/api/inbox_copilot.php

Draf, tulis ulang dan triase untuk kotak tiket yang tertanam di adminmu sendiri.

/api/v1/si/…

Site Intelligence sebagai REST API kecil — laman, rangkakan, isu, kata kunci, hasil — untuk saluran paip CI yang ingin memulakan rangkakan selepas penggunaan dan membaca hasilnya.

/api/connectors.php?slug=&token=

Tempat platform yang disambungkan menghantar webhooknya sendiri kepada anda melalui POST. Token dijana apabila anda mendayakan penyambung.

/api/integrations/*.php

Mesin integrasi: jalankan dan konfirmasi tindakan, dan penjualan yang tak menelan, identitas dan peristiwa perjalanan.APIPembina Webhook &

💡
Semua ini mematuhi peraturan pelan yang sama seperti tindakan. Ciri yang tidak termasuk dalam pelan anda juga menjawab 402 di sini, dalam bentuk yang sama.

Setiap aksi, dengan skop yang dibutuhkannya

Daftar ini dihasilkan dari katalog yang berjalan, sehingga selalu cocok dengan versi Anda. meta.actions mengembalikan maklumat yang sama seperti JSON.

✅
2430 named actions: 798 reads, 1632 writes and 69 scopes. Every registered administrator JSON operation has a stable named action. OpenAPI: /api/v1/openapi.php. Postman: /api/v1/postman.php. Contract quality: declared_dynamic: 585; explicit: 63; route_inferred: 1664; source_inferred: 118.

administration (26)

administration.2fa.disable

Write. Scope: administration.write, admin. Contract: route_inferred. Admin 2fa Disable

administration.2fa.enable

Write. Scope: administration.write, admin. Contract: route_inferred. Admin 2fa Enable

administration.2fa.recovery.regenerate

Write. Scope: administration.write, admin. Contract: route_inferred. Admin 2fa Recovery Regenerate

administration.2fa.setup

Read. Scope: administration.read, admin. Contract: route_inferred. Admin 2fa Setup

administration.2fa.status

Read. Scope: administration.read, admin. Contract: route_inferred. Admin 2fa Status

administration.ai.train.from.reply

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Ai Train From Reply

administration.brain.cancel

Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Brain Cancel

administration.brain.view

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Brain View

administration.chat.access.check

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Chat Access Check

administration.chat.create.ticket.on.behalf

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Chat Create Ticket On Behalf

administration.chat.draft.ticket.from.thread

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Chat Draft Ticket From Thread

administration.conv.delete

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv Delete

administration.conv.get

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv Get

administration.conv.list

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv List

administration.conv.new

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv New

administration.conv.save

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv Save

administration.notification.prefs.get

Read. Scope: administration.read, admin. Contract: declared_dynamic. Admin Notification Prefs Get

administration.notification.prefs.save

Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Notification Prefs Save

administration.notifications.list

Read. Scope: administration.read, admin. Contract: route_inferred. Admin Notifications List

administration.notifications.mark.all.read

Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Notifications Mark All Read

administration.notifications.mark.read

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Notifications Mark Read

administration.notifications.pulse

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Notifications Pulse

administration.online.list

Read. Scope: administration.read, admin. Contract: declared_dynamic. Admin Online List

administration.presence.ping

Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Presence Ping

administration.push.subscribe

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Push Subscribe

administration.realtime.token

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Realtime Token

analitik (43)

analytics.add.widget

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Add Widget

analytics.analytics.connectors.catalog

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Analytics Connectors Catalog

analytics.analytics.data

Read. Scope: analytics.read, admin. Contract: route_inferred. Analytics Data

analytics.analytics.export

Read. Scope: analytics.read, admin. Contract: route_inferred. Analytics Export

analytics.analytics.export.csv

Read. Scope: analytics.read, admin. Contract: route_inferred. Analytics Export Csv

analytics.analytics.import

Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Import

analytics.analytics.report

Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Report

analytics.analytics.segments.delete

Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Segments Delete

analytics.analytics.segments.list

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Analytics Segments List

analytics.analytics.segments.save

Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Segments Save

analytics.analytics.status

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Analytics Status

analytics.clear.all

Write. Scope: analytics.write, admin. Contract: declared_dynamic. Replay Clear All

analytics.compute

Read. Scope: analytics.read, admin. Contract: route_inferred. Funnels Compute

analytics.create

Write. Scope: analytics.write, admin. Contract: route_inferred. Ab Test Create

analytics.create.route.dashboard.create

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Create

analytics.create.route.report.create

Write. Scope: analytics.write, admin. Contract: route_inferred. Report Create

analytics.delete

Write. Scope: analytics.write, admin. Contract: route_inferred. Ab Test Delete

analytics.delete.route.dashboard.delete

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Delete

analytics.delete.route.funnels.delete

Write. Scope: analytics.write, admin. Contract: route_inferred. Funnels Delete

analytics.delete.route.report.delete

Write. Scope: analytics.write, admin. Contract: route_inferred. Report Delete

analytics.events

Read. Scope: analytics.read, admin. Contract: route_inferred. Replay Events

analytics.export

Read. Scope: analytics.read, admin. Contract: source_inferred. Analytics Export

analytics.get

Read. Scope: analytics.read, admin. Contract: route_inferred. Dashboard Get

analytics.layout.save

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Layout Save

analytics.list

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Ab Test List

analytics.list.route.dashboard.list

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Dashboard List

analytics.list.route.funnels.list

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Funnels List

analytics.list.route.report.list

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Report List

analytics.remove.widget

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Remove Widget

analytics.rename

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Rename

analytics.results

Read. Scope: analytics.read, admin. Contract: route_inferred. Ab Test Results

analytics.save

Write. Scope: analytics.write, admin. Contract: route_inferred. Funnels Save

analytics.save.widgets

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Save Widgets

analytics.scheduled.list

Read. Scope: analytics.read, admin. Contract: explicit. List scheduled analytics reports for an operator Required fields: admin_id.

analytics.sections.list

Read. Scope: analytics.read, admin. Contract: explicit. List analytics report sections and date presets

analytics.send.now

Write. Scope: analytics.write, admin. Contract: route_inferred. Report Send Now

analytics.sessions

Read. Scope: analytics.read, admin. Contract: route_inferred. Replay Sessions

analytics.step.visitors

Read. Scope: analytics.read, admin. Contract: route_inferred. Funnels Step Visitors

analytics.timeline

Read. Scope: analytics.read, admin. Contract: route_inferred. Replay Timeline

analytics.toggle.shared

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Toggle Shared

analytics.update

Write. Scope: analytics.write, admin. Contract: route_inferred. Ab Test Update

analytics.update.route.report.update

Write. Scope: analytics.write, admin. Contract: route_inferred. Report Update

analytics.widget.data

Read. Scope: analytics.read, admin. Contract: route_inferred. Dashboard Widget Data

automations (6)

automations.actions.list

Read. Scope: automations.read, admin. Contract: explicit. List integration actions

automations.delete

Write. Scope: automations.write, admin. Contract: route_inferred. Workflow Delete

automations.list

Read. Scope: automations.read, admin. Contract: route_inferred. Workflow List

automations.runs.list

Read. Scope: automations.read, admin. Contract: explicit. List automation execution history

automations.save

Write. Scope: automations.write, admin. Contract: route_inferred. Workflow Save

automations.triggers.list

Read. Scope: automations.read, admin. Contract: explicit. List integration triggers

chot (40)

chat.call.start

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Call Start

chat.cobrowse.send

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Cobrowse Send

chat.feedback

Read. Scope: chat.read, admin. Contract: route_inferred. Chat Feedback

chat.feedback.digest

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Feedback Digest

chat.form.delete

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Form Delete

chat.form.get

Read. Scope: chat.read, admin. Contract: route_inferred. Chat Form Get

chat.form.list

Read. Scope: chat.read, admin. Contract: declared_dynamic. Chat Form List

chat.form.save

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Form Save

chat.form.set.default

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Form Set Default

chat.meeting.decide

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Decide

chat.meeting.outcome.set

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Outcome Set

chat.meeting.type.delete

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Type Delete

chat.meeting.type.save

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Type Save

chat.meeting.types.list

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Types List

chat.meetings.list

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meetings List

chat.online.admins

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Online Admins

chat.permissions.list

Write. Scope: admin. Contract: route_inferred. Chat Permissions List

chat.permissions.revoke

Write. Scope: admin. Contract: route_inferred. Chat Permissions Revoke

chat.permissions.save

Write. Scope: admin. Contract: route_inferred. Chat Permissions Save

chat.permissions.upload.avatar

Write. Scope: admin. Contract: route_inferred. Chat Permissions Upload Avatar

chat.reaction.toggle

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Reaction Toggle

chat.saved_replies.add

Write. Scope: chat.write, admin. Contract: source_inferred. Chat Saved Replies Add Retry-safe with idempotency_key.

chat.saved_replies.list

Read. Scope: chat.read, admin. Contract: explicit. List workspace and personal saved replies

chat.saved_replies.save

Write. Scope: chat.write, admin. Contract: source_inferred. Chat Saved Replies Save Retry-safe with idempotency_key.

chat.set.persona

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Set Persona

chat.snooze.clear

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Snooze Clear

chat.snooze.set

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Snooze Set

chat.transfer.thread

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Transfer Thread

chat.transfer.unread

Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Transfer Unread

chat.typing.preview

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Typing Preview

chat.whisper.ai.summary

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Ai Summary

chat.whisper.controls

Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Controls

chat.whisper.delete.room

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Delete Room

chat.whisper.list

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper List

chat.whisper.mentions

Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Mentions

chat.whisper.rooms

Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Rooms

chat.whisper.save.controls

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Save Controls

chat.whisper.send

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Send

chat.whisper.targets

Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Targets

chat.whisper.unread

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Unread

Perdagangan (11)

commerce.analytics.snapshot

Read. Scope: commerce.read, analytics.read, admin. Contract: explicit. Read privacy-safe storefront analytics

commerce.orders.get

Read. Scope: commerce.read, admin. Contract: explicit. Get one Store order with its line items

commerce.orders.list

Read. Scope: commerce.read, admin. Contract: explicit. List Store orders in the bound workspace

commerce.pages.list

Read. Scope: commerce.read, admin. Contract: explicit. List storefront pages and promotional modals

commerce.products.get

Read. Scope: commerce.read, admin. Contract: explicit. Get one Store product with its variants Required fields: product_id.

commerce.products.list

Read. Scope: commerce.read, admin. Contract: explicit. List Store products in the bound workspace

commerce.quotes.create

Write. Scope: commerce.write, admin. Contract: explicit. Quote an item for a customer (creates nothing) Required fields: source, item_id. Retry-safe with idempotency_key.

commerce.readiness.get

Read. Scope: commerce.read, admin. Contract: explicit. Check demo readiness and merchant go-live readiness

commerce.refunds.list

Read. Scope: commerce.read, admin. Contract: explicit. List Store refund requests in the bound workspace

commerce.storefront.catalog.get

Read. Scope: commerce.read, admin. Contract: explicit. Discover Store themes, designs, blocks and promotional shells

commerce.storefront.get

Read. Scope: commerce.read, admin. Contract: explicit. Get the bound workspace storefront configuration

communications (21)

communications.auth.check

Read. Scope: admin. Contract: route_inferred. Email Auth Check

communications.campaign.delete

Write. Scope: communications.write, admin. Contract: route_inferred. Push Campaign Delete

communications.campaign.save

Write. Scope: communications.write, admin. Contract: route_inferred. Push Campaign Save

communications.campaign.send

Write. Scope: communications.write, admin. Contract: route_inferred. Push Campaign Send

communications.campaigns.list

Read. Scope: communications.read, admin. Contract: declared_dynamic. Push Campaigns List

communications.drafts.delete

Write. Scope: communications.write, admin. Contract: route_inferred. Email Drafts Delete

communications.drafts.list

Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Drafts List

communications.drafts.save

Write. Scope: communications.write, admin. Contract: route_inferred. Email Drafts Save

communications.drafts.send

Write. Scope: communications.write, admin. Contract: route_inferred. Email Drafts Send

communications.mailboxes.delete

Write. Scope: communications.write, admin. Contract: route_inferred. Email Mailboxes Delete

communications.mailboxes.list

Read. Scope: communications.read, admin. Contract: route_inferred. Email Mailboxes List

communications.mailboxes.poll

Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Mailboxes Poll

communications.mailboxes.save

Write. Scope: communications.write, admin. Contract: route_inferred. Email Mailboxes Save

communications.mailboxes.test

Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Mailboxes Test

communications.pipe.regen.token

Write. Scope: communications.write, admin. Contract: declared_dynamic. Email Pipe Regen Token

communications.platform.list

Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Platform List

communications.platform.send

Write. Scope: communications.write, admin. Contract: route_inferred. Email Platform Send

communications.settings.get

Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Settings Get

communications.settings.save

Write. Scope: communications.write, admin. Contract: route_inferred. Email Settings Save

communications.settings.test

Read. Scope: communications.read, admin. Contract: route_inferred. Email Settings Test

communications.vapid.generate

Write. Scope: communications.write, admin. Contract: declared_dynamic. Push Vapid Generate

connector_builder (11)

connector_builder.export

Read. Scope: connector_builder.read, admin. Contract: explicit. Export a generated connector Required fields: slug.

connector_builder.generate

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Generate a connector package Required fields: spec.

connector_builder.get

Read. Scope: connector_builder.read, admin. Contract: route_inferred. Load a Builder specification Required fields: slug.

connector_builder.import.curl

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Import cURL into Connector Builder

connector_builder.import.openapi

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Import OpenAPI into Connector Builder

connector_builder.import.postman

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Import Postman into Connector Builder

connector_builder.list

Read. Scope: connector_builder.read, admin. Contract: declared_dynamic. List Builder connectors

connector_builder.profiles

Read. Scope: connector_builder.read, connectors.read, admin. Contract: source_inferred. List Connector Builder profiles and capability contracts

connector_builder.test

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Run Builder conformance tests Required fields: slug.

connector_builder.update

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Update a generated connector Required fields: slug, spec.

connector_builder.validate

Read. Scope: connector_builder.read, admin. Contract: route_inferred. Validate a Builder specification Required fields: spec.

connectors (51)

connectors.action

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Action

connectors.backfill

Write. Scope: connectors.write, admin. Contract: route_inferred. Start connector backfill Required fields: slug.

connectors.backfill.route.connectors.backfill

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Backfill

connectors.backfill.status

Read. Scope: connectors.read, admin. Contract: route_inferred. Read connector backfill status Required fields: slug.

connectors.backfill.status.route.connectors.backfill.status

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Backfill Status

connectors.builder.ai.actions

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Ai Actions

connectors.builder.ai.draft

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Ai Draft

connectors.builder.ai.handler

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Ai Handler

connectors.builder.ai.map

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Ai Map

connectors.builder.delete

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Delete

connectors.builder.dry.run

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Dry Run

connectors.builder.generate

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Generate

connectors.builder.import.curl

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Import Curl

connectors.builder.import.openapi

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Import Openapi

connectors.builder.import.postman

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Import Postman

connectors.builder.list

Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors Builder List

connectors.builder.load

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Load

connectors.builder.marketplace.apply

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Marketplace Apply

connectors.builder.marketplace.link

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Marketplace Link

connectors.builder.marketplace.status

Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors Builder Marketplace Status

connectors.builder.marketplace.submit

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Marketplace Submit

connectors.builder.schema

Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors Builder Schema

connectors.builder.test

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Test

connectors.builder.test.action

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Test Action

connectors.builder.update

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Update

connectors.builder.validate

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Validate

connectors.contacts.import

Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Contacts Import

connectors.contract

Read. Scope: connectors.read, connector_builder.read, admin. Contract: source_inferred. Read the canonical connector capability contract

connectors.customers.sync

Write. Scope: connectors.write, admin. Contract: route_inferred. Synchronize connector customers Required fields: slug.

connectors.disable

Write. Scope: connectors.write, admin. Contract: route_inferred. Disable a connector Required fields: slug.

connectors.disable.route.connectors.disable

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Disable

connectors.email.account.department

Read. Scope: connectors.read, admin. Contract: route_inferred. Connector Email Account Department

connectors.email.account.remove

Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Email Account Remove

connectors.email.account.routing

Read. Scope: connectors.read, admin. Contract: route_inferred. Connector Email Account Routing

connectors.enable

Write. Scope: connectors.write, admin. Contract: route_inferred. Enable a connector Required fields: slug.

connectors.enable.route.connectors.enable

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Enable

connectors.get

Read. Scope: connectors.read, admin. Contract: source_inferred. Connectors Get

connectors.get.route.connectors.get

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Get

connectors.install

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Install

connectors.integrity.scan

Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connector Integrity Scan

connectors.list

Read. Scope: connectors.read, admin. Contract: explicit. List installed connectors and capabilities

connectors.list.route.connectors.list

Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors List

connectors.oauth.start

Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Oauth Start

connectors.settings.get

Read. Scope: connectors.read, admin. Contract: route_inferred. Read connector settings Required fields: slug.

connectors.settings.save

Write. Scope: connectors.write, admin. Contract: route_inferred. Save connector settings Required fields: slug, settings.

connectors.shared.oauth.delete

Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Shared Oauth Delete

connectors.sync.customers

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Sync Customers

connectors.test

Read. Scope: connectors.read, admin. Contract: source_inferred. Connectors Test

connectors.test.route.connectors.test

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Test

connectors.uninstall

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Uninstall

connectors.workflow.recipes

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Workflow Recipes

conversations (38)

conversations.ai.draft

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Ai Draft

conversations.ai.rewrite

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Ai Rewrite

conversations.archive

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Archive

conversations.assign

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Assign

conversations.assignees

Write. Scope: conversations.write, admin. Contract: declared_dynamic. Admin Client Chat Assignees

conversations.bulk

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Bulk

conversations.clear

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Clear

conversations.clear.all

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Clear All

conversations.customer.tickets

Write. Scope: conversations.write, admin. Contract: declared_dynamic. Admin Client Chat Customer Tickets

conversations.decline

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Decline

conversations.delete

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Delete

conversations.delete.last

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Delete Last

conversations.edit.last

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Edit Last

conversations.export

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Export

conversations.forget.visitor

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Forget Visitor

conversations.get

Read. Scope: conversations.read, admin. Contract: source_inferred. Conversations Get

conversations.history

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat History

conversations.list

Read. Scope: conversations.read, admin. Contract: source_inferred. Conversations List

conversations.messages

Read. Scope: conversations.read, admin. Contract: source_inferred. Conversations Messages

conversations.ratings.list

Read. Scope: conversations.read, admin. Contract: explicit. List rated Client Chat conversations

conversations.resolve

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Resolve

conversations.saved.replies

Write. Scope: conversations.write, admin. Contract: declared_dynamic. Admin Client Chat Saved Replies

conversations.saved.reply.add

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Add

conversations.saved.reply.ai.generate

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Ai Generate

conversations.saved.reply.delete

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Delete

conversations.saved.reply.save

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Save

conversations.send

Write. Scope: conversations.write, admin. Contract: source_inferred. Conversations Send Retry-safe with idempotency_key.

conversations.send.route.admin.client.chat.send

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Send

conversations.tags.set

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Tags Set

conversations.thread

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Thread

conversations.threads

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Threads

conversations.toggle

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Toggle

conversations.toggle.attachments

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Toggle Attachments

conversations.toggle.call.button

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Toggle Call Button

conversations.typing

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Typing

conversations.unarchive

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Unarchive

conversations.update

Write. Scope: conversations.write, admin. Contract: explicit. Update a conversation status, assignment or subject Retry-safe with idempotency_key.

conversations.upload

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Upload

kim (260)

crm.ab.results

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Ab Results

crm.access.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Access Set

crm.access_log.list

Read. Scope: admin. Contract: source_inferred. Crm Access Log List

crm.account.health

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Account Health

crm.account.health.board

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Account Health Board

crm.account.health.refresh

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Account Health Refresh

crm.account.plan.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Account Plan Get

crm.account.plan.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Account Plan Save

crm.account.plans.due

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Account Plans Due

crm.account.timeline

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Account Timeline

crm.activities.list

Read. Scope: crm.read. Contract: explicit. List CRM contact activities

crm.activities.record

Write. Scope: crm.write. Contract: explicit. Record a CRM contact activity Required fields: contact_id, activity_type. Retry-safe with idempotency_key.

crm.activity.feed

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Activity Feed

crm.agent.toggle

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Agent Toggle

crm.ai.policy.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ai Policy Get

crm.ai.policy.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ai Policy Save

crm.ai.policy.simulate

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ai Policy Simulate

crm.ai.trace

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Ai Trace

crm.approval.decide

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Decide

crm.approval.delegate.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Delegate Set

crm.approval.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Approval List

crm.approval.policy.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Policy Get

crm.approval.policy.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Policy Save

crm.approval.settings

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Settings

crm.approve.apply

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Approve Apply

crm.approve.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Approve List

crm.approve.reject

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Approve Reject

crm.approve.update

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Approve Update

crm.ask

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ask

crm.assign.owner

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Assign Owner

crm.assignment.get

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Assignment Get

crm.assignment.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Assignment Save

crm.attachment.delete

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Attachment Delete

crm.attachment.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Attachment List

crm.attachment.upload

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Attachment Upload

crm.autobook.meeting

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Autobook Meeting

crm.autodeal.mode

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Autodeal Mode

crm.book.meeting

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Book Meeting

crm.booking.link.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Booking Link Save

crm.booking.links.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Booking Links List

crm.build.apply

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Build Apply

crm.build.get

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Build Get

crm.build.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Build List

crm.build.plan

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Build Plan

crm.build.rollback

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Build Rollback

crm.bulk

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Bulk

crm.bundle.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Bundle Set

crm.calendar.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Calendar Status

crm.capture.status

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Capture Status

crm.comm.policy.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Comm Policy Get

crm.comm.policy.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Comm Policy Save

crm.command.snapshot

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Command Snapshot

crm.companies.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Companies List

crm.company.hierarchy

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Company Hierarchy

crm.company.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Company Save

crm.company.set.parent

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Company Set Parent

crm.company.suggest.related

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Company Suggest Related

crm.connectors.catalog

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Connectors Catalog

crm.consent_log.list

Read. Scope: crm.read. Contract: source_inferred. Crm Consent Log List

crm.contact.churn

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Contact Churn

crm.contact.draft.email

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contact Draft Email

crm.contact.enrich

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contact Enrich

crm.contact.propose.email

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contact Propose Email

crm.contacts.detail

Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Detail

crm.contacts.erase

Write. Scope: admin. Contract: source_inferred. Crm Contacts Erase Retry-safe with idempotency_key.

crm.contacts.export

Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Export

crm.contacts.import.list

Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Import List

crm.contacts.import.run

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Import Run Retry-safe with idempotency_key.

crm.contacts.list

Read. Scope: crm.read. Contract: source_inferred. Crm Contacts List

crm.contacts.next_action

Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Next Action

crm.contacts.open_chat

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Open Chat Retry-safe with idempotency_key.

crm.contacts.open_ticket

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Open Ticket Retry-safe with idempotency_key.

crm.contacts.resync

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Resync Retry-safe with idempotency_key.

crm.contacts.save

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Save Retry-safe with idempotency_key.

crm.contacts.send_email

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Send Email Retry-safe with idempotency_key.

crm.contacts.upsert

Write. Scope: crm.write. Contract: explicit. Crm Contacts Upsert Required fields: email. Retry-safe with idempotency_key.

crm.contract.amend

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Amend

crm.contract.price.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Price Set

crm.contract.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Save

crm.contract.usage

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Usage

crm.contracts.list

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contracts List

crm.conversation.intel

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Conversation Intel

crm.conversions.goals.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Conversions Goals Delete Retry-safe with idempotency_key.

crm.conversions.goals.list

Read. Scope: crm.read. Contract: source_inferred. Crm Conversions Goals List

crm.conversions.goals.save

Write. Scope: crm.write. Contract: source_inferred. Crm Conversions Goals Save Retry-safe with idempotency_key.

crm.conversions.list

Read. Scope: crm.read. Contract: source_inferred. Crm Conversions List

crm.conversions.record

Write. Scope: crm.write. Contract: source_inferred. Crm Conversions Record Retry-safe with idempotency_key.

crm.create.video.meeting

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Create Video Meeting

crm.customer.auto.sync

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Customer Auto Sync

crm.customer.auto.sync.status

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Customer Auto Sync Status

crm.customer.emails

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Customer Emails

crm.customer.payments

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Customer Payments

crm.data.steward.bulk.propose

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Data Steward Bulk Propose

crm.data.steward.inbox

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Data Steward Inbox

crm.data.steward.propose

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Data Steward Propose

crm.deal.advance

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Deal Advance

crm.deal.coach

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Deal Coach

crm.deal.coach.action

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Deal Coach Action

crm.deal.get

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Deal Get

crm.deal.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Deal Save

crm.deal.splits.get

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Deal Splits Get

crm.deal.splits.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Deal Splits Set

crm.deals.advance

Write. Scope: crm.write. Contract: explicit. Advance a CRM deal to another stage Required fields: deal_id, stage_id. Retry-safe with idempotency_key.

crm.deals.create

Write. Scope: crm.write. Contract: explicit. Create a CRM deal Required fields: title. Retry-safe with idempotency_key.

crm.deals.detail

Read. Scope: crm.read. Contract: explicit. Get one CRM deal Required fields: deal_id.

crm.deals.list

Read. Scope: crm.read. Contract: explicit. List CRM deals

crm.deals.list.route.crm.deals.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Deals List

crm.deals.update

Write. Scope: crm.write. Contract: explicit. Update a CRM deal Required fields: deal_id. Retry-safe with idempotency_key.

crm.detail

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Detail

crm.draft.outreach

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Draft Outreach

crm.enrich.account

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Enrich Account

crm.erase

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Erase

crm.events.catalog

Read. Scope: crm.read. Contract: explicit. List subscribable CRM domain events

crm.events.list

Read. Scope: crm.read. Contract: explicit. List durable CRM domain events

crm.export

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Export

crm.export.all

Read. Scope: crm.read, admin. Contract: route_inferred. Contact Export All

crm.field.add

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Add

crm.field.policy.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Policy Get

crm.field.policy.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Policy Save

crm.field.remove

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Remove

crm.fields.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Fields List

crm.forecast.board

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Forecast Board

crm.forecast.snapshot

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Forecast Snapshot

crm.form.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Form Save

crm.forms.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Forms List

crm.health.repair.catalog

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Health Repair Catalog

crm.health.smoke

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Health Smoke

crm.health.snapshot

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Health Snapshot

crm.home.persona.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Home Persona Set

crm.identity.rules.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Identity Rules Get

crm.identity.rules.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Identity Rules Save

crm.import.list

Read. Scope: crm.read, admin. Contract: route_inferred. Contact Import List

crm.import.run

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Import Run

crm.inbound.activity

Read. Scope: crm.read. Contract: source_inferred. Crm Inbound Activity

crm.inbound.endpoints.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Inbound Endpoints Delete Retry-safe with idempotency_key.

crm.inbound.endpoints.list

Read. Scope: crm.read. Contract: source_inferred. Crm Inbound Endpoints List

crm.inbound.endpoints.save

Write. Scope: crm.write. Contract: source_inferred. Crm Inbound Endpoints Save Retry-safe with idempotency_key.

crm.inbound.endpoints.test

Write. Scope: crm.write. Contract: source_inferred. Crm Inbound Endpoints Test Retry-safe with idempotency_key.

crm.leaderboard

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Leaderboard

crm.lifecycle.evaluate

Write. Scope: crm.write. Contract: source_inferred. Crm Lifecycle Evaluate Retry-safe with idempotency_key.

crm.lifecycle.rules.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Lifecycle Rules Delete Retry-safe with idempotency_key.

crm.lifecycle.rules.list

Read. Scope: crm.read. Contract: source_inferred. Crm Lifecycle Rules List

crm.lifecycle.rules.save

Write. Scope: crm.write. Contract: source_inferred. Crm Lifecycle Rules Save Retry-safe with idempotency_key.

crm.list

Read. Scope: crm.read, admin. Contract: route_inferred. Contacts List

crm.mailbox.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Mailbox Status

crm.meeting.book

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Book

crm.meeting.cancel

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Cancel

crm.meeting.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Meeting List

crm.meeting.reschedule.accept

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Reschedule Accept

crm.meeting.reschedule.reject

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Reschedule Reject

crm.merge

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Merge

crm.message.send

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Message Send

crm.messaging.provider.delete

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Messaging Provider Delete

crm.messaging.provider.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Messaging Provider Save

crm.messaging.provider.test

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Messaging Provider Test

crm.messaging.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Messaging Status

crm.next.action

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Next Action

crm.object.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Object Save

crm.objects.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Objects List

crm.offline.pull

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Offline Pull

crm.offline.push

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Offline Push

crm.open.chat

Read. Scope: crm.read, admin. Contract: route_inferred. Contact Open Chat

crm.open.ticket

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Open Ticket

crm.outreach.campaigns.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Campaigns Delete Retry-safe with idempotency_key.

crm.outreach.campaigns.list

Read. Scope: crm.read. Contract: source_inferred. Crm Outreach Campaigns List

crm.outreach.campaigns.save

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Campaigns Save Retry-safe with idempotency_key.

crm.outreach.campaigns.send

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Campaigns Send Retry-safe with idempotency_key.

crm.outreach.send

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Send Retry-safe with idempotency_key.

crm.outreach.templates.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Templates Delete Retry-safe with idempotency_key.

crm.outreach.templates.list

Read. Scope: crm.read. Contract: source_inferred. Crm Outreach Templates List

crm.outreach.templates.preview

Read. Scope: crm.read. Contract: source_inferred. Crm Outreach Templates Preview

crm.outreach.templates.save

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Templates Save Retry-safe with idempotency_key.

crm.payments.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Payments Status

crm.pipeline.data

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Pipeline Data

crm.price.resolve

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Price Resolve

crm.pricebook.entry.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Pricebook Entry Set

crm.pricebook.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Pricebook Save

crm.pricebooks.list

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Pricebooks List

crm.privacy_settings.get

Read. Scope: crm.read. Contract: source_inferred. Crm Privacy Settings Get

crm.privacy_settings.save

Write. Scope: admin. Contract: source_inferred. Crm Privacy Settings Save Retry-safe with idempotency_key.

crm.product.archive

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Product Archive

crm.product.revenue

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Product Revenue

crm.product.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Product Save

crm.products.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Products List

crm.propose.meeting

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Propose Meeting

crm.propose.outreach

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Propose Outreach

crm.prospecting.dashboard

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Prospecting Dashboard

crm.prospecting.icp.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Prospecting Icp Save

crm.prospecting.import

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Prospecting Import

crm.prospecting.research

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Prospecting Research

crm.prospecting.score

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Prospecting Score

crm.prospecting.sequence

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Prospecting Sequence

crm.qualification.checklist.get

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Qualification Checklist Get

crm.qualification.checklist.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Qualification Checklist Save

crm.quota.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Quota Save

crm.quote.get

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Quote Get

crm.quote.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Quote Save

crm.quotes.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Quotes List

crm.record.delete

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Delete

crm.record.fields.get

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Record Fields Get

crm.record.fields.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Fields Save

crm.record.get

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Record Get

crm.record.history

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Record History

crm.record.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Save

crm.record.share.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Share Set

crm.record.share.unset

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Share Unset

crm.record.shares

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Shares

crm.records.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Records List

crm.restore.email.consent

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Restore Email Consent

crm.resync.from.platform

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Resync From Platform

crm.retention.catalog

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Retention Catalog

crm.revert

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Revert

crm.runtime.policy.get

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Runtime Policy Get

crm.runtime.policy.remote.wipe

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Runtime Policy Remote Wipe

crm.runtime.policy.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Runtime Policy Save

crm.save

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Save

crm.scoring.rule.ai

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Scoring Rule Ai

crm.scoring.rule.delete

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Scoring Rule Delete

crm.scoring.rule.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Scoring Rule List

crm.scoring.rule.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Scoring Rule Save

crm.segments.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Segments Delete Retry-safe with idempotency_key.

crm.segments.list

Read. Scope: crm.read. Contract: source_inferred. Crm Segments List

crm.segments.members

Read. Scope: crm.read. Contract: source_inferred. Crm Segments Members

crm.segments.preview

Read. Scope: crm.read. Contract: source_inferred. Crm Segments Preview

crm.segments.save

Write. Scope: crm.write. Contract: source_inferred. Crm Segments Save Retry-safe with idempotency_key.

crm.segments.suggestions.accept

Write. Scope: crm.write. Contract: source_inferred. Crm Segments Suggestions Accept Retry-safe with idempotency_key.

crm.segments.suggestions.dismiss

Write. Scope: crm.write. Contract: source_inferred. Crm Segments Suggestions Dismiss Retry-safe with idempotency_key.

crm.segments.suggestions.list

Read. Scope: crm.read. Contract: source_inferred. Crm Segments Suggestions List

crm.semantic.search

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Semantic Search

crm.send.email

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Send Email

crm.send.email.route.crm.send.email

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Send Email

crm.send.for.signature

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Send For Signature

crm.send.payment.link

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Send Payment Link

crm.sequence.action

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Sequence Action

crm.sequence.runs

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Sequence Runs

crm.setup.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Setup Status

crm.sharing.rules.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Sharing Rules Get

crm.sharing.rules.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Sharing Rules Save

crm.subject.registry

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Subject Registry

crm.subscriptions.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Subscriptions List

crm.subscriptions.rollup

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Subscriptions Rollup

crm.subscriptions.sync

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Subscriptions Sync

crm.task.create

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Task Create

crm.tasks.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Tasks List

crm.team.parent.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Team Parent Set

crm.team.rules.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Team Rules Set

crm.team.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Team Save

crm.teams.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Teams List

crm.territory.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Territory Set

crm.video.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Video Status

crm.views.delete

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Views Delete

crm.views.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Views List

crm.views.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Views Save

crm.webhooks.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Webhooks Delete Retry-safe with idempotency_key.

crm.webhooks.list

Read. Scope: crm.read. Contract: explicit. List CRM outbound webhook endpoints and recent deliveries

crm.webhooks.save

Write. Scope: crm.write. Contract: source_inferred. Crm Webhooks Save Retry-safe with idempotency_key.

crm.webhooks.test

Write. Scope: crm.write. Contract: source_inferred. Crm Webhooks Test Retry-safe with idempotency_key.

crm.workflows.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Workflows Delete Retry-safe with idempotency_key.

crm.workflows.list

Read. Scope: crm.read. Contract: source_inferred. Crm Workflows List

crm.workflows.save

Write. Scope: crm.write. Contract: source_inferred. Crm Workflows Save Retry-safe with idempotency_key.

customers (44)

customers.analyze

Write. Scope: customers.write, journey.write, admin. Contract: route_inferred. Analyze a customer journey with AI Required fields: client_id.

customers.behaviour

Write. Scope: admin. Contract: route_inferred. Cdp Behaviour

customers.behaviour.analyze

Write. Scope: admin. Contract: route_inferred. Cdp Behaviour Analyze

customers.chat.embed.backfill

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Embed Backfill

customers.chat.embed.status

Read. Scope: customers.read, admin. Contract: declared_dynamic. Client Chat Embed Status

customers.chat.faq.ai.generate

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Ai Generate

customers.chat.faq.approve.all

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Approve All

customers.chat.faq.delete

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Delete

customers.chat.faq.delete.all

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Faq Delete All

customers.chat.faq.export

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Faq Export

customers.chat.faq.generate

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Generate

customers.chat.faq.import

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Import

customers.chat.faq.list

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq List

customers.chat.faq.save

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Save

customers.chat.faq.set.help

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Set Help

customers.chat.faq.set.help.all

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Set Help All

customers.chat.faq.status

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Status

customers.chat.grant.upload

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Grant Upload

customers.chat.help.set.slug

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Help Set Slug

customers.chat.knowledge.crawl.step

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Crawl Step

customers.chat.knowledge.delete

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Delete

customers.chat.knowledge.delete.all

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Delete All

customers.chat.knowledge.delete.duplicates

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Delete Duplicates

customers.chat.knowledge.duplicates

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Duplicates

customers.chat.knowledge.export.json

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Export Json

customers.chat.knowledge.import.json

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Import Json

customers.chat.knowledge.preview

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Preview

customers.chat.knowledge.recrawl

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Recrawl

customers.chat.knowledge.test.url

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Test Url

customers.chat.revoke.upload

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Revoke Upload

customers.chat.upload.agent.avatar

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Upload Agent Avatar

customers.chat.upload.ai.avatar

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Upload Ai Avatar

customers.chat.upload.icon

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Upload Icon

customers.client.analyze

Write. Scope: admin. Contract: route_inferred. Cdp Client Analyze

customers.client.delete

Write. Scope: admin. Contract: route_inferred. Cdp Client Delete

customers.client.export

Write. Scope: admin. Contract: route_inferred. Cdp Client Export

customers.client.journey

Read. Scope: admin. Contract: route_inferred. Cdp Client Journey

customers.client.prepare.outreach

Write. Scope: customers.write, admin. Contract: route_inferred. Cdp Client Prepare Outreach

customers.clients.list

Read. Scope: admin. Contract: route_inferred. Cdp Clients List

customers.detail

Read. Scope: customers.read, admin. Contract: route_inferred. Client Detail

customers.get

Read. Scope: customers.read, crm.read, admin. Contract: route_inferred. Get a customer profile Required fields: client_id.

customers.journey

Read. Scope: customers.read, journey.read, admin. Contract: route_inferred. Get a complete customer journey Required fields: client_id.

customers.list

Read. Scope: customers.read, crm.read, admin. Contract: route_inferred. List known customers

customers.outreach.prepare

Write. Scope: customers.write, crm.write, admin. Contract: route_inferred. Prepare CRM outreach for a customer Required fields: client_id.

departments (1)

departments.list

Read. Scope: departments.read, admin. Contract: source_inferred. Departments List

E-mail (2)

email.template.send

Write. Scope: email.write, admin. Contract: source_inferred. Send one governed workspace email template Required fields: template, to. Retry-safe with idempotency_key.

email.templates.list

Read. Scope: email.read, admin. Contract: source_inferred. List email templates available to this workspace

engagement (162)

engagement.ab.autowinner

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ab Autowinner

engagement.ab.bandit

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ab Bandit

engagement.address.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Address Get

engagement.address.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Address Save

engagement.ai.agent

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Agent

engagement.ai.analyze

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Analyze

engagement.ai.compile.profile

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Compile Profile

engagement.ai.copy

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Copy

engagement.ai.critique

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Critique

engagement.ai.decide

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Decide

engagement.ai.design

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Design

engagement.ai.edit

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Edit

engagement.ai.generate

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Generate

engagement.ai.ideas

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Ideas

engagement.ai.image

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Image

engagement.ai.image.edit

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Image Edit

engagement.ai.localize

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Localize

engagement.ai.logo

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Logo

engagement.ai.media.jobs

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Media Jobs

engagement.ai.narrative

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Narrative

engagement.ai.responsive

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Responsive

engagement.ai.variants

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Variants

engagement.ai.video.start

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Video Start

engagement.ai.video.status

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Video Status

engagement.approval.decide

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Approval Decide

engagement.approval.request

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Approval Request

engagement.approvals.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Approvals List

engagement.asset.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Asset Delete

engagement.asset.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Asset Upload

engagement.assets.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Assets List

engagement.audience.materialize

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Audience Materialize

engagement.audience.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Audience Save

engagement.audience.test

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Audience Test

engagement.audit.export

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Audit Export

engagement.autoresponder.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Autoresponder Get

engagement.autoresponder.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Autoresponder Save

engagement.bank.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Delete

engagement.bank.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Bank List

engagement.bank.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Save

engagement.bank.used

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Used

engagement.blackouts.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Blackouts Get

engagement.blackouts.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Blackouts Save

engagement.brand.kit.bootstrap

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Brand Kit Bootstrap

engagement.brand.kit.font.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Brand Kit Font Upload

engagement.brand.kit.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Brand Kit Get

engagement.brand.kit.get.route.survey.brand.kit.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Brand Kit Get

engagement.brand.kit.save

Write. Scope: engagement.write, admin. Contract: declared_dynamic. Promo Brand Kit Save

engagement.brand.kit.save.route.survey.brand.kit.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Brand Kit Save

engagement.campaign.archive

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Archive

engagement.campaign.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Delete

engagement.campaign.duplicate

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Duplicate

engagement.campaign.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Get

engagement.campaign.launch

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Campaign Launch

engagement.campaign.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign List

engagement.campaign.pause

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Pause

engagement.campaign.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Preview

engagement.campaign.publish

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Publish

engagement.campaign.rollback

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Rollback

engagement.campaign.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Save

engagement.campaign.save.route.survey.campaign.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Campaign Save

engagement.campaign.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Toggle

engagement.campaign.versions

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Versions

engagement.comment.add

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Comment Add

engagement.comments.add

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Add

engagement.comments.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Delete

engagement.comments.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Comments List

engagement.comments.list.route.survey.comments.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Comments List

engagement.comments.resolve

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Resolve

engagement.connectors.catalog

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Connectors Catalog

engagement.coupon.providers

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Coupon Providers

engagement.coupons.clear

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Coupons Clear

engagement.coupons.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Coupons Stats

engagement.coupons.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Coupons Upload

engagement.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Delete

engagement.delete.route.tour.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Delete

engagement.delivery.analytics

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Delivery Analytics

engagement.delivery.dashboard

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Delivery Dashboard

engagement.deployment.ab.promote

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Ab Promote

engagement.deployment.ab.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Ab Save

engagement.deployment.publish

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Publish

engagement.deployment.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Save

engagement.deployment.status

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Status

engagement.digest.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Digest Save

engagement.feed.catalog

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Feed Catalog

engagement.feed.items

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Feed Items

engagement.geo.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Geo Preview

engagement.idle.cron.set

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Idle Cron Set

engagement.import.create

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Import Create

engagement.import.replay

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Import Replay

engagement.leads.export

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Leads Export

engagement.leads.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Leads List

engagement.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Announcements List

engagement.list.route.tours.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Tours List

engagement.module.set.ai.live

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Ai Live

engagement.module.set.custom.html

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Custom Html

engagement.module.set.enabled

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Enabled

engagement.module.status

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Module Status

engagement.onsite.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Onsite Preview

engagement.pause.all

Write. Scope: engagement.write, admin. Contract: declared_dynamic. Promo Pause All

engagement.presence

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Presence

engagement.preview.share

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Preview Share

engagement.push.draft

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Push Draft

engagement.recipients.issue

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Recipients Issue

engagement.recipients.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Recipients List

engagement.recipients.revoke

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Recipients Revoke

engagement.response.detail

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Response Detail

engagement.responses.browse

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Responses Browse

engagement.rule.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Delete

engagement.rule.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Save

engagement.rule.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Proactive Rule Stats

engagement.rule.test

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Rule Test

engagement.rule.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Toggle

engagement.rules.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Proactive Rules List

engagement.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Save

engagement.save.route.tour.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Save

engagement.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Stats

engagement.stats.route.tour.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Tour Stats

engagement.studio.a11y

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio A11y

engagement.studio.ai.generate

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Generate

engagement.studio.ai.insights

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Insights

engagement.studio.ai.target

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Target

engagement.studio.archive

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Archive

engagement.studio.assets

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Studio Assets

engagement.studio.create

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Create

engagement.studio.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Delete

engagement.studio.duplicate

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Duplicate

engagement.studio.event

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Studio Event

engagement.studio.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Get

engagement.studio.governance

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Governance

engagement.studio.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Studio List

engagement.studio.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Preview

engagement.studio.preview.link

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Preview Link

engagement.studio.publish

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Publish

engagement.studio.rename

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Rename

engagement.studio.revert

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Revert

engagement.studio.save.draft

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Save Draft

engagement.studio.save.targeting

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Save Targeting

engagement.studio.set.active

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Set Active

engagement.studio.set.status

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Set Status

engagement.studio.template.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Template Delete

engagement.studio.template.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Template Save

engagement.studio.tpl.preview

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Tpl Preview

engagement.studio.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Upload

engagement.studio.webhook

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Webhook

engagement.targeting.simulate

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Targeting Simulate

engagement.template.apply

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Template Apply

engagement.template.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Template List

engagement.template.save.custom

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Template Save Custom

engagement.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Toggle

engagement.toggle.route.tour.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Toggle

engagement.trigger.set.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Trigger Set Save

engagement.variant.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Delete

engagement.variant.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Variant List

engagement.variant.promote

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Promote

engagement.variant.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Save

engagement.version.compare

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Version Compare

engagement.version.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Version Get

engagement.version.label

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Version Label

engagement.webhook.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Delete

engagement.webhook.replay

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Replay

engagement.webhook.run

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Run

engagement.webhook.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Save

feedback (8)

feedback.analytics

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Analytics

feedback.detractors

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Detractors

feedback.get

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Get

feedback.ingest

Write. Scope: feedback.write, admin. Contract: explicit. Ingest a feedback record or external review

feedback.list

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback List

feedback.overview

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Overview

feedback.sources.list

Read. Scope: feedback.read, admin. Contract: explicit. List Voice of Customer feedback sources

feedback.update

Write. Scope: feedback.write, admin. Contract: source_inferred. Feedback Update Retry-safe with idempotency_key.

files (1)

files.get

Read. Scope: files.read, admin. Contract: source_inferred. Files Get

hr (48)

hr.agent.incident.close

Write. Scope: hr.write, admin. Contract: route_inferred. Close an agent incident — the same act that lifts the suspension it caused Required fields: incident_uuid, resolution.

hr.agent.step

Write. Scope: hr.write, admin. Contract: route_inferred. Run one agent step: gate verdict, execution and outcome reported separately Required fields: run_uuid, agent_key, tool_key, jurisdiction, purpose.

hr.agent.step.status

Read. Scope: hr.read, admin. Contract: route_inferred. What actually happened at a step (permitted, executed, proven, failed, compensated) Required fields: run_uuid, seq.

hr.agent.takeover

Write. Scope: hr.write, admin. Contract: route_inferred. A human takes an agent run; no further agent steps are accepted Required fields: run_uuid.

hr.agent.tool.grant

Write. Scope: hr.write, admin. Contract: route_inferred. Grant an agent a tool for one jurisdiction and purpose, up to a risk ceiling Required fields: agent_key, tool_key, jurisdiction, max_risk, purpose.

hr.agent.tools

Read. Scope: hr.read, admin. Contract: declared_dynamic. List the registered typed tools an agent may use, and open agent incidents

hr.ai.corrections

Write. Scope: hr.write, admin. Contract: declared_dynamic. Bundle recent reviewer corrections into a dataset; it is pending privacy review and trains nothing

hr.ai.quality.overview

Read. Scope: hr.read, admin. Contract: declared_dynamic. The AI quality board: sampled defect rate, override pressure per workflow, coaching reception

hr.booking.slots_reconcile

Write. Scope: hr.write, admin. Contract: declared_dynamic. Release booking slots whose claim never became a booked meeting

hr.connectors.certify

Write. Scope: hr.write, admin. Contract: route_inferred. Certify an HR connector (scope sandbox|production; production demands provider-side proof under dual control) Required fields: connector_class, connector_key, scope, evidence, submitted_by.

hr.connectors.health

Read. Scope: hr.read, admin. Contract: route_inferred. One connector account's health: certification level and scope, last reconciliation verdict, failures and webhook backlog Required fields: account_uuid.

hr.decisions.appeals

Write. Scope: hr.write, admin. Contract: route_inferred. File an appeal against an AI decision on a person's behalf; it must be heard by an independent human Required fields: decision_uuid, subject_type, subject_id, grounds.

hr.decisions.explanation

Read. Scope: hr.read, admin. Contract: route_inferred. Plain-language explanation of one AI decision: what was looked at, which policy, and how to appeal Required fields: decision_uuid, audience.

hr.employee.provision

Write. Scope: hr.write, admin. Contract: route_inferred. Provision seatless employee access and send the invitation Required fields: person_uuid.

hr.employee.restore

Write. Scope: hr.write, admin. Contract: route_inferred. Lift an employee access suspension (written reason required) and provision again Required fields: person_uuid, reason.

hr.experience.metrics

Read. Scope: hr.read, admin. Contract: route_inferred. Measured persona experience metrics (self-service rate, decision cycle, coaching usefulness, quality) from live journeys

hr.global.readiness

Read. Scope: hr.read, admin. Contract: declared_dynamic. The whole launch picture: 15-gate leadership score, release readiness checks and jurisdiction coverage

hr.identity.facets

Read. Scope: hr.read, admin. Contract: route_inferred. List a person's identity facets and open conflicts Required fields: person_uuid.

hr.identity.link

Write. Scope: hr.write, admin. Contract: route_inferred. Link an identity facet to a person Required fields: person_uuid, facet_type, facet_key.

hr.interview.room.connect

Write. Scope: hr.write, admin. Contract: route_inferred. Connect the AI to interview media; refuses unless media really reaches the worker Required fields: media_uuid.

hr.interview.room.consent

Write. Scope: hr.write, admin. Contract: route_inferred. Record or withdraw consent for ONE interview purpose (recording, biometric_liveness, transcription) Required fields: media_uuid, purpose, state.

hr.interview.room.pause

Write. Scope: hr.write, admin. Contract: route_inferred. Pause a live interview Required fields: media_uuid.

hr.interview.room.provision

Write. Scope: hr.write, admin. Contract: route_inferred. Provision an interview room (a place to meet — NOT AI participation) Required fields: session_uuid, transport, accommodation_route.

hr.interview.room.state

Read. Scope: hr.read, admin. Contract: route_inferred. Read an interview room, including whether the AI is actually participating Required fields: media_uuid.

hr.interview.room.takeover

Write. Scope: hr.write, admin. Contract: route_inferred. A human takes the interview; the AI cannot speak in it again Required fields: media_uuid, reason.

hr.jurisdiction.capabilities

Read. Scope: hr.read, admin. Contract: route_inferred. What this product may do in one country, per feature, with the law behind each answer Required fields: code.

hr.jurisdiction.change.raise

Write. Scope: hr.write, admin. Contract: route_inferred. Report a change in the law; a high or critical one suspends every lane in that jurisdiction at once Required fields: pack_key, summary, severity.

hr.jurisdiction.coverage

Read. Scope: hr.read, admin. Contract: declared_dynamic. Computed coverage for every market: released pack, named counsel owner, cited sources, passing tests

hr.jurisdiction.explain

Read. Scope: hr.read, admin. Contract: route_inferred. Why an action about one person is allowed, reduced or blocked, with the rule and citation Required fields: person_uuid, feature.

hr.jurisdiction.pack.release

Write. Scope: hr.write, admin. Contract: route_inferred. Put a drafted policy pack into effect; refused without a named counsel owner and a cited law Required fields: release_uuid.

hr.learning.overview

Read. Scope: hr.read, admin. Contract: declared_dynamic. Read courses, paths and enrolments

hr.leave.overview

Read. Scope: hr.read, admin. Contract: declared_dynamic. Read leave types and requests

hr.lifecycle.lanes

Read. Scope: hr.read, admin. Contract: declared_dynamic. Every lifecycle lane with its mode, KPIs and whether a live tool path really exists behind it

hr.marketplace.overview

Read. Scope: hr.read, admin. Contract: declared_dynamic. Read HR connector accounts, conflicts and deliveries

hr.org.tree

Read. Scope: hr.read, admin. Contract: declared_dynamic. Read the organisation tree

hr.people.create

Write. Scope: hr.write, admin. Contract: route_inferred. Create an HR person Required fields: display_name.

hr.people.get

Read. Scope: hr.read, admin. Contract: route_inferred. Get one HR person Required fields: person_uuid.

hr.people.list

Read. Scope: hr.read, admin. Contract: declared_dynamic. List HR people

hr.people.update

Write. Scope: hr.write, admin. Contract: route_inferred. Update an HR person Required fields: person_uuid, display_name, primary_email.

hr.postings.list

Read. Scope: hr.read, admin. Contract: declared_dynamic. List job postings

hr.readiness.read

Read. Scope: hr.read, admin. Contract: declared_dynamic. Run the HR release readiness report

hr.release.verify

Write. Scope: hr.write, admin. Contract: declared_dynamic. Run the four HR release gates (schema, manifest, probe, readiness)

hr.requisitions.create

Write. Scope: hr.write, admin. Contract: route_inferred. Create a requisition Required fields: title, openings, justification.

hr.requisitions.list

Read. Scope: hr.read, admin. Contract: declared_dynamic. List requisitions

hr.thread.delete

Write. Scope: hr.write, admin. Contract: route_inferred. Delete a workforce conversation; refused while it is under legal hold Required fields: thread_uuid, reason.

hr.thread.legal_hold

Write. Scope: hr.write, admin. Contract: route_inferred. Place or lift a legal hold on a workforce conversation Required fields: thread_uuid, on, reason.

hr.thread.retention

Write. Scope: hr.write, admin. Contract: route_inferred. Set a conversation's retention class (standard|extended|permanent) Required fields: thread_uuid, retention_class.

hr.threads.retention_sweep

Write. Scope: hr.write, admin. Contract: declared_dynamic. Run the conversation retention sweep; legal holds are never swept

intent (6)

intent.clear

Write. Scope: intent.write, admin. Contract: declared_dynamic. Intent Clear

intent.funnel

Read. Scope: intent.read, analytics.read, admin. Contract: route_inferred. Read the intent funnel

intent.funnel.aggregate

Read. Scope: intent.read, admin. Contract: route_inferred. Intent Funnel Aggregate

intent.funnel.route.intent.funnel

Read. Scope: intent.read, admin. Contract: route_inferred. Intent Funnel

intent.summary

Read. Scope: intent.read, analytics.read, admin. Contract: route_inferred. Read intent summaries

intent.summary.route.intent.summary

Read. Scope: intent.read, admin. Contract: route_inferred. Intent Summary

kyb (6)

kb.faq.delete

Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Delete Retry-safe with idempotency_key.

kb.faq.generate

Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Generate Retry-safe with idempotency_key.

kb.faq.import

Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Import Retry-safe with idempotency_key.

kb.faq.list

Read. Scope: kb.read, read, admin. Contract: source_inferred. Kb Faq List

kb.faq.save

Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Save Retry-safe with idempotency_key.

kb.faq.set_status

Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Set Status Retry-safe with idempotency_key.

knowledge (78)

knowledge.analytics.get

Read. Scope: kb.read, admin. Contract: route_inferred. Help Analytics Get

knowledge.analytics.toggle

Write. Scope: kb.write, admin. Contract: route_inferred. Help Analytics Toggle

knowledge.article.ai.refine

Read. Scope: kb.read, admin. Contract: route_inferred. Help Article Ai Refine

knowledge.article.class.bulk

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Class Bulk

knowledge.article.delete

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Delete

knowledge.article.publish

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Publish

knowledge.article.save

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Save

knowledge.article.set.category

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Set Category

knowledge.article.set.public

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Set Public

knowledge.articles.ai.generate

Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Ai Generate

knowledge.articles.bulk.delete

Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Bulk Delete

knowledge.articles.count

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Articles Count

knowledge.articles.get

Read. Scope: kb.read, admin. Contract: explicit. Get one Help Center article Required fields: article_id.

knowledge.articles.ids

Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Ids

knowledge.articles.list

Read. Scope: kb.read, admin. Contract: route_inferred. Help Articles List

knowledge.articles.set.public.all

Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Set Public All

knowledge.categories.ai.merge

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Categories Ai Merge

knowledge.categories.bulk.delete

Write. Scope: kb.write, admin. Contract: route_inferred. Help Categories Bulk Delete

knowledge.categories.list

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Categories List

knowledge.categories.merge.dupes

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Categories Merge Dupes

knowledge.category.delete

Write. Scope: kb.write, admin. Contract: route_inferred. Help Category Delete

knowledge.category.get

Read. Scope: kb.read, admin. Contract: route_inferred. Help Category Get

knowledge.category.save

Write. Scope: kb.write, admin. Contract: route_inferred. Help Category Save

knowledge.center.article.image.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Article Image Upload

knowledge.center.favicon.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Favicon Upload

knowledge.center.hero.dark.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Hero Dark Upload

knowledge.center.hero.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Hero Upload

knowledge.center.logo.dark.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Logo Dark Upload

knowledge.center.logo.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Logo Upload

knowledge.center.og.image.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Og Image Upload

knowledge.center.settings.get

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Center Settings Get

knowledge.center.settings.save

Write. Scope: kb.write, admin. Contract: route_inferred. Help Center Settings Save

knowledge.center.subhero.dark.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Subhero Dark Upload

knowledge.center.subhero.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Subhero Upload

knowledge.center.translate.estimate

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Translate Estimate

knowledge.center.translate.run

Write. Scope: kb.write, admin. Contract: route_inferred. Help Center Translate Run

knowledge.center.translate.status

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Center Translate Status

knowledge.center.translate.stop

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Translate Stop

knowledge.center.widget.hero.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Widget Hero Upload

knowledge.center.widget.icon.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Widget Icon Upload

knowledge.comments.deliver.notifications

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Comments Deliver Notifications

knowledge.comments.moderate

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Comments Moderate

knowledge.comments.moderation.list

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Comments Moderation List

knowledge.import.batches

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Batches

knowledge.import.connectors

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Import Connectors

knowledge.import.csv.preview

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Import Csv Preview

knowledge.import.preview

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Preview

knowledge.import.resync

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Resync

knowledge.import.run

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Run

knowledge.import.undo

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Undo

knowledge.insights.generate

Write. Scope: kb.write, admin. Contract: route_inferred. Help Insights Generate

knowledge.insights.get

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Insights Get

knowledge.mark.reviewed

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Mark Reviewed

knowledge.missed.dismiss

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Dismiss

knowledge.missed.draft.article

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Draft Article

knowledge.missed.list

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Missed List

knowledge.missed.mark.published

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Mark Published

knowledge.missed.refresh

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Missed Refresh

knowledge.organize.descriptions

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Organize Descriptions

knowledge.organize.status

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Organize Status

knowledge.organize.step

Write. Scope: kb.write, admin. Contract: route_inferred. Help Organize Step

knowledge.publish

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Publish

knowledge.reformat.revert

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Reformat Revert

knowledge.reformat.status

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Reformat Status

knowledge.reformat.step

Write. Scope: kb.write, admin. Contract: route_inferred. Help Reformat Step

knowledge.review.queue

Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Review Queue

knowledge.search.gaps

Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Search Gaps

knowledge.set.featured

Write. Scope: kb.write, admin. Contract: route_inferred. Help Set Featured

knowledge.set.visibility

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Set Visibility

knowledge.subdomain.allocate

Write. Scope: kb.write, admin. Contract: route_inferred. Help Subdomain Allocate

knowledge.subdomain.check

Read. Scope: kb.read, admin. Contract: route_inferred. Help Subdomain Check

knowledge.subdomain.release

Write. Scope: kb.write, admin. Contract: route_inferred. Help Subdomain Release

knowledge.taxonomy.organize

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Taxonomy Organize

knowledge.taxonomy.status

Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Taxonomy Status

knowledge.taxonomy.step

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Taxonomy Step

knowledge.widget.categories

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Widget Categories

knowledge.widget.publish

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Widget Publish

knowledge.widget.targets

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Widget Targets

leads (6)

leads.delete

Write. Scope: leads.write, crm.write, admin. Contract: route_inferred. Delete a lead Required fields: lead_id.

leads.delete.route.lead.delete

Write. Scope: leads.write, admin. Contract: route_inferred. Lead Delete

leads.list

Read. Scope: leads.read, crm.read, admin. Contract: route_inferred. List leads

leads.stats

Read. Scope: leads.read, analytics.read, admin. Contract: declared_dynamic. Get lead statistics

leads.stats.route.leads.stats

Read. Scope: leads.read, admin. Contract: declared_dynamic. Leads Stats

leads.update

Write. Scope: leads.write, crm.write, admin. Contract: route_inferred. Update a lead Required fields: lead_id, status.

meta (4)

meta.action

Read. Scope: none. Contract: explicit. Get one General API action contract Required fields: name.

meta.actions

Read. Scope: none. Contract: explicit. List the complete General API contract

meta.me

Read. Scope: none. Contract: explicit. Describe the authenticated API key and active workspace

meta.scopes

Read. Scope: none. Contract: explicit. List API scopes and the actions protected by each scope

notifications (1)

notifications.list

Read. Scope: notifications.read, admin. Contract: source_inferred. Notifications List

Platform (934)

platform.add.announcement

Write. Scope: platform.write, admin. Contract: declared_dynamic. Add Announcement

platform.add.kb.article

Write. Scope: platform.write, admin. Contract: route_inferred. Add Kb Article

platform.add.todo.item

Write. Scope: platform.write, admin. Contract: route_inferred. Add Todo Item

platform.ai.action.lookup

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Action Lookup

platform.ai.anomaly.detect

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Anomaly Detect

platform.ai.brain.add

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Add

platform.ai.brain.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Delete

platform.ai.brain.edit

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Edit

platform.ai.brain.list

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain List

platform.ai.brain.pin

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Pin

platform.ai.brain.status

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Status

platform.ai.chat

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Chat

platform.ai.confidence.stats

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Confidence Stats

platform.ai.context.lookup

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Context Lookup

platform.ai.daily.brief

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Daily Brief

platform.ai.daily.brief.check

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Daily Brief Check

platform.ai.daily.brief.dismiss

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Daily Brief Dismiss

platform.ai.daily.brief.fetch

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Daily Brief Fetch

platform.ai.eval.control.summary

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Control Summary

platform.ai.eval.feedback.queue

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Feedback Queue

platform.ai.eval.kb.gap.queue

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Kb Gap Queue

platform.ai.eval.load

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Load

platform.ai.eval.replay.history

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Replay History

platform.ai.eval.run

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Eval Run

platform.ai.eval.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Eval Save

platform.ai.eval.score.answer

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Score Answer

platform.ai.eval.simulate

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Eval Simulate

platform.ai.feedback.analysis

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Feedback Analysis

platform.ai.feedback.stats

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Feedback Stats

platform.ai.history.archive

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Archive

platform.ai.history.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Clear All

platform.ai.history.delete

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Delete

platform.ai.history.export.csv

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai History Export Csv

platform.ai.history.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai History Get

platform.ai.history.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai History List

platform.ai.history.stats

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai History Stats

platform.ai.insight.clear

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Insight Clear

platform.ai.insight.history

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Insight History

platform.ai.insight.report.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Insight Report Delete

platform.ai.insight.report.get

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Insight Report Get

platform.ai.instructions.compress

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Compress

platform.ai.instructions.connector.templates

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Instructions Connector Templates

platform.ai.instructions.example

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Instructions Example

platform.ai.instructions.load

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Load

platform.ai.instructions.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Instructions Preview

platform.ai.instructions.reset

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Reset

platform.ai.instructions.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Save

platform.ai.page.insights

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Page Insights

platform.ai.popup.regen

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Popup Regen

platform.ai.quality.view

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Quality View

platform.ai.reasoning.chain.get

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Reasoning Chain Get

platform.ai.score.lead

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Score Lead

platform.ai.smart.alerts

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Smart Alerts

platform.ai.triage.accuracy

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Triage Accuracy

platform.ai.whmcs.chat

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Whmcs Chat

platform.ai.writing

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Writing

platform.api.keys.catalog

Read. Scope: admin. Contract: declared_dynamic. Api Keys Catalog

platform.api.keys.create

Write. Scope: admin. Contract: route_inferred. Api Keys Create

platform.api.keys.delete

Write. Scope: admin. Contract: route_inferred. Api Keys Delete

platform.api.keys.list

Read. Scope: admin. Contract: declared_dynamic. Api Keys List

platform.api.keys.revoke

Write. Scope: admin. Contract: route_inferred. Api Keys Revoke

platform.api.keys.update

Write. Scope: admin. Contract: route_inferred. Api Keys Update

platform.audit.export

Read. Scope: admin. Contract: route_inferred. Audit Export

platform.blocked

Write. Scope: platform.write, admin. Contract: route_inferred. Blocked

platform.chart.browsers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Browsers

platform.chart.countries

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Countries

platform.chart.devices

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Devices

platform.chart.hourly

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Hourly

platform.chart.new.returning

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart New Returning

platform.chart.os

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Os

platform.chart.sources

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Sources

platform.chart.visitors

Read. Scope: platform.read, admin. Contract: route_inferred. Chart Visitors

platform.chatbot.flow.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Delete

platform.chatbot.flow.get

Read. Scope: platform.read, admin. Contract: route_inferred. Chatbot Flow Get

platform.chatbot.flow.save

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Save

platform.chatbot.flow.stats

Read. Scope: platform.read, admin. Contract: route_inferred. Chatbot Flow Stats

platform.chatbot.flow.test.advance

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Test Advance

platform.chatbot.flow.test.start

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Test Start

platform.chatbot.flow.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Toggle

platform.chatbot.flows.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chatbot Flows List

platform.clear.admin.chat.history

Write. Scope: platform.write, admin. Contract: declared_dynamic. Clear Admin Chat History

platform.command.center.view

Read. Scope: platform.read, admin. Contract: declared_dynamic. Command Center View

platform.commerce.actf.execute

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Actf Execute

platform.commerce.actf.policy.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Actf Policy Save

platform.commerce.actf.review

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Actf Review

platform.commerce.actf.simulate

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Actf Simulate

platform.commerce.analytics.report

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Analytics Report

platform.commerce.analytics.report.email

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Analytics Report Email

platform.commerce.autonomy.issue

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Autonomy Issue

platform.commerce.autonomy.status

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Autonomy Status

platform.commerce.collections.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Collections Delete

platform.commerce.collections.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Collections Save

platform.commerce.customer.block

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Customer Block

platform.commerce.customer.credit.add

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Customer Credit Add

platform.commerce.customer.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Customer Save

platform.commerce.customers.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Customers List

platform.commerce.digital.codes.import

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Digital Codes Import

platform.commerce.digital.config.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Digital Config Save

platform.commerce.digital.file.upload

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Digital File Upload

platform.commerce.fulfilment.transition

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Fulfilment Transition

platform.commerce.intelligence.economics.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Intelligence Economics Save

platform.commerce.intelligence.market.price.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Intelligence Market Price Save

platform.commerce.intelligence.market.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Intelligence Market Save

platform.commerce.kit.apply

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Kit Apply

platform.commerce.kit.preview

Read. Scope: commerce.read, admin. Contract: route_inferred. Commerce Kit Preview

platform.commerce.kits.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Kits List

platform.commerce.launch.readiness

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Launch Readiness

platform.commerce.menu.ai.build

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Menu Ai Build

platform.commerce.menus.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Menus Save

platform.commerce.merchandising.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Merchandising Save

platform.commerce.midmarket.operations

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Midmarket Operations

platform.commerce.onboarding.ai.draft

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Onboarding Ai Draft

platform.commerce.onboarding.apply

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Onboarding Apply

platform.commerce.option.sets.generate

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Option Sets Generate

platform.commerce.option.sets.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Option Sets Save

platform.commerce.option.templates

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Option Templates

platform.commerce.order.refundable

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Order Refundable

platform.commerce.order.ship

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Order Ship

platform.commerce.order.shipments

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Order Shipments

platform.commerce.orders.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Orders List

platform.commerce.orders.transition

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Orders Transition

platform.commerce.page.ai.draft

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Page Ai Draft

platform.commerce.page.ai.refine

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Page Ai Refine

platform.commerce.page.render

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Page Render

platform.commerce.pages.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Pages Delete

platform.commerce.pages.list

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Pages List

platform.commerce.pages.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Pages Save

platform.commerce.price.advice

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Price Advice

platform.commerce.products.ai.copy

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products Ai Copy

platform.commerce.products.bulk

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Bulk

platform.commerce.products.catalog.meta

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products Catalog Meta

platform.commerce.products.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Delete

platform.commerce.products.duplicate

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Duplicate

platform.commerce.products.export.csv

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products Export Csv

platform.commerce.products.image.alt.ai

Read. Scope: commerce.read, admin. Contract: route_inferred. Commerce Products Image Alt Ai

platform.commerce.products.image.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Image Delete

platform.commerce.products.image.update

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Products Image Update

platform.commerce.products.image.upload

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Image Upload

platform.commerce.products.images.list

Read. Scope: commerce.read, admin. Contract: route_inferred. Commerce Products Images List

platform.commerce.products.images.reorder

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Products Images Reorder

platform.commerce.products.import.csv

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Import Csv

platform.commerce.products.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products List

platform.commerce.products.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Products Save

platform.commerce.refunds.complete.manual

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Refunds Complete Manual

platform.commerce.refunds.request

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Refunds Request

platform.commerce.returns.transition

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Returns Transition

platform.commerce.size.charts.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Size Charts Delete

platform.commerce.size.charts.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Size Charts Save

platform.commerce.store.maturity

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Store Maturity

platform.commerce.storefront.brand.import

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Brand Import

platform.commerce.storefront.domain.remove

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Domain Remove

platform.commerce.storefront.domain.set

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Domain Set

platform.commerce.storefront.logo.upload

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Logo Upload

platform.commerce.storefront.page.ai.seo

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Storefront Page Ai Seo

platform.commerce.storefront.slug.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Storefront Slug Save

platform.commerce.supply.chain

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Supply Chain

platform.commerce.variants.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Variants Delete

platform.commerce.variants.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Variants Save

platform.commerce.wallet.topup.refund

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Wallet Topup Refund

platform.commerce.wallet.topups.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Wallet Topups List

platform.complete.todo.item

Write. Scope: platform.write, admin. Contract: route_inferred. Complete Todo Item

platform.consent.log.list

Read. Scope: platform.read, admin. Contract: route_inferred. Consent Log List

platform.country.detail

Read. Scope: platform.read, admin. Contract: route_inferred. Country Detail

platform.custom.code.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Approve

platform.custom.code.disable

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Disable

platform.custom.code.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Reject

platform.custom.code.rollback

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Rollback

platform.custom.code.status

Read. Scope: platform.read, admin. Contract: route_inferred. Custom Code Status

platform.delete.todo.item

Write. Scope: platform.write, admin. Contract: route_inferred. Delete Todo Item

platform.diag.check.resolutions

Read. Scope: platform.read, admin. Contract: declared_dynamic. Diag Check Resolutions

platform.diag.dismiss

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Dismiss

platform.diag.event.taxonomy

Read. Scope: platform.read, admin. Contract: declared_dynamic. Diag Event Taxonomy

platform.diag.identity.restitch

Write. Scope: admin. Contract: declared_dynamic. Diag Identity Restitch

platform.diag.recheck

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Recheck

platform.diag.recheck.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Diag Recheck All

platform.diag.report

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Report

platform.diag.unmute

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Unmute

platform.dismiss.credit.alert

Write. Scope: admin. Contract: route_inferred. Dismiss Credit Alert

platform.domain.knowledge.ai.generate

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Ai Generate

platform.domain.knowledge.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Delete

platform.domain.knowledge.list

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge List

platform.domain.knowledge.save

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Save

platform.domain.knowledge.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Toggle

platform.domain.verify.add

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Add

platform.domain.verify.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Domain Verify List

platform.domain.verify.recheck

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Recheck

platform.domain.verify.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Remove

platform.dynamic.action.dispatch

Write. Scope: platform.write, admin. Contract: route_inferred. Dynamic Action Dispatch

platform.events.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Events Clear All

platform.events.list

Read. Scope: platform.read, admin. Contract: route_inferred. Events List

platform.experiment.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Experiment Delete

platform.experiment.results

Read. Scope: platform.read, admin. Contract: route_inferred. Experiment Results

platform.experiment.save

Write. Scope: platform.write, admin. Contract: route_inferred. Experiment Save

platform.experiments.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Experiments Clear All

platform.experiments.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Experiments List

platform.failed.logins.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins Clear All

platform.failed.logins.clear.history

Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins Clear History

platform.failed.logins.journey

Write. Scope: platform.write, admin. Contract: route_inferred. Failed Logins Journey

platform.failed.logins.list

Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins List

platform.failed.logins.unblock

Write. Scope: platform.write, admin. Contract: route_inferred. Failed Logins Unblock

platform.feedback.analysis.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Analysis Get

platform.feedback.analysis.run

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Analysis Run

platform.feedback.analytics.all

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics All

platform.feedback.analytics.detractors

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Detractors

platform.feedback.analytics.metrics

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Metrics

platform.feedback.analytics.overview

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Overview

platform.feedback.analytics.segments

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Segments

platform.feedback.analytics.sentiment

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Sentiment

platform.feedback.analytics.themes

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Themes

platform.feedback.analytics.trends

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Trends

platform.feedback.assignees.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Assignees List

platform.feedback.event.outbox.drain

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Event Outbox Drain

platform.feedback.exports.create

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Exports Create

platform.feedback.exports.get

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Exports Get

platform.feedback.external.review.ingest

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback External Review Ingest

platform.feedback.ingest.create

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Ingest Create

platform.feedback.items.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Assign

platform.feedback.items.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Delete

platform.feedback.items.evidence

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items Evidence

platform.feedback.items.follow.up.complete

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Follow Up Complete

platform.feedback.items.follow.up.set

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Follow Up Set Required fields: bool.

platform.feedback.items.get

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items Get

platform.feedback.items.list

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items List

platform.feedback.items.mark.read

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Mark Read

platform.feedback.items.notes.add

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Notes Add

platform.feedback.items.set.priority

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Set Priority

platform.feedback.items.set.status

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Set Status

platform.feedback.items.tags.add

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Tags Add

platform.feedback.items.tags.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Tags Remove

platform.feedback.reconciliation

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reconciliation

platform.feedback.reports.delete

Write. Scope: platform.write, admin. Contract: declared_dynamic. Feedback Reports Delete

platform.feedback.reports.email

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports Email

platform.feedback.reports.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports Get

platform.feedback.reports.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports List

platform.feedback.satisfaction.advice.last

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Advice Last

platform.feedback.satisfaction.advise

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Advise

platform.feedback.satisfaction.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Overview

platform.feedback.sources.health

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Sources Health

platform.feedback.sources.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Sources List

platform.feedback.sources.rebuild

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Sources Rebuild

platform.feedback.sources.replay

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Sources Replay

platform.fx.refresh.now

Write. Scope: platform.write, admin. Contract: declared_dynamic. Fx Refresh Now

platform.geoip.autodetect

Read. Scope: platform.read, admin. Contract: declared_dynamic. Geoip Autodetect

platform.geoip.db.upload

Write. Scope: platform.write, admin. Contract: route_inferred. Geoip Db Upload

platform.geoip.maxmind.test

Write. Scope: platform.write, admin. Contract: route_inferred. Geoip Maxmind Test

platform.geoip.maxmind.update

Write. Scope: platform.write, admin. Contract: route_inferred. Geoip Maxmind Update

platform.get.admin.chat.history

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Admin Chat History

platform.get.ai.snapshot

Write. Scope: platform.write, admin. Contract: route_inferred. Get Ai Snapshot

platform.get.campaign.groups

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Campaign Groups

platform.get.client.chat.knowledge.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Get Client Chat Knowledge Overview

platform.get.kb.categories

Read. Scope: platform.read, admin. Contract: route_inferred. Get Kb Categories

platform.get.live.health.snapshot

Read. Scope: platform.read, admin. Contract: route_inferred. Get Live Health Snapshot

platform.get.pwa.chat.prefs

Write. Scope: platform.write, admin. Contract: declared_dynamic. Get Pwa Chat Prefs

platform.get.servers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Servers

platform.get.survey.config

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Survey Config

platform.get.ticket.options

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Ticket Options

platform.get.ticket.thread

Read. Scope: platform.read, admin. Contract: route_inferred. Get Ticket Thread

platform.get.todo.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Todo List

platform.get.widget.advanced

Read. Scope: platform.read, admin. Contract: route_inferred. Get Widget Advanced

platform.governance.summary

Read. Scope: platform.read, admin. Contract: route_inferred. Governance Summary

platform.groups.create

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Create

platform.groups.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Delete

platform.groups.list

Write. Scope: platform.write, admin. Contract: route_inferred. Groups List

platform.groups.rename

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Rename

platform.groups.set.primary

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Set Primary

platform.hc.preview.mint

Read. Scope: platform.read, admin. Contract: route_inferred. Hc Preview Mint

platform.hc.template.apply

Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Apply

platform.hc.template.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Delete

platform.hc.template.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Hc Template Preview

platform.hc.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Save

platform.hc.templates.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Templates List

platform.hc.translation.review.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Translation Review Get

platform.hc.translation.review.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Translation Review List

platform.hc.translation.review.revert

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hc Translation Review Revert

platform.hc.translation.review.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hc Translation Review Save

platform.headless.portal.origins.save

Write. Scope: admin. Contract: route_inferred. Headless Portal Origins Save

platform.headless.portal.secret.create

Write. Scope: admin. Contract: route_inferred. Headless Portal Secret Create

platform.headless.portal.status

Read. Scope: admin. Contract: declared_dynamic. Headless Portal Status

platform.headless.portal.token.check

Read. Scope: admin. Contract: route_inferred. Headless Portal Token Check

platform.hr.access.grant.manual

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Grant Manual

platform.hr.access.policy.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Access Policy List

platform.hr.access.policy.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Policy Set

platform.hr.access.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Request

platform.hr.access.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Revoke

platform.hr.accommodation.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Accommodation List

platform.hr.accommodation.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Accommodation Resolve

platform.hr.agent.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Assign

platform.hr.agent.compensation.retry

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Compensation Retry

platform.hr.agent.compensation.sweep

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Agent Compensation Sweep

platform.hr.agent.compensations

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Agent Compensations

platform.hr.agent.incident.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Incident Close

platform.hr.agent.register

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Register

platform.hr.agent.step

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Step

platform.hr.agent.step.status

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Agent Step Status

platform.hr.agent.tool.auth

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Tool Auth

platform.hr.agent.tool.grant

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Tool Grant

platform.hr.agent.tools

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Agent Tools

platform.hr.ai.act.build

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Ai Act Build

platform.hr.ai.act.export

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Act Export

platform.hr.ai.act.fria.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Fria Record

platform.hr.ai.act.notice.publish

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Notice Publish

platform.hr.ai.act.overseer.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Overseer Assign

platform.hr.ai.act.overseer.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Overseer Revoke

platform.hr.ai.act.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Act Overview

platform.hr.ai.metering.export

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Ai Metering Export

platform.hr.ai.metering.overview

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Ai Metering Overview

platform.hr.ai.metering.settings.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Metering Settings Save

platform.hr.ai.status

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Status

platform.hr.analytics.ask

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Analytics Ask

platform.hr.analytics.snapshot

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Analytics Snapshot

platform.hr.app.move

Write. Scope: platform.write, admin. Contract: route_inferred. Hr App Move

platform.hr.appeal.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Appeal List

platform.hr.appeal.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Appeal Resolve

platform.hr.application.history

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Application History

platform.hr.application.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Application List

platform.hr.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Assign

platform.hr.auto.offer.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Auto Offer Run

platform.hr.autonomy.lane.demote

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Demote

platform.hr.autonomy.lane.install

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Autonomy Lane Install

platform.hr.autonomy.lane.promote

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Promote

platform.hr.autonomy.lane.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Autonomy Lane Review

platform.hr.autonomy.lane.shadow

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Shadow

platform.hr.autonomy.lanes

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Autonomy Lanes

platform.hr.autonomy.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Autonomy Overview

platform.hr.availability.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Availability Save

platform.hr.band.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Band Approve

platform.hr.band.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Band List

platform.hr.band.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Band Save

platform.hr.benchmarks.contribute.now

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Benchmarks Contribute Now

platform.hr.benchmarks.opt.in

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benchmarks Opt In

platform.hr.benchmarks.opt.out

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Benchmarks Opt Out

platform.hr.benchmarks.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Benchmarks Overview

platform.hr.benefit.enroll

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benefit Enroll

platform.hr.benefit.plan.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benefit Plan Save

platform.hr.bias.audit.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Bias Audit List

platform.hr.bias.audit.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Bias Audit Run

platform.hr.booking.link.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Booking Link Retire

platform.hr.booking.link.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Booking Link Save

platform.hr.booking.slots.reconcile

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Booking Slots Reconcile

platform.hr.breaker.reset

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Breaker Reset

platform.hr.broadcast.audience.options

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Broadcast Audience Options

platform.hr.broadcast.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Broadcast List

platform.hr.broadcast.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Broadcast Preview

platform.hr.broadcast.send

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Broadcast Send

platform.hr.budget.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Budget Set

platform.hr.calibration.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Close

platform.hr.calibration.move

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Move

platform.hr.calibration.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Open

platform.hr.capabilities.get

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Capabilities Get

platform.hr.capability.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Capability Set

platform.hr.capability.trail

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Capability Trail

platform.hr.cards.refresh

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Cards Refresh

platform.hr.case.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Assign

platform.hr.case.attachment.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Attachment Add

platform.hr.case.attachment.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Attachment List

platform.hr.case.categories

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Case Categories

platform.hr.case.event.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Event Add

platform.hr.case.get

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Get

platform.hr.case.grant.access

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Grant Access

platform.hr.case.intake.mailbox

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Intake Mailbox

platform.hr.case.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Case List

platform.hr.case.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Open

platform.hr.case.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Resolve

platform.hr.case.route

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Route

platform.hr.case.thread

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Thread

platform.hr.case.tighten

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Tighten

platform.hr.certification.define

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Certification Define

platform.hr.certification.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Certification List

platform.hr.certification.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Certification Record

platform.hr.certification.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Certification State

platform.hr.certification.types

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Certification Types

platform.hr.check.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Check List

platform.hr.check.manual.result

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Manual Result

platform.hr.check.order

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Order

platform.hr.check.requery

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Requery

platform.hr.check.void

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Void

platform.hr.checkin.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Checkin Record

platform.hr.coach.feedback

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Coach Feedback

platform.hr.coach.me

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Coach Me

platform.hr.coach.receive

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Coach Receive

platform.hr.comp.change.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Comp Change Approve

platform.hr.comp.change.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Comp Change Request

platform.hr.compliance.build

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Compliance Build

platform.hr.compliance.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Compliance List

platform.hr.connector.cert.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Cert Revoke

platform.hr.connector.cert.submissions

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Connector Cert Submissions

platform.hr.connector.cert.submit

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Cert Submit

platform.hr.connector.certify

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Certify

platform.hr.connector.health

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Connector Health

platform.hr.connector.options

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Connector Options

platform.hr.connector.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Revoke

platform.hr.contract.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Contract List

platform.hr.copilot.apply

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Copilot Apply

platform.hr.copilot.plan

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Copilot Plan

platform.hr.copilot.recipes

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Copilot Recipes

platform.hr.copilot.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Copilot Reject

platform.hr.correction.dataset.build

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Correction Dataset Build

platform.hr.correction.datasets

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Correction Datasets

platform.hr.correction.privacy.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Correction Privacy Review

platform.hr.course.enroll

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Enroll

platform.hr.course.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Retire

platform.hr.course.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Save

platform.hr.course.skills.tag

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Skills Tag

platform.hr.decision.appeal.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal Assign

platform.hr.decision.appeal.file

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal File

platform.hr.decision.appeal.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal Resolve

platform.hr.decision.appeals.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Decision Appeals List

platform.hr.decision.explanation

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Decision Explanation

platform.hr.decisions.recent

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Decisions Recent

platform.hr.directory.visibility.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Directory Visibility Get

platform.hr.directory.visibility.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Directory Visibility Set

platform.hr.discipline.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Discipline Decide

platform.hr.discipline.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Discipline Propose

platform.hr.document.access.log

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Document Access Log

platform.hr.document.deletion.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Deletion Request

platform.hr.document.hold

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Hold

platform.hr.document.intake

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Intake

platform.hr.document.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Document List

platform.hr.document.requirement.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Requirement Add

platform.hr.document.requirement.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Requirement Remove

platform.hr.document.review.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Review Approve

platform.hr.document.reviews

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Document Reviews

platform.hr.dsr.list

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Dsr List

platform.hr.dsr.transition

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Dsr Transition

platform.hr.email.intake.log

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Email Intake Log

platform.hr.employee.access.events

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Employee Access Events

platform.hr.employee.provision

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Provision

platform.hr.employee.restore

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Restore

platform.hr.employee.suspend

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Suspend

platform.hr.employment.activate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employment Activate

platform.hr.employment.end

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employment End

platform.hr.enterprise.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Enterprise Approve

platform.hr.equipment.delivered

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Delivered

platform.hr.equipment.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Request

platform.hr.equipment.returned

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Returned

platform.hr.escrow.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Escrow Resolve

platform.hr.evidence.a11y.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence A11y Record

platform.hr.evidence.attest

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Attest

platform.hr.evidence.dr.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Dr Record

platform.hr.evidence.exclusion.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Exclusion Add

platform.hr.evidence.exclusion.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Evidence Exclusion List

platform.hr.evidence.exclusion.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Exclusion Revoke

platform.hr.evidence.ledgers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Evidence Ledgers

platform.hr.evidence.load.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Load Record

platform.hr.evidence.owner.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Owner Assign

platform.hr.evidence.test.workspace.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Test Workspace Set

platform.hr.expense.confirm

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Confirm

platform.hr.expense.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Decide

platform.hr.expense.handoff

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Handoff

platform.hr.expense.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Expense Overview

platform.hr.expense.policy.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Policy Save

platform.hr.experience.metrics

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Experience Metrics

platform.hr.expiry.run

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Expiry Run

platform.hr.fairness.cohort.define

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Fairness Cohort Define

platform.hr.fairness.cohorts

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Fairness Cohorts

platform.hr.fairness.evaluate

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Fairness Evaluate

platform.hr.faq.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Delete

platform.hr.faq.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Draft

platform.hr.faq.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Faq List

platform.hr.faq.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Save

platform.hr.faq.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq State

platform.hr.feedback.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Feedback List

platform.hr.feedback.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Feedback Record

platform.hr.flag.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Flag Set

platform.hr.flags.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Flags Get

platform.hr.frontline.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Frontline Overview

platform.hr.gig.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Gig Decide

platform.hr.gig.post

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Gig Post

platform.hr.global.readiness

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Global Readiness

platform.hr.goal.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Create

platform.hr.goal.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Draft

platform.hr.goal.update

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Update

platform.hr.grievance.file

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Grievance File

platform.hr.grievance.outcome

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Grievance Outcome

platform.hr.headcount.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Headcount Approve

platform.hr.headcount.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Headcount Draft

platform.hr.headcount.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Headcount List

platform.hr.hire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Hire

platform.hr.hiring.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Hiring Decide

platform.hr.holiday.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Holiday Save

platform.hr.identity.admin.options

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity Admin Options

platform.hr.identity.conflict.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Conflict Resolve

platform.hr.identity.coverage.plan

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity Coverage Plan

platform.hr.identity.facets

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Identity Facets

platform.hr.identity.history

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity History

platform.hr.identity.link

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Link

platform.hr.identity.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Revoke

platform.hr.identity.verification.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Verification Record

platform.hr.incident.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Incident List

platform.hr.incident.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Incident Open

platform.hr.incident.step

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Incident Step

platform.hr.interview.recording.start

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Recording Start

platform.hr.interview.recording.upload

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Recording Upload

platform.hr.interview.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Review

platform.hr.interview.room.answer

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Answer

platform.hr.interview.room.ask

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Ask

platform.hr.interview.room.connect

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Connect

platform.hr.interview.room.consent

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Consent

platform.hr.interview.room.end

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room End

platform.hr.interview.room.leave

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Leave

platform.hr.interview.room.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Interview Room List

platform.hr.interview.room.observe

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Observe

platform.hr.interview.room.pause

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Pause

platform.hr.interview.room.provision

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Provision

platform.hr.interview.room.reconnect

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Reconnect

platform.hr.interview.room.resume

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Resume

platform.hr.interview.room.state

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room State

platform.hr.interview.room.takeover

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Takeover

platform.hr.interview.schedule

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Schedule

platform.hr.interview.transcript.correct

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Transcript Correct

platform.hr.investigation.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Close

platform.hr.investigation.finding

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Finding

platform.hr.investigation.hold

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Hold

platform.hr.investigation.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Open

platform.hr.investigation.triage

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Investigation Triage

platform.hr.iplan.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iplan Approve

platform.hr.iplan.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iplan Create

platform.hr.iplan.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Iplan List

platform.hr.iscore.human

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iscore Human

platform.hr.iscore.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iscore Run

platform.hr.isession.attach.meeting

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Attach Meeting

platform.hr.isession.control

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Control

platform.hr.isession.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Isession List

platform.hr.isession.liveness

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Isession Liveness

platform.hr.isession.schedule

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Schedule

platform.hr.job.arch.analyse

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Job Arch Analyse

platform.hr.job.arch.apply

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Apply

platform.hr.job.arch.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Approve

platform.hr.job.arch.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Job Arch Overview

platform.hr.job.arch.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Propose

platform.hr.job.arch.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Reject

platform.hr.job.family.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Family Save

platform.hr.job.level.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Level Save

platform.hr.job.profile.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Profile Save

platform.hr.job.version.draft.ai

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Draft Ai

platform.hr.job.version.publish

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Publish

platform.hr.job.version.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Save

platform.hr.job.versions

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Job Versions

platform.hr.jurisdiction.capabilities

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Capabilities

platform.hr.jurisdiction.case.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Case List

platform.hr.jurisdiction.case.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Case Retire

platform.hr.jurisdiction.case.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Case Run

platform.hr.jurisdiction.case.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Case Save

platform.hr.jurisdiction.change.assess

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Assess

platform.hr.jurisdiction.change.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Close

platform.hr.jurisdiction.change.raise

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Raise

platform.hr.jurisdiction.coverage

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Jurisdiction Coverage

platform.hr.jurisdiction.explain

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Explain

platform.hr.jurisdiction.overlay.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Overlay List

platform.hr.jurisdiction.overlay.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Overlay Retire

platform.hr.jurisdiction.overlay.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Overlay Save

platform.hr.jurisdiction.pack.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Draft

platform.hr.jurisdiction.pack.release

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Release

platform.hr.jurisdiction.pack.withdraw

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Withdraw

platform.hr.jurisdiction.release.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Jurisdiction Release List

platform.hr.jurisdiction.rule.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Rule List

platform.hr.jurisdiction.rule.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Rule Retire

platform.hr.jurisdiction.rule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Rule Save

platform.hr.jurisdiction.source.declare

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Source Declare

platform.hr.jurisdiction.source.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Source List

platform.hr.jurisdiction.source.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Source Retire

platform.hr.jurisdiction.transfer.declare

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Transfer Declare

platform.hr.jurisdiction.transfer.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Jurisdiction Transfer List

platform.hr.jurisdiction.transfer.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Transfer Retire

platform.hr.kill.flip

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kill Flip

platform.hr.kill.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kill Toggle

platform.hr.kiosk.register

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kiosk Register

platform.hr.kiosk.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kiosk Revoke

platform.hr.knowledge.pack.install

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Knowledge Pack Install

platform.hr.knowledge.pack.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Knowledge Pack Remove

platform.hr.knowledge.packs

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Knowledge Packs

platform.hr.leadership.evidence.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Leadership Evidence List

platform.hr.leadership.score

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Leadership Score

platform.hr.learning.assign.mandatory

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Learning Assign Mandatory

platform.hr.learning.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Learning Overview

platform.hr.learning.path.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Learning Path Retire

platform.hr.leave.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Decide

platform.hr.leave.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Leave Overview

platform.hr.leave.policy.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Policy Save

platform.hr.leave.type.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Type Save

platform.hr.letter.issue

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Letter Issue

platform.hr.letter.kinds

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Letter Kinds

platform.hr.letter.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Letter Preview

platform.hr.listening.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Close

platform.hr.listening.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Listening Overview

platform.hr.listening.run.due

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Listening Run Due

platform.hr.listening.schedule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Schedule Save

platform.hr.listening.schedule.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Schedule State

platform.hr.loop.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Approve

platform.hr.loop.correct

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Correct

platform.hr.loop.evaluate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Evaluate

platform.hr.loop.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Loop Overview

platform.hr.loop.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Propose

platform.hr.loop.release

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Release

platform.hr.loop.rollback

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Rollback

platform.hr.loop.snapshot

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Snapshot

platform.hr.marketplace.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Marketplace Overview

platform.hr.meeting.book

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Book

platform.hr.meeting.cancel

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Cancel

platform.hr.meeting.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Propose

platform.hr.meeting.reschedule

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Reschedule

platform.hr.meetings.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Meetings Overview

platform.hr.meetings.reconcile

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Meetings Reconcile

platform.hr.mentor.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Mentor Propose

platform.hr.module.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Module Toggle

platform.hr.new.hire.checkin.state

Read. Scope: platform.read, admin. Contract: route_inferred. Hr New Hire Checkin State

platform.hr.offer.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Approve

platform.hr.offer.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Draft

platform.hr.offer.esign.confirm

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Esign Confirm

platform.hr.offer.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Offer List

platform.hr.offer.send

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Send

platform.hr.offer.withdraw

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Withdraw

platform.hr.onboarding.checkins.book

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Onboarding Checkins Book

platform.hr.onboarding.draft.tasks

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Draft Tasks

platform.hr.onboarding.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Onboarding Overview

platform.hr.onboarding.plan.buddy

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Buddy

platform.hr.onboarding.plan.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Close

platform.hr.onboarding.plan.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Create

platform.hr.onboarding.task.block

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Block

platform.hr.onboarding.task.done

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Done

platform.hr.onboarding.task.skip

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Onboarding Task Skip

platform.hr.onboarding.task.unblock

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Unblock

platform.hr.onboarding.task.verify

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Verify

platform.hr.onboarding.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Template Save

platform.hr.one.on.one.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr One On One List

platform.hr.one.on.one.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr One On One Record

platform.hr.opportunity.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Opportunity Decide

platform.hr.opportunity.post

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Opportunity Post

platform.hr.opportunity.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Opportunity Retire

platform.hr.org.chart

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Chart

platform.hr.org.legal.entities

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Legal Entities

platform.hr.org.legal.entity.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Legal Entity Create

platform.hr.org.legal.entity.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Legal Entity Retire

platform.hr.org.location.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Location Create

platform.hr.org.location.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Location Retire

platform.hr.org.locations

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Locations

platform.hr.org.map.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Org Map Overview

platform.hr.org.map.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Map Remove

platform.hr.org.map.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Map Save

platform.hr.org.tree

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Tree

platform.hr.org.unit.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Unit Create

platform.hr.org.unit.move

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Org Unit Move

platform.hr.org.unit.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Unit Retire

platform.hr.override.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Override Record

platform.hr.overtime.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Overtime Decide

platform.hr.path.enroll

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Path Enroll

platform.hr.path.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Path Save

platform.hr.pay.equity.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Pay Equity Overview

platform.hr.pay.gap.evaluate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pay Gap Evaluate

platform.hr.payroll.import

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payroll Import

platform.hr.payroll.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Payroll Overview

platform.hr.payroll.provider.exceptions

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Payroll Provider Exceptions

platform.hr.payroll.reconcile

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payroll Reconcile

platform.hr.payslips.issue

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payslips Issue

platform.hr.people.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr People List

platform.hr.perf.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Perf Overview

platform.hr.person.create

Write. Scope: platform.write, admin. Contract: route_inferred. Create an HR person Required fields: display_name.

platform.hr.person.get

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Person Get

platform.hr.person.identifier.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Person Identifier Add

platform.hr.person.identifier.read

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Person Identifier Read

platform.hr.person.identifier.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Person Identifier Retire

platform.hr.person.identifiers

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Person Identifiers

platform.hr.person.update

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Person Update

platform.hr.pilot.outcome.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pilot Outcome Record

platform.hr.pipeline

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Pipeline

platform.hr.policy.activate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Policy Activate

platform.hr.policy.compile

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Policy Compile

platform.hr.pool.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pool Create

platform.hr.pool.member.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pool Member Add

platform.hr.pool.member.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pool Member Remove

platform.hr.pool.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Pool Overview

platform.hr.portal.address

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Portal Address

platform.hr.portal.slug.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Portal Slug Save

platform.hr.position.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Assign

platform.hr.position.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Create

platform.hr.position.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Position Overview

platform.hr.position.profile.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Profile Set

platform.hr.position.reports.to

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Reports To

platform.hr.position.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position State

platform.hr.position.vacate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Vacate

platform.hr.posting.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Close

platform.hr.posting.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Create

platform.hr.posting.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Posting List

platform.hr.posting.publish

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Publish

platform.hr.probation.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Probation Open

platform.hr.probation.review

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Probation Review

platform.hr.profile.address.format

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Profile Address Format

platform.hr.profile.address.write

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Address Write

platform.hr.profile.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Decide

platform.hr.profile.ownership.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Profile Ownership Get

platform.hr.profile.ownership.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Ownership Set

platform.hr.profile.pending

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Profile Pending

platform.hr.profile.photo.clear

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Photo Clear

platform.hr.profile.photo.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Photo Set

platform.hr.profile.section.end

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Section End

platform.hr.profile.section.write

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Section Write

platform.hr.profile.sections

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Profile Sections

platform.hr.pulse.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Close

platform.hr.pulse.issue

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Issue

platform.hr.pulse.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Pulse List

platform.hr.pulse.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Open

platform.hr.pulse.results

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Pulse Results

platform.hr.quality.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Quality Overview

platform.hr.quality.sample.draw

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Quality Sample Draw

platform.hr.quality.samples

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Quality Samples

platform.hr.quality.verdict

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Quality Verdict

platform.hr.queue.agent.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Agent Add

platform.hr.queue.agent.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Agent Remove

platform.hr.queue.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Save

platform.hr.readiness.report

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Readiness Report

platform.hr.recognise

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Recognise

platform.hr.relations.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Relations Overview

platform.hr.release.gates

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Release Gates

platform.hr.release.verify

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Release Verify

platform.hr.req.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Create

platform.hr.req.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Req List

platform.hr.req.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Reject

platform.hr.req.transition

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Transition

platform.hr.review.cycle.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Cycle Open

platform.hr.review.include

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Include

platform.hr.review.respond

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Respond

platform.hr.review.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Template Save

platform.hr.rubric.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Rubric Approve

platform.hr.rubric.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Rubric Create

platform.hr.rubric.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Rubric List

platform.hr.run.replay

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Replay

platform.hr.run.start

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Start

platform.hr.run.step

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Step

platform.hr.run.takeover

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Takeover

platform.hr.scenario.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Scenario Run

platform.hr.schedule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Schedule Save

platform.hr.screening.correct

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Correct

platform.hr.screening.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Screening List

platform.hr.screening.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Screening Review

platform.hr.screening.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Run

platform.hr.screening.verify

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Verify

platform.hr.security.assurance.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Security Assurance Record

platform.hr.service.item.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Service Item Save

platform.hr.servicedesk.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Servicedesk Overview

platform.hr.shadow.compare

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shadow Compare

platform.hr.shift.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shift Add

platform.hr.shift.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shift Assign

platform.hr.signature.cancel

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Signature Cancel

platform.hr.signature.confirm

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Signature Confirm

platform.hr.signature.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Signature List

platform.hr.signature.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Signature Request

platform.hr.signin.design.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Signin Design Get

platform.hr.signin.design.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Signin Design Save

platform.hr.skill.challenge.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Skill Challenge Resolve

platform.hr.skills.infer.sweep

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Skills Infer Sweep

platform.hr.skills.infer.text

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Skills Infer Text

platform.hr.skills.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Skills Overview

platform.hr.skills.taxonomy.adopt

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Skills Taxonomy Adopt

platform.hr.status

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Status

platform.hr.succession.nominate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Succession Nominate

platform.hr.succession.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Succession Open

platform.hr.succession.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Succession Overview

platform.hr.succession.plan.retire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Succession Plan Retire

platform.hr.swap.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Swap Approve

platform.hr.swap.decline

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Swap Decline

platform.hr.sync.conflict.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Sync Conflict Resolve

platform.hr.talent.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Talent Overview

platform.hr.thread.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Delete

platform.hr.thread.dm

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Dm

platform.hr.thread.legal.hold

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Legal Hold

platform.hr.thread.outreach

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Outreach

platform.hr.thread.post

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Post

platform.hr.thread.read

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Thread Read

platform.hr.thread.retention

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Retention

platform.hr.thread.search

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Thread Search

platform.hr.threads.inbox

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Threads Inbox

platform.hr.threads.retention.sweep

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Threads Retention Sweep

platform.hr.time.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Time Decide

platform.hr.time.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Time Overview

platform.hr.title.history

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Title History

platform.hr.title.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Title Record

platform.hr.training.requirement.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Training Requirement Save

platform.hr.truth.register

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Truth Register

platform.hr.turnover.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Turnover Run

platform.hr.verifier.verdict

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Verifier Verdict

platform.hr.wb.grant

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Grant

platform.hr.wb.identity

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Identity

platform.hr.wb.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Wb List

platform.hr.wb.read

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Read

platform.hr.wb.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb State

platform.hr.workforce.dashboard

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Workforce Dashboard

platform.inbound.activity.feed

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Activity Feed

platform.inbound.endpoints.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Delete

platform.inbound.endpoints.list

Write. Scope: admin. Contract: route_inferred. Inbound Endpoints List

platform.inbound.endpoints.save

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Save

platform.inbound.endpoints.test

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Test

platform.ip.classify

Read. Scope: platform.read, admin. Contract: route_inferred. Ip Classify

platform.js.errors.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Js Errors Clear All

platform.js.errors.list

Read. Scope: platform.read, admin. Contract: route_inferred. Js Errors List

platform.js.issue.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Js Issue Assign

platform.js.issue.update

Write. Scope: platform.write, admin. Contract: route_inferred. Js Issue Update

platform.js.sourcemap.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Js Sourcemap Delete

platform.js.sourcemap.upload

Write. Scope: platform.write, admin. Contract: route_inferred. Js Sourcemap Upload

platform.js.sourcemaps.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Js Sourcemaps List

platform.leads

Read. Scope: platform.read, admin. Contract: route_inferred. Leads

platform.license.delete

Write. Scope: admin. Contract: declared_dynamic. License Delete

platform.license.diagnostics

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Diagnostics

platform.license.force.check

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Force Check

platform.license.preflight

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Preflight

platform.license.save

Write. Scope: admin. Contract: route_inferred. License Save

platform.license.status

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Status

platform.license.verify.now

Write. Scope: platform.write, admin. Contract: declared_dynamic. License Verify Now

platform.lifecycle.evaluate

Read. Scope: platform.read, admin. Contract: route_inferred. Lifecycle Evaluate

platform.lifecycle.rule.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Lifecycle Rule Delete

platform.lifecycle.rule.list

Read. Scope: platform.read, admin. Contract: route_inferred. Lifecycle Rule List

platform.lifecycle.rule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Lifecycle Rule Save

platform.list.assignable.sites

Read. Scope: platform.read, admin. Contract: declared_dynamic. List Assignable Sites

platform.list.network.issues

Read. Scope: platform.read, admin. Contract: declared_dynamic. List Network Issues

platform.lookup.client.full

Read. Scope: platform.read, admin. Contract: route_inferred. Lookup Client Full

platform.marketplace.local.install

Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Local Install

platform.marketplace.local.uninstall

Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Local Uninstall

platform.marketplace.session.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Marketplace Session Get

platform.marketplace.session.set

Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Session Set

platform.media.library.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Media Library Delete

platform.media.library.list

Read. Scope: platform.read, admin. Contract: route_inferred. Media Library List

platform.message.contact.locale

Write. Scope: platform.write, admin. Contract: route_inferred. Message Contact Locale

platform.message.outbound.convert

Write. Scope: platform.write, admin. Contract: route_inferred. Message Outbound Convert

platform.message.translate

Write. Scope: platform.write, admin. Contract: route_inferred. Message Translate

platform.message.translation.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Message Translation Delete

platform.message.translation.save

Write. Scope: platform.write, admin. Contract: route_inferred. Message Translation Save

platform.meta.channels.disconnect

Write. Scope: platform.write, admin. Contract: declared_dynamic. Meta Channels Disconnect

platform.meta.channels.switch.page

Write. Scope: platform.write, admin. Contract: route_inferred. Meta Channels Switch Page

platform.onboarding.action

Read. Scope: platform.read, admin. Contract: declared_dynamic. Onboarding Action

platform.onboarding.readiness

Read. Scope: platform.read, admin. Contract: declared_dynamic. Onboarding Readiness

platform.open.network.issue

Read. Scope: platform.read, admin. Contract: declared_dynamic. Open Network Issue

platform.open.ticket

Read. Scope: platform.read, admin. Contract: route_inferred. Open Ticket

platform.operator.text.translate

Write. Scope: platform.write, admin. Contract: route_inferred. Operator Text Translate

platform.opsiq.backup.export

Read. Scope: platform.read, admin. Contract: declared_dynamic. Download a full backup in one request (retired)

platform.opsiq.backup.import

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Import

platform.opsiq.backup.import.start

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Import Start

platform.opsiq.backup.job.start

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Job Start

platform.opsiq.backup.job.status

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Job Status

platform.outreach.campaign.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Delete

platform.outreach.campaign.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Campaign List

platform.outreach.campaign.save

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Save

platform.outreach.campaign.send

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Send

platform.outreach.compose.send

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Compose Send

platform.outreach.draft.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Draft Delete

platform.outreach.draft.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Draft List

platform.outreach.draft.save

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Draft Save

platform.outreach.messages.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Messages Delete

platform.outreach.replies.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Replies List

platform.outreach.reply.ai

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Ai

platform.outreach.reply.mark

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Mark

platform.outreach.reply.pref

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Pref

platform.outreach.reply.send

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Send

platform.outreach.reply.thread

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Thread

platform.outreach.send.detail

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Send Detail

platform.outreach.send.retry

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Send Retry

platform.outreach.sends.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Sends List

platform.outreach.template.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Template Delete

platform.outreach.template.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Template List

platform.outreach.template.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Template Preview

platform.outreach.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Template Save

platform.overview.hub.view

Read. Scope: platform.read, admin. Contract: route_inferred. Overview Hub View

platform.overview.intelligence.graph

Read. Scope: platform.read, admin. Contract: declared_dynamic. Overview Intelligence Graph

platform.paths.data

Read. Scope: platform.read, admin. Contract: route_inferred. Paths Data

platform.profile.change.password

Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Change Password

platform.profile.get

Read. Scope: platform.read, admin. Contract: route_inferred. Profile Get

platform.profile.reward.claim

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Reward Claim

platform.profile.reward.claim.cancel

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Reward Claim Cancel

platform.profile.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Save

platform.profile.session.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Session Revoke

platform.profile.sessions.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Profile Sessions List

platform.profile.sessions.revoke.others

Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Sessions Revoke Others

platform.profile.team.dispute.file

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Team Dispute File

platform.purge

Write. Scope: admin. Contract: route_inferred. Purge

platform.purge.all

Write. Scope: admin. Contract: route_inferred. Purge All

platform.realtime

Read. Scope: platform.read, admin. Contract: route_inferred. Realtime

platform.realtime.test

Read. Scope: platform.read, admin. Contract: route_inferred. Realtime Test

platform.retention.data

Read. Scope: platform.read, admin. Contract: route_inferred. Retention Data

platform.routes.list

Read. Scope: admin. Contract: source_inferred. List every registered OpsIQ operation

platform.routes.read

Read. Scope: admin. Contract: explicit. Execute a registered read operation Required fields: route.

platform.routes.write

Write. Scope: admin. Contract: explicit. Execute a registered write operation Required fields: route, idempotency_key. Retry-safe with idempotency_key.

platform.run.ai.analysis

Write. Scope: platform.write, admin. Contract: route_inferred. Run Ai Analysis

platform.save.admin.chat.history

Write. Scope: platform.write, admin. Contract: route_inferred. Save Admin Chat History

platform.save.pwa.chat.prefs

Write. Scope: platform.write, admin. Contract: declared_dynamic. Save Pwa Chat Prefs

platform.save.survey.config

Write. Scope: platform.write, admin. Contract: route_inferred. Save Survey Config

platform.save.widget.advanced

Write. Scope: platform.write, admin. Contract: route_inferred. Save Widget Advanced

platform.scim.token.issue

Read. Scope: platform.read, admin. Contract: route_inferred. Scim Token Issue

platform.scim.token.list

Read. Scope: platform.read, admin. Contract: route_inferred. Scim Token List

platform.scim.token.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Scim Token Revoke

platform.segment.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Delete

platform.segment.list

Read. Scope: platform.read, admin. Contract: route_inferred. Segment List

platform.segment.members

Read. Scope: platform.read, admin. Contract: route_inferred. Segment Members

platform.segment.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Segment Preview

platform.segment.save

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Save

platform.segment.suggestion.accept

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Suggestion Accept

platform.segment.suggestion.dismiss

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Suggestion Dismiss

platform.segment.suggestion.list

Read. Scope: platform.read, admin. Contract: route_inferred. Segment Suggestion List

platform.send.campaign

Write. Scope: platform.write, admin. Contract: route_inferred. Send Campaign

platform.send.client.email

Write. Scope: platform.write, admin. Contract: route_inferred. Send Client Email

platform.send.ticket.reply

Write. Scope: platform.write, admin. Contract: route_inferred. Send Ticket Reply

platform.service.studio.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Service Studio Get

platform.set.active.site

Write. Scope: platform.write, admin. Contract: route_inferred. Set Active Site

platform.site.set.group

Write. Scope: platform.write, admin. Contract: route_inferred. Site Set Group

platform.sites.add

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Add

platform.sites.edit

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Edit

platform.sites.list

Write. Scope: platform.write, admin. Contract: route_inferred. Sites List

platform.sites.picker

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Picker

platform.sites.regenerate.secret

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Regenerate Secret

platform.sites.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Remove

platform.stats

Read. Scope: platform.read, admin. Contract: declared_dynamic. Stats

platform.stepup.verify

Write. Scope: platform.write, admin. Contract: declared_dynamic. Stepup Verify

platform.submit.agent.ai.feedback

Write. Scope: platform.write, admin. Contract: route_inferred. Submit Agent Ai Feedback

platform.submit.triage.feedback

Write. Scope: platform.write, admin. Contract: route_inferred. Submit Triage Feedback

platform.test.geoip

Read. Scope: platform.read, admin. Contract: route_inferred. Test Geoip

platform.top.pages

Read. Scope: platform.read, admin. Contract: route_inferred. Top Pages

platform.train.client.chat.knowledge

Write. Scope: platform.write, admin. Contract: route_inferred. Train Client Chat Knowledge

platform.trust.evidence.report

Write. Scope: platform.write, admin. Contract: declared_dynamic. Trust Evidence Report

platform.update.lead.status

Write. Scope: platform.write, admin. Contract: route_inferred. Update Lead Status

platform.wa.embedded.signup.exchange

Write. Scope: platform.write, admin. Contract: route_inferred. Wa Embedded Signup Exchange

platform.warehouse.export.run

Read. Scope: platform.read, admin. Contract: declared_dynamic. Warehouse Export Run

platform.warehouse.exports.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Warehouse Exports List

platform.webhook.deliveries.list

Read. Scope: platform.read, admin. Contract: route_inferred. Webhook Deliveries List

platform.webhook.endpoint.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Delete

platform.webhook.endpoint.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Webhook Endpoint List

platform.webhook.endpoint.save

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Save

platform.webhook.endpoint.test

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Test

platform.webhook.redeliver

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Redeliver

platform.weekly.digest.view

Read. Scope: platform.read, admin. Contract: route_inferred. Weekly Digest View

platform.whmcs.op.dispatch

Read. Scope: platform.read, admin. Contract: declared_dynamic. Whmcs Op Dispatch

platform.workspace.custom.domain.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Workspace Custom Domain Remove

platform.workspace.custom.domain.set

Write. Scope: platform.write, admin. Contract: route_inferred. Workspace Custom Domain Set

platform.workspace.tags

Read. Scope: platform.read, admin. Contract: route_inferred. Workspace Tags

platform.workspace.tags.update

Write. Scope: platform.write, admin. Contract: route_inferred. Workspace Tags Update

platform.writing.json.knowledge.clear

Write. Scope: platform.write, admin. Contract: declared_dynamic. Writing Json Knowledge Clear

platform.writing.json.knowledge.count

Read. Scope: platform.read, admin. Contract: declared_dynamic. Writing Json Knowledge Count

platform.writing.json.knowledge.import

Write. Scope: platform.write, admin. Contract: route_inferred. Writing Json Knowledge Import

portal_studio (169)

portal_studio.accessibility.evidence.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Accessibility Evidence Save

portal_studio.add

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain Add

portal_studio.allocate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Subdomain Allocate

portal_studio.analytics.breakdown

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Analytics Breakdown

portal_studio.analytics.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Analytics Load

portal_studio.apply.kit

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Apply Kit

portal_studio.apply.theme

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Apply Theme

portal_studio.approval

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Approval

portal_studio.approve

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Approve

portal_studio.ask

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Ask

portal_studio.audience.delete

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Audience Delete

portal_studio.audience.explain

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience Explain

portal_studio.audience.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience List

portal_studio.audience.preview

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience Preview

portal_studio.audience.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Audience Save

portal_studio.brand.generate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Brand Generate

portal_studio.brand.import

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Brand Import

portal_studio.cancel.schedule

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Design Cancel Schedule

portal_studio.certify

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Certify

portal_studio.check

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Host Check

portal_studio.check.route.portal.subdomain.check

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Subdomain Check

portal_studio.comment.add

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Comment Add

portal_studio.comment.resolve

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Comment Resolve

portal_studio.component.package.inspect

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Component Package Inspect

portal_studio.component.package.install

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Component Package Install

portal_studio.component.validate

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Component Validate

portal_studio.config

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Handoff Config

portal_studio.data.resolve

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Data Resolve

portal_studio.delete.theme

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Delete Theme

portal_studio.developer.contract

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Developer Contract

portal_studio.discovery.preview

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Discovery Preview

portal_studio.discovery.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Discovery Save

portal_studio.document.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Load

portal_studio.document.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Save

portal_studio.experiment.control

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Experiment Control

portal_studio.experiment.results

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Experiment Results

portal_studio.experiment.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Experiment Save

portal_studio.experiments.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Experiments List

portal_studio.form.archive

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Form Archive

portal_studio.form.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Form Catalog

portal_studio.form.create

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Create

portal_studio.form.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Delete

portal_studio.form.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Duplicate

portal_studio.form.evaluate

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Form Evaluate

portal_studio.form.group.apply

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Apply

portal_studio.form.group.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Delete

portal_studio.form.group.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Save

portal_studio.form.publish

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Publish

portal_studio.form.restore

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Form Restore

portal_studio.form.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Save

portal_studio.form.template

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Template

portal_studio.form.test

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Form Test

portal_studio.form.version.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Version Restore

portal_studio.history

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design History

portal_studio.identity.discover

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Identity Discover

portal_studio.identity.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Identity Load

portal_studio.identity.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Identity Save

portal_studio.integration.activate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Activate

portal_studio.integration.install

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Install

portal_studio.integration.kill.switch

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Kill Switch

portal_studio.integration.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Integration List

portal_studio.integration.policy

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Integration Policy

portal_studio.integration.policy.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Integration Policy Save

portal_studio.integration.preflight

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Preflight

portal_studio.integration.revise

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Revise

portal_studio.integration.rollback

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Rollback

portal_studio.integration.transition

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Transition

portal_studio.journey.archive

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Archive

portal_studio.journey.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Journey Catalog

portal_studio.journey.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Delete

portal_studio.journey.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Duplicate

portal_studio.journey.evaluate

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Journey Evaluate

portal_studio.journey.instantiate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Instantiate

portal_studio.journey.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Restore

portal_studio.journey.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Save

portal_studio.kb.category.delete

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Category Delete

portal_studio.kb.category.reorder

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Category Reorder

portal_studio.kb.category.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Kb Category Save

portal_studio.kb.governance

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Governance

portal_studio.kb.governance.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Kb Governance Save

portal_studio.kb.languages

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Languages

portal_studio.kb.languages.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Languages Save

portal_studio.kb.parity

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Parity

portal_studio.kb.search.tuning

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Search Tuning

portal_studio.kb.search.tuning.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Search Tuning Save

portal_studio.kb.tree

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Tree

portal_studio.knowledge.summary

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Knowledge Summary

portal_studio.list

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain List

portal_studio.load

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Analytics Load

portal_studio.load.route.portal.design.load

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Design Load

portal_studio.load.route.portal.form.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Form Load

portal_studio.lock

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Lock

portal_studio.migration.apply

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Apply

portal_studio.migration.approve

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Approve

portal_studio.migration.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Migration List

portal_studio.migration.reconcile

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Reconcile

portal_studio.migration.report

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Migration Report

portal_studio.migration.rollback

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Rollback

portal_studio.migration.rollout

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Rollout

portal_studio.migration.start

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Start

portal_studio.node.add

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Add

portal_studio.node.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Delete

portal_studio.node.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Duplicate

portal_studio.node.move

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Move

portal_studio.node.update

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Update

portal_studio.operations.control

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Operations Control

portal_studio.operations.feed

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Operations Feed

portal_studio.operations.record

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Operations Record

portal_studio.operations.summary

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Operations Summary

portal_studio.org.context

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Context

portal_studio.org.member.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Org Member Save

portal_studio.org.members

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Members

portal_studio.org.requests

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Requests

portal_studio.page.archive

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Archive

portal_studio.page.create

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Create

portal_studio.page.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Delete

portal_studio.page.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Duplicate

portal_studio.page.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Restore

portal_studio.page.update

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Update

portal_studio.parity.accept

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Accept

portal_studio.parity.capture

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Capture

portal_studio.parity.compare

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Compare

portal_studio.parity.create

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Create

portal_studio.parity.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Parity List

portal_studio.personalization.delete

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Personalization Delete

portal_studio.personalization.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Personalization List

portal_studio.personalization.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Personalization Save

portal_studio.presence

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Presence

portal_studio.preview

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Preview

portal_studio.preview.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Preview Catalog

portal_studio.publish

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Publish

portal_studio.quality

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Quality

portal_studio.redirect.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Redirect Delete

portal_studio.redirect.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Redirect Save

portal_studio.release.diff

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Release Diff

portal_studio.release.evidence

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Release Evidence

portal_studio.release.history

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Release History

portal_studio.release.publish

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Publish

portal_studio.release.rollback

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Rollback

portal_studio.release.schedule

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Schedule

portal_studio.remove

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain Remove

portal_studio.request.changes

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Request Changes

portal_studio.restore.field

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Restore Field

portal_studio.restore.published

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Restore Published

portal_studio.revert

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Design Revert

portal_studio.review

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Review

portal_studio.review.link

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Review Link

portal_studio.rollback

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Rollback

portal_studio.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Save

portal_studio.save.route.portal.form.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Form Save

portal_studio.save.theme

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Save Theme

portal_studio.saved.section.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Delete

portal_studio.saved.section.instantiate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Instantiate

portal_studio.saved.section.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Save

portal_studio.schedule

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Schedule

portal_studio.schedule.cancel

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Schedule Cancel

portal_studio.scim.config

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Scim Config

portal_studio.service.archive

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Archive

portal_studio.service.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Service Catalog

portal_studio.service.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Duplicate

portal_studio.service.reorder

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Reorder

portal_studio.service.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Restore

portal_studio.service.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Save

portal_studio.service.template

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Template

portal_studio.sign.in.flow.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Sign In Flow Save

portal_studio.signin.methods

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Signin Methods

portal_studio.test.link

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Handoff Test Link

portal_studio.unlock

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Unlock

portal_studio.upload

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Image Upload

sales (15)

sales.ai.insight

Write. Scope: sales.write, admin. Contract: route_inferred. Sales Ai Insight

sales.analyze

Write. Scope: sales.write, analytics.write, admin. Contract: route_inferred. Analyze sales with AI

sales.chart

Write. Scope: sales.write, admin. Contract: route_inferred. Sales Chart

sales.compare

Read. Scope: sales.read, analytics.read, admin. Contract: route_inferred. Compare sales periods

sales.compare.route.sales.compare

Read. Scope: sales.read, admin. Contract: route_inferred. Sales Compare

sales.goal.delete

Write. Scope: sales.write, admin. Contract: route_inferred. Conversion Goal Delete

sales.goal.list

Read. Scope: sales.read, admin. Contract: route_inferred. Conversion Goal List

sales.goal.save

Write. Scope: sales.write, admin. Contract: route_inferred. Conversion Goal Save

sales.list

Read. Scope: sales.read, analytics.read, admin. Contract: route_inferred. List sales and conversions

sales.list.route.conversion.list

Read. Scope: sales.read, admin. Contract: route_inferred. Conversion List

sales.record

Write. Scope: sales.write, admin. Contract: route_inferred. Conversion Record

sales.stats

Read. Scope: sales.read, analytics.read, admin. Contract: route_inferred. Read sales statistics

sales.stats.route.sales.stats

Read. Scope: sales.read, admin. Contract: route_inferred. Sales Stats

sales.tab

Read. Scope: sales.read, admin. Contract: route_inferred. Sales Tab

sales.table

Read. Scope: sales.read, admin. Contract: route_inferred. Sales Table

keselamatan (21)

security.ai.analyze

Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Analyze

security.ai.ask

Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Ask

security.ai.briefs

Read. Scope: security.read, admin. Contract: declared_dynamic. Security Ai Briefs

security.ai.chain.explain

Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Chain Explain

security.ai.incident.action

Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Incident Action

security.ai.incidents

Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Incidents

security.ai.js.triage

Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Js Triage

security.ai.policies

Read. Scope: security.read, admin. Contract: declared_dynamic. Security Ai Policies

security.ai.policy.action

Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Policy Action

security.ai.verdicts

Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Verdicts

security.blocklist.add

Write. Scope: security.write, admin. Contract: source_inferred. Add a spam rule (email, domain or IP) to the ticket blocklist Required fields: kind, value. Retry-safe with idempotency_key.

security.blocklist.list

Read. Scope: security.read, admin. Contract: explicit. List the current ticket spam rules

security.chain.reanchor

Write. Scope: security.write, admin. Contract: declared_dynamic. Security Chain Reanchor

security.check

Read. Scope: security.read, admin. Contract: source_inferred. Check an IP or email against the platform blocklists and Security AI verdicts

security.ip

Write. Scope: security.write, admin. Contract: route_inferred. Block Ip

security.ip.route.unblock.ip

Write. Scope: security.write, admin. Contract: route_inferred. Unblock Ip

security.list

Write. Scope: security.write, admin. Contract: route_inferred. Access Log List

security.overview.chains

Read. Scope: security.read, admin. Contract: declared_dynamic. Security Overview Chains

security.overview.data

Read. Scope: security.read, admin. Contract: declared_dynamic. Security Overview Data

security.report

Write. Scope: security.write, admin. Contract: source_inferred. Report abuse a connector observed (spam, login attack, scan, fraud) Retry-safe with idempotency_key.

security.visitor

Write. Scope: security.write, admin. Contract: route_inferred. Block Visitor

sessions (5)

sessions.detail

Read. Scope: sessions.read, admin. Contract: route_inferred. Session Detail

sessions.get

Read. Scope: sessions.read, analytics.read, admin. Contract: route_inferred. Get a session journey Required fields: session_id.

sessions.list

Read. Scope: sessions.read, analytics.read, admin. Contract: route_inferred. List sessions

sessions.merged

Read. Scope: sessions.read, admin. Contract: route_inferred. Sessions Merged

sessions.table

Read. Scope: sessions.read, admin. Contract: route_inferred. Sessions Table

settings (11)

settings.ai.eval.watchtower.config

Write. Scope: settings.write, admin. Contract: declared_dynamic. Ai Eval Watchtower Config

settings.get.client.chat.settings

Read. Scope: settings.read, admin. Contract: route_inferred. Get Client Chat Settings

settings.get.settings

Read. Scope: settings.read, admin. Contract: route_inferred. Get Settings

settings.opsiq.branding.clear

Write. Scope: admin. Contract: route_inferred. Opsiq Branding Clear

settings.opsiq.branding.upload

Write. Scope: admin. Contract: route_inferred. Opsiq Branding Upload

settings.privacy.settings.get

Read. Scope: settings.read, admin. Contract: declared_dynamic. Privacy Settings Get

settings.privacy.settings.save

Write. Scope: settings.write, admin. Contract: route_inferred. Privacy Settings Save

settings.save.ai.settings

Write. Scope: settings.write, admin. Contract: route_inferred. Save Ai Settings

settings.save.chat.widget.settings

Write. Scope: settings.write, admin. Contract: route_inferred. Save Chat Widget Settings

settings.save.client.chat.settings

Write. Scope: settings.write, admin. Contract: route_inferred. Save Client Chat Settings

settings.save.settings

Write. Scope: settings.write, admin. Contract: route_inferred. Save Settings

site_intelligence (221)

site_intelligence.action.audit.chain

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Audit Chain

site_intelligence.action.execute

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Execute

site_intelligence.action.preview

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Preview

site_intelligence.action.token

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Token

site_intelligence.agent.auto.bg

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Auto Bg

site_intelligence.agent.auto.bg.stop

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Auto Bg Stop

site_intelligence.agent.auto.step

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Auto Step

site_intelligence.agent.chat

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Chat

site_intelligence.agent.conn.delete

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Delete

site_intelligence.agent.conn.get

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Get

site_intelligence.agent.conn.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Save

site_intelligence.agent.conn.test

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Test

site_intelligence.agent.coverage

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Coverage

site_intelligence.agent.events

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Events

site_intelligence.agent.hosted.apply

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Apply

site_intelligence.agent.hosted.finalize

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Finalize

site_intelligence.agent.hosted.live.set

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Live Set

site_intelligence.agent.hosted.preview

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Preview

site_intelligence.agent.hosted.rollback

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Rollback

site_intelligence.agent.hosted.start

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Start

site_intelligence.agent.hosted.verify

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Verify

site_intelligence.agent.run.delete

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Delete

site_intelligence.agent.run.finalize

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Finalize

site_intelligence.agent.run.rollback

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Rollback

site_intelligence.agent.run.start

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Start

site_intelligence.agent.run.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Status

site_intelligence.agent.run.verify

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Verify

site_intelligence.agent.runs.list

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Runs List

site_intelligence.agent.set.mode

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Set Mode

site_intelligence.agent.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Status

site_intelligence.agent.step.apply

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Step Apply

site_intelligence.agent.step.skip

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Step Skip

site_intelligence.agent.turn.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Turn Status

site_intelligence.ai.activity

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Ai Activity

site_intelligence.ai.alert.enrich

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Alert Enrich

site_intelligence.ai.alerts

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Alerts

site_intelligence.ai.analyst

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst

site_intelligence.ai.analyst.ask

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst Ask

site_intelligence.ai.analyst.email

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst Email

site_intelligence.ai.analyst.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst Run

site_intelligence.ai.badges

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Badges

site_intelligence.ai.badges.portfolio

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Ai Badges Portfolio

site_intelligence.ai.badges.preview

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Badges Preview

site_intelligence.ai.bl.plan

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Bl Plan

site_intelligence.ai.bl.plan.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Bl Plan Run

site_intelligence.ai.brief

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Brief

site_intelligence.ai.brief.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Brief Run

site_intelligence.ai.comp.analyse

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Comp Analyse

site_intelligence.ai.comp.analyse.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Comp Analyse Run

site_intelligence.ai.content.get

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content Get

site_intelligence.ai.content.list

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content List

site_intelligence.ai.content.publish

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content Publish

site_intelligence.ai.content.write

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content Write

site_intelligence.ai.daily.digest

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Daily Digest

site_intelligence.ai.discover

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Discover

site_intelligence.ai.fix.apply

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Apply

site_intelligence.ai.fix.apply.bulk

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Apply Bulk

site_intelligence.ai.fix.dismiss

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Dismiss

site_intelligence.ai.fix.dismiss.bulk

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Dismiss Bulk

site_intelligence.ai.fix.generate

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Generate

site_intelligence.ai.fix.generate.all

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Generate All

site_intelligence.ai.fix.list

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix List

site_intelligence.ai.kw.coach

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Kw Coach

site_intelligence.ai.kw.coach.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Kw Coach Run

site_intelligence.ai.overview

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Overview

site_intelligence.ai.page.audit

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Page Audit

site_intelligence.ai.page.audit.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Page Audit Run

site_intelligence.ai.portfolio

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Ai Portfolio

site_intelligence.ai.portfolio.history

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Ai Portfolio History

site_intelligence.ai.portfolio.run

Write. Scope: site_intelligence.write, admin. Contract: declared_dynamic. Si Ai Portfolio Run

site_intelligence.ai.probe

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Probe

site_intelligence.ai.prompt.add

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompt Add

site_intelligence.ai.prompt.history

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompt History

site_intelligence.ai.prompt.remove

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompt Remove

site_intelligence.ai.prompts

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompts

site_intelligence.ai.readiness

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Readiness

site_intelligence.ai.ready

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Ready

site_intelligence.alert.resolve

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Alert Resolve

site_intelligence.alerts

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Alerts

site_intelligence.alerts.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence alerts

site_intelligence.alerts.resolve

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Resolve a Site Intelligence alert Required fields: alert_id.

site_intelligence.analyze

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Analyze

site_intelligence.ask

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ask

site_intelligence.audit.hint

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Audit Hint

site_intelligence.backlink.disavow

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Backlink Disavow

site_intelligence.backlinks

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Backlinks

site_intelligence.backlinks.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List backlinks

site_intelligence.backlinks.refresh

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Backlinks Refresh

site_intelligence.billing.overview

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Billing Overview

site_intelligence.brand.get

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Brand Get

site_intelligence.brand.radar

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Brand Radar

site_intelligence.brand.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Brand Save

site_intelligence.cannibalisation

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Cannibalisation

site_intelligence.compare

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Compare

site_intelligence.competitor.add

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Competitor Add

site_intelligence.competitor.refresh

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Competitor Refresh

site_intelligence.competitor.remove

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Competitor Remove

site_intelligence.competitors

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Competitors

site_intelligence.competitors.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List competitors

site_intelligence.content.brief

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Content Brief

site_intelligence.content.decay

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Content Decay

site_intelligence.content.draft

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Content Draft

site_intelligence.crawl.budget

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Crawl Budget

site_intelligence.crawl.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Crawl List

site_intelligence.crawl.status

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Crawl Status

site_intelligence.crawls.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence crawls

site_intelligence.crawls.status

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Get crawl status

site_intelligence.dashboard

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Read the Site Intelligence dashboard

site_intelligence.dashboard.route.si.dashboard

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Dashboard

site_intelligence.dashboard.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Dashboard Save

site_intelligence.diag.backfill

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Backfill

site_intelligence.diag.compare

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Compare

site_intelligence.diag.portfolio

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Diag Portfolio

site_intelligence.diag.recs.regen

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Recs Regen

site_intelligence.diag.thresholds

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds

site_intelligence.diag.thresholds.eval

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds Eval

site_intelligence.diag.thresholds.history

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds History

site_intelligence.diag.thresholds.profile

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds Profile

site_intelligence.diag.thresholds.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds Save

site_intelligence.diagnostics

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diagnostics

site_intelligence.exec.report

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Exec Report

site_intelligence.export

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Export

site_intelligence.ga4.connect

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Connect

site_intelligence.ga4.list.properties

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 List Properties

site_intelligence.ga4.map

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Map

site_intelligence.ga4.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Status

site_intelligence.ga4.sync

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Sync

site_intelligence.gbp

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp

site_intelligence.gbp.draft.approve

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Draft Approve

site_intelligence.gbp.draft.dismiss

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Draft Dismiss

site_intelligence.gbp.draft.sync

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Draft Sync

site_intelligence.gbp.drafts

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Drafts

site_intelligence.gbp.locations

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Gbp Locations

site_intelligence.gbp.map

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Map

site_intelligence.gbp.post.draft

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Post Draft

site_intelligence.gbp.post.publish

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Post Publish

site_intelligence.gbp.qa

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa

site_intelligence.gbp.qa.approve

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa Approve

site_intelligence.gbp.qa.dismiss

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa Dismiss

site_intelligence.gbp.qa.sync

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa Sync

site_intelligence.gbp.site.prefs

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Site Prefs

site_intelligence.gbp.sync

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Sync

site_intelligence.google.truth.schedule.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Google Truth Schedule Save

site_intelligence.growth

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Growth

site_intelligence.gsc.connect

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Connect

site_intelligence.gsc.list.properties

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc List Properties

site_intelligence.gsc.map

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Map

site_intelligence.gsc.opportunities

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Opportunities

site_intelligence.gsc.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Status

site_intelligence.gsc.sync

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Sync

site_intelligence.image.audit

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Image Audit

site_intelligence.internal.links

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Internal Links

site_intelligence.issue.history

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Issue History

site_intelligence.issues

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Issues

site_intelligence.issues.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence issues

site_intelligence.keyword.add

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Keyword Add

site_intelligence.keyword.remove

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Keyword Remove

site_intelligence.keyword.research

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Keyword Research

site_intelligence.keywords

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Keywords

site_intelligence.keywords.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List tracked keywords

site_intelligence.local

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Local

site_intelligence.local.grid

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Local Grid

site_intelligence.local.grid.scan

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Local Grid Scan

site_intelligence.log.ingest

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Log Ingest

site_intelligence.log.summary

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Log Summary

site_intelligence.metadata.audit

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Metadata Audit

site_intelligence.overview

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Overview

site_intelligence.page

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Page

site_intelligence.page.experience

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Page Experience

site_intelligence.page.optimize

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Page Optimize

site_intelligence.pages

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Pages

site_intelligence.pages.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence pages

site_intelligence.portfolio.export

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Portfolio Export

site_intelligence.provider.health

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Provider Health

site_intelligence.rank.check

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Rank Check

site_intelligence.rec.action

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Rec Action

site_intelligence.recommendations

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Recommendations

site_intelligence.redirect.audit

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Redirect Audit

site_intelligence.report

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Report

site_intelligence.report.generate

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Report Generate

site_intelligence.report.revoke

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Report Revoke

site_intelligence.reports

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Reports

site_intelligence.reports.list

Read. Scope: site_intelligence.read, admin. Contract: source_inferred. Site Intelligence Reports List

site_intelligence.reset.google.oauth

Write. Scope: site_intelligence.write, admin. Contract: declared_dynamic. Si Reset Google Oauth

site_intelligence.revenue

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Revenue

site_intelligence.revenue.portfolio

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Revenue Portfolio

site_intelligence.save.shared.google.oauth

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Save Shared Google Oauth

site_intelligence.scan.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Start a Site Intelligence analysis

site_intelligence.schedule.delete

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedule Delete

site_intelligence.schedule.run.now

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedule Run Now

site_intelligence.schedule.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedule Save

site_intelligence.schedules.list

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedules List

site_intelligence.schema.audit

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schema Audit

site_intelligence.server.engineer

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Server Engineer

site_intelligence.settings.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Settings Save

site_intelligence.sites.list

Read. Scope: site_intelligence.read, admin. Contract: explicit. List Site Intelligence monitored sites

site_intelligence.speed

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed

site_intelligence.speed.progress

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed Progress

site_intelligence.speed.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed Run

site_intelligence.speed.v2

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2

site_intelligence.speed.v2.build.task

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Build Task

site_intelligence.speed.v2.collect

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Collect

site_intelligence.speed.v2.read

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Read

site_intelligence.speed.v2.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Run

site_intelligence.start.crawl

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Start Crawl

site_intelligence.task.approve

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Approve

site_intelligence.task.assign

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Assign

site_intelligence.task.bulk.apply

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Apply

site_intelligence.task.bulk.assign

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Assign

site_intelligence.task.bulk.deadline

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Deadline

site_intelligence.task.bulk.dismiss

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Dismiss

site_intelligence.task.deadline

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Deadline

site_intelligence.task.note

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Note

site_intelligence.task.proof

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Proof

site_intelligence.task.reject

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Reject

site_intelligence.task.review

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Review

site_intelligence.topical.map

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Topical Map

site_intelligence.webhook.delete

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Webhook Delete

site_intelligence.webhook.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Webhook Save

site_intelligence.webhooks.list

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Webhooks List

site_intelligence.workflow

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Workflow

status (6)

status.component.save

Write. Scope: status.write, admin. Contract: declared_dynamic. Status Component Save

status.components.save

Write. Scope: status.write, admin. Contract: explicit. Create or update a public status component Required fields: name. Retry-safe with idempotency_key.

status.incident.create

Write. Scope: status.write, admin. Contract: declared_dynamic. Status Incident Create

status.incident.resolve

Read. Scope: status.read, admin. Contract: route_inferred. Status Incident Resolve

status.incidents.create

Write. Scope: status.write, admin. Contract: explicit. Create a status-page incident Required fields: title. Retry-safe with idempotency_key.

status.incidents.resolve

Write. Scope: status.write, admin. Contract: source_inferred. Status Incidents Resolve Retry-safe with idempotency_key.

surveys (22)

surveys.analytics.get

Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Analytics Get

surveys.audiences.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey audiences

surveys.audiences.materialize

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Audiences Materialize Retry-safe with idempotency_key.

surveys.campaigns.create

Write. Scope: surveys.write, admin. Contract: explicit. Create or update a survey campaign Required fields: deployment_id. Retry-safe with idempotency_key.

surveys.campaigns.launch

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Campaigns Launch Retry-safe with idempotency_key.

surveys.campaigns.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey campaigns

surveys.deployments.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey deployments

surveys.deployments.set_status

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Deployments Set Status Retry-safe with idempotency_key.

surveys.get

Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Get

surveys.imports.create

Write. Scope: surveys.write, admin. Contract: explicit. Create and run a survey import Required fields: kind. Retry-safe with idempotency_key.

surveys.imports.process

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Imports Process Retry-safe with idempotency_key.

surveys.invitations.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey invitations

surveys.links.create

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Links Create Retry-safe with idempotency_key.

surveys.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey definitions

surveys.responses.get

Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Responses Get

surveys.responses.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey responses

surveys.triggers.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey trigger sets

surveys.types.list

Read. Scope: surveys.read, admin. Contract: explicit. List supported question types and Studio templates

surveys.versions.list

Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Versions List

surveys.webhooks.delete

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Webhooks Delete Retry-safe with idempotency_key.

surveys.webhooks.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey webhook subscriptions

surveys.webhooks.save

Write. Scope: surveys.write, admin. Contract: explicit. Create or update a survey webhook subscription Required fields: url. Retry-safe with idempotency_key.

pasukan (63)

team.delete

Write. Scope: team.write, admin. Contract: route_inferred. Admin Users Delete

team.delete.route.departments.delete

Write. Scope: team.write, admin. Contract: route_inferred. Departments Delete

team.list

Read. Scope: team.read, admin. Contract: route_inferred. Admin Users List

team.list.route.departments.list

Read. Scope: team.read, admin. Contract: declared_dynamic. Departments List

team.perf.activity

Write. Scope: admin. Contract: route_inferred. Team Perf Activity

team.perf.ai.compare

Write. Scope: admin. Contract: route_inferred. Team Perf Ai Compare

team.perf.ai.review

Write. Scope: admin. Contract: route_inferred. Team Perf Ai Review

team.perf.availability

Write. Scope: admin. Contract: route_inferred. Team Perf Availability

team.perf.award.finalize

Write. Scope: admin. Contract: route_inferred. Team Perf Award Finalize

team.perf.award.history

Read. Scope: team.read, admin. Contract: route_inferred. Team Perf Award History

team.perf.award.void

Write. Scope: admin. Contract: route_inferred. Team Perf Award Void

team.perf.claim.pay

Write. Scope: admin. Contract: route_inferred. Team Perf Claim Pay

team.perf.claim.recover

Write. Scope: admin. Contract: route_inferred. Team Perf Claim Recover

team.perf.claim.reject

Write. Scope: admin. Contract: route_inferred. Team Perf Claim Reject

team.perf.clear

Write. Scope: admin. Contract: route_inferred. Team Perf Clear

team.perf.coaching.action.item.add

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Action Item Add

team.perf.coaching.action.item.complete

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Action Item Complete

team.perf.coaching.evidence.pin

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Evidence Pin

team.perf.coaching.evidence.unpin

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Evidence Unpin

team.perf.coaching.session

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Session

team.perf.coaching.session.create

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Session Create

team.perf.coaching.session.update

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Session Update

team.perf.coaching.sessions

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Sessions

team.perf.coaching.status

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Status

team.perf.data

Write. Scope: admin. Contract: route_inferred. Team Perf Data

team.perf.heatmap

Write. Scope: admin. Contract: route_inferred. Team Perf Heatmap

team.perf.history

Write. Scope: admin. Contract: route_inferred. Team Perf History

team.perf.pay.all.claims

Write. Scope: admin. Contract: route_inferred. Team Perf Pay All Claims

team.perf.qa.calibration.record

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Calibration Record

team.perf.qa.dispute.resolve

Write. Scope: admin. Contract: route_inferred. Team Perf Qa Dispute Resolve

team.perf.qa.disputes

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Disputes

team.perf.qa.evaluation.submit

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Evaluation Submit

team.perf.qa.overview

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Overview

team.perf.qa.scorecard.publish

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Scorecard Publish

team.perf.qa.scorecard.save

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Scorecard Save

team.perf.quest.record

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quest Record

team.perf.quest.save

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quest Save

team.perf.quest.status

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quest Status

team.perf.quests

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quests

team.perf.recognition

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Recognition

team.perf.recognition.settings.save

Write. Scope: admin. Contract: route_inferred. Team Perf Recognition Settings Save

team.perf.recognition.streak.history

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Recognition Streak History

team.perf.recognition.streaks.record

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Recognition Streaks Record

team.perf.reward.budget.authorize

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Budget Authorize

team.perf.reward.claims

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Claims

team.perf.reward.pay

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Pay

team.perf.reward.payouts

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Payouts

team.perf.reward.period.finalize

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Period Finalize

team.perf.reward.period.history

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Reward Period History

team.perf.reward.period.preview

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Reward Period Preview

team.perf.reward.period.reverse

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Period Reverse

team.perf.reward.period.void

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Period Void

team.perf.reward.save

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Save

team.perf.reward.state

Write. Scope: admin. Contract: route_inferred. Team Perf Reward State

team.perf.trends

Write. Scope: admin. Contract: route_inferred. Team Perf Trends

team.perf.v2.data

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Data

team.perf.v2.export

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Export

team.perf.v2.live

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Live

team.perf.v2.reward.sheet

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Reward Sheet

team.perf.v2.settings

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Settings

team.perf.v2.settings.save

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Settings Save

team.save

Write. Scope: team.write, admin. Contract: route_inferred. Admin Users Save

team.save.route.departments.save

Write. Scope: team.write, admin. Contract: route_inferred. Departments Save

Tiket untuk Sony (78)

tickets.ai.summary

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Ai Summary

tickets.analytics

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Analytics

tickets.approval.decide

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Approval Decide

tickets.approval.request

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Approval Request

tickets.approvals.pending

Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Approvals Pending

tickets.assignment.rule.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Assignment Rule Delete

tickets.assignment.rule.list

Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Assignment Rule List

tickets.assignment.rule.save

Write. Scope: tickets.write, admin. Contract: declared_dynamic. Ticket Assignment Rule Save

tickets.assignment_rules.delete

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Assignment Rules Delete Retry-safe with idempotency_key.

tickets.assignment_rules.save

Write. Scope: tickets.write, admin. Contract: explicit. Create or update a ticket assignment rule Required fields: name. Retry-safe with idempotency_key.

tickets.bulk

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Bulk Retry-safe with idempotency_key.

tickets.bulk.route.tickets.bulk

Write. Scope: tickets.write, admin. Contract: route_inferred. Tickets Bulk

tickets.calendar.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Sla Calendar Delete

tickets.calendar.save

Write. Scope: tickets.write, admin. Contract: declared_dynamic. Sla Calendar Save

tickets.claim

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Claim

tickets.csat.get

Read. Scope: tickets.read, admin. Contract: explicit. Get the CSAT response for one ticket Required fields: ticket_id.

tickets.csat.list

Read. Scope: tickets.read, admin. Contract: explicit. List ticket CSAT responses in the bound workspace

tickets.csat.metrics

Read. Scope: tickets.read, admin. Contract: explicit. CSAT metrics for a period (the tickets dashboard numbers)

tickets.embed.load

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Embed Load

tickets.embed.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Embed Save

tickets.embed.secret

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Embed Secret

tickets.field.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Field Save

tickets.follower.add

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Follower Add

tickets.follower.remove

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Follower Remove

tickets.get

Read. Scope: tickets.read, admin. Contract: source_inferred. Tickets Get

tickets.kb.deflection

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Kb Deflection

tickets.kb.draft

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Kb Draft

tickets.kb.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Kb Save

tickets.kb.version.restore

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Kb Version Restore

tickets.kb.versions

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Kb Versions

tickets.link.add

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Link Add

tickets.link.remove

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Link Remove

tickets.list

Read. Scope: tickets.read, admin. Contract: source_inferred. Tickets List

tickets.open

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Open Retry-safe with idempotency_key.

tickets.open_guest

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Open Guest Retry-safe with idempotency_key.

tickets.ops.summary

Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Ops Summary

tickets.policy.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Sla Policy Delete

tickets.policy.save

Write. Scope: tickets.write, admin. Contract: declared_dynamic. Sla Policy Save

tickets.presence.leave

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Presence Leave

tickets.presence.ping

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Presence Ping

tickets.quick.replies

Write. Scope: tickets.write, admin. Contract: declared_dynamic. Ticket Quick Replies

tickets.quick.reply.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Quick Reply Save

tickets.relations.get

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Relations Get

tickets.reply

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Reply Retry-safe with idempotency_key.

tickets.reply.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Delete

tickets.reply.edit

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Edit

tickets.reply.outbound.convert

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Outbound Convert

tickets.reply.translate

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Translate

tickets.reply.translation.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Translation Delete

tickets.reply.translation.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Translation Save

tickets.rule.compose

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Rule Compose

tickets.secure.request

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Secure Request

tickets.side.ai.draft

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Ai Draft

tickets.side.assign.department

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Assign Department

tickets.side.create

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Create

tickets.side.list

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Side List

tickets.side.mention

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Side Mention

tickets.side.recipients

Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Side Recipients

tickets.side.reply

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Reply

tickets.sla.delete

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Sla Delete Retry-safe with idempotency_key.

tickets.sla.save

Write. Scope: tickets.write, admin. Contract: explicit. Create or update an SLA policy Required fields: name. Retry-safe with idempotency_key.

tickets.split

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Split

tickets.split.candidates

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Split Candidates

tickets.tag.add

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Tag Add

tickets.tag.list

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Tag List

tickets.tag.remove

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Tag Remove

tickets.tags.add

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Tags Add Retry-safe with idempotency_key.

tickets.tags.list

Read. Scope: tickets.read, admin. Contract: source_inferred. Tickets Tags List

tickets.tags.remove

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Tags Remove Retry-safe with idempotency_key.

tickets.update

Write. Scope: tickets.write, admin. Contract: source_inferred. Update a ticket status, priority, subject, department or assignment Retry-safe with idempotency_key.

tickets.view.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket View Delete

tickets.view.list

Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket View List

tickets.view.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket View Save

tickets.views.delete

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Views Delete Retry-safe with idempotency_key.

tickets.views.save

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Views Save Retry-safe with idempotency_key.

tickets.worklog.add

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Worklog Add

tickets.worklog.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Worklog Delete

tickets.worklog.list

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Worklog List

todos (1)

todos.add

Write. Scope: todos.write, admin. Contract: source_inferred. Todos Add Retry-safe with idempotency_key.

visitors (3)

visitors.block

Write. Scope: visitors.write, security.write, admin. Contract: route_inferred. Block a visitor Required fields: visitor_id.

visitors.list

Read. Scope: visitors.read, analytics.read, admin. Contract: route_inferred. List visitors

visitors.table

Read. Scope: visitors.read, admin. Contract: route_inferred. Visitors Table

webhook (1)

webhooks.events.list

Read. Scope: webhooks.read, crm.read, admin. Contract: explicit. List outbound webhook events and their payloads

Penulisan (6)

writing.analyze

Write. Scope: writing. Contract: source_inferred. Writing Analyze Retry-safe with idempotency_key.

writing.compose

Write. Scope: writing. Contract: source_inferred. Writing Compose Retry-safe with idempotency_key.

writing.reply

Write. Scope: writing. Contract: source_inferred. Writing Reply Retry-safe with idempotency_key.

writing.rewrite

Write. Scope: writing. Contract: source_inferred. Writing Rewrite Retry-safe with idempotency_key.

writing.summarize

Write. Scope: writing. Contract: source_inferred. Writing Summarize Retry-safe with idempotency_key.

writing.translate

Write. Scope: writing. Contract: source_inferred. Writing Translate Retry-safe with idempotency_key.

Adakah OpenAPI dan Postman tersedia?+

Ya. Dokumen OpenAPI 3.0 yang dijana berada di /api/v1/openapi.php, koleksi Postman yang dijana berada di /api/v1/postman.php, dan dokumentasi pembangun yang mudah dibaca berada di /api/docs/.

Bagaimana cara kerjaku dengan lebih dari satu ruang kerja?+

¡Cyword Send site_key in the request body to click a area kerja. Sebuah kunci yang dikeluarkan untuk satu ruang kerja tetap disematkan kepadanya; sebuah kunci dengan konteks admin dapat memilih setiap ruang kerja yang diizinkan untuk dilihat, dan ditolak untuk apapun itu tidak.

Tindakan manakah yang boleh dipanggil oleh kunci baca sahaja?+

Tindakan apapun yang ditandai sebagai sebuah baca. Tetapkan mode ijin pada kunci untuk dibaca_only dan setiap penulisan ditolak dengan read_ony_key, jadi integrasi pelaporan tidak dapat mengubah apa pun bahkan secara salah.

Mengapa saya mendapat not_found untuk sesuatu yang boleh saya lihat dalam panel pentadbir?+

Kuncinya diskop ke ruang kerja. Catatan di ruang kerja lain kembali tidak_ ditemukan daripada kesalahan izin, jadi API _tidak pernah mengkonfirmasi apakah ada sesuatu yang ada di tempat lain.

Pembangun

API Keselamatan

Satu kontrak keselamatan untuk setiap penyambung dan integrasi: tanya OpsIQ apa yang diketahuinya tentang sesuatu IP atau pengirim, dan suapkan kembali penyalahgunaan yang dilihat oleh sistem anda sendiri.

OpsIQ sudah pun mempertahankan dirinya: tembok api IP menyekat penyerang, saluran paip tiket menapis spam, dan AI Keselamatan mengelaskan pesalah serta mencadangkan peraturan sekatan. API Keselamatan membuka kecerdasan itu kepada sistem anda yang lain. Platform pengebilan, portal pelanggan atau aplikasi tersuai boleh menyemak pelawat sebelum mempercayainya, dan melaporkan apa yang diperhatikannya supaya seluruh pemasangan belajar daripada setiap permukaan.

Perkara yang anda boleh lakukan

Periksa sebelum percaya

security.check menjawab dengan keadaan tembok api, sebarang peraturan spam yang sepadan dengan pengirim, dan keputusan AI yang dicache untuk IP tersebut. Satu panggilan, satu pendapat yang disatukan.

Melaporkan apa yang kau lihat

security.report merekodkan pemerhatian itu sebagai peristiwa keselamatan, meminta AI Keselamatan mengklasifikasikan IP tersebut serta-merta, dan memaklumkan para admin apabila keputusannya kembali sebagai berisiko tinggi. Laporan berulang dikelompokkan menjadi insiden, sama seperti serangan yang dilihat terus oleh OpsIQ.

Kongsi aturan spam

security. blocklist. add dan security. bloklist. senarai baca dan tulis peraturan spam yang sama yang digunakan oleh halaman Tiket, jadi penghantar yang dihalang dalam satu sistem akan dihalang di mana-mana.

Melaporkan penyalahgunaan dari penyambung
POST /api/v1.php
Authorization: Bearer opq_your_api_key
Content-Type: application/json

{
  "action": "security.report",
  "ip": "203.0.113.7",
  "kind": "spam",
  "reason": "Sent 40 junk tickets in 10 minutes",
  "source": "whmcs:example.com"
}

Skop dan keselamatan

security.read

Diperlukan untuk security.check dan security.blocklist.list. Selamat diberikan kepada integrasi pelaporan.

security.write

Diperlukan untuk security.report dan security.blocklist.add. Berikan hanya kepada sistem yang anda mahu menyalurkan peraturan dan laporan masuk.

Tidak ada yang diam-diam hancur

Seorang pengirim yang masih terdaftar di sana, masih mendarat dalam pandangan Spam di mana tiketnya dapat dibaca dan dipulihkan.

Platform melindungi diri sendiri

server ini sendiri IP Alamat-alamat tidak pernah dapat diblokir, dilarang atau dilaporkan melalui ini API Jadi integrasi yang salah konfigurasi tidak dapat mengambil platform bawah.

💡
Jana kunci di bawah Integrasi, kemudian Kunci API, dan berikan hanya skop keselamatan yang diperlukannya. Kontrak permintaan penuh bagi setiap tindakan terdapat dalam meta.actions dan dokumen OpenAPI.
Adakah penyambung sedia ada saya menggunakan ini secara automatik?+

Penyegerakan keluar sudah automatik: apabila anda menyekat IP, platform yang disambungkan dimaklumkan melalui penyegerakan keselamatan penyambung. API Keselamatan ialah separuh masuk. Halakan penyambung atau kod tersuai anda kepada empat tindakan ini dengan kunci yang membawa skop keselamatan.

Di mana aturan spam tinggal?+

Satu simpanan. Kawalan Sekat penghantar di halaman Tiket, AI spam dalam Tetapan, dan API ini semuanya berfungsi pada senarai sekatan yang sama, jadi hanya ada satu tempat untuk dilihat.

Pembangun

Acara API_

Hantar peristiwa tersuai daripada pelayan atau laman web anda ke OpsIQ untuk analitik, eksperimen, pencetus CRM dan syarat webhook.

Bagaimana cara kerjanya
Acara API_Panggilan track() yang menghantar peristiwa tersuai demo_booked ke dalam OpsIQ, yang menyuap matlamat penukaran, segmen dan pencetus.OpsIQ. track("demo_booked", {nilai: 0, rancangan: "pro"});Sasaran penukaranSegmenPemicu Pemicam & webhooksPelayar Web (OpsIQ.track) atau POST sisi-server /v1/events
Acara API_

Peristiwa pinggir-panji

Pelacakan peristiwa Pelayaran
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "button_clicked", {
  button: "signup",
  page: "/pricing",
  variant: "green"
}]);

Acara-acara di-sside server

Sisi-Pelayan, merekam aktivitas dan konversi terhadap kontak melalui aksi API. Gunakan crm.activities.record Kesenangan untuk kehidupan sepeda / kegiatan bisnis dan crm.conversions.record Tidak ada events.send Tindakan A. L. B inbound CRM penerima acara tinggal di /v1/inbound.php?t=<token> untuk sistem pihak ketiga yang menghantar acara masuk.

Aktivitas sisi-server (aksi API)
POST /api/v1.php
Authorization: Bearer opq_your_key
Content-Type: application/json

{
  "action": "crm.activities.record",
  "site_key": "site_abc123",
  "email": "[email protected]",
  "event": "subscription.upgraded",
  "value": 50,
  "currency": "USD"
}

Kebaktian Naming

Notasi Anta

"order. completed" bukan "orderCompleted".

Masa lalu

"button. clicked" bukan "buttons. click".

Jadilah spesifik

"pricing. plan_selected" bukan "user_action".

Pembangun

Bagaimana data mengalir melalui OpsIQ_

Pemahaman data aliran membantu Anda meng-bug integrasi dan kinerja optimal.

Bagaimana cara kerjanya
Bagaimana data mengalirData gonta mengalir dari widget dan suar ke dalam inti OpsIQ (CDP, grafik identitas, otak AI, analitik, CRM) kemudian keluar melalui webhooks dan REST API_.WidgetsuarOpsIQ coreCari · graf identitas CDPOtak AIAnalisis analitik · CRMWebhooks keluarMemerlukan API
Aliran data

Aliran data tidak terarah

1
Angklung Widget

Widget JavaScript menghantar paparan halaman, klik, dan mesej sembang ke _/beacon.php.

2
Penggunaan peristiwa

Peristiwa-peristiwa yang disimpan dalam opsiq_event dengan site_key, tipe acara, pelanggan, dan properti.

3
Himpunan Sesi audiensi

Pembina sesi mengumpulkan tontonan halaman ke dalam sesi (melalui cron).

4
Resolusi Identitas IoC

Bila diidentifikasi, catatan anonim terkait dengan profil pelanggan.

5
Penyegerakan penyambung

Penyambung menarik data daripada platform luaran dan menyimpannya dalam cache penyambung.

6
Konteks AI

AI menghimpunkan konteks daripada: sejarah pelawat, profil pelanggan, data penyambung, pangkalan pengetahuan dan gesaan.

Aliran data Outbound

1
Peristiwa kebakaran

Kebakaran peristiwa internal ttg ignigner (ticket. create, chat. message, order. completed).

2
Baris gilir kerja

Peristiwa yang ditempatkan dalam antrian kerja async.

3
Penghantaran webhook

Penghantar menandatangani dan menghantar ke semua titik akhir yang melanggan.

4
Cuba semula jika gagal

Penghantaran yang gagal dicuba semula dengan tempoh menunggu eksponen.

Tetapan-peraturan

Rujukan tetapan

Tetapan ialah pusat kawalan bagi ruang kerja. Semua yang di bawah terhad kepada ruang kerja yang anda sedang gunakan, jadi satu akaun boleh mengendalikan beberapa jenama dengan identiti, tingkah laku sembang dan peraturan penyimpanan yang berbeza.

Mencari tetapan

Terdapat kira-kira enam ratus kawalan individu dalam Tetapan, tersebar di sebelas tab yang dikumpulkan di bawah empat menu. Anda tidak dijangka menyemak imbas untuk mencarinya.

Cari tetapan (Ctrl + K)

Tekan Ctrl + K, atau Cmd + K pada Mac, di mana-mana halaman Tetapan. Taip perkataan biasa dan tekan Enter untuk melompat terus ke kawal. Carian tolerasi kesalahan tatabahasa kecil dan memahami perkataannya yang berkaitan, jadi penjejak mencari Cron dan privasi mencari kawal jejak. Ia hanya memaparkan tetapan yang boleh dibuka oleh peranan anda.

Ruang Kerja dan Pelan

Jenderal dan Lisensi.

AI dan Sokongan Pelanggan

Pembantu AI Admin, Chat Klien, OpsIQ Portal Tulis dan Sokongan.

Data dan Pimpinan

Penjejakan dan Privasi, Kebenaran dan Keselamatan.

Sistem

Persediaan Cron (hos sendiri sahaja) dan Zon Bahaya.

Simpanan

Setiap tab disimpan secara berasingan dengan butang Simpan masing-masing. Client Chat dan OpsIQ Writing menyematkan butangnya pada skrin. Simpan sebelum menukar tab; perubahan tidak dibawa merentas tab.

link yang mendalam

Tab aktif ditulis ke dalam alamat halaman, jadi tab boleh ditanda buku atau dihantar kepada rakan sekerja.

Umum: Identiti Perniagaan

Kad paling penting pada halaman ini. AI membaca nilai ini pada setiap balasan, laporan dan taklimat harian.

Nama Bisnis

Dipakai dalam laporan AI, brief harian dan kata-kata pelanggan yang bertahan sesuai dengan footer website Anda.

Industri Perniagaan

Analisis Tailors AI, memimpin skoring, brief dan praset survei. Pilih dari hosting web, e-commerce, SaaS, real estate, agensi, konsultasi, kesehatan, pendidikan, keuangan atau bisnis umum.

Bahasa Sistem

Bahasa yang ditunjukkan pada siapa saja yang tidak memilih mereka sendiri.

Bahasa Pelayar

Memaparkan halaman log masuk dalam bahasa pelawat sendiri. Sebaik sahaja seseorang memilih bahasa di situ, pilihan mereka diutamakan dan ini tidak sekali-kali mengatasinya.

Sistem Zacezaid Timezone

Zon tempat seluruh sistem berjalan: tarikh, laporan, jadual dan cron latar belakang. Gunakan zon waktu operasi anda, bukan zon waktu pelanggan anda.

Umum: GeoIP dan Pelacakan

Path Basis Data GeoIP2

Laluan penuh ke GeoLite2-City.mmdb. Dikesan secara automatik pada pemuatan pertama merentas cPanel, Plesk, DirectAdmin, Cloudways, Docker dan Linux atau Windows biasa. Tambah GeoLite2-ASN.mmdb dalam folder yang sama untuk penyedia internet pelawat.

Mode Sumber Geo

GeoLite2 sahaja, GeoLite2 dengan sandaran Cloudflare, atau Cloudflare sahaja. Mod Cloudflare memerlukan laman web diproksikan melalui Cloudflare, dengan pengepala lokasi pelawat didayakan untuk butiran bandar dan wilayah.

Kehabisan Sesi Kehabisan Versi Baru (s)

Tempoh tidak aktif sebelum sesi pelawat dianggap selesai. Lalai 14400, iaitu empat jam.

Selang Waktu Segarkan Hidup (s)

Kekerapan Suapan Langsung dimuat semula. Lalai 30 saat.

Ambang Aktif (min)

Berapa lama pelawat dikira sebagai langsung selepas halaman terakhirnya dimuatkan. Lalai 2 minit. Ini ialah titik keluar Suapan Langsung, bukan panjang sesi.

Pembalasan Data Kelayakan (hari)

Memadam rekod yang dikumpul dan dijana yang melebihi usia ini: analitik, sembang, tiket, maklum balas, transaksi, telemetri AI, log integrasi dan aktiviti CRM. 0 menyimpan semuanya selama-lamanya. Tetapan, kandungan yang dikarang dan resit persetujuan tidak sekali-kali dialih keluar.

Apabila sembang dipadam

Memilih berapa banyak perbualan yang dipadam kekal dalam rekod: rekod penuh, rekod tanpa perbualan, atau skor sahaja. Pemadaman sentiasa menyembunyikan sembang daripada peti masuk dan sejarah pelawat. Pengekalan berjadual dan Lupakan pelawat sentiasa memadam sepenuhnya tanpa mengira tetapan ini.

Laluan bot

Mengira perangkak sebagai pelawat. Biarkan dimatikan; ia menggelembungkan kiraan pelawat dan memesongkan setiap laporan.

popup survey feedback suapansume diaktifkan

Memaparkan widget maklum balas seluruh laman kepada pelawat. Berasingan daripada tinjauan sembang di bawah Sembang Klien, Aliran Sokongan.

Umum: Ciri AI

Master screenes untuk setiap permukaan AI. Semua default untuk dan simpan per ruang kerja.

AI Triage pada tiket

Mengelaskan setiap tiket mengikut kategori, keutamaan dan sentimen, dan menulis ringkasan utas di bahagian atas tiket.

Ringkasan hover AI Triage

Keaneka menunjukkan tag triage dan ringkasan dalam tooltip ketika agen melayang berturut-turut di daftar tiket. Memerlukan AI Triage.

Kopilot Kotak Masuk (komposer)

Menambah butang Draf balasan AI, Lebih Mesra, Lebih Ringkas, Lebih Formal dan Memohon Maaf di bawah kotak balasan tiket. Tiada apa-apa dihantar tanpa ejen.

Tanya-OpsIQ Copilot

Copilot pengapung yang sadar halaman di setiap halaman admin.

Pagi briefing

Pada hari pertama dibuka setiap hari copilot menyajikan tiket mendesak, balasan yang terlambat dan menunggu chat. Minggu menghasilkan seminggu dalam ulasan.

Umum: wang, penjenamaan, sandaran

Mata wang asas OpsIQ

Setiap jumlah wang dalam pentadbiran ditukar kepada mata wang ini untuk paparan. Penyambung menyimpan mata wang sumber mereka sendiri; tetapkannya bagi setiap penyambung.

Laju FX sinkron-oto-Snomy

Menyegar semula kadar setiap enam jam daripada suapan awam percuma tanpa kunci API. Anda boleh menambah kadar manual yang mengatasi suapan. Apabila penyegerakan automatik dimatikan, mata wang tanpa kadar manual dibiarkan tanpa ditukar.

Dayakan ciri Dagangan dan Pengebilan

Mematikannya di halaman penjualan dan penukaran, kartu pendapatan dashboard dan Live Intelligence Feed. dengan itu off, setiap permukaan harga tersembunyi dan Sales page meninggalkan menu.

Perbendaharaan kata perdagangan

Mengajar OpsIQ perkataan anda: sama ada anda melakukan pembaharuan, perkataan untuk memperbaharui, apa yang anda jual, dan apa panggilan untuk pembeli.

Branding dan Logos

upload dua UDDA, satu untuk latar belakang cahaya (admin sidebar) dan satu untuk gelap (tanda-dalam halaman). PNG, JPG, WebP atau SVG hingga 3 MB.

Agen Intelijen Laman, benarkan sasaran peribadi SSH

Ejen SEO Auto-Laksana bersambung melalui SSH. Alamat peribadi, gelung balik dan alamat simpanan disekat secara lalai sebagai langkah anti-SSRF. Hanya dayakan pada pemasangan hos sendiri yang perlu mencapai pelayan setempat.

/ Pulihkan OpsIQ Sandar/Kembalikan

Mengeksport setiap tetapan dan jadual milik OpsIQ serta fail yang dimuat naik. Pemulihan menggantikan konfigurasi dan rekod OpsIQ sahaja; ia tidak sekali-kali menyentuh pelanggan, invois, tiket, perkhidmatan, domain, pesanan atau transaksi.

⚠️
Dan juga mengambil bantuan sebelum menggunakan apapun di zona bahaya.
Tetapan-peraturan

Tetapan: Keselamatan

Perlindungan untuk log masuk pentadbir, akaun staf anda dan data yang dikumpul oleh OpsIQ. Log masuk pelanggan untuk portal sokongan dikonfigurasikan secara berasingan.

Perlindungan sign-in

Semakan bot

Menghentikan bot dan credential stuffing pada log masuk pentadbir, borang permintaan portal sokongan dan storefront. Semakan OpsIQ ialah lalai: tidak kelihatan, percuma dan peribadi, tiada apa-apa untuk disediakan. Pelayar pelawat diam-diam menyelesaikan teka-teki kecil semasa borang diisi, dan alamat yang terus gagal mendapat yang lebih sukar. Google reCAPTCHA (v3 atau v2, dengan kunci anda sendiri) kekal tersedia.

Gagal Dikunci-Otomati-Login

Menyekat alamat selepas beberapa kegagalan dalam tempoh tertentu, untuk beberapa jam. Anda boleh menyesuaikan mesej halaman yang dikunci dan memaparkan gangguan kecil pada skrin menunggu.

Perkerasan Log Masuk

Dasar kata laluan dengan panjang minimum, penolakan kata laluan yang ditemui dalam kebocoran data yang diketahui, penguncian bagi setiap akaun terhadap pengisian kelayakan, pengesahan dua faktor wajib untuk setiap admin, kemasukan semula kata laluan sebelum tindakan berbahaya, dan amaran log masuk dari peranti baharu.

Tanda Tangan Tunggal Maksimal (OIDC)

Log masuk kakitangan melalui penyedia identiti anda. Memerlukan URL penerbit, ID klien dan rahsia klien. Domain peruntukan automatik, satu bagi setiap baris, mencipta pengguna secara automatik semasa log masuk kali pertama.

Tanda Tangan Tunggal Maksimal (SAML 2.0)

Untuk penyedia yang bercakap. SAML. OpsIQ menyediakan jawapan ACS URL dan ID entiti SP; anda berikan IdP entiti ID, log masuk URL, log keluar opsyenal URL dan X.509 sijil tandatangan. Medan atribut e-mel dan nama hanya diperlukan untuk nama atribut bukan piawai.

Penyediaan SCIM

Penciptaan, kemaskini dan nyahaktifkan arahan direktori OpsIQ akaun.OpsIQ menyediakan SCIM asas URL; anda mencipta token berlabel di sini supaya satu boleh dibatalkan tanpa merosakkan yang lain.

Ancaman, pemblokiran dan koleksi

Egres Memungkinkan-list Outbound Outbroad

Mengehadkan hos luaran yang boleh dipanggil oleh penyambung ruang kerja ini. Pelengkap kepada kawalan sasaran SSH dalam Umum.

Penandaan Ancaman dan Auto-Halang

Menyekat pelawat sebaik sahaja skor ancaman mereka melepasi ambang anda. 0 menyahdayakannya. Pantau halaman Gambaran Keseluruhan Keselamatan selama seminggu sebelum memilih nombor.

Pesan Halaman Blok Toolbar

Mesej yang dilihat oleh pelawat yang disekat, sebagai teks biasa atau skrin sekatan HTML tersuai anda sendiri.

Core Web Vitals daripada pelawat sebenar

Ukur LCP, INP dan CLS dari sesi nyata.

Penghantaran peristiwa cuba-semula selamat, berkelompok

Acara langganan antri di peramban dan antar dalam kelompok dengan retries, mengurangi kerugian pada koneksi mobile yang buruk.

Beacon Pelacakan Ditandatangani

Widget asli yang membedes membawa token kriptografi berputar sehingga data pelacakan palsu dapat ditolak. Dimatikan secara default; mengaktifkan perubahan bagaimana penembusan disahkan, jadi uji terlebih dahulu.

Amaran Keselamatan

Kartu ini mengontrol apakah Anda diberitahu, dan berapa banyak bantuan AI.

Dayakan amaran keselamatan

Suis utama untuk kad ini.

Ambang gelombang Gagal-login

Berapa banyak kegagalan masuk dalam jangka pendek dihitung sebagai gelombang layak waspada.

IP Kecerdasan reputasi

Menambah skor ancaman untuk pelawat yang muncul dalam suapan penyalahgunaan awam.

Pemantau tapak

Waktu habis dan TLS _-- pemeriksaan ekspiri, waspada sebelum lap sertifikat.

Analisis keselamatan AI dan laporan insiden AI

Ada keputusan yang dapat dijelaskan tentang aktivitas mencurigakan, dan kelompok-kelompok terkait serangan ke insiden tunggal yang dapat dibaca daripada arus peristiwa.

Autopilot polisi

Kisah itu sendiri, mengubah apa yang dipelajarinya dari sebuah insiden menjadi aturan yang diusulkan atau diterapkan.

Ringkasan keselamatan harian dan Penasihat postur mingguan

Anda akan membaca kembali harian di halaman Security Overview, dan daftar cek mingguan yang mengeras memperlihatkan apa yang dilindungi dan apa yang masih terbuka.

Proposal basi Auto-expire

Sebuah aturan blok yang diusulkan Anda tidak pernah bertindak pada kadaluarsa dengan sendirinya daripada akumulasi.

Sesi Replay DOM

Main ulang sesi DOM

Merekodkan sesi pelawat untuk main semula. Apabila dimatikan, perpustakaan main semula tidak pernah dimuatkan, jadi tiada kos untuk membiarkannya dimatikan. Rakaman disampel dan disembunyikan demi privasi, dan ditonton di halaman Main Semula Sesi di bawah Analitik.

Tingkat sampel, penangkapan maksimum, retensi

Apa yang dibagikan oleh sesi untuk merekam, berapa lama rekaman tunggal dapat berjalan, dan berapa hari rekaman disimpan.

⚠️
Main semula sesi merekodkan orang sebenar menggunakan laman anda. Kekalkan kadar sampel dan pemeliharaan yang rendah untuk masih menjawab soalan anda, dan nyatakannya dalam notis privasi anda.
Tetapan-peraturan

Tetapan: Penjejakan dan Privasi

Apa yang boleh dikumpul oleh OpsIQ, dan berapa lama setiap jenis rekod disimpan.

Kekecualian

Dikecualikan IPs dan Julat CIDR

Alamat yang tidak sekali-kali dijejaki, satu setiap baris, alamat tepat atau julat CIDR. Cara paling bersih untuk mengecualikan pasukan anda sendiri daripada analitik anda, kerana ia meliputi semua orang di alamat itu dan bukan hanya pentadbir yang telah log masuk.

Dikecualikan URL Path-path

Corak halaman yang tidak pernah dijejak, satu bagi setiap baris, kad liar dengan asterisk. Contohnya /admin/* mengekalkan seluruh pejabat belakang di luar log pelawat.

Dasar Pengekalan Data

Pembersihan automatik bagi setiap subsistem dalam hari. Berasingan daripada tetapan Pengekalan Data keseluruhan dalam Umum dan daripada pembersihan Zon Bahaya.

Log interaksi AI kerok

Telemetri keyakinan yang menyimpan pratonton ringkas pertanyaan dan respons. Lalai 90 hari. Ini menyimpan paling banyak teks pelanggan, jadi pendekkannya dahulu apabila mengetatkan privasi.

Acara penggunaan AI dalam bentuk

Kiraan token bagi setiap panggilan untuk pelaporan kos. Lalai 90 hari. Angka sahaja, tiada kandungan mesej.

Jejak audit aksi

Log tindakan dan keselamatan yang mendedahkan sebarang pengubahan. Lalai 365 hari. Simpan ini paling lama; ia ialah jejak bukti anda.

Diagnostik Diagnosis

Catatan kesehatan Sistem Kesehatan Sistem Kesehatan Standar 30 _hari.

Soalan yang belum dijawab

Kelompok soalan yang tidak dapat dijawab oleh AI. Lalai 90 hari. Selesaikan semuanya pada halaman Soalan yang terlepas oleh AI sebelum ia tamat tempoh.

Pengawas dan eksport

Alerts Anamaly Numerik

Perbandingan harian semalam berbanding garis asas terkini, memberi amaran bila metrik bergerak lebih daripada ambang anda. Lalai 35 peratus. Mati secara lalai.

Eksport Gudang

Longgokan setiap malam bagi sesi, pelawat, paparan halaman dan jadual berkaitan untuk timbunan BI anda sendiri, dalam format pilihan anda, disimpan selama beberapa hari. Dimatikan secara lalai.

Tetapan-peraturan

Tetapan: Admin AI Assistant

Pembantu terapung yang digunakan oleh kakitangan anda di dalam pentadbir, dengan akses baca secara langsung kepada pelanggan, invois, tiket, pelayan dan log cron. Pembantu yang berbeza daripada pembantu untuk pelanggan di bawah Client Chat.

Memungkinkan OpsIQ Aid Widget

Memaparkan butang pembantu pada setiap halaman pentadbir. Dimatikan akan menyembunyikannya untuk semua orang.

Susunatur dan perilaku

Posisi sudut, lebar panel (320 Ke 600 [ Gambar di hlm.400 Ke 900 [ Gambar di hlm.0Ke 24), ukuran font, dan kabur kaca beku di belakang panel.

** Tunjukkan Chip Cepat *

Butang pintasan satu klik di bawah pengepala. Cara terpantas untuk kebanyakan kakitangan.

Info Model Pertunjukan

Memaparkan model mana yang menjawab dan berapa lama masa yang diambil. Berguna semasa melaraskan kos, tetapi mengganggu untuk kegunaan harian.

Pintu masuk Per-admin

Hanya memaparkan pembantu kepada pentadbir yang telah log masuk yang nama pengguna dan e-melnya kedua-duanya sepadan dengan ejen OpsIQ yang ditugaskan ke ruang kerja ini. Pemilik sentiasa lulus. Gunakan butang Semak akses saya sebelum mendayakan, jika tidak anda mungkin mengunci pasukan anda sendiri daripada akses.

AI Person

Nama paparan, cogan kata pengepala dan mesej alu-aluan tersuai yang dipaparkan apabila panel dibuka.

Chip Aksi Cepat Pintar

Edit label dan underlying prompt untuk setiap jalan pintas, tambahkan sendiri, atau reset ke default. label adalah apa yang dilihat oleh staf, promp adalah apa AI menerima.

Warna dan bentuk

Bentuk chip (pill, bulat, persegi), warna chip, tema kartu dan bentuk peluncur (bulat, squircle, persegi panjang), dengan pratinjau langsung.

Memori Perbualan

Pembantu mengingati sejarah setiap orang merentasi sesi pelayar, sehingga 120 mesej, yang disimpan dalam pangkalan data anda sendiri. Kosongkannya untuk bermula semula.

Tetapan-peraturan

Seting- Tetapan Bekal: Chat Klien

Widget chat yang digunakan pelanggan Anda, dan area terbesar dari Setting. Enam sub-tab, dengan switch master dan Simpan disematkan ke atas tab.

Work melalui sub-tab dalam rangka pemasangan baru: Identity and Copy, Appeign, Behavior, Support Flow, Knowledge Training. Lanjutan adalah infrastruktur dan dapat menunggu.

Identitas dan Salinan

Identitas Merek

Nama widget, cogan kata, nama AI, nama yang digunakan untuk notis sistem dan notis melahu, dan cara nama ejen dipaparkan. Sumber Nama Ejen menentukan antara nama sebenar, nama tersuai atau label pasukan.

Salam dalam-Tata-Shat

Dua ucapan sapaan, satu untuk semua pelawat dan satu untuk pelawat yang dikenal pasti. Soalan memulakan lebih banyak perbualan berbanding kenyataan.

Teaser Popup

Keislaman pesan mengambang sebelum chat dibuka, dengan nama, ukuran font dan warna sendiri. AI dapat menulis teaser, dengan kontrol untuk berapa banyak untuk menghasilkan, berapa banyak yang menunjukkan per kunjungan dan kesenjangan di antara mereka.

Prompt dan Penghapusan

Naskah lengkap: meminta nama dan email, konfirmasi, permintaan manusia, tidak ada agen yang tersedia, tiket dibuat atau dibatalkan, handoff tertunda. Sekitar dua lusin baris individu dalam panel collapsible.

Notis Status dan Idle

Tiga mesej yang dilihat oleh pelanggan: ejen menutup sembang, pelawat telah senyap, dan ejen menyerahkan kembali kepada AI. Elakkan perkataan dalaman seperti diselesaikan atau ditriaj.

Kompadan dan Saran

Pemegang tempat input, label butang bercakap dengan manusia, dan soalan pembuka yang dicadangkan. Tiga cadangan yang baik mengelakkan lebih banyak tiket berbanding satu halaman penuh artikel.

Pelancar, Ikon dan Avatar

Ikon pelancar, ikon lain pilihan semasa dibuka, saiz pelancar, dan imej untuk ejen manusia dan AI.

Penampilan

Tema dan Kaca

Mod tema, pratetap warna premium, keamatan dan kelegapan kabur, serta togol untuk animasi, garis pemisah, menyembunyikan baris status, menyembunyikan kad kotak mesej dan menyembunyikan butang tutup. Mulakan dengan pratetap; ia menetapkan berpuluh-puluh warna sekali gus.

Warna Utama

Pelancar, pengepala, panel bantuan, pautan, butang, notis sistem dan ruang menaip, setiap satu dengan warna mula dan warna akhir untuk kecerunan. Pilihan guna kaca lalai mengabaikan semua ini dan mengekalkan kemasan lutsinar.

Panel, Buih dan Keripik

Ke sekeliling tiga puluh pemetik yang meliputi panel, perbatasan, teks, area input dan setiap tipe gelembung (visitor, AI, agen, agent, mengetik, sistem) ditambah chip saran dan keadaan hover mereka. Hanya buka ini untuk pencocokan merek yang tepat, dan periksa kontras pada teks gelembung.

Susunatur dan Bentuk

Lebar dan tinggi panel, jejari sudut, saiz fon, kedudukan skrin, bentuk pelancar, gaya gelembung dan sama ada avatar dipaparkan. Uji lebarnya pada telefon.

Perilaku

AI menjawab secara automatik

Jika kau ingin membalas, berarti setiap pesan menunggu manusia.

Penindaklanjutan manusia dan teks ganda alami

Susulan lembut apabila pelawat menjadi senyap, dan mesej kedua yang pendek secara pilihan seperti yang akan dihantar oleh seseorang. Ditala dengan had susulan maksimum bagi setiap tempoh senyap, kelewatan pertama, pengganda seterusnya, tetingkap kehadiran dan tetingkap urutan maksimum. Boleh dihadkan kepada waktu perniagaan, dan disekat selepas ucapan terima kasih yang ringkas.

Mesin tik mesin penjawab dan membalas langkah

Sama ada balasan ditaip perkataan demi perkataan, dan seberapa pantas pembantu menjawab, mengikut pratetap atau kelewatan minimum dan maksimum anda sendiri dalam milisaat. Kelewatan kecil terasa lebih manusiawi daripada balasan serta-merta.

Terjemahan Segera

Setiap ejen membaca dan menulis dalam bahasa mereka sendiri manakala pelawat membaca dalam bahasa mereka.

Serahkan semula kepada AI selepas ejen melahu

Minit agen tidak aktif sebelum AI melanjutkan pembicaraan.

Buka sembang secara automatik

Saat-saat sebelum widget terbuka sendiri.0Tak pernah terbuka, mengganggu bergerak, pergi dari sini.0Kecuali diuji.

Jawapan Lebih Pintar

Perancangan awal untuk jawapan sekali laluan, kedalaman pemikiran, model berasingan pilihan untuk jawapan ejen, menunjukkan penaakulan kepada pelawat, toleransi terhadap salah ejaan, ingatan perbualan panjang, mengehadkan pembantu kepada perniagaan anda sahaja, harga dalam mata wang pelawat, dan cara pautan dipaparkan. Hanya bercakap tentang perniagaan anda patut dihidupkan untuk hampir semua orang.

Penjimatan Kos

Melangkau carian pengetahuan untuk ucapan seperti hai dan terima kasih, dan mengehadkan balasan terpanjang dalam token. Mengurangkan kos tanpa mengubah kualiti jawapan bagi soalan sebenar.

Bahasa

Bahasa yang disokong oleh widget dan cara ia memilih satu bahasa untuk pelawat.

Jawapan Akaun Pelanggan

Jawapan daripada akaun pelanggan sendiri yang telah log masuk, secara pilihan dicari secara langsung, dan secara pilihan dimuatkan hanya apabila diperlukan. Baca sahaja dalam semua keadaan; muat apabila diperlukan mengurangkan kos dengan ketara.

Bayaran balik

Permintaan bayaran balik berbantu di mana pembantu mengumpul butiran dan menyerahkannya kepada seseorang. Ia tidak sekali-kali menyelesaikan bayaran balik dengan sendirinya.

Perbualan dan Widget

Menyimpan perbualan lepas, meneruskan sembang merentas laman anda yang disambungkan, tetingkap yang boleh diseret, meminta e-mel daripada tetamu, dan membenarkan pasukan anda menukar sembang menjadi tiket.

Ciri Widget

Pemilih emoji, lampiran dengan mod tampal sahaja pilihan, pemahaman imej AI, ikon sebaris, mikrofon, butang bercakap dengan ejen, bunyi pelawat, pratonton lampiran, butang panggilan suara dan pengasingan sesi. Pemahaman imej AI ialah ciri yang membolehkan pelawat menampal tangkapan skrin ralat dan mendapat jawapan yang berguna.

Kotak Masuk Admin, Pemberitahuan dan Popup Selamat Datang

Tetingkap timbul alu-aluan pelawat, serta makluman ejen anda: bunyi peti masuk, pemberitahuan desktop, bunyi bisikan, sama ada bisikan peribadi berbunyi bip, dan selang tinjauan peti masuk.

Aliran Sokongan

Manusia Manusia yang Dibebaskan

Cara permintaan untuk bercakap dengan manusia ditugaskan, bilangan saat yang ada pada ejen untuk membalas, sama ada menolak akan mengembalikan sembang kepada AI, dan sama ada AI menyambung semula apabila masa tamat. Konfigurasikan ini sebelum mula beroperasi, jika tidak pelawat yang meminta manusia hanya akan menunggu.

Jam Bekerja

Di luar jam-jam ini AI tidak akan menawarkan manusia jadwal terpisah dari jam bisnis tiket di bawah OpsIQ Penulisan.

Balasan ketika AI dimatikan

Kata balasan pertama untuk pesan baru, balasan ketika seseorang sudah dibaris gilir, dan berapa lama sebelum mengulang.

Formulir Luar Talian

Freicho menunjukkan bentuk kontak daripada chat.

Pencarian Tiket dan Pemberitahuan Jabatan

Kesedaran tiket AI, supaya pelawat yang menyebut nombor tiket mendapat status sebenarnya, dan jabatan mana yang boleh dihalakan oleh AI. Panel terbina dalam menunjukkan penerima sebenar bagi setiap jabatan, ditentukan dengan cara yang sama seperti pemberitahu menentukannya, supaya anda dapat melihat sebelum pelanggan melihat bahawa sesuatu jabatan tidak memberi amaran kepada sesiapa pun.

Pusat Bantuan dalam widget sembang

Anda memilih di mana titik masuk muncul, label dan ikon bar bawah, dan apakah menawarkan link ke pusat bantuan penuh.

Penilaian Perbualan

Penilaian bintang dicetuskan apabila ejen menutup sembang, apabila penyerahan tamat, atau selepas tempoh tidak aktif yang anda tetapkan. Pilih satu atau dua pencetus, bukan kesemuanya.

Survei Pasca-Chat

Tinjauan ringkas apabila pelawat menutup sembang, dengan soalan anda, kelewatan, peraturan masa dan had bagi setiap lawatan. Pelawat juga boleh menghantar transkrip melalui e-mel atau memuat turunnya. Satu soalan akan dijawab; tiga soalan tidak.

Survei Email Post-Chat

Tinjauan susulan melalui e-mel selepas perbualan tamat, secara pilihan dalam bahasa yang digunakan pelawat semasa bersembang, dengan kawalan ke atas kelewatan, subjek, pengenalan, soalan, kedua-dua label butang dan baris ucapan terima kasih.

Maklum Balas Balasan

Ibu jari ke atas dan ibu jari ke bawah pada setiap jawapan AI, menyalurkan data ke papan pemuka kualiti.

Arkib Perbualan

Arkibkan secara automatik selepas beberapa hari, selesaikan secara automatik selepas beberapa minit senyap, dan padam perbualan yang diarkibkan selepas beberapa hari. Tempat ketiga untuk menetapkan pengekalan, bersama Umum dan Penjejakan.

Latihan Pengetahuan

Apa yang benar-benar diketahui oleh pembantu. Tiada perkara lain dalam Client Chat yang sepenting ini.

Latihan Pengetahuan Laman Web

Merangkak laman web anda supaya pembantu boleh menjawab daripadanya. Sehingga sepuluh pautan permulaan, had halaman, kedalaman pautan dan folder yang dikecualikan. Satu URL boleh diuji sebelum rangkakan penuh. Kecualikan laluan pembayaran, akaun dan pentadbir.

Pembenaman

Kata kunci dan model API yang mengubah halaman menjadi makna yang dapat dicari daripada padanan kata kunci.

Penyusun Pengetahuan AI

Satu klik dan AI membaca setiap FAQ dan halaman merangkak dan urutkan mereka ke dalam kategori.

Soalan Lazim, Jawapan Disahkan

Pasangan soalan dan jawapan yang dianggap sebagai sumber keutamaan tertinggi, masing-masing dengan status, wajaran dan kategori. Boleh dicari, boleh diimport daripada JSON, dan AI boleh menulisnya daripada penerangan perniagaan anda. Apabila pembantu tersilap, tulis Soalan Lazim: ia mengatasi halaman yang dirangkak, jadi pembetulannya berlaku serta-merta.

Lanjutan

Prestasi dan Batas - Batas yang Tidak Termanfaatkan

Selang tinjauan, had kadar mesej dan tetingkap, saiz lampiran maksimum, percubaan lampiran bagi setiap tetingkap, dan sambungan fail yang dibenarkan. Senarai sambungan ialah kawalan keselamatan; pastikan ia ketat.

Penghantaran Masa Nyata

OpsIQ Live dibina dalam dan dihidupkan secara lalai: mesej baharu sampai ke sembang dalam masa kira-kira dua saat, tanpa perlu sebarang persediaan. Pusher, Ably atau Firebase kekal tersedia sebagai pilihan, dengan selang sandaran.

Pemberitahuan Pendorongan

Memberi amaran kepada ejen anda pada telefon atau komputer mereka apabila pelanggan menulis semasa peti masuk ditutup. OpsIQ menghantarnya sendiri: hidupkan atau matikan, dan setiap ejen membenarkan pemberitahuan sekali dalam pelayarnya.

Dorongan Web (VAPID)

Peluncuran Browser menggunakan kunci yang dihasilkan sendiri tanpa penyedia pihak ketiga. Dijana di sini, bukan di Danger Zone.

Suara, Video dan Perkongsian Skrin

Tiada apa-apa untuk disediakan. Apabila firewall atau rangkaian ketat menyekat sambungan langsung, panggilan secara automatik melalui relai panggilan OpsIQ. Pelan anda termasuk trafik relai setiap bulan; lihat Lesen dan pelan.

Aliran Kerja Kotak Masuk Kotak Masuk

Tetapan ruang kerja ejen dan bukan tetapan pelawat: SLA respons pertama dalam minit, paparan baris gilir yang disimpan, pintasan papan kekunci dan palet arahan, carian dalam perbualan, dan tiket pelanggan dalam pemeriksa.

Saluran Pesanan

WhatsApp, SMS, Facebook Messenger, Instagram, Telegram, mesej terus X dan LINE, masing-masing dengan suis balasan automatik AI sendiri, ditambah suis dasar untuk tindakan AI pada saluran, penangguhan balasan dan templat penglibatan semula WhatsApp. Setiap saluran masuk ke peti masuk yang sama seperti sembang web.

✅
A Live Widget Prapapar di bawah tab pemutakhiran saat anda mengedit. Gunakannya sebagai ganti memuat ulang website anda untuk memeriksa perubahan.
Tetapan-peraturan

& Gantikan

Setiap emailOpsIQDan satu-satunya desain yang membuat mereka semua.OpsIQ- Apa?

Satu desain, banyak pesan

Butang Templat email global ugish ialah pembalutnya: logo anda, pengepala, kad, tipografi dan pengaki, dengan bahagian tengah yang kosong. Setiap mesej yang dihantar oleh OpsIQ dimasukkan ke bahagian tengah itu. Sunting pembalut sekali dan setiap e-mel berubah bersama — balasan tiket, resit Kedai, tetapan semula kata laluan, peringatan tempahan, surat PeopleOS, dan apa sahaja yang anda tulis sendiri.

✅
Tiada cara untuk menghantar e-mel keluar dari OpsIQ tanpa pembalut ini. Ia dikenakan pada satu-satunya titik yang dilalui oleh setiap mesej semasa keluar, jadi mesej yang ditambah kemudian tidak boleh terlepas daripadanya.

Mengedit - edit pesan

1
Buka Seting, lalu Templat

Mesej dikumpulkan mengikut jenisnya: tiket dan portal, Kedai, log masuk dan keselamatan akaun, tempahan, perbualan dan pemberitahuan, laporan, surat PeopleOS, dan mesej anda sendiri.

2
Kau mau menekan edit pada yang kau inginkan

Anda mendapatkan subjek, editor kaya-teks dengan HTML Anda dapat beralih ke hidup, dan pratinjau email yang selesai persis seperti penerima menerimanya — termasuk pembungkus Anda.

3
Whero gunakan chip variabel

Cip di atas editor ialah fakta yang berubah: nombor tiket, rujukan pesanan, masa tempahan. Klik satu untuk meletakkannya di kedudukan kursor.

4
Simpan

Hanya pesan itu yang tertulis. biarkan sebuah lapangan kosong dan terus terbina-dalamnya; pil pada baris memberitahu Anda di mana keadaan itu masuk

💡
Pemboleh ubah yang tidak anda gunakan akan dibuang apabila e-mel dihantar, begitu juga baris tempat ia berada. Itulah sebabnya tempahan tanpa nombor telefon tidak sekali-kali menghantar "Telefon:" tanpa apa-apa selepasnya.

Tuliskan templat anda sendiri

Gunakan ini untuk mesej yang belum dihantar oleh OpsIQ: notis penghantaran, peringatan pembaharuan, pek alu-aluan, kunci lesen. Ia mendapat semua yang diperoleh oleh mesej terbina dalam — editor, pratonton, peraturan pelan dan reka bentuk global anda — dan sistem anda sendiri menghantarnya melalui API.

1
Tambah templat

Butang ini terletak di bahagian atas halaman Templat dan sekali lagi berdekatan "Templat anda sendiri".

2
Sebutkan saja

Nama itu menjadi rujukan yang digunakan oleh sistem anda semasa menghantar, ditunjukkan di bawah medan semasa anda menaip — contohnya x_custom_delivery_booked. Ia tidak boleh diubah selepas itu, kerana sesuatu sudah pun menghantar menggunakannya.

3
Nyatakan untuk apa ia dan bila ia dihantar

Dua baris ini adalah apa yang Anda dan rekan-rekan membaca di halaman Templat setahun dari sekarang.

4
Daftar bagian yang berubah

Dipisahkan dengan koma, contohnya: name, when, tracking_link. Setiap satu menjadi {{variable}} yang boleh anda masukkan ke dalam subjek atau mesej, dan sistem anda mengisinya semasa penghantaran.

5
¡Ogodi Tulis subjek dan pesannya

Kalimat - kalimat yang sederhana tidak apa - apa — garis putus menjadi paragraf.

6
Ciptakan, kemudian buka

Ia muncul di bawah "Templat anda sendiri" dengan editor penuh dan pralihat langsung, sama seperti setiap mesej terbenam.

⚠️
Write the message, not the whole page. A template that carries its own <html> document is refused, because a whole document would slip past the wrapper and your email would go out with none of your branding on it.

Menghantar templat anda sendiri

Dua panggilan pada API produk. Pemanggil membekalkan penerima dan pemboleh ubah — tidak sekali-kali kata-kata dan tidak sekali-kali reka bentuk, jadi integrasi tidak boleh menghantar mel tanpa jenama melalui ruang kerja anda mahupun mengubah secara senyap apa yang anda katakan kepada pelanggan anda.

Senaraikan templat anda dan pemboleh ubah yang diterima oleh setiap satu
POST /api/v1.php
Authorization: Bearer YOUR_API_KEY

{ "action": "email.templates.list", "mine": true }
Hantar
POST /api/v1.php
Authorization: Bearer YOUR_API_KEY

{
  "action": "email.template.send",
  "template": "x_custom_delivery_booked",
  "to": "[email protected]",
  "to_name": "Ada Obi",
  "variables": {
    "name": "Ada",
    "when": "Thursday 11 September, 14:00",
    "tracking_link": "https://track.example.com/AB12"
  }
}
💡
Nama variabel variabel pergi TANPA kawat gigi diAPIPanggilan. email.templates.list tangan mereka kembali dalam bentuk persis Anda lulus mereka masuk

Templat dan rencanamu

Pesanan yang tak kau terima

Kekal disenaraikan dengan pautan "Lihat pelan" dan tanpa editor — supaya anda dapat melihat apa yang akan dihantar oleh OpsIQ dan apa yang membukanya.

Templat Anda sendiri

Pilih perkhidmatan yang memiliki templat semasa anda menciptanya, atau biarkan pada Setiap pelan. Ruang kerja tanpa perkhidmatan itu akan melihatnya tersenarai tetapi tidak boleh mengedit atau menghantarnya.

Log masuk, keselamatan, pemberitahuan dan ujian e-mel

Tidak pernah dihadkan mengikut pelan. Tidak dapat membetulkan ayat e-mel tetapan semula kata laluan yang diterima oleh pentadbir anda sendiri merupakan jenis sekatan yang salah.

Soalan

Boleh aku ubah desainnya untuk satu pesan saja?+

Desainnya adalah pembungkus dan di bagi, yang membuat setiap email tetap sesuai dengan Anda.

Apa yang terjadi dengan kata-kataku jika aku menekan Reset?+

Hanya muncul di templat global, dan mengganti apa yang ada di dalam editor dengan desain bawaan. Tidak ada yang ditulis sampai Anda menekan Save, sehingga Anda dapat menutup dialog untuk mengubah pikiran Anda.

Saya terpadam salah satu templat saya secara tidak sengaja.+

Mengalih keluar memerlukan dua klik atas sebab itulah — klik pertama menyediakannya dan memberitahu anda apa yang akan berhenti berfungsi. Jika ia sudah tiada, cipta semula dengan nama yang sama dan rujukan yang sama akan kembali; hanya ayatnya yang perlu ditaip semula.

Bolehkah penyambung atau alat tambah membawa templatnya sendiri?+

Ya. Pakej menghantar mail_templates.json dalam direktorinya sendiri, dan mesej-mesejnya muncul di bawah "Templat pemaju" dengan editor yang sama, pralihat, pembungkus dan gerbang rancangan. Edit perkataan anda milik ruangkerja anda dan bertahan semasa kemaskini pakej.

Tetapan-peraturan

Seting- Tetapan: OpsIQ _Menulis

Tiket yang dijawab secara bertulis: balasan automatik, sistem tiket asli, eskalasi, waktu perniagaan, penghalaan dan e-mel untuk pelanggan.

Autojawab

Tunjukkan butang OpsIQ Writing

Menambah butang pembantu penulisan untuk ejen anda dalam panel pentadbir.

Dayakan autojawab tiket

Jika tidak, mulailah dengan itu dan review draft selama seminggu.

Departemen-departemen berrepliku-sendiri

Departemen mana yang secara oto-reply dapat menjawab masuk apa pun yang tidak terdaftar ditinggalkan untuk manusia, yang merupakan standar aman.

Jadual lengah balasan (minit)

Berapa lama untuk menunggu sebelum balasan automatik dihantar. Balasan serta-merta kelihatan seperti robot; beberapa minit kelihatan seperti pasukan yang pantas.

Upah Max AI ULANG setiap tiket oleh departemen

Had bagi setiap jabatan, contohnya Pengebilan 1 dan Sokongan 3. Tanpa had, bebenang yang keliru boleh berulang tanpa henti.

Panjang Balas, status dan identitas

Token penulisan maksimum, status tiket selepas balasan dan selepas eskalasi, dan akaun pentadbir yang dikaitkan dengan balasan automatik. Gunakan akaun yang dinamakan dengan jelas supaya kakitangan dapat membezakan balasan AI daripada balasan manusia.

Operasi tiket penduduk asli kota

Sistem Tiket Asli Ogos

Sistem tiket ticket yang dibangun menjadi OpsIQ, untuk pemasangan tanpa bantuan eksternal.

Email masuk melalui saluran masuk ke dalam tiket asli

Menukar e-mel masuk menjadi tiket. OpsIQ menyediakan URL titik akhir, token pengesahan, laluan skrip dan binari PHP. Apa sahaja yang boleh menghantar ke titik akhir itu boleh mencipta tiket, jadi rahsiakan token tersebut.

Balasan berbilang giliran serta lengah dan nyahlantun

Sama ada AI terus membalas semasa perbualan berlangsung, dan sama ada ia menunggu satu tempoh senyap supaya tiga mesej pantas mendapat satu balasan yang difikirkan. Tempoh senyap ialah tetapan tunggal terbaik untuk menjadikan balasan automatik terasa difikirkan.

Portal sokongan awam

Halaman untuk pelanggan di mana sesiapa sahaja boleh membuka dan menjejak tiket, dengan baris aluan pilihan. Alamat dan rupanya dikonfigurasikan dalam tab Portal Sokongan.

Format nombor tiket

Bilangan huruf rawak yang muncul dalam nombor tiket yang dijana.

Pelanggan email dalam bahasa mereka sendiri

Emel tiket mengikut bahasa pelanggan. Emel kakitangan tidak pernah menukar bahasa: pemberitahuan, amaran jabatan, penerangan dan laporan terjadual tetap dalam bahasa sistem anda.

Akolusi dan konfirmasi tidak diketahui

Pengakuan tetap pada tiket baharu, serta mesej pengesahan apabila tiket dibuka, apabila maklum balas diberikan dan apabila tiket ditutup, masing-masing dengan pratonton langsung. Terdapat juga pembalut templat e-mel global dan pautan di sebalik butang lihat tiket anda.

Penayangan spam AI ani

Menyalin tiket dari penghantar tidak diketahui, dan boleh secara opsyenal memindahkan spam yang dicurigai sendiri. Tinggalkan pergerakan automatik mati sehingga anda telah melihat keputusannya.

Tutup tiket terbiar secara automatik

Beritahu pelanggan di pesan penutup bagaimana membuka kembali.

Jam kerja bisnis (SLA calendar)

Waktu zona waktu, pembukaan dan penutupan waktu, hari kerja dan liburan untuk timer reply dan resolusi pertama. jadwal terpisah dari Working Hours di bawah Client Chat.

Tiket baru Auto-asign

Tugasan automatik, secara pilihan hanya kepada ejen yang dalam talian, dengan kemahiran ejen dan kepekaan padanan untuk penghalaan berasaskan kemahiran.

Cadangkan tiket duplikat

Mengesan apabila pelanggan membuka tiket yang hampir sama dengan tiket yang sudah mereka miliki, dengan kepekaan padanan yang boleh dilaraskan.

Tinjauan kepuasan selepas ditutup

Hasil muncul di halaman CSAT.

Beritahukan departemen melalui email

Email departemen ketika tiket baru tiba.

Apa yang boleh dibaca oleh AI

Akses data klien AI

Suis utama serta kebenaran baca sahaja individu untuk ringkasan profil klien, invois, transaksi, baki kredit, produk dan perkhidmatan, domain, pelayan yang dipautkan dan gambaran keseluruhan akaun peringkat tinggi. Mulakan dengan ringkasan profil dan tambah kategori apabila balasan memerlukannya.

Eskelatasi dan pengetahuan

ULANGKAN Eskalasi tiket AI

Kau memilih departemen yang diizinkan, cek penundaan, dan dapat menulis instruksi pemberitahuan eskalasimu sendiri.

Tetapan pengetahuan

Sama ada balasan menggunakan bahasa pelanggan, sama ada ia menggunakan pautan dan Soalan Lazim yang dirangkak, sama ada AI membaca lampiran imej dan PDF, mod balasan pengetahuan, sama ada pengetahuan JSON yang diimport digunakan, dan sama ada pautan sumber boleh dipaparkan. Gunakan pautan dan Soalan Lazim yang dirangkak patut dihidupkan, jika tidak AI hanya meneka.

Hentikan balasan automatik selepas balasan manusia

Sebaik sahaja kakitangan membalas, AI berhenti menjawab tiket itu. Tanpanya, AI boleh bercakap bertindih dengan ejen anda sendiri.

Petunjuk tiket dan email

Arahan teks bebas yang membentuk nada dan kandungan setiap balasan, dengan contoh lengkap yang boleh dimuatkan. Nyatakan dengan jelas apa yang AI tidak boleh lakukan sama sekali.

Import JSON pengetahuan

Upload atau paste file pengetahuan JSON untuk asisten menulis.

Studio Butang

Pereka penuh untuk butang yang dilihat pelanggan: gaya paparan, saiz, label, ikon, bentuk, lebar minimum, gaya latar belakang dengan warna utama dan sekunder, sudut gradien, sempadan, jejari sudut, bayang, tipografi, pelapik, animasi melahu, gerakan dan warna semasa dilalukan tetikus, dan gelang fokus, serta kotak CSS tersuai untuk apa sahaja yang tidak diliputi oleh kawalan.

Tetapan-peraturan

Tetapan: Portal Sokongan

Laman yang berhadapan dengan pelanggan, tempat orang ramai membuka dan menjejak tiket serta membaca artikel bantuan anda. Tab ini mengawal cara ia dicapai dan cara pelanggan log masuk; reka bentuk visualnya dibuat dalam Support Portal Studio.

Portal Studio atau Portal Tiket Terbenam: yang mana yang saya inginkan?

Kedua-duanya produk yang berbeza dan orang sentiasa mengelirukannya. Kedua-duanya menyelesaikan masalah yang berbeza, dan menjalankan kedua-duanya bersama adalah perkara biasa.

Support Portal Studio: tempat anda menghantar pelanggan

Studio merancang laman sokongan lengkap yang dihoskan oleh OpsIQ untuk andaIni memiliki alamat web sendiri, atau domain Anda sendiri, dan membawa seluruh pengalaman self-service: artikel bantuan dengan pencarian, formulir permintaan, sejarah tiket, pendaftaran pelanggan dan asisten. Pilih sebuah template, bekerja melalui Tema, Navigasi, Layout, Pengetahuan, Footer, Brand, Tiket, Asisten, Form dan CSS, preview di desktop, tablet dan ukuran telepon, kemudian menerbitkan.

Gunalah ketika anda mahukan satu destinasi berjenama yang boleh anda tunjukkan kepada setiap pelanggan, dan anda lebih suka tidak membina atau menyelenggara ruang sokongan di dalam laman web anda sendiri.

Portal Tiket Terbenam: tiket di dalam laman anda sendiri

Keledainya Hanya pengalaman tiket di halaman website Anda sendiri. Pelanggan membuka, menjejak dan membalas permintaan sokongan tanpa meninggalkan halaman anda, dan pengepala, navigasi serta reka bentuk anda sendiri kekal seperti sedia ada. Tetapkan susun atur, rupa dan peraturan akses dalam pembina widget, pratonton hasilnya, kemudian salin coretan benaman ke dalam halaman anda.

Gunalah ketika anda sudah mempunyai laman web atau aplikasi dengan reka bentuknya sendiri, dan anda mahu sokongan berlaku di dalamnya dan bukannya menghantar pelanggan ke alamat lain.

Versi pendek

Studio bina tempat anda menghantar pelanggan. Benaman pula membawa tiket Ke tempat pelanggan Anda sudah beradaBanyak bisnis yang menjalankan keduanya, membenamkan widget tiket di area rekening mereka untuk permintaan in-context sambil menjaga portal host sebagai tujuan layanan mandiri dengan artikel dan pencarian.

Alamat dan akses

Mode akses access able

Apakah portal terbuka untuk siapa saja atau dibatasi untuk signed-in pelanggan.

Pilihan susunatur

Apakah portal dan pusat bantuan berbagi satu pahlawan atau menggunakan dua, yang navigasi dan footer muncul di kedua permukaan, dan label bagian navigasi.

Alamat Portal

Alamat yang digunakan oleh pelanggan. Pilih nama dan OpsIQ menunjukkan alamat portal yang terhasil serta alamat pusat bantuan yang sepadan. Mengubahnya kemudian akan merosakkan pautan yang telah anda hantar.

Domainmu sendiri

Wadiore melayani portal dari domain yang Anda miliki, seperti support. yourdomain. com.

Portal Tiket Terbenam di Benam

Menghidupkan widget sedia pasang yang diterangkan di atas, dan membuka pembina benaman tempat anda memilih susun atur, rupa dan peraturan akses, membuat pratonton hasilnya dan menyalin coretan kod untuk halaman anda. Ini bukan Portal Studio: Studio mereka bentuk portal yang dihoskan, manakala ini meletakkan tiket di dalam laman web anda sendiri. Kedua-duanya boleh dihidupkan serentak.

Bagaimana pelanggan menandatangani di

Ini adalah pilihan pendaftaran pelangganmu.

Metode tandatangan-in

Pilihan yang muncul di halaman masuk.

Tanda masuk sosial

Penyedia akaun pengguna, setiap satu memerlukan ID klien dan rahsia, dengan alamat ubah hala yang dibekalkan oleh OpsIQ untuk didaftarkan dengan penyedia tersebut.

Tanda tangan tunggal (OIDC)

Pelanggan customer masuk melalui penyedia identitas, dengan penerbit URL_, ID klien, rahasia dan opsional yang diizinkan daftar domain email.

Pelanggan SAML 2.0

The SAML sama. OpsIQ menyediakan jawapan ACS URL dan ID entiti SP; anda berikan IdP entiti ID, log masuk dan log keluar URLs, X509 sijil dan nama atribut opsyenal. SAML buka dalam Kaedah Logmasuk atau ia tidak akan muncul.

Tak ada yang masuk dari aplikasimu.

Dia menandatangani link yang dalam jadi pelanggan sudah masuk ke tanah aplikasi Anda di portal tanpa tanda tangan lagi. OpsIQ \"Memsediakan tanda tangan rahasia, portal\" URL Kunci ruang kerja dan area kerja, rute lengkap untuk bahasa Anda (PHP, Laravel, WordPress, WHMCS, Node.js, Flask, Django, .NET, Rails, Java, Go, dan pada self-hosted memasang OpsIQ server sendiri), catatan setup langkah demi langkah, dan generator untuk link tes yang ditandatangani. Gunakan generator sebelum menulis kode apapun.

Bagaimana rute bekerja

Pelanggan anda mengklik pautan Sokongan yang menghala ke laluan tersebut. Laluan itu mendapati pelanggan telah log masuk ke aplikasi anda (tetamu dihantar ke halaman log masuk anda dan kembali semula), membaca rahsia daripada pelayan anda, menandatangani token sekali guna yang tamat tempoh dalam dua minit, dan mengubah hala ke portal dengan pengepala no-referrer dan no-store supaya token tidak dicache atau terbocor.

Butang Log masuk portal itu sendiri

Di Portal Studio, halaman Sign-in, nyalakan log masuk website saya dan set halaman login Anda URL ke rute yang sama. Portal menambahkan opsiq_portal_return (halaman pelanggan ada di); rute menghormatinya hanya ketika itu berada di dalam alamat portal Anda dan membawa pelanggan kembali ke sana, menandatanganinya.

WHMCS

Tiada apa-apa untuk ditulis: cangkuk WHMCS daripada Remote Sites sudah pun mendaftar masuk pelanggan ke portal dan mengendalikan alamat kembali. Tetapkan URL halaman log masuk anda kepada log masuk kawasan pelanggan WHMCS anda.

Sign out mana-mana

Keluar dari portal juga menandatangani pelanggan keluar dari aplikasi Anda.

Kecerobohan dan perlindungan

Medan borang permintaan

Medan berstruktur yang dikumpul oleh borang permintaan. Setiap medan tambahan mengurangkan penyerahan, jadi minta hanya apa yang anda perlukan untuk triaj.

Kekejaman dan perlindungan penyalahgunaan

Honeypot dan pengehadan kadar sentiasa melindungi borang awam. Selain itu, anda boleh menyekat alamat e-mel pakai buang, menambah domain disekat anda sendiri, dan menambah CAPTCHA menggunakan Google reCAPTCHA atau Cloudflare Turnstile. reCAPTCHA menggunakan semula kunci yang sudah ditetapkan di bawah Tetapan, Keselamatan; kunci Turnstile dimasukkan di sini.

Portal analitik

A read-only ringkasan kegiatan portal selama tiga puluh hari terakhir.

Tetapan-peraturan

Tetapan: Kebenaran, Lesen, Cron dan Zon Bahaya

Kumpulan Sistem, serta kawalan akses pasukan yang menentukan siapa boleh melihat tab Tetapan yang mana.

Akses dan Kebenaran Pasukan

Hak-hak milik per-admin

Setiap pentadbir mendapat set kebenaran yang jelas meliputi akses peti masuk sembang, bahagian Tetapan yang boleh mereka sunting, dan jabatan mereka. Sesiapa yang mempunyai peranan Pentadbir Penuh sentiasa mempunyai setiap kebenaran. Kebenaran Tetapan menentukan tab yang dilihat oleh seseorang, jadi berikan set paling sempit yang membolehkan mereka bekerja.

Lisensi

Menunjukkan lesen semasa anda, apa yang dilayakkan olehnya dan statusnya.

Persediaan Cron

Pemasangan dihoskan sendiri sahaja. Di awan OpsIQ, tugas berjadual dijalankan untuk anda dan tab ini disembunyikan. Satu baris crontab memacu setiap tugas berjadual: balasan automatik tiket, penghalaan eskalasi, penyegaran kadar pertukaran, semakan berkala peti mel dan penyegerakan penyambung.

1
Salin garis

Tab menunjukkan garis crontab yang tepat untuk server Anda dengan binari PHP yang benar sudah dipilih.

2
Tambahkan ke crontab

Buat crontab -e sebagai pengguna yang menjalankan PHP dan paste baris tunggal cPanel Sebaliknya gunakan alat Cron Jobs.

3
Tentusahkan secara pasti

Dalam masa seminit, jubin denyutan jantung akan menyala. Gunakan Jalankan sekarang untuk menguji dengan segera dan bukannya menunggu.

Panel denyutan menunjukkan larian terakhir, tempoh dan apa yang telah diproses untuk kedua-dua baris gilir balasan automatik dan tinjauan e-mel serta penyambung. Ia memberi amaran apabila larian terakhir datang daripada butang web manual dan bukannya cron pelayan sebenar, dan apabila denyutan sudah lapuk.

Zona Bahaya Variado

Padam Semua Data Penjejakan

Memadam semua yang dikumpulkan atau dijana oleh OpsIQ. Anda menandakan apa yang hendak disertakan dan menaip frasa pengesahan dengan tepat. Tetapan dan konfigurasi laman, alamat yang disekat, semua yang ditulis oleh pasukan anda (pangkalan pengetahuan, FAQ, terjemahan, reka bentuk portal, takrifan tindakan) dan resit persetujuan semuanya dikekalkan.

Singkirkan Data Lama Dari

Sapuan yang sama tetapi terhad kepada rekod yang lebih lama daripada 30, 60, 90 atau 180 hari, atau setahun. Untuk pengekalan bergulir automatik, gunakan nilai pengekalan dalam Umum dan Penjejakan sebaliknya dan biarkan tugas berjadual melakukannya.

🚫
Export sebuah backup dari Detection, General sebelum menggunakan apapun di Danger Zone. Tindakan ini tidak dapat dibatalkan.
Tetapan-peraturan

Memulihkan timmu

Jemput ahli pasukan dan tetapkan peranan untuk mengawal siapa yang boleh mengakses apa.

Kumpulan
Pasukan & jabatanSkrin pasukan: jadual pentadbir dengan maklumat hubungan, lencana peranan (Pemilik, Pentadbir Penuh, Ejen) dan jabatan yang boleh diakses oleh setiap seorang.Pasukan & jabatanruang kerjaPasukan & jabatanPengguna sistem failKONTACTPERANANDEPARTMENAOada@acme.comAdausuPemilikSemuaKMkojo@acme.comÇakh Kojo MensahAdmin PenuhSemuaRTrita@acme.comNazar Rita TettehAgenPenagihanSBsam@acme.comAgenSokongan1TEAMJemput & urus pentadbir2ROLESKepemilikan · Admin Penuh · Agen3SCOPEDAkses Per-perdepartemen
Semua admin dengan kontak, peran dan departemen yang mereka dapat raih, agen diskop, pemilik penuh.

Peranan

Pemilik

Akses penuh termasuk lesen, pengebilan dan zon bahaya. Satu bagi setiap pemasangan.

Admin Penuh

Akses penuh kecuali lisensi dan zona bahaya.

Agen

Dibatasi untuk departemen yang ditugaskan Tiket, chatting, dan analytic saja.

Menjemput ahli pasukan

1
Pergi ke Pasukan

Pergi ke Pasukan di bar sisi.

2
Klik Jump

Masukkan e-mel ahli pasukan.

3
Tetapkan peranan

Ocean, Admin, atau Agen.

4
Umpukkan departemen

Untuk Agen, memilih departemen yang dapat diakses.

5
Hantar jemputan

Mereka menerima email dengan link setup.

Tetapan-peraturan

Prestasi pasukan

Bagaimana prestasi pasukan sokongan anda. Akses adalah mengikut kebenaran, bukan mengikut peranan: kebenaran melihat membuka halaman, kebenaran mengurus membuka sasaran, QA dan bacaan yang mengenal pasti rakan sekerja, dan kebenaran kewangan ganjaran ialah yang menambah tab Ganjaran. Ketua pasukan boleh diberikan mana-mana kebenaran ini tanpa menjadi pentadbir penuh.

Prestasi pasukan
Prestasi pasukanSkrin prestasi pasukan: ejen disusun mengikut bar skor komposit, CSAT dan baki ganjaran dengan butang Bayar bagi setiap baris.Prestasi pasukanruang kerjaPrestasi pasukanORANG AGENSAKOKANTOR CSATBALANCARARTNazar Rita Tetteh4.8$42GajiSBFijiangra4.5$28GajiKMÇakh Kojo Mensah4.2$15GajiAOAdausu4.9$51Gaji1SCOREDPerforma komposit2CSAT & LOADPenarafan Feedulasi + volume3REWARDSSaldo ejen bayaran
Skrin prestasi pasukan yang sebenar: setiap ejen diberi skor berdasarkan jumlah dan CSAT, dengan baki ganjaran yang boleh anda bayar bagi setiap baris.

Bagaimana halaman diatur

Prestasi Pasukan terdiri daripada lima tab. Setiap satu menjawab soalan yang berbeza, dan ia disusun mengikut tahap kesegeraan ia biasanya memerlukan anda.

01 Pusat Komando UGD

Keadaan baris gilir secara langsung, hasil pelanggan berbanding sasaran anda, cara kapasiti digunakan, situasi yang memerlukan keputusan, dan indeks setiap rakan sepasukan yang dilaraskan mengikut bukti.

02 Rekan setim

papan pemimpin, pengakuan (paling ditingkatkan dan streak), pencarian, dan kontrol opt-in untuk siapa yang mungkin melihat peringkat.

Kualiti 03 _Filty

Kad skor, penilaian yang direkodkan, persetujuan penilai yang diperbetulkan untuk kebetulan, hanyutan penilai dan pertikaian bukti.

04 Upah

Nilai Token, klaim pembayaran, dan alokasi periode yang diatur: mengotorisasi sebuah langit-langit yang didanai, meninjau pratinjau, finalise.

05 Sejarah

Bagaimana ruang kerja telah pindah dari waktu ke waktu: metrik trend dengan bagan, dan 28 Setiap kartu menyembunyikan dirinya sendiri sampai ada sejarah yang cukup untuk menggambarnya.

Tidak ada nilai yang tidak terkorekorkan

Teman setim tanpa volume yang cukup ditangani — atau yang dimensinya membawa bukti menambahkan hingga kurang dari setengah berat badan yang dikonfigurasi — ditunjukkan sebagai Unscored. Skor mereka, peringkat dan band kosong dan breakdown mereka tersembunyi. Ini adalah kesengajaan: merender pengukuran absen sebagai nol menempatkan seseorang di bagian bawah ranking untuk memiliki minggu tenang. Derajat bukti adalah konfigurasi per ruang kerja dalam Target & mencetak gol.

Dua ambang bukti ini mempunyai tugas yang berbeza dan wajar diasingkan. Minimum dikendalikan menentukan sama ada seseorang itu diberi skor atau tidak. Minimum penilaian tidak menjejaskan skor: ia menentukan kelayakan anugerah dan ganjaran. Jadi seorang rakan sepasukan boleh diberi skor sepenuhnya dan disenaraikan dalam kedudukan tetapi masih tidak layak untuk tempoh itu, kerana terlalu sedikit pelanggan yang menilai mereka.

💡
Setiap angka diskop kepada ruang kerja yang anda lihat dan julat masa yang anda pilih. Rakan sepasukan yang bekerja dalam dua ruang kerja berasingan mempunyai rekod bebas dalam setiap satu. Dua pengecualian yang patut diketahui: KUMPULAN laman web ialah satu ruang kerja, jadi domain ahlinya diukur bersama; dan paparan Semua laman web sengaja mengukur segala-galanya serentak.

Indeks kinerja untuk

Gabungan lima dimensi, setiap satu diukur berbanding sasaran yang anda tetapkan dan bukannya berbanding rakan sekerja, kemudian ditarik ke arah tengah apabila bukti di sebaliknya nipis. Perhatikan arahnya: pelarasan menggerakkan angka ke arah 70, jadi skor cemerlang yang nipis ditarik ke bawah dan skor lemah yang nipis ditarik ke atas. Minggu pertama yang buruk dengan empat perbualan juga bukan keputusan muktamad. Apabila bukti bertambah, angka yang dilaraskan menumpu kepada angka mentah.

Kualiti

Kepuasan pelanggan daripada maklum balas yang disahkan. Ditambah dengan keputusan kad skor QA jika ada dan ditadbir.

Kepekaan Menanggapi

Pertama kali respon di P50 dan P90 persentil, terhadap target Anda.

Resolusi

Resolusi waktu dan tingkat resolusi satu-sentuhan.

SLA

Penahanan terhadap SLA yang kau konfigurasikan, ditambah pada resiko dan pelanggaran.

Kemujikan

Cara membuka kembali dan memindahkan — pekerjaan yang kembali.

💡
Pemberat boleh dikonfigurasikan dan bersifat relatif; jumlahnya tidak perlu 100. Bukti yang tiada hanya boleh merendahkan indeks, tidak sekali-kali menaikkannya — keseluruhan pemberat yang dikonfigurasikan kekal dalam penyebut.

Keupayaan dan waktu yang produktif

Pekerjaan, waktu produktif, diselesaikan per jam produktif dan berbagi online dari jendela. Utilisasi sengaja tidak dilaporkan: perlu jam dijadwalkan sebagai penyebut, OpsIQ Ia membaca sebagai tidak tersedia dengan alasan yang melekat.

⚠️
Occupancy mengatakan bagaimana waktu dihabiskan, tidak pernah seberapa baik itu dihabiskan, dan tidak pernah dana, gerbang atau ukuran pembayaran. rekan setim tanpa bukti handle-time dibaca sebagai tidak tersedia, tidak sebagai nol.

Jaminan kualiti

Kad skor ialah rubrik yang digunakan oleh penyemak untuk memberi skor kepada perbualan sebenar. Hanya versi yang diterbitkan boleh menerima penilaian, dan menerbitkan versi baharu tidak sekali-kali menulis semula apa yang telah diberi skor. Semakan ialah bukti tentang satu perbualan, bukan keputusan tentang seseorang.

Perjanjian viewer

Dilaporkan sebagai statistik yang dikoreksi secara kebetulan (Cohen's and Fleiss' kappa), bukan persentase perjanjian mentah. Dua pengulas yang lulus semuanya setuju dengan 100% untuk saat tidak membawa informasi.

Tinjauan bintang

Sama ada seorang penyemak memberi skor secara sistematik lebih ketat atau lebih longgar daripada rakan sekerjanya pada perbualan yang sama — perbandingan dengan ahli panel yang lain, bukan trend dari semasa ke semasa. Ia memerlukan interaksi yang disemak secara bebas lebih daripada sekali.

Pertikaian

Teman setim dapat secara resmi membantah bukti yang dicatat tentang mereka.

Pandangan Sendiri

Ditolak. Rakan sepasukan tidak boleh menyerahkan penilaian terhadap diri sendiri.

⚠️
Penilaian yang digred oleh AI tidak boleh mempengaruhi gaji sehingga kalibrasi diterbitkan yang menunjukkan model bersetuju dengan penilai manusia dengan cukup rapat, diukur dengan kappa berbanding sampel minimum. Gerbang yang terbuka bermaksud model bersetuju dengan manusia dengan cukup rapat untuk diambil kira — ia tidak sekali-kali bermaksud model itu betul.

Pengakuan

Ranking sendiri telah mendokumentasikan mode kegagalan: game metrik, burnout, dan publik yang menyamarkan siapa pun yang terakhir. 3 alternatif duduk di sampingnya.

Yang paling ditingkatkan

Diukur berbanding rekod terdahulu rakan sepasukan itu sendiri, tidak sekali-kali berbanding rakan sekerja, dengan pengecutan supaya penyebut yang sangat kecil tidak boleh membeli kemenangan.

Kepiting

Periode yang konsekutif pertemuan periode tetap, dinyatakan bar — rata-rata rating, volume ditangani, jumlah peringkat dan tingkat feedback negatif, semua angka absolut. setiap orang dapat memegang garis beruntun secara bersamaan, sehingga tidak menciptakan peringkat, dan rekan memiliki bulan luar biasa tidak dapat mematahkan Anda.

rangking opt-in

Teman setim selalu melihat indeks mereka sendiri, apakah mereka melihat rekan adalah keputusan ruang kerja. Band percentile dapat diterbitkan bukan posisi absolut.

💡
Pengiktirafan tidak sekali-kali menyentuh wang. Rentetan pencapaian tidak boleh membiayai atau membatalkan sesuatu pembayaran, dan paling banyak peningkatan bukan kategori anugerah.

Misi

Sasaran yang diusahakan oleh pasukan, diukur berdasarkan had tetap yang diisytiharkan dan bukannya dibandingkan antara satu sama lain — jadi semua orang boleh menyelesaikan misi yang sama dalam tempoh yang sama.

Skop dan kade

Individu atau pasukan; sekali sahaja, boleh diulang, atau bermusim dengan tempoh yang jelas.

Kriteria

Perbualan yang dikendalikan, penilaian yang diterima, hari aktif, purata penilaian, atau kadar maklum balas negatif. Semuanya mutlak — tiada metrik yang nilainya bergantung pada apa yang dilakukan oleh rakan sekerja.

Pengawal kualiti

Diperlukan pada mana-mana misi yang mempunyai sasaran jumlah. Mencapai angka itu sementara kualiti jatuh di bawah paras minimum akan menahan misi itu dan bukannya melengkapkannya, dan ia ditunjukkan sebagai ditahan, bukan belum selesai.

Batasan pengulangan

Sebuah topi per-period, didorong oleh kriteria paling lambat, ditambah pendingin opsional sebelum pengulangan dapat menghitung.

Misi pasukan

Kemajuan dikongsi tanpa atribusi bagi setiap ahli pasukan diterbitkan, jadi misi pasukan tidak boleh menjadi papan pendahulu.

Sesi Pelatih Comoros

Sesi bimbingan ialah rekod, bukan sembang. Ia mempunyai jurulatih, rakan sepasukan yang dibimbing, masa yang dijadualkan, perkara perbincangan yang dipersetujui, dan ringkasan yang ditulis selepas itu. Sembang, tiket dan penilaian QA sebenar dilampirkan padanya sebagai bukti, supaya perbualan berpaksikan kerja yang benar-benar berlaku dan bukannya tanggapan yang diingati.

Titik bicara yang tidak benar

Dipersetujui sebelum sesi, supaya rakan sepasukan tidak berdepan dengan kejutan.

Bukti yang telah dipinjam

Sebuah pin menyimpan referensi — jenis dan id — bukan salinan, sehingga selalu menunjuk pada catatan langsung. OpsIQ \"Yahgo\" tidak memverifikasi id sebelum menerimanya.

Barang-barang aksi

Setiap satu mempunyai pemilik dan tarikh akhir. Item yang melepasi tarikhnya ditunjukkan sebagai tertunggak — keadaan terbitan, bukan status yang perlu diingat oleh seseorang untuk ditetapkan.

Catatan pribadi Wadine

Nota peribadi jurulatih. Rakan sepasukan yang dilatih tidak boleh membacanya sama sekali — bukan sebagai ejen, bukan sebagai pengurus, bukan sebagai pemilik. Semakan itu dijalankan sebelum setiap kebenaran lain dan tidak boleh diatasi.

Siapa yang boleh melihat sesi

Jurulatih, rakan sepasukan dan sesiapa sahaja yang mempunyai kebenaran mengurus prestasi pasukan. Tiada orang lain, termasuk rakan sepasukan lain dalam jabatan yang sama.

Audit

Setiap penciptaan, kemas kini, penyematan, nyahsemat dan penyiapan direkodkan dengan apa yang berubah dan oleh siapa.

💡
Bimbingan sengaja diasingkan daripada pemarkahan dan daripada wang. Sesi tidak mengubah indeks sesiapa, tidak mengawal ganjaran, dan tidak muncul pada papan pendahulu.

Upah dan penghargaan

Aktivitas rekaman yang diubah menjadi token dengan nilai tunai yang Anda tetapkan.

1
\"Dia\" \"Memerintahkan nilai token\"

Berapa banyak token bersamaan dengan berapa banyak wang, dan nilai setiap aktiviti.

2
Otorisasi langit-langit yang didanai

Untuk tempoh kalendar yang telah ditutup, pentadbir penuh menyatakan token maksimum yang boleh dibayarnya. Menyimpan borang tetapan tidak membenarkan bajet, dan ia tidak boleh mengubah siling yang telah dibenarkan.

3
Tinjaulah pratinjaunya

Penerima, cadangan, dan alasan siapa pun tidak memenuhi syarat.

4
Kinalkan

Peruntukan direkodkan secara kekal bersama bukti di sebaliknya. Tempoh yang tidak memperuntukkan apa-apa boleh dibatalkan dan dijalankan semula terus. Tempoh yang telah mengeluarkan token mesti dibalikkan dahulu: OpsIQ menulis entri pampasan terhadap setiap dompet dan tidak sekali-kali memadam entri asal, jadi lejar masih menunjukkan apa yang berlaku dan sebabnya, dan hanya selepas itu tempoh tersebut dilepaskan. Pembalikan akan ditolak jika sesiapa telah menunaikan lebih daripada amaun yang sedang dipulihkan, dan ia menamakan siapa dan berapa banyak.

⚠️
Kelayakan memerlukan maklum balas pelanggan yang disahkan. Skor kualiti AI boleh menyokong penilaian itu tetapi tidak pernah menggantikannya, dan ahli pasukan yang ditunjukkan sebagai Tiada Skor tidak layak. Setiap penyumbang dihadkan pada 25% melebihi bahagian jangkaan mereka bagi tempoh itu, jadi satu bulan yang sangat tinggi jumlahnya tidak boleh menyerap seluruh bajet.
💡
Pemilik akaun tidak mengambil bahagian dalam anugerah atau ganjaran token, tanpa suis: mereka membenarkan siling yang dibiayai dan memuktamadkan setiap peruntukan, dan tiada sesiapa di atas mereka untuk meluluskan apa yang akan mereka bayar kepada diri sendiri. Kerja mereka diukur, diberi skor dan disusun kedudukan di papan sama seperti orang lain.

Semua orang lain mengambil bahagian secara lalai, termasuk ketua pasukan dan pemilik bersama. Untuk mengecualikan seseorang, buka profil mereka dalam Pasukan & Jabatan dan matikan pilihan Mengambil bahagian dalam anugerah dan ganjaran. Kerja mereka masih diberi skor dan dipaparkan; mereka tidak lagi menjadi calon mulai saat itu, dan apa-apa yang telah dimuktamadkan tidak disentuh.

⚠️
Tiada sesiapa yang meluluskan wang untuk diri sendiri. Oleh kerana orang yang boleh mengambil bahagian juga merupakan orang yang boleh meluluskan pembayaran, OpsIQ menolak pembayaran atau kredit ke dalam dompet anda sendiri, pembayaran tuntutan anda sendiri, pemuktamadan tempoh yang mana anda akan dibayar, dan pemuktamadan anugerah yang akan anda menangi. Seorang lagi pentadbir penuh atau pemilik mesti melakukannya. Bayar semua tuntutan melangkau tuntutan anda sendiri dan melaporkannya sebagai dilangkau, bukan gagal.

Siapa boleh melihat dan melakukan apa

Lihat prestasi pasukan

Papan, keadaan langsung, kapasiti dan gambaran keseluruhan kualiti bagi ruang kerja.

Urus prestasi pasukan

Sasaran dan pemarkahan, eksport, kad skor dan penilaian QA, bimbingan, misi, dan bacaan yang membawa data yang mengenal pasti rakan sekerja seperti sejarah bagi setiap pentadbir dan sejarah anugerah.

Lihat kewangan ganjaran pasukan

Baki, nilai tunai, nota tuntutan dan rujukan pembayaran — diasingkan daripada bukti prestasi kerana ia berkait rapat dengan gaji.

Hanya administrator penuh yang dapat mengelabui liut

Setiap perubahan wang: membayar ganjaran, membayar atau menolak tuntutan, membenarkan belanjawan, memuktamadkan, membatalkan atau menterbalikkan peruntukan, dan menetapkan kadar token kepada tunai. Ini tidak boleh diwakilkan dengan memberikan kebenaran.

Menggunakannya dengan adil

Indeks prestasi ialah bukti pengurusan, bukan keputusan pekerjaan automatik. Buka perbualan sumber di sebalik sesuatu angka sebelum bertindak berdasarkannya, dan pertimbangkan kerumitan kes, jadual, cuti dan keperluan kebolehcapaian. Satu minggu yang sukar sama sekali tidak sama dengan corak yang berterusan.

Tetapan-peraturan

Laman anda (ruang kerja)

Laman (ruang kerja) membolehkan anda mengurus berbilang laman web daripada satu pemasangan OpsIQ. Setiap satu mempunyai penjejakan, AI, penyambung dan akses pasukannya sendiri.

Laman Web
SitusmuSkrin tapak: senarai ruang kerja, setiap satu dengan domain, jenis, penyambung, lencana status dan butang Buka, serta Tambah tapak baharu.Situsmuruang kerjaSitusmu+ Tambah laman web baharuSshop.acme.comEmerce · Shopify penyambungAktifBukaHhost.acme.comPengehosan · penyambung WHMCSAktifBukaBblog.acme.comKandungan · tiada penyambungTetapkanBuka1MULTI-SITESatu ruang kerja bagi setiap laman web2ISOLATEDData campuran tidak pernah dicampur3PER-SITETetapan & penyambung sendiri
Skrin Laman Web sebenar: setiap laman web ialah ruang kerja terasingnya sendiri (domain, penyambung dan tetapan sendiri), ditambah dan dibuka daripada satu senarai.

Cucase a site

1
Pergi ke Laman Bersambung

Pergi ke Laman yang Disambungkan.

2
Tambah laman baharu

Masukkan nama, domain, dan deskripsi.

3
Salin kunci laman

Setiap laman web mendapat kunci unik (site_xxx) untuk coretan widget.

4
Konfigurasi secara independen

Setiap laman mempunyai AI, penyambung dan tetapannya sendiri.

Berapa banyak laman yang boleh saya miliki?+

Bergantung pada pelan lesen anda. Semak butiran lesen anda.

Tetapan-peraturan

Lesen dan pelan

Lesen OpsIQ anda mengawal ciri, had laman dan baki kredit AI.

Lisensi
Pusat Lisensi Pemegang LesenPusat Lisensi OpsIQ: pelan, lencana status Aktif, kunci lesen yang ditopeng, meter kredit AI dan butang Pemeriksaan-Jarak-Pasak.Pusat Lisensi Pemegang Lesenruang kerjaOpsIQ Pusat Lisensi Pemegang LesenPelanPerniagaanStatusAktifKunciOPSIQ-••••-••••-2F9CAI kredit$68 KiriPeriksa jarak jauh Angkatan Keherah1PLAN & STATUSActive, sekilas2KEYDicache HMAC lokal3CREDITSKeseimbangan AI & batasan AI ficance
Pusat Lesen sebenar: pelan dan status aktif anda, kunci bertopeng, baki kredit AI anda, dan pengesahan semula paksa dengan satu klik.
Kunci Lisensi Pemegang Lesen

Masukkan fía dalam Seting > Lisensi. Disahkan terhadap server lisensi OpsIQ.

Detak jantung Lisensi / validasi

OpsIQ biasanya membaca cache lesen tempatannya yang ditandatangani dan memuat semula pengesahan apabila diperlukan. Gunakan Paksa semakan jauh apabila anda memerlukan keputusan segera; Diagnostik mengenal pasti masalah DNS, HTTPS atau masa pelayan.

Pelan

Menentukan ketersediaan ciri dan had.

Had laman

Jumlah maksimum ruang kerja.

AI kredit

Jika menggunakan Managed AI, baki kredit anda dipaparkan di sini.

Trafik relai panggilan

Panggilan suara, video dan perkongsian skrin yang tidak dapat disambungkan secara langsung melalui relai panggilan OpsIQ. Setiap pelan termasuk trafik relai setiap bulan: Free 50 GB, Launch 200 GB, Growth 250 GB, Business 500 GB, Scale 1,500 GB, Enterprise unlimited. Kebanyakan panggilan disambungkan secara langsung dan tidak menggunakan apa-apa daripadanya.

Kedaluwarsa

Baru kembali sebelum keluar dari gangguan layanan.

Apa yang terjadi ketika SIM-ku habis?+

Penjejakan, tiket dan CRM diteruskan. Ciri AI dijeda sehingga pembaharuan. Data dikekalkan.

Apa yang berlaku apabila trafik relai panggilan saya habis?+

Panggilan terus bersambung; tiada yang dipotong. Pemilik akaun menerima satu notis bulan itu. Kemudian sama ada: beli Pek relai panggilan under Akaun → Add-on (100, 500 atau 2,000 GB ditambah kepada pelan anda setiap bulan), atau biarkan trafik tambahan ditolak daripada kredit anda: pada hujung bulan ia dicaj mengikut GB dan dibayar dahulu daripada kredit akaun, dengan baki yang ada diinvois. Tambah kredit di bawah Akaun → Dompet.

Tetapan-peraturan

Profil, kata laluan dan pengesahan dua faktor

Setiap pentadbir boleh mengurus identiti, keutamaan kerja, kata laluan dan pengesahan dua faktor mereka sendiri.

Skrin produk
Profilku FantafiHalaman profil memisahkan butiran peribadi, bahasa/zon waktu, avatar/tandatangan, kata laluan dan pengesahan dua faktor.Profilku Fantafiruang kerjaPROFILSelesaiTIMEZONEEropa/AthensWHO 2FADiaktifkanORANG KERJA HIDUPNama dan emailIdentitas pribadi identitas pribadiSuntingBahasa dan zona waktu Bahasa dan zon waktuTarikh dan antara mukaSuntingAvatar dan tanda tanganBalasan dan kehadiran pasukanSuntingKata laluan dan 2FAPerlindungan akaunSelamat1UPDATE PROFILEIdentitas dan lokalitas2SECURE LOGINKata laluan dan 2FA3SAVE\"Append\" ke \"admin\" ini
Halaman profil memisahkan butiran peribadi, bahasa/zon waktu, avatar/tandatangan, kata laluan dan pengesahan dua faktor.

Tetapan profil adalah milik pentadbir yang log masuk dan tidak mengubah penjenamaan ruang kerja. Gunakan kata laluan yang unik dan dayakan pengesahan dua faktor. Menukar e-mel atau tetapan pengesahan mungkin memerlukan pengesahan semula atau log masuk baharu.

Tetapan-peraturan

Keutamaan pemberitahuan

Kontrol pengalih perhatian lithan yang acara operasionalnya mencapai administrator dalam produk atau melalui email.

Skrin produk
Keutamaan pemberitahuanHalaman pemberitahuan menyediakan pilihan dalam aplikasi dan e-mel bagi setiap peristiwa serta senarai pemberitahuan terkini.Keutamaan pemberitahuanruang kerjaIN-APPDihidupkanEMAILSelektifUNREAD4ORANG KERJA HIDUPTiket ditugaskanOmail dan in-appDihidupkanPelanggan oscouster menjawabiran-appDihidupkanRisiko SLA physicalOmail dan in-appDihidupkanPersetujuan AIOmail dan in-appDihidupkan1CHOOSE EVENTSHanya sinyal berguna dari jenis2CHOOSE CHANNELA-app atau email3YABATpemberitahuan baru-baru ini tidak ada
Halaman pemberitahuan menyediakan pilihan dalam aplikasi dan e-mel bagi setiap peristiwa serta senarai pemberitahuan terkini.

Keutamaan ifrica meliputi penugasan tiket, balasan pelanggan, peringatan SLA, acara persetujuan chat handoff dan AI. Tetap aktifkan sinyal operasional mendesak di suatu tempat; mematikan email tidak selalu mematikan pemberitahuan in-app.

Tetapan-peraturan

Gambaran keseluruhan keselamatan

Gambaran Keseluruhan Keselamatan ialah skrin pertama untuk menilai sekatan, serangan log masuk, sesi ancaman, trend keselamatan dan integriti peristiwa.

Skrin produk
Gambaran keseluruhan keselamatanGambaran Keseluruhan Keselamatan menggabungkan kad risiko semasa, trend 14 hari, senarai penyerang, suapan peristiwa dan status integriti.Gambaran keseluruhan keselamatanruang kerjaACTIVE BLOCKS18FAILED LOGINS42HIGH THREAT3ORANG KERJA HIDUPDisekat secara automatik7Total dan sumber hari -hariTrendonPenyerang yang paling anehIP, negara dan alasanUlasanPeristiwa keselamatanRisiko dan akibat tindakanSuapanIntegritas rantai Hash-chainrantai peristiwa yang sangat terkenalKesahihan1READ HEADLINEPendedahan semasa2OPEN EVIDENCESerangan dan peristiwa3AKTSekat, siasat, eksport
Gambaran Keseluruhan Keselamatan menggabungkan kad risiko semasa, trend 14 hari, senarai penyerang, suapan peristiwa dan status integriti.

Gunakan kad utama untuk triaj, kemudian buka halaman Audit, Log Masuk Gagal, IP Disekat atau Ralat JavaScript yang berkaitan untuk kerja di peringkat rekod. Trend 14 hari lebih berguna daripada satu lonjakan tunggal. Sesi berancaman tinggi perlu disiasat berdasarkan bukti pelawat, permintaan dan pengesahan sebelum sekatan kekal dikenakan.

Tetapan-peraturan

Log audit Tamper-terkenal

Log audit merekodkan siapa melakukan apa, bila, kepada objek mana, pada tahap risiko apa dan sama ada ia berjaya.

Skrin produk
Audit aktivitasHalaman audit audio menyediakan kegiatan vendor-evident yang dapat dicari dengan tindakan, aktor, risiko, target dan hasil.Audit aktivitasruang kerjaKEPADA18.2kHIGH RISK21INTEGRITYKesahihanORANG KERJA HIDUPPenyambung didayakanadmin@example.com · ShopifySuksesKunci API dibatalkanowner@example.com · key 19SuksesTetapan diubahadmin@example.com · AISuksesHak Akses ditolakagent@example.com · exportDiblokir1FILTERAksi, risiko dan aktor2KECILTarget dan hasil3EXPORTCSV OR atau ORANG JSON
Halaman audit audio menyediakan kegiatan vendor-evident yang dapat dicari dengan tindakan, aktor, risiko, target dan hasil.

Tapis mengikut tindakan, risiko dan pelaku; eksport CSV atau JSON untuk siasatan. Rantaian cincang membantu mengesan baris audit yang hilang atau diubah, tetapi ia tidak menggantikan sandaran yang dilindungi dan akses pangkalan data yang terhad. Anggap eksport audit sebagai sensitif kerana ia mungkin mengenal pasti pengguna, rekod dan tindakan keselamatan.

Operasi

Diagnostik Diagnosis

Diagnostik gnosis diagnosis mengubah pemeriksaan subsistem menjadi hasil kesehatan biasa-Inggris dan tindakan selanjutnya langsung.

Skrin produk
Diagnostik DiagnosisDiagnostik mengumpul pemeriksaan kesihatan bagi widget, AI, tiket, integrasi, Kecerdasan Laman, tugas latarbelakang, automasi CRM, lesen dan storan.Diagnostik Diagnosisruang kerjaSEHAT13WARNING2GAGAL1ORANG KERJA HIDUPWidgetDi titik akhir chatKesehatan_Latar BelakangDetak jantung Cron terlambatPeringatan AmuniaE-melGagal uji OutboundGagalPenyambungPendaftar dan asupan peristiwaKesehatan1REFRESHJalankan semakan semasa2OPEN WARNINGBukti Bacaan Aaa3FIX AND RETEST\"Operasi pemulihan\"
Diagnostik mengumpul pemeriksaan kesihatan bagi widget, AI, tiket, integrasi, Kecerdasan Laman, tugas latarbelakang, automasi CRM, lesen dan storan.

Halaman menyemak Kelajuan Laman, kedudukan/kata kunci/pautan balik/data setempat, AI dan gerbang tindakan, tiket, crawler/audits, integrasi/penerimaan peristiwa, tugas latarbelakang, automasi CRM, lesen, widget dan perkhidmatan produk berkaitan. Ia melaporkan sebab boleh dibaca oleh operator dengan sengaja daripada mendedahkan rahsia mentah.

Selepas sesuatu perubahan, Muat Semula dan sahkan bahawa subsistem yang terjejas kembali sihat. Halaman diagnostik yang hijau adalah perlu tetapi tidak mencukupi untuk pelancaran; lengkapkan juga Senarai semak pra-pelancaran.

Tetapan-peraturan

Keselamatan dan akses

OpsIQ merangkumi pelbagai lapisan keselamatan untuk melindungi akses pentadbir, data dan API anda.

Bagaimana cara kerjanya
Keselamatan dan aksesPerisai keselamatan di sebelah kawalan yang didayakan: dua faktor, OIDC SSO, SCIM 2.0, OAuth2 PKCE, CSRF/CSP, tembok api IP, had kadar dan peti besi rahsia.Faktor-Dua-Fakta (TOTP)SSO OIDCSCIM 2.0AAbe OAuth2 PKCEcinemascore-formatIPfirewallBatasan kadar laklakPeti besi rahasia
Keselamatan

Ciri keselamatan

Otentikasi admin

E-mel/kata laluan dengan 2FA pilihan.

Log masuk lockout

Kunci sementara selepas terlalu banyak percubaan yang gagal.

IP pemblokiran tanpa alasan

Sekat IP atau julat CIDR daripada mengakses laman yang dijejak.

Ancaman skoring

Skor ancaman berasaskan tingkah laku. Pelawat berancaman tinggi boleh disekat secara automatik.

Penegakan HTTPS

LUC untuk semua koneksi. HTTP dialihkan ke HTTPS.

HSTS header

Strict-Transport-Security menghalang serangan penurunan taraf.

Pemeliharaan CSRF

Semua formulir admin dari pihak-pihak yang ada termasuk token CSRF.

Perlindungan XSS

Semua input pengguna telah lolos. header CSP membatasi eksekusi skrip.

Perlindungan SSRF

Outbound webhooks blok pribadi/internal IP alamat.

Persediaan saran

1
Hidupkan 2FA

Untuk semua akaun pentadbir.

2
Kata laluan yang kukuh

Karakter 12 Minimum, campuran.

3
Catatan - catatan harian

Tarik balik akses bekas ahli pasukan.

4
Monitor logmasuk gagal

Periksa mingguan untuk pola mencurigakan.

5
Tetap kabari

Gunakan kemas kini dengan segera untuk tampalan keselamatan.

Tetapan-peraturan

Peranan dan hak

Kawalan Akses Berasaskan Peranan membolehkan anda mengawal perkara yang boleh dilakukan oleh setiap ahli pasukan.

Perizinan & Peranan
Peranan dan hakMatriks peranan mengikut keupayaan: Pemilik mempunyai segala-galanya; Pentadbir Penuh tidak mempunyai pengebilan dan zon bahaya; Ejen hanya mempunyai tiket berskop.Perizinan & Perananruang kerjaTEMANINGGRISBAHAYAKECIL TICKETPemilikAdmin PenuhAgenscoped13 ROLESKepemilikan · Admin Penuh · Agen2GRANULARPer-halaman + per-per-pembagianan3DEFAULT-DENYRute yang diblokir
Matriks peranan secara ringkas: Pemilik mendapat segala-galanya, Pentadbir Penuh segala-galanya kecuali pengebilan dan zon bahaya, Ejen hanya tiket dalam skop mereka.

Peranan bawaan

Pemilik

Semuanya termasuk lisensi, zona bahaya, dan manajemen instalasi.

Admin Penuh

Semuanya kecuali lisensi dan zona bahaya.

Agen

Kesaksian untuk memberi surat tilang dan chat, melihat analitik.

Bolehkah saya mencipta peranan tersuai?+

Tidak sekarang, tiga peran dalam bangunan ditambah tugas departemen memberikan kontrol granular.

Tetapan-peraturan

IPs dihalang

Manage IP Alamat-alamat yang diblokir untuk mengakses situsmu.

IPs dihalang
IPs dihalangSkrin IP yang disekat: borang sekat IP/CIDR di sebelah jadual Alamat Disekat dengan setiap entri, tarikh, sebab dan butang Nyahsekat.IPs dihalangruang kerjaAndika_f sebuah IP / CIDR203.0.113.0/24Alasan (opsional)BlokirAlamat - alamat yang diblokir203.0.113.9Jun 12 · paksaan kasarTidak boleh diblokir45.12.0.0/16Jun 10 · spamTidak boleh diblokir102.89.6.2Jun 9 · penyalahgunaanTidak boleh diblokir1BLOKIP jangkauan CODI atau CIDR2LISTSiapa yang & ketika, dengan alasan3UNBLOCKSatu klik
The real Blocked IPs screen: block a single IP atau julat CIDR, dan uruskan senarai, masing-masing dengan tarikhnya, sebab dan satu klik nyahhalang.

Bagaimana untuk memblokir

1
Pergi ke Keselamatan > IP Disekat

2
Tambah IP atau jangkauan CIDR

Contoh: 203.0.113.42 OR atau ORANG 203.0.113.0/24

3
** Tambahkan alasan **

Dokumen mengapa: spam, penyalahgunaan, penggusuran, dll.

Apakah pemblokiran akan mempengaruhi pengguna yang sah?+

Jika pelanggan berkongsi IP korporat atau VPN, menyekat IP itu akan menyekat semua orang yang menggunakannya. Gunakan sekatan yang sempit.

Tetapan-peraturan

Gagal log masuk

Semua percobaan login tak sukses ke OpsIQ admin anda.

Gagal log masuk
Gagal log masukSkrin log masuk gagal: jadual akaun/IP dengan bilangan kegagalan, masa cubaan terakhir, dan butang Sekat pada setiap baris.Gagal log masukruang kerjaGagal login percobaanCOUNT ACCOUNT / IPGAGALAYATTINDAKANadmin@acme.com · 41.62.10.472m yang laluBlokirkojo@acme.com · 102.89.6.2318m yang laluBlokirParameter · 45.12.9.7_ tidak diketahui1226 minit yang laluBlokirsam@acme.com · 88.21.4.921h Aa laluBlokir1WATCHGagal login percobaan2COUNTSSetiap akaun / IP3AKTBlok africane dari baris
Skrin Log masuk gagal yang sebenar: setiap akaun/IP dengan bilangan kegagalan dan cubaan terakhirnya, sekat sumber serangan kekerasan terus dari baris itu.

Apa yang ditunjukkan oleh setiap entri

Tarikh/waktu

Ketika percobaan itu terjadi.

E-mel

Alamat Email yang digunakan.

IP Alamat

Sumber percobaan.

Negara

Lokasi Geografis.

Alasan

Kata laluan salah, dikunci, atau tidak ditemui.

Tanda-tanda peringatan anyword

Banyak upaya, email yang sama

Meneka kata laluan. Pastikan 2FA didayakan.

Banyak percubaan, e-mel berbeza

Serangan automatik. Sekat IP sumber.

Negara - negara yang tidak asing

Jika pasukan anda berada di dalam negara, cubaan dari luar negara berkemungkinan serangan.

Tetapan-peraturan

Analisis keselamatan AI

Lapisan penganalisis pilihan di atas halaman Keselamatan: keputusan, ringkasan insiden, ringkasan harian, semakan postur mingguan, Ask Security, dan dasar sekatan 0 token. Ia tidak sekali-kali berjalan dalam laluan permintaan pelawat.

Setiap halaman Keselamatan merekodkan apa yang berlaku, tetapi membacanya masih memerlukan pertimbangan. Penganalisis keselamatan AI menambah pertimbangan itu di tempatnya, dan ia dibina untuk berbelanja hampir tiada apa-apa: ia tidak pernah berada dalam laluan beacon atau log masuk, peraturan deterministik menyelesaikan kes yang jelas tanpa panggilan AI, keputusan dicache, dan hasil terbaik penganalisis ialah peraturan deterministik yang kemudiannya menguatkuasakan selama-lamanya dengan sifar token. Hidupkan ciri dalam Tetapan → KeselamatanSemua default off.

Apa yang ditambahkan

Chip Verdict kinerja + Jelaskan

Diblokir IPs Baris Log Masuk Gagal dan Gagal menunjukkan sebuah chip / mencurigakan / bermusuhan dengan skor kepercayaan. Jelaskan membuka penalaran, fakta yang digunakan, dan satu-klik aksi Block / Release. 24h, jadi meninjau kembali sebuah IPKau bebas.

Catatan singkat Insiden

Peristiwa terkait cluster menjadi satu insiden (gelombang login, URL Scan, auto-block burst) dengan garis waktu Inggris polos dan satu langkah berikutnya yang disarankan. serangan berlangsung lipat ke insiden yang sama.

Harian nerge

Satu ringkasan sehari: semalam berbanding garis dasar anda, sekatan, insiden, dan satu perkara yang perlu dilakukan. Hari yang tenang menghantar notis semua-selamat yang deterministik dengan sifar token.

Pemeriksaan postur Mingguan Speak

Hari Senin, daftar cek hardening (2FA gap, ambang kunci melawan volume serangan nyata, waspada) dengan keparahan, upaya dan tepat memperbaiki per item.

Tanya Keselamatan

Kotak soalan pada Gambaran Keseluruhan Keselamatan yang menjawab berdasarkan keadaan keselamatan langsung anda. Soalan pelayan yang mendalam diserahkan kepada sembang jurutera admin dan bukannya diteka.

Usul dasar + autopilot

Penganalisis mencadangkan peraturan sekatan yang konkrit sebagai kad Approve / Dismiss; peraturan yang diluluskan dikuatkuasakan tanpa token dengan pembilang padanan secara langsung. Autopilot pilihan hanya meluluskan peraturan yang paling selamat secara automatik.

Tetapan-peraturan

Analisis keselamatan AI (security_ai_enabled)

Suis utama. Mendayakan cip keputusan, Explain dan Ask Security. Hanya IP yang tidak jelas sampai kepada model, dikumpulkan dalam satu panggilan.

Ringkasan insiden (security_ai_incidents)

Kami menemukan kejadian ke insiden dan menulis setiap cerita baru.

Ringkasan harian (security_ai_digest)

Satu ringkasan keselamatan setiap hari pada loceng dan Gambaran Keseluruhan. Hari yang tenang tidak dikenakan apa-apa kos.

Semakan postur mingguan (security_ai_posture)

Hari Senin hari Senin, hardening daftar cek di Overview.

Autopilot polisi (security_ai_autopilot)

Biar analis mengaktifkan proposal teramannya tanpa pengawasan: blok batas waktu yang dapat dikembalikan hanya, tunggal IPs Wadikasi atau jangkauan tidak lebih lebar dari /24, Tidak pernah berbagi/mobile/private, capped 10 Setiap jam, selalu diaudit dan dibatalkan.

💡
Setiap panggilan ditag security_ai dengan had bulanannya sendiri dalam Konfigurasi AI → Kawalan Kos (lalai 300k token). Jika had dicapai, ciri merosot kepada bacaan deterministik. Sekatan, penguncian dan makluman tidak pernah bergantung pada belanjawan ini. Penganalisis tidak boleh sekali-kali memadam data, menukar tetapan, menyentuh lejar audit atau membuat larangan kekal.
Operasi

Otomasi dan automasi

OpsIQ menggunakan satu penjadual produk untuk menjalankan semakan berkala e-mel, automasi tiket, ringkasan analitik, penyimpanan, baris gilir AI, kerja CRM, laporan dan tugas penyambung.

Skrin produk
Otomasi dan automasiSatu produk cron masuk persediaan detak jantung; OpsIQ memutuskan pekerjaan internal mana yang jatuh tempo.Otomasi dan automasipelayanTERHEBASetiap minitRUNNERcron/all.phpHEALTHTetapan-peraturanORANG KERJA HIDUPRetrief produk Unifiedopsiq/cron/all.phpDiperlukanTiket dan antrian emailPekerjaan berjadwal singkat untuk tahunAktifAnalisis dan retensiKagen dalamanJadwalPelanggan penyambungKejadian cron yang dinyatakan kronSkop1INSTALL ONE LINE\"Larikan jadwal produk setiap menitnya\"2CHECK CRON SETUPKonfirmasi detak jantung CLI3USE DIAGNOSTICSDiinvestigasi terlambat atau gagal bekerja
Satu produk cron masuk persediaan detak jantung; OpsIQ memutuskan pekerjaan internal mana yang jatuh tempo.

Kemasukan cron produk diperlukan

Adonan Tambahkan baris tunggal ini ke crontab untuk lingkungan server dan PHP yang sama dengan yang menjalankan OpsIQ_:

OpsIQ produk masukan crontab
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1

Ganti /path/to/opsiq Guna jalur PHP CLI penuh ketika host memerlukan satu, misalnya /usr/bin/php8.4.

Jangan gunakan level atas /cron.php untuk kerja produk. Di dalam repositori ini, pelari adalah milik layanan non-produk terpisah di luar buku panduan ini. Pelari produk OpsIQ adalah opsiq/cron/all.php.

Apa yang dikandadakan oleh penjadwal terpadu

Tiket dan antrian AI

Proses-proses processes due auto-replies, eskalasi, persetujuan dan pekerjaan produk antrian lainnya.

Email tidak masuk akal

jajak pendapat yang dikonfigurasi kotak surat di mana pemungutan suara adalah metode asupan terpilih.

Analisis dan sesi

Sesi Assembles zodiore dan menyegarkan agregat yang dijadwalkan saat mereka jatuh tempo.

CRM Tunangan dan pertunangan

Menjalankan tugas pemarkahan, kitaran hayat, aliran kerja, kempen dan laporan berjadual yang didayakan.

Retensi dan pemeliharaan

¡ACH melakukan pembersihan, arsip, ekspiri dan pekerjaan integritas.

Penyambung

Menghantar pelanggan cron penyambung dan tinjauan berkala hanya untuk penyambung yang dipasang, didayakan dan dikonfigurasi.

Sidik sirna tentusah cron

  1. Buka Tetapan - Persediaan Cron dan sahkan bahawa pelari produk wujud.
  2. Guna Jalankan sekarang sekali, kemudian sahkan bahawa denyutan pentadbir dan tinjauan berkala dikemas kini.
  3. Periksa Diagnostik Diagnosis Untuk detak jantung yang terlambat, PHP CLI, database atau masalah file-path.
  4. Periksa /tmp/opsiq-cron.log Áin atau jalur log yang Anda pilih ketika sebuah manual dijalankan gagal.

Jaga penyambung tetap handler pendek, idempoten dan ruang kerja-discoped. Batch panjang sinkronisasi dan simpan kursor/checkpoint sehingga selanjutnya dapat berjalan dengan aman.

🚫
Apabila cron produk berhenti, kerja OpsIQ berasaskan masa berhenti atau menjadi lewat walaupun halaman pentadbir biasa mungkin masih dimuatkan.
Operasi

Operasi penempatan tercanggih diherankan

Penggunaan OpsIQ yang dihoskan menggunakan skrin dan aliran kerja produk yang sama sementara pengendali pengehosan mengurus lapisan pelayan. Prosedur pendaftaran komersial, pelan, pengebilan dan portal akaun berada di luar buku panduan ini.

Skrin produk
Pasukan bayaran yang ditabuhPerubahan operasi yang dilakukan oleh pengguna yang menjaga infrastruktur; tidak mengubah bagaimana pelanggan menggunakan OpsIQ.Pasukan bayaran yang ditabuhruang kerjaPRODUCT UISameNomma OpsIQINFRASTRUCTUREOperator-diurusWORKSPACE DATATerisolasiORANG KERJA HIDUPWaktu jalan Aplikasi UisonPHP, web server dan basis dataDiurus oleh mustahilKuntum ProdukDijadwalkan oleh operator hostingTentusahkan secara pastiupdate dan bala bantuanDasar dan bukti penyediaUlasanTetapan OpsIQ _fizTapak, AI, pasukan dan penyambungTimmu1OPERATE OPSIQ NORMALLYUsir navigasi produk yang sama2VERIFY SERVICE HEALTHDiagnostik dan bukti status3KNOW RESPONSIBILITYAsingkan tetapan produk daripada kerja pengehosan
Perubahan operasi yang dilakukan oleh pengguna yang menjaga infrastruktur; tidak mengubah bagaimana pelanggan menggunakan OpsIQ.

Perkara yang biasanya diurus oleh pengendali hosting

  • Server web, waktu jalan PHP, layanan basis data, TLS dan penyimpanan.
  • Cron produk yang disatukan dan log tahap-pelayannya.
  • Pemutakhiran aplikasi, pemantauan infrastruktur dan proses backup yang didefinisikan oleh perjanjian hosting.

Perkara yang masih diurus oleh pentadbir OpsIQ

  • Laman web dan pemasangan widget, tetapan AI, pengetahuan, peti mel dan aliran kerja sokongan pelanggan.
  • Akses pasukan, jabatan, kawalan keselamatan, kunci API, penyambung, automasi dan tetapan pengekalan data.
  • Pengesahan produk melalui Diagnostik, log audit, ujian penyambung dan semakan hujung ke hujung sebenar.

Pemeriksaan operasi

Jangan anggap bahawa perkhidmatan terurus bermakna setiap integrasi produk berada dalam keadaan baik. Sahkan bukti sandaran terkini dan dasar pengekalan dengan pengendali pengehosan, dan gunakan OpsIQ Diagnostics selepas perubahan pada DNS, e-mel, pembekal AI, laman web atau penyambung.

Bahagian ini merangkumi operasi produk sahaja. Orientasi komersial, langganan, pengebilan dan pentadbiran akaun pelanggan kekal di luar buku panduan OpsIQ.

Operasi

Memandu-kendiri OpsIQ

Pemasangan OpsIQ yang dihos sendiri berjalan pada infrastruktur yang anda kawal. Anda bertanggungjawab ke atas masa jalan, pangkalan data, TLS, cron produk, sandaran, kemas kini dan pemantauan.

Skrin produk
Memhosting diri sendiriHos sendiri memberikan kawalan infrastruktur dan menjadikan pasukan anda bertanggungjawab ke atas setiap kebergantungan operasi.Memhosting diri sendiripelayanPHP8.4+DATABASEMySQL 5.7+SCHEDULERSetiap minitORANG KERJA HIDUPEkstensi waktu jalancurling, pdo_mysql, mbstring, json_DiperlukanSambungan tambahanxml, opensl, zip, intl, gdDiperlukanalternatif pangkalan data beraliran NafiqMariaDB 10.3 Çižibi + dengan InnoDBDidukungTransportasiCOMBIL HTTPS dan akses penyedia outboundTentusahkan secara pasti1PREPARE THE SERVERKeperluan waktu jalan yang sesuai dengan kepantasan2INSTALL AND CONFIGUREUse a fudted database and HTTPS3ADD PRODUCT CRON/Dialog/jalankan opsiq_/cron/all. php
Hos sendiri memberikan kawalan infrastruktur dan menjadikan pasukan anda bertanggungjawab ke atas setiap kebergantungan operasi.

Kontrak perisian minimum

PHP

PHP 8.4 atau lebih baru. Sambungan yang diperlukan: curl, pdo_mysql, mbstring, json, xml, openssl, zip, intl dan gd.

Pangkalan Data Database

MySQL 5.7 atau MariaDB 10.3+ menggunakan InnoDB. Cipta pangkalan data khusus dan pengguna aplikasi paling kurang hak istimewanya.

Server web

Apache atau Nginx dikonfigurasi untuk controller depan OpsIQ, aset statik dan diperlukan penulisan ulang.

HTTP

Keperluan untuk sesi admin, lalu lintas widget, kunci API, webhooks dan panggilan penyedia.

Akses Outbound

Benarkan akses DNS dan HTTPS kepada titik akhir AI, e-mel, penyambung dan lesen yang benar-benar anda dayakan.

Akses fail

Pengguna web dan CLI mesti boleh membaca fail aplikasi dan menulis hanya ke lokasi masa jalan/storan yang didokumenkan.

Kron

Jalankan penjadual produk OpsIQ setiap minit dengan konfigurasi aplikasi dan akses pangkalan data yang sama seperti proses web.

Urutan pemasangan coran

  1. Muat naik rilis ke akar dokumen yang ditujukan dan jaga struktur direktori yang diberikan.
  2. Cipta pangkalan data dan pengguna aplikasi, kemudian masukkan tetapan pangkalan data, URL kanonik dan lesen.
  3. Jalankan aliran pemasang/persediaan dan cipta akaun pemilik yang pertama.
  4. Benarkan HTTPS dan verifikasi arah semula, kuki dan widget publik/API jalur.
  5. Add-dand gabungan OpsIQ produk cron:
Cron produk berhantu sendiri
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1
  1. Buka Tetapan - Persediaan dan Diagnostik Cron; jalankan penjadual sekali dan selesaikan setiap kebergantungan yang gagal.
  2. Konfigurasikan sandaran, ujian pemulihan, pengekalan log dan prosedur kemas kini sebelum menambah data pengeluaran.

Mengemaskini dengan selamat

  1. Membaca nota rilis dan memeriksa PHP/extensies yang diperlukan sebelum mengubah berkas.
  2. Back up database dan berkas aplikasi/konfigurasi, kemudian membuktikan backup dapat dipulihkan di lokasi tes.
  3. Gunakan fail baharu tanpa memadam konfigurasi khusus pemasangan atau data masa jalan.
  4. Untuk menjalankan proses migrasi/perbaikan yang diberikan dan verifikasi log masuk, pelacakan widget, tiket, email, AI, penyambung dan cron.
  5. ¡Keep the first release and database backup sebelumnya tersedia untuk jendela rollback dokumentasi.
🚫
/cron.php di peringkat atas repositori bukan penjadual produk OpsIQ. Halakan automasi produk hanya kepada opsiq/cron/all.php.
⚠️
Jangan padam .schema_cache.json sebagai penyelenggaraan rutin. Alih keluarnya hanya apabila arahan produk secara jelas memerlukan pembinaan semula cache skema.
Operasi

Panduan pengeluaran

Daftar cek dan praktik terbaik untuk menjalankan OpsIQ dalam produksi.

Panduan pengeluaran
Panduan pengeluaranSenarai semak sebelum mula beroperasi: domain tersuai dan SSL, AI dilatih, penyambung dan cron, sandaran dan pengekalan, serta peranan pasukan.Daftar cek hidup-goruang kerjaSebelum kau hidupDomain suai + SSL dikonfigurAI dilatih pada kandungan andaPenyambung diuji · cron berjalanSandar Cadangan dijadwalkan · retensi setPeranan pasukan diberikan & disemak1GO-LIVEDaftar cek pra-launch2KETAHUIDomain · SSL · backup3CONFIDENTKapal ketika hijau
Senarai semak sebelum pelancaran supaya tiada apa yang terlepas: domain + SSL, AI yang terlatih, penyambung dan cron yang diuji, sandaran dan pengekalan, serta peranan pasukan.

Sebelum pergi langsung

domain terkonfigur

SSL terpasang, pengalihan HTTP, HSTS diaktifkan.

Caron berjalan

Pastikan melalui halaman diagnostik.

AIoidel diuji

Bicara sebagai pelanggan, tentu saja akurasi dan nada.

Widget dipasang

Di semua halaman website, pastikan dengan Live Feed.

Konfigurasi reksadana

Diotomasi database harian dan file backup.

Pengelogan kesalahan code

Log ralat PHP dihidupkan dan dipantau.

Pasukan dijemput

Semua ahli mempunyai akaun dengan peranan yang betul.

Pangkalan pengetahuan telah diisi

Setidaknya 5-10 Artikel luar biasa.

Harian: Semak papan pemuka, kosongkan baris gilir tiket, buat semakan rambang perbualan AI.

Mingguan: Semak AI Insights, kemas kini pangkalan pengetahuan, semak prestasi pasukan, semak keselamatan.

Bulanan: Semak trend analitik, audit penyambung, kemas kini latihan AI, sahkan sandaran.

Operasi

Daftar cek pra-launch

Jalankan pintu semakan sumber dan selesaikan semakan produk sebenar sebelum keluaran atau pelancaran pengeluaran pertama. Arahan yang tersedia bukanlah bukti bahawa ia telah lulus dalam persekitaran anda.

Skrin produk
Verifikasi Melepas Melepaskan MelepasPaparan keluaran menunjukkan get wajib yang perlu dijalankan; ia tidak melabelkannya sebagai lulus terlebih dahulu.Verifikasi Melepas Melepaskan MelepaspelayanRUNTIMPHP PHP 8.4SOURCE GATESsetempatOUTCOMEBerdasarkan buktiORANG KERJA HIDUPSambungan yang diperlukanPeriksalah di depan kamar suiteGerbang LUPembersihan sintaks PHPProjek/CiriGerbang LUPenilaian AI dan PHPUnitJalankan ketika dependensi hadirGerbang LUPemeriksaan Statik dan perambanNameGerbang LU1RUN THE CHECKSSi Tangkap output sebenarnya2FIX EVERY REQUIRED FAILUREJangan mengganti bukti dengan asumsi3TEST THE PRODUCTSahkan perjalanan pengguna nyata
Paparan keluaran menunjukkan get wajib yang perlu dijalankan; ia tidak melabelkannya sebagai lulus terlebih dahulu.

Sumber dan gerbang pembebasan

Jalankan pemeriksaan repositori dari akar instalasi dan tetap simpan keluaran lengkap mereka dengan catatan rilis.

Gerbang utama penerbangan perdana di kota ini
php tools/preflight.php
Gerbang pembebasan yang diperluas
php tools/release_gate.php

Semakan pralepas menyemak masa jalan PHP 8.4 dan sambungan yang diperlukan, melakukan sapuan sintaks PHP, menjalankan get penghantaran penilaian AI dan suite PHPUnit penuh, serta menjalankan semakan PHPStan/Node apabila alat tersebut dipasang. Get lanjutan juga merangkumi semakan asap, pemasangan bersih/skema dan hujung ke hujung pelayar apabila persekitarannya dikonfigurasi.

Cek yang dilewatkan bukanlah pass. Rekam mengapa tidak tersedia, pasang dependensi yang hilang atau jalankan dalam lingkungan CI/staging yang benar sebelum rilis.

Periksaan produk

1Autentifikasi dan peran

Tanda tangan dalam sebagai masing-masing peran yang dimaksudkan; sahkan halaman/tindakan yang diizinkan dan ditolak.

2Widget dan pelacakan

Muatkan laman web sebenar dalam pelayar peribadi; sahkan trafik beacon, Live Feed, rekod pelawat dan sesi.

3Chat dan AI

Tanya soalan yang mewakili; sahkan asas pengetahuan, keselamatan, eskalasi dan sejarah AI.

Tiket4.

Ciptakan, umpuk, balas, eskalasi, tutup dan buka kembali melalui setiap jalur masuk yang diaktifkan.

5Email

Uji penghantaran keluar dan setiap kotak mel masuk yang dikonfigur atau laluan webhook.

6. CRM dan analitik

¡Abnu membuat kontak/deal/conversion terkontrol dan memverifikasi dashboard, corong, mencetak dan laporan.

7. Penyambung

Jalankan tes sambungan, satu baca, satu write/dry aman jalankan dan jalur webhook/polling untuk setiap penyambung yang diaktifkan.

8. API Ogo dan webhooks

Skop yang sangat sempit, batas tingkat, retries idempoten, tanda tangan dan penanganan duplikat.

9Cron

Diakontrol penjadwal produk terpadu dan mengkonfirmasi semua detak jantung yang diperlukan dalam Cron Setup/Diagnostik.

10. Keselamatan

Overifikasi 2FA, kontrol CSRF/session, entri audit, pembatalan kunci dan isolasi ruang kerja.

11 Bantuan dan pemulihan

Ogoshima Pulihkan backup arus ke dalam lingkungan uji terpisah dan verifikasi data dan konfigurasi.

12 Kewaspadaan dan rollback

Sahkan log/pemakluman, simpan ID permintaan dan buktikan prosedur rollback.

⚠️
Lancarkan hanya selepas setiap get wajib dan perjalanan kritikal perniagaan mempunyai bukti terkini untuk keluaran dan persekitaran yang tepat.
Pembangun

Web Push pada laman web pihak ketiga

Pemberitahuan tolak pelayar (termasuk OpsIQ Push Campaigns) memerlukan service worker yang disajikan daripada ASAL YANG SAMA dengan halaman. Widget OpsIQ dimuatkan daripada penggunaan OpsIQ anda, jadi laman pihak ketiga tidak boleh mendaftarkan worker OpsIQ secara terus. Hos satu fail kecil pada domain laman itu sendiri untuk mendayakan tolak di sana. Kempen dihantar melalui KEDUA-DUA kaedah yang disokong.

Bagaimana cara kerjanya
Dorongan Web vinakPemberitahuan push gaya OS di atas dua kad: push pelawat di tapak anda dan amaran ejen pada peranti pasukan anda.TokomuJurusmu sedang menunggu · 10% Hari ini hari liburSekarangDalaman Dalam/Batas (VAPID)Tidak ada pihak ketigaSatu berkas host milik kapalAmaran ejenPeranti pasukan andaTiada apa-apa untuk disediakan
Dorongan Web vinak

Mengapa ini diperlukan

Pelayar hanya membenarkan halaman mendaftarkan service worker daripada asalnya sendiri. Widget dimuatkan merentas asal daripada pemasangan OpsIQ anda, jadi ia tidak boleh memasang pekerja tolak pada laman web pelanggan; sehingga anda mengehoskan pekerja itu pada asal laman web tersebut, widget akan melangkau tolak secara senyap (tiada ralat, tiada langganan). Anda mempunyai dua pilihan di bawah; OpsIQ Push Campaigns menerbitkan melalui kedua-duanya.

Sediakan push pada tapak web anda

1. Muaturun pekerja dari OpsIQ _Puisi: https://YOUR-OPSIQ/opsiq/opsiq-push-sw.js

2. Muat naiknya ke akar web kinetik supaya ia boleh dicapai di https://yoursite.com/opsiq-push-sw.jsWidget auto-deteksi jalan ini UDANG pada halaman asal dan mendaftarkannya sendiri, tidak ada perubahan snippet yang diperlukan. (It menggunakan skop sempit, sehingga tidak pernah menggantikan pekerja layanan yang sudah Anda jalankan.)

Pilihan: jika anda perlu mengehoskannya pada laluan yang bukan standard, halakan widget kepadanya ore snippet. Hanya diterima ketika origin-sama:

FOGAL pilihanonal · hanya jika file TIDAK di akar web
<script>window.OpsIQ=window.OpsIQ||{};window.OpsIQ.pushSwUrl="/custom/opsiq-push-sw.js";</script>

3. Tiada yang lain. OpsIQ mencipta kunci push sendiri kali pertama push digunakan; widget kemudian meminta kebenaran pemberitahuan daripada pelawat dan melanggan mereka.

Dibalik CDN/Cloudflare Memastikan /opsiq-push-sw.js mengembalikan HTTP 200 (kosongkan cache jika ia adalah 404 sebelum anda muat naik; cache 404 akan menghalang pendaftaran).

Cara push dihantar

OpsIQ menghantar setiap push sendiri, dienkrip dengan Web Push standard: tiada perkhidmatan pihak ketiga dan tiada kos setiap mesej. Pasukan anda menerima jenis amaran yang sama pada peranti mereka sendiri apabila pelanggan menulis semasa peti masuk ditutup (Tetapan → Sembang Pelanggan → Lanjutan → Pemberitahuan Push).

Perlu HTTPS patif untuk service worker dan Web Push (localhost dikecualikan untuk ujian).

Operasi

Pencarian Masalah

Masalah umum dan bagaimana memperbaikinya.

Umum

Laman kosong+

Log galat PHP Periksa log galat PHL. Penyebab: PHP lama (perlu 8.4+), ekstensi hilang, sambungan DB gagal, izin berkas salah.

Papan dash menunjukkan nol+

Semak: widget dipasang? Cron berjalan? Julat tarikh betul? IP dikecualikan?

AIAI

AI tidak menjawab+

Periksa: provider dikonfigurasi? API kunci valid (gunakan sambungan Uji)? Kehabisan anggaran? Konfigurasi AI ruang kerja benar?

AI memberi jawapan yang salah+

Semak: pangkalan pengetahuan terkini? Gesaan jelas? Carian konektor mengembalikan data yang betul? Semak perbualan dalam Sejarah AI.

AI lambat+

Bergantung pada: kelajuan API penyedia, saiz konteks (pangkalan pengetahuan besar = lebih banyak token = lebih perlahan), kependaman rangkaian. Cuba model yang lebih pantas.

Penjejakan

Widget hilang+

Periksa: skrip di sumber halaman? Galat JS di konsol? CSP bloking? Ad blocker?

Negara tidak diketahui+

GeoIP tidak dikonfigurasi. Gunakan Cloudflare aatau MaxMind GeoLite2 Basis data.

Tiket

Email tidak membuat tiket+

Semak: peti mel disambungkan? Cron sedang berjalan? Kata laluan aplikasi telah ditukar? Tetapan IMAP betul?

Oto-reply tidak bekerja+

Cron berlari?

Penyambung

Sambungan gagal+

Mengecek: \"alasan\" benar? Kunci sudah habis? API Dapat diakses dari server? URL Benar?

Terhubung tetapi tidak ada data+

Periksa: Skop kunci API? Sync webhook diaktifkan? Cron berjalan?

Prestasi

Halaman pelan - pelan+

Periksa: kinerja basis data (SHOW PROSESSIST), memori PHP (meningkatkan ke 1GB_), aktifkan opcache, kurangi periode retensi.

Operasi

Widget bukan kunjungan penebangan

Unafin gunakan pemeriksaan fokus ini ketika widget memuat salah atau Live Feed tetap kosong.

Ketika Widget ugifogine bukan kunjungan log masuk, sahkan kunci laman, muatkan halaman dalam pelayar peribadi, semak panel Network/Console pelayar untuk permintaan beacon atau widget yang disekat, semak Content-Security-Policy dan penyekat iklan, sahkan laman aktif dalam OpsIQ dan buka Diagnostik. Gelembung sembang yang kelihatan tidak dengan sendirinya membuktikan bahawa beacon analitik telah diterima.

Rujukan

Glosari

Definisi untuk istilah digunakan di seluruh OpsIQ.

Aksi

Sesuatu yang boleh dilakukan oleh AI melalui penyambung atau platform.

Agen

Ahli pasukan dengan akses terhad, atau ejen AI.

BYOK

Bawalah Kunci Sendiri Anda, Anda menyediakan AI Anda sendiri API Kuncinya.

Penyambung

Pengaya plugin yang mengintegrasikan sebuah platform eksternal dengan OpsIQ_.

KANTOR CSAT

\"Tingkat Kepuasan Pelanggan Watak\".

Berikan bantuan

Sebuah kesempatan pendapatan di CRM.

Departemen Urusan Air

Kategori tiket untuk routing dan akses kontrol.

Escalasi

Memindahkan tiket ke jabatan lain atau daripada AI kepada manusia.

GeoIP

Pengesanan lokasi pelawati dari alamat IP _.

Penyerahan

Memindahkan perbualan daripada AI kepada manusia.

Token Identiti

Token bertandatangan yang mengenal pasti pelawat laman web.

Pangkalan pengetahuan

Artikel yang digunakan oleh AI untuk menjawab soalan.

Tiada

Pelawat yang menunjukkan niat membeli.

Skor Lead

Nombor 0-_100 menunjukkan kebarangkalian penukaran.

Tahap Siklus Hidup

Di mana pelanggan adalah: Lead, Prospect, Customer, At Risk, Churned.

AI Terurus

AI disediakan sebagai sebahagian daripada pelan OpsIQ anda.

Paipline

Papan Visual tahap kesepakatan.

RBAC

Kontrol Akses Bersaing Peranan.

Sesi osis

Seri artikel ini memuat halaman dalam jendela yang sudah habis.

Kunci laman

Pengecam unik bagi laman web yang dijejaki.

SLA

Perjanjian Tingkat Layanan Waxé, waktu respon target.

Token

Unit teks AI. Kira-kira 4 aksara = 1 token.

Lapisan Kepercayaan

Sistem keselamatan kemandulan mengendalikan otonomi AI.

Webhook

Panggilan kembali HTTP untuk pemberitahuan peristiwa.

Widget

Kode JavaScript _cd tertanam di website Anda.

Ruang kerja

Laman dengan penjejakan, AI, penyambung dan pasukannya sendiri. Sama seperti "laman."

Rujukan

Cari bantuan lagi

Jika dokumentasi ini tidak menjawab soalan anda:

Pentadbir AI

Klik "Tanya OpsIQ" dalam pentadbir. Mempunyai akses ke dokumentasi ini dan data platform anda.

Tiket sokongan

Sertakan: apa yang telah anda cuba, apa yang berlaku, apa yang anda jangkakan, dan sebarang mesej ralat.

E-mel

Hantar e-mel kepada sokongan dengan kunci lesen dan penerangan isu anda.

Petua untuk permintaan sokongan yang berkesan

Anda juga akan memasukkan halaman

Laman admin milik para pejabat (URL atau nama)

Termasuk pengaturannya

Nama tetapan yang tepat dan nilai semasa.

Termasuk kesalahan

Pesan kesalahan yang tepat dengan kode.

Termasuk langkah-langkah

Apa yang kau lakukan, melangkah.

Dimasukkan ke dalam nama asli yang diharapkan vs.

Apa yang sepatutnya berlaku berbanding apa yang sebenarnya berlaku.

💡
Semakin spesifik permintaan anda, semakin cepat jawapan. "Ia tidak berfungsi" memerlukan penyelidikan. "Klik Simpan pada Konfigurasi AI memberikan kod ralat 502" mendapat jawapan langsung.