Dokumentasi OpsIQ

Bangun, beroperasi, dan perluas OpsIQ.

Ini adalah dokumentasi lengkap untuk OpsIQ Atur produk, jalankan dukungan, konfigurasi AI, mengelola CRM, pasang widget, membangun konektor, sebut REST API, menerima webhooks, paket aplikasi pasar, dan beroperasi sendiri-diselenggarakan pengiriman.

Panduan pelangganPanduan adminPanduan pengembangReferensi CRMKonektor SDKREST APISelf-host
Skop

Scope buku pegangan ini

Semuanya OpsIQ tidak, di satu tempat: bagaimana setiap layar bekerja, bagaimana untuk menghubungkan sistem Anda sendiri, dan bagaimana membangun di atasnya. Mulai di mana saja, bagian-bagian mengikuti urutan yang sama seperti batang admin.

Skop
Peta dokumentasiBuku panduan ini diselenggarakan di sekitar produk OpsIQ, berikut urutan yang sama dengan batang admin.Peta dokumentasiProduk OpsIQAUDIENCEOperatorBUILDINGPengembangRUNAdministratorHIDUP WORKSPACE VIEWGunakan OpsIQMembuat layar dan aliran kerjaTermasukMemperpanjang OpsIQKonektor, APIs dan widgetTermasukOperasi OpsIQKeamanan, Cron dan penyebaranTermasukReferensiPaket, API dan kontrak webhookTermasuk1CHOOSE AUDIENCEOperator atau pengembang2FOLLOW THE UIBagian cermin OpsIQ3USE SOURCE TRUTHStatus berasal dari build
Buku panduan ini diselenggarakan di sekitar produk OpsIQ, berikut urutan yang sama dengan batang admin.
Panduan lapangan Studio Portal

Gunakan panduan administrator dan pengembang khusus untuk arsitektur Portal, halaman, komponen, pratilik, Bantuan Center, identitas, SCIM, Diatur rilis, ekstensi, migrasi dan sertifikasi.

Buka panduan Portal Studio

Apa yang ada di sini

Jalankan produknya

Setiap layar di admin: analisis, live chat, tiket,CRM, dasar pengetahuan, Site Intelligence, promosi dan portal akun pelanggan apa yang setiap halaman lakukan, apa arti angka-angka, dan apa yang harus dilakukan ketika mereka terlihat salah.

Hubungkan sistem Anda

Widget situs, kotak surat, inbound dan outbound webhooks, dan pustaka konektor untuk platform seperti Shopify, WooCommerce, WHMCS Zendesk, Stripe, Slack and Gmail.

Bangun sendiri

Pembangun Konektor untuk konektor no- kode, Aksi & Triggers jika Anda lebih suka tidak menggunakan konektor sama sekali, dan REST API dengan setiap tindakan, scope dan kode kesalahan.

Operate itu

Peran dan perizinan, keamanan, Cron, diagnosa, backup, dan keduanya adalah tuan rumah dan diri-memegang penyebaran.

Mana untuk memulai

1
Jika Anda menjalankan OpsIQ hari ke hari

Baca bagian layar dalam urutan batang sisi. Masing-masing dibuka dengan apa yang halaman ini untuk, sehingga Anda dapat berhenti segera setelah Anda memiliki apa yang Anda butuhkan.

2
Jika kau yang memberikan itu

Tambahkan Pengaturan, Keamanan, Diagnostik, Cron dan Produksi. Ini adalah bagian yang menentukan apakah segala sesuatu yang lain terus bekerja.

3
(Jika kalian merasa besar) yakni penduduk Mekah (maka sesungguhnya hari pembalasan itu pasti terjadi) pasti akan terjadi.

Mulai dari Konektor, lalu Pembangun Konektor lalu REST API Baca semuanya dan kau akan melihat segala cara. OpsIQ bisa bicara dengan sistem lain.

💡
Dua hal yang Anda lihat mengubah apa yang Anda lihat. komisi menyembunyikan halaman peran Anda tidak dapat dibuka, sehingga bagian yang dijelaskan di sini mungkin hilang dari sisi Anda. meminta administrator untuk memeriksa peranmu. dan konektor membawa label kedewasaan Produksi, Beta, Pratilik atau Template; pembangunan dan konektornya menunjukkan otoritas yang Anda miliki, bukan pada halaman ini.
Mulai dari sini

Apa OpsIQ tidak untuk bisnis Anda

OpsIQ adalah platform operasi bisnis AI-first lengkap. Menggantikan analitik Anda, live chat, bantuan, CRM, SEO toolkit, integrasi middleware, dan platform pengembang dengan satu admin terpadu dimana setiap alat berbagi konteks pelanggan yang sama. Alih-alih menjahitkan bersama-sama 8-12 memisahkan produk SaaS, Anda memasang OpsIQ sekali dan beroperasi segala sesuatu dari satu layar.

Platform
OpsIQ platform unifiedOtak AI sentral yang terhubung untuk hidup chat, CRM, tiket, Site Intelligence, promosi dan analisis.Langsung chattingPromosiAI CRMInformasi SitusTiketAnalisisOpsIQOTAK AI1ONE WORKSPACESetiap alat dalam satu admin2SHARED BRAINSatu konteks pelanggan3ANYWHERECloud atau di-host sendiri
OpsIQ adalah satu platform dengan satu konteks pelanggan bersama, setiap alat feed, dan didukung oleh, otak AI yang sama.

Semuanya OpsIQ melakukan

Analitik situs web dan intelijen pengunjung

Pencari pengunjung Real- waktu

Setiap halaman terisi, klik, gulungan, dan acara navigasi ditangkap secara langsung. Lihat siapa yang ada di situs Anda sekarang, halaman apa yang mereka lihat, berapa lama mereka habiskan, dan dari mana mereka berasal, semua tanpa kue pihak ketiga.

Log dan sesi pengunjung

Sejarah penuh dari setiap pengunjung dengan perangkat, peramban, sistem operasi, negara, kota, referensi, parameter UTM, halaman pendaratan, dan resolusi identitas. Grup sessions melihat ke dalam perjalanan sehingga Anda dapat melihat seluruh jalan yang dibutuhkan pengunjung.

Pengulangan sesi

Pemutaran gaya waktu dari sesi pengunjung yang ditangkap. Lihat persis apa yang dilakukan pengguna: pergerakan tetikus, klik, gulungan, transisi halaman, dan bentuk interaksi. Gunakan untuk mendiagnosa masalah UX, pahami titik putus, dan verifikasi arus konversi.

Umpan hidup

Arus waktu real-aktivitas pengunjung seperti yang terjadi. Lihat tampilan halaman, obrolan dimulai, formulir pengiriman, dan tujuan sinyal memperbarui setiap beberapa detik. Penyaring oleh negara, perangkat, atau referensi untuk fokus pada segmen lalu lintas tertentu.

Halaman atas

Halaman-halaman yang peringkat oleh kunjungan, waktu pertunangan, laju bouncing, konversi, dan aktivitas dukungan. Identifikasi konten berkinerja tinggi Anda dan halaman yang perlu perbaikan.

Geo intelijen

Negara, kota, dan wilayah pecah dengan peta. Perangkat dan distribusi peramban, analisis sumber lalu lintas, referensi mesin pencari pelacakan, dan penetrasi pasar wawasan.

Saluran masuk

Track pengunjung niat sinyal (kunjungan harga halaman, kembali berulang, dokumentasi browsing pola, dan dukungan interaksi) untuk mengidentifikasi pengunjung yang kemungkinan untuk membeli, churn, atau membutuhkan bantuan.

A / B experimen

Jalankan tes split di situs web Anda langsung dari OpsIQ. Membuat varian, mengatur alokasi lalu lintas, mendefinisikan tujuan konversi, dan mengukur makna statistik. Tidak ada alat pengujian eksternal yang dibutuhkan.

JavaScript error pelacakan

Tangkap klien-sisi JavaScript error dari situs web anda secara otomatis. Lihat pesan kesalahan, jejak stack, browser mempengaruhi, jumlah frekuensi, dan halaman mana yang memicu mereka. Debug antarmuka masalah tanpa pemantauan kesalahan terpisah.

Log kejadian

Setiap kejadian yang dilacak (tampilan halaman, acara gubahan, interaksi obrolan, pengiriman formulir, pembelian) dalam log yang dapat dicari dan dapat disaring dengan metadata penuh.

Penjualan dan konversi

Perintah track, pendapatan, pengembalian dana, pembaharuan langganan, dan atribut konversi ke sumber lalu lintas, kampanye, dan perjalanan pengunjung. Requue dashboard dengan perbandingan periode dan analisis tren.

Petunjuk

Pengunjung Highintend diidentifikasi dengan pola perilaku. Nilai mengarah berdasarkan pada kunjungan halaman, waktu di situs, frekuensi kembali, dukungan interaksi, dan sinyal custom. Feed mengarah langsung ke CRM Jalur pipa.

Site Intelligence (SEO dan analisis isi)

Gerak

Menggali otomatis seluruh situs web Anda untuk menemukan halaman, mendeteksi link yang rusak, menemukan tag meta yang hilang, memeriksa teks alt gambar, validate canonical URLs dan memetakan struktur situsmu jadwal crawls untuk dijalankan setiap hari, mingguan, atau sesuai permintaan.

Audit SEO Teknis

Analisis teknis yang komprehensif: nilai kecepatan halaman, responsivency mobile, Core Web Vitals, SSL status sertifikat, rantai redirect, duplikasi deteksi konten, analisis kedalaman merangkak, dan validasi data terstruktur.

Audit Konten

Evaluasi setiap halaman untuk kualitas konten, jumlah kata, skor readsability, kepadatan kata kunci, kepala struktur, rasio link intern / eksternal, dan kesegaran. Identifikasi isi tipis, duplikasi halaman, dan kesenjangan isi.

Pencarian dengan tenaga-belakang

Pencarian semantik di seluruh isi situs Anda. Tanyakan pada bahasa alami tentang konten Anda dan dapatkan jawaban yang disintesis dengan referensi halaman sumber.

Pelacakan peringkat SERP

Monitor peringkat mesin pencari Anda untuk target kata kunci di Google dan mesin lain. Lacak perubahan posisi dari waktu ke waktu, bandingkan dengan pesaing, dan lihat peringkat halaman mana untuk istilah yang mana.

Penelitian kata kunci

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

Analisis backlink

Monitor sambungan profil inbound anda. Lihat situs mana yang terhubung ke anda, lacak link baru dan hilang, menganalisa distribusi teks anchor, dan identifikasi kesempatan untuk membangun link.

Jaringan SEO lokal

Untuk bisnis dengan lokasi fisik: visualisasikan visibilitas pencarian lokal anda di seluruh grid geografis. Lihat bagaimana peringkat anda bervariasi dengan lokasi, jarak dari bisnis anda, dan tujuan pencarian.

Sinkronisasi Profil Bisnis Google

Hubungkan Profil Bisnis Google Anda ke OpsIQ Selaraskan ulasan, posting, Q & A, foto, dan informasi bisnis. Atur daftar GBP anda dari dalam OpsIQ Menanggapi ulasan, mempublikasikan posting, dan monitor wawasan.

Laporan yang dijadwalkan

Laporan SEO dan analitik otomatis yang dihasilkan dari jadwal Anda (tiap hari, mingguan, bulanan). Laporan termasuk perubahan peringkat, kecenderungan lalu lintas, masalah teknis yang ditemukan, dan kinerja konten. Keluaran label White- tersedia bagi lembaga.

Dukungan bertenaga-al-

Chat AI Pelanggan

AI menjawab pertanyaan pelanggan di website Anda 24/7 menggunakan basis pengetahuan anda, data platform yang terhubung (perintah, akun, subscriptions), dan prompt pelatihan gubahan. Mendukung beberapa penyedia AI: Claude (Anthropic), GPT-4o (OpenAI), Gemini (Google), and Gok (xAI).

Asisten AI admin

Sebuah kopilot AI di dalam panel admin Anda yang membantu Anda menulis tiket menjawab, rancangan komunikasi pelanggan, menganalisis kecenderungan dukungan, mencari data pelanggan di platform terhubung, dan mengeksekusi aksi melalui sistem konektor.

Pengetahuan AI grounding

AI didasarkan pada artikel dasar pengetahuan Anda, entri FAQ, dokumentasi produk, dan data platform yang terhubung.

Auto- handoff untuk manusia

Ketika AI tidak dapat menyelesaikan sebuah pertanyaan, mendeteksi frustrasi, atau pelanggan meminta manusia, secara otomatis tangan off ke tim Anda dengan konteks percakapan penuh. Dikonfigurasikan penurunan / timeout otomatis kembali ke AI.

Prompt pelatihan AI

Tulis instruksi terpisah untuk pengurun-menghadap AI dan admin yang dihadapi AI. Tone kontrol, batas, aturan eskalasi, topik dilarang, dan perilaku bisnis-spesifik. Konfigurasi per- area kerja didukung.

Sejarah AI dan audit

Setiap percakapan AI dicatat dengan rincian permintaan / jawaban penuh, penggunaan token, pelacakan biaya, penyedia digunakan, dan versi model. Percakapan review untuk mengidentifikasi perbedaan pelatihan dan meningkatkan akurasi AI.

Indentasi AI

Analisis otomatis pola percakapan AI. Lihat pertanyaan umum, tingkat resolusi, frekuensi handoff, kepuasan pelanggan oleh topik, dan daerah-daerah di mana Al perlu pelatihan yang lebih baik.

Per- area kerja Al config

Setiap situs / area kerja yang terhubung dapat menggunakan penyedia AI sendiri, model, suhu, anggaran token, dan prompt pelatihan.

Mengelola AI dan BYOK

Dua mode AI: Managed AI (termasuk dalam rencana Anda, tidak ada API perlu kunci) atau Bawa Kunci Sendiri (gunakan sendiri OpenAI/Anthropic/ Google / xAI API kunci untuk kontrol penuh atas seleksi model dan biaya). Keduanya adalah kelas-pertama, setiap fitur bekerja dengan kedua mode.

AAI token budget and cost control

Atur anggaran token bulanan, batas per- percakapan, dan peringatan keseimbangan rendah. Melacak pengeluaran per penyedia, setiap area kerja, dan tiap percakapan. Mencegah biaya pelarian dengan langit-langit keras.

Tiket dan bantuan

Sistem tiket asli

Bandar bantuan penuh dengan departemen, prioritas (low / medium / high / important), status, pelacakan SLA, catatan internal, menjawab pelanggan, berkas lampiran, dan percakapan threaded. Tidak ada bantuan eksternal yang dibutuhkan.

Ujiran dan auto- jawaban AI

AI secara otomatis triase tiket masuk oleh departemen dan prioritas. Aktifkan auto-reply untuk departemen aman. Draf AI dan mengirimkan jawaban setelah penundaan yang dapat diubah (baku: 2 menit) sehingga manusia dapat campur tangan pertama.

Insurisasi surel

Hubungkan kotak surat (Gmail, IMAP, atau provider-specific) untuk secara otomatis membuat tiket dari email inbound. Balasan untuk tiket pemberitahuan email update benang tiket.

Portal tiket embed

Tempelkan seorang pelanggan yang menghadap portal tiket di situs web Anda. Pelanggan dapat mengirimkan tiket, melihat sejarah mereka, menjawab untuk membuka tiket, dan memeriksa status, semua bermerek pada desain Anda.

Penggabungan Tiket

Merge duplikasi tiket ke dalam satu benang merged ticket show [Merged] pada baris subjek semua sejarah percakapan diawetkan dalam tiket yang bertahan

Kembali ke AI

Setelah seorang agen manusia mengambil alih tiket, gunakan "Kembali ke AI" untuk membiarkan hasil ulang AI auto- jawaban pada tiket itu. Berguna ketika bagian yang dibutuhkan oleh kemanusiaan diselesaikan tetapi pelanggan telah mengikuti pertanyaan-pertanyaan AI dapat menangani.

Kopilot Inbox

Manajemen tiket yang membantu dari tampilan kotak masuk. Kopilot menyarankan jawaban, meringkas riwayat percakapan, merekomendasikan tugas prioritas / departemen, dan dapat mengeksekusi aksi pada platform yang terhubung.

Dukungan percakapan dan waktu yang sebenarnya

Kotak masuk percakapan

Obrolan pelanggan di seluruh dunia berhasil dari inbox yang terpadu. Lihat semua percakapan aktif, identitas pelanggan, riwayat percakapan, dan saran AI. Beberapa agen dapat bekerja sama dalam sebuah percakapan.

Aturan obrolan proaktif

Pesan obrolan trigger berdasarkan perilaku pengunjung: waktu pada halaman, spesifik URL dikunjungi, kedalaman scroll, jumlah kunjungan kembali, tujuan keluar, atau acara gubahan. Contoh: tampilkan pesan bantuan setelah 60 detik pada halaman harga.

Widget obrolan

Widget obrolan yang dapat disesuaikan yang tertanam di situs web Anda. Mendukung percakapan AI, langsung video agen, pengiriman tiket, pencarian dasar pengetahuan, dan identitas pengunjung. Responsif, diakses, dan dapat dibawa.

Survei CSAT

Mengumpulkan peringkat kepuasan pelanggan setelah interaksi obrolan dan tiket. Mendesain survei dengan pertanyaan, skala rating sendiri, dan prompt berikut. Hasil makan dalam kinerja tim dan wawasan AI.

Survey surel mail- chat

Setelah obrolan berakhir, pengunjung dengan email yang diketahui dapat menerima satu surat bermerek dengan ringkasan AI dari apa yang ditangani dan satu klik "Apakah itu mudah?" Ya / No Sekali setiap benang, ditandatangani tunggal-gunakan link, setiap kirim log, dan hasil tanah pada halaman Feedback sebagai sendiri sinyal di samping bintang percakapan.

Feedback loop identitas

Setiap item umpan balik yang membawa seseorang menunjukkan: nama, email, klik-melalui untuk perjalanan pelanggan mereka dan CRM kontak, dan satu klik Email atau AI- draft repils didasarkan dalam sejarah sebenarnya mereka.

Menulis AI

Pisahkan asisten Al menulis untuk menyusun draf email, tiket menjawab, pengumuman, dan komunikasi pelanggan. Menggunakan prompt sendiri (bukan otak percakapan) untuk penulis bisnis profesional.

AI- Pertama CRM

Pusat Perintah CRM

Sebuah layar tunggal yang menunjukkan seluruh kondisi CRM Anda: nilai pipeline, kecepatan transaksi, tugas mendatang, pada penawaran resiko, aktivitas agen, dan rekomendasi AI. Halaman rumah CRM adalah titik awal harian Anda.

Kontak dan perusahaan

Kelola kontak pelanggan dengan profil lengkap: nama, email, telepon, perusahaan, tag, panggung lifecycle, riwayat percakapan, riwayat tiket, riwayat pembelian, dan ruas suai. Hubungkan kontak ke perusahaan untuk manajemen hubungan B2B.

Papan pipa dan penutup

Papan perjanjian visual Kanban-gaya dengan tahapan yang dapat disesuaikan. Seret penawaran antar tahap, set nilai, pemilik assign, melacak tanggal dekat, dan lihat nilai pipeline di setiap tahap. Banyak pipa didukung.

Kesepakatan pelatihan AI

AI menganalisa setiap transaksi dan menyediakan pelatihan: sinyal resiko (pergi diam, pesaing disebutkan, masalah anggaran), rekomendasi tindakan-terbaik berikutnya, menang probabilitas, dan menyarankan mengikuti waktu.

Forecast dan laporan

Laporan mencakup baris pipa per tahap, oleh pemilik, sumber, laju konversi, ukuran rata-rata kesepakatan, dan panjang siklus penjualan.

Memfospeksi agen (SDR)

Bertenaga-yang mengidentifikasi pelanggan potensial dari data pengunjung Anda, sinyal memimpin, dan platform aktivitas terhubung. Menawarkan outreach target, draf pesan awal, dan skor kualitas timbal.

Ikuti urutan

Diotopsi multi- langkah mengikuti urutan: email, tunggu, email, cek respon, meningkat. Definisikan urutan untuk petunjuk baru, transaksi stalled, post-beal check-ins, dan kembali-keterlibatan kampanye.

Lifecycle dan retention

Track pelanggan tahap lifecycle (lead, prospek, pelanggan, berputar) dengan transisi otomatis.

Agen data steward

Agen AI yang terus-menerus membersihkan dan memperkaya data CRM Anda: deduplikasi kontak, mengisi field hilang, memvalidasi email, standarisasi nama perusahaan, dan bendera catatan basi.

Bangun CRM saya

Konfigurasi CRM bahasa alami: beritahu AI seperti apa proses penjualan anda dan itu membangun tahap pipa, bidang kustom, templat kesepakatan, dan aturan otomatisasi.

Cek kesehatan CRM

Audit otomatis kualitas data CRM Anda: duplikasi kontak, penawaran tanpa langkah berikutnya, jaringan pipa basi, hilang informasi kontak, dan melengkapi data mencetak angka.

Percaya Dial

Tiga tingkat kontrol otonomi untuk setiap agen CRM AI: Autopilot (AI bertindak secara independen), Kopilot (AI menyarankan, persetujuan manusia), dan Manual (AI hanya mengamati). Atur servis per agen, per aksi, dan batas harga.

Empat agen AI

CRM menjalankan empat agen AI khusus: Steward (kualitas data), SDR (prospecting), Retention (pencegahan gereja), dan Analis (pelaporan dan wawasan). Setiap agen memiliki pengaturan Dial Kepercayaan sendiri.

Konektor dan integrasi

Konektor bawaan

Konektor siap-guna untuk Shopify, WooCommerce, BigCommerce, Magento 2, PrestaShop, OpenCart, osCommerce WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Postmark, Kirim kembali, SendGrid, MailgunGmail, IMAP, Slack, dan Google Business Profile. setiap konektor membawa aksi AI khusus platform, pengetahuan, dan sinkronisasi data.

Pembuat Penghubung

Bangun konektor gubahan bagi platform apapun, tanpa kode, bantuan, atau kode penuh. Pembangunan mendukung REST dan GraphQL APIs, OAuth stream kode otorisasi, webhook auto-registrasi dengan Stripe dan skema tanda tangan sederhana, pagination (offset, page, cursor, and link-header), list / error mengubah bentuk, multi- action context, dan paket pasar.

Penulis konektor bantuan

ConnectorBuilderAI membantu Anda membangun konektor: jelaskan apa yang Anda inginkan dan itu menunjukkan tindakan, tulis permintaan penangan, dan peta API jawaban. penanganan otentikasi, paginasi, dan kesalahan menangani secara otomatis.

OAuth aliran untuk konektor apapun

Aplikasi in- generik OAuth arus otorisasi yang bekerja dengan konektor apapun. Dukungan PKCE, seit- scoped pengelolaan negara, otomatis token refresh. Konektor mendefinisikan mereka OAuth parameter dan OpsIQ Menangani arus.

Bus capbility (ekstensi platform-lebar)

Konektor tidak hanya menambah aksi platform. Mereka dapat mengaktifkan fitur inti melalui kemampuan "bus". Sebuah konektor mendeklarasikan suatu kapabilitas (kalender, pengayaan, esign in CRM; local_listing, rank_data di Situs Intelligence; web_analytics dalam Analytics; payment_provider (Di dalam kitab-kitab) menjadi Khabar yang kedua, karena sesungguhnya ia dan yang sebelumnya berkedudukan sebagai jumlah Mu 'taridhah atau kalimat negatif. email_sync dalam Kotak-surat; video_meeting dalam Comms) dan menerapkan metode kecil yang ditetapkan; OpsIQ Menemukannya melalui CapabilityRegistry dan kabel ke UI, Pelanggan 360 timeline, and the AI actions. Beberapa konektor dapat menawarkan kemampuan yang sama tanpa lock- in. Lihat connectors /PLATFORM_CONNECTORS.

Pre-instable vs market tier

Konektor hidup di salah satu dari dua tingkatan. Koneksi pra-diinstal (connectors/) adalah register-aktif keluar dari kotak, disimpan lean untuk hanya referensi tanpa kunci dan penyedia yang paling banyak digunakan per kemampuan (misalnya Google Kalender, Gmail, Profil Bisnis Google). Koneksi pasar (marketplace_connectors /) dapat dideteksi tetapi inert sampai dipasang, misalnya Microsoft 365 Kalender, Outlook DocuSign, Stripe, GA4, SerpApi, Zoom. Setiap jembatan permukaan daftar pasar sehingga UI dan AI dapat meminta "instal dari pasar" (notifikasi-untuk-instal) ketika kemampuan tidak memiliki penyedia siap, tidak pernah tombol rusak.

Pasar konektor

Terbitkan konektor Anda ke OpsIQ Pasar, Konektor Paket dengan profile.json, knowledge.json, workflow_recipes.json, dan arsip ditandatangani. Marketplace mendukung konektor bebas dan dibayar dengan penagihan multi- sumber.

Tanda tangan konektor

Semua konektor ditandatangani secara cryptographically untuk verifikasi integritas. Tanda tangan diperiksa pada waktu instalasi. Gunakan resign_all_connectors tool untuk ditanda-tangani setelah pemutakhiran.

SmartLookup

Deklaratif fuzzy-pencocokan sistem untuk aksi konektor. Tentukan aturan pencarian dan OpsIQ cocok dengan pencarian pengguna ke entitas platform menggunakan fuzzyScore dan algoritma smartRank. Contoh: find_country("kuman") cocok dengan Jerman 88.9% Percaya diri.

Aksi kontrak

UmumOpsIQ APImempublikasikan setiap yang terdaftarJSONoperasi sebagai aksi bernama ditemukan. Gunakan meta.actions untuk total dan kontrak yang tepat diketik; paket-paket konektor mendeklarasikan aksi vendor mereka sendiri melalui unified ActionExecutor.

Resep konektor

Sebelum membangun resep-resep alur kerja yang menggabungkan banyak aksi konektor ke dalam arus bisnis umum. Contoh: "Ketika urutan baru datangShopify, buat tiket, perbarui CRM, dan kirimSlackpemberitahuan. "

Sinkronisasi Pengetahuan

Konektor menyatakan topik pengetahuan yang sinkronisasi ke basis pengetahuan AI. Platform-spesifik help artikel, setup panduan, dan langkah-langkah escooting secara otomatis tersedia untuk masukan pengetahuan manual.

Platform pengembang

REST API

Nama JSON API meliputi setiap administrator yang terdaftar JSON operasi, denganAPI-key otentikasi, ruang kerja isolasi, scopes, rate membatasi, idempoten menulis, OpenAPI, dan koleksi Postman yang dihasilkan.

Webhook

Pengait web keluar untuk semua peristiwa besar: perintah, faktur, subscriptions, tiket, obrolan, memimpin, registrasi pengguna, dan pengiriman gerobak melalui antrian pekerjaan, mundur eksponensial, perlindungan SSRF, dan otomatis tidak aktif setelah 15 kegagalan beruntun.

Tanda tangan webhook

Setiap webhook outbound ditandatangani dengan HMAC-SHA256. Verifikasi tanda tangan pada akhir penerimaan anda untuk memastikan keaslian webhook. Stabil event_id untuk pemrosesan idempoten.

Widget SDK

JavaScript SDK untuk widget pelacakan dengan resolusi identitas, pelacakan acara suai, kontrol obrolan programmatic, dan konfigurasi page- spesifik. Pasang resep untuk Rect, Vue, Next.js, WordPress, Shopify, dan statis HTML.

Pengaya dan SDKsprint size

Server-sisi SDK dan plugin untuk frameworks umum. WordPress plugin, WHMCS modul, dan generik perpustakaan integrasi PHP / Node.js.

API

Push acara gubahan ke OpsIQ dari backend anda: pembelian, tanda tangan, penggunaan fitur, kesalahan, atau acara bisnis. Peristiwa muncul di timeline pengunjung dan feed ke dalam analitik dan konteks AI.

Buku masak Triggers

Bangun otomatis mengalir dipicu oleh peristiwa: tiket baru, obrolan dimulai, pengunjung diidentifikasi, tahap transaksi berubah, atau acara gubahan. Triggers mengeksekusi konektor, mengirim webkait, catatan update, atau memberitahu tim Anda.

API pembangun

Visual API dan pembangun webhook di dalam admin. Atur titik akhir, permintaan tes, pemeriksaan respon, dan debug integrations tanpa meninggalkan OpsIQ.

Tim dan administrasi

Role- berbasis kontrol akses

Tiga peran: Pemilik (akses penuh, billing, zona bahaya), Almin Penuh (semua operasi kecuali billing dan daerah bahaya). Agen (hanya ditugaskan departemen, tidak ada akses pengaturan). Semua halaman sensitif dibagi dengan peran.

Timpentas kinerja

Pemilik dan Pengelola Penuh hanya menampilkan waktu resolusi, distribusi kerja, menangani kedalaman, kerusakan saluran, analisis tren, SLA compliance, CSAT oleh agen, pembukaan kembali, waktu kerja, dan jam sibuk. Diperbarui secara real time.

Atur kehadiran dan pelacakan online

Real--time who- is- online widget dalam navigasi admin. Heartbeats-berbasis deteksi keberadaan (60-second ping, 300-second ekstension, auto- prune setelah 120 Lihat admin mana yang saat ini aktif dan pada halaman mana.

Pengaturan per- area kerja

Setiap situs yang terhubung (area kerja) dapat memiliki konfigurasi AI sendiri, pengaturan konektor, departemen tiket, merek, dan aturan operasional. Baku global cascade ke ruang kerja yang tidak menimpa mereka.

Manajemen situs multi-

Kelola multiple situs dari satu OpsIQ admin. Setiap situs memiliki snippet pelacakan sendiri, data pengunjung, dan konfigurasi. Beralih antara situs dari navigasi admin tersebut.

Sistem templat surel

Pernyataan surel yang diimpor untuk semua komunikasi otomatis: pemberitahuan tiket, transkrip obrolan, email selamat datang, reset sandi, dan sistem memperingatkan. Sunting. HTML templat dengan pratinjau langsung, chip variabel ({{customer_name}}, {{ticket_id}}), dan kontrol tata letak global.

Impor dan ekspor

Impor kontak, tiket, dan artikel pengetahuan dari CSV/JSON Data pengunjung, laporan analisis, dan catatan CRM, data portbility untuk migrasi antar sistem.

Keamanan, kepatuhan, dan operasi

Enterprise SSO

OIDC (OpenID Hubungkan) satu tanda dengan waktu-penuh: penemuan, otorisasi, callback, verifikasi tanda tangan JWKS, userinfo, daftar domain, JIT provisioning, dan status penjaga. SAML Dukungan konfigurasi.

GDPR dan data compliance

Bangun. DSAR (Data Subject Access Request) menangani: ekspor dan hapus data pelanggan di semua sistem. Kontak-level data memberantas sesi, tiket, percakapan, catatan CRM, dan log email. Mengonfirmasi manajemen dan penerimaan kebijakan.

IP memblokir dan perlindungan paksa

Blok spesifik IPs atau range dari mengakses situs Anda atau admin. Otomatis lockout setelah konfigurasi gagal mencoba log masuk dengan. Gagal log masuk IP, timestamp, dan agen pengguna.

HSTS dan header keamanan

HTTP Strict Transport Security, Permiiss- Policy header, dan konfigurasi cookie yang aman. Self -hosted deplistments dapat menambahkan CSP header melalui konfigurasi server.

Kerangka webhook terluar

SSRF blok penjaga webhooks ke private / metadata IP rangga. Pengiriman secara bersamaan mencegah titik akhir lambat dari memblokir aplikasi anda. Otomatis-non-aktif setelah 15 kegagalan berturut-turut mencegah pembuangan sumber daya pada titik akhir yang mati.

Isolasi ruang kerja

Isolasi data yang ketat antara ruang kerja. Pengunjung, tiket, obrolan, catatan CRM, dan percakapan AI telah dipindai ke area kerja mereka. Kebocoran data di area kerja dilarang pada lapisan query.

Manajemen siklus penagihan

Dukungan untuk siklus billing bulanan, kuartalan, semi-tahunan, tahunan, dua tahunan dan seumur hidup. Normalisasi mata uang untuk gerbang multi-valuta. Konversi FX pada penerimaan pembayaran untuk laporan pendapatan yang akurat.

Otomatis yang dijadwalkan dan cron

Sistem built- dalam cron untuk tugas yang dijadwalkan: laporan generasi, pembersihan data, pembaharuan langganan, update pelatihan AI, syncs konektor, dan retries webhook. diagnosis kesehatan dengan indikator peringatan.

Kebijakan penyimpanan data

Atur berapa lama sesi pengunjung, transkrip obrolan, riwayat percakapan AI, dan catatan acara ditahan. Otomatis membersihkan data usia untuk mengelola penyimpanan dan mematuhi kebijakan penahanan.

Diagnostik dan kesehatan

Sistem dasbor kesehatan menunjukkan status Cron, koneksi basis data, status penyedia AI, kesehatan konektor, tingkat pengiriman webhook, dan penggunaan penyimpanan. Peringatan untuk masalah konfigurasi dan penghambat kinerja.

Siapa OpsIQ adalah untuk

Toko-toko E- Commerce

Toko

Lacak setiap pengunjung dari pendaratan untuk membeli. Biarkan AI menjawab "Di mana pesanan saya?" menggunakan langsung Shopify/WooCommerce/ Data BigCommerce. Kelola tiket dukungan dengan AI auto- reply. Jalankan sebuah jalur kerja untuk grosir dan B2B memimpin. Atribut pendapatan untuk sumber lalu lintas dan kampanye. Monitor gerobak ditinggalkan dengan proses pemulihan.

Perusahaan perangkat lunak dan SaaS

SaaS

Monitor tanda tangan pengadilan dan adopsi fitur dengan pengulangan sesi. Lacak halaman dokumentasi mana yang dikonversi. Dukungan otomatis dengan AI landed dalam Anda API docs, mengelola subscription pendapatan dan ekspansi transaksi di CRM menghubungkan platform penagihan anda (Stripe, WHMCS) untuk real-time MRR tracking. Gunakan CRM lifecycle agen untuk mendeteksi dan mencegah churn.

Agency dan freelancers

Agensi

Menawarkan analisis berupa label putih dan dukungan portal ke klien. Lacak mengarah ke beberapa situs klien dari satu admin. Gunakan baris pipa CRM untuk mengelola prospek dan petunjuk projek. Bangun konektor gubahan bagi platform klien dengan Conektor Builder. Buat laporan SEO bermerek dengan Intelejen Site. Jual ulang koneksi pasar sebagai layanan yang bernilai.

Hosting dan infrastruktur

Penghosting

Jauh WHMCS integrasi dengan 80+ AI aksi untuk pencarian urutan, manajemen layanan, DNS, dan penyesuaiannya. Auto- balas ke pertanyaan host bersama menggunakan artikel dasar pengetahuan. Lacak status server keterlibatan. Atur tiket dukungan teknis dengan triase AI. Gunakan tangga siklus penagihan untuk bulanan melalui rencana hosting seumur hidup.

Spport- bisnis berat

Dukungan

Defleksi 40-70% Pertanyaan berulang dengan percakapan AI didasarkan dalam pengetahuan Anda SLA kepatuhan, dan CSAT oleh agen. Gunakan penulisan AI untuk menyusun jawaban profesional. Monitor dukungan tren dengan wawasan AI.

Tim Pemasaran dan SEO

Pemasaran

Full Site Intelligence suite: crawls, teknis SEO audit, analisis konten, SERP peringkat pelacakan, keyword research, backlink monitoring, dan lokal SEO grid. Google Bisnis Manajemen Profil. Terjadwal white-label laporan untuk klien. A / B pengujian tertanam ke tracking widget. Kampanye atribusi di seluruh saluran.

Pendiri Solo dan tim-tim kecil

Startup

Mulai dengan hanya melacak dan mengobrol, bebas untuk menambahkan. Kemudian tambahkan tiket ketika Anda mendapatkan volume dukungan. Nyalakan CRM ketika Anda mulai menjual. Hubungkan platform saat Anda mengadopsinya. OpsIQ skala dari satu orang melakukan segalanya untuk 50-orang tim operasi dengan RBAC, departemen, dan per- agen pelacakan kinerja.

Enterprise dan multi- brand

Perusahaan

Enterprise SSO dengan OIDC untuk otentikasi terpusat. Isolasi multi- area kerja untuk berbagai merek atau divisi terpisah. Konfigurasi AI perworkview dengan penyedia dan model berbeda. Pengembangan konektor kustom dengan distribusi pasar. GDPR alat kepatuhan, dan kebijakan penyimpanan data.

Apa OpsIQ menggantikan

Google Analytics + Hotjar + Plaubel

Analisis situs dengan pelacakan pengunjung, sesi diputar ulang, peringkat halaman, intelijen geo, corong niat, pencangkokan, peristiwa, percobaan A / B, dan JS error pelacakan, semua pribadi-ramah, semua dalam satu platform.

Intercom + Drift + Tidio

Obrolan pelanggan dengan pengetahuan, dukungan AI multi- penyedia, auto-handoff kepada manusia, proaktif aturan obrolan, sejarah percakapan, survei CSAT, dan pembuatan tiket dari chat.

Zendesk + Freshdesk% d Scout Bantuan

Sistem tiket asli dengan departemen, prioritas, SLA, triase AI, auto- balas dengan penundaan yang dapat diatur, gangguan email, intrusi tiket dimasukkan, penggabungan tiket, kopilot inbox, dan kembali ke kemampuan AI.

HubSpot + Pipedrive + Salesforce

Pertama CRM dengan empat agen AI khusus (Steward, SDR, Retention, Analis), Kontrol otonomi Dial Trust, papan pipa, alat pembuat jalur pipa, pelatih, pranccasting, urutan, manajemen lifecycle, dan konfigurasi bahasa CRM alami.

Ahrefs + SeMush + Moz

Intelijen situs dengan crawls otomatis, audit SEO teknis, analisis konten, pencarian AI, pelacakan peringkat SERP, penelitian kata kunci, analisa backlink, jaringan SEO lokal, dan jadwal laporan label putih.

Zapier + Buat + middleware custom

Konektor SDK dengan 25+ pre- built connectors, Conektor Builder (no- code / AI- dibantu / full-code), OAuth flow, webhook auto- registrasinya, sebuah katalog besar dari definisi aksi konektor yang menjadi executable hanya ketika koneksi relevan dipasang, diaktifkan, dikonfigurasi dan disahkan, SmartLookup, pasar, dan paket-paket ditandatangani.

Manajer Profil Bisnis Google

Konektor GBP penuh: review manajemen, post published, Q & A management, upload foto, informasi bisnis sync, wawasan pelacakan, dan AI- didukung tanggapan tinjauan, semua dari dalam OpsIQ.

Templat surel terpisah

Registry-driven template email dengan penyunting visual, pratilik langsung, chip variabel, kontrol tata letak global, dan per- event penyesuaian untuk semua komunikasi otomatis.

Timmanajemendashboard

Pembangunan dalam kinerja tim: waktu resolusi, beban kerja, kepatuhan SLA, CSAT oleh agen, tingkat terbuka, jam sibuk, waktu pelacakan, dan kerusakan yang terjadi secara permanen.

GDPR alat kepatuhan

Asli DSAR penanganan, data diberantas di semua sistem, manajemen persetujuan, kebijakan penahanan, dan jejak audit, dibangun ke platform, tidak dibooted pada.

Dua edisi

Pemindahan host

OpsIQ berjalan pada infrastruktur yang dikelola operasi produksi adalah sama; prasarana, update dan backup ditangani oleh operator hosting. Buku panduan ini mendokumentasikan OpsIQ waktu berjalan daripada pemasaran atau rekening komersial mengalir.

Modul self -hosted

Pasang OpsIQ pada server anda sendiri untuk kontrol penuh atas data, branding, update, dan integration. Membutuhkan PHP 8.4+, MySQL 5.7+ atau MariaDB 10.3+, HTTPS, dan OpsIQ Cron yang bersatu, Pendukung WHMCS Integrasi sebagai modul addon kedaulatan data penuh.

Urutan baca yang direkomendasikan

1
Cepat mulai

Ikuti 30-menit setup panduan untuk mendapatkan pelacakan, chatting, dan AI dasar bekerja pada situs web Anda.

2
Dashboard dan analitik

Pelajari cara membaca data pengunjung Anda, mengatur sesi diputar ulang, mengidentifikasi petunjuk, dan memahami pola lalu lintas.

3
Situs Intelijen

Jalankan pertama Anda SEO merangkak, memeriksa kesehatan teknis Anda, dan mengatur peringkat SERP pelacakan untuk kata kunci target Anda.

4
Tiket dan dukungan

Atur departemen, mengatur auto- balas dengan AI, menghubungkan gangguan email, dan melatih AI Anda untuk menangani pertanyaan umum.

5
CRM

Mengatur kontak, membangun pipa Anda, mengatur agen AI, mengatur tingkat Trust Dial, dan membiarkan AI melatih penawaran Anda.

6
Alat konektor dan pengembang

Hubungkan platform e- commerce / billing Anda, buat konektor gubahan, atur webkait, dan integrasikan melalui API REST.

💡
Baru ke OpsIQ Anda dapat memiliki pelacakan dan percakapan AI dasar berjalan di bawah 30 menit.
Mulai dari sini

Cepat mulai di 30 menit

Ikuti langkah-langkah ini untuk membuat OpsIQ berjalan.

Penyiapan
Daftar-cek awal cepatDaftar pemeriksaan setup yang dipandu menampilkan pemasangan widget, koneksi platform, pelatihan AI, undangan tim dan go-live, dengan suatu 60 persen kemajuan bar.MulailahsetupPasang widget OpsIQDIONEHubungkan suatu platform (WHMCS, Shopify...)DIONELatih AI Anda pada isi AndaDIONEUndang tim AndaPeriksa dan hidupkanAtur kemajuan3 dari 5 · 60%1STEP 1Pasang widget2STEP 2Hubungkan & pelatihan AI3STEP 3Undang & langsung
The30-minute path: install the widget, connect a platform, train your AI, invite the team, then go live.

30-menit setup

1
Aktifkan lisensi Anda

Masukkan kunci lisensi Anda di OpsIQ admin. Pergi ke Pengaturan, masukkan kunci lisensi yang diberikan untuk instalasi ini, dan klik Aktifkan. Anda harus melihat lencana "Aktif" hijau.

2
Atur identitas bisnismu

Pergi ke Pengaturan dan mengisi nama bisnis Anda, industri, zona waktu, mata uang baku, dan dukungan jam. Informasi ini digunakan oleh AI ketika menjawab pertanyaan pelanggan dan dengan analisis untuk laporan-sadar waktu.

3
Pilih penyedia AI

Pergi ke Konfigurasi AI dan pilih penyedia Anda. Pilihan: Claude (Anthropic), GPT-4o (OpenAI), Gemini (Google), atau Gok (xAI). Masukkan API kunci jika menggunakan kunci Anda sendiri, atau gunakan Managed AI jika tersedia pada rencana Anda. Klik "Uji koneksi" untuk memverifikasi.

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
Hubungkan platform Anda

Jika Anda menggunakan Shopify, WooCommerce, WHMCS, atau platform lain yang didukung, pergi ke Connectors, temukan platform Anda, masukkan kredensial, dan klik Uji Koneksi. Ini memberikan akses AI untuk memesan data, profil pelanggan, dan dukungan konteks.

6
Undang tim Anda

Pergi ke Tim, klik Undang, masukkan alamat email dan peran mereka (Pemilik, Admin Penuh, atau Agent). Agen hanya dapat mengakses departemen yang Anda arahkan kepadanya. Pemilik dan Administrator Penuh melihat semuanya.

Jalur tercepat (5 menit)

Langkah 1: Pasang widget

Salin snippet dari Situs Terhubung dan tempelkan di situs web Anda. Ini memberikan Anda pelacakan segera.

Langkah 2: Aktifkan AI

Pergi ke Konfigurasi AI, pilih penyedia, masukkan kunci, dan simpan. Percakapan AI kini aktif di situs web Anda.

Selesai

Anda sekarang memiliki pengunjung pelacakan dan percakapan AI. Anda dapat menambahkan tiket, CRM, dan konektor nanti.

Hari 2: Buatlah berguna

Tambah pengetahuan

Pergi ke Basis Pengetahuan dan tambahkan 5-10 AI menggunakan ini untuk menjawab pelanggan secara akurat.

Buat departemen

Pergi ke tiket dan membuat setidaknya 2 departemen (mis., "Sales" dan "Dukung") Atur anggota tim ke masing-masing.

Tulis prompt AI Anda

Pergi ke pelatihan AI dan menulis prompt AI Pelanggan yang menggambarkan bisnis Anda, nada, dan aturan eskalasi.

Uji percakapan

Buka situs web Anda dalam peramban pribadi dan chatting dengan AI sebagai pelanggan. Periksa apakah jawaban akurat dan nada benar.

Minggu 1: Bangun operasi Anda

Hubungkan email

Mengatur kotak surat (Gmail, IMAP, atau konektor penyedia) sehingga email pelanggan secara otomatis membuat tiket.

Atur jawaban otomatis

Aktifkan tiket auto- balas untuk departemen aman. Atur 2-menit penundaan sehingga manusia dapat campur tangan pertama.

Analisis Ulasan

Periksa Dashboard setiap hari. dan penjualan jika pelacakan tersambung.

Mulai CRM Anda

Buka AI CRM dan biarkan OpsIQ mengimpor kontak dari platform terhubung Anda. Tinjau papan pipa.

Bulan 1: Optimasi

Ulasan riwayat AI

Periksa setiap minggu. cari jawaban yang salah, pertanyaan yang tidak terjawab, dan kesempatan untuk menambahkan pengetahuan.

Tambah aturan proaktif

Buat aturan: jika pengunjung ada di halaman harga untuk 60+ detik, menampilkan pesan obrolan menanyakan apakah mereka butuh bantuan.

Buat konektor

Jika Anda menggunakan platform yang tidak memiliki konektor built-in, gunakan Konektor Builder untuk membuat satu.

Atur webhooks

Sambung OpsIQ ke alat internal Anda menggunakan webjacks outbound untuk tiket, chatting, dan acara penjualan.

Bisakah aku melewatkan AI dan hanya menggunakan pelacakan?+

Operator AI adalah opsional. OpsIQ bekerja sebagai analitik murni dan platform ticketing tanpa AI. Anda dapat mengaktifkan AI nanti ketika Anda siap.

Dapatkah saya melewatkan konektor dan menambahkan mereka nanti?+

Ya, konektor memperkaya AI dengan data spesifik platform, tapi OpsIQ bekerja tanpa mereka. Mulailah dengan pelacakan dan chatting, kemudian hubungkan platform ketika diperlukan.

Bagaimana jika aku belum punya website?+

Anda masih dapat menggunakan OpsIQ untuk tiket, CRM, dan kerjasama tim. Widget pelacakan adalah opsional. Tambahkan ketika situs web Anda siap.

Bagaimana aku tahu jika widget dipasang dengan benar?+

Kunjungi situs web Anda dalam peramban privat / penyamaran. Kemudian periksa OpsIQ Siaran langsung, kau harus melihat kunjunganmu muncul dalam. 15 detik. Jika tidak, periksa: (1) adalah snippet disisipkan dengan benar, (2) adalah kunci situs yang benar, (3) adalah ad blockers atau header CSP menghalangi script.

Mulai dari sini

Peta produk lengkap

OpsIQ bukan satu fitur. Ini adalah sebuah operator admin, widget situs, lapisan dukungan AI, sistem tiket / bantuan, CRM penuh dengan empat agen AI, suite Intelligence Site, platform konektor dengan pasar, dan permukaan pengembang. Berikut adalah setiap komponen yang dikandungnya.

Operator admin

Dashboard, feed langsung, log pengunjung, sesi, replay sesi, halaman utama, geointelligence, funnel inten, log acara, eksperimen A / B, pelacakan kesalahan JS, penjualan dan konversi, leads, AI CRM (pusat komando, kontak, perusahaan, kesepakatan, papan pipa, pelatihan kesepakatan, ramalan, prospek, urutan, siklus hidup, steward data, Bangun CRM saya, konfigurasi CRM, kesehatan CRM, CRM API), tiket, kotak masuk chat, aturan proaktif, survei CSAT, draf email, kotak surat, konfigurasinya AI, pelatihannya AI, sejarahnya AI, wawasan AI, basis pengetahuan, konektor, Connector Builder, pasar, situs terhubung, manajemen tim, kinerja tim, pengaturan, diagnostik, dan lisensi.

Pelanggan menghadap permukaan

Widget pelacak situs web (analitik suar + chat + tiket embed + search dasar pengetahuan), percakapan klien AI, portal pengiriman tiket, identitas pengunjung yang menangani, berkas uploads, widget survei CSAT, dan pengelola-menghadap pusat bantuan.

AI- Pertama CRM

Pusat perintah, kontak, perusahaan, perjanjian, papan pipa dengan drag dan -drop, Al menangani pelatihan (risiko sinyal, terbaik - tindakan, menang probabilitas, memprediksikan pendapatan, prospecting agen (SDR), automatically following-up urutan, lifecycle and retention management, data steward (down, perforenage, validate), bangun CRM, konfigurasi bahasa natural, CRM kesehatan, Trust Dial, pengelola, dan banyak program, API dengan webhooks.

Suite Intelligence site

Pelacakan situs otomatis, audit SEO teknis (kecepatan, ponsel, Core Web Vitals, SSL, redirects, structured data), audit konten (hitungan kata, pembacaan, kepadatan kata kunci, struktur judul), pencarian semantik yang didukung AI, pelacakan peringkat SERP di seluruh mesin, penelitian kata kunci dengan skor peluang, analisis dan pemantauan backlink, visualisasi grid SEO lokal, Google Business Profile sync (reviews, posts, Q&A, photos, insights), laporan terjadwal (harian/mingguan/bulanan), dan white-label. PDF keluaran untuk lembaga.

AI dan otomatisasi

Chat AI pelanggan (multi- provider: Claude, GPT-4o, Gemini, Gok), asisten AI admin, penggaris pengetahuan AI, auto- handoff dengan return yang dapat diatur, per- area kerja AI konfigurasi, dikelola AI dan BYOK Modes, budget token dan kontrol biaya, jejak audit sejarah AI, analisis wawasan AI, tiket triase AI, surat tilang dengan penundaan, menulis AI (terpisah prompt), dan admin copilot inbox.

Konektor dan integrasi

25+ pre- konektor bawaan (Shopify, WooCommerce, BigCommerce, Magento2PrestaShop, OpenCart, osCommerce, WordPress, WHMCS, Zendesk, Stripe, Amazon Sets, Postmark, Resend, SendGrid, Mailgun, Gmail, IMAP, Slack, Google Business Profile), Conektor Builder (no-code / AI- dibantu / full-code), generic OAuth flow dengan PKCE, pasar koneksi dengan distribusi berbayar, penandatanganan dan verifikasi konektor, SmartLookup tidak cocok, sebuah katalog besar dari definisi aksi HTTP yang ketersediaan bergantung pada instalasi konektornya, penerimaan, konfigurasi dan validasi, pengetahuan sync, dan prosedur proses kerja.

Platform pengembang

RESTAPI(Pengunjung, acara, tiket, kontak, pengaturan, konektor), OpenAPI spec,API manajemen kunci, kait web outbound (async, signed, retried, SSRF terjaga, otomatis-disable), EventsAPI bagi gangguan pada acara custom event, widget SDKdengan resolusi identitas, pemicu buku masak, kontrak aksi, konektor SDK, paket pasar, server-sisi SDKs (PHP, Node.js), WordPress plugin, dan WHMCS modul.

Pengaturan dan operasi

Identitas bisnis, konfigurasi AI setiap area kerja, pengaturan pelacakan, keamanan (HSTS, Kebijakan Permisions-, IP Blocking, perlindungan brute- force), RBAC (Pemilik / Agen / Penuh), manajemen tim dan undangan, kinerja tim, dashboard, pelacakan admin, sistem template email (registry-didorong, editor visual, variabel chip), desainer survei, pengetahuan domain, tiket emped konfigurasi, branding, data retention kebijakan, pengelolaan siklus penagihan (seumur hidup), standar mata, impor / ekspor, diagnostik, cron otomatisasi, dan zona.

Keamanan dan kepatuhan

Enterprise SSO (OIDC dengan verifikasi JWKS, provisioning JIT) SAML konfigurasi, GDPR/DSAR penanganan (export dan delete seluruh sistem), data memberantas per kontak, manajemen persetujuan, ruang kerja isolasi (strict query-layer scoping), jalur audit, pelacakan log masuk gagal, IP memblokir, membuat webhook tanpa batas SSRF penjaga, dan kebijakan penyimpanan data.

Jembatan penyedia

Mengelola AI proxied melalui OpsIQ penyedia URL, Panggilan penyedia Intelijen Situs, validasi lisensi, laporan kesehatan, PDF render, dan data exports, semua diarahkan melalui endpoint penyedia yang dikonfigurasi, bukan vendor langsung API panggilan dari server Anda.

Setiap halaman admin

Makau

Inti

Pusat perintah harian: penekanan lalu lintas, jumlah pengunjung hidup, ringkasan penjualan, dukungan kedalaman antrian, peringatan aktivitas AI, dan jalan pintas tindakan cepat.

Umpan hidup

Analisis

Arus pengunjung Real- time: halaman views, chat starts, form submission, dan bermaksud memberikan sinyal update setiap beberapa detik dengan negara, perangkat, dan filter referrer.

Log pengunjung

Analisis

Catatan kunjungan lengkap: perangkat, peramban, OS, negara, kota, referensi, params UTM, halaman pendaratan, identitas, dan riwayat seluruh pawai.

Sesi

Analisis

Jurnay- grup tampilan: halaman mengalir, waktu di halaman, kedalaman gulungan, jalur konversi, dan halaman keluar untuk setiap sesi pengunjung.

Pengulangan sesi

Analisis

Pemutaran waktu dari kejadian yang diambil: Gerakan mouse, klik, gulungan, transisi halaman, dan bentuk interaksi untuk diagnosis UX.

Halaman atas

Analisis

Peringkat kinerja halaman: kunjungan, waktu pertunangan, tingkat bouncing, konversi, dukungan interaksi, dan arah tren.

Geo intelijen

Analisis

Laporan geografis: gangguan negara / kota dengan peta, distribusi perangkat, pembagian peramban, sumber lalu lintas, dan penetrasi pasar.

Saluran masuk

Analisis

Perilaku bermaksud pelacakan: kunjungan harga, frekuensi kembali, browsing doc, dukungan interaksi, dan sinyal custom dengan probabilitas konversi.

Log kejadian

Analisis

Sejarah peristiwa yang dapat dicari: halaman melihat, acara suai, obrolan, pembelian, pengiriman formulir dengan metadata penuh dan penyaringan.

A / B experimen

Analisis

Pecah pengujian: membuat varian, mengalokasikan lalu lintas, mendefinisikan tujuan, mengukur signifikansi, dan menyatakan pemenang, semua dari dalam OpsIQ.

Galat JS

Analisis

Frontend error capture: pesan, jejak stack, browser terpengaruh, frekuensi, halaman yang terkena, dan pelacakan tren.

Penjualan

Penjualan

Penghasilan dashboard: perintah, pembaharuan, pengembalian dana, attrace oleh sumber, kinerja kampanye, perbandingan periode, dan analisis tren.

Petunjuk

Penjualan

Manajemen utama: mencetak, sumber atraksi, status CRM, rincian kontak, sinyal perilaku, dan routing pipa.

AI CRM

CRM

CRM penuh: pusat perintah, kontak, perusahaan, penawaran, papan pipa, pelatihan, prediksi, prospek, urutan hidup, pengurus data, dan kesehatan.

Tiket

Dukungan

Dukung kotak masuk: departemen, prioritas, pelacakan SLA, triase AI, auto- balas, catatan internal, lampiran berkas, penggabungan, dan manajemen status.

Kotak masuk percakapan

Dukungan

Percakapan langsung: Al dan manusia, handoff, kolaborasi, riwayat percakapan, identitas pelanggan, dan koleksi CSAT.

Draf email

Dukungan

Manajemen surel: inbound surat ke tiket, AI- bantuan komposisi jawaban, pemilihan template, dan konfigurasi kotak-surat.

Al config

AI

Setup provider: pilih Claude / GPT-4o /Gemini/ Gok, masukkan API kunci atau aktif dikelola AI, set model, suhu, dan anggaran token per area kerja.

Pelatihan AI

AI

Permintaan ijin: ubahan-menghadap dan mematuhi permintaan, aturan eskalasi, pedoman nada, topik dilarang, dan konfigurasi batas.

Sejarah AI

AI

Audit percakapan: log permintaan / respon penuh, penggunaan token, biaya per percakapan, penyedia, versi model, dan hasil resolusi.

Indentasi AI

AI

Analisis pola: pertanyaan umum, tingkat resolusi, frekuensi handoff, kepuasan oleh topik, dan pelatihan identifikasi kesenjangan.

Dasar Pengetahuan

AI

Isi pelatihan AI: artikel, masukan FAQ, dokumen produk, pengetahuan konektor, dan entri suai. Pencarian semantik dan kata kunci untuk pengdasar AI.

Konektor

Integrasi

Pusat Integrasi: memasang konektor, status kesehatan, inventaris aksi, manajemen kredensial, peramban pasar, dan Pembangun Konektor.

Situs yang tersambung

Pengaturan

Manajemen situs: pelacakan snippet, kunci situs, konfigurasi widget, pengaturan domain, dan isolasi area kerja per- situs.

Tim

Pengaturan

Manajemen pengguna: undang anggota, menetapkan peran (Pemilik / Agen Admin / Penuh), atur akses departemen, dan mengelola perizinan.

Penampilan tim

Pengaturan

Metrik Ops: waktu resolusi, beban kerja, kesesuaian SLA, CSAT oleh agen, tingkat terbuka kembali, jam sibuk, dan analisis tren.

Pengaturan

Pengaturan

Konfigurasi: identitas bisnis, pengaturan AI, pelacakan, keamanan, branding, penahanan, contoh email, penagihan, impor / ekspor, diagnosa, dan zona bahaya.

Lisensi

Pengaturan

Manajemen rencana: status lisensi, fitur rencana, metrik penggunaan, tanggal pembaruan, dan opsi upgrade / downgrade.

Mulai dari sini

Dipandu onboarding

Perjalanan yang sedang berlangsung mengubah instalasi baru menjadi sebuah pekerjaan OpsIQ area kerja dan dapat ditinggalkan dan dilanjutkan tanpa kehilangan kemajuan.

Layar produk
OnboardingOnboarding menunjukkan setiap area setup, saat ini negara dan tindakan berikutnya untuk menyelesaikan.Onboardingarea kerjaPROGRESS60%COMPLETED6BerikutnyaEdoHIDUP WORKSPACE VIEWLisensiValidasi lisensi produkSelesaiPenyedia AIPilih kunci penyedia dan ujiSelesaiApiIdentitas bisnis dan nadaSelesaiSitus webTambah widget situs dan instalBerikutnya1COMPLETE BASICSLisensi, merek, AI2CONNECT DATASitus dan konektor3VERIFY LAUNCHTim, email, cek
Onboarding menunjukkan setiap area setup, saat ini negara dan tindakan berikutnya untuk menyelesaikan.

Urutan yang direkomendasikan

  1. Lisensi: validasi lisensi dan konfirmasi ruang kerja aktif.
  2. Operator AI: pilih penyedia / model, masukkan kredensial dan jalankan tes koneksi. AI dapat dilewati jika area kerja pada awalnya akan menggunakan analitik dan tiket saja.
  3. Identitas bisnis: mengatur nama, industri, deskripsi, penggubah-menghadap nada dan rincian merek yang digunakan oleh widget dan AI.
  4. Konektor: memungkinkan paling tidak satu platform eksternal ketika OpsIQ membutuhkan perintah, pelanggan, tiket, email atau konteks platform lainnya.
  5. Situs dan widget: buat situs / area kerja, salin kunci situsnya dan verifikasi kunjungan pribadi - browser dalam Live Feed.
  6. Tim dan routing: undang admin / agen, buat departemen, atur routing email dan konfirmasi preferensi pemberitahuan.
  7. Pemeriksaan Go-live: test chat, a ticket, connector sync, cron, outbound email, webjacks and security headers.

Penyelesaian toko perjalanan setiap area kerja. Kembali ke Onboarding seharusnya menampilkan langkah-langkah yang selesai daripada memaksa restart.

Mulai dari sini

Aadmin navigasi dan permissions

The OpsIQ batang samping adalah permisional- sadar. Peta ini menjelaskan di mana setiap area operasional hidup dan mengapa halaman mungkin tidak terlihat kepada setiap administrator.

Layar produk
Navigasi OpsIQGrup batang sisi OpsIQ oleh area kerja; link individu muncul hanya ketika peran saat ini dapat menggunakannya.Navigasi OpsIQarea kerjaGROUPS8HalamanIjin berbasisSEARCHTersediaHIDUP WORKSPACE VIEWDukunganTiket, email, CSAT, pengetahuanBukaCRMKontak, baris pipa, penawaran, prospectingBukaAutomatisasiWorkflow, aturan, tujuanBukaKeamanan & PrivasiTinjau, audit, persetujuan, blokAdmin1PICK A GROUPCocok dengan batang sisi2CHECK ROLEArti tersembunyi dibatasi3USE PAGE HELPBuka bagian yang cocok
Grup batang sisi OpsIQ oleh area kerja; link individu muncul hanya ketika peran saat ini dapat menggunakannya.
Dukungan

Tiket, platform email tim, CSAT, Pusat Bantuan dan chatbot mengalir.

CRM

Penjualan harian muncul: CRM Home, Pusat Komando, kontak, pipa, perkiraan, lifecycle, prospecting, segmen, leaderboard, persetujuan, pengelola data, alat pertumbuhan dan aliran aktivitas.

Automatisasi

Bahkan, mengalir melalui aliran kerja, aturan hidup dan tujuan konversi.

Pemasaran

Oureach, pesan proaktif, pengumuman, Promosi Studio, Survey Studio, mendorong kampanye dan tur yang dipandu.

Analisis

Laporkan permukaan pertama - Analisis Hub, wawasan AI, penjualan, pelanggan, memimpin, corong, tes A / B, sesi diputar ulang, dashboard kustom dan laporan dijadwalkan - dengan pengunjung mentah, sesi, halaman, geografi dan catatan acara dalam bagian Data Raw.

Halaman standalone

Site Intelligence, Team Performance dan Feedback duduk di luar kelompok sebagai entri langsung.

Integrasi

Konektor, aksi dan pemicu, kotak surat, rancangan, pengaturan email, inbound titik akhir, outbound webhooks dan API kunci.

Keamanan & Privasi

Pengawasan keamanan, privasi dan kepatuhan, persetujuan kue, aktivitas audit, log masuk gagal, diblokir IPs dan JavaScript Kesalahan.

Pengaturan

Dasar-dasar workspace (umum, tim, situs, bahasa), lalu sub- bagian yang dapat diserap: AI Brain (instruksi, konfigurasi, evaluasi, sejarah), CRM Setup (pembangun, bidang kustom, mencetak angka, kesehatan), Data & Kesehatan (diagnosa, ekspor) dan Memulai (onboarding, bantuan).

Halaman peran tidak dapat dibuka disembunyikan dari panel samping. Halaman rencana saat ini tidak termasuk tetap terlihat dengan Tingkatkan tandai dan buka layar upgrade in- app.

Rute langsung masih diperiksa sisi server. Menyembunyikan sebuah link samping bukan batas keamanan: setiap aksi yang dilindungi harus melewati ijin dan pemeriksaan area kerja.

Analisis

Pusat analisis

Pusat Analisa membawa dukungan, obrolan, AI, pengunjung dan agen melaporkan ke satu ruang kerja yang disaring dengan hasil yang dapat diekspor.

Layar produk
Pusat analisisAnalisis Hub menunjukkan rentang tanggal, kartu metrik dan tab untuk Dukungan, Chat, AI, Pengunjung dan Pertunjukkan Agen.Pusat analisisarea kerjaTIKETS184AI RESOLVE63%CSAT4.7HIDUP WORKSPACE VIEWDukunganDibuat, ditutup, tertunda, SLATabObrolanHasil AI / manusia dan waktu penangananTabAIKepercayaan, umpan balik, penggunaan tokenTabAgenVolume, kecepatan dan kepuasanTab1CHOOSE DATESPrasetel atau gubahan2CHANGE TABDukungan ke Agen3EXPORTUnduh CSV
Analisis Hub menunjukkan rentang tanggal, kartu metrik dan tab untuk Dukungan, Chat, AI, Pengunjung dan Pertunjukkan Agen.

Filter dan kontrol

  • Gunakan suatu preset atau gubahan dari / ke kisaran, kemudian Segar untuk membangun kembali setiap kartu dan bagan untuk periode yang sama.
  • Ekspor CSV mengekspor tampilan analitis aktif daripada cuplikan layar.
  • Ruang kerja scoping otomatis; situs yang berubah mengubah data yang mendatet.

Apa setiap langkah tab

  • Dukungan: tiket dibuat/ditutup/bertahan, jawaban pertama, resolusi, kontak pertama resolusi SLA dan prioritas / departemen / status kerusakan.
  • Obrolan: sesi dimulai, resolusi AI, eskalasi, ditinggalkan, menangani waktu, pesan per sesi, dan Al / manusia / semua CSAT.
  • AI: kepercayaan rata-rata, tingkat rendah kepercayaan diri, akurasi tiga kali, umpan balik, defleksi pengetahuan, penggunaan token / cache, dan item yang perlu direview.
  • Pengunjung: lalu lintas dan kecenderungan keterlibatan untuk periode yang dipilih.
  • Agen: per-agen beban kerja, kecepatan, penutupan dan tindakan kepuasan.

Gunakan Analytics Hub untuk tinjauan tim; gunakan pengulas khusus Pengunjung, Tiket, CSAT, Sejarah AI dan Performance pages ketika anda memerlukan penyelidikan tingkat rekaman.

Analisis

Dashboard

Dashboard adalah pusat komando harian anda, yang menunjukkan lalu lintas, penjualan, muatan dukungan, aktivitas AI, dan indikator konversi dalam satu pandangan.

Makau
Timpa dashboardLayar Overview yang dipimpin oleh OpsIQ Panel kecerdasan AI (dengan singkat Harian, Peringatan Cerdas, Forcast), tibin widget KPI dan suatu widget lalu lintas tujuh hari, ditambah kendali tata letak Reset.Pinggiranarea kerjaOPSIQINTELLIGENCEPilih analisis dan OpsIQ menulisnyaSingkat harianPeringatan cerdasRadarReset tata letakVISISTORS HARI INI2,481+12%PENDAPAT$8. 2k+5%OPEN TIKET143 SLALalu Lintas 7 hari1AI-FIRSTOpsIQ Panel intelijen2WIDGETSubin KPI yang anda atur3ANDAAtur ulang tata letak kapan saja
Layar Overview yang sesungguhnya: OpsIQ Panel intelijen di bagian atas (memilih analisis dan menuliskannya) di atas widget KPI Anda mengatur sendiri.

Kartu Dashboard menjelaskan

Tamu langsung

Jumlah orang di website Anda saat ini. 15 detik (dapat diatur). Pengunjung adalah "aktif" jika mereka memuat sebuah halaman dalam threshold aktif (baku: 90 detik).

Tamu unik

Berapa banyak orang yang berbeda mengunjungi situs web Anda dalam rentang tanggal terpilih. OpsIQ Mengidentifikasi pengunjung dengan kombinasi dari sidik jari peramban, kue, dan (jika tersedia) identitas dikonfirmasi.

VSBARU KEMBALI

pengunjung baru melihat situs anda untuk pertama kalinya kembali pengunjung telah terlihat sebelumnya rasio yang tinggi kembali berarti konten anda membawa orang kembali. rasio pengembalian yang sangat rendah mungkin berarti anda tidak menyimpan bunga.

Laju bounce

Persentase pengunjung yang meninggalkan setelah melihat hanya satu halaman, tingkat bouncing di atas 70% pada halaman pendaratan biasanya berarti halaman tidak memenuhi harapan pengunjung, konten yang salah, beban lambat, atau pengalaman mobile yang buruk.

Waktu rata-rata pada halaman

Berapa lama waktu yang dihabiskan pengunjung pada setiap halaman rata-rata. 10 detik) pada halaman isi menyarankan isi tidak terlibat. Sangat lama waktu di halaman checkout mungkin menunjukkan kebingungan.

Ancaman diblokir

IPalamat yang OpsIQ teridentifikasi sebagai berpotensi berbahaya berdasarkan penilaian ancaman, upaya kasar, atau blok manual. Klik untuk melihat diblokir IPs daftar.

Penjualan hari ini / minggu ini / bulan ini

Pendapatan dari sumber penjualan yang terhubung (Shopify, WooCommerce, Stripe, dsb.). Jika penjualan menunjukkan nol, periksa apakah konektor platform Anda terhubung dan sinkronisasi.

Grafik trad

Grafik baris yang menunjukkan jumlah pengunjung selama jangkauan kencan terpilih. Carilah pola: lonjakan lalu lintas (kampanye, tekan menyebutkan), dips (akhir pekan, liburan), dan kecenderungan berkelanjutan.

Sumber utama

Dari mana pengunjung Anda berasal: langsung, Google, media sosial, kampanye email, situs referensi. Gunakan ini untuk memahami saluran pemasaran mana yang bekerja.

Peramban Top

Chrome, Safari, Firefox, Edge, dan yang lainnya. jika peramban memiliki tingkat bouncing yang luar biasa tinggi, Anda mungkin memiliki CSS atau JavaScript Masalah kompatibilitas.

Peta panas Hourly

Jaringan yang menunjukkan aktivitas pengunjung setiap jam dan hari dalam seminggu. Gunakan ini untuk menentukan kapan jadwal pergantian dukungan, kapan mengirim pengumuman, dan kapan harus menjalankan promosi.

Tamu baru-baru ini

Beberapa pengunjung terakhir dengan negara, halaman, perangkat, dan sumber yang berguna untuk pemeriksaan cepat selama kampanye.

Menggunakan filter jangkauan tanggal

Klik pemetik tanggal di kanan atas Dashboard. Sebelumnya: Hari ini, Kemarin, Terakhir7hari, Terakhir30hari, bulan ini, Bulan lalu, kisaran custom. Semua dashboard kartu dan grafik update ketika Anda mengubah jangkauan. Jangkauan tanggal berada dalam zona waktu yang dikonfigurasi (diatur dalam Pengaturan).

Contoh yang berhasil

Penyelidikan lonjakan tingkat bounce

Skenario:
Tingkat bouncing Anda melompat dari 45% ke 78% Apa yang terjadi?
Apa yang harus dilakukan:

Periksa: (1) Apakah perubahan halaman pendaratan tertentu? ke Halaman Atas dan mengurutkan dengan laju bouncing. (2Apakah kampanye mengirim lalu lintas ke halaman yang salah? Periksa Sumber Atas untuk referensi baru.3) Apakah situs tersebut rusak? Periksa kerusakan peramban untuk laju bouncing seluler. (4Periksa para Threats counter dan rincian pengunjung untuk pola yang mencurigakan.

Zero visers on dashboard

Skenario:
Dashboard menunjukkan 0 pengunjung langsung meskipun situs web Anda macet.
Apa yang harus dilakukan:

Periksa: (1) Apakah widget pelacakan terpasang? Lihat source code situs anda dan cari OpsIQ script. (2) Apakah kunci situs benar? Bandingkan data-site- kunci dalam skrip dengan kunci dalam Situs Terhubung. (3) Apakah CDN atau cache melayani sebuah halaman basi tanpa skrip? Bersihkan singgahan CDD Anda. (4) Apakah sebuah ad blocker atau header CSP menghalangi skrip? Periksa konsol peramban untuk permintaan yang diblokir.

Membaca peta panas jam

Skenario:
Peta sarungmu menunjukkan aktivitas berat antara jam 10: 00-2 pada hari kerja tapi tidak ada di akhir pekan.
Apa yang harus dilakukan:

Ini adalah pola lalu lintas B2B pengunjung Anda bekerja profesional browsing selama jam kerja.1) Jadwal staff dukungan untuk jam kerja. (2) Kirim kampanye email Selasa - Kamis pagi. (3) Jendela pemeliharaan akhir pekan aman. (4) Pertimbangkan menawarkan live chat hanya selama jam puncak.

Lalu lintas dari sumber yang tidak diketahui

Skenario:
Anda melihat lonjakan mendadak dari 500 pengunjung dalam satu jam dari rujukan yang tidak diketahui.
Apa yang harus dilakukan:

Pergi ke Pengunjung dan saring dengan jendela waktu. Periksa: (1Lihat durasi sesi, halaman-halaman yang dilihat, dan keragaman peramban.2Jika nyata, halaman berapa yang mereka mendarat di?3) Periksa referer URL Seseorang mungkin telah terhubung dengan Anda dari Reddit, Hacker News, atau blog populer.4) Jika itu adalah lalu lintas robot, periksa Ancaman dan pertimbangkan memblokir IP Jangkauan.

Mengapa pengunjung saya menghitung berbeda dari Google Analytics?+

OpsIQ menghitung pengunjung secara berbeda. Menggunakan pencetakan jari dan cookies peramban, sedangkan GA menggunakan model cookie lain. Bot penyaringan, laju iklan blocker, dan urutan pemuatan naskah juga dapat menyebabkan perbedaan. 10-20% Perselisihan itu normal.

Dapatkah saya memasukkan dashboard dalam alat lain?+

Dasbor dirancang untuk OpsIQ Admin, untuk laporan eksternal, gunakan REST API untuk menarik data analitik dan menunjukkannya pada dashboard atau alat BI.

Apa arti dari "ancaman" itu?+

Itu dihitung IP alamat yang OpsIQ telah ditandai atau diblokir berdasarkan penilaian ancaman, pengulangan log masuk gagal, atau blok manual. Klik counter untuk melihat rincian dan mengelola blok.

Analisis

Log pengunjung

Log Pengunjung menunjukkan setiap kunjungan ke situs web yang telah dilacak. Setiap baris adalah satu halaman dari satu pengunjung. Gunakan itu untuk menyelidiki perilaku pengunjung individu, menemukan lalu lintas kampanye, dan mendiagnosa masalah pelacakan.

Log pengunjung
Log pengunjungTabel pengunjung dengan filter bar (tanggal, pencarian IP/ email / kota, sumber, perangkat) dan kolom untuk IP/ email, lokasi, sumber, perangkat dan waktu, dengan baris ancaman ditandai.Log pengunjungyoursite.com7 hariCari IP, email, kota...Sumber ▾Perangkat ▾IP # EMAILLOKASISUMBERPERANGKATKETIKA[email protected]USgoogleDesktop2m41.62.10.4InggrisdirectPonsel6m[email protected]DEutm: iklanPonsel14m203.0.113.9NGreferralDesktopthreat1–25 dari 3,402Sesi →1FILTERTanggal · cari · sumber · perangkat2REAL COLUMNSIP/email · lokasi · perangkat · ancaman3DRILL INBuka sesi penuh
Log Pengunjung yang sebenarnya: saringan berdasarkan tanggal, pencarian, dan perangkat, kemudian baca setiap kunjungan oleh IP/ email, lokasi, sumber, perangkat dan waktu, ancaman ditandai dalam merah.

Apa yang setiap baris menunjukkan

IP alamat

Pengunjung IP alamat. anonymocated if IP penganonim diaktifkan dalam Pengaturan. Klik untuk melihat semua kunjungan dari ini IP.

Negara dan kota

Terdeteksi dariIP alamat menggunakan data GeoIP. Membutuhkan basis data MaxMind GeoLite2 atau Cloudflare geo header. Tampilkan "Tak dikenal" jika GeoIP tidak dikonfigurasi.

Halaman URL

Halaman yang dimuat pengunjung. Klik untuk melihat penuh URL. URLs yang dipotong di meja tampilan.

Referer

Dimana pengunjung datang dari sebelum mendarat di situs Anda. "Langsung" berarti tidak ada rujukan (penanda, mengetik URLs, beberapa link aplikasi).

Perangkat dan peramban

Tipe perangkat pengunjung (desktop, mobile, tablet) dan peramban (Chrome, Safari, Firefox, dll). Diparkir dari header User- Agent.

Tanggal dan waktu

Ketika halaman tersebut dimuat, dalam zona waktu yang dikonfigurasi Anda.

Identitas pelanggan

Bila pengunjung diidentifikasi (via tanda identitas atau login), nama atau email mereka muncul. Sebaliknya menunjukkan sebagai anonim.

Filter

Jangkauan tanggal

Penunjukan filter ke waktu tertentu. Baku: terakhir 7 hari.

Cari

Cari oleh IP alamat, halaman URL, referer, negara, atau email pelanggan.

Sumber

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

Perangkat

Filter oleh Desktop, Mobile, atau Tablet.

Hanya baru

Tampilkan hanya pertama kali pengunjung yang belum pernah terlihat sebelumnya.

Contoh yang berhasil

Cari pengunjung dari kampanye tertentu

Skenario:
Anda meluncurkan kampanye Google Ads dengan parameter UTM utm_source=google&utm_medium=cpc&utn_campaign=summer-sale. Bagaimana cara menemukan pengunjung tersebut?
Apa yang harus dilakukan:

Dalam Log Pengunjung, gunakan ruas pencarian dan ketik "penjualan musim panas". Referer pemeriksaan pencarian URLs dan halaman URLs, jadi parameter UTM akan cocok. Anda juga dapat menyaring oleh Sumber = Dibayar untuk mempersempit lebih lanjut.

Cari pelanggan yang melaporkan masalah

Skenario:
Seorang pelanggan mengirim email mengatakan "halaman cek Anda rusak kemarin sekitar jam 3 sore". Bagaimana Anda menemukan sesi mereka?
Apa yang harus dilakukan:

Cari dengan alamat surel mereka di Log Pengunjung. Jika mereka log masuk, identitas mereka akan muncul. Atur rentang tanggal ke kemarin. Cari kunjungan untuk memeriksa halaman sekitar jam 3 sore. Klik sesi mereka untuk melihat aliran halaman penuh dan sebarang JavaScript Kesalahan.

Mendeteksi sebuah pemukul loop atau scraper

Skenario:
Anda melihat IP alamat memiliki 500+ kunjungan dalam satu jam, semua ke halaman yang sama.
Apa yang harus dilakukan:

Ini seperti robot, scraper, atau naskahnya rusak.IP Cek: (1) Apakah semua kunjungan ke halaman yang sama?2) Apakah agen pengguna robot yang dikenal? (3) Apakah durasi sesi selalu 0 Jika dikonfirmasi sebagai robot, pergi ke Keamanan dan blok IP.

Log pengunjung vs Sesi vs Siaran Langsung

Log pengunjung

Satu baris per halaman terlihat.

Sesi

Halaman grup memandang perjalanan. Satu baris per sesi kunjungan. Terbaik untuk: pemahaman aliran pengguna, durasi sesi, mengidentifikasi tapak konversi.

Umpan hidup

Aktivitas waktu realite. menunjukkan pengunjung saat ini berada di situsmu terbaik untuk: memantau kampanye yang sedang berlangsung, melihat para pengunjung dengan maksud tinggi, menonton peluang dukungan.

Mengapa saya melihat kunjungan saya sendiri di log?+

OpsIQ tracks semua kunjungan secara baku. Untuk mengecualikan lalu lintas Anda sendiri, tambahkan IPalamat ke yang tidak termasuk IPs daftar dalam Pengaturan > Pelacakan.

Mengapa pengunjung menunjukkan "Tak Dikenal" negara?+

Pencarian GeoIP membutuhkan baik Cloudflare tajuk geografis (otomatis bila memakai Cloudflare) atau sebuah berkas basis data MaxMind GeoLite2. Periksa Pengaturan > GeoIP Path untuk memastikan file basis data ada dan dapat dibaca.

Berapa lama data pengunjung disimpan?+

Data pengunjung disimpan untuk periode retensi yang dikonfigurasi dalam Pengaturan (baku: 90 hari). Setelah itu, catatan lama otomatis dibersihkan oleh pekerjaan retention cron.

Analisis

Sesi

Kelompok sesi berbagai halaman melihat dari orang yang sama ke dalam satu perjalanan. Sementara Log Pengunjung menunjukkan kelebihan halaman, Sessions menunjukkan bagaimana orang-orang bergerak melalui situs web Anda dari mendarat ke keluar.

Sesi
SesiTabel Log Sesi dengan IP, negara, perangkat, sumber, durasi dan kolom halaman, dan baris ancaman ditandai.Sesiyoursite.comNegara (NG)Log SesiIP (S)NEGARAPERANGKATSUMBERMASA BERLANGKAHalaman41.62.10.4BritaniaDesktopgoogle3m 12s6102.89.6.2NGPonseldirect1m 05s388.21.4.9DEDesktoputm: iklan7m 48s11203.0.113.9ASPonselreferral0m 42s21SESSION LOGPerjalanan berkelompok2COLUMNSNegara · perangkat · sumber · durasi3THREATSesi resiko ditandai
Log Sesi sebenarnya: setiap perjalanan pengunjung sebagai baris (IP, negara, perangkat, sumber, durasi dan halaman) dengan sesi berisiko ditandai merah.

Bagaimana sesi bekerja

Sebuah sesi dimulai ketika pengunjung memuat halaman pertama mereka. Ini terus saat mereka menavigasi ke halaman lebih lanjut. Sesi berakhir ketika pengunjung tidak aktif untuk periode timeout sesi (baku: 30 menit) atau menutup browser mereka. Orang yang sama kembali setelah timeout menciptakan sesi baru.

Apa yang ditunjukkan setiap sesi

Halaman pertama

Halaman pendaratan, tempat pengunjung masuk ke situs anda. Ini memberitahu anda isi mana yang menarik perhatian orang.

Halaman terakhir

Halaman keluar, tempat pengunjung kiri, jika halaman keluar sering halaman harga, pengunjung mungkin membandingkan Anda dengan pesaing.

Cacah halaman

Berapa banyak halaman yang dilihat pengunjung dalam sesi ini. biasanya halaman berarti lebih banyak keterlibatan, tetapi juga dapat berarti pengunjung hilang.

Durasi

Total waktu dari halaman pertama ke aktivitas terakhir. Sesensions dengan 0 detik adalah bounces (tampilan satu halaman, tidak ada interaksi lebih lanjut).

Sumber

Sumber lalu lintas untuk sesi ini (Langsung, Google, sosial, referensi, dll).

Negara

Terdeteksi negara dari pengunjung IP alamat.

Lompat

Apakah pengunjung pergi setelah melihat hanya satu halaman. Sesi Bounced memiliki indikator merah.

Konversi

Apakah pengunjung menyelesaikan acara konversi yang dilacak (pembelian, pendaftaran, formulir pengiriman) selama sesi ini.

Filter

Cari

Cari oleh IP, email, halaman URL, atau referensi dalam sesi.

Tipe

Filter oleh pengunjung baru (sesi pertama) atau Pengunjung Kembali.

Sumber

Filter oleh sumber lalu lintas.

Negara

Filter per negara untuk melihat sesi dari daerah tertentu.

Ancaman / Bergantung

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

Contoh yang berhasil

Profil sebuah pelanggan bernilai-tinggi

Skenario:
Seorang pelanggan baru saja melakukan pembelian besar, kau ingin memahami perjalanan mereka sebelum membeli.
Apa yang harus dilakukan:

Cari email mereka dalam Sessions. Lihat semua sesi mereka: (1) Berapa kali mereka mengunjungi sebelum membeli?2Halaman mana yang mereka lihat?3) Apakah mereka menggunakan chatting atau membuka tiket?4) Berapa waktu total dari kunjungan pertama sampai pembelian? ini memberitahu Anda perjalanan membeli yang khas untuk pelanggan bernilai tinggi.

Mendeteksi login dari lokasi baru

Skenario:
Seorang pelanggan biasanya log in dari Nigeria tapi Anda melihat sesi dari Rusia.
Apa yang harus dilakukan:

Cari email pelanggan dalam Sessions, Bandingkan negara sesi baru. jika sebuah sesi tiba-tiba muncul dari negara yang tidak biasa, itu bisa menjadi perjalanan yang sah atau akun yang dikompromikan.1) Apakah ada percobaan log masuk yang gagal sebelum sukses? (2) Apakah IP tanda untuk tinjauan jika mencurigakan.

Apa perbedaan antara sesi dan pengunjung?+

Pengunjung adalah seseorang (atau browser). Sebuah sesi adalah satu kunjungan dari orang itu. pengunjung yang sama dapat memiliki banyak sesi dari waktu ke waktu. sesions berakhir setelah periode istirahat.

Bagaimana OpsIQ mengidentifikasi kedatangan pengunjung?+

OpsIQ menggunakan kombinasi dari cookies, peramban sidik jari, dan tanda-tanda identitas yang dikonfirmasi.

Analisis

Umpan hidup

The Live Feed menunjukkan pengunjung saat ini di situs web Anda secara real time. 15 detik (dapat diatur). Gunakan itu selama kampanye, peluncuran produk, dan periode dukungan sibuk untuk melihat apa yang terjadi sekarang.

Umpan hidup
Umpan hidupArus aktivitas waktu yang nyata menunjukkan jumlah pengunjung online- dan feed dari aksi pengunjung baru-baru ini oleh negara.Umpan hidupyoursite.com37pengunjung online sekarangAktivitas langsungsekarangAS /pricing2sInggris5sDitambahkan ke gerobak9sCA · pendaftaran selesai1RIGHT NOWLihat siapa yang ada di situs2AUTO-REFRESHMemperbarui setiap 15s3AKTIFLompat ke dalam obrolan langsung
Lihat siapa yang ada di situs Anda kedua ini dan apa yang mereka lakukan, menyegarkan secara otomatis setiap 15 detik.

Bagaimana cara kerjanya

Jajak pendapat Pi Hidup pada server Anda pada interval penyegaran yang dikonfigurasi. Tiap baris menunjukkan pengunjung saat ini di situs: halaman mereka, negara, perangkat, sumber, durasi sesi, dan jumlah halaman. Warna hijau menunjukkan aktivitas baru sejak segarkan terakhir. Klik baris tamu untuk melihat rincian sesi penuh mereka.

Pengaturan

Interval Segarkan

Seberapa sering pemutakhiran feed langsung. Baku: 15 detik.lower nilai (5-10s) memberikan pemutakhiran lebih cepat tetapi menggunakan lebih banyak sumber daya server. Nilai lebih tinggi (30-60s) lebih mudah pada server tapi kurang real-time.

Ambang aktif

Berapa lama pengunjung dianggap "aktif" setelah halaman terakhir beban. Baku: 90 Jika pengunjung memuat halaman dan kemudian membacanya untuk 2 menit tanpa mengklik, mereka menghilang dari live feed setelah ambang batas.

Tombol jeda

Klik Jeda untuk menghentikan segarkan otomatis. Berguna bila Anda ingin membaca rincian tanpa daftar memutakhirkan. Klik Lanjutkan ulang untuk memulai ulang.

Contoh yang berhasil

Spot hot lead selama kampanye

Skenario:
Seorang pengunjung baru saja melihat homepage anda, kemudian fitur, lalu harga, dan sekarang ada di halaman kasir.
Apa yang harus dilakukan:

Ini adalah perilaku yang sangat baik.1) Klik pengunjung untuk melihat sesi mereka. (2) Jika mereka mulai mengobrol, AI akan memiliki konteks perjalanan penuh mereka. (3Jika mereka pergi tanpa membeli, mereka menjadi memimpin dalam halaman Leads.4) Pertimbangkan membuat aturan proaktif untuk menampilkan pesan obrolan ketika pengunjung mencapai checkout.

Terlalu banyak pengunjung dari IP yang sama

Skenario:
Anda lihat 20 pengunjung dari yang sama IP alamat, semua pada halaman yang berbeda.
Apa yang harus dilakukan:

Ini bisa jadi: (1Sebuah kantor dengan internet berbagi. periksa apakah kunjungan itu terlihat seperti manusia asli (halaman berbeda, jangka panjang sesi yang masuk akal).2) Sebuah bot atau scraper.0-1detik) atau memukul halaman secara sistematis. (3Jika Anda menjalankan tes otomatis, tidak termasuk IP dari pelacakan.

Mengapa siaran langsung menunjukkan 0 pengunjung ketika situs saya memiliki lalu lintas?+

Periksa: (1) Apakah skrip widget terpasang di situs Anda? (2) Apakah kunci situsnya benar? (3) Apakah ambang batas aktif berlalu? (4) Apakah pengunjung menggunakan blocker iklan agresif yang menghalangi naskah pelacakan?

Dapatkah saya menyaring feed hidup oleh negara atau perangkat?+

Siaran langsung menunjukkan semua pengunjung aktif. Untuk tampilan tersaring, gunakan Log Pengunjung atau Halaman Sessions dengan opsi filter mereka. feed live secara sengaja sederhana untuk pemantauan waktu.

Analisis

Halaman atas

Halaman Atas menunjukkan halaman mana yang paling banyak dikunjungi di situs web Anda. Ini jajaran berdasarkan kunjungan, keterlibatan, konversi, dan aktivitas dukungan. Gunakan untuk mengidentifikasi konten terbaik Anda, temukan halaman-halaman bawah, dan temukan halaman yang menghasilkan pertanyaan-pertanyaan dukungan.

Halaman atas
Halaman atasDaftar peringkat halaman yang paling dikunjungi dengan batang kunjungan horisontal dan jumlah.Halaman atasyoursite.comHalaman yang dikunjungi/pricing3,402/2,910/docs1,740/blog/seo-guide980/signup6401RANKEDHalaman yang dikunjungi2SIGNALSKunjungan & konversi3FINDHalaman yang drive tiket
Halaman Anda diperingkat dengan lalu lintas dan keterlibatan, sehingga Anda dapat melihat konten atas dan halaman yang menghasilkan dukungan.

Apa yang ditunjukkan setiap halaman

Halaman URL

Penuh URL path. Serupa halaman (misalnya, varian produk) dikelompokkan jika pengelompokan diaktifkan.

Tampilan

Total jumlah kali halaman ini dimuat dalam jangkauan tanggal yang dipilih.

Tamu unik

Berapa banyak orang yang berbeda melihat halaman ini (seseorang melihat halaman yang sama dua kali dihitung sebagai 1 Unik).

Laju bounce

Persentase pengunjung yang meninggalkan situs Anda setelah melihat halaman ini. Tinggi bouncing pada halaman pendaratan = masalah. High bounce on "terima kasih" halaman = normal.

Rata-rata waktu

Berapa lama waktu yang dihabiskan pengunjung pada halaman ini rata-rata. Sangat pendek = tidak membaca. sangat panjang pada halaman formulir = kebingungan.

Percakapan dimulai

Berapa banyak percakapan obrolan dimulai dari halaman ini. Percakapan tinggi dimulai di halaman produk berarti deskripsi produk mungkin tidak jelas.

Tiket dukungan

Berapa banyak tiket dukungan yang dibuat oleh pengunjung yang berada di halaman ini. Jumlah tiket tinggi = potensi UX atau masalah isi.

Contoh yang berhasil

Cari halaman yang mendukung kandar pertanyaan

Skenario:
Tim pendukung Anda terus mendapatkan pertanyaan tentang pengiriman.
Apa yang harus dilakukan:

Urutkan Halaman Atas dengan "Tiket Dukungan" atau "Chat mulai" menurun. Cari produk atau halaman pengiriman dengan jumlah yang tinggi. Halaman dengan banyak pertanyaan dukungan mungkin memiliki informasi yang tidak jelas. Perbaiki konten halaman dan pantau apakah dukungan pertanyaan berkurang.

Cari halaman dengan tingkat keluar tinggi

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

Isih berdasarkan tingkat ketinggalan menurun. Abaikan halaman yang secara alami merupakan titik keluar (halaman terima kasih, halaman konfirmasi). Fokus pada halaman yang harus membuat pengunjung tetap tertarik: halaman produk, harga, fitur. Ini membutuhkan panggilan-ke-aksi atau isi yang lebih jelas.

Mengapa halaman menunjukkan 0 melihat meskipun aku tahu itu mendapat lalu lintas?+

Periksa: (1) Apakah widget pelacakan terpasang pada halaman tertentu? aplikasi single-page mungkin tidak melihat halaman Fire Page pada perubahan rute. (2) Apakah halaman tersebut dikecualikan dalam pengaturan pelacakan? (3) Apakah CDN melayani versi cached tanpa skrip pelacakan?

Analisis

Geo intelijen

Geo Intelligence menunjukkan dari mana pengunjung Anda berasal dari negara, kota, perangkat, dan sumber. Gunakan itu untuk memahami pasar geografis Anda, memutuskan pada dukungan bahasa, rencana pemasaran regional, dan mendeteksi pola lalu lintas yang mencurigakan.

Geo
Geo intelijenPeta lokasi pengunjung di samping peringkat per- negara.Geo intelijenyoursite.comPengunjung oleh lokasiASBritaniaDECANG1MARKETSNegara, kota, perangkat2PLAN& Wilayah Bahasa3WATCHLalu lintas yang aneh.
Dari mana pengunjung Anda berasal (oleh negara, kota dan perangkat) untuk ukuran pasar dan tempat lalu lintas yang tidak biasa.

Apa yang kau lihat

Bagan baris atas negara

Negara-negara atas peringkat dengan jumlah pengunjung. Klik sebuah negara untuk mengebor ke kota-tingkat data.

Donat negara

Gangguan visual lalu lintas negara demi negara, hampir semua persentase.

Tabel penuh negara

Setiap negara dengan pengunjung di periode yang dipilih, jumlah pengunjung menunjukkan, jumlah sesi, tingkat bouncing, dan tingkat konversi.

Kota bor-bawah

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

Bagaimana deteksi GeoIP bekerja

OpsIQ Mendeteksi lokasi pengunjung dalam dua cara: (1) Cloudflare Geo header, Jika situs Anda berada di belakang Cloudflare, deteksi negara otomatis dan akurat. (2) Basis data MaxMind GeoLite2. Unduh basis data gratis dan konfigurasi lokasi dalam Pengaturan. Deteksi tingkat-kota memerlukan basis data GeoLite2- City, bukan hanya basis data Negara.

Lalu lintas VPN dan proxy

Pengunjung menggunakan VPN akan muncul dari lokasi server VPN, bukan lokasi asli mereka. Ini adalah desain. OpsIQ tidak dapat dan tidak boleh mencoba untuk memotong VPNs. Jika anda melihat pola negara yang tidak biasa, pertimbangkan bahwa 10-20% pengunjung mungkin menggunakan VPN.

Contoh yang berhasil

Lalu lintas negara yang tak terduga

Skenario:
Anda menjalankan bisnis AS - hanya tapi 30% lalu lintas adalah dari India.
Apa yang harus dilakukan:

Periksa: (1Lihat durasi sesi dan halaman yang dilihat.2) Apakah mereka menemukan Anda melalui Google? periksa rujukan. (3) Mungkinkah mereka menjadi pelanggan potensial di pasar baru? jika lalu lintas asli dan terlibat, pertimbangkan menambahkan harga India- spesifik atau konten.

Memutuskan pada dukungan bahasa

Skenario:
Kau ingin tahu apa kau harus menerjemahkan situsmu ke Spanyol.
Apa yang harus dilakukan:

Jika negara-negara berbahasa Spanyol (Spanyol, Meksiko, Kolombia, Argentina, dan sebagainya) mewakili lebih dari 10% Translasi juga layak dipertimbangkan.

Perencanaan pergeseran dukungan daerah

Skenario:
Kau harus memutuskan waktu dukungan tim untuk zona waktu yang berbeda.
Apa yang harus dilakukan:

Gunakan peta panas jam (di Dashboard) digabungkan dengan Intelijen Geo. Jika 40% lalu lintas Anda adalah dari Eropa dan 35% Dari AS, Anda perlu cakupan untuk kedua zona waktu.

Negara dengan kunjungan tapi tidak ada perintah

Skenario:
Jerman menunjukkan 500 pengunjung bulan ini tapi nol penjualan.
Apa yang harus dilakukan:

Selidiki: (1Mungkin hargamu tidak kompetitif untuk pasar itu.2Periksa apakah halaman pengirimanmu menyebutkan Jerman.3- Apakah checkout Anda tersedia di EUR?4) Apakah pengunjung ini dari satu sumber yang mungkin lalu lintas bawah arah?

Mengapa pengunjung menunjukkan "Tak Dikenal" negara?+

GeoIP tidak dikonfigurasi. Salah satu set up Cloudflare (yang menambahkan header geo secara otomatis) atau mengunduh basis data MaxMind GeoLite2 dan mengatur path berkas dalam Pengaturan > GeoIP Path.

Dapatkah saya memblokir lalu lintas dari negara tertentu?+

OpsIQ tidak memblokir oleh negara. Gunakan server web anda atau Cloudflare Aturan firewall untuk negara-berbasis memblokir.OpsIQ fokus pada visibilitas, bukan akses kontrol di tingkat jaringan.

Analisis

Saluran masuk

The Intent Funnel mengklasifikasikan sesi pengunjung dengan apa yang mereka tampaknya akan coba lakukan: browse, search, compare, bedding, buy, get support, or leave. Gunakan itu untuk memahami keseimbangan niat pada situs Anda dan mengidentifikasi di mana pengunjung drop off.

Saluran masuk
Saluran masukSebuah corong dari Ramban ke Riset to Compare to Buy dengan jumlah, ditambah dukungan dan meninggalkan chip.Saluran masukyoursite.comRamban 8,200Penelitian 4,100Bandingkan 1,650Beli 520Dukung 6%Meninggalkan 11%1CLASSIFYApa yang pengunjung inginkan2STAGESRamban yang akan dibeli3PERBAIKICari drop-off
Biji diklasifikasikan oleh maksud (browse, penelitian, perbandingan, membeli) sehingga Anda dapat melihat persis di mana orang drop off.

Kategori inten

Meramban

Pengunjung dengan santai melihat-lihat sesi pendek, beberapa halaman, tidak ada tujuan tertentu terdeteksi.

Meneliti

Pengunjung membaca halaman produk / fitur, dokumen, atau isi blog. Waktu lama pada halaman, beberapa halaman konten.

Membandingkan

Pengunjung melihat harga, perbandingan rencana, atau tabel fitur.

Membeli

Pengunjung pada checkout, cart, atau signup pages.

Pendukung... mencari

Pengunjung pada halaman bantuan, halaman kontak, atau memulai obrolan. Mereka membutuhkan bantuan.

Menyilang

Pengunjung yang pergi setelah satu halaman, pertunangan rendah.

Bagaimana membaca corong

Interpreting corong Anda

Skenario:
1,000 Pengunjung melihat Harga. 270 membuka obrolan. 92 mulai memeriksa. 64 dibayar. 18 Membuka tiket dukungan.
Apa yang harus dilakukan:

Halaman harga cukup kuat untuk menciptakan maksud. Percakapan penting dalam cara membeli: 27% Pengunjung harga terlibat dengan obrolan sebelum membeli. Dukungan tiket setelah checkout mungkin mengindikasikan aktivasi atau kebingungan pembayaran. Aksi: (1) Pastikan percakapan AI menjawab pertanyaan harganya dengan baik. (2) Selidiki 18 post- checkout tiket dukungan untuk isu-isu umum.

Penyaring waktu

Gunakan filter rentang tanggal untuk membandingkan pola niat lintas periodik. Sebagai contoh, bandingkan minggu Jumat Hitam dengan minggu normal. Anda harus melihat lonjakan dalam "Buying" intend dan mungkin "Support-" jika promosi Anda menciptakan kebingungan.

Bagaimana OpsIQ mengklasifikasikan niat?+

OpsIQ melihat halaman URLs, perilaku sesi, dan pola waktu. Menghargai perbandingan tanda halaman. Checkout tanda halaman membeli tujuan. Bantuan / kontak halaman mendukung maksud. Klasifikasi adalah heuristic-berbasis, bukan AI- didorong.

Dapatkah saya menyesuaikan kategori niat?+

Tidak sekarang. Kategori dibangun - dalam berdasarkan pola perilaku web umum. Klasifikasi maksud kustom adalah pada peta jalan.

Analisis

Saluran, penyimpanan dan jalan

Membangun perjalanan-perjalanan ubahan dari halaman atau langkah acara, mengukur retensi kounity dan menemukan jalan pengunjung yang paling sering mengambil melalui situs.

Layar produk
KanalSebuah corong kustom menampilkan setiap langkah halaman / acara, pengunjung yang tersisa dan persentase konversi.Kanalarea kerjaSTEPS4CONVERSION28.4%WINDOW72hHIDUP WORKSPACE VIEWHarga dilihatPengunjung 1,420100%Rencana dipilihPengunjung 78054.9%Checkout dimulaiPengunjung 53037.3%Perintah selesaiPengunjung 40328.4%1DEFINEPilih 2–8 langkah2EVASTlESet jendela konversi3INMPROVECari drop terbesar
Sebuah corong kustom menampilkan setiap langkah halaman / acara, pengunjung yang tersisa dan persentase konversi.

Kanal

Buat corong dengan nama 2 ke 8 halaman atau langkah kejadian. Set jendela konversi dalam jam; sebuah pengunjung hanya menghitung ketika langkah yang terurut terjadi di dalam jendela itu. Gunakan penurunan antara langkah untuk memilih dimana memeriksa replay, error, kecepatan halaman atau messaging.

Retensi

Retensi kelompok pengunjung menjadi kohort mingguan dan menunjukkan berapa banyak kembali. 6, 8 atau 12"Week horizon". "Keep the codect stable when comparing releains or campains".

Path

Path daftar urutan halaman paling umum. Pilih panjang tapak dari 2 ke 5 halaman untuk menjaga hasil dapat dibaca. Gunakan itu untuk menemukan detaises yang tak terduga, keluar umum dan isi yang berulang-ulang mendahului konversi.

Kanal-funnels kustom adalah definisi analitis, bukan otomatisasi. Untuk bereaksi pada langkah yang selesai, membuat tujuan konversi, segmen, pemicu, atau aliran kerja.

Analisis

Pengulangan sesi

Sesi Replay memungkinkan Anda untuk menonton timeline dari apa yang dilakukan pengunjung di situs Anda: elemen mana yang mereka klik, bagaimana mereka discrolling, di mana mereka hovered, dan apa yang mereka ketik (dengan medan sensitif bertopeng). Gunakan itu untuk mendiagnosa masalah UX, memverifikasi laporan bug, dan memahami kebingungan pelanggan.

Pengulangan sesi
Pengulangan sesiPemutar ulang menampilkan viewport halaman dengan kursor, panel info sesi, dan scrubber timeline.Pengulangan sesiyoursite.comBeli sekarangSESIDurasi 3m 12s14 klikUSChrome 1241WATCHKlik, gulung, ketik2MASKEDRuas sensitif tersembunyi3DIAGNOSEVerifikasi laporan bug
Ulangi apa yang dilakukan pengunjung: klik, gulungan, mengetik (bidang sensitif bertopeng), pada scrubber timeline.

Menemukan sesi yang tepat

Dari halaman Sessions, cari sesi dengan isu yang dilaporkan, halaman tinggi berarti tanpa konversi, atau sesi dari pelanggan yang mengajukan tiket dukungan. Klik ikon replay untuk membuka timelview.

Apa yang menunjukkan replay

Garis Waktu

Sebuah bar horisontal yang menunjukkan peristiwa dari waktu ke waktu. Klik di mana saja pada timeline untuk melompat ke saat itu.

Navigasi halaman

Setiap halaman tampak sebagai segmen di timeline kau dapat melihat jalur yang tepat yang diambil pengunjung

Klik

Kejadian klik ditunjukkan sebagai titik pada timeline dan sebagai highlights pada rekonstruksi halaman.

Penggulung

Gulungan kedalaman dilacak sehingga Anda dapat melihat seberapa jauh bawah pengunjung membaca.

Bentuk interaksi

Field fokus dan mengetik peristiwa direkam. Masukan teks dalam kata sandi dan bidang sensitif adalah bertopeng secara baku.

Privasi dan masking

Sesi memutar ulang daerah formulir sensitif topeng secara baku. Ruas sandi, masukan kartu kredit, dan ruas ditandai dengan data-opsiq-mask tidak pernah direkam. Anda dapat mengatur aturan masking tambahan dalam Pengaturan > Pelacakan. Jika kebijakan kepatuhan anda membutuhkannya, anda dapat menonaktifkan replay sepenuhnya.

Mendiagnosis checkout yang rusak

Skenario:
Seorang pelanggan mengatakan "Saya mencoba untuk membeli tapi tombol tidak melakukan apa-apa".
Apa yang harus dilakukan:

Cari sesi mereka di halaman Sessions (cari dengan email). Buka replay. Perhatikan segmen halaman checkout. Cari: (1) Apakah mereka klik tombol yang tepat? (2) Apakah JavaScript error terjadi? (Periksa halaman JS Error untuk waktu itu.) (3) Apakah halaman ini memuat ulang atau menampilkan pesan galat? (4Replay menunjukkan persis apa yang terjadi.

Berapa banyak tempat penyimpanan yang digunakan untuk memutar ulang sesi?+

Putar ulang data dengan volume lalu lintas. Gunakan pengaturan retensi untuk secara otomatis membersihkan data lama. Untuk situs-situs lalu lintas yang tinggi, pertimbangkan periode replay retention pendek (misalnya, 30 hari) untuk mengelola penyimpanan.

Bisakah pengunjung memilih untuk tidak bermain ulang?+

Jika "Respect Jangan Trek" diaktifkan dalam Pengaturan, pengunjung dengan tajuk DNT tidak direkam. Anda juga dapat mengecualikan halaman spesifik dari memutar ulang dalam pengaturan pelacakan.

Analisis

Log kejadian

Log Acara menunjukkan setiap acara yang OpsIQ rekam: halaman views, klik, percakapan dimulai, kreasi tiket, penjualan, dan peristiwa custom. Gunakan ke integration debug, verifikasi pengiriman webhook, dan memahami urutan tindakan.

Log kejadian
Log kejadianSebuah catatan peristiwa kronologis dengan warna-kode tipe lencana: pageview, chat, sale, webhook dan custom.Log kejadianyoursite.compageviewUS /pricing12:04:01chat.startBritania12:04:09dijual$49.00 · urutan #104212:05:22webhookpayment.succeeded12:05:23customdemo_booked12:06:101EVERYTHINGSetiap kejadian yang direkam2DEBUGVerifikasi pengiriman webhook3ORDERLihat urutan yang tepat
Sebuah timeline dari segala sesuatu OpsIQ catatan (pageview, percakapan, penjualan, webhooks, acara custom) untuk debug dan audit.

Bangun-dalam kejadian (otomatis)

⚠️
Ini adalah events-log nama - apaOpsIQcatatan pada timeline pengunjung untuk analitik, debug dan audit. webhook keluar kejadian yang anda langganan titik akhir ke. Jika anda membuat sebuah penerima webhook, gunakan daftar di bagian Webhook, atau panggil webhooks.events.list; Berlangganan ke nama dari tabel ini tidak akan memberikan apa-apa.

Setiap baris menunjukkan nama Anda kirim dan nama kanonikal OpsIQ toko Keduanya direkam: nama mentah yang Anda kirim, dan yang kanonikal peta untuk, jadi laporan yang ditulis terhadap taksonomi kanonik terus bekerja alias manapun pelacak digunakan.

pageview page.viewed

Sebuah halaman yang dilacak beban. termasuk URL, judul, rujukan dan timestamp. page_view dan view diterima sebagai hal yang sama.

chat_open support.chat_opened

Seorang pengunjung membuka widget chat.

chat_send support.chat_message_sent

Tamu mengirim pesan obrolan. Bagian jawaban disimpan sebagai support.chat_message_received.

ticket_open support.ticket_created

Tiket dukungan dibuat. ticket_create Diterima sebagai hal yang sama, jawaban dan penutupan disimpan sebagai support.ticket_replied dan support.ticket_closed.

form_submit form.submitted

Sebuah formulir dilacak dimasukkan. submit diterima sebagai hal yang sama.

purchase commerce.purchase_completed

Pembelian selesai. purchase_success, dan alias penjualan order.completed, sale.completed, payment.completed dan invoice.paid, semua diterima dari platform yang terhubung.

Kogi commerce.checkout_started

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

login_success identity.signed_in

Sebuah tanda pengunjung masuk Kegagalan adalah login_failed, disimpan sebagai identity.login_failed; sebuah penguncian adalah login_lockout_created.

signal conversion.signup

Seorang pengunjung menyelesaikan sebuah signup. lead, disimpan sebagai conversion.lead.

js_error error.js

Sebuah kesalahan JavaScript ditangkap pada halaman dilacak.

💡
Nama acara yang Anda kirim yang bukan salah satu alias ini masih direkam verbatim - tidak ada yang jatuh.

Peristiwa ubahan

Anda dapat mengirim peristiwa custom dari situs web atau server ke OpsIQ Acara kustom berguna untuk pelacakan aksi spesifik untuk bisnis Anda: klik tombol, penggunaan fitur, video bermain, download, dll.

JavaScript
// Send a custom event from the browser
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "plan_selected", {
  plan: "pro",
  billing: "annual",
  value: 99
}]);
PHP merekam 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);

Penyaring peristiwa

Jenis kejadian

Filter dengan nama event tertentu: pageview, chat. started, ticket. created, dsb.

Jangkauan tanggal

Tampilkan peristiwa dari periode waktu tertentu.

Cari

Cari data event dengan kata kunci (URL, surel, nilai properti acara).

Berapa lama kejadian itu berlangsung?+

Kejadian mengikuti kebijakan retensi yang ditetapkan dalam Pengaturan. Baku: 90 Hari. / Peristiwa nilai tertinggi (pembelian, acara keamanan) dapat dikonfigurasi dengan retensi lebih lama.

Dapatkah saya menggunakan peristiwa dalam percobaan A / B?+

Ya, ketika membuat eksperimen, anda memilih sebuah peristiwa konversi.

Analisis

A / B experimen

Percobaan memungkinkan Anda menguji dua versi dari satu halaman atau fitur dan ukuran yang mana yang lebih baik. OpsIQ menampilkan kesan, konversi, dan makna statistik.

A / B experimen
A / B experimenDua kartu berbeda membandingkan tingkat konversi, dengan lencana pemenang dan signifikansi pada varian terkemuka.A / B experimenyoursite.comVarian A4.2%konversi 1,020 tampilanVarian BWinnER6.8%konversi 1,005 tampilan+62% lift · 96% signifikan1UJIDua varian head-to- head2EVASTlEKonversi & signifikansi3AKAN MENYELESAIKANMenyatakan pemenang
Jalankan dua varian, menonton konversi dan makna statistik, dan menyatakan pemenang.

Bagaimana percobaan bekerja

1
Buat percobaan

Berikan sebuah nama, definisikan metrik primer Anda (peristiwa konversi), dan set variants (kendali dan tes).

2
Jalankan

OpsIQ secara acak menugaskan pengunjung untuk bervariasi dan melacak perilaku mereka. jangan ubah percobaan saat berjalan.

3
Baca hasilnya

Setelah data yang cukup dikumpulkan, periksa tingkat kepercayaan diri.95% Percaya diri berarti Anda bisa 95% yakin perbedaannya adalah nyata, bukan kesempatan acak.

Percobaan menyatakan

Draf

Dibuat tapi belum dimulai. Anda masih dapat mengedit varian dan metrik.

Berjalan

Secara tidak sengaja menugaskan pengunjung ke berbagai varians. Jangan sunting saat berjalan.

Selesai

Reached statistik signifikansi atau secara manual dihentikan Hasil akhir.

Arsip

Hasil telah ditinjau dan percobaan tidak lagi diperlukan dalam daftar aktif.

Latihan terbaik

Tentukan metrik Anda sebelum peluncuran

Putuskan apa yang Anda ukur sebelum memulai. Memilih metrik setelah melihat hasil memperkenalkan bias.

Menghindari lalu lintas internal

Tambahkan IP ke daftar exclusion sehingga kunjungan staf tidak mengacaukan hasil.

Lari cukup lama

Jangan hentikan percobaan setelah pengunjung 100, anda butuh ratusan atau ribuan pengunjung per varian untuk hasil yang dapat diandalkan.

Uji satu perubahan pada suatu waktu

Jika Anda mengubah judul dan warna tombol, Anda tidak akan tahu perubahan mana yang menyebabkan perbaikan.

Rekam keputusanmu

Setelah percobaan berakhir, perhatikan varian mana yang menang dan mengapa Anda memilih untuk menerapkannya.

Berapa banyak pengunjung yang kubutuhkan untuk percobaan yang valid?+

Ini tergantung pada tingkat konversi dasar dan ukuran efek yang ingin Anda deteksi 500 pengunjung per varian untuk 20% untuk efek yang lebih kecil, kau butuh ribuan.

Dapatkah saya menjalankan beberapa percobaan pada saat yang sama?+

Ya, tapi hati-hati jika dua eksperimen mempengaruhi halaman yang sama, hasil mereka mungkin berinteraksi lebih aman untuk menjalankan percobaan di berbagai halaman atau fitur secara bersamaan

Analisis

JavaScript error

JavaScript Galat saat mengumpulkan kesalahan sisi klien dari pengunjung website Anda. API panggilan, atau sumber daya yang hilang muncul di sini. Gunakan itu untuk menemukan dan memperbaiki bug yang mempengaruhi pelanggan nyata.

Galat JS
JavaScript errorDaftar galat sebelum-akhir yang ditangkap dengan titik-titik parahnya, berkas sumber, peramban dan kejadian penting.JavaScript erroryoursite.comGalat baru-baru iniTypeError: tidak dapat membaca x dari undefinedcheckout. js:42×214404 memuat /assets/app.cssindeks×88Tak Tertangkap (dalam janji) Galat Jaringanapi.js:17 Firefox×51Peringatan deprekasi: unload eventvendor. js×331CAPTUREGalat sisi klien2IMPACTMenghitung & peramban3PERBAIKISquash bug nyata
Tamu sebenarnya menabrak permukaan kode yang rusak di sini (pesan, sumber, peramban dan seberapa sering) sehingga Anda dapat memperbaiki apa yang penting.

Apa yang setiap kesalahan menunjukkan

Pesan galat

The JavaScript kesalahan teks (mis., "TypeError: Tidak dapat membaca properti dari undefined").

Halaman URL

Halaman mana yang terjadi.

Peramban dan perangkat

Jenis peramban dan perangkat mana yang melihat galat. Beberapa kesalahan adalah browser- spesifik.

Pelacakan stack

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

Pertama terlihat

Ketika kesalahan ini pertama kali muncul.

Terakhir terlihat

Ketika kesalahan ini yang paling baru-baru ini terjadi.

Cacah

Berapa kali kesalahan ini telah direkam.

Sesi yang terpengaruhi

Berapa banyak sesi pengunjung yang berbeda mengalami kesalahan ini.

Memmemprioritaskan kesalahan

Tidak semua JavaScript error membutuhkan perhatian langsung prioritas oleh: (1) error pada halaman kritis (checkout, signup, login), (2) kesalahan dengan jumlah sesi tinggi, (3) kesalahan yang muncul baru-baru ini (mungkin regresi dari perubahan kode), (4) error pada kode anda sendiri (bukan script pihak-ketiga).

Memperbaiki tombol checkout yang rusak

Skenario:
JS Error page menampilkan "TypeError: Tidak dapat membaca properti tidak terdefinisi (baca kirim)" di /checkout, mempengaruhi 45 sesi minggu ini.
Apa yang harus dilakukan:

Ini berarti 45 Pelanggan sungguhan tidak bisa menyelesaikan checkout.1) Buka halaman dalam kombinasi browser / device yang sama. (2) Buka konsol peramban dan mereproduksi kesalahan. (3) Periksa jejak stack untuk menemukan baris kode yang tepat. (4) Perbaiki bug, menyebarkan, dan monitor kesalahan menghitung akan nol.

Apakah OpsIQ menangkap kesalahan dari script pihak ketiga?+

Ya, OpsIQ menangkap semua JavaScript galat pada halaman, termasuk kesalahan dari skrip analisis, widget obrolan, dan skrip iklan. Filter by URL dalam jejak stack untuk fokus pada kode Anda sendiri.

Bagaimana aku mengecualikan kesalahan yang tidak berbahaya?+

Anda tidak dapat menekan kesalahan spesifik dalam OpsIQ, tetapi Anda dapat menyaring daftar per halaman URL atau pesan kesalahan. Perbaiki atau abaikan galat dari ekstensi peramban (mereka sering menampilkan sebagai kesalahan dari sumber yang tidak diketahui).

Penjualan

Penjualan dan konversi

Pelacak penjualan menghubungkan platform penagihan atau toko Anda OpsIQ Jadi Anda dapat melihat pendapatan bersama perilaku pengunjung, setiap pembelian dikaitkan dengan perjalanan pengunjung, sehingga Anda tahu halaman mana, kampanye, dan saluran penghasilannya.

Penjualan
PenjualanLayar penjualan: total pendapatan dengan kontrol sepanjang masa, pencarian, dan tabel Pembelian baru-baru ini (tanggal, pelanggan, platform, jumlah, sumber).Penjualanyoursite.comPENDAPAT$42,180+18%Semua waktu ▾Cari email, IP, ID Order...Pembelian Terkiniweather conditionDAEKLIKPLATFORMSUMSUMBERJun 3[email protected]Shopify$49googleJun 3[email protected]WooCommerce$129directJun 2[email protected]Stripe$480iklan1PENDAPATPerintah & pembaharuan2RECENT PURCHASESTanggal · pelanggan · jumlah3ATTRIBUTEDUntuk sumber lalu lintas
Layar penjualan yang sebenarnya, pendapatan di atas, lalu Pembelian baru-baru ini (tanggal, pelanggan, platform, jumlah), masing-masing dikaitkan dengan sumber lalu lintas.

Penjualan dashboard

Penjualan hari ini

Pembayaran dari perintah selesai hari ini. Mengundurkan diri dengan setiap acara urutan baru dari platform terhubung Anda.

Minggu ini / bulan ini / total

Pengembalian uang dikurangi dari total ini.

Grafik trad

Grafik baris yang menunjukkan pendapatan harian selama jangkauan tanggal terpilih. Cari lonjakan (promosi, kampanye) dan dips (isu-isu, musiman).

Sumber konversi atas

Sumber lalu lintas mana yang paling banyak mengarah ke pembelian "Langsung" sering ditkamutangani situs Anda. pembeli Google "Google" menemukan Anda melalui pencarian.

Pembelian baru-baru ini

Perintah terakhir dengan email pelanggan, jumlah, mata uang, dan item dibeli.

Pembelian yang belum dikonfirmasi (perjalanan pelanggan)

Ketika pelacak melihat pengunjung mencapai konfirmasi pembelian dalam browser tapi tidak ada platform yang terhubung telah melaporkan bahwa penjualan, perjalanan pelanggan menunjukkan baris Pembelian (belum dikonfirmasi) dengan lencana amber. Tidak pernah dihitung sebagai pendapatan. Ketika platform menegaskan penjualan, pembelian dikonfirmasi menggantikan itu.

Rekonsiliasi

Konektor penjualan tidak bergantung pada sebuah webhook tunggal. Setiap sinyal pembayaran platform mengirim dapat membuka penjualan, dan Kontrak Konektor 2.3 baca ulang daftar platform sendiri dari penjualan yang selesai pada jadwal (baku per jam setiap area kerja) jadi sebuah webhook platform tidak pernah dikirimkan tidak dapat kehilangan penjualan. Operator dapat menjalankannya sesuai permintaan dari baris perintah dengan alat /sales_reconcile.php.

Panduan setup platform

Shopify

Pergi ke Konektor > Shopify. Membuat aplikasi gubahan di Anda Shopify admin (Pengaturan > Apps dan saluran penjualan > aplikasi Develop). Grant scopes: read_orders, read_customers, read_products. Salin Admin API Tanda akses OpsIQ, masukkan domain toko Anda (misalnya, your-store.myshopify.com) dan token akses. Klik Uji Koneksi. Jika sukses, aktifkan sinkronisasi webhook untuk pemberitahuan pesan secara real time.

WooCommerce

Pergi ke Konektor >WooCommerce Dalam Anda WordPress admin, pergi ke WooCommerce Pengaturan > > Tingkat lanjut > REST API. Membuat kunci dengan izin Baca / Tulis. Salin kunci konsumen dan rahasia konsumen. Masuk OpsIQ, masukkan situs Anda URL, kunci konsumen, dan rahasia konsumen. Klik Uji Koneksi.

BigCommerce

Pergi ke Konektor > BigCommerce. Dalam admin BigCompuice Anda, pergi ke Pengaturan Lanjutan >API Akun. Buat V2 / V3 API Akun dengan ruang baca untuk Perintah, Pelanggan, dan Produk. Salin tanda akses, ID klien, dan API path. Masukkan mereka di OpsIQ dan tes.

Magento 2

Pergi ke Konektor > Magento. Dalam admin Maginto Anda, menuju ke Sistem > Integrations. Buat integrasi baru dengan API akses sumber daya ke Sales, Pelanggan, dan Katalog. Aktifkan integrasi dan salin token akses. Masukkan kedalam OpsIQ dengan basis Magento Anda URL.

PrestaShop

Pergi ke Konektor > PrestaShop. Dalam admin PrestaTop Anda, pergi ke Parameter Lanjut > Layanan Web. Aktifkan layanan web dan membuat kunci baru. Berikan akses ke perintah, pelanggan, dan produk. Salin kunci dan masukkan di OpsIQ dengan toko Anda URL.

OpenCart

Pergi ke Konektor > OpenCart. Hasilkan API Kredensial dari panel admin OpenCart anda. Masukkan API URL, nama pengguna, dan kunci masuk OpsIQ Konektor menggunakan REST OpenCart API untuk memesan dan data pelanggan.

osCommerce

Pergi ke Konektor > osCommerce. Atur akses basis data atau API kredensial seperti didokumentasikan dalam setting. integrasi osCommerce biasanya membutuhkan akses basis data langsung atau gubahan API modul.

Stripe

Pergi ke Konektor > Stripe. Salin garis batas Anda API kunci dari Stripe Dashboard (Pengembang >API kunci). Kunci perlu membaca akses ke Pelanggan, Biaya, Invoices, dan Subscriptions. Masukkan dalam OpsIQ Konfigurasikan titik akhir webhook untuk acara real-time.

Platforms gubahan / lainnya

Gunakan REST API atau webhooks untuk mengirim penjualan dari platform manapun. Kirim order.complete events dengan email pelanggan, jumlah, mata uang, dan item. Lihat Effents. Lihat Kegiatan API bagian untuk format payload.

Memahami saluran penjualan Anda

Sumber konversi atas

Shows which channels bring paying customers. If Google brings 1000 visitors and 50 sales, that is a 5% conversion rate. If email brings 200 visitors and 30 sales, that is 15%. Email is more effective per visitor.

Kembalikan

Perintah yang didanai dilacak secara terpisah, mereka mengurangi total pendapatan jaringan. jika pengembalian uang tinggi dari sumber tertentu, lalu lintas mungkin akan menjadi kualitas rendah.

Penanganan mata uang

OpsIQ menyimpan uang transaksi asli dan jumlah mata uang multi- pendapatan dalam setiap mata uang pelaporan Normalized menggunakan tingkat pertukaran yang dikonfigurasi.

Contoh yang berhasil

Pengunjung 100, nol penjualan

Skenario:
Halaman harga Anda mendapat 100 pengunjung per hari tapi tidak ada konversi.
Apa yang harus dilakukan:

Selidiki: (1) Gunakan Sesi Replay di pengunjung halaman harga. Perhatikan bagaimana mereka berinteraksi dengan tabel harga. (2) Periksa Halaman Atas untuk nilai halaman bouncing rate dan waktu-on- page. (3) Periksa percakapan Chat dari pengunjung halaman harga pertanyaan apa yang mereka tanyakan?4) Bandingkan halaman harga Anda untuk pesaing. (5) Cobalah percobaan A / B dengan harga yang berbeda.

Atribut untuk kampanye pemasaran

Skenario:
Anda mengirim kampanye email dengan tag UTM. Bagaimana anda mengukur dampaknya?
Apa yang harus dilakukan:

Pergi ke Sales dan filter berdasarkan sumber. Cari parameter UTM kampanye. Anda akan lihat: (1) Berapa banyak pengunjung yang datang dari email. (2) Berapa banyak dikonversi ke penjualan. (3) Total pendapatan yang dikaitkan dengan kampanye. (4) Bandingkan ke periode yang sama sebelum kampanye.

Mengapa penjualan menunjukkan nol meskipun toko saya memiliki perintah?+

Periksa: (1) Apakah konektor platform tersambung dan sehat? Pergi ke Konektor dan periksa status (.2) Apakah sinkronisasi webhook diaktifkan? Jika menggunakan polling, apakah tugas kron berjalan? (3) Apakah konektor memiliki hak API scopes? Shopify, Anda perlu membaca perintah.

Bagaimana OpsIQ atribut penjualan kepada pengunjung?+

Ketika perintah datang melalui konektor, OpsIQ Jika pengunjung dilacak sebelum pembelian, penjualan dikaitkan dengan perjalanan tamu mereka, termasuk sumber lalu lintas, halaman pendaratan, dan sejarah sesi.

Dapatkah saya secara manual menambahkan penjualan?+

Anda dapat mengirim penjualan melalui REST API atau webhooks dari sistem manapun. Format acara didokumentasikan dalam Peristiwa API bagian.

Perdagangan

Build, luncurkan dan jalankan Penyimpanan Asli

The Storefront adalahOpsIQtoko lokal untuk produk, halaman, buku pencarian, panel promosi, checkout, rekening pelanggan dan bantuan perusahaan yang menjual dalam Chat Klien dan mendukung saluran sosial.

Mulai di Marketing → Storefront

1
Pilih area kerja

Konfirmasi situs yang anda konfigurasi. Produk, pengaturan, halaman, perintah dan analisis terisolasi di ruang kerja itu.

2
Aktifkan Ecommerce dan Storefront

Pengaturan Umum→Ecommerce adalah otoritas orang tua penerbitan, ketertiban pembuatan dan pembayaran tetap terpisah sehingga Anda dapat meninjau katalog dengan aman.

3
Penerbitan lengkap produk

Atur tipe produk, harga, mata uang, inventaris, varian / pilihan, media dan pemenuhan. Pratilik produk dan checkout pilihan sebelum menerbitkan.

4
Atur pembayaran dan pemenuhan

Hubungkan gerbang atau penambahan transfer bank, tunai, atau pembayaran. Barang fisik perlu zona pengiriman atau koleksi; barang digital butuh berkas perlindungan atau kode.

5
Jalankan Persiapan Peluncuran

Perbaiki setiap blocker dan meninjau setiap peringatan, kemudian menyelesaikan urutan sandbox dari toko umum.

Mulai Isi Kebijakan dan Pendek

Toko baru dan ditingkatkan menerima teks starter yang dapat disunting untuk Tentang kita, Syarat dan kondisi, Privasi, dan Kembalikan uangnya dan kembalikan ketika bidang-bidang kosong. salinan pedagang yang ada tidak pernah ditimpa.

  • Ganti setiap [Add …] tanya dan TEMPLATE STARTER perhatikan sebelum peluncuran.
  • Gunakan nama hukum yang sebenarnya, rute kontak, janji pemenuhan, aturan pengembalian, praktek data, periode penahanan dan pasar disajikan.
  • Mengatasi saran yang sesuai untuk produk dan negara yang Anda layani, starter adalah bimbingan operasional, bukan nasihat hukum.

Desain, halaman dan promosi

Tema dan desain halaman

Pilih tema dan komposisi warna kurated, lalu tune tipografi, isian / gradien, bentuk, lebar, gerak, hover dan perilaku cahaya / gelap. Pratilik desktop dan telepon sebelum menyimpan.

Tentang, Kontak, Showcase / Buku catatan dan Akun

Bangun setiap halaman dari blok yang dapat direorderkan. Setiap blok memiliki varian desain premium. Pertahankan blok seperti statistik, tim, penghargaan atau kutipan sampai isi mereka benar.

Halaman gubahan

Set judul, siput, pahlawan,SEO blok yang diurut; pratilik ketika draft, kemudian terbitkan. Rekening toko seperti gerobak, checkout, akun dan kebijakan tidak dapat digunakan kembali.

Popup promosi dan panel samping

Buat halaman modal dengan setidaknya satu blok. Pilih desain premium, penempatan tengah / kiri / kanan / bawah, muat / delay / exit / click pigger, backdrop, move, width, quise, kupon dan sekali lagi -per- pengunjung. Uji tutup, papan tik dan tata letak telepon.

Menu dan kaki

Hubungkan ke halaman, produk, koleksi, kebijakan, aksi akun / bantuan / kereta, modals hidup atau eksternal amanURLs. Butir header mendukung satu dropdown / mega- tingkat menu.

Klien Chat dan perintah sosial

Aktifkan penjualan Klien Chat, lalu pilih di mana pelanggan dapat membeli. Asisten pencarian katalog dan meminta server untuk sebuah kutipan otoritatif; server - bukan model - membuat kartu perintah ditandatangani. Konfirmasi hanya terjadi melalui kartu itu di web atau diperiksa interaksi pada saluran sosial.

WhatsApp, _Messenger, ______Instagram, ____Telegram, LINJAU, SMS dan X menggunakan akun saluran yang diverifikasi oleh penyedia sebagai identitas kanal. Surel masih dikumpulkan untuk penerimaan. Pemesanan konektor mempertahankan kontrak universalnya yang ditandatangani dan total otoritas pedagang; konfigurasi Storefront tidak mengubah kontrak itu.

Simpan Analitis Intelijen

Ulas pengunjung unik, tampilan produk, tambahan gerobak, checkout mulai / meninggalkan / kompleks / penyelesaian, konversi, perintah yang dikonfirmasi, pendapatan dengan mata uang, perolehan, alat, negara-negara / kota, produk atas, pemulihan dan data-peringatan kualitas. Konversi menggunakan secara eksplisit tag acara-peristiwa publik; total mata uang tidak pernah dikombinasikan. Garis pendek berarti kisaran terpilih tidak dapat menjawab pertanyaan konversi - bukan nol persen.

UmumOpsIQ API

Gunakan kunci pembawa dengan commerce.read; analytics.read Juga memberikan snapshot analisis, ruang kerja yang terikat kunci adalah otoritatif.

Toko Typed Storefront dibaca
{ "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 } }

Penyimpanan mendapatkan kembali konfigurasi public-safe,URL, menu dan kondisi starter-review. Katalog storefront mengembalikan setiap tema, desain halaman, tipe blok, komposisi blok dan shell promosi premium sehingga pembuat jauh tidak pernah kode-pilihan. Daftar daftar gubahan halaman dan modals premium. Analitik kembali agggagat tanpa identitas pelanggan. Kesimpulan kembali pemeriksaan peluncuran yang dapat ditindaklanjuti. OpenAPI dan Postman menggunakan kontrak yang sama.

Penggerak peluncuran akhir melalui

  1. Desktop dan telepon: rumah, pencarian, produk / varian, kereta, cek validasi, akun, pelacakan, unduhan, Tentang, kontak, kebijakan, buku lihat, halaman, menu dan setiap promosi hidup.
  2. Selesaikan satu pembayaran kotak pasir dan periksa status urutan, penerimaan, stok dan pemenuhan.
  3. Tempatkan satu pesanan Chat Klien dan satu urutan kotak pasir di setiap saluran sosial yang diaktifkan.
  4. Konfirmasikan peristiwa-peristiwa muncul di bawah permukaan yang benar dan mata uang di Store Intelligence.
⚠️
Teks kebijakan starter membuat toko tidak kosong, tetapi ini tidak membuat salinan legal diulas. Rekonsiliasi Peluncuran terus peringatan sampai setiap prompt diganti.
Penjualan

Petunjuk

Petunjuk adalah pengunjung atau pelanggan yang menunjukkan membeli atau mendukung tujuan. OpsIQ mendeteksi secara otomatis mengarah berdasarkan perilaku: kunjungan harga, kunjungan kembali, interaksi obrolan, checkout dimulai, dan keterlibatan tinggi. Gunakan Leads page untuk memprioritaskan mengikuti dan memberi makan pipa CRM Anda.

Petunjuk
PetunjukLayar Leads: tabel yang dapat dicari dengan IP/ email, lokasi, perangkat, sumber, dan kolom waktu di situs, dan sumber atas dan negara.Petunjukyoursite.comCari IP, kota, negara...Sumber utama: Google: USIP # EMAILLOKASIPERANGKATSUMBERTIME41.62.10.4InggrisPonselgoogle4m 12s[email protected]USDesktopdirect7m 02s[email protected]DEPonselutm: iklan5m 40s203.0.113.9CADesktopgoogle3m 28s1DETECTEDPengunjung yang berniat tinggi2TOPSumber & negara utama3ENRICHEDIP, lokasi, perangkat, waktu
Layar Petunjuk yang sebenarnya, pengunjung dengan niat tinggi sebagai tabel yang dapat dicari (IP/ email, lokasi, perangkat, sumber, waktu di situs) dengan sumber atas dan negara-negara.

Apa yang membuat memimpin

Kunjungan halaman harga

Pengunjung yang melihat harga atau halaman rencana secara aktif mempertimbangkan pembelian.

Kunjungan kembali

Pengunjung yang kembali beberapa kali terlibat tapi belum dikonversi.

Interaksi percakapan

Pengunjung yang memulai obrolan secara aktif mencari bantuan, baik sebelum pembelian atau jual-beli.

Checkout dimulai

Pengunjung yang mencapai halaman kasir tapi tidak menyelesaikan pembelian.

Pengiriman formulir

Pengunjung yang mengirimkan formulir kontak, permintaan demo, atau bentuk pendaftaran.

Pertunangan halaman tinggi

Pengunjung yang melihat banyak halaman dengan durasi sesi panjang sedang sangat meneliti.

Panel detail memimpin

Klik setiap petunjuk untuk melihat profil lengkap mereka:

Identitas

Nama, email, perusahaan jika dikenal. IP dan lokasi.

Sesi

Semua sesi dari petunjuk ini dengan alur halaman, durasi, dan sumber.

Halaman yang ditampilkan

Setiap halaman yang mereka kunjungi, diperintahkan oleh recensi.

Sumber

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

Nilai awal

A0-100 skor berdasarkan intensitas perilaku, retensi, dan niat halaman.

Status CRM

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

Tip penjualan

Saran lain yang dihasilkan pada apa yang akan dilakukan selanjutnya (misalnya, "Pengunjungi harga 3 kali mempertimbangkan jangkauan proaktif ").

Lencana timbal nilai tertinggi

Leads with a score above80mendapatkan lencana "High Value" ini adalah prospek terpanas mu prioritas mereka untuk jangkauan, percakapan proaktif, atau CRM entri baris pipa.

Contoh yang berhasil

Bekerja memimpin panas

Skenario:
Sebuah memimpin melihat halaman harga Anda 3 kali dalam 2 hari, mulai chatting bertanya tentang rencana perusahaan, tetapi belum dibeli.
Apa yang harus dilakukan:

Ini adalah petunjuk yang sangat penting.1Periksa detail utama mereka untuk perusahaan dan informasi peran.2) Tinjau transkrip percakapan untuk kebutuhan tertentu dan keberatan. (3) Buat kesepakatan dalam CRM dengan informasi yang dikumpulkan. (4) Berikan tugas berikut-up untuk anggota tim penjualan.5) Jika mereka kembali ke halaman harga, aturan obrolan proaktif dapat memicu pesan pribadi.

Mengkonversi anonymous mengarah ke kontak CRM

Skenario:
Anda memiliki 50 tanpa nama mengarah dengan skor tinggi tapi tidak ada alamat email.
Apa yang harus dilakukan:

Opsi: (1) Buat sebuah aturan proaktif yang menawarkan suatu diskon atau unduhan sumber daya dalam pertukaran untuk email pada halaman high- intent. (2) Gunakan widget obrolan untuk meminta email ketika pengunjung anonim memulai percakapan. (3) Tambahkan sebuah tanda identitas ke halaman login / signup anda sehingga pengunjung yang kembali secara otomatis diidentifikasi.

Bagaimana skor utama dihitung?+

Nilai yang mempertimbangkan: penerimaan dari kunjungan (baru = lebih tinggi), frekuensi kunjungan (lebih tinggi = lebih jauh), halaman telah dilihat (pricing / checkout = lebih cepat), durasi sesi (lebih lama = lebih Tinggi), interaksi obrolan (terlibat = lebih tinggi. dan kembali mengunjungi (multiple session = hier).

Dapatkah saya menyesuaikan aturan mencetak angka?+

Dalam konfigurasi CRM, Anda dapat menambahkan peraturan mencetak angka yang meningkatkan skor berdasarkan kata kunci tertentu, peristiwa, sumber, atau pola halaman.

CRM

CRM Anda mulai di sini

OpsIQkapal A penuh-pertama CRM Setiap tindakan AI adalah sumber, bisa dijelaskan, dapat dikembalikan dan disetujui.

AI CRM
UAl CRM overviewDial Trust diatur ke Kopilot di samping empat kartu agen AI: Steward, Prospector, Retention dan Analis.AI CRMarea kerjaPercaya DialManualCopilotAutopilotBerapa banyak AI tidak sendiriDSStewardDedupe, perkaya,data validasiSDRProspectorCari & skorbisnis baruRTRetensiSpot churn,drive pembaharuanADAAnalis& Ramalanjelaskan angka1AI-FIRSTEmpat agen spesialis2YOU DECIDEPercaya otonomi Dial3TRUSTEDDiubah & Dapat Diubah
Sebuah CRM pertama dijalankan oleh empat agen spesialis, dan Dial Trust yang memutuskan berapa banyak yang mereka lakukan sendiri.

Tampilan halaman CRM

AI CRM (Pusat Perintah)

Mulai dari sini

Layar rumah Anda sehari-hari: pulsa pendapatan, apa yang ditemukan AI, apa itu, antrian persetujuan, langkah berikutnya, agen kesehatan, dan ROI.

Kontak

Inti

Orang-orang dan perusahaan di CRM Anda. Cari, filter, skor, dan mengelola profil.

Baris pipa

Inti

Papan kontrak visual dengan drag-and-drop tahap, menang probabilitas, dan pelatihan AI.

Forecast dan Reports

Inti

Penunjukan penerbangan-grade: berkomitmen, mungkin, kasus terbaik, dengan keyakinan interval dan pelacakan akurasi.

Siklus Hidup

Inti

Dimana setiap pelanggan berdiri: aktif, beresiko, ekspansi siap, pembaharuan karena, atau berputar.

Bangun CRM saya

Konfigurasi

Jelaskan pengaturan CRM Anda dalam bahasa Inggris polos. OpsIQ Menghasilkan rencana reversibel dan berlaku itu pada persetujuan.

Kesehatan CRM

Ops

Halaman self-check: skema, agen, rute, tindakan AI, dan jumlah data hidup.

Bagaimana OpsIQ membuat Anda tetap aman

Tanyakan sebelum bertindak

Proposal AI pergi ke antrian persetujuan. Anda menyetujui, menyunting, atau menolak masing-masing. Tidak ada yang terjadi tanpa Anda katakan.

Jangan pernah menimpa

Ketika AI menyarankan perubahan, ia menunjukkan nilai saat ini dan nilai yang diusulkan. Data yang dimasukkan manusia memiliki perlindungan provenance.

Semuanya bisa dikembalikan

Setiap aksi AI dicatat dalam jurnal. Anda dapat membatalkan perubahan dengan satu klik.

Dapat dijelaskan

Setiap rekomendasi AI menunjukkan penalasannya dan sumber data yang digunakannya.

Mulai dari sini.

1
Buka CRM AI

Klik AI CRM di navigasi kiri. Pusat Komando menunjukkan keadaan Anda saat ini.

2
Periksa Kesehatan CRM

Buka CRM Health untuk memverifikasi skema, agen, dan rute siap.

3
Impor kontak

Jika konektor aktif (Shopify, WHMCS, dsb.), kontak diimpor secara otomatis. Jika tidak, impor melalui CSV atau membuat secara manual.

4
Buat suatu pipeline

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

5
Tambah kesepakatan pertama Anda

Buat kesepakatan dari kontak, atur jumlah dan panggung, dan biarkan Pelatih Deal membimbingmu.

Apa aku perlu menggunakan CRM?+

No CRM adalah opsional. OpsIQ bekerja sempurna sebagai platform + support + AI tanpa CRM. Aktifkan ketika anda siap untuk mengelola penjualan dan hubungan pelanggan.

Bisakah CRM bekerja tanpa konektor?+

Ya. Anda dapat membuat kontak dan transaksi secara manual. Konektor memperkaya CRM dengan data platform (perintah, langganan, tiket) tapi tidak diperlukan.

Apa itu "Lapisan Kepercayaan"?+

Tapis Kepercayaan adalah sistem keamanan yang mengendalikan kemampuan AI. Mode kopilot (baku): Al mengusulkan, persetujuan manusia. Mode Autopilot (opt-in): Secara otomatis bertindak pada mode resiko rendah, operasi reversibel.

CRM

AI CRM layar rumah

Pusat Komando adalah pengarahan harianmu, membukanya setiap pagi untuk melihat apa yang terjadi, apa yang perlu perhatian, dan apa yang harus dilakukan selanjutnya.

Pusat Perintah
Pusat Perintah CRMRumah CRM dengan Premiint / Win-rate / Pipeline toggles, memprediksikan KPI, dan sebuah antrian proposal AI dengan Approve dan Dismiss pada setiap baris.Pusat Perintah CRMarea kerjaRadarLaju menangBaris pipaTERLUAR$74K87%Proposal AI menyetujui antrianBuat perjanjian $24kdari chatting dengan pembeliTeguhkanlahBubarkanPindahkan Nimbus → Proposalpositif reply terdeteksiTeguhkanlahBubarkanTugas log sedang menindaklanjuti Puncaktidak ada aktivitas dalam hari 7TeguhkanlahBubarkan1TOGGLELaju depan2AI PROPOSESTawar, tahapan, tugas3YOU DECIDEAtur atau abaikan
Pusat Perintah yang sebenarnya: switch antara Forecast, Win rate dan Pipeline, dan kerjakan antrian proposal AI, menyetujui atau mengabaikan penawaran, langkah panggung dan tugas yang ditunjukkan.

Apa yang Pusat Komando tunjukkan

Jumlah hari ini

Nilai pipa, penawaran won / hilang, petunjuk baru, penawaran aktif, dan kecenderungan pendapatan, sebuah snapshot dari negara Anda saat ini.

Apa OpsIQ ditemukan

Menurut pemahaman: mencegah transaksi, dan resiko rekening, peluang baru, masalah kualitas data, dan sinyal pasar.

Apa yang OpsIQ lakukan

Aksi yang diambil oleh AI (dalam Autopilot) atau diusulkan (di Kopilot): kemajuan tahap, peningkatan skor, pengayaan kontak, dan pembuatan tugas.

Butuh persetujuan

Antrian proposal AI menunggu keputusan Anda. Setiap menunjukkan tindakan yang diusulkan, penalaran, dan bukti. Menawarkan, menyunting, atau menolak.

Selanjutnya

Daftar peringkat lain dari 10 yang paling penting untuk dilakukan hari ini: menindaklanjuti sebuah kesepakatan, periksa akun berisiko, penelitian memimpin baru, dll.

Status pembantu

Kesehatan agen AI: tangkap, Data Steward, Deal Intelligence, DeaI Coach, SDR, Retention. Hijau = berjalan, amber = membutuhkan perhatian, red = error.

Hasil

ROI pelacakan: transaksi dipengaruhi oleh AI, waktu disimpan, akurasi prediksi, dan perbandingan dengan manual CRM bekerja.

Referensi pengarahan pagi

1
Baca angka hari ini

Periksa tren kesehatan dan pendapatan pipa. Apakah Anda pada jalur bulan ini?

2
Bersihkan antrian persetujuan

Ulas setiap proposal AI. Tetapkan tindakan aman, sunting di mana dibutuhkan, tolak saran buruk.

3
Periksa apa yang ditemukan OpsIQ

Membaca wawasan AI. Apakah ada kesepakatan yang beresiko? Apakah ada kesempatan baru?

4
Bekerja dalam daftar gerakan berikutnya

AI telah meningkatkannya dengan important dan potensi dampak.

Menangkap setelah istirahat

Skenario:
Kau pergi selama seminggu. / Apa yang terjadi saat kau pergi?
Apa yang harus dilakukan:

Buka Pusat Perintah dan periksa: (1) "Apa OpsIQ melakukan "menunjukkan semua tindakan AI selama Anda tidak ada. (2) "Needs advention" shows proposal waiting for your review. (3) "Apa OpsIQ ditemukan "barang-barang penting yang disorot. (4) Atur kisaran tanggal dashboard untuk periode ketidakhadiran Anda untuk melihat tren.

CRM

Kontak, perusahaan dan penawaran

CRM mengatur hubungan bisnis Anda menjadi empat obyek: Kontak (orang), Perusahaan (organisasi), Deals (peluang pendapatan), dan Tugas (tindak lanjut).

obyek CRM
obyek CRMSebuah rekaman kontak yang terhubung dengan Company, Deal dan Task object dalam grafik yang tersambung.obyek CRMarea kerjaKontakperson · email · phonePerusahaanaccountsSetujukesempatan pendapatanTugasMengikuti-up action1OBJECTSKontak, perusahaan, penawaran2LINKEDSatu grafik terhubung3TASKSFollow- ups terpasang
Empat objek inti (kontak, perusahaan, penawaran, dan tugas) terhubung ke satu grafik pelanggan yang tersambung.

Kontak

Apa itu kontak?

Seseorang di CRM. mereka mungkin pelanggan, prospek, mitra, atau petunjuk.

Mencari kontak

Gunakan kotak pencarian untuk menemukan nama, email, perusahaan, atau tag. Gunakan penyaring: tahap lifecycle, skor utama, sumber, negara, tanggal terakhir aktivitas, pemilik yang ditugaskan.

Profil kontak

Klik kontak untuk melihat profil lengkap mereka: info pribadi, perusahaan, transaksi, kegiatan, tiket, obrolan, situs kunjungan, skor utama, dan wawasan AI.

Skor panas

A0-100 skor dihitung dari sinyal perilaku: kunjungan situs, keterlibatan email, interaksi obrolan, riwayat pembelian, dan pengakuan.

Perusahaan

... tiket lagi...
Menghubungkan perusahaan kontak-

Kontak dihubungkan dengan perusahaan berdasarkan domain surel atau tugas manual. Satu perusahaan dapat memiliki banyak kontak.

Perjanjian

Apa itu kesepakatan?

Kesempatan pendapatan.

Menang probabilitas

Kesempatan persentase untuk memenangkan kesepakatan ini. Diatur secara manual atau dihitung oleh AI berdasarkan data kemenangan historis Anda. Mengemudikan perkiraan yang ditimbang.

Kesehatan

Hijau (sehat), amber (beresiko), atau merah (stalled). Berdasarkan retensi aktivitas, durasi panggung, dan sinyal keterlibatan.

Tugas

Apa itu tugas

Aksi yang diikuti yang ditugaskan kepada seseorang. Tugas memiliki judul, tanggal jatuh tempo, prioritas, tipe (call, email, rapat, lain), dan terkait kontak / kesepakatan.

Tugas-tugas yang dihasilkan

AI menciptakan tugas secara otomatis ketika mendeteksi sesuatu membutuhkan perhatian: menindaklanjuti sebuah kesepakatan yang terhenti, menanggapi akun yang beresiko, penelitian petunjuk baru.

Mencari petunjuk panas

Skenario:
Anda ingin melihat semua high- skor kontak di Inggris yang belum dihubungi baru-baru ini.
Apa yang harus dilakukan:

Pergi ke Kontak. Filter oleh: Nilai lead > 80, Negara = Inggris, aktivitas terakhir > 7 beberapa hari yang lalu, urutkan dengan skor timah menurun ini adalah petunjuk terhebatmu yg diabaikan prioritas jangkauan

Membuat kesepakatan dari kontak

Skenario:
Kontak baru saja menyatakan ketertarikan dalam rencana perusahaan Anda selama chatting.
Apa yang harus dilakukan:

Buka profil kontak. Klik "Buat kesepakatan". Masukkan judul transaksi (mis., "Acme Corp - Enterprise Plan"), jumlah, baris pipa, dan tahap (misalnya, "Kualified"). Atur tanggal dekat dan tetapkan ke anda sendiri. Pelatih Kesepakatan akan mulai pelacakan kesempatan ini.

CRM

Jalur pipa (papan kesepakatan Anda)

Baris pipa adalah papan visual dimana perjanjian bergerak melalui tahapan dari kiri ke kanan tarik dan jatuhkan kartu untuk melakukan kesepakatan setiap kartu menunjukkan jumlah transaksinya, memenangkan kemungkinan, dan status kesehatan

Baris pipa
Pipa CRMLayar pipa dengan Open- deals, Open-value, Weighted- prakiraan dan Atrificates statistik, sebuah tombol Newdeal, sebuah antrian AI Approve, dan papan Lead / Qualified / Won.Baris pipaarea kerjaBuka penawaran23Buka nilai$128kPrakiraan Weighted$74KTawar-tawar yang dikawal12+ Perjanjian BaruAntrian peresmian2 untuk mengulasTIDAKVolt Inc$4kApi$6kDIKENALNimbus$30kPuncak$9kWINNOrbit$48k1LIVE STATSBuka ramalan2AI QUEUEMenawarkan penawaran yang diusulkan3BOARDSeret penawaran demi tahap
Layar pipa yang sebenarnya: statistik langsung (nilai terbuka, perkiraan tertimbang), sebuah antrian AI Approve untuk penawaran yang diusulkan, dan drag-and-drop board.

Menggunakan papan pipa

1
Lihat penawaran Anda

Pipa ini menunjukkan semua transaksi aktif sebagai kartu yang ditata dalam kolom (tahap). Setiap tajuk kolom menampilkan nilai total dari penawaran pada tahapan itu.

2
Seret untuk dimaju

Tarik kartu ke tahap berikutnya. Kemungkinan menang dan menghitung pemutakhiran seketika. Jika langkah gagal (validasi error), kartu akan kembali ke posisi semula.

3
Periksa lencana kartu

Lencana hijau = sehat (baru-baru ini aktif). Amber = beresiko (melambat, perlu perhatian). Red = terhenti (tidak ada aktivitas terlalu lama).

4
Klik untuk rincian

Klik sebuah kartu untuk membuka panel detail kesepakatan dengan kontak, aktivitas, Deal Coach singkat, dan tindakan cepat.

Antrian persetujuan

Proposal AI muncul dalam antrian persetujuan di atas halaman pipa. Setiap proposal menunjukkan apa yang Al ingin lakukan, mengapa, dan bukti. Anda dapat:

Teguhkanlah

Menerima proposal seperti itu tindakan berjalan melalui Lapisan Kepercayaan dan dicatat dalam jurnal.

Sunting

Ubah proposal sebelum menyetujui.

Tolak

Batalkan proposal ini, AI belajar dari penolakan untuk membuat saran yang lebih baik di masa depan.

Menang probabilitas dijelaskan

Menang probabilitas dapat diatur secara manual atau dihitung oleh AI. Ketika AI menghitungnya, ia menggunakan model yang dilatih pada penawaran tertutup Anda (menang dan kalah). Jika Anda tidak memiliki cukup data historis, AI menggunakan kemungkinan awal tahap. Probabilitas drive ramalan berat: a $10,000 sepakat di 30% Kontribusi kemungkinan $3,000 menurut ramalan "kemungkinan".

Pindah kesepakatan ke Won

Skenario:
Seorang pelanggan menandatangani kontrak dan dibayar.
Apa yang harus dilakukan:

Tarik kartu kesepakatan ke panggung "Won". OpsIQ Will: (1) Tandai kesepakatan sebagai dekat- won. (2) Perbarui ramalan cuaca. (3) Tambahkan "Won" aktivitas ke timeline. (4) Jika dikonfigurasi, memicu suatu peristiwa webhook (crm.deal.won). (5) Perbarui tahap lifecycle kontak ke "Pelanggan".

Menunjukan penawaran yang terjebak

Skenario:
Kau ingin menemukan kesepakatan yang berada di tahap yang sama terlalu lama.
Apa yang harus dilakukan:

Cari lencana merah (stalled) pada papan pipa. Tawar-tawar ini tidak memiliki aktivitas lebih lama daripada threshold yang dikonfigurasi membusuk (diatur dalam CRM Configets > Pipelines). Klik setiap transaksi macet untuk melihat Rekomendasi Deal Coach untuk rectivation.

Dapatkah saya memiliki beberapa jaringan pipa?+

Ya. Pergi ke CRM Konfigurasi > Pipelines untuk membuat jaringan pipa tambahan. Gunakan kasus: pipjars terpisah untuk bisnis baru vs pembaharuan, atau untuk berbagai produk / jasa.

Apa yang terjadi ketika aku menyeret kesepakatan untuk "Lost"?+

Kesepakatan ini ditandai sebagai penutupan-hilang. Anda akan ditanyai untuk alasan yang hilang. Kesepakatan itu dihapus dari papan aktif tetapi dapat ditemukan dalam filter perjanjian tertutup. Kontak tetap di CRM.

CRM

Pelatihan kesepakatan

Pelatih Perjanjian menganalisa setiap kesepakatan dan memberikan anda status kesehatan, sinyal resiko, orang-orang penting, daftar kualifikasi, persiapan rapat, dan menyarankan tindakan berikutnya semuanya adalah sumber semua yang pelatih tunjukkan tiket, obrolan, atau aktivitas masing-masing berasal dari.

Pelatih Deal
Pelatih DealDaftar kartu kesepakatan, mendeteksi adanya sinyal risiko dengan sumber bukti, di samping rekomendasi AI dan tombol email.Pelatih Dealarea kerjaAcme Corp $24,000Panggung: Proposal 60% menangSIGNALS RISKTidak ada jawaban dalam 10 hariJuara pergi tenangKompetitor disebutkan dalam percakapanSumber: tiket #482 · chat 6/12 · untaian surelAI merekomendasikanKembali melibatkan ekonomiPembeli dengan rekap ROIdan 7-hari rencana tutup.Draft email1SIGNALSMengapa kesepakatan bisa tergelincir2SOURCEDSetiap klaim mengutip bukti3AKSISatu klik langkah berikutnya
Tanda pelatih mengapa perjanjian mungkin tergelincir (setiap sinyal mengutip sumbernya) dan tangan Anda langkah berikutnya untuk mengambil.

Apa yang pelatih katakan padamu

Penjelasan kesehatan

Mengapa kesepakatan itu sehat, beresiko, atau terhenti sinyal tertentu: hari di panggung, tanggal kontak terakhir, frekuensi aktivitas, pesaing menyebutkan, pola keberatan.

Sinyal

Diabaikan ke: keberatan dinaikkan, pesaing menyebutkan, diskusi harga, mendukung indikator risiko, memperbaharui / ekspansi sinyal. Setiap link sinyal ke sumbernya (transkrip percakapan, tiket, email, aktivitas).

Peta pemenang dan blocker

Siapa yang membantu kesepakatan (juara) dan siapa yang menolak (blocker).

Daftar cek kualifikasi

MEDDICC atau BANT checklist (dapat diatur) menunjukkan kriteria kualifikasi mana yang terpenuhi dan yang hilang.

Persiapan pertemuan

Sebelum pertemuan yang dijadwalkan, pelatih menghasilkan agenda singkat: poin kunci untuk menutupi, pertanyaan untuk meminta, risiko untuk alamat, dan bahan untuk mempersiapkan.

Balas dan rencana panggilan

Disarankan pesan berikutnya atau skrip panggilan berdasarkan kondisi kesepakatan saat ini dan interaksi baru-baru ini.

Garis waktu bukti

Setiap klaim yang dibuat oleh pelatih adalah sumber: nomor tiket, ID transkrip obrolan, tanggal aktivitas, atau kunjungan situs.

Bagaimana menggunakan pelatih

1
Baca singkat

Buka semua kesepakatan dan gulir ke bagian Deal Coach. Baca status kesehatan dan sinyal kunci.

2
Tutup kesenjangan kualifikasi

Periksa daftar kualifikasi jika "Economic Buyer" hilang, rencana untuk mengidentifikasi dan melibatkan pemegang anggaran.

3
Bertindak berdasarkan saran

Pelatih menyarankan aksi konkret selanjutnya. Klik untuk membuat tugas, menyusun email, atau menjadwalkan pertemuan, semua dialihkan melalui antrian persetujuan.

Bersiap untuk pertemuan besar

Skenario:
Anda memiliki pertemuan dengan prospek besok tentang $50,000 Setuju.
Apa yang harus dilakukan:

Membuka kesepakatan dan membaca bagian Pertemuan Prep.1) Titik pembicaraan kunci berdasarkan interaksi terbaru. (2) Objection mereka dibesarkan dalam chatting minggu lalu. (3) Pesaing yang mereka sebutkan dalam tiket dukungan. (4Pertanyaan untuk menanyakan waktu mereka.5) Faktor berisiko untuk mengatasi secara proaktif. Gunakan singkat ini untuk mempersiapkan fokus, bukti berdasarkan agenda.

Memahami mengapa kesepakatan adalah risiko

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

Klik dan baca penjelasan kesehatan Pelatih Perjanjian. Hal ini mungkin mengatakan: "Kesepakatan ini telah dalam tahap Proposal untuk 22 hari (threshold: 14 Kontak terakhir adalah 11 kontak utama membuka tiket dukungan tentang masalah migrasi data 5 hari yang lalu (tiket # T -892) Sugesti: mengatasi keprihatinan migrasi dan jadwal panggilan-up. "Sekarang Anda tahu persis apa yang harus diperbaiki.

CRM

Forecast dan laporan

Pesawat-grade predikting dengan jangkauan yang dapat dipertahankan, penjelasan tingkat-deal- perubahan tingkat, dan pelacakan akurasi sehingga Anda dapat membuktikan dan menjelaskan nomor Anda.

Radar
RadarSebuah nomor ramalan triwulanan dengan Commit, Best- kasus dan Pipaine Band dan catatan akurasi.Radararea kerjaLUAR INI$312k87% ke tujuanKommitKasus terbaikBaris pipaDitimbang oleh kesehatan dan sejarah transaksi1KATEGORICommit ke baris pipa2AI-WEIGHTEDDengan kesehatan yang baik3PROVABLEAkurasi dilacak
Commit, kasus terbaik dan jalur pipa sekilas, kelas atas dengan menangani kesehatan, dengan akurasi dilacak sehingga Anda dapat mempertahankannya.

Kategori forecast

Dikeluarkan

Berurusan dengan 80% atau menang lebih tinggi.

Kemungkinan ringan

Semua penawaran terbuka yang ditimbang oleh kemungkinan menang perhitungan mereka.

Kasus terbaik

Semua penawaran terbuka dengan nilai penuh. Ini adalah pendapatan maksimum yang mungkin jika semuanya berjalan sempurna (jarang tidak).

Interval kepercayaan

An 80% Band probabilitas menunjukkan jangkauan realistis. Contoh: "Anda mungkin akan menutup antara $45,000 dan $72,000 kuartal ini ".

Apa yang berubah dan mengapa

Perkiraan termasuk minggu-over- minggu perubahan atclass. Ketika perkiraan Anda turun oleh $15,000, laporan menjelaskan persis mana yang menyebabkan perubahan: "Deal A tergelincir ke kuartal berikutnya ($8,000), Deal B hilang ($5,000), Deal C mengurangi nilai ($2,000)."

Pelacakan akurasi

Forecast MAPE

Berarti Kesalahan Persentase Absolute: seberapa jauh perkiraan Anda telah historis 15% berarti prakiraan Anda biasanya dalam 15% dari hasil yang sebenarnya.

Memenangkan kalibrasi probabilitas

Nilai singkat mengukur seberapa baik menang probabilitas sesuai hasil sebenarnya. Jika menangani di 70% probabilitas sebenarnya menang 70% waktu, kalibrasi yang baik.

Foto tahunan

OpsIQ menangkap snapshot dari prakiraan Anda setiap minggu (via cron). Seiring waktu, Anda dapat melihat bagaimana akurasi prediksi Anda membaik.

Rollups dan peringatan

Konversi per tahap

Berapa banyak transaksi yang berpindah dari setiap tahap ke tahap berikutnya. 80% lulus dari Kualified ke Proposal tetapi hanya 20% Dari Proposal ke Negosiasi, proposal Anda mungkin perlu bekerja.

Laju kemenangan sumber-Per-

Sumber yang menghasilkan kemenangan terbesar, berinvestasi lebih dalam sumber tingkat tinggi.

Per- pemilik kinerja

Bagaimana setiap anggota tim sales tampil: penawaran menang, nilai pipa, rata-rata ukuran kesepakatan, memenangkan tingkat.

Warning

Mengungkit muatan (probabilitas rendah yang tidak realistis), overcompending (tidak realistis tinggi), dan berkomitmen-at-risiko (perjanjian probabilitas tinggi-kemungkinan menunjukkan sinyal kios).

Memahami penurunan ramalan

Skenario:
Perkiraan triwulanan Anda menurun dari $180,000 ke $155,000 sejak minggu lalu.
Apa yang harus dilakukan:

Buka halaman Forecast dan periksa "Apa yang berubah". Laporan menunjukkan: "Kesepakatan Acme Corp (Acme Corps)$15,000) pindah ke Lost, pesaing terpilih beta Inc kesepakatan ($8,000 Deal dengan Gamma LLC ($3,000) Ditambah minggu ini. "Perubahan bersih adalah -$20,000 + $3,000 = -$17,000, menjelaskan penurunan dari $180K ke $163K (dengan sisa $8K dijelaskan oleh kemungkinan penyesuaian pada transaksi lain).

CRM

Mencari bisnis baru

Agen Prospek membantu Anda menemukan dan memberikan potensi pelanggan penelitian, menggambarkan pelanggan ideal Anda, menambahkan perusahaan sasaran, dan membiarkan penelitian AI, skor, dan konsep jangkauan sentuhan pertama.

Memfeksikan
MemfeksikanDaftar perusahaan prospek yang ditemukan dengan catatan yang cocok, skor dan tombol jangkauan draft masing-masing.Memfeksikanarea kerjaProspek ditemukan oleh agen SDRNortwind LtdSaaS · 50 staf · dukungan perekrutan88Jarak DraftCobalt MfgManufaktur 200 staf74Jarak DraftMesa RetaileCommerce 30 staf69Jarak DraftKesehatan VegaPerawatan kesehatan 80 staf63Jarak Draft1FINDRekening target sumber AI2SkorAtur peringkat3DRAFTPertama-sentuhan ditulis untuk Anda
Agen SDR menemukan perusahaan target, dan mencetak angka sesuai, dan draf outreach pertama sentuhan untuk ulasan Anda.

Satu setup waktu

1
Jelaskan pelanggan idealmu.

Pergi ke CRM Konfigurasi > Prospek. Jelaskan profil pelanggan ideal Anda (ICP): target Industri, ukuran perusahaan, judul kerja, fokus geografis, persyaratan yang cocok, dan skor minimum cocok. Contoh: "B2B SaaS company with 50-500 karyawan di AS / Inggris, menjual alat pengembang, dengan VP Penjualan atau Kepala Pertumbuhan sebagai kontak utama. "

2
Tambah perusahaan target

Masukkan domain perusahaan atau nama yang ingin Anda teliti. Anda juga dapat membiarkan perusahaan AI menyarankan berdasarkan ICP Anda.

3
Hasil penelitian Ulasan

AI memperkaya setiap perusahaan dengan data yang tersedia: ukuran, industri, teknologi tumpukan, berita baru-baru ini, dan skor cocok dengan penjelasan.

4
Atur jangkauan

Untuk perusahaan yang baik-fit, draf AI pesan pertama-sentuh. Tinjau dan setujui dalam antrian.

Fit mencetak

Setiap prospek mendapat0-100 skor fit berdasarkan lima faktor:

Cocok dengan ICP

Seberapa baik perusahaan ini cocok dengan profil pelanggan ideal Anda (industri, ukuran, lokasi).

Sinyal darurat

Apa ada bukti mereka butuh produkmu sekarang? keluhan tentang pesaing.

Proksi anggaran

Ukuran perusahaan, dana, dan indikator pendapatan menyarankan ketersediaan anggaran.

Produk cocok

Seberapa relevan produkmu dengan bisnis mereka berdasarkan industri dan teknologi.

Dukungan cocok

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

Meneliti perusahaan target

Skenario:
Anda ingin mengevaluasi apakah acme.com layak mengejar.
Apa yang harus dilakukan:

Tambah acme.com ke daftar prospecting. The AI return: Fit score 78/100 B2B SaaS, 120 karyawan, US- berbasis, baru-baru ini menyewa VP (sinyal darurat), menggunakan pesaing X (cocok produk). Membeli sinyal: mengunjungi halaman harga Anda dua kali bulan lalu (dari pelacakan situs). Kontak terbaik: [email protected] (VP of Sales). Drafted pembuka referensi baru-baru ini mereka mempekerjakan dan harga halaman kunjungan.

CRM

Urutan otomatis mengikuti-up

Sekuences autocate multi- step follow-up: campuran email, tunggu, tugas, panggilan, dan webhook langkah yang dijalankan secara otomatis setelah Anda menyetujui pengiriman awal.

Urutan
Ikuti urutanAliran urutan horisontal: Email, tunggu tiga hari, Email lalu tugas, dengan deteksi jawaban.Ikuti urutanarea kerjaSetelah Anda menyetujui pertama kirim →SurelIntroTunggu3 hariSurelIkuti.TugasPanggilLangkah dapat berupa email, tunggu, tugas atau webhook. Suatu jawaban otomatis menghentikan urutan.1AUTOMATEMulti- langkah mengikuti-up2STEPSEmail · tunggu · tugas · webhook3YOU APPROVEPengiriman pertama digated
Diotopsi multi- langkah mengikuti-up (email, tunggu, email, tugas) yang Anda setujui pertama dan jawaban berhenti secara otomatis.

Bagaimana urutan bekerja

1
Buat urutan

Tentukan langkah: email, tunggu 3 hari, email, tunggu 5 hari, tugas (panggil jika tidak ada balasan), email. Setiap langkah surel memiliki template yang dapat disesuaikan.

2
Menggulung kontak

Tambahkan kontak ke urutan. AI juga dapat mengusulkan pendaftaran dari hasil prospecting.

3
Eksekusi otomatis

Langkah berjalan secara otomatis sesuai jadwal. Jika kontak menjawab pada titik apapun, urutan berhenti secara otomatis.

4
Hasil trek

Lihat rate terbuka, rate jawaban, laju konversi, dan unsubjurutes per langkah. Gunakan ini untuk mengoptimalkan urutan Anda.

Balas pemahaman

Ketika kontak menjawab, AI mengklasifikasi jawaban:

Positif

Tertarik, ingin berbicara. jeda sebentar, tugas dibuat untuk diikuti.

Keberatan.

Memiliki kekhawatiran tetapi tidak menolak.

Berhenti Berlangganan

Ingin berhenti menerima pesan. Kontak ditekan permanen.

Tidak sekarang

Tertarik tapi waktu salah, istirahat sebentar, tugas tidur siang dibuat.

Salah orang

Bukan kontak yang tepat, Sequence berhenti, kontak ditandai untuk tinjauan.

Dukungan

Sebuah pertanyaan dukungan, bukan jawaban penjualan, jeda sequence, tiket dibuat.

Perlindungan spam Anti-

Penanganan opt- keluar

Permintaan berhenti langganan akan segera dihormati dan kontak ditekan dari semua urutan masa depan.

Tutup pengiriman harian

Batas kerja-tingkat sehari-hari (baku: 1,000 email). prevents massa mengirimkan filter spam pemicu.

Batas kontak per-

Maksimum 1 pesan per kontak per hari.

Penanganan over- cap

Langkah yang melebihi batas harian ditunda sampai hari berikutnya, tidak pernah dijatuhkan atau dilewati.

Apa yang terjadi jika kontak membuka tiket dukungan selama urutan?+

Urutan jeda otomatis. Dukungan mengambil prioritas melalui jangkauan. Urutan dapat secara manual dilanjutkan setelah masalah dukungan diselesaikan.

Bisakah aku melakukan tes A / B?+

Tidak langsung dalam urutan, tetapi Anda dapat membuat dua urutan dengan pesan yang berbeda dan membandingkan hasil mereka.

CRM

Perkakas Pertumbuhan

Satu halaman di bawah CRM yang memegang mesin pertumbuhan: pendapatan berulang (MRR / ARR), katalog produk, memimpin, hubungan pemesanan dan mengarahkan routing. Semua yang ada di sini menulis langsung ke CRM, jadi bentuk pengajuan atau panggilan dipesan adalah kontak dengan sejarah, bukan baris dalam lembar kerja.

Apa yang hidup di halaman

Rekursi pendapatan

Pendapatan

MRR dan ARR diproyeksikan dari buku besar penagihan asli Anda. Berlangganan dikelompokkan dari pembayaran per platform, siklus tagihan yang diberikan dari kesenjangan pembayaran, dan berlangganan lapses ketika pembayaran terlambat lewat 1.5 Kalikan siklusnya. Pelanggan menghubungkan ke kontak CRM secara otomatis ketika buku besar membawa email mereka.

Katalog produksi

Katalog

Salah satu sumber kebenaran untuk apa yang Anda jual. Kutipan menarik nama dan daftar harga dari katalog, dan menerima kutipan menggulung ke pendapatan oleh produk. Menghasilkan arsip, mereka tidak pernah menghapus.

Bentuk penangkapan-timbal

Tangkap

Setiap bentuk mendapat halaman yang diselenggarakan ditambah iframe kode untuk situs Anda sendiri. Pesan menjadi kontak, pemilik mendapat pemberitahuan, dan aturan routing Anda menetapkan memimpin.

MenBooking links

Menjadwal

Berbagi sebuah tautan, biarkan prospek memilih slot bebas. banyak menghormati jam kerja penyelenggara, zona waktu dan pertemuan yang ada. Sebuah pemesanan menciptakan rapat, email konfirmasi prospeknya dan memberitahukan penyelenggaranya.

Memimpin routing

Routing

Aturan daerah dijalankan pertama, lalu aturan lapangan (cocok dengan bidang atau sumber), kemudian round-robin di kolam rep kola. rute itu mengena dan CALLS sama, apapun status kesepakatan: sebuah perjanjian menang masih membutuhkan pemilik untuk komisi, tanggung jawab akun dan diikuti-up, dan dalam mode visibilitas pemilik atau tim yang tidak terlihat oleh semua orang kecuali manajer. Catatan dibuat oleh penjualan komidor (a connewektor, chat, impor) tidak ada lagi peraturan yang telah diretas dengan pemilik yang tidak pernah diberikan.

Buat bentuk pertama

1
Buka Perkakas Perkembangan

Pergi ke CRM, kemudian Growth Tools, kemudian Lead-menangkap bagian formulir.

2
Nama dan kolom pick

Ketikkan nama dan daftar ruas yang dipisahkan koma, misalnya nama, email, telepon, pesan. Email selalu diperlukan.

3
Berbagi atau embed

Salin link yang diselenggarakan untuk berbagi di mana saja, atau salin kode embed dan tempelkan ke halaman manapun dari situs web Anda.

4
Petunjuk jam tangan tiba

Setiap penyerahan adalah kontak CRM dengan aktivitas form. submit, pemberitahuan pemilik, dan routing otomatis.

💡
Halaman penangkapan publik memakai alamat area kerja Anda sendiri. Ruang kerja Cloud menggunakan subdomain yang ditugaskan mereka (perusahaan.opsiq.help), sehingga link selalu menyelesaikan data yang tepat.

Bangun-dalam perlindungan

* Bot melihat sukses, Anda melihat apa-apa *

Sebuah bidang honeypot tersembunyi diam-diam membuang pengiriman bot.

Laju terbatas

10 kiriman per jam per IP alamat seluruh bentuk dan booking.

Consent tetap jujur

Mengirimkan formulir tidak memberikan persetujuan pemasaran. Hanya sebuah kotak cek persetujuan eksplisit.

Tidak ada booking ganda

Sebuah slot divalidasi terhadap baru tersedia cek pada saat pemesanan.

Darimana data pendapatan yang berulang itu berasal?+

Dari buku kas yang sama yang dipakai oleh halaman penjualan Anda, diberikan oleh koneksi penagihan. Gunakan Re- sync dari tagihan setelah menghubungkan platform baru.

Dapatkah saya menggunakan bentuk tanpa website?+

Ya, setiap bentuk memiliki halaman yang diselenggarakan di alamat Anda sendiri yang bekerja standalone, dengan atau tanpa JavaScript.

CRM

Pesan Hub (SMS dan WhatsApp)

Satu konektor, hingga 20 gerbang. Hubungkan penyedia SMS dan WhatsApp yang Anda gunakan, tandai satu sebagai baku, dan pilih salah satunya ketika mengirim kontak. Konsen diperiksa oleh CRM sebelum gerbang apapun dihubungi.

Atur

1
Aktifkan konektor

Pada halaman Connectors, buka Messaging Hub (SMS dan WhatsApp) dan aktifkan.

2
Tambahkan penyedia

Di laci yang sama, atau di Alat Pertumbuhan CRM, pilih sebuah pintu gerbang dari dropdown (Twilio, Vandani, Termii, Meta WhatsApp Cloud, Infobip dan lebih), tempelkan itu API kredensial dan koneksi. Anda dapat menambahkan beberapa, termasuk gateway yang sama dua kali dengan akun yang berbeda.

3
Kaitkan webhook

Setiap entri penyedia menunjukkan webhook sendiri URL dengan tombol salin. Tempel ke delivery- laporan gerbang dan setting pesan inbound- untuk mendapatkan status pengiriman dan membalas kembali ke OpsIQ.

4
Kirim dari kontak

Buka kontak dan gunakan tombol SMS atau WhatsApp. Jika lebih dari satu penyedia mendukung kanal, pemilih memungkinkan Anda memilih; jika tidak, maka standar dipakai.

Consent datang pertama

Hanya diberikan persetujuan

Kesetujuan yang tidak diketahui bukanlah kesetujuan. Pengiriman ditolak kecuali SMS diberikan secara eksplisit. WhatsApp menggunakan kesetujuannya sendiri.

Do- not--kontak selalu menang

Sebuah tanda kontak tidak memblokir setiap saluran, tidak peduli apa lagi yang diatur.

Tekanan dihormati

Kontak pada daftar penindasan tidak pernah diSMS.

Pengungsi menyebutkan alasan mereka

Kirim diblokir memberitahu Anda mengapa, sehingga Anda dapat memperbaiki data bukan menebak.

Bagi pengembang: kontrak webhook

URL bentuk

https://your-address/opsiq/cron/messaging_webhook.php?sk=SITE_KEY&e=ENTRY_ID&t=TOKEN. Token per- entri ditampilkan ketika penyedia tersambung dan tidak pernah diputar pada sunting.

Format dimengerti

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":"..."}.

Efek

Pengiriman melaporkan menandai baris buku besar outreach yang membawa id pesan penyedia sebagai pengiriman atau bouncing. Pesan masuk cocok dengan nomor telepon di dalam ruang kerja, tanah sebagai aktivitas message. enceived, dan tandai percakapan menjawab.

Mode kegagalan

Jawaban token salah atau hilang 403. Pembayaran tidak diketahui dihitung dan diabaikan, tidak pernah fatal, sehingga sebuah gateway salah konfigurasi tidak dapat mematahkan titik akhir.

Gerbang mana yang didukung?+

Twilio, Vilio, Plivo, MesgageBird, Sinch, Infobip, Telnyx, ClickSend, Termii, Afrika Berbicara, BulkSMS, Textlocal, Meta WhatsApp Cloud, 360dialog, SMSAPI, Gupshup, Kaleyra, D7 Networks, dan sweatps webhook custom untuk hal lain.

Apakah kredensial aman?+

Kredensial disimpan terenkripsi dalam konfigurasi konektor dan tidak pernah bergema kembali ke peramban. Menyunting entri dengan rahasia kosong menyimpan yang tersimpan.

Bisakah AI mengirim pesan?+

Ya, melalui tindakan yang terdaftar yang membutuhkan konfirmasi dan menjalankan gerbang persetujuan yang sama. AI juga dapat daftar penyedia terhubung untuk menjelaskan apa yang tersedia.

CRM

Menjaga dan mengembangkan pelanggan

Manajemen Lifecycle membantu Anda melindungi pendapatan yang sudah ada.

Siklus Hidup
Papan LifecyclePapan pelampung (Onboarding, Aktif, At- risk, Renewal) dengan bar kesehatan pada setiap kartu rekening.Siklus Hiduparea kerjaONBOARDINGAsmekesehatan 40AKTIFGlobexkesehatan 88Initechkesehatan 76AT- RISKSoylentkesehatan 28PERBAIKIUmbrapembaharuan pada 12dekspansi + $8k1STAGESMenuju ke pembaharuan2SCORED& Ekspansi Kesehatan3PLAYBOOKLangkah selanjutnya yang disarankan
Pelanggan bergerak melalui onboarding, aktif, di-risiko dan pembaharuan, masing-masing mencetak untuk kesehatan dan ekspansi dengan playbook.

Papan lifecycle

Peta panggung

Papan visual menunjukkan di mana setiap akun berdiri: Memimpin, Prospect, Kesempatan, Pelanggan, Ekspansi, Peresmian, Pada Risk, Gereja.

Akun resiko

Account ditandai dengan resiko tinggi churn.

Kesempatan Ekspansi

Akun yang menunjukkan sinyal kesiapan untuk membeli lebih banyak: penggunaan tinggi, permintaan fitur, pertanyaan rencana.

Perbarui karena

Account dengan tanggal pembaharuan mendatang. Diurut berdasarkan tingkat risiko dan nilai pendapatan.

Bagaimana OpsIQ mendeteksi risiko churn

Resiko Chum dihitung dari beberapa sinyal menyatu bersama-sama:

Sinyal CRM

Kesehatan, ketidakaktifan, kerugian baru-baru ini, penurunan keterlibatan.

Sinyal dukungan

Jumlah tiket terbuka, volume tiket naik, sentimen negatif, eskalasi.

Produk keterlibatan

Frekuensi login, fitur penggunaan, kunjungan halaman, API Panggilan.

Sinyal penagihan

Gagal membayar, menunda faktur, permintaan downgrade, kunjungan halaman pembatalan.

Buku Permainan

Simpan play

Untuk rekening resiko: menjangkau proaktif, mengatasi kekhawatiran, menawarkan dukungan, meningkat jika diperlukan.

Perbarui main

Untuk pembaharuan mendatang: mengkonfirmasi kepuasan, penggunaan ulasan, nilai saat ini, menawarkan insentif jika sesuai.

Pemusnahan bermain

Untuk benar-benar - untuk mengembangkan akun: opsi upgrade sekarang, berbagi cerita sukses, menunjukkan ROI.

Mainkan Adopsi

Untuk meremehkan akun: menawarkan pelatihan, berbagi praktek terbaik, mengaktifkan fitur yang tidak mereka gunakan.

Spoting churn sebelum hal itu terjadi

Skenario:
Seorang pelanggan yang biasanya log in harian belum login untuk 2 minggu, dan mereka dibuka 3 tiket dukungan bulan ini.
Apa yang harus dilakukan:

Papan Lifecycle menandai akun ini sebagai "Pada Risk" dengan driver: tidak aktif (14 hari sejak terakhir login) dan dukungan spike (3x volume tiket normal). Disarankan play: proaktif outreach call untuk memahami apa yang sedang terjadi. apakah ada isu produk? apakah mereka mengevaluasi pesaing? intervensi awal dapat menyimpan akun.

CRM

Menjaga data Anda bersih

Agen Data Steward secara otomatis menemukan dan memperbaiki masalah kualitas data: duplikasi, bidang hilang, inkonsistensi, dan catatan basi.

Pengelola data
Pengelola dataDaftar isu-isu kualitas data (duplikasi, hilang, basi, format), masing-masing dengan aksi memperbaiki satu klik.Pengelola dataarea kerjaData isu yang ditemukan oleh agen StewardDuplikat[email protected] dan [email protected]GabungHilang12 kontak tidak memiliki perusahaanSekayaLama38 transaksi tidak tersentuh untuk 90+ hariUlasanFormatnomor telepon dalam format 4Perbaiki semua1CATCHESDudes, gap, stale2EXPLAINSMengapa ditandai masing-masing3FIXESPada persetujuan Anda
Agen Steward menjaga CRM-mu tetap bersih, menemukan duplikat, celah, catatan basi dan format buruk, memperbaiki persetujuan.

Apa yang menangkap

Duplikasi kontak

Beberapa catatan untuk orang yang sama (misalnya, [email protected] dan [email protected] Pelayan mengusulkan penggabungan mereka.

Data hilang

Kontak tanpa surel, transaksi tanpa jumlah, perusahaan tanpa domain. Saran mengisi dari sumber yang tersedia.

Catatan tidak terkait

Menangani tanpa kontak yang terkait, kontak tanpa perusahaan. Menghasilkan hubungan berdasarkan domain surel dan konteks.

Inkonsistensi

Sebuah kesepakatan di panggung "Won" dengan peluang 20%, sebuah kontak yang ditandai "Pelanggan" tanpa persetujuan, sebuah perusahaan dengan industri yang tidak cocok.

Salah tahap

Deal yang telah berada di tahap yang sama terlalu lama atau kontak yang tahap lifecycle tidak cocok dengan aktivitas mereka.

Cara menggunakan

1
Buka daftar pelayan

Pergi ke CRM dan temukan bagian Data Steward (atau buka dari CRM Health).

2
Atur perbaikan aman

Item hijau aman: duplikat jelas, data yang hilang. Ubahlah ini dalam jumlah besar.

3
Ulas sisanya

Barang Amber memerlukan penilaian anda: mungkin duplikasi dengan sedikit perbedaan, perubahan tahap yang diusulkan, penghubung perusahaan.

Membersihkan kontak duplikat

Skenario:
Pelayan menemukan "John Smith ([email protected]) "dan" J. Smith ([email protected]) ": email yang sama, nama tampilan yang berbeda.
Apa yang harus dilakukan:

Pelayan tersebut mengusulkan penggabungan: simpan catatan dengan lebih banyak aktivitas, gabungkan transaksi dan kegiatan rekaman lainnya. meninjau proposal, menyesuaikan nama tampilan yang masih hidup jika dibutuhkan, dan setujui. Sejarah kedua catatan 'dipertahankan dalam kontak gabungan.

CRM

Bangun CRM saya

Bangun CRM-ku memungkinkan Anda menjelaskan pengaturan CRM Anda dalam bahasa Inggris biasa. OpsIQ menghasilkan suatu rencana yang divalidasi, direversibel dan berlaku itu pada persetujuan.

Bangun CRM saya
Bangun CRM sayaDeskripsi bahasa alami di sebelah kiri menghasilkan rencana CRM yang dihasilkan dari tahap, bidang dan segmen di sebelah kanan.Bangun CRM sayaarea kerjaJelaskan bisnis AndaKami adalah agen desain webmenjual pelanggan bulanan dansatu - off proyek ke kecilBisnis.Bangun CRM sayaRencana yang dihasilkanStages: Pimpin Pengelola →Tipe tawar: pengelola, projekRuas: nilai bulananSegmen: SMB, agensiUrutan: sedang berlangsungAppreve & appse1DESCRIBEBahasa Inggris biasa di2AI PLANSLantai, lapangan, segmen3APPROVEDiapan
Jelaskan bisnis Anda dalam bahasa Inggris biasa; OpsIQ draft seluruh CRM (tahap, bidang, segmen) dan berlaku itu atas persetujuan.

Bagaimana cara kerjanya

1
Jelaskan apa yang kau inginkan

Tipe deskripsi yang mudah-Inggris dari pengaturan CRM Anda. Misalnya: "Buat pipa pembaruan dengan tahap: Kedatangan, Kontak, Negosiasi, Diperbarui, Hilang. Nilai memimpin lebih tinggi ketika mereka melihat harga dua kali".

2
Tinjau rencana

OpsIQ tampilkan pratilik dari apa yang akan ia buat: baris pipa, tahap, probabilitas panggung, aturan mencetak angka, aturan lifecycle. Tinjau setiap item.

3
Terapkan

Klik Terapkan untuk mengeksekusi rencana. Setiap perubahan direkam sebagai bundel yang dapat Anda batalkan dalam satu klik.

4
Mundur jika perlu.

Jika ada sesuatu yang tidak benar, klik Undo untuk mengembalikan seluruh bundel. CRM anda kembali ke keadaan sebelumnya.

Apa yang dapat Anda bangun

Pilet dan tahapan

Buat jaringan pipa bernama dengan tahap custom, kemungkinan baku, dan ambang batas membusuk.

Mencetak aturan

Nilai utama boost berdasarkan perilaku: "Skor lebih tinggi ketika mereka melihat harga", "Nilai rendah ketika mereka mengunjungi halaman karir".

Aturan Lifecycle

Otomatis memajukan tahap lifecycle: "Pindah ke SQL ketika mereka meminta demo, "Pindah ke Pelanggan ketika kesepakatan dimenangkan".

Ruas gubahan

Tambahkan ruas ke kontak, penawaran, atau perusahaan: teks, nomor, tanggal, pilih, checkbox, URL, email.

Daftar cek kualifikasi

Tentukan nilai MEDDICC atau BANT Pelatih Deal terhadap.

Menyiapkan pipeline pembaharuan

Skenario:
Kau mengelola langganan SaaS dan butuh pipa untuk pembaharuan.
Apa yang harus dilakukan:

Tipe: "Buat pipa pembaharuan. Stages: 90 Days Out (10%), 60 Days Out (25%), Terkontak (40%) Negosiasi (60%), Memperbaharui (100%), Gereja (0%). Set ambang busuk ke 14 hari ". OpsIQ Menghasilkan rencana, Anda mengulasnya, dan klik Terapkan. Pipa muncul di halaman pipa Anda segera.

Bagaimana jika aku menggambarkan sesuatu yang tidak mungkin?+

Pembangunan hanya menghasilkan aksi yang dapat divalidasi. Jika anda meminta sesuatu diluar kemampuannya (misalnya, "Integrasikan dengan adat saya API"), ia akan menolak permintaan dan menjelaskan apa yang bisa dilakukannya sebagai gantinya.

Dapatkah saya membatalkan perubahan?+

Ya, setiap pembangunan aksi CRM saya ditangkap sebagai bundel reversible.

CRM

Memasang CRM Anda cara Anda

Konfigurasi Manual CRM bagi tim yang lebih suka mengklik dari mengetik. Semua pengaturan yang dapat dibuat CRM saya juga tersedia sebagai ruas bentuk tradisional.

Pilet dan tahapan

Buat, ubah nama, urut ulang, dan hapus jaringan pipa dan tahapan. Atur kemenangan baku setiap tahap. Set ambang batas membusuk (hari tanpa aktivitas sebelum kesepakatan ditandai "stalled").

Ruas gubahan

Tambahkan ruas ke penawaran, kontak, atau perusahaan. Tipe field: teks, nomor, tanggal, pilih (dropdown dengan opsi yang telah ditentukan), checkbox, URL, surel. Ruas kustom muncul di profil objek dan dalam penyaring.

Daftar cek kualifikasi

Tentukan daftar cek yang dipakai Pelatih Tawar untuk mengevaluasi penawaran. Pilih MEDDICC, BANT, atau seperangkat kriteria gubahan. Setiap item dapat ditandai diperlukan atau opsional.

Aturan tahap Lifecycle

Definisikan transisi tahap otomatis: ketika kontak bertemu kondisi (tampilan harga, menyerahkan bentuk, membuat pembelian), panggung seumur hidup mereka berjalan secara otomatis.

Aturan lead- mencetak

Mendorong atau mengurangi nilai utama berdasarkan perilaku. Contoh: "Harga halaman dilihat = +15 poin ", Downloaded whitepaper = +10 poin, "Mengunjungi halaman karir = -5titik. "Jumlah minimum dapat diset (mis", harus melihat harga setidaknya 2 kali ").

Tampilan tersimpan

Buat filter bernama + urutan kombinasi untuk kontak, penawaran, atau perusahaan. Berbagi tampilan dengan tim Anda. Atur tilikan baku per tipe obyek.

Menambahkan aturan mencetak angka utama

Skenario:
Kau ingin kontak yang melihat halaman hargamu dua kali atau lebih untuk mendapatkan nilai yang lebih tinggi.
Apa yang harus dilakukan:

Pergi ke CRM Konfigurasi > Lead Scoring Rules. Klik Tambah Aturan. Set: Event = "pageview", URL berisi = "/pricing, "Minimal count =2, Nilai meningkat = +20 Simpan. Lain kali scorer berjalan, kontak yang cocok dengan aturan ini akan mendapatkan +20 untuk skor utama mereka.

CRM

Cek Kesehatan CRM

Kesehatan CRM adalah halaman diagnostik yang memastikan CRM Anda diatur dengan benar dan berjalan lancar.

Pemeriksaan kesehatan
Cek Kesehatan CRMSebuah cincin skor kesehatan di 92 di samping daftar cek dari lulus dan pemeriksaan konfigurasi peringatan.Cek Kesehatan CRMarea kerja92SEHATTahap pipa ditataKonektor terkait & mengimporAgen AI diaktifkan!Tidak ada urutan yang aktif mengikuti-up!12 kontak hilang perusahaan1AUDITORVerifikasi setup Anda2FLAGSApa yang hilang3SkorSatu angka keseluruhan
audit CRM satu halaman: skor kesehatan keseluruhan ditambah daftar cek dari apa yang diatur dengan benar dan apa yang masih perlu perhatian.

Apa yang diperiksa

Skema

Tabel basis data ada dan memiliki kolom yang benar. Jika migrasi tidak terjawab, CRM Kesehatan akan menandainya.

Agen AI

Semua agen CRM (tangkap, Data Steward, Deal Intelligence, dll) terdaftar dan sehat. Green = berjalan, amber = membutuhkan perhatian, merah = error.

Rute

CRM API rute dan AJAX titik akhir terdaftar dan dapat dihubungi.

Aksi AI

Katalog aksi CRM terdaftar dalam Aksi Registry. Jika tindakan hilang, CRM Kesehatan sendiri sembuh dengan mereregistrasikan mereka.

Jumlah data hidup

Total kontak, perusahaan, perjanjian, tugas, kegiatan, dan peristiwa. Berguna untuk memverifikasi impor dan penangkapan data yang sedang berlangsung.

Setelah pemeriksaan setup

Setelah pengaturan CRM pertama kali, buka CRM Kesehatan dan verifikasi semua cek berwarna hijau. Jika ada amber atau merah, klik item untuk penjelasan diagnostik dan disarankan diperbaiki.

Seberapa sering aku harus memeriksa Kesehatan CRM?+

Periksa setelah penataan awal, setelah pemutakhiran besar, dan kapanpun perilaku CRM tampak salah. CRM Kesehatan sendiri menyembuhkan banyak isu (seperti hilang aksi registrations) hanya dengan membuka halaman.

CRM

Sambungan CRM bagi pengembang

CRM membongkar REST publik lengkap API dan outbound webhooks sehingga cocok setiap stack tanpa ekspor manual.

API titik akhir

Otentikasi

API kunci (Otorisasi: Pembawa opq _...) dengan scope crom.read atau crm.writes. POST ke /api/v1.php dengan aksi dan kunci situs.

Kontak

crm. contacts. list (search + filter), crm. kontaks. detace (oleh ID), crm. contacts. upsert (buat atau update), krm. Contacchs. satts. save.

Perjanjian

crm. deals. list, crm. deals. detail, crmeal. create, crmmeal. update, crmieal. advance (semua melalui Lapisan Kepercayaan).

Aktivitas

crm. actiities. list (timeline untuk kontak / kesepakatan), crm. akticies. record (log aktivitas baru).

Kejadian

crm.events.list (tahan lama makan dengan since_id kursor), crm.eventskatalog (daftar tipe acara yang tersedia).

Membuat kesepakatan via 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
}

Peristiwa Webhook

opsiq.contact.upsert

Dipecat ketika kontak dibuat atau diperbarui. Ini adalah acara kontak untuk berlangganan; tidak ada kejadian yang terpisah.

contact.lifecycle_changed

Dipecat ketika kontak bergerak ke tahap lifecycle yang berbeda.

contact.status_changed

Dipecat ketika status kontak berubah.

contact.conversion

Dipecat ketika konversi direkam terhadap kontak.

contact.tag_added

Dipecat ketika tag ditambahkan ke kontak.

contact.erased

Dipecat ketika kontak dihapus untuk permintaan privasi.

crm.deal.created

Dipecat ketika kesepakatan dibuat.

crm.deal.stage_changed

Dipecat ketika kesepakatan bergerak ke tahap yang berbeda.

crm.deal.won

Dipecat ketika kesepakatan ditutup sebagai menang.

crm.deal.lost

Dipecat ketika kesepakatan ditutup seperti hilang.

crm.company.created

Dipecat ketika sebuah perusahaan diciptakan.

crm.task.created

Dipecat ketika tugas baru dibuat (manual atau AI- dihasilkan).

email.replied

Dipecat ketika kontak menjawab ke email outreach.

email.bounced

Dipecat ketika keluar dari jangkauan email.

💡
Panggil webhooks.events.list untuk set otoritatif pada instalasi Anda, dengan muatan dari setiap peristiwa. Ini dihasilkan dari kode pengiriman itu sendiri, sehingga tidak pernah dapat tidak setuju dengan apa yang benar-benar tiba. Daftar lengkap juga muncul di bagian Weblink.

Semua peristiwa webhook adalah HMAC-signed dan retried pada kegagalan. Berlangganan a URL dalam Pengaturan > Webhook, atau jajak pendapat crm.events.list dengan since_id untuk mengubah daya makan.

Menyelaraskan kontak CRM ke Google Sheets

Skenario:
Anda ingin setiap kontak CRM baru muncul di Google Sheet untuk tim pemasaran Anda.
Apa yang harus dilakukan:

Atur langganan webhook untukopsiq.contact.upsert. Tunjukkan ke aplikasi web Google Apps atau sebuah webhook ZapierURLMuatan meliputi nama kontak, email, perusahaan, skor memimpin, dan sumber. Skrip Anda menambahkan baris ke Selokan Google untuk setiap kontak baru.

CRM

Segmen

Segmen menyimpan filter kontak yang dapat digunakan ulang bagi tampilan CRM, jangkauan, promosi dan perangkat audio lain-sadar.

Layar produk
SegmenPenyunting segmen menggabungkan kondisi, menunjukkan jumlah kecocokan langsung dan memungkinkan operator memilih filter hidup atau disematkan snapshot.Segmenarea kerjaMODUSTingkatLOGICSEMUAMATCHES1,248HIDUP WORKSPACE VIEWPanggung pelanggansama dengan pelanggan aktifAturanAktivitas terakhirdalam hari 30AturanNegarasama dengan InggrisAturanBerniat tinggiskor setidaknya 70Aturan1CHOOSE MODEHidup atau ditembak2ADD RULESALL atau APAPUN3REUSECampaigns dan CRM
Penyunting segmen menggabungkan kondisi, menunjukkan jumlah kecocokan langsung dan memungkinkan operator memilih filter hidup atau disematkan snapshot.

A segmen hidup menghitung ulang dari data saat ini kapanpun digunakan. A disematkan snapshot membekukan daftar anggota saat ini, yang berguna ketika penonton outreach tidak harus berubah setelah persetujuan.

Pilih SEMUA ketika setiap kondisi harus cocok atau APUN ketika satu kondisi cukup. Tinjau jumlah langsung sebelum menyimpan. Segmen sistem dapat terlihat tapi dilindungi dari penyuntingan biasa.

CRM

Nilai utama

Petunjuk-mencetak aturan mengubah perilaku dan profil sinyal menjadi skor konsisten bahwa penjualan dan otomasi dapat digunakan.

Layar produk
Nilai utamaNilai awal menunjukkan aturan aktif, jendela bergulir dan skor positif atau negatif mengubah setiap aturan berlaku.Nilai utamaarea kerjaPERAturan12SCORED8,412HOT LEADS286HIDUP WORKSPACE VIEWMenghargai aktivitas3+ kunjungan di 14 hari+20Membeli kata kunciberisi migrasi atau perusahaan+15Risiko dukunganacara pengaduan di 30 hari-10Sumber terpercayareferral mitra+121DESCRIBE RULEGunakan bahasa Inggris biasa2REVIEW FIELDSSinyal, jendela, titik3RESCORETerapkan ke area kerja
Nilai awal menunjukkan aturan aktif, jendela bergulir dan skor positif atau negatif mengubah setiap aturan berlaku.

Pembangun aturan AI dapat mengubah instruksi yang mudah-Inggris menjadi aturan terstruktur. Setiap aturan harus tetap diulas sebelum aktivasi: mengkonfirmasi aktivitas atau kata kunci, jumlah minimum, jendela bergulir dan skor perubahan.

Aturan positif dan negatif dapat berdampingan. Gunakan Atur ulang area kerja setelah aturan material berubah sehingga kontak yang ada dievaluasi dibawah model baru. Nilai dapat memberi makan segmen, routing, prospecting dan kondisi arus kerja.

CRM

Penjualan papan peringkat

Dewan direksi membandingkan perwakilan dengan menggunakan pencapaian kuota, pendapatan, komisi dan pipa terbuka untuk bulan yang dipilih.

Layar produk
Penjualan papan peringkatPara ketua jajaran bulanan perwakilan penjualan sementara menjaga pendapatan, komisi dan pipa terbuka terlihat.Penjualan papan peringkatarea kerjaPERIODJuliTEAM QUOTA82%WINN£184kHIDUP WORKSPACE VIEWAmina104% quota1stBen88% kuotake- 2Rita.76% quotaKe- 3Buka baris pipa£312k di seluruh timUlasan1CHOOSE MONTHBandingkan satu periode2CHECK QUOTAKetertarikan demi reputasi3COACHGunakan konteks pipeline
Para ketua jajaran bulanan perwakilan penjualan sementara menjaga pendapatan, komisi dan pipa terbuka terlihat.

Pencapaian kuota hanya berarti ketika setiap perwakilan memiliki kuota saat ini dan penawaran memiliki pemilik yang benar, jumlah, mata uang dan status dekat. Gunakan leaderboard untuk melatih dan pengakuan, bukan sebagai satu-satunya kualitas pengukuran; pasangkan dengan kondisi kesehatan, aktivitas, dan prediksi akurasi.

CRM

Persetujuan kesepakatan

Persetujuan kesepakatan memerlukan tanda tangan manajer sebelum penawaran nilai tinggi dapat ditandai menang.

Layar produk
Persetujuan kesepakatanKebijakan persetujuan mendefinisikan dua batas nilai dan antrian menunjukkan penundaan, persetujuan dan keputusan ditolak.Persetujuan kesepakatanarea kerjaPOLICYDiaktifkanWAITING6OLDEST3hHIDUP WORKSPACE VIEWTingkat 1Deals dari £10,000ManajerTingkat 2Deals dari £50,000SeniorPembaruan Enterprise£72,000 diminta oleh BenTertundaProyek migrasi£18,500 diminta oleh RitaDisetujui1SET THRESHOLDS0 menonaktifkan sebuah tingkat2REQUESTRep menyerahkan kesepakatan3AKAN MENYELESAIKANMencegahkan atau menolak
Kebijakan persetujuan mendefinisikan dua batas nilai dan antrian menunjukkan penundaan, persetujuan dan keputusan ditolak.

Aktifkan kebijakan dan Tingkat Set 1 dan Tingkat 2 Sebuah ambang batas 0 Bila seorang non-manager mencoba untuk memenangkan kesepakatan di atau di atas ambang batas, OpsIQ Membuat permintaan persetujuan daripada diam-diam mengubah panggung.

Manajer dan administrator penuh tidak terhalang oleh kebijakan setiap keputusan harus mempertahankan permintaan, persetujuan, waktu dan alasan untuk audit.

CRM

Aturan Lifecycle

Aturan Lifecycle secara otomatis memindahkan kontak antar tahap ketika data mereka saat ini cocok dengan kondisi yang disimpan.

Layar produk
Aturan LifecycleAturan Lifecycle dievaluasi oleh prioritas; aturan yang cocok pertama mengubah tahap kontak.Aturan Lifecyclearea kerjaAKTIF7RUNSSetiap malamPRIORITYTertinggi pertamaHIDUP WORKSPACE VIEWLead→Dikualisasikanskor NGH 60 dan aktivitas terbaruPrioritas 100Pelanggan → yang telah dikualifikasiacara pembelian adaPrioritas 90Pelanggan → Risikotidak ada aktivitas untuk hari 60Prioritas 70Dengan resiko pelanggan →baru pembelian atau jawabanPrioritas 601PICK STAGESDari dan ke2DEFINE FILTERGaya segment-style JSON3ORDER RULESPertandingan pertama menang.
Aturan Lifecycle dievaluasi oleh prioritas; aturan yang cocok pertama mengubah tahap kontak.

Setiap aturan memiliki tahap sumber, tahap tujuan, bendera aktif, prioritas dan gaya filter segment. Tugas lifecycle dijadwalkan mengevaluasi prioritas yang lebih tinggi pertama dan berhenti setelah pertandingan pertama untuk kontak.

Aturan harus dapat saling dimengerti. Hindari dua aturan aktif yang dapat memindah kontak yang sama ke arah yang berlawanan selama menjalankan yang sama. Uji filter terhadap segmen sebelum mengaktifkan itu.

CRM

stream aktivitas CRM

Arus aktivitas area kerja menggabungkan pelanggan dan acara operasional sehingga tim dapat menyelidiki apa yang terjadi tanpa membuka setiap modul.

Layar produk
Aktivitas CRMAktivitas stream terputus obrolan, tiket, email, webhook, konversi dan peristiwa anomali dengan filter dan pagination.Aktivitas CRMarea kerjaPERISTIWA2,804CUSTOMERS1,126ANOMALIES14HIDUP WORKSPACE VIEWDipecahkan percakapan[email protected]SekarangTiket menjawabT-1048 Tagihan4mPeristiwa yang tak terbatassubscription.upgraded12mKonversiOrder #7788 · £14919m1FILTERAcara dan pelanggan2OPEN CONTEXTLompat ke catatan3PAGE RESULTSTerus investigasi yang bunting
Aktivitas stream terputus obrolan, tiket, email, webhook, konversi dan peristiwa anomali dengan filter dan pagination.

Filter menurut tipe kejadian, tanggal, kontak atau keadaan pelanggan (termasuk membayar pelanggan). Tatanan adalah model yang dibaca dari aktivitas direkam; ini tidak menggantikan tiket sumber, percakapan, kesepakatan, atau catatan konektor. Buka rekaman terkait sebelum mengambil aksi sensitif.

CRM

Kerjaan mengalir

Menurut Workflow, menanggapi sebuah acara dan menjalankan serangkaian aksi yang diperintahkan, termasuk langkah-langkah yang tertunda dilanjutkan oleh Cron.

Layar produk
Kerjaan mengalirSebuah proses berjalan yang menunjukkan pemicunya, aksi yang selesai, menunggu penundaan dan langkah berikutnya.Kerjaan mengalirarea kerjaAKTIF9RUNNING42GAGAL1HIDUP WORKSPACE VIEWPemicucontact.createdMulaiLangkah 1Kirim email selamat datangSelesaiTundaTunggu hari 2MenungguLangkah 2Buat tugas penjualanBerikutnya1CHOOSE TRIGGERAcara dimulai menjalankan2ORDER STEPSAksi dan penundaan3MONITORLanjutkan melalui cron
Sebuah proses berjalan yang menunjukkan pemicunya, aksi yang selesai, menunggu penundaan dan langkah berikutnya.

Buat suatu alur kerja dengan memilih pemicu, menambah langkah-langkah dalam rangka dan memfungsikannya. Berkas disimpan, bukan dipegang oleh permintaan peramban; Cron yang terpadu melanjutkan proses arus kerja yang sedang berjalan.

Pembangunan - dalam contoh awal termasuk selamat datang setelah tanda tangan, ucapan terima kasih setelah post- Anda dan konfirmasi demo. Klon sebuah template, ganti penerimanya / isi, kemudian uji dengan catatan yang dikendalikan sebelum aktivasi luas.

Desain aksi yang akan idempoten. Suatu pengulangan tidak boleh mengirim duplikat uang - permintaan bergerak atau membuat catatan duplikasi.

Dukungan

Tiket

Tiket adalah saluran dukungan formal Anda, mereka memiliki departemen, prioritas, target SLA, lampiran, catatan internal, dan threading percakapan penuh, tiket dapat tiba dari OpsIQ admin, bentuk tiket / embed, email insuffustion, chat eskalasi, konektor, atau API.

Tiket
Rincian tiketTiket dengan batang sisi meta (prioritas, departemen, SLA, status), thread percakapan, dan draft AI dan pengembalian uang.Tiketarea kerjaT-12345PrioritasTinggiDepartemenTagihanSLA3h 12m kiriStatusBukaAku dikenakan dua kali untuk sayaberlangganan pada Juni 3.AIDikonfirmasi duplikatbiaya, pemrosesan pengembalian dana.Reply draft AIKembalikan1THREADEDPercakapan penuh + catatan2SLA & ROUTINGPrioritas, departemen, timer3AI DRAFTBalas ditulis untuk Anda
Setiap tiket membawa prioritas, departemen, SLA timer dan benang penuh, dan AI dapat menyusun jawaban untuk Anda.

Bagaimana tiket mengalir

1
Tiket tiba

Seorang pelanggan mengirim pesan melalui email, chatting eskalasi, tiket embed, atau admin menciptakan satu. Tiket mendapat ID unik (misalnya, T -12345).

2
Tailor

AI membaca subjek dan tubuh, prioritas assign (Low / Normal / High / Urgent), menyarankan departemen, dan mendeteksi sentimen. Hal ini terjadi secara otomatis jika triase diaktifkan.

3
Balas

Seorang agen membuka tiket, membaca konteks (profil pelanggan, data platform dari konektor, sebelumnya tiket), dan menulis balasan. AI dapat menyusun jawaban, dan agen edits sebelum mengirim.

4
Tutup

Ketika masalah ini diselesaikan, agen menutup tiket pelanggan diberitahu.

Aksi per- tiket

Ubah departemen

Pindahkan tiket ke departemen lain (misalnya, dari Umum ke Billing). Berguna ketika routing awal salah.

Berikan ke agen

Berikan tiket ke anggota tim tertentu. agen yang ditugaskan melihat tiket dalam pandangan mereka "Tiket saya".

Tambah catatan internal

Tulis catatan hanya terlihat bagi staf. Gunakan untuk: temuan penyelidikan, alasan pengembalian, konteks rekayasa, komitmen sebelumnya. Catatan internal tidak pernah muncul pada pelanggan.

Gabung tiket

Kombinasi tiket duplikat dari pelanggan yang sama. subjek tiket gabungan mendapat tag [MERGED]. Semua pesan dari kedua tiket diawetkan dalam tiket yang bertahan.

Respon yang telah di-Canned

Sisipkan suatu templat jawaban yang telah ditulis sebelumnya. Variabel seperti {{customer_name}} dan {{ticket_id}} secara otomatis diganti.

Al write

Biarkan AI meningkatkan jawaban draft Anda: atur nada, pendek / panjang, perbaiki tata bahasa, atau terjemahkan. Anda meninjau hasil sebelum mengirim.

Ubah prioritas

Atur ke Rendah, Normal, Tinggi, atau Penting, prioritas mempengaruhi waktu SLA dan urutan pengurutan.

Ubah status

Atur ke Buka, Pending, Menunggu Pelanggan, Dipecahkan, atau Ditutup.

Bekerja sebagai contoh: menangani pelanggan yang tidak bahagia

Surel pelanggan: "Saya dikenakan 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 harus 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

Buat departemen dalam Pengaturan > Tiket > Department. Departemen umum: Umum, Billing, Teknis, Penjualan, Pelanggaran, Onboarding. Setiap departemen dapat memiliki aturan auto- menjawab berbeda, pengetahuan AI, dan tugas tim.

Respon terkanik

Buat templat jawaban yang dapat dipakai ulang dalam Pengaturan > Tiket > Dibatalkan Respon. Jawaban kaleng yang baik termasuk:

Contoh template respon kaleng
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}}

Menggabungkan tiket

Ketika pelanggan mengirim beberapa kali pertanyaan yang sama (via email dan chatting, atau dua email terpisah), anda dapat menggabungkan duplikat. Pergi ke tiket, klik Gabung, pilih tiket lain untuk menggabung. Tiket yang selamat mendapat semua pesan dari kedua tiket. Subyek tiket gabungan mendapat tag [MERGED] untuk mengindikasikan bahwa itu dikombinasikan.

Platform Terhubung mengikuti penggabungan. Ketika tiket juga pada platform yang terhubung (WHMCS, Zendesk, Portal pelanggan SaaS), penggabungan tersebut terjadi di sana juga: platform menggabungkan salinannya, sehingga tiket yang Anda simpan menunjukkan pesan pertama dan jawaban tergabung. Sebuah tiket gabungan yang tidak pernah pada platform itu telah percakapan ditambahkan ke tiket platform yang disimpan sebagai catatan staf pribadi, tidak pernah sebagai balasan dari pengguna diemail. Gabungan dilakukan di dalam platform (misalnya di WHMCS) menggabungkan OpsIQ tiket dengan cara yang sama.

Prioritas dan SLA

Rendah

Pertanyaan tidak-mendesak, permintaan fitur, umpan balik umum. Target respon pertama: 24 Jam.

Normal

Pertanyaan dukungan standar. target respon pertama: 8 jam.

Tinggi

Menimbulkan bisnis pelanggan. / Target respon pertama: 4 Jam.

Penting

Layanan menurun, insiden keamanan, data hilang, kesalahan penagihan. Target respon pertama: 1 Jam.

SLA timer dimulai ketika tiket dibuat dan jeda ketika status "Menunggu Pelanggan". Jika target SLA hilang, tiket disorot dan pilihan meningkat.

Bisakah pelanggan melihat catatan internal?+

Catatan internal tidak pernah secara ketat hanya staf. Mereka tidak muncul di portal tiket pelanggan, pemberitahuan email, atau penggubah-menghadap permukaan.

Apa yang terjadi ketika tiket ditutup dijawab?+

Tiket secara otomatis dibuka kembali dan kembali ke antrian aktif. Tim telah diberitahu jawaban baru.

Dapatkah saya mengunci tiket untuk mencegah balasan lebih lanjut?+

Gunakan Thread Lock untuk mencegah kedua pelanggan dan AI dari menambahkan jawaban baru. Berguna untuk menyelesaikan sengketa atau penyelidikan tertutup.

Dukungan

SLA, aliran status dan kualitas

Ruang kontrol untuk bagaimana operasi dukungan Anda berperilaku: Kebijakan SLA dengan tangga eskalasi, bisnis - jam kalender, status yang dipaksakan aliran, CSAT pengaturan dan fitur perusahaan switch. Buka dari halaman tiket (Tombol Studio Layanan di bar).

Kebijakan SLA

Setiap tiket baru mendapat jawaban pertama dan batas waktu resolusi dari kebijakan aktif yang paling spesifik: departemen + prioritas mengalahkan departemen, mengalahkan prioritas, mengalahkan standar. Deadline berhenti otomatis ketika sebuah tiket duduk dalam Pending atau ditahan.

Tangga Eskalasi

Alih-alih satu tindakan pelanggaran, kebijakan dapat mendefinisikan hingga enam langkah: misalnya memperingatkan penerima pada 75% dari jendela, peringatan manajer di. 100%, ditugaskan kembali ke agen bernama pada. 150% Setiap langkah menembak tepat sekali per tiket.

Jam bisnis dan kalender

Dengan jam kerja, SLA hanya membakar waktu bekerja, jadi tiket yang dibuka Jumat malam tidak dilanggar pada hari Sabtu.

Aliran status

A dari / ke matriks membatasi status perubahan admin dapat membuat, dengan preset gaya Zendesk-. Automatisasi, inbound email dan penggubah-awal jawaban tiket selalu dikosongkan, sehingga sebuah matriks ketat tidak pernah macet pipeline. Secara opsional memerlukan tanda yang disetujui sebelum ditutup.

Persetujuan

Agen meminta tanda tangan off pada tiket (mengembalikan dana lebih dari ambang batas, pengecualian kebijakan). Seorang penontonnya bernama atau Administrator Penuh yang memutuskan dengan catatan; permintaan tidak akan pernah menyetujui permintaan mereka sendiri. Mendatangi permukaan persetujuan sebagai spanduk di inbox.

Hubungan tiket

Tiket link terkait, duplikasi, induk / anak, atau blocking; split menjawab ke sebuah tiket baru terkait (kebalikan dari penggabungan, tanpa mengirim surel ke pelanggan); mengikuti tiket untuk pemberitahuan dalam app, dan memilih alamat email umum CC pada balasan outbound.

Liveinbox dan tabrakan

Dengan inbox real-time diaktifkan, tiket baru dan balasan muncul untuk agen dalam hitungan detik melalui stream pemberitahuan yang ada. Pada sebuah tiket, agen melihat siapa lagi sedang melihat dan mendapatkan spanduk peringatan ketika rekan tim sudah menulis jawaban. Satu klik tombol Claim mengisi tiket untuk diri sendiri.

Aware routing

Aturan pengubahan dapat cocok dengan sinyal triase AI: prioritas, kategori, resiko sentimen dan eskalasi, ditambah nilai-nilai user- field yang diketik dari bentuk permintaan portal Anda. Peraturan menggunakan kondisi ini tetap tidak aktif sampai fitur diaktifkan.

💡
Setiap perusahaan mematikan kapal, menyalakan satu di Studio Layanan.→Kualitas & Automatisasi adalah opt- di; meninggalkan mereka off menjaga perilaku identik dengan sebelum upgrade.
Mengapa pelanggan masih membuka kembali tiket tertutup ketika matriks saya melarang ditutup→terbuka?+

Matriks hanya mengatur aksi ADMIN. Klien-awal jawaban, balasan email dan otomatisasi sengaja diistimewakan sehingga kebijakan ketat tidak pernah mengunci pelanggan keluar atau memecahkan pipa.

Apakah SLA tangga mengganti aksi pelanggaran lama?+

Tidak, kebijakan disimpan dengan satu tindakan pelanggaran terus bekerja tanpa perubahan tangga menggantikan tindakan tunggal hanya pada kebijakan di mana Anda mendefinisikan langkah-langkah.

Dukungan

Tiket auto- reply dan eskalasi

Balasan otomatis memungkinkan AI menanggapi tiket baru secara otomatis. Eskalasi memindahkan tiket ke departemen yang berbeda ketika Al mendeteksi kebutuhan khusus. Keduanya fitur bekerja melalui tiket asli dan email-diciptakan tiket.

Auto- Tanggapan
Balasan otomatis tiketSebuah aliran: tiket baru, jeda dua menit, jawaban AI dari pengetahuan dan konteks, kemudian dikirim atau disimpan sebagai draft.Auto- Tanggapanarea kerjaKetika tiket baru tibaTiket barusumber apapunTunda2 minAI menjawabKB + konteksDikirimatau draftJika manusia menjawab saat penundaan, otomatis dibatalkan. Intent bisa meningkat ke departemen lain lebih dulu.1DELAYManusia mendapat kesempatan pertama2AI REPLIESDari konteks KB +3OR ESCALATERute dengan maksud
Tiket baru mendapatkan penundaan singkat (sehingga manusia dapat melompat), kemudian jawaban AI dari pengetahuan Anda, dikirim atau mengantri sebagai draft.

Bagaimana auto- jawaban bekerja

1
Tiket muncul

Tiket baru dibuat dari sumber manapun (email, obrolan, portal, API).

2
Reply jadwal

OpsIQ menunggu penundaan terkonfigurasi (baku: 2 Ini memberikan agen manusia kesempatan untuk menanggapi pertama.

3
Jawaban pertama menang

Jika seorang agen manusia menjawab saat penundaan, otomatis dibatalkan. Jika tidak, AI menghasilkan jawaban.

4
Hasilkan dan kirim

AI membaca tiket, memeriksa dasar pengetahuan, konteks konektor, dan riwayat pelanggan, lalu menulis jawaban. Jawabannya dikirim (atau mengantri sebagai draft untuk tinjauan, tergantung pada pengaturan).

Bagaimana eskalasi bekerja

1
Atur departemen

Set departemen mana yang dapat menerima eskalasi (misalnya, Billing dapat ditingkatkan dari Umum, Teknis dapat meningkat dari Umum).

2
KLAsifikasi tiket

Sebelum otomatis menjawab, AI mengklasifikasikan tujuan tiket: penagihan, teknis, pengembalian uang, penyalahgunaan, dll.

3
Pindahkan jika diperlukan

Jika tiket itu cocok dengan departemen eskalasi, maka tiketnya dipindahkan, catatan internal menjelaskan mengapa.

4
Hasilkan dalam suara baru

Jawabannya dihasilkan dengan menggunakan tujuan departemen apos; s pengetahuan dan pelatihan AI.

Referensi pengaturan

Auto- Tanggapan diaktifkan

Tombol utama. Aktifkan AI auto- reply untuk tiket.

Diijinkan departemen

Bagian mana yang dapat menerima auto- balasan. Mulai dengan departemen berisiko rendah (Jenderal, Penjualan) sebelum mengaktifkan penagihan.

Tunda

Berapa lama menunggu sebelum AI menjawab (dalam detik). Baku: 120 detik (2minutes). Set ke0untuk balasan instan.

Tunda jadwal

Secara oporsional mengatur penundaan berbeda untuk jam bisnis vs setelah jam.

Berhenti di balasan admin

Jika seorang agen manusia menjawab pertama, membatalkan auto- reply. Baku: on.

Eskalasi diaktifkan

Aktifkan routing departemen otomatis berdasarkan tujuan tiket.

DepartemenEskalasi

Tiket departemen mana yang bisa diperbesar.

Status eskalasi

Status apa yang akan ditetapkan ketika meningkatnya (mis., Buka, Pending).

Catatan eskalasi

Apakah menambahkan catatan internal menjelaskan alasan eskalasi.

Tiket yang dibuat email

Tiket yang dibuat dari surel (via polling mailbox atau MX-piped pengiriman) mengikuti aturan auto- replasi dan eskalasi yang sama. Jawaban AI dikirim sebagai balasan email ke pelanggan. Draf email pergi ke antrian draft untuk ulasan jika dikonfigurasi.

Akankah otomatis AI menjawab untuk menanyakan pertanyaan?+

Hanya jika Anda mengaktifkan auto- reply untuk departemen penagihan. Kami sarankan mulai dengan otomatis-jawaban off untuk tagihan dan memungkinkan hanya setelah Anda telah melatih AI dengan pengetahuan penagihan menyeluruh dan diuji secara menyeluruh.

Bagaimana jika AI memberikan jawaban yang salah?+

Jika pelanggan menjawab bahwa jawabannya salah, seorang agen manusia harus campur tangan, meninjau sejarah AI untuk memahami mengapa AI memberikan jawaban yang salah, kemudian memperbarui basis pengetahuan atau pelatihan AI untuk mencegah hal itu terjadi lagi.

Dapatkah saya meninjau auto- balasan sebelum mereka dikirim?+

Ya. Atur mode pengiriman ke "Draft" daripada "Auto- send". draf jawaban otomatis akan muncul dalam antrian Drafts untuk tinjauan manusia sebelum mengirim.

Dukungan

Portal tiket embed

Portal tiket memungkinkan Anda menambahkan antarmuka manajemen tiket ke situs web manapun. OpsIQ admin.

Bagaimana cara kerjanya
Portal tiket embedPortal dukungan yang tertanam di situs web menunjukkan tiket pelanggan mereka sendiri dan tombol new- tiket baru.yoursite.com/supportPusat dukunganTiket baruTickets Anda#1042 · Pertanyaan pengembalianBuka#1038 · Bantuan KonfigurasiDipecahkan#1031 salinan suaraTertunda1EMBEDTambahkan ke situs manapun2SELF-SERVEPelanggan melihat tiket mereka3NO LOGINIdentitas ditangani secara aman
Portal tiket embed

Tiga buah yang dibasahi

Terbenam dalam baris

Menyewa portal tiket di dalam div di halamanmu.

Widget yang mengambang

Menampilkan tombol mengambang yang membuka portal tiket dalam panel. Mirip dengan widget obrolan.

Diotentikasi

Butuh tanda tangan identitas, hanya pelanggan yang melihat tiket mereka sendiri.

Instalasi

Tiket dan obrolan diembed
<!-- Signed-in customer: your server adds a fresh identity_token -->
<script async src="https://your-opsiq-domain.com/widget.php?site_key=SITE_KEY&identity_token=SERVER_GENERATED_TOKEN"
        data-opsiq-widget="client-chat"></script>

<!-- Guest: the same tag without identity_token -->
<script async src="https://your-opsiq-domain.com/widget.php?site_key=SITE_KEY" data-opsiq-widget="client-chat"></script>
💡
Remote Sites → your site → Codes → C. Signed-in customers generates the complete code for your platform (PHP, WordPress, Laravel, Node.js, Python, Django, .NET, Rails, Java, Go), including the refresh handler that keeps a long visit signed in. The WHMCS hook and the Botble connector bridge already do this.

Generasi token identitas

Untuk mode terotentikasi, server Anda menandatangani token pendek-hidup dengan situs rahasia. Token ini memberitahu OpsIQ HS256 JWT: semua perpustakaan JWT. bekerja. rahasia tidak pernah masuk ke halaman.

PHP · ciptakan token identitas
<?php
// Generate identity token (PHP, no dependencies)
$secret = getenv("OPSIQ_SITE_SECRET");          // the site secret, server-side only
$b64 = fn($v) => rtrim(strtr(base64_encode(json_encode($v, JSON_UNESCAPED_SLASHES)), "+/", "-_"), "=");
$now = time();
$signing = $b64(["alg" => "HS256", "typ" => "JWT"]) . "." . $b64([
    "site_key"      => "SITE_KEY",
    "iat"           => $now,
    "exp"           => $now + 3600,
    "authenticated" => true,                        // required
    "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)), "+/", "-_"), "=");
// Put $token on the widget URL as &identity_token=
Node. js, hasilkan tanda identitas
// Node.js — npm i jsonwebtoken
const jwt = require("jsonwebtoken");

function generateOpsIQToken(customer) {
  return jwt.sign({
    site_key: "SITE_KEY",
    authenticated: true,                            // required
    platform: "node",
    customer: { id: customer.id, email: customer.email, name: customer.name, external_id: String(customer.id) },
  }, process.env.OPSIQ_SITE_SECRET, { algorithm: "HS256", expiresIn: 3600 });
}

Fitur widget

Daftar tiket

Mencari, status-filtered list. Sebuah tanda "Menunggu Anda" tiket sorot tim telah menjawab.

Percakapan ancaman

Tampilan percakapan penuh dengan teks, lampiran, dan penanda waktu yang kaya.

Draft otosaving

Balasan draf pelanggan disimpan secara otomatis sehingga mereka tidak kehilangan pekerjaan jika mereka pergi.

Langsung polling

TPS widget untuk balasan baru setiap ~12 detik.

Resolve / repared

Pelanggan bisa menyelesaikan atau membuka kembali tiket mereka sendiri dengan satu klik.

Catatan staf internal tidak pernah ditunjukkan kepada pelanggan yang ada di tiket ini adalah batas keamanan yang sulit.
Dukungan

Kotak masuk percakapan

Inbox Percakapan adalah tempat tim Anda mengelola percakapan pelanggan langsung. Ini menunjukkan obrolan aktif, pembicaraan ditugaskan, percakapan yang ditangani oleh pihak lain, dan riwayat arsip.

Kotak masuk percakapan
Kotak masuk percakapanSebuah kotak masuk chat agent tiga-pane: daftar percakapan, percakatan langsung dengan chip draf AI, dan panel konteks pengunjung / CRM.Kotak masuk percakapanarea kerjaJDJane.Dimana pesananku?MOMensahPertanyaan penagihanRTRita.AI ditanganiDimana pesananku?Dikirim hari iniDraft AI siapBalas...KUnjunganJane Doe.US3 melewati perintahLTV $480CRMStage: Pelanggan1UNIFIEDSetiap obrolan langsung2CONTEXTPanel pengunjung + CRM3AI ASSISTDraft & tulis ulang
Satu inbox untuk setiap obrolan, daftar percakapan, thread dengan draft AI pada tekan, dan pengunjung penuh + CRM konteks.

Mengatur percakapan

Percakapan aktif

Percakapan sedang berlangsung. Titik hijau = pelanggan mengetik atau baru-baru ini aktif.

AI- ditangani

Percakapan di mana AI menanggapi. Anda dapat mengambil alih setiap saat dengan mengklik "Gabung".

Diberikan padaku

Percakapan yang ditugaskan untuk Anda secara khusus.

Menunggu

Percakapan di mana pelanggan menunggu jawaban.

Arsip

Percakapan selesai. Dicari oleh kata kunci, tanggal, dan pelanggan.

Hodff dari AI ke manusia

Saat Anda mengambil alih percakapan dari AI, ikuti ketiga aturan ini:

1
Salam secara pribadi

Perkenalkan dirimu dengan nama. "Hai, ini Sarah dari tim pendukung".

2
Konteks referensi

Tunjukkan kau membaca percakapan. "Aku bisa melihat kau ditanya tentang status pesananmu".

3
Atur harapan

Katakan pada pelanggan apa yang terjadi selanjutnya. "Saya sedang mencari ke ini sekarang dan akan memiliki jawaban untuk Anda dalam beberapa menit."

Mengaktifkan AI pada / off setiap percakapan

Gunakan tombol AI di atas setiap percakapan. Ketika AI menyala, AI menghasilkan respons. ketika tidak aktif, hanya agen manusia dapat membalas.

Mode menjauh / keluar dari jam

Konfigurasikan jam bisnis di Pengaturan.1) Lanjutkan menanggapi pelanggan, (2) Tampilkan pesan "pergi" dan buat tiket untuk diikuti, atau (3) Matikan percakapan sepenuhnya dan tampilkan bentuk tiket. Pilih perilaku yang sesuai dengan model dukungan anda.

Menangani percakapan yang sulit

1
Tetap tenang

Jangan samakan emosi pelanggan.

2
Mengumpulkan fakta

Sebelum menjawab, kumpulkan informasi yang relevan: rincian urutan, status akun, tiket sebelumnya.

3
Escalate awal

Jika situasi ini melibatkan pengembalian dana, ancaman hukum, penyalahgunaan, atau keamanan, meningkat menjadi anggota tim senior daripada mencoba untuk menangani sendiri.

Dapatkah saya memiliki chat tim (agen ke agen)?+

Ya, gunakan catatan internal dalam percakapan untuk berkomunikasi dengan agen lain, catatan ini tidak pernah terlihat oleh pelanggan.

Apa yang terjadi ketika aku menutup obrolan?+

Percakapan ini berpindah ke Arsip. Jika pelanggan mengirim pesan baru kemudian, maka percakapan baru akan dibuat.

Dukungan

Kanal Pesan

Koneksi WhatsAppFacebook Messenger, Instagram DM, Telegram dan LINE sehingga pesan pelanggan yang sudah dikirimkan ke Anda tiba di kotak masuk yang sama seperti situs web chat, dijawab oleh asisten AI yang sama.

Setiap saluran berperilaku sama saat tersambung: pesan pelanggan menjadi percakapan di dalam Kotak Penguntip, asisten AI Anda menjawabnya menggunakan pengetahuan dan instruksi yang sama seperti obrolan situs Anda, dan setiap agen dapat mengambil alih.

Apa yang menghubungkan terlihat seperti

Facebook Messenger & Instagram

Buka Konektor→Messenger Facebook & Instagram DM, klik Connect, tanda tangan dengan akun Facebook yang mengelola laman Anda, dan pilih Halamannya.

WhatsApp

Klik satu klik di mana penyedia Anda menawarkannya: buka Konektor Pesan Hub dan gunakan Sambung App WhatsApp, lalu ikuti petunjuk Meta naik untuk mengambil atau membuat nomor Bisnis WhatsApp Anda. Selain itu surat ijin tempel dari gerbang 20 manapun.

Telegram

Pesan @ BotFather di Telegram, kirim/newbot,Pilih nama dan nama pengguna berakhir di "bot", dan tempelkan token yang diberikan ke konektor Telegram.OpsIQmendaftarkan webhook untukmu.

LINE

Membuat Pesan API saluran di developers.line.biz, paste Channel rahasia dan token akses, kemudian salin webhook URL ditampilkan di OpsIQ ke dalam LINE dan beralih sendiri auto- menjawab off.

SMS

Tambahkan penyedia (Twilio, Velowa, Termii dan lainnya) dalam Nomor Pesan Hub dengan kredensial dan pengirim.

Setiap konektor menunjukkan sendiri instruksi langkah-by- langkah dalam laci, termasuk apa yang harus menyalin dan di mana. Anda tidak perlu kredensial pengembang untuk satu pilihan klik.

Menyalakan saluran

Menyambung suatu saluran tidak memulainya. Pergi ke Pengaturan → Percakapan Klien → Tingkat lanjut → Kanal Pesan, aktifkan master toggle dan kemudian saluran individual. Setiap saluran memiliki sendiri AI auto- switch balasan, sehingga Anda dapat pilot pada satu sebelum membuka sisanya.

1
Hubungkan saluran

Dalam Konektor, menggunakan instruksi di laci konektor itu.

2
Uji koneksi

Tes Klik. Ini membuat panggilan nyata ke penyedia dan memberitahu Anda apa yang salah jika ada sesuatu.

3
Aktifkan kanal pesan

Pengaturan→Percakapan Klien→Aktifkan saklar utama, lalu saluran.

4
Kirim sendiri pesan

Dari akun lain, pesan Halaman, Nomor atau bot Anda. Ini harus muncul dalam Inbox Percakapan dalam hitungan detik dan mendapat balasan AI.

Balas jendela

Batas platform pesan batas berapa lama bisnis dapat menjawab setelah pelanggan menulis.OpsIQMenunjukkan sisa waktu pada setiap percakapan dan memaksakan aturan untuk Anda.

WhatsApp

24jam dari pesan terakhir pelanggan. Setelah itu Anda hanya dapat mengirim template yang disetujui, yang Anda konfigurasi dalam tab Advanced yang sama.

Messenger & Instagram

24jam untuk balasan normal; agen dapat menjawab sampai7hari kemudian di bawah Manusiawi Meta agen-tunjangan.

Telegram, LINE, SMS

Tidak ada jendela platform-dikenakan.

⚠️
Jika jawaban gagal karena jendela ditutup, percakapan menunjukkan mengapa.OpsIQbatas.

Pertanyaan umum

Apakah pelanggan melihat bahwa AI menjawab?+

Hanya jika Anda memberitahu mereka. jawabannya berasal dari Halaman, nomor atau bot persis sebagai jawaban manusia. Instruksi AI Anda mengendalikan nada dan apakah itu mengidentifikasi dirinya sendiri.

Bisakah seorang agen mengambil alih percakapan pertengahan?+

Buka percakapan di Kotak Masuk Percakapan dan klik Gabung. AI berhenti, Anda mengetik, dan pelanggan melihat benang yang terus-menerus pada sisi mereka.

Bagaimana jika aku memutuskan saluran?+

Gunakan Disconnect pada konektor. Sejarah pesan disimpan; pesan baru hanya berhenti tiba, dan platform diberitahu untuk berhenti mengirim mereka.

Bisakah dua tempat kerja menggunakan laman Facebook yang sama?+

No Sebuah Halaman milik satu area kerja pada suatu waktu. Menghubungkan ke tempat lain yang memindahkannya, dan ruang kerja pertama berhenti menerima pesan, jadi putuskan secara sengaja daripada menghubungkan kembali di tempat lain.

Dukungan

Percakapan obrolan nyata

Contoh-contoh ini menunjukkan bagaimana AI Pelanggan terlatih yang seharusnya menangani skenario umum. Gunakan itu untuk menguji pelatihan AI Anda dan mengidentifikasi kesenjangan.

Contoh percakapan 10

1. Kembali pelanggan menanyakan tentang ketertiban

Skenario:
Hai, aku memesan.3hari yang lalu dan belum menerima pemberitahuan pengiriman belum. Order # ORD-5523.
Apa yang harus dilakukan:

AI seharusnya: (1) Cari perintah # ORD-5523 melalui konektor. (2) Laporkan status saat ini dan info pelacakan jika tersedia. (3) Jika urutan tertunda, mengakui penundaan dan memberikan perkiraan waktu. (4) JANGAN membuat status pengiriman jika konektor tidak memiliki satu.

2Prospek bertanya tentang harga

Skenario:
Berapa biaya yang direncanakan Pro Anda?
Apa yang harus dilakukan:

AI harus: (1Jawaban dari basis pengetahuan dengan harga saat ini.2) Jelaskan perbedaan antara bulanan dan tahunan billing. (3Jika jawabannya tidak ada di basis pengetahuan, katakan begitu dan tawarkan untuk menghubungkan mereka dengan penjualan.4) Jangan menciptakan harga yang tidak ada dalam basis pengetahuan.

3. Pelanggan marah menuntut pengembalian uang

Skenario:
Ini konyol, produkmu tidak bekerja dan aku ingin uangku kembali sekarang.
Apa yang harus dilakukan:

AI seharusnya: (1) Mengakui frustrasi dengan tenang. (2) Tanyakan nomor urut atau email akun. (3) Jelaskan proses pengembalian dana. (4) Membuat tiket dukungan atau meningkat menjadi agen manusia. (5) JANGAN menjanjikan pengembalian dana, yang membutuhkan persetujuan manusia.

4Kasus pembayaran ganda

Skenario:
Bank saya menunjukkan dua tuduhan $29.99.
Apa yang harus dilakukan:

AI seharusnya: (1) Mengakui kekhawatiran. (2) Kumpulkan rincian yang relevan (email, tanggal biaya). (3Jelaskan bahwa masalah penagihan membutuhkan tinjauan manusia.4) Buat sebuah tiket departemen penagihan dengan rincian. (5) Set prioritas ke Tinggi.

5Pelanggan bahasa ganda

Skenario:
Bonjour, je voudrais savoir si vous livrez en France?
Apa yang harus dilakukan:

AI seharusnya: (1) Jawab dalam bahasa pelanggan jika bahasa itu didukung. (2Jawab pertanyaan tentang pengiriman ke Perancis dari pangkalan pengetahuan.3) Jika bahasa tidak didukung, respon dalam bahasa baku dan menyebutkan bahasa mana yang tersedia.

6Setelah percakapan berjam-jam

Skenario:
Halo, ada orang di sana?
Apa yang harus dilakukan:

AI seharusnya: (1) Jika dikonfigurasi untuk after- jam AI, menanggapi dan membantu. (2Jika setelah jam menciptakan tiket, katakan: "Tim kami sedang offline. Saya telah membuat tiket dukungan untuk Anda dan seseorang akan menindaklanjuti selama jam bisnis". (3) Menyediakan nomor tiket.

7. Pembeli saham pertama.

Skenario:
Bagaimana produk Anda dibandingkan dengan [Peserta X]?
Apa yang harus dilakukan:

AI seharusnya: (1Jelaskan kekuatan produkmu.2) Jangan bawel pesaing. (3Jika ada halaman perbandingan dalam dasar pengetahuan, link ke dalamnya. (4) Jika pelanggan bertanya tentang fitur yang tidak anda miliki, jujurlah.

8. Pelanggan ingin rekomendasi

Skenario:
Saya menjalankan sebuah toko online kecil dengan sekitar 100 Perintah per bulan. / Rencana mana yang tepat untukku?
Apa yang harus dilakukan:

AI seharusnya: (1) Tanyakan pertanyaan yang mengklarifikasi jika dibutuhkan (misalnya, apa yang paling penting dalam fitur).2) Menyarankan rencana berdasarkan dasar pengetahuan. (3Jelaskan mengapa rencana itu sesuai dengan kebutuhan mereka.4) Sebutkan bahwa mereka dapat mulai dengan rencana yang lebih kecil dan upgrade nanti.

9. Pelanggan mencoba untuk mendapatkan diskon yang tidak sah

Skenario:
Saya melihat online yang Anda berikan 50% Bisa aku minta satu?
Apa yang harus dilakukan:

AI seharusnya: (1) Jelaskan secara politis promosi saat ini jika ada. (2Janganlah kalian membuat sesuatu yang berbeda dengan apa yang ada di dalam kitab-kitab suci sebelumnya. Janganlah kalian mengingkarinya dan mengingkari ayat-ayat Allah.3) Jika pelanggan tetap bertahan, menawarkan untuk menghubungkan mereka dengan tim penjualan.

10. Pelanggan membutuhkan bantuan dengan fitur

Skenario:
Bagaimana cara mengekspor data saya?
Apa yang harus dilakukan:

AI seharusnya: (1) Menyediakan instruksi langkah-by- dari dasar pengetahuan. (2) Termasuk lokasi halaman dan tombol yang tepat. (3) Jika fitur membutuhkan rencana tertentu, menyebutkan bahwa. (4) Jika fitur tidak ada, jujurlah dan sarankan alternatif.

Dukungan

Mengobrol routing dan eskalasi

Ketika sebuah obrolan langsung membutuhkan orang yang nyata, AI menjawab dua pertanyaan: tim mana yang memiliki percakapan ini, dan siapa yang harus diberitahu. Keduanya dikonfigurasi dalam Pengaturan, Percakapan Klien, Dukungan Flow, di bawah departemen routing AI.

Memilih departemen yang mana yang mungkin digunakan AI

Dua kotak di panel itu adalah sebuah whitelist, departemen pindah ke kanan adalah satu-satunya yang dapat rute AI atau membuka tiket masuk, apapun yang tersisa di kiri tidak terlihat oleh mereka, bahkan jika departemen ada dan staffed.

💡
Jika tidak ada departemen yang diaktifkan sama sekali, OpsIQ Kembali ke routing warisan di setiap departemen yang dapat ditemukan. bukan pilihan konfigurasi.

Siapa yang menerima eskalasi

Ini adalah bagian yang paling orang harapkan untuk mengkonfigurasi dan tidak perlu ketika AI meningkatkan percakapan, OpsIQ email orang-orang yang melekat pada departemen itu. dan baik eskalasi tiket dan percakapan eskalasinya mengikutinya.

Anggota tim Departemen

Setiap admin aktif yang terpasang pada departemen menerima salinan mereka sendiri. Akun dihentikan dan dimatikan dilewatkan.

Admin primer

Digunakan ketika tidak ada anggota tim yang terpasang, sehingga eskalasi masih mencapai seseorang.

Tidak ada yang terpasang

Pengiriman tidak mungkin. panel routing tanda bahwa departemen merah dan AI tidak memberitahu pengunjung manusia diberitahu.

⚠️
Alamat surat elektronik milik departemen secara sengaja tidak pernah digunakan sebagai penerima.

Seluruh departemen catch-

Tepat satu departemen membawa catch-semua tanda. Ia menerima percakapan AI tidak bisa percaya diri tempat, dan itu adalah resor terakhir daripada jalan normal.

1
Sinyal jelas menang

Penakaran tagihan masuk ke departemen penagihan, hosting dan kesalahan kata-kata teknis satu, membeli wording untuk penjualan.

2
Classifier AI mencoba berikutnya

Jika kata kunci tidak meyakinkan, model membaca percakapan dan memilih dari departemen aktif.

3
Kemudian catch-semua

Hanya ketika keduanya datang kosong tidak catch-semua departemen menerima obrolan.

4
Petugas penjualan.

Jika catch -semua adalah departemen penjualan dan pengunjung menunjukkan tidak ada sinyal membeli, OpsIQ mencari dukungan atau departemen teknis sebaliknya, sehingga biasa dukungan pertanyaan tidak menumpuk dalam Sales.

Apa yang pengunjung diberitahu

Jika email eskalasi keluar, AI memberitahu pengunjung tim telah diberitahu. Jika tidak dapat keluar, Al mengatakan sesuatu yang jujur dan mengundang mereka untuk meninggalkan pesan dalam percakapan sebaliknya. Ini tidak akan mengklaim seorang manusia diperingatkan ketika tidak ada email dikirim.

Panelnya bilang "Tak ada yang memberitahu" untuk departemen+

Tidak ada yang melekat padanya. Buka Tim dan Department, cantolkan setidaknya satu admin aktif, kemudian muat ulang halaman pengaturan. Panel membaca langsung.

Bisakah kita mengobrol di suatu tempat selain tim?+

Ya, alamat khusus yang sebelumnya disimpan untuk departemen masih menimpa daftar tim. setup baru harus mengaitkan orang ke departemen sebagai gantinya, jadi ada satu tempat untuk dipertahankan.

Mengapa catch--semua dilewati?+

Periksa apakah itu adalah bagian penjualan. OpsIQ rute ke dukungan atau departemen teknis dengan sengaja.

Dukungan

Kotak surat dan draf

OpsIQ dapat menyambung ke kotak surat elektronik untuk membuat tiket masuk dari email dan mengirim balasan sebagai surel. Ini juga menyediakan jawaban yang dirancang AI- untuk tinjauan manusia.

Surel
Email ke tiketAn IMAP kotak surat di kiri makan email masuk ke dalam tiket threaded dengan AI- disusun jawaban di sebelah kanan.Surelarea kerja[email protected] · IMAPPermintaan pengembalian dana[email protected]Tidak dapat log in[email protected]Salinan suara[email protected]Tiket #1042dari surat-suratSaya ingin pengembalian dana untukduplikasi biaya...Draft AIUlasan & kirim jawaban1INGESTIMAP & meneruskan dalam2TO TICKETSDiancam secara otomatis3AI DRAFTSBalasan untuk ulasan
Pull email di atas IMAP (atau meneruskan), ubah masing-masing menjadi tiket threaded, dan biarkan rancangan AI untuk jawaban ulasan.

Menyambung kotak surat

Protokol

IMAP (Sebagian besar penyedia), Gmail API (Google Workspace), atau Microsoft Graph (Outlook 365).

Pengaturan diperlukan

Host, port, enkripsi (SSL/TLS), nama pengguna, kata sandi atau password aplikasi, folder (biasanya INBOX).

Pemetaan departemen

Map kotak surat ke sebuah departemen tiket. Email ke [email protected] membuat tiket dalam "Dukungan" departemen.

Pengaturan Gmail (langkah demi langkah)

1
Aktifkan 2-Langkah Verifikasi

Pergi ke Akun Google > Keamanan > 2-Langkah Verifikasi dan memungkinkan itu.

2
Buat Sandi App

Pergi ke Akun Google > Keamanan > Password App. Pilih "Mail" dan "Lainnya (OpsIQ). "Salin 16-character password.

3
Masukkan dalam OpsIQ

Pergi ke Surel > Kotak-surat > Tambahkan. Atur host: imap.gmail.com, port: 993, enkripsi: SSL, username: [email protected], kata sandi: password aplikasi.

4
Uji

Klik Tes Koneksi. Jika berhasil, OpsIQ akan mulai polling untuk email baru pada interval yang dikonfigurasi.

Konfigurasi Outlook 365

1
Periksa IMAP diaktifkan

Dalam pengaturan Outlook > Mail > Selaraskan email, pastikan IMAP diaktifkan.

2
Gunakan sandi aplikasi atau autth modern

Jika MFA diaktifkan, buat sandi aplikasi. Kalau tidak, gunakan kata sandi biasa Anda.

3
Masukkan dalam OpsIQ

Host: outlook.office365.com, port: 993, enkripsi: SSL, username: [email protected].

Konfigurasi surat web cPanel

1
Cari pengaturan IMAP

Masuk cPanel > Akun Surel, klik akun surel Anda untuk IMAP pengaturan.

2
Masukkan dalam OpsIQ

Host: biasanya mail.yourdomain.com atau nama host server Anda, port: 993 (SSL) atau 143 (STARTTLS), nama pengguna: alamat email penuh.

Draf surel AI

Ketika auto- balas diset ke mode "Draft", AI menghasilkan draf jawaban yang muncul dalam antrian Drafts. Anda dapat:

Ulasan

Baca draft dan periksa akurasi.

Sunting

Ubah teks, nada, atau isi sebelum mengirim.

Kirim

Atur draft dan kirim sebagai balasan email.

Buang

Hapus draft jika tidak sesuai.

Kirim otomatis

Jika kepercayaan diri cukup tinggi dan auto- kirim diaktifkan, rancangan dikirim secara otomatis setelah penundaan yang dapat diatur.

Mengapa email tidak diubah menjadi tiket?+

Periksa: (1) Apakah kotak surat ini terhubung dan sehat? Cari status hijau dalam Email > Mailbox. (2) Apakah tugas cron sedang berjalan? polling Email memerlukan cron. (3) Apakah email sedang disaring atau dipindahkan ke folder selain INBOX?

Dapatkah saya menggunakan kotak surat ganda?+

Ya, setiap kotak surat bisa dipetakan ke departemen yang berbeda. [email protected] pergi ke Dukungan, [email protected] pergi ke Billing.

Dukungan

Kepuasan pelanggan (CSAT)

CSAT mengukur tiket dan kepuasan obrolan, permukaan tidak bahagia respon dan membandingkan AI dan hasil manusia.

Layar produk
Kepuasan pelangganHalaman CSAT menggabungkan skor kartu, detraktor mengikuti-up, komentar, departemen dan kerusakan agen, dan umpan balik obrolan.Kepuasan pelangganarea kerjaANDAI386AVERAGE4.6POSITIVE91%HIDUP WORKSPACE VIEWDetraktor mengikuti...12 peringkat respon1–2UlasanSurvei tiketMengirim 24h setelah ditutupOtomatisMengobrol umpan balikAI 4.5 Manusia 4.7BandingkanTampilan agenNilai dan jumlah responPelatih1WATCH AVERAGEGunakan tren, bukan satu skor2FOLLOW DETRACTORSBaca komentarnya3COMPARE FAIRLYAI dan manusia
Halaman CSAT menggabungkan skor kartu, detraktor mengikuti-up, komentar, departemen dan kerusakan agen, dan umpan balik obrolan.

Survei tiket dijadwalkan setelah penutupan (biasanya 24 respon positif adalah skor4atau 5. Gunakan antrian detraktor untuk nilai 1 atau2dan membaca tiket / percakapan sebelum menghubungi pelanggan.

Umpan balik obrolan dilaporkan secara terpisah untuk percakapan yang diselesaikan dan ditangani secara manusiawi. Ukuran sampel rendah seharusnya tidak digunakan untuk peringkat agen atau model.

Dukungan

Siaran surel tim

Halaman Email Platform memungkinkan operator yang berwenang mengirim pesan satu waktu ke semua agen aktif, agen terpilih atau departemen ulasan mengirim sejarah.

Layar produk
Platform SurelKomposer email tim menunjukkan penonton, subjek, pesan dan sejarah pengiriman masa lalu.Platform Surelarea kerjaPENYERAHAN12DELIVERED11GAGAL1HIDUP WORKSPACE VIEWPenontonSemua agen aktifDipilihSubjekDukungan Juli RotaSiapPesanCatatan jadwal dan eskalasiSiapRiwayatSiaran dan hasil sebelumnyaTilik1CHOOSE PEOPLESemua, dipilih atau tim2WRITE CLEARLYSubjek dan pesan3REVIEW HISTORYKonfirmasi hasil
Komposer email tim menunjukkan penonton, subjek, pesan dan sejarah pengiriman masa lalu.

Halaman ini untuk pesan operasi internal, bukan pemasaran pelanggan. Pilih pendengar yang paling kecil, nama dan alamat pratilik, kemudian kirim. Pengiriman menggunakan konfigurasi jalur email keluar dan mencatat hasilnya.

Dukungan

Kotak surat, pengiriman dan inbound email

Mengkonfigurasi bagaimana OpsIQ mengirimkan email, mengubah inbound pesan ke tiket dan membuktikan domain pengiriman siap.

Layar produk
Pengaturan surelPengaturan surel menggabungkan routing yang outbound, Dari identitas, kotak surat intraffic, pemberian cek dan email tes.Pengaturan surelarea kerjaOUTBoUNDSMTPMAILBOXES3DOMAINPassHIDUP WORKSPACE VIEWKonektor yang disukaiSMTP / operator konektorDikonfigurasiDari identitasSupport <[email protected]>SiapKotak-surat IMAP[email protected]Pemungutan suaraTerbebasSPF · DKIM · DMARCPass1CHOOSE OUTBOUNDKonektor atau SMTP2CONNECT INBOXIMAP atau pipa3UJIKirim dan verifikasi
Pengaturan surel menggabungkan routing yang outbound, Dari identitas, kotak surat intraffic, pemberian cek dan email tes.

Email keluar

Administrator penuh dapat memilih konektor surel yang disukai; OpsIQ kembali ke konfigurasi SMTP/ pengiriman surat ketika sesuai. Atur dikenali Dari nama / alamat, kirim tes dan periksa 24-hour sukses / kegagalan metrik.

Kotak-surat

An IMAP kotak surat membutuhkan nama, alamat email, departemen target, host, port, mode keamanan, username, password, folder, polling state dan certicate- validasi pilihan. Gunakan. Toll sekarang untuk memverifikasi gangguan pencernaan sebelum menunggu Cron.

Piping instan

Pada server yang sama, sebuah pipa surat dapat melewati pesan RFC822 secara langsung. Sebuah server surat jauh dapat POST pesan baku ke inbound entpoint terproteksi menggunakan token nya. Kedua jalur masukkan deduplikasi yang sama.

Terbebas

Cek SPF / DKIM / DMARC adalah bukti dari domain yang dikonfigurasi. Pemeriksaan hijau tidak menjamin penempatan inbox, tapi kegagalan harus diperbaiki sebelum mengirim pesan produksi.

Dukungan

Dukung Portal Studio

Dukung desain Portal Studio dan menerbitkan pelanggan-menghadap pengalaman dukungan tanpa membutuhkan aset citra eksternal.

Layar produk
Dukung Portal StudioStudio Portal menampilkan pratilik responsif bersama tema, navigasi, pengetahuan, tiket, asisten, bentuk, footer dan CSS kontrol.Dukung Portal Studioarea kerjaTEMPLATEModernPREVIEWDesktopSTATUSDrafHIDUP WORKSPACE VIEWTemaWarna dan tipografi merekSuntingNavigasiPengetahuan, tiket, asistenSuntingFormulir ticketFields, routing dan copySuntingTerbitkanValidasi dan membuat hidupUlasan1CHOOSE TEMPLATEMulai dari struktur2PREVIEW SIZESDesktop ke mobile3PUBLISH SAFELYTinjau kemudian rilis
Studio Portal menampilkan pratilik responsif bersama tema, navigasi, pengetahuan, tiket, asisten, bentuk, footer dan CSS kontrol.

Gunakan template sebagai titik awal, lalu konfigurasi tema, tata letak, navigasi, pencarian pengetahuan, formulir tiket, asisten, footer, merek, perilaku tiket, gubahan CSS dan pengaturan umum. Pratilik desktop, tablet, dan ponsel sebelum penerbitan.

Dukungan

Jarak pengetahuan

Antrian kesenjangan mengetahui mengumpulkan pertanyaan pelanggan AI tidak bisa menjawab dengan yakin sehingga tim dapat meningkatkan cakupan.

Layar produk
Jarak pengetahuanDeretan antrian kesenjangan terjawab atau tidak ada pertanyaan dan trek apakah tim telah menyelesaikannya.Jarak pengetahuanarea kerjaOPEN GAPS28REPEATED9RESOLVED116HIDUP WORKSPACE VIEWBatas migrasiMeminta 14 kaliTinggiDukungan akhir pekanMeminta 8 kaliSedangWaktu pengembalian danaMeminta 6 kaliSedangAPI daerahMeminta 3 kaliRendah1REVIEW QUESTIONLihat konteks percakapan2CHOOSE FIXArtikel atau prompt3RESOLVEVerifikasi jawaban berikutnya
Deretan antrian kesenjangan terjawab atau tidak ada pertanyaan dan trek apakah tim telah menyelesaikannya.

Buka celah untuk membaca pertanyaan asli dan percakapan terdekat, lalu pilih perbaikan yang benar: perbarui artikel yang ada, buat artikel pengetahuan baru, tambahkan fakta bisnis, data konektor yang benar atau instruksi eskalasi perubahan. Tandai itu hanya diselesaikan setelah evaluasi atau tes kembali nyata jawaban yang dapat diterima.

Dukungan

Administrasi halaman status

Halaman status administrasi mengkomunikasikan layanan kesehatan dan insiden menggunakan komponen, negara bagian saat ini dan pembaruan.

Layar produk
Administrasi statusAdministrasi status daftar komponen dan insiden sehingga operator dapat mempublikasikan informasi layanan yang sudah dicap.Administrasi statusarea kerjaOVERALLOperasionalKOMPONENTS7INCIDENTS1HIDUP WORKSPACE VIEWSitus webOperasionalHijauOrbit CoPenampilan yang didegradasiLihatInsurisasi surelOperasionalHijauInsiden saat iniAPI investigasi latensiBuka1UPDATE COMPONENTPilih keadaan jelas2POST INCIDENTPemutakhiran yang distempel waktu3RESOLVETutup dengan ringkasan
Administrasi status daftar komponen dan insiden sehingga operator dapat mempublikasikan informasi layanan yang sudah dicap.

Gunakan komponen secara konsisten. Ketika sebuah insiden mempengaruhi pelanggan, menerbitkan pemberitahuan awal, menambahkan waktu-dicap pemutakhiran sebagai fakta berubah, dan dekat dengan ringkasan resolusi ringkas. Jangan gunakan status sebagai log debug internal; diagnostik sensitif termasuk dalam OpsIQ dan log server.

AI

Atur AI Anda

Konfigurasi AI adalah tempat Anda memilih penyedia Al, model, dan kontrol biaya. OpsIQ mendukung banyak penyedia: Claude (Anthropic), GPT-4o (OpenAI), Gemini (Google), dan Gok (xAI). Anda dapat menggunakan sendiri API kunci (BYOK) atau Managed AI jika tersedia pada rencana Anda.

Atur AI
Konfigurasi AISebuah panel pengaturan AI: sebuah Managed- Al / BYOK Penyedia penyedia, pemilih model, dan meter anggaran token bulanan.Konfigurasi AIarea kerjaKonfigurasi AIPenyediaAI TerkelolaKunci Anda (BYOK)ModelclaudeAnggaran AI Monthly62%1TWO MODESMengelola AI atau BYOK2PICK A MODELKecepatan vs kedalaman3BUDGETSToken caps & control biaya
Pilih Managed AI atau kunci Anda sendiri, pilih model untuk kedalaman kecepatan vs, dan habiskan bulanan dengan anggaran token.

Memilih penyedia

Claude (Anthropic)

Alasan yang kuat, hati-hati dengan fakta-fakta, baik dalam mengikuti instruksi kompleks.4-20250514, claude-3.5 Yang terbaik untuk: percakapan dukungan, pertanyaan teknis, analisis rinci.

GPT-4o (OpenAI)

Cepat, kreatif, pengetahuan umum yang baik, model: gpt-4o, gpt-4o-mini terbaik untuk: respon cepat, menulis kreatif, pertanyaan pengetahuan yang luas.

Gemini (Google)

Baik pada pertanyaan faktual, dukungan multi- bahasa. Model:gemini-2.0-Flash,gemini-1.5 Terbaik untuk: dukungan multi- bahasa, pencarian faktual.

Gok (xAI)

Cepat, respon singkat.3Paling cepat. / Jawaban cepat, nada santai.

BYOK vs AI Terkelola

BYOK (Bawa Kunci Sendiri Anda)

Anda menyediakan sendiri API kunci dari penyedia. Anda membayar penyedia secara langsung. Kendali penuh atas pilihan model dan penggunaan.

AI Terkelola

AI disediakan sebagai bagian dari Anda OpsIQ Rencana. API kunci dibutuhkan. Penggunaan dimedied terhadap keseimbangan kredit AI rencana Anda.

Step-by- langkah setup

1
Menuju Konfigurasi AI

Dalam OpsIQ admin, menavigasi ke Pengaturan > Al Konfigurasi.

2
Pilih penyedia

Pilih penyedia AI Anda dari dropdown.

3
Masukkan kunci API

Jika menggunakan BYOK, Masukkan Anda API kunci. Untuk Managed AI, ini ditangani secara otomatis.

4
Pilih model

Pilih model khusus yang digunakan. Model lebih kecil dan lebih murah. Model yang lebih besar memberikan jawaban berkualitas lebih baik.

5
Uji sambungan

Klik "Uji koneksi" untuk memverifikasi API kunci dan modelnya bekerja cekmark hijau berarti sukses

6
Simpan

Klik Simpan untuk mengaktifkan konfigurasi AI Anda.

Biaya kontrol

Anggaran bulanan

Atur pengeluaran bulanan maksimum untuk token AI. Ketika anggaran tercapai, fitur AI menurun dengan anggun (respon lebih pendek, tidak ada auto-reply) daripada berhenti sepenuhnya.

Batas token percakapan per-

Token maksimum per percakapan. Mencegah percakapan yang berjalan tanpa kredit yang berlebihan.

Peringatan keseimbangan rendah

Ketika saldo kredit AI Anda turun di bawah ambang batas (baku: 50,000 token), sebuah peringatan muncul dalam admin. Atur ini dalam konfigurasi AI.

Konfigurasi per- area kerja

Konfigurasi AI adalah area kerja yang permanen. Jika anda mengelola berbagai situs, setiap area dapat menggunakan penyedia, model, dan budget yang berbeda. Area kerja mewarisi baku global kecuali overridden. Untuk mengkonfigurasi per area kerja: ganti ke ruang kerja, kemudian pergi ke AI Configure dan simpan pengaturan di sana.

Mendapatkan kunci API

Anthropic (Claude)

Ke console.anthropic.com > API Kunci > Buat Kunci. Salin kunci yang dimulai dengan "sk-ant-".

OpenAI (GPT)

Ke platform.openai.com > API Kunci > Buat kunci rahasia baru. Salin kunci yang dimulai dengan "sk-".

Google (Gemini)

Ke aistudio.google.com > Dapatkan API Kunci. Buat kunci untuk projek Anda. Salin kunci.

xAI (Grok)

Ke console.x.ai > API Kunci. Buat dan salin kunci Anda.

Menguji pengaturan AI Anda

Skenario:
Setelah memasuki Anda API kunci, klik "test connection". Anda harus melihat checkmark hijau dan respon contoh dari AI.
Apa yang harus dilakukan:

Jika tes gagal: (1) Periksa bahwa API kunci benar (tidak ada ruang tambahan). (2) Periksa apakah akun Anda telah membuat tagihan dengan penyedia. (3) Periksa apakah nama model valid (4) Jika menggunakan Managed AI, verifikasi lisensi anda aktif.

Penyedia mana yang terbaik?+

Tidak ada penyedia terbaik tunggal. Claude sangat baik untuk percakapan dukungan. GPT-4o cepat dan serbaguna. Gemini menangani beberapa bahasa dengan baik. Coba masing-masing dan lihat mana yang menghasilkan hasil terbaik untuk kasus penggunaan spesifik Anda.

Dapatkah saya beralih penyedia nanti?+

Ganti penyedia dan API kunci setiap saat. riwayat percakapan yang ada diawetkan. AI akan menggunakan penyedia baru untuk semua percakapan di masa depan.

Apa yang terjadi ketika aku kehabisan kredit?+

Degrade AI dengan anggun: respon menjadi lebih pendek, jeda jawaban otomatis, dan admin menunjukkan peringatan keseimbangan rendah. Penelusuran inti, tiket, dan CRM terus bekerja tanpa AI.

AI

Chat pelanggan lebih pintar & lebih murah

Satu set opt-dalam kontrol yang membuat obrolan pelanggan Anda baik lebih cerdas (itu alasan di rekening pelanggan) atau lebih murah (mengirim kurang AI, atau jawaban dalam langkah-langkah lebih sedikit). Setiap kendali tidak aktif secara default dan independen, mengubah satu pada tidak pernah perubahan perilaku lain. Sebagian besar tinggal di bawah Pengaturan > Chat Klien > Behaviour; beberapa sedang mengatur Al dan Kereta AI Anda.

Jawaban Pintar (mode agen)

Sebuah chatbot normal menjawab satu pertanyaan dari satu pencarian. Mode agen pada, asisten dapat membuat beberapa baca-saja cek akun dalam satu putaran dan cross- referensi mereka, misalnya "apakah saya memiliki tiket terbuka, dan adalah keseimbangan saya cukup untuk pembaharuan berikutnya?" dijawab dalam satu jawaban dengan matematika dilakukan. Ini hanya terlibat untuk pelanggan diverifikasi pada account atau pengembalian pertanyaan; segala sesuatu yang lain berjalan singlewal normal-jalur jawaban.

Mode agen

Sampai ke beberapa bacaan-hanya pencarian per putaran, cross- direferensikan sebelum menjawab. Nyalakan ketika Anda memiliki platform yang terhubung (WHMCS, Shopify, Stripe, Zendesk, dsb.) = Off hari ini single- look up perilaku, tidak berubah.

Berpikir kedalaman untuk jawaban agen

Seberapa keras model alasan pada putaran kompleks (rendah / sedang / tinggi). Mulai pada Rendah; kebanyakan pertanyaan dukungan ditangani dengan baik di sana.

Model Agen

Mengganjal model yang lebih kuat hanya untuk giliran agen kompleks, jadi obrolan sehari-hari tetap pada cahaya, model murah dan hanya putaran keras membayar kedalaman. Kosongkan = model normal percakapan Anda.

Rencana kedepan (beta)

Langkah perencanaan kecil memutuskan pencarian mana yang akan ditarik dan apakah dasar pengetahuan diperlukan, lalu menjawab dalam ONE panggilan utama daripada beberapa langkah. Sebuah sub- toggle di bawah mode Agen. Ini tidak dapat difungsikan kecuali jika modus Agen dinyalakan. Kualitas jawaban sama, lebih sedikit panggilan pada pertanyaan multi-bagian.

Percakapan & pemahaman

Memori percakapan panjang (beta)

Membuat ringkasan singkat dari pesan-pesan lama (nama, tiket / faktur nomor, jumlah, keputusan) sehingga asisten tetap konsisten di seluruh percakapan sangat panjang tanpa mengirim kembali seluruh transkrip. Terbaik untuk support- berat, panjang benang; pasang dengan mode Agen.

ToleransasiTypo

Membaca typos kecil ("tikett terbuka saya", "faktur yang belum dibayar") sebagai kata-kata yang dimaksudkan sehingga informasi yang tepat ditemukan daripada tidak terjawab. Bekerja dengan setiap platform terhubung. Mati secara baku; berguna untuk percakapan bermobil- berat.

Konteks akun lean

Hanya menempel pada akun pelanggan saat pertanyaan sebenarnya tentang akun mereka (saldo, faktur, tiket, jasa), melewatkan pertanyaan umum. Cuts biaya tanpa kehilangan kualitas. Asisten masih dapat mengambil rekening langsung ketika giliran membutuhkannya.

Biaya tabungan

Lewati pencarian pengetahuan untuk salam (beta)

"Hai", "terima kasih" dan "ok" tidak memicu pencarian dasar pengetahuan, jawaban itu tidak pernah digunakan pesan apapun dengan konten nyata masih mencari sebagai normal.

Jawaban terlama diperbolehkan (token)

Caps berapa lama jawaban tunggal dapat. Panjang balasan adalah bagian paling mahal dari panggilan, sehingga topi yang masuk akal (sekitar 500 Hanya menurunkan batas global Anda, tidak pernah meningkatkannya.

Pada Set up AI Anda

Kedalaman berpikir (pelanggan & admin chat)

Berapa banyak model yang berpikir sebelum menjawab (minimal ke tinggi). Tetap chatting pelanggan pada minimal / rendah untuk kecepatan; cadangan pengaturan lebih tinggi untuk analisis dan kopilot admin.

Model Per- AI (per pekerjaan)

Setiap permukaan AI (live chat, draf tiket, rangkuman, analisis, kopilot admin, promosi, Site Intelligence dan lebih) dapat berjalan pada modelnya sendiri. Cahaya di mana kecepatan penting, kuat dimana kualitas menjadi penting. Kosongkan pada permukaan = provider default untuk pekerjaan itu.

Atur pengontrol biaya obrolan

Kopilot admin dapat menyimpan memori kerja yang buncit dan beban hanya alat yang dibutuhkan oleh setiap alat yang ada.

Pada Kereta AI Anda

Kompres instruksi

Instruksi anda dikirim pada setiap pergantian, sehingga panjang mereka adalah biaya yang berulang. Tombol Compress menulis ulang sebuah slot untuk mengatakan hal yang sama dalam lebih sedikit kata. Ini menolak untuk menulis ulang jika akan menjatuhkan sebarang {variable} atau aturan, dan melaporkan apa yang dilindungi, sehingga tidak pernah diam-diam perubahan makna.

"Apa yang sudah ada di otak" (Tertawa)

Menunjukkan apa OpsIQ sudah tahu tentang bisnis Anda per slot, sehingga Anda dapat menghapus apa pun yang Anda mengulangi dalam instruksi Anda sendiri.

💡
Untuk dukungan pendek percakapan masukan (instruksi + data akun + sejarah, dikirim setiap putaran) biasanya biaya lebih dari kecil, caching dan lean context bantuan paling ada. Untuk isi yang dihasilkan panjang mendominasi. Penuhlangan-panjang tutup dan kedalaman pemikiran bawah membayar di sana. Lihat Set up AI Anda untuk menjaga cepat cache pada, yang membuat bagian besar berulang dari masing-masing giliran murah.
Apakah ini mengubah bagaimana chatting sudah menjawab?+

Tidak, setiap kontrol mati secara default dan independen. Menghidupkan satu pada hanya menambahkan perilakunya, mematikannya mengembalikan percakapan ke persis bagaimana ia bekerja sebelumnya.

Perintah apa yang harus kuaktifkan?+

Jalankan obrolan sehari-hari pada model cahaya dan pin sebuah model Agen yang lebih kuat. Kemudian, jika Anda memiliki platform terhubung, aktifkan mode Agen, kemudian Rencana ke depan, kemudian Long-percakapan memori. Kemudian bersandar konteks, skip- KB-for-salam, dan topet. akhirnya memadatkan instruksi Anda. Perhatikan beberapa percakapan nyata setelah setiap perubahan.

Peralatan Agen Admin: pencarian web, buku jalan, misi, transfer file

Admin AI chat adalah insinyur yang bekerja, bukan hanya kotak pertanyaan. Ini dapat meneliti perbaikan di web, menyimpan perpustakaan prosedur operasi Anda, berpatroli dengan jadwal dan memindahkan berkas. sebagian besar ini didorong dengan memintanya dalam percakapan; satu hal yang Anda konfigurasikan di depan adalah penyedia web search yang digunakan, pada Set up halaman AI Anda.

Pencarian web

Dibangun di

Agen pencarian web untuk docs, pesan galat dan informasi kini ketika bekerja. Keluar dari kotak ini menggunakan DuckGo, yang tidak perlu kunci dan tidak ada setup.

Runbooks

Dalam percakapan

Sebuah perpustakaan yang disimpan dari prosedur Anda ("bagaimana kita lakukan X di sini"). Agen menulis satu ke bawah setelah memaku pekerjaan rumit dan mengikutinya waktu berikutnya, jadi tahu bagaimana bertahan akhir obrolan.

Ansisi

Dijadwalkan

Dijadwalkan content-hanya patroli ". Setiap pagi, memeriksa ruang disk dan log kesalahan dan memberitahu saya." Findings tiba pada bel admin Anda.

Transfer file

Dalam percakapan

Tanyakan pada berkas log dan mendapat nara unduh privat, atau minta satu berkas disalin dari satu server terhubung ke yang lain. Keduanya ditutup di 5 MB.

Pencarian admin Agent web (pada Set up AI Anda)

Operator Pencarian

Apa yang digunakan agen pencarian web. Baku adalah DuckDuckGo: tanpa kunci, bebas, bekerja pada setiap pemasangan. Pencarian berani, Tavily dan Serper.dev (Hasil Google) biasanya mengembalikan hasil yang lebih baik tetapi setiap kebutuhan sebuah API kunci dari penyedia itu. Jika penyedia dengan keyed gagal karena alasan apapun (kunci buruk, kuota yang dipakai, masalah jaringan), pencarian akan jatuh kembali ke DuckGo secara otomatis, jadi pencarian tidak akan pernah gelap.

Cari kunci API

Kunci bagi penyedia yang Anda pilih, hanya diperlukan untuk Brave, Tavily, atau Serper. Sekali disimpan itu bertopeng dan tidak pernah ditampilkan di halaman lagi; tempelkan pada yang baru untuk menggantinya. Penyedia dengan tajam akan aktif hanya ketika kedua penyedia dan kuncinya disimpan.

Runbooks

Ketika agen baru saja bekerja melalui pekerjaan yang Anda ingin lakukan dengan cara yang sama lagi, katakan "simpan bahwa sebagai buku tulis disebut pembersihan malam". Dari saat itu ia melihat buku panduan runbook dengan nama di setiap sesi, dan ketika Anda meminta pekerjaan dengan nama (atau menggambarkannya) itu menarik langkah-langkah dan mengikuti mereka. Anda dapat memintanya untuk mendaftar, memperbarui atau menghapus buku-buku panduan waktu apapun.

💡
Sebuah buku panduan, bukan sebuah olimpiade bebas. ketika agen mengikutinya, setiap langkah yang akan mengubah server masih berjalan melalui mode izin anda saat ini dan menunjukkan kartu persetujuan biasa.

Ansisi

Misi ini berulang, agen itu berjalan sendiri: per jam, setiap hari, setiap jam, atau tiap minggu pada satu hari. Kesalahan hanya dibaca oleh desain. Mereka dapat membaca server, data, dan web, tetapi mereka tidak pernah bisa mengubah apa pun, mereka menyelidiki dan melaporkan. Ketika misi selesai, tanah penemuan sebagai pemberitahuan pada bel admin Anda. Katakanlah "jalankan patroli pagi sekarang" untuk memicu satu permintaan, atau meminta agen untuk mendaftar, atau menghapus jeda.

⚠️
Missi berjalan off OpsIQ cron, jadi perlu diatur (lihat Cron dan otomatisasi). Satu-off "jalankan sekarang" dari kerja obrolan bahkan antara kron berjalan di sebagian besar server.

Memindahkan berkas

Tanyakan berkas ("get me today 's error log dari server web") dan agen menjumlahkannya dan menjawab dengan link unduh pribadi. Link hanya bekerja untuk signed- dalam admin dan berakhir setelah sekitar satu hari. Berkas-berkas ditutup di 5 MB; untuk sesuatu yang lebih besar, minta agen untuk mengkompres atau memangkas pada server pertama.

Agen juga dapat menyalin satu berkas antara dua server yang terhubung, lagi hingga 5 MB. Penulisan pada tujuan diperlakukan seperti perubahan lain yang dibuat: dalam mode tanya Anda mendapat kartu persetujuan pertama, berkas yang ada didukung, dan salinan ini dapat dikembalikan. Untuk keselamatan, isi berkas dibaca ulang dari sumber saat salinan diterapkan, tidak diambil dari percakapan.

AI

Latih AI-mu.

Pelatihan AI adalah tempat Anda mengajar OpsIQ bagaimana berperilaku kamu menulis surat yang menentukan kepribadian, batas-batas, fokus pengetahuan, dan aturan eskalasi anggap saja sebagai menulis manual pelatihan untuk agen dukungan baru.

Kereta AI
Latih AI-mu.Editor instruksi AI dengan tab Pelanggan / Admin dan nada Inggris yang mudah, selalu dan tidak pernah aturan.Latih AI-mu.area kerjaAI PelangganAdmin AIToneRamah, ringkas, tidak pernah memaksa.SelaluMenawarkan handoff manusia untuk penagihan sengketa.Tidak pernahBerjanjilah pengembalian tanpa memeriksa rekening.1TWO MANUALSPelanggan & admin AI2PLAIN ENGLISHTone, selalu, tidak pernah3GROUNDEDDitambah pengetahuan dasar Anda
Latih AI seperti sebuah mempekerjakan baru, Pelanggan dan manual Admin ditulis dalam bahasa Inggris yang sederhana (nada, tidak pernah, tidak), mendarat di KB Anda.

Dua area pelatihan

Prompt AI Pelanggan

Mengendalikan cara Al berbicara kepada pelanggan Anda dalam widget obrolan. Ini adalah prompt yang paling penting untuk mendapatkan hak.

Aadmin Prompt AI

Mengendalikan bagaimana AI membantu tim admin Anda di operator dashboard. Ini menangani kueri internal dan tindakan eksekusi.

Menulis sebuah prompt AI pelanggan besar

Pelanggan Anda AI prompt harus mencakup daerah ini:

1
Identitas

Siapa itu AI? berikan nama, peran, dan kepribadian. contoh: "Anda Luna, asisten dukungan pelanggan yang ramah dan berpengetahuan untuk Toko Acme".

2
Tone dan gaya

Contoh: "Jadilah profesional tapi hangat Gunakan bahasa sederhana menghindari jargon tetap respon yang ringkas2-3 paragraf max). "

3
Batas pengetahuan

Contoh: "Anda tahu tentang produk kami, harga, pengiriman, dan kebijakan pengembalian, Anda tidak tahu tentang hasil pesaing atau keputusan perusahaan internal".

4
Aturan eskalasi

Contoh: "Escalate kepada agen manusia ketika pelanggan meminta pengembalian uang, menyebutkan tindakan hukum, melaporkan masalah keamanan, atau menanyakan pertanyaan yang sama tiga kali".

5
Hal-hal yang tidak pernah dilakukan

Contoh: "Jangan pernah menjanjikan pengembalian uang tak pernah berbagi rumus harga internal jangan membuat fitur produk yang tidak ada jangan berikan saran medis, hukum atau keuangan".

Contoh prote

Contoh permintaan pelanggan AI
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 perusahaan AI yang meminta
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

Mengurangi prompt Anda dari waktu ke waktu

1
Luncurkan dengan dasar

Mulailah dengan identitas, nada, dan batas kunci.

2
Ulasan Sejarah AI mingguan

Baca percakapan di mana AI memberikan jawaban yang salah atau suboptimal.

3
Mutakhirkan prompt

Tambahkan aturan spesifik untuk isu yang berulang. Misalnya: jika AI terus menjanjikan pengembalian uang, tambahkan "Jangan pernah menjanjikan pengembalian dana. Katakanlah Anda akan meningkat ke tim penagihan".

4
Tambah pengetahuan

Jika AI tidak dapat menjawab pertanyaan, tambahkan jawaban ke Basis Pengetahuan daripada mencoba untuk menyesuaikan segala sesuatu dalam prompt.

⚠️
Jaga cepat Anda di bawah 2,000 kata-kata, dorongan panjang yang berlebihan dapat membingungkan biaya AI dan meningkatkan token letakkan informasi rinci di Basis Pengetahuan sebagai gantinya.
Apa perbedaan antara cepat dan dasar pengetahuan?+

Prompt mendefinisikan kepribadian, batas, dan aturan. Dasar pengetahuan menyediakan informasi faktual (rincian produk, harga, kebijakan). AI membaca keduanya, tetapi bentuk cepat perilaku sementara KB memberikan jawaban.

Dapatkah saya memiliki dorongan yang berbeda untuk departemen yang berbeda?+

Prompt adalah area kerja yang permanen. Jika anda memerlukan perilaku AI berbeda untuk departemen yang berbeda, gunakan basis pengetahuan untuk menyediakan informasi spesifik departemen dan menyebutkan konteks departemen dalam prompt anda.

AI

Sejarah AI

AI History menunjukkan setiap percakapan yang dimiliki Al dengan pelanggan dan admin.

Sejarah AI
Sejarah AISebuah log AI ternyata dengan tipe lencana, pertanyaan dan jawaban, respon waktu dan hasil.Sejarah AIarea kerjaSetiap putaran AI, direkamobrolanQ: mana pesanan saya?A: dikirim hari ini, UPS pelacakan...0.9sMenjawabtiketBalasan Draft untuk T-12345Pembayaran yang disusun1.4sdraftedadminRangkulkan tiket minggu ini12 ringkasan -line dikembalikan2.1sselesaiobrolanQ: membatalkan rencana sayadiserahkan kepada manusia0.7sescalated1EVERY TURNPertanyaan, jawaban, tindakan2SEARCHABLEFilter & ekspor3OWNER-ONLYJejak audit penuh
Setiap perubahan AI (percakapan, rancangan tiket, aksi admin) log dengan tepat prompt, jawaban, durasi dan hasil.

Apa yang setiap percakapan menunjukkan

Tanggal dan waktu

Ketika percakapan terjadi.

Identitas pelanggan

Nama dan email jika diketahui, jika tidak IP dan negara.

Kanal

Widget obrolan, tiket auto- balas, draft email, atau admin AI.

Pesan

Transkrip lengkap percakapan: pesan pelanggan dan respon AI.

Penggunaan token

Berapa banyak token yang dikonsumsi percakapan.

Aksi diambil

Setiap aksi yang dijalankan AI selama percakapan (membuat urutan, membuat tiket, dsb.).

Penilaian

Jika CSAT diaktifkan, kepuasan pelanggan rating untuk percakapan ini.

Mencari masalah

Cari dengan kata kunci

Cari topik spesifik untuk melihat bagaimana AI menangani mereka. Contoh: cari "pengembalian" untuk memeriksa apakah AI mengikuti kebijakan pengembalian dana Anda.

Filter berdasarkan peringkat

Tampilkan hanya percakapan dengan tingkat rendah untuk fokus pada pelanggan yang tidak puas.

Filter menurut saluran

Tampilkan hanya tiket auto- membalas untuk audit otomatis respon secara terpisah dari percakapan.

Urut dengan penggunaan token

Percakapan dengan token tertinggi dapat menunjukkan masalah: huru-hara AI, berputar-putar, atau gagal menjawab pertanyaan.

Ukurtan audit mingguan

1
Periksa percakapan berperingkat rendah

Apa ada kesalahan? atau jawaban yang salah?

2
Periksa percakapan tanda tinggi

Ini mungkin menunjukkan kebingungan apakah AI mengulang sendiri?

3
Perbarui pelatihan

Untuk kesenjangan pengetahuan, tambahkan artikel ke Basis Pengetahuan. Untuk isu perilaku, perbarui prompt AI. Untuk mengulang jawaban yang salah, tambah aturan eksplisit.

Menemukan kesenjangan pengetahuan

Skenario:
Anda mencari sejarah AI untuk "instalasi" dan temukan 15 percakapan di mana AI mengatakan "Saya tidak memiliki instruksi instalasi spesifik untuk produk ini".
Apa yang harus dilakukan:

Ini berarti Basis Pengetahuan Anda hilang pemandu instalasi. Buat artikel dasar pengetahuan untuk setiap langkah pemasangan produk. Setelah menambahkannya, uji dengan menanyakan pertanyaan instalasi AI.

AI

Indentasi AI

AI Insears secara otomatis menganalisis pola percakapan dan permukaan temuan yang dapat ditindaklanjuti: pertanyaan umum, kepuasan tren, kesenjangan pengetahuan, dan pola eskalasi.

Indentasi AI
Insight AI (Intelijen Hub)The Intelligence Hub: sebuah alat AI 's Brief, Smart Alerts, a Score- a Lead / Analyse- a Page tool, and a 14- Grafik lalu lintas hari.Indentasi AIarea kerjaHARI INI 'S BRIEFLalu lintas naik 12%; 3 panas lead;2Transaksi perlu diikuti.Alerts CerdasGalat checkout meningkatTendang ke atas /pricingPetunjuk baru dari ASPendapatan di depan minggu laluNilai a Lead / Analisis halamanIP atau URL…Lari14-Hari Pola Lalu Lintas1HARI INI 'S BRIEFAI menulis ringkasan pagi2SMART ALERTSAnomali muncul3ON DEMANDNilai petunjuk
The Real Intelligence Hub: An AI- written Today 's Brief, Smart Alerts for anomali, on-demand lead scoring and page analysis, and the 14-hari pola lalu lintas.

Apa wawasan menunjukkan

Pertanyaan utama

Yang paling sering ditanyakan. "Bagaimana cara mereset kata sandiku?" adalah #1, dasar pengetahuan Anda membutuhkan panduan reset password terkemuka.

Tingkatan kepuasan

CSAT skor dari waktu ke waktu. apakah kepuasan AI meningkat atau menurun? penurunan mendadak dapat menunjukkan perubahan dasar pengetahuan yang memecahkan sesuatu.

Laju resolusi

Berapa persen percakapan yang diselesaikan AI tanpa campur tangan manusia? 70% Bagus, dibawah. 50% Berarti AI membutuhkan lebih banyak pelatihan.

Alasan eskalasi

Mengapa percakapan diserahkan kepada manusia. Alasan umum: pelanggan meminta manusia, AI tidak bisa menjawab, topik sensitif, masalah penagihan.

Jarak pengetahuan

Topics di mana AI sering mengatakan "Aku tidak tahu" atau memberikan rendah-keyakinan jawaban.

Panjang percakapan rata-rata

Berapa banyak pesan per percakapan.10+ pesan) mungkin menunjukkan AI tidak memahami pertanyaan.

Menggunakan wawasan untuk meningkatkan

Skenario:
AI Insights menunjukkan bahwa 23% dari eskalasi adalah "Pelanggan bertanya tentang garansi" dan AI tidak dapat menjawab.
Apa yang harus dilakukan:

Ini adalah kesenjangan pengetahuan yang jelas.1) Tulis sebuah artikel garansi komprehensif dalam Pengetahuan Dasar meliputi semua istilah garansi, proses klaim, dan pengecualian. (2) Update the AI prompt to reference garansi information. (3) Monitor AI Insight minggu depan untuk melihat apakah kenaikan garansi menurun.

AI

Aadmin Al playbook

AI Admin (Tanya OpsIQ) Membantu mengelola tim Anda OpsIQ dari dalam dasbor admin. Anda dapat memintanya untuk mencari data, menjelaskan fitur, rangkum tiket, dan aksi platform eksekusi.

Admin AI
Aadmin Al playbookPRAK-OpsIQ dengan kartu perintah platform yang ditawarkan menampilkan parameter dan konfirmasi / batalkan.Tanyakan OpsIQarea kerjaTanyakan OpsIQSuspend layanan untuk akun yang tertunda #4821AIAksi yang telah diusulkan: suspend_serviceakun: #4821 (terlambat $120)platform: WHMCS · reversible · auditedKonfirmasiBatal1ASK ANYTHINGPerintah bahasa Inggris yang biasa2PROPOSE FIRSTAksi yang ditampilkan sebelum dijalankan3YOU CONFIRMScoped & audit
Katakan pada admin Al apa yang Anda inginkan dalam bahasa Inggris biasa; ia mengusulkan tindakan yang tepat (scoped, reversible, audit) dan menunggu konfirmasi Anda.

Apa yang bisa dilakukan AI admin

Cari data

Tanyakan: "Tunjukkan semua tiket dari [email protected]"atau" Apa status urutan # ORD -5523?"

Ringkasan

Tanyakan: "Kerahkan terakhir tiket 10" atau "Apa masalah dukungan atas minggu ini?"

Jelaskan fitur

Tanyakan: "Bagaimana cara membuat auto- balasan?" atau "Apa arti kartu bounce rate?"

Eksekusi aksi

Tanyakan: "Buat tiket untuk [email protected] tentang penagihan "atau" Tutup tiket T -12345"

Peron query

Tanyakan: "Berapa banyak pengunjung yang kita dapatkan kemarin?" atau "Apa pendapatan kita bulan ini?"

Percakapan singkat

Mencari pelanggan

Skenario:
Admin bertanya: "Cari pelanggan [email protected] dan tunjukkan aktivitas mereka baru-baru ini"
Apa yang harus dilakukan:

AI mencari pelanggan di seluruh sumber data yang terhubung: sesi pengunjung, tiket, percakapan obrolan, perintah, dan kontak CRM. Ini mengembalikan ringkasan aktivitas baru-baru ini dengan link ke setiap item.

Mengambil ringkasan harian

Skenario:
Admin bertanya: "Apa yang terjadi hari ini?"
Apa yang harus dilakukan:

The AI meringkas: "Hari ini Anda telah 245 pengunjung (up 12%), 8tiket baru (3 diselesaikan oleh AI),2perintah baru total $198, dan1chatting eskalasi tentang penundaan pengiriman. "

Menjalankan sebuah aksi

Skenario:
Admin bertanya: "Ubah tiket T -5523 prioritas untuk Penting "
Apa yang harus dilakukan:

AI menegaskan: "Saya akan mengubah tiket T -5523 prioritas dari Normal ke Urgent ini akan mempengaruhi timer SLA konfirmasi? "kamu mengkonfirmasi, dan tindakan dijalankan.

💡
Admin AI hanya mengeksekusi aksi yang terdaftar dalam Registri Aksi. Ini tidak dapat menciptakan aksi atau sistem akses di luar OpsIQ.
AI

Skenario AI Pelanggan

Bagian ini mencakup pelanggan umum... menghadapi skenario AI dengan tips perilaku dan pelatihan yang diharapkan.

AI Pelanggan
Skenario AI PelangganPerpustakaan pertanyaan pelanggan dipasangkan dengan perilaku AI yang diharapkan dan hasil tag untuk masing-masing.Skenario AI Pelangganarea kerjaPustaka skenario"Di mana pesanan saya?"Cari perintah melalui konektor, berikan pelacakanSelesaikan"Aku ingin pengembalian dana"Mengakui, tidak pernah berjanjiHandoff"Apakah layanan bawah?"Periksa status, laporkan keadaan saat iniStatus"Batalkan akun saya"Konfirmasi niat, kemudian rute ke manusiaKonfirmasi1SCENARIOSPertanyaan umum2EXPECTEDBagaimana AI harus menjawab3UJICari celah pelatihan
Perpustakaan pertanyaan pelanggan yang nyata dan persis bagaimana AI harus menangani masing-masing, untuk menguji pelatihan Anda dan menemukan celah.

Pustaka skenario

Penyelidikan status pemesanan

Skenario:
Pelanggan: "mana pesanan saya #12345?"
Apa yang harus dilakukan:

Diduga perilaku AI: (1) Carilah perintah melalui konektor platform. (2) Laporkan status sekarang (proses, pengiriman, dikirimkan). (3) Sertakan nomor pelacakan bila tersedia. (4Jika urutan tertunda, mengakui dan memberikan perkiraan waktu.5) Jangan pernah menciptakan informasi pelacakan.

Permintaan reset sandi

Skenario:
Pelanggan: "Saya lupa kata sandi dan tidak dapat log in"
Apa yang harus dilakukan:

Diduga perilaku AI: (1) Menyediakan langkah reset sandi dari dasar pengetahuan. (2) Termasuk link reset atau path halaman. (3) Sebutkan bahwa email reset mungkin perlu beberapa menit (4) Sarankan untuk memeriksa folder spam. (5) Jika pelanggan masih tidak bisa me-reset, meningkat menjadi manusia.

Permintaan fitur

Skenario:
Pelanggan: "Dapatkah Anda menambahkan mode gelap ke aplikasi mobile?"
Apa yang harus dilakukan:

Diduga perilaku AI: (1Terima kasih atas sarannya.2) Jelaskan bagaimana permintaan fitur ditangani (log, tinjauan, prioritas). (3) JANGAN menjanjikan fitur akan dibangun. (4) Jika fitur serupa ada, menyebutkan itu.

Perselisihan tagihan

Skenario:
Pelanggan: "Saya dibebankan tapi layanan saya tidak bekerja"
Apa yang harus dilakukan:

Diduga perilaku AI: (1) Mengakui frustrasi. (2) Periksa status layanan jika memungkinkan. (3) Escalate ke departemen penagihan dengan semua rincian. (4) JANGAN menjanjikan pengembalian dana. (5) Set prioritas tiket ke Tinggi.

Pertanyaan off- topik

Skenario:
Pelanggan: "Bagaimana cuaca di London hari ini?"
Apa yang harus dilakukan:

Diduga perilaku AI: (1Saya asisten pendukung perusahaan Anda dan dapat membantu dengan pertanyaan tentang produk dan jasa kami.2) Tanyakan apakah mereka memiliki pertanyaan produk.

Bagaimana aku menguji perilaku AI pelanggan?+

Buka situs web Anda dalam peramban pribadi / penyamaran dan chatting dengan AI sebagai pelanggan. Coba pertanyaan umum, kasus tepi, dan skenario syurarial. Periksa apakah AI mengikuti aturan prompt Anda dan menggunakan konten dasar pengetahuan dengan benar.

AI

Dasar pengetahuan AI

Basis Pengetahuan adalah pustaka artikel yang digunakan AI untuk menjawab pertanyaan. Ketika seorang pelanggan menanyakan sesuatu, basis pengetahuan AI untuk artikel-artikel yang relevan dan menggunakannya untuk menghasilkan respon yang akurat dan beralasan.

Dasar Pengetahuan
Dasar PengetahuanSumber-sumber yang masuk ke toko pengetahuan, kemudian AI menghasilkan sebuah jawaban yang beralasan.Dasar Pengetahuanarea kerjaSumberSitus web merangkakArtikel bantuanFAQDoc yang diimporPengetahuansemantik + kata kunciAIJawaban yang sudah di hapusdengan sumber yang dikutip."Pengembalian uang mengambil 3–5hari bisnis ".1INGESTCrawl, FAQ, impor2RETRIEVEKata kunci semantik +3GROUNDEDJawaban dari isi Anda
Merangkak situs Anda dan impor dokumen ke dasar pengetahuan; AI mengambil potongan-potongan yang tepat dan jawaban, membumi dan dikutip.

Bagaimana cara kerjanya

1
Pelanggan mengajukan pertanyaan

"Apa kebijakan pengembalian Anda?"

2
AI mencari dasar pengetahuan

OpsIQ menemukan artikel "Return Policy" dengan kata kunci dan makna semantik yang cocok.

3
AI menghasilkan respon

AI membaca artikel dan menulis jawaban alami-bahasa berdasarkan isi artikel.

4
Pelanggan mendapat jawaban yang akurat

Respon ini didasarkan dalam kebijakan aktual Anda, bukan data pelatihan AI.

Membuat artikel yang baik

Satu topik per artikel

Tulis artikel terpisah untuk setiap topik: kembalikan kebijakan, tingkat pengiriman, pengaturan akun, ulang sandi. Jangan gabungkan topik yang tak terkait.

Tulis seperti FAQ

Mulailah dengan pertanyaan yang ditanyakan pelanggan, lalu berikan jawabannya, ini membantu AI mencocokkan pertanyaan ke artikel.

Spesifik

"Returns must be initiated within 30 days of delivery" is better than "We have a return policy".

Termasuk kasus tepi

Bagaimana dengan laba internasional? bagaimana dengan produk digital? bagaimana barang yang dibeli saat dijual? tutupi pengecualian.

Jaga tetap saat ini

Ulasan artikel seperempatnya. hapus informasi usang. Mutakhirkan harga, kebijakan, dan prosedur ketika mereka berubah.

Artikel pembuka yang harus kau tulis

Pengiriman dan pengiriman

Biaya pengiriman, waktu pengiriman, pelacakan, pengiriman internasional, dan penanganan penundaan.

Kembali dan kembalikan

Kembalikan jendela, kondisi, proses, mengembalikan waktu, dan pengecualian.

Manajemen akun

Reset sandi, perubahan email, penghapusan akun, dan ekspor data.

Harga dan tagihan

Deskripsi rencana, siklus penagihan, metode pembayaran, faktur, dan mata uang.

Panduan produk

Cara menggunakan setiap produk atau fitur. Langkah demi langkah instruksi dengan cuplikan layar.

Permasalahan yang mengganggu

Masalah dan solusi umum. Pesan kesalahan dan perbaikan mereka.

Informasi kontak

Jam kerja, saluran dukungan, waktu respons, dan jalur eskalasi.

Hukum dan kepatuhan

Ringkasan kebijakan privasi, ringkasan ketentuan layanan, permintaan data GDPR.

Pengetahuan Konektor

Setiap konektor dapat berkontribusi pengetahuan ke AI. Ketika sebuah koneksi difungsikan, artikel pembangun dalam ilmu pengetahuan (katalog produk, pertanyaan umum, platform-spesifik envooting) secara otomatis tersedia untuk AI. Anda dapat menjungkitkan pengetahuan konektornya pada atau mematikan setiap connector dalam pengaturan Konektor.

Anggaran Token

Dasar pengetahuan memiliki langit-langit token yang dapat diatur (baku: 32,000 token) yang mengontrol bagaimana banyak konteks pengetahuan dikirim ke AI per percakapan. Jika dasar pengetahuan Anda sangat besar, AI memilih artikel yang paling relevan dalam anggaran ini. Naikkan langit-langit jika AI tidak menemukan artikel yang relevan; kurangi jika Anda ingin mengurangi biaya token.

Berapa banyak artikel yang harus saya miliki?+

Mulai dengan5-10 artikel-artikel yang meliputi pertanyaan umum anda tambahkan lebih banyak ketika anda mengidentifikasi kesenjangan melalui AI History dan AI Insight kebanyakan bisnis perlu 20-50 artikel untuk cakupan komprehensif.

Dapatkah saya mengimpor artikel dari sistem lain?+

Saat ini, artikel dibuat secara manual OpsIQ. Anda dapat menyalin konten dari FAQ yang ada, pusat bantuan, atau dokumen.

Format apa yang seharusnya artikel berada di?+

Teks sederhana bekerja dengan baik. AI memahami bahasa alami lebih baik daripada terstruktur HTML Tulis seperti yang akan kau jelaskan pada pelanggan.

AI

Evaluasi AI dan Menara Pengawal

Evaluasi diatur mengubah pertanyaan-pertanyaan penting pelanggan menjadi tes berulang untuk jawaban kualitas, kutipan, eskalasi dan aksi keselamatan.

Layar produk
Evaluasi AIEvaluasi AI daftar kasus uji emas, perilaku yang diperlukan, hasil terbaru dan dijadwalkan Menara Pengawal berjalan.Evaluasi AIarea kerjaSETS6CASES84PASS RATE96%HIDUP WORKSPACE VIEWKebijakan pengirimanDiperlukan kutipanPassPermintaan pengembalian danaKonfirmasi manusia diperlukanPassKlaim tidak didukungTindakan terlarangPassPertanyaan migrasiDiduga sumber hilangGagal1CREATE CASESMasukan dan aturan emas2RUN SAFELYUji coba atau evaluasi langsung3WATCHJadwal setiap hari atau mingguan
Evaluasi AI daftar kasus uji emas, perilaku yang diperlukan, hasil terbaru dan dijadwalkan Menara Pengawal berjalan.

Administrator penuh dapat membuat set evaluasi dengan cepat, diharapkan label sumber, kutipan, aturan konfirmasi kemanusiaan, ekspektasi eskalasi dan aksi terlarang. Jalankan secara langsung, kering, atau putar ulang riwayat terpilih.

Menara Pengawal jadwal pemeriksaan harian atau mingguan melalui cron dan menjalankan sejumlah besar kasus (hingga delapan per lulus dijadwalkan). Review kegagalan bersama penyedia / model, prompt versi, pengetahuan, versi, tindakan diusulkan dan biaya sebelum mengubah perilaku produksi.

AI

Bahasa dan terjemahan

Bahasa mengatur pengelola pengubah terjemahan menghadap teks dan perilaku yang digunakan ketika OpsIQ mengikuti bahasa pelanggan.

Layar produk
BahasaHalaman bahasa menunjukkan bahasa sumber, bahasa terjemahan, konsep / negara aktif dan perilaku pengurun bahasa.Bahasaarea kerjaSUMBERInggrisLANGUAGES4HIDUP3HIDUP WORKSPACE VIEWPerancisAntar muka dan isiTingkatJermanAntar muka dan isiTingkatSpanyolTerjemahan DraftDrafIkuti pelangganBalas dalam bahasa terdeteksiHidup1SET SOURCEBahasa operator asli2ADD LANGUAGETerjemahkan di latar belakang3PUBLISHDraft atau hidup
Halaman bahasa menunjukkan bahasa sumber, bahasa terjemahan, konsep / negara aktif dan perilaku pengurun bahasa.

OpsIQ menerjemahkan operator yang dimasukkan ke dalam daftar pengelola-menghadap teks. Atur bahasa sumber dengan benar sebelum membuat terjemahan, tambahkan bahasa target, lalu tinjau draf sebelum menerbitkan. "Ikuti bahasa pelanggan" mengendalikan bahasa respon; menerjemahkan antar-muka widget mengontrol tombol-tombol, label dan teks sistem.

Lingkup terjemahan dapat ditarik hanya atau hidup. Jangan mengandalkan terjemahan mesin untuk legal, pengembalian, keamanan atau teks keselamatan tanpa tinjauan manusia.

Setiap tempat yang memegang kata-katamu sendiri terdaftar dengan jumlah pesannya: pesan obrolan klien, promosi, pesan proaktif, arus chatting, tur dipandu, pengumuman, gelembung teaser dan Surveys dan bentukPermukaan survey meliputi setiap survei yang diterbitkan sepenuhnya: judul, setiap pertanyaan, setiap pilihan jawaban, tombol, selamat datang dan terimakasih - Anda menyalin halaman krom dan hasil halaman. Kunci-kunci terikat pada ID dan nilai opsi, jadi menyusun kembali pertanyaan atau pilihan tidak pernah kehilangan terjemahan, dan menulis satu pesan ulang hanya untuk itu. Terbitkan survei hidup ditawarkan secara baku; draf bergabung ketika Anda memperluas lingkup.

Survei email post- chat mengikuti bahasa yang dikunjungi oleh pengunjung, asalkan bahasa itu adalah salah satu yang Anda tawarkan di sini; sebaliknya menggunakan bahasa sistem. Ladang yang dapat diedit juga diterjemahkan pada halaman ini, dan perilaku memiliki saklar sendiri dalam pengaturan Chat Client.

Tiket dan pesan portal mencakup tipe operator teks tetap sekali dan setiap pelanggan kemudian menerima dalam satu bahasa: tiket pengakuan, dibuka, ditutup, dan umpan balik konfirmasi, per- departemen sign-offs dan portal welcome line. (The AI auto- reply membutuhkan semua ini, itu sudah menjawab dalam bahasa pelanggan.) Dengan kata lain, Surel pelanggan dalam bahasa mereka sendiri diaktifkan dalam OpsIQ Menulis, surel tiket menyelesaikan bahasa penerima dalam urutan ini: bahasa yang mereka pilih di portal atau Pusat Bantuan (dibawa ke tiket), lokal pada catatan kontak mereka, maka bahasa yang ditulis, terdeteksi oleh jangkauan skrip dan kata-kata bertanda, tanpa panggilan eksternal. Hanya bahasa yang dipilih pada halaman Bahasa yang pernah digunakan, sehingga fitur tidak aktif sampai bahasa ditambahkan. Global. HTML pembungkus email sengaja tidak diterjemahkan: itu markup, bukan prosa. Staff- menghadapi email (pemberitahuan, departemen waspada, laporan analis, dijadwalkan, digest mingguan) selalu menggunakan bahasa sistem.

PeopleOS HR

PeopleOS: sistem operasi tenaga kerja yang diatur

Jalankan lifecycle karyawan dari daftar permintaan untuk offboarding dengan mobile-layanan, bukti - didukung mengalir kerja, diketik integrasi dan kontrol manusia atas keputusan yang sensitif.

Peta sistem interaktif
Pusat perintah Lifecycle PeopleOSTiga- Dashboard PeopleOS dimensi menghubungkan merekrut, karyawan, gaji, belajar dan mengatur AI.Pusat perintah PeopleOSBUDAYA ADAORANG248PERAN TERBUKTI12Gerbang Kontrol15 / 15SIKLUS HIDUPRekrutSewaTumbuhHadiahTransisiSATU RECORDIdentitas + bukti pekerjaanMANUSIA CONTROLMengajukan, koreksi, pengambilalihanBUKTIKANKeluar dan lepaskan bukti
PeopleOS menjaga lifecycle, kontrol dan bukti pada satu yang diatur catatan.

Administrator

Operasi

Kelola orang, organisasi, merekrut, masuk, dokumen, cuti, rekonsiliasi gaji, keuntungan, kinerja, belajar, hubungan karyawan, analitis dan pemerintahan.

Karyawan dan manajer

Layanan self

Gunakan portal mobil- pertama untuk catatan pribadi, permintaan, dokumen, onboarding, waktu, membayar penjelasan, belajar, informasi perusahaan dan hak-hak.

Pengembang

Perpanjang

Gunakan kurated hr.* aksi dan tinjauan platform.hr.* operasi melalui satu kontrak, plus typed connector class. Indeks yang dihasilkan dalam PeopleOS API daftar setiap bagian dengan scope nya.

⚠️
PeopleOS bukan buku besar gaji, penasihat hukum, biro cek atau penyedia identitas.

Mendapatkan HR PeopleOS

Personalia PeopleOS termasuk dalam rencana Enterprise. Pada setiap rencana yang dibayar, ini adalah sebuah add- pada: pemilik rekening terbuka Akun→Alamat & Tokens, memilih peopleOS tingkat HR dan baik memulai percobaan bebas atau menambahkannya langsung. halaman hargaApa yang modul lakukan, permukaan oleh permukaan, adalah pada Halaman produk Personalia PeopleOS.

Siapa yang bisa menambahkannya

Rencana yang dibayar yang aktif, rencana bebas tidak bisa menambahkannya, dan rencana yang dibayar masih ada di dalam rencana persidangannya sendiri harus menunggu sampai persidangan itu berakhir.

Sidang gratis

Persidangan berjalan pada tingkat yang Anda pilih ketika itu berakhir tanpa pembelian hak tersebut dihapus dan tidak ada yang ditugaskannya.

Ketika tidak dimiliki

PeopleOS HR tidak muncul di bilah sisi, palet perintah, Pengaturan atau bantuan in- app. Tautan langsung ke halaman HR menawarkan alamat-on daripada halaman tersebut.

Mencapai tutup tingkat

Ketika batas tingkat tercapai halaman menawarkan tingkatan berikutnya. Menyunting atau menghapus apa yang sudah ada tidak pernah diblokir.

Pemasangan yang diurutkan sendiri

Hak perjalanan dalam lisensi. Tambahkan add- pada akun OpsIQ Anda dan instalasi mengambilnya di pemeriksaan lisensi berikutnya.

Pengaturan minggu pertama

Semuanya di bawah ini adalah layar nyata; tidak ada yang perlu pengembang.

1
Nyalakan modul

Buka PeopleOS → HR HomePapan bendera dimulai dengan saklar utama, PeopleOS HR: dengan ini tidak ada halaman HR atau permukaan karyawan yang dapat dicapai. Aktifkan sebuah tombol pada adalah konfirmasi dua klik; mematikan satu off adalah satu klik. AI switch di bawahnya (menyusun bantuan, aplikasi penyaringan, asisten otonom, wawancara AI, otomatis menawarkan pengiriman, verifikasi identitas) tinggal sampai Anda memutuskan.

2
Biarkan Setup Copilot melakukan konfigurasi

Buka PeopleOS → Konfigurasi Copilot dan mengatakan apa yang Anda inginkan dalam bahasa biasa: kebijakan cuti dengan hari-harinya dan pemberitahuan, hari-hari publik untuk sebuah negara, kategori kasus dengan SLA tidak ada yang berjalan sampai kamu mengkonfirmasi; langkah resiko medium membutuhkan orang kedua; setiap run meninggalkan tanda terima.

3
Nama portal karyawan

Buka PeopleOS→Garis Depan→Sinyal-dalam desainPada diri-diselenggarakan menginstal portal tinggal di /hr/<address>; Alamat portal ganti namanya segera dan lama sinyal-dalam link tetap bekerja karena alamat lama depan. /hr di ruang kerja host Anda dan tidak membutuhkan alamat.

4
Publikasikan situs karir Anda

Buka PeopleOS → Rekruitmen. Setiap posting yang Anda terbitkan dari permintaan yang disetujui muncul pada halaman karir publik; link Buka halaman karir publik Di puncak dari Rekruting menunjukkan apa yang dilihat kandidat.

5
Mendaftar sebuah kios untuk perangkat terbagi

Buka PeopleOS→Garis Depan→Kiosks dan memilih Pendaftaran kios. Token perangkat ditampilkan sekali; buka halaman kios pada tablet atau PC (itu adalah /kiosk dan tempelkan saja, orang-orang akan memasukkan email dan PIN mereka atau dengan kode lencana hidup yang pendek dari portal mereka. mengeluarkan sebuah kios menghentikan perangkat sekaligus.

6
Putuskan apa yang bisa dilakukan karyawan untuk diri mereka sendiri

Buka Pengaturan→HRSetiap layanan sendiri (catatan, permintaan, dokumen, pergi, membayar penjelasan dan sebagainya) diatur untuk setiap karyawan, manajer saja, atau satu tim dan tim di bawahnya.

7
Tambahkan orang dan memberi mereka akses

Hidup PeopleOS → Orang Membuat orang, pekerjaan dan manajer mereka, akses portal provisions hanya sekali orang itu memiliki email yang sah dan hubungan kerja yang dimaksudkan; undangan keluar dari layar yang sama dan masuk dimulai dari perjalanan Anda mendirikan.

Garis Kehidupan

Rencana dan merekrut

Buat permintaan yang disetujui, publikasi pekerjaan, menerima aplikasi melalui jejaring web requery- aman, ulasan struktur, jadwal wawancara, keputusan rekaman, masalah menawarkan dan menyewa.

Bergabung dan menyediakan

Membangun tempat tujuan perjalanan yang didukung, mengumpulkan versi dokumen yang benar, peralatan permintaan, memberikan akses yang disetujui untuk templat dan penyediaan portal laut.

Bekerja dan tumbuh

Cuti, jadwal, penjelasan, keuntungan, biaya, tujuan, umpan balik, ulasan, pembelajaran, kesempatan internal, suksesi dan analisis tenaga kerja.

Dukungan dan perlindungan

Menyediakan dukungan HR swasta, mengatur kasus hubungan karyawan, penahanan hukum, permintaan data, koreksi, penjelasan, banding dan tinjauan manusia independen.

Ubah dan tinggalkan

Gunakan efektiv--tanggal perubahan pekerjaan, mencabut akses, peralatan pemulihan, pasangan persahabatan eksternal, menerapkan retensi dan melestarikan bukti yang diperlukan.

Akses dan identitas

Orang kanonikal memiliki catatan pekerjaan dan diverifikasi fakultas identitas eksternal. Email adalah data kontak mutable, tidak pernah kunci identitas permanen. Portal baca sendiri; manajer dan administrator tampilan membutuhkan izin eksplisit.APIscopes lapisan di atas izin rute dan tidak pernah bypass mereka.

Tambah pekerja baru

Skenario:
Ciptakan orang, menetapkan pekerjaan dan manajer, akses portal penyediaan, kemudian membuka perjalanan onboarding.
Apa yang harus dilakukan:

Gunakan dry- run dan idempotency untukAPIMenulis. Konfirmasi orang memiliki email yang valid dan ditujukan hubungan pekerjaan sebelum mengirim akses.

Selesaikan identitas ganda

Skenario:
Dua sistem eksternal mengidentifikasi pekerja yang sama berbeda.
Apa yang harus dilakukan:

Hubungkan kedua aspek yang diverifikasi ke orang kanonikal dan selesaikan konflik secara eksplisit. Jangan gabungkan catatan hanya karena dua nilai surel dapat mutable cocok.

PeopleOS HR

HR mengalir dan bekerja di Pagar Karyawan

Bagaimana setiap area PeopleOS utama dioperasikan dan apa yang dilihat karyawan setelah tanda tangan masuk.

Orang-orang dan organisasi

Menjaga orang kanonikal, pekerja, tipe pekerja, manajer, tim, lokasi, keterampilan, dokumen dan efektive- tertanggal struktur organisasi.

Merekrut dan menawarkan

Pindah dari permintaan yang disetujui ke posting, aplikasi, bukti terstruktur, wawancara, keputusan, menawarkan dan menyewa dengan akomodasi dan rute banding.

Sedang naik dan dokumen

Atur perintah setiap orang yang memiliki langkah tertentu; kumpulkan, ulasan, tanda tangan, kadaluarsa, tahan dan hapus dokumen dengan versi dan bukti akses.

Waktu, tinggalkan dan penjadwalan

Tentukan tipe yang dapat ditinggalkan, keseimbangan, permintaan, persetujuan, liburan, ketersediaan, peristiwa kalender dan rekonsiliasi.

Bayar, tunjangan dan biaya

Jelaskan gaji, surat ijin acara pekerja yang disetujui untuk gaji, pengecualian berdamai, mengelola keuntungan ligibilitas dan mengatur penggantian.

Performa dan pertumbuhan

Tujuan operasi, check-ins, umpan balik, ulasan, kalibrasi, pembelajaran, keterampilan, mentoring, kesempatan internal dan suksesi.

Layanan dan hubungan HR

Berikan pegawai dukungan pribadi saat menjaga keluhan, disiplin, whistleblower dan bukti kasus tertutup dalam dedikasikan batas-batas izin.

Analitik dan perencanaan

Gunakan langkah-langkah tenaga kerja, rencana perhitungan kepala, benchmark dan pengalaman metrik berasal dari catatan; tidak pernah menyimpulkan hilang hasil sebagai sukses.

Peta Patar Karyawan

Pinggiran

Perlu perhatian, perubahan sejak kunjungan terakhir, permintaan terbuka, peristiwa mendatang, pada kemajuan dan pengumuman.

Profil dan catatan

Pekerjaan, catatan yang diverifikasi, dokumen, hak akses, permintaan privasi dan permintaan koreksi.

Dukungan dan tugas HR

Percakapan pribadi, permintaan, tindakan yang membutuhkan karyawan dan tugas-tugas milik perusahaan ditunjukkan secara terpisah.

Hari pertama Anda

Terbukti, didukung pada batas waktu penerbangan dengan pemilik, karena negara, penyelesaian dan pekerjaan diblokir.

Waktu dan pergi

Jaminan, permintaan cuti, ketersediaan, jadwal dan konsekuensi kalender.

Keterampilan dan pertumbuhan

Belajar, bukti keterampilan, tujuan, umpan balik, mentoring dan kesempatan internal.

Bayaranku, menjelaskan

Kompensasinya dalam bahasa biasa dan informasi rekonsiliasi gaji yang diijinkan oleh karyawan.

Perusahaan

Daftar direktori dan organisasi yang terbatas pada rekan informasi telah memilih atau kebijakan yang memungkinkan mereka untuk berbagi.

Hak dan keputusan

Penjelasan, banding, persetujuan, koreksi, akses dan penghapusan permintaan.

💡
Portal ini bergerak-pertama. Kartu akun tetap dapat dicapai, navigasi dan isi menggulung secara independen pada layar lebar, dan gambar navigasi mobile yang menutupi atau mendorong halaman. Salinan penjelasan panjang seharusnya berada dalam komponen tooltip atau pengungkapan yang dapat diakses.

Aman urutan operasi

1
Atur kebijakan dan perizinan

Atur yurisdiksi, peran, jalur persetujuan, penahanan, persetujuan dan kontrol fitur sebelum memuat catatan langsung.

2
Hubungkan penyedia eksternal

Pasang paket yang ditandatangani sesuai, masukkan kredensial least-proviceI dan lewatkan koneksi dan tes konformance.

3
Jalankan dalam kotak pasir atau bayangan

Latihan penuh berjalan dengan data deterministik dan membandingkan bukti yang diharapkan sebelum mengaktifkan eksekusi penyedia real.

4
Rilis di bawah kendali ganda

Pemeriksaan yang berbeda, penyewaan, keamanan, privasi, hukum, keadilan dan bukti aksesibilitas.

PeopleOS HR

Al, keadilan, video dan kontrol hukum

PeopleOS memperlakukan otomatisasi sebagai jalan tool yang diatur: ijin kebijakan, percobaan eksekusi, hasil penyedia dan bukti adalah fakta terpisah.

AI dan kontrol agen

Setiap agen menggunakan alat terdaftar dengan tujuan, yurisdiksi, kelas resiko dan otonomi maksimum.

Keadilan

Definisikan kohort, aturan sampel minimum, metrik, identitas evaluator dan evaluasi yang dikeluarkan secara hukum. Kehilangan data tetap hilang; tidak pernah diubah menjadi sebuah pass.

Penjelasan dan banding

Buat penjelasan dari keputusan tertutup dan bukti kebijakan, kirim banding pada manusia merdeka dan pertahankan bukti hasil.

Keadilan

Kebijakan negara bebas hanya dengan pemilik hukum yang bertanggung jawab, mengutip sumber hukum dan lulus ujian. Perubahan hukum tertinggi mengalami perubahan jalur yang terpengaruh.

UU AI Uni Eropa

Menjaga inventaris sistem, kelas resiko, penilaian dasar mengenai hak cipta, pemberitahuan, overseers, metering dan bukti.

Batas penyaringan video

Provisi tidak partisipasi

hr.interview.room.provision Menciptakan lokasi pertemuan. hr.interview.room.connect dapat membuktikan media mencapai pekerja.

Persetujuan spesifik

Rekaman, transkripsi dan sentuhan biometrik adalah pilihan terpisah.

Tidak ada analisa penampilan

Kontrak video ini tidak memiliki lapangan atau metode untuk emosi, perhatian, daya tarik, ras, cacat atau penampilan.

Rute teks dan manusia

Penilik dapat mengambil alih permanen untuk sesi ini, dan sebuah rute akomodasi teks masih tersedia.

Retensi dan penghapusan

Konektor melaporkan transport terenkripsi, kebijakan penerima aktif dan referensi media penyedia, dan harus mendukung penghapusan yang dapat diverifikasi.

Kamar dibuat, AI absen

Skenario:
Sebuah ruangan Zoom URL ada, tetapi jembatan media tidak mengantarkan audio / video kepada pekerja wawancara.
Apa yang harus dilakukan:

Tampilkan pertemuan sebagai pengaturan dan partisipasi AI sebagai palsu. Pertahankan wawancara manusia dan jalur akomodasi teks yang tersedia.

Callback mengatakan cek berlalu

Skenario:
Sebuah background- cek laporan webhook yang telah ditandatangani selesai.
Apa yang harus dilakukan:

Rekam callback sebagai petunjuk, kemudian query provider. Hanya status yang terotentikasi yang dapat memperbarui pemeriksaan.

🚫
Evaluasi aksesibilitas teknis dapat direkam oleh evaluatornya, tapi penggambaran WCAG memerlukan orang yang terpisah.
PeopleOS HR

PeopleOS API dan pengembangan konektor

Gunakan API umum untuk operasi HR yang diatur dan mengetikkan kontrak konektor untuk sistem eksternal berwibawa.

Umum API sumber kebenaran

Kirim JSON ke POST /api/v1.phpTemukan permukaan yang berjalan melalui meta.actions, OpenAPI di /api/v1/openapi.php, dan Postman pada /api/v1/postman.phpIndeks yang dihasilkan di bawah ini membawa jumlah tepat kurated hr.* aksi dan diulas platform.hr.* Operasi dalam bangunan ini, jadi tidak ada di halaman ini diketik dengan tangan.

Daftar orang
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}'
Dry- jalankan menulis
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}'

Gunakan hr.read atau hr.write hanya dibutuhkan. Rute administrator target masih memeriksa sendiri izin. Penulis membutuhkan kunci idempotensi yang stabil; resiko tinggi memerlukan konfirmasi. Coba ulang kegagalan transien dengan kunci yang sama dan proses pemulihan setelah waktu yang tidak pasti.

Setiap kurated hr. * action

48 curated hr.* actions (22 reads, 26 writes) and 484 reviewed platform.hr.* operations, out of 2420 named actions in this build. Generated from the action registry, the same source as meta.actions, OpenAPI and Postman.

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.

Rekuisisi dan posting (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.

Pergi, belajar dan pasar konektor (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.

Sertifikasi dan kesehatan konektor (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 lifecycle (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.

Jurisdiksi (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.

Kualitas 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.

Percakapan dan penahanan (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.

Reakiness and release (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 konektor

Merekrut

hr_job_board, hr_background_check, hr_identity_verification, hr_assessment dan hr_tax_right_to_work.

Menyewa dan onboarding

hr_esignature, hr_calendar, hr_video dan hr_equipment_it.

Operasi workforce

hr_payroll, hr_benefits, hr_learning, hr_expense_payment, hr_directory dan hr_data_warehouse.

Komunikasi

hr_messaging ini send-only. Kontrak ini tidak berisi metoda baca pesan yang digunakan. pesan

Endpoints Gateway provider

PeopleOS HR provider 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

Gateway memerlukan HTTPS, blok target pribadi / tidak aman, pin validasi DNS hasil, berikut tidak ada pengalihan, batas ukuran respon, membutuhkan JSON, membawa deterministik idempotensi, dan mendukung timestamp HMAC dalam kedua arah. Pengait selalu petunjuk diikuti oleh penyedia permintaan ulang.

Pintu webhook terikat

Tiga pintu publik menerima callback penyedia: POST /opsiq/ajax_api.php?ajax=hr_connector_webhook (bidang connector_class, connector_key, topic), ?ajax=hr_esign_webhook (connector_key, offer_uuid, provider_ref) dan ?ajax=hr_check_webhook (check_uuid). Masing-masing memverifikasi tubuh melalui konektor bersertifikat, membakar pengiriman sehingga mati diputar ulang, dan catatan hanya permintaan jawaban yang tertunda; jawaban penyedia sendiri mengubah rekor. Setiap penolakan adalah jawaban generik yang sama dengan tujuan. PeopleOS tidak memberikan peristiwa webhook yang terbatas saat ini: webhooks.events.list adalah otoritas dan nama tidak ada di hr keluarga, jadi jajak pendapat hr.* baca atau gunakan hr.connectors.health.

Referensi rinci

Buku pegangan PeopleOS komplit

Baca doc/contracts/PEOPLEOS_HR.md dalam instalasi sendiri untuk setiap operator,API, konektor, webhook dan aturan rilis.

Kontrak pengembang gateway

Paket Marketplace berisi README.md, DEVELOPER.md, connector_contract.json, hr_profile.json dan file yang ditandatangani manifest.

PeopleOS HR

kesiapan pengujian dan produksi

Sebuah klaim peluncuran dihitung dari bukti. kesiapan paket, sertifikasi penyedia, persetujuan hukum, evaluasi keadilan dan attestation aksesibilitas sengaja terpisah.

1
Validasi kode dan kontrak

Jalankan sintaks PHP, HRD PHPUnit, rute /APIparity, OpenAPI / Postman cek, manifest paket danJSONSkema validasi.

2
Latihan penuh mengalir

Uji merekrut, ulasan AI, wawancara / video, onboarding, tanda tangan, pergi, gaji, portal, pemberitahuan, modals dan jalur kegagalan konektor.

3
Uji responsif dan akses UI

Drive desktop, tablet, dan tayang telepon; papan ketik, fokus, label, kontras, aliran ulang, tooltip, dialog, notifikasi, gulir dan navigasi independen.

4
Mengumpulkan bukti eksternal

Gunakan penyedia nyata round-journey dan penghapusan, kebijakan hukum rilis, perwakilan data keadilan dan independen WCAG attestation manusia.

5
Rilis di bawah kendali ganda

Peninjau berbeda dari substance menyetujui konektor dan melepaskan bukti.

Apa setiap hasil berarti

Paket ditandatangani

Berkas tidak berubah sejak tanda tangan paket yang sah. Ini tidak membuktikan adanya akun ketiga partai.

Sandbox berlalu

Perilaku deterministik dan konform transisi negara. Ini tidak membuktikan penyedia sebenarnya, jangka tempat tinggal atau penghapusan.

Konektor Produksi bersertifikat

Sebuah rekening area kerja tertentu melewati lima deposito-sisi kewajiban di bawah kendali ganda.

Laporan teknis WCAG

Bukti yang otomatis dan dievaluasi ada untuk permukaan bernama. Ini bukan pemeriksaan orang kedua.

Luncurkan siap

Semua gerbang yang diperlukan hijau pada saat yang sama dan tidak ada bukti berakhir, dicabut, hilang atau bertentangan dengan kesehatan hidup.

⚠️
Jangan pernah membuat catatan pengawas yang legal, keadilan, penyedia atau independen hanya untuk membersihkan gerbang.
Mengapa konektor terpasang tapi masih tidak tersedia?+

Instalasi membuktikan adanya paket. Aktifkan, simpan kredensial-hak-nyata, lulus tes koneksi, kemudian hibah lingkup akun produksi PeopleOS yang cocok menggunakan bukti penyedia asli dan peninjau berbeda.

Mengapa webhook tidak mengubah catatan?+

Callback mungkin valid tapi hanya sebuah petunjuk. Periksa inbox webhook, status penyedia titik akhir dan hasil rekonsiliasi. PeopleOS mengubah keadaan otoritatif hanya setelah permintaan ulang.

Dimana mesin lengkap yang dibaca oleh HR API?+

Panggil meta.actions dan filter untuk r. dan platform.hr.; atau gunakan/api/v1/openapi.phpdan/api/v1/postman.php.Mereka dihasilkan dari yang sama daftar waktu-jalan.

Dukungan

Pusat bantuan

Pusat Bantuan Anda adalah situs bantuan diri sendiri yang dibangun dari artikel yang Anda terbitkan. Pelanggan dapat membaca dan mencarinya di halaman publik sendiri, dan tepat di dalam widget obrolan, sehingga mereka dapat menemukan jawaban atas jawabannya sendiri sebelum mereka membuka percakapan. Semua yang ada di dalamnya berasal dari basis pengetahuan Anda, jadi konten yang sama yang mendukung AI Anda juga untuk membantu umum.

Dimana pelangganmu melihatnya

Halaman publik sendiri

Sebuah situs bantuan yang bersih dan dapat dicari di /help.phpAnda dapat memberikan nama dan gaya Anda sendiri.

Di dalam widget percakapan

Bantuan link dalam widget obrolan sehingga pelanggan dapat mencari artikel Anda tanpa meninggalkan percakapan. Jika mereka masih membutuhkan seseorang, mereka adalah salah satu tekan jauh dari memulai percakapan.

Nyalakan

1
Buka halaman Pusat Bantuan

Ke Config, then Help Center di admin Anda dan beralih Aktifkan Pusat Bantuan Publik.

2
Berikan nama dan melihat

Atur nama Pusat Bantuan, yang menunjukkan pada header dan tab peramban, dan pilih gaya visual. Anda dapat mematikan navigasi atas untuk halaman bersih tanpa menu.

3
Publikasikan beberapa artikel

Tidak ada yang menunjukkan sampai kau menerbitkan artikel untuk itu bagian berikutnya adalah bagaimana.

Publikasikan artikel ke Pusat Bantuan

Artikel hidup di basis pengetahuanmu sebuah artikel muncul di Pusat Bantuan setelah diterbitkan dan ditandai publik ada beberapa cara untuk melakukan hal ini:

Terbitkan satu artikel

Buka artikelnya, tandai itu diterbitkan, dan nyalakan pilihan untuk menunjukkannya di Pusat Bantuan.

Terbitkan semuanya sekaligus

Gunakan Publikasikan Semua tombol untuk mendorong seluruh set Anda yang diterbitkan ke Pusat Bantuan dalam satu klik, daripada melakukannya satu per satu.

Ubah FAQ ke artikel

Sudah memiliki FAQ? Gunakan Terbitkan semua untuk Bantuan untuk mengubahnya menjadi artikel bantuan sehingga mereka duduk bersama segala sesuatu yang lain.

Impor basis pengetahuan yang ada

Pindah dari meja bantuan lain? Impor KB tombol pada tab Artikel membawa basis pengetahuan yang ada untuk Anda. Anda memiliki tiga cara untuk menunjukkan pada konten Anda:

Tempelkan sebuah URL

Berikan alamat pusat bantuan Anda saat ini. Jika ia mengenali platform (misalnyaZendesk) ia membaca pohon kategori yang tepat dari platform itu. Sebaliknya ia merangkak situs dan membangun kembali struktur dari halaman, mengimpor hanya artikel nyata dan melewati login, pricing, dan halaman kontak.

Pilih aplikasi yang terhubung

Jika platform telah terhubung ke area kerja ini dan memiliki dasar pengetahuan, itu muncul di dropdown bawah Impor dari aplikasi yang tersambung. Pilih dan impor, tidak ada URL atau kata sandi yang dibutuhkan. Aplikasi hanya terdaftar sekali itu tersambung dan diatur.

Upload sebuah CSV

Tak ada situs langsung untuk menunjuk? Unggah lembar sebar dengan title, category, dan body kolom. Parent / Child dalam kolom kategori untuk membangun kategori nested.

Apapun cara yang Anda pilih, Anda mendapatkan pratilik pertamaArtikel yang ditemukan, dikelompokkan berdasarkan kategori, masing-masing dengan kotak cek sehingga Anda dapat menjatuhkan apapun yang tidak diinginkan. Tak Jadi seluruh impor dalam satu klik, atau Sejajarkan ulang a URL atau terhubung- impor aplikasi kemudian untuk menarik dalam artikel baru dan berubah.

💡
Pengembang: konektor apapun dapat mengiklankan dasar pengetahuannya ke dropdown ini dengan mendeklarasikan kb_capabilities blok dalam nya settings.json (tipe kb_source, dengan adapter dan base_templateLihat bagian Konektor dan referensi platform- connector.

Atur dengan AI

Pusat bantuan yang rapi mudah untuk diramban dan lebih mudah dicari. Atur dengan AI tombol ini membuat timeing untuk anda. Sekali klik itu membaca artikel yang telah anda terbitkan, ramuannya menjadi kategori yang masuk akal, dan menambahkan tag. Ini menciptakan kategori ketika diperlukan, menggunakan kembali sebuah kategori yang sudah cocok, dan melewatkan apapun yang telah Anda atur, jadi anda dapat menjalankannya lagi setiap kali anda menambahkan artikel baru. Nyalakan. Biarkan AI mengorganisir ke dalam subkategori dalam pengaturan Pusat Bantuan dan ini juga dapat membuat artikel berkas di bawah nested Parent / Child kategori, yang berguna tepat setelah mengimpor dasar pengetahuan yang memiliki sub-bagian.

💡
Kategori memberikan cara untuk browse, dan pencarian tag sharpen pada kedua halaman publik dan di widget. Anda dapat mengubah nama atau memindahkan barang setelahnya. AI memberi Anda titik awal yang kuat, bukan setup yang terjebak dengan Anda.

Pusat Bantuan di dalam widget obrolan Anda

Anda dapat menampilkan Pusat Bantuan tepat di dalam widget obrolan sehingga orang-orang mencari jawaban sebelum mereka mengirim pesan. Dalam pengaturan widget percakapan Anda, pilih dimana taut bantuan muncul:

Dalam header

Ikon bantuan kecil di bagian atas widget.

Di bagian bawah

Sebuah tautan teks di bawah kotak pesan, misalnya "Jelajahi pusat bantuan". Anda dapat mengubah kata-kata.

Kedua tempat

Tampilkan di header dan di bagian bawah untuk yang paling visibilitas.

Sambungan bantuan memiliki kendali warna sendiri di bawah pengaturan tampilan widget. Biarkan saja Nihil cocok dengan warna peluncur Anda, atau pilih Solid warna atau GradienSemua pengalaman bantuan mengikuti tema widget Anda, sehingga selalu terlihat seperti bagian dari merek Anda.

Taruh pusat bantuan Anda pada alamat web Anda sendiri

Keluar dari kotak pusat bantuan Anda sudah memiliki alamat yang bersih, dapat dibagi sendiri (misalnya /help/your-help-centerAnda dapat pergi satu langkah lebih lanjut dan melayani di bawah Anda domain sendiri, jadi 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 situs utama Anda

Masuk Konfigurasi, lalu Pusat Bantuan, membuka Bendung tab dan temukan "Tampilkan pusat bantuan pada alamat web Anda sendiri". Pilih setup Anda (Cloudflare, Nginx atau Apache), salin blok yang telah dibuat, dan tempelkan ke situs anda. Setiap opsi memiliki Atur pemandu tombol di sebelahnya dengan langkah yang tepat.

Pada subdomain

Lebih suka help.yourdomain.com? Panel yang sama memiliki pilihan subdomain. Di Cloudflare subdomain adalah rute yang paling dapat diandalkan, dan memberi Anda alamat bersih dengan apa-apa setelah itu.

💡
Menggunakan Cloudflare? Ini hanya menjalankan Worker-nya pada alamat yang diproksi melalui _Cloudflare (awan oranye). Domain utama Anda sering mengarah langsung ke situs web Anda, sehingga aturan yang ditempatkan pada domain utama tidak dapat melakukan apa-apa. Cara yang bisa diandalkan adalah subdomain proksi seperti help.yourdomain.comPanduan Setup berjalan Anda melalui satu DNS catatan dan rute.
Bagus untuk SEO. Setelah pusat bantuan anda berada di domain anda sendiri, mesin pencari indeks artikel anda dibawah merek anda. setiap halaman menyatakan alamat yang benar dan peta tulis mendaftarkan mereka, sehingga artikel yang sama tidak pernah diindeks dua kali.
💡
Menggunakan taut bantuan pada widget in-? Dalam pengaturan widget obrolan "Buka di tengah bantuan", ditata Kemana link-nya pergi ke Ranah pusat bantuan Anda sendiri Dan masukkan alamat yang sama. OpsIQ alamat.

Lihat bagaimana pusat bantuan Anda lakukan

Selain memilih artikel tunggal, Pusat Bantuan memiliki sendiri analitik. Aktifkan dalam pengaturan Pusat Bantuan dan diam-diam merekam bagaimana orang menggunakan bantuan Anda: artikel yang paling dilihat, apa yang mereka cari, dan pencarian yang kembali kosong (daftar tulis siap-buat), bekerja di luar pelancangan dan perangkatnya sendiri, sehingga tidak perlu widget obrolan terpasang untuk melaporkan. Setiap nomor yang ditampilkan untuk keduanya menempatkan bantuan Anda muncul, halaman publik dan bantuan widget dalam, serta dikombinasikan, sehingga Anda dapat melihat berapa banyak masing-masing orang sebenarnya digunakan.

💡
Analisa tetap mati sampai Anda menyalakannya, dan Anda dapat memiliki pengunjung IP alamat anonim.

Pilih apa yang muncul pada setiap bagian halaman

Setiap bagian dari Pusat Bantuan (kategori pada halaman utama, artikel populer, daftar artikel di suatu halaman kategori dan lebih) memiliki aturan sederhana sendiri. semua item, set nomor, the terakhir, atau hanya yang Anda fitur Ketika aturan tutup daftar, pelanggan masih mendapatkan link "Tampilkan semua", jadi tidak ada yang benar-benar di luar jangkauan.

Anda juga memutuskan bagaimana suara yang membantu terlihat: tersembunyi, rasio ramah seperti "12 dari 14 menemukan ini membantu ", atau perhitungan jari tangan biasa suara minimum berhenti sebuah brand-baru artikel menunjukkan canggung"0dari0".

Lihat artikel mana yang bekerja

Setiap artikel menunjukkan Apa ini membantu? Setiap ya atau tidak dihitung setiap artikel, jadi Anda dapat melihat sekilas yang artikel menjawab pertanyaan dengan baik dan yang mana perlu ditulis ulang.

Teks dan label

Anda dapat mengubah heading dan label pada Pusat Bantuan untuk mencocokkan suara Anda. Tinggalkan bagian kosong dan itu kembali ke nilai yang masuk akal, sehingga Anda hanya mengedit kata yang benar-benar ingin berubah.

Pusat Bantuan berbagi satu perpustakaan dengan AI Anda. Setiap artikel yang Anda terbitkan di sini adalah konten yang sama yang digunakan Al untuk menjawab percakapan dan tiket, sehingga meningkatkan satu perbaikan lainnya.

Pertanyaan umum

Apakah saya perlu menulis konten terpisah untuk Pusat Bantuan?+

Tidak, ini dibuat dari artikel dasar pengetahuan yang sama yang sudah digunakan AI menerbitkan sebuah artikel sekali dan dapat melayani keduanya.

Dapatkah saya menyimpan beberapa artikel internal?+

Ya, hanya artikel yang kau terbitkan dan menandai publik di Pusat Bantuan, apa pun yang tak diterbitkan, jangan sampai ada yang keluar.

Apakah pelanggan masih bisa mencapai seseorang?+

Ya, alat bantu widget membuat keran tidak bisa memulai percakapan, jadi jangan pernah menjebak siapapun.

Pertumbuhan & SEO

Situs Intelijen (SEO suite)

Site Intelligence adalah OpsIQ Dibangun di SEO dan dicari-visibilitas suite. Merangkak situs Anda seperti mesin pencari, melacak di mana Anda peringkat, meneliti kata kunci, menonton link dan pesaing, memindai kehadiran peta lokal Anda, kecepatan cek halaman, dan mengubahnya menjadi laporan yang siap digunakan, dengan analis AI yang menjelaskan apa yang harus diperbaiki dan dapat menyusun perbaikan. Ini adalah fitur premium; ketika diaktifkan itu muncul sebagai Site Intelligence di samping. Setiap data domain tetap terpisah, tidak pernah merebak ulang.

Situs Intelijen
Papan dasbor Intelijen SitusSebuah papan seson SEO menunjukkan skor kesehatan, peringkat kunci pelacakan dan tren lalu lintas.Situs Intelijenyoursite.com86KEHATI SITE3 isu kritisPelacakan peringkat kata kunciai helpdesk#3saas live chat#7crm untuk instansi#12Klik organik1CRAWLMenemukan masalah teknis2TRACKRenks, kata kunci, backlink3ANALYST AIMenjelaskan dan memperbaiki draf
The Site Intelligence overview: skor kesehatan site- dari merangkak terbaru, peringkat tombol pelacakan, sebuah tren organisasi-klik, dan tiga langkah loop: merangkak, trek, biarkan AI konsep perbaikan.

Mendapatkan Intelijen Situs

Site Intelligence adalah bagian dari rencana yang membawanya berdasarkan rencana yang tidak, ini bekerja persis seperti PeopleOS HR: pemilik rekening terbuka Akun→Alamat & Tokens(Tisu Intelligence tier) dan mulai percobaan bebas atau menambahkan langsung. halaman harga.

Jalankan merangkak di sini

Merangkak adalah OpsIQ mengunjungi halaman Anda seperti mesin pencari, untuk menemukan masalah teknis: hubungan yang rusak, judul yang hilang, isi tipis, halaman lambat, masalah pengindeksan.

1
Mulai merangkak

Pada Overview, klik untuk memulai merangkak. OpsIQ antrian dan bekerja melalui halaman Anda di latar belakang; indikator status menunjukkan kemajuan.

2
Baca laporan

Ketika selesai, buka isu dan daftar halamannya.

3
Biarkan AI membantu

Analis AI memproduksi singkat bahasa yang mudah dari apa yang salah dan mengapa hal itu penting, dan dapat menghasilkan perbaikan yang disarankan Anda tinjau sebelum menerapkan.

Apa trek Intelijen Situs

Kesehatan & situs

Scan halaman anda untuk masalah SEO teknis dan daftar setiap halaman dengan masalahnya.

Pelacakan tingkat

Tambahkan kata kunci yang Anda pedulikan; OpsIQ cek di mana peringkat situs Anda dan trek gerakan dari waktu ke waktu.

Penelitian kata kunci

Temukan kata kunci baru untuk menargetkan, dengan pelatih kata kunci AI untuk membantu prioritas.

Backlink

Lihat siapa yang terhubung dengan Anda, segarkan daftar, dan ketidaksetiaan link Anda tidak ingin terkait dengan situs Anda.

Kompeksi

Tambahkan domain pesaing dan bandingkan visibilitas Anda terhadap mereka, dengan analisis persaingan AI.

Jaringan lokal (peta)

Pindai local- daftar visibilitas seluruh grid geografis untuk melihat di mana Anda muncul pada peta, ditambah Google Business Profile tools.

Kecepatan halaman

Jalankan pawai-kecepatan cek sehingga Anda dapat memperbaiki halaman lambat yang menyakiti peringkat dan konversi.

Isi AI

Hasilkan isi briefs dan draft ditujukan pada kata kunci yang Anda targetkan.

Laporan

Bangun yang dapat dicetak, pelanggan siap melaporkan segala sesuatu di atas.

Hubungkan Google dengan data akurat

Dua penghubung Google mengubah perkiraan menjadi bilangan nyata:

Konsol Pencarian Google

Cari

Menarik query yang tepat, klik dan kesan Google laporan untuk situs Anda, memetakan properti Anda, dan peringkat peluang permukaan langsung dari data Google sendiri.

Google Analytics 4

Lalu Lintas

Bawa data lalu lintas dan keterlibatan kalian bersama data SEO kalian, jadi laporan menunjukkan kenampakan dan perilaku bersama.

Dijadwalkan menyegarkan laporan & whitelabel

Anda tidak perlu menjalankan semuanya dengan tangan. Mendaftar penyegaran kembali crawls, pemeriksaan pangkat, cek kata kunci, renggang menyegarkan, pemindaian local- grid dan laporan generasi pada irama (harian atau mingguan tergantung pada rencana dan volume). Ini dijalankan melalui proses ini melaluiOpsIQcron, lihat daerah Cron dan otomatisasi. Dihasilkan ekspor laporan sebagai cetakan, pelanggan-siap: lembaga mengirim setiap klien sebuah regular SEO perbarui, dan karena setiap data domain terpisah, setiap klien hanya pernah melihat mereka sendiri.

Beberapa fitur Site Intelligence memanggil penyedia data eksternal dan AI melalui OpsIQ provider terkonfigurasi. Mereka bekerja keluar dari kotak ketika suite diaktifkan untuk rencana anda. Bila menyegarkan tidak berjalan, konfirmasi OpsIQ cron sedang berjalan (lihat Cron dan otomatisasi).
Apakah saya perlu menambahkan apa pun ke situs saya untuk SEO pelacakan?+

Crawls, peringkat pelacakan, penelitian kata kunci dan backlink bekerja tanpa menyentuh situs Anda. Untuk lalu lintas dan data pencarian tepat, hubungkan Google Search Console dan GA4.

Dapatkah saya melacak lebih dari satu domain?+

Tambahkan masing-masing domain secara terpisah; mereka merangkak, peringkat dan laporan tetap sepenuhnya terisolasi dari satu sama lain.

Seberapa sering aku harus merangkak?+

Weekly cukup untuk kebanyakan situs; merangkak pada permintaan setelah perubahan konten besar atau struktur. Atur jadwal sehingga Anda tidak pernah lupa.

Pertumbuhan & SEO

Implement otomatis (SEO Agen)

Implement adalah bagian dari Site Intelligence yang sebenarnya menerapkan proses perbaikan dan analisa AI, bukan hanya menyarankan anda, agen tersebut bekerja secara ketat dari apa yang telah ditemukan oleh intelijen site (tidak pernah dapat menciptakan perubahan) dan berjalan melalui lingkaran aman yang sama: pratinjau kering, persetujuan langkah pertama anda, aksi langsung yang dimunculkan, dan sebuah pemeriksaan awal yang membuktikan masalah terbuka menurun.

ImplementasiAuto- Implement
Agen SEO Implement OtomatisAliran yang menunjukkan perbaikan SEO yang direkomendasikan bergerak melalui pratilik, persetujuan dan sebuah tulisan langsung, dengan prove- itu recrawl.ImplementasiAuto- Implementyoursite.comPerbaikan direkomendasikanAdd missing <title>disetujuiPerbaiki robots. txtdisetujuiKirim sitemap.xmlulasanDRY- RUN PREVIEW (DIFF)+ <title>AI Helpdesk - OpsIQ</title>+ <meta name=description ...>- <title>Home</title>TeguhkanlahLewatiPROVE IT - RE- CRAWLBuka isu 124Snapshot disimpan1PREVIEWDry- jalankan diff dari setiap fix2AKAN MENGGUNAKAN & WRITTENSSH atau diselenggarakan API3UJI & ROLLBACKRe- crawl + snapshot
Bagaimana sebuah sesi berjalan: agen daftar perbaikan Site Intelligence sudah direkomendasikan, menunjukkan diff kering-run dari masing-masing, menerapkan yang anda setujui SSH atau host API, snapshot sebelum setiap menulis, dan kembali merangkak untuk membuktikan jumlah terbuka-isu turun.

Apa yang bisa berubah

Agen hanya pernah berlaku perbaikan yang Site Intelligence (atau analis AI) sudah direkomendasikan untuk domain tersebut. Di seluruh platform didukung yang meliputi:

Konfig server

sitemap.xml, robots.txt, dan redirect, kanonical dan header aturan dalam .htaccess (Apache / LiteSpeed) atau konfigurasi nginx.

Arahkan kembali rantai

Membatalkan rantai redirect multi- hop ke bawah untuk lompatan tunggal langsung ke URL akhir, di dalam blok akses yang sama dikelola . htaccess, sehingga kecepatan dan nilai link berhenti bocor melalui ekstra hops.

Page <head>

Judul halaman hilang atau lemah, deskripsi meta, tag kanonikal dan struktur-data (skema) blok.

WordPress SEO

Yoast, Peringkat Matematika dan SeoPress judul & meta, dan teks alt gambar, diterapkan melalui WP-Cli pada SSH path atau REST API Di jalan yang diselenggarakan.

WordPress terstruktur data

Tambahkan JSON-LD (skema) ke halaman yang hilang. SSH path sebuah helper dikelola kecil (plugin mus-use) mencetak markup sehingga bekerja dengan atau tanpa plugin SEO; pada jalur host plugin SEOmu membawanya.

Taut internal

Tambahkan satu link internal yang relevan di dalam WordPress konten untuk menyelamatkan halaman yatim piatu dan menghubungkan posting terkait. Satu tautan per halaman, tidak pernah di dalam judul, sebuah link yang ada atau shortcode yang sudah ada, dan selalu disetujui oleh Anda terlebih dahulu.

Isi halaman-Thinewrite

Draf isi pengganti penuh untuk halaman tipis (diaktifkan oleh pilihan merangkak, lihat di bawah). Setiap draft ditinjau dan disetujui oleh Anda sebelum apa pun diterbitkan, dan konten lama disimpan sehingga dapat dipulihkan.

Cache halaman (WordPress)

Nyalakan W3 Total Cache page caching ketika merangkak menemukan masalah kecepatan dan plugin yang terpasang, sehingga halaman lebih cepat melayani.

Shopify SEO

Produk dan judul SEO koleksi & deskripsi, halaman dan artikel blog- SEO, plus 301 mengalihkan arah, melalui Shopify Admin API.

Webflow SEO

Keterangan halaman SEO dan meta melalui Webflow Data API V2.

Siapkan perbaikan secara otomatis (dua pilihan merangkak)

Panel Konfigurasi Intelijen Site untuk domain (pengaturan merangkak) memiliki dua pilihan yang menentukan berapa banyak agen baris untuk Anda sebelum waktu. Keduanya mati secara baku dan keduanya menggunakan kredit AI, sehingga Anda ingin mereka hanya ketika Anda ingin pekerjaan yang dilakukan untuk Anda.

Otomatis-mempersiapkan AI perbaikan setelah setiap merangkak

Setiap merangkak juga menulis isi perbaikan beton (judul, deskripsi meta, teks alt, skema, mengarahkan kembali) untuk apa yang ditemukan, sehingga perbaikan siap untuk meninjau dan menerapkan saat merangkak selesai bukan dihasilkan kemudian dengan permintaan. Menghasilkan kredit AI pada setiap crawl.

Isi AI menulis ulang (halaman tipis)

Agen mungkin menyusun isi pengganti penuh untuk halaman tipis. Tidak ada yang pernah diterbitkan sendiri: setiap draft muncul sebagai perubahan Anda meninjau berdampingan dan menyetujui atau menolak, konten sebelumnya disimpan sehingga dapat dikembalikan, dan itu terbatas pada beberapa halaman per lulus. Uses AI kredit per draf.

💡
Kedua pilihan hanya mempersiapkan dan membuat rancangan bekerja. setiap perubahan masih melalui persetujuan per langkah yang sama, snapshot dan rollback sebagai perbaikan lain, jadi menyalakan mereka tidak pernah menempatkan sesuatu hidup dengan sendirinya.

Dua cara menghubungkan

SSH / SFTPpath

Diatur sendiri

Untuk situs pada server Anda sendiri, agen menghubungkan lebih SSH/SFTP memakai kredensial yang Anda simpan, menyunting konfigurasi server dan berkas halaman secara langsung, dan menjalankan WP- CLI untuk WordPress Yang terbaik ketika kau memiliki akses shell dan ingin kontrol penuh dari file.

Hosted-API path (tidak ada SSH)

Tanpa shell

Untuk platform yang tidak mengijinkan SSH, agen bekerja sepenuhnya melalui seorang pejabat API Konektor, WordPress (REST + Sandi Aplikasi), Webflow (Data API v2) dan Shopify (Admin API Tidak ada yang terpasang pada host.

💡
Wix dan Squarespace tidak memiliki SEO-write publik API Jadi pada platform tersebut Impllement otomatis berjalan dalam mode penasihat: ia menunjukkan perubahan yang tepat untuk membuat (judul yang tepat, meta atau konfigurasi) bagi Anda untuk diterapkan secara manual.

Nyalakan konektor

Agen mencapai setiap platform melalui konektor:

Dibangun di

Shopify dan WordPress konektor kapal dengan OpsIQ, cukup aktifkan mereka di bawah Konektor dan tambahkan kredensial toko / situs.

Dari Marketplace

Webflow, Wix dan Squarespace install dari Konektor→Marketplace, kemudian menghubungkan dengan cara yang sama.

Bagaimana sesi berjalan

1
Pilih perbaikan

Buka AutoImplement (roket) dari bagian Intelijen Site yang memuat isu-isu intelijen site telah ditemukan bahwa ia dapat memperbaiki domain ini.

2
Pratilik setiap perubahan

Untuk setiap perbaikan agen menunjukkan diff kering-jalankan (persis apa yang akan menulis) sebelum apa pun menyentuh situs langsung.

3
Tetapkan langkah demi langkah

Anda menyetujui (atau melewatkan) setiap perubahan individual. Tidak ada yang diterapkan tanpa tujuan eksplisit Anda di depan pada langkah itu.

4
Itu menulis, lalu foto

Pada persetujuan agen membuat perubahan hidup atas SSH atau hosted API dan menyimpan snapshot pertama, sehingga perubahan apapun dapat digulung kembali.

5
Buktikan, hidup

Seperti yang berlaku setiap perubahan agen segera re-check halaman yang tepat dan menunjukkan langkah "tetap hidup" putusan, sehingga Anda menonton tanah perbaikan setiap pada halaman langsung seperti yang terjadi. Pada akhirnya itu kembali merangkak seluruh situs dan menegaskan hitungan open- isu dijatuhkan.

& Tagihan keselamatan

SEO- saja

Agen hanya dapat melakukan apa yang Site Intelligence rekomendasikan untuk domain itu. Ini tidak dapat membuat perubahan sewenang-wenang ke situs atau server Anda.

Persetujuan Per- langkah

Setiap tulisan dipandang sebagai diff dan diterapkan hanya setelah Anda menyetujui langkah spesifik tersebut.

Snapshot & rollback

Sebuah snapshot disimpan sebelum setiap menulis, sehingga perubahan apapun dapat dikembalikan.

Barang bukti per- langkah yang masih berlaku

Setiap halaman berubah dicek ulang segera tertulis dan mendapat putusan "tetap hidup", jadi perbaikan dikonfirmasi terhadap halaman langsung segera, tidak hanya di re--merangkak penutupan.

Isi tidak pernah otomatis diterbitkan

Internal link dan it- konten halaman menulis ulang adalah dampak tinggi, sehingga mereka selalu ditampilkan kepada Anda untuk persetujuan dan tidak pernah diterapkan secara otomatis, apapun mode yang Anda jalankan.

Managed- Al saja

Implemen otomatis berjalan pada AI Managed; diblokir ketika area kerja memakai sendiri (BYOK) kunci.

Tagihan

Tagihan token AI biasanya saat Anda menggunakannya, ditambah satu biaya per-use datar untuk sesi Auto- Implement, keduanya diambil dari kredit AI Managen-sama.

Implimen otomatis mati secara baku. Aktifkan pada halaman konfigurasi AI (Otomatis-Implement card) dan pastikan konektor platform Anda tersambung terlebih dahulu.
Apa itu mengubah sesuatu tanpa bertanya?+

Tidak, setiap perubahan ditampilkan sebagai diff kering-run dan hanya diterapkan setelah Anda menyetujui langkah yang tepat.

Apakah saya perlu akses SSH?+

Tidak pada WordPress, Shopify atau Webflow Mereka bekerja melalui resmi mereka APIs tanpa akses shell. SSH hanya salah satu dari dua jalan, digunakan ketika anda ingin agen untuk menyunting konfigurasi server dan berkas langsung pada server anda sendiri.

Bagaimana aku tahu itu berhasil?+

Setelah menerapkan perbaikan yang disetujui agen re- crawls situs dan menunjukkan isu-out jumlah sebelum dan sesudah, sehingga Anda dapat mengkonfirmasi perbaikan mengurangi masalah.

Apakah itu menulis ulang atau menerbitkan konten halaman sendiri?+

Tidak. Isi AI menulis ulang mati sampai Anda menyalakannya dalam opsi merangkak, mereka terbatas pada beberapa halaman tipis per lulus, dan setiap draft ditunjukkan kepada Anda untuk sisi - samping persetujuan sebelum apapun dipublikasikan. Isi sebelumnya disimpan, sehingga tulisan ulang selalu dapat dikembalikan.

Dapatkah saya menggunakannya dengan kunci AI sendiri?+

Implement Auto- Managed-AI saja dan diblokir oleh BYOK. Ini tagihan AI token biasanya ditambah satu biaya peruse per sesi per datar, dari kredit AI yang sama.

Perkembangan & keterlibatan

Studio Survey

Studio Survey adalah ruang kerja untuk membuat survey yang dapat disampaikan sebagai halaman berdiri kaya, widget situs atau tidak sejalan terlampir. Produk saat ini juga menyediakan link yang diselenggarakan, pratilik rancangan ditandatangani, undangan pribadi, QR berbagi, respon browsing dan surveysscoped analitik. Widweb adalah satu pilihan pengiriman; ini bukan definisi dari sebuah survei.

⚠️
Batas target: penciptaan premium dan pengalaman pratilik, Pembangun Konektor survey kemampuan, dan juga batasan penyedia / kesehatan yang dimiliki oleh pihak penyedia tersedia sekarang. Studio Survey masih membutuhkan arsitektur multi- penyebaran independen, sinyal Tanda-Tanda Gateway Penjuangan Identitas, menargetkan / kabel variabel, CRM Outreach mengirim dan mengetik surveys.* API.

Buat suatu survei

1
Pilih bagaimana orang akan mengambilnya

Penyihir saat ini menawarkan Standalone page & link, Website widget dan Inline terlampir. Target yang disetujui dimulai dengan tipe survei dan kemudian menambahkan CRM email, Link, dan QR deplastments sebagai pilihan kelas pertama.

2
Pilih tujuan

Pilih NPS, CSAT, CES, umpan balik produk, post-beal, pembatalan, onboarding, website, webinar, dukungan, lead / demo, percobaan, testimonial, penelitian, karyawan, masukan atau umpan balik umum.

3
Gunakan sebuah template lengkap atau Awal kosong

Katalog kini telah siap disunting untuk dikelompokkan dengan tujuan. Memilih template yang membuat draft disalin: mengubah survey Anda tidak mengubah starter atau survei lain.

4
Ulasan ubahan atau quick

Ujicoba membuka setiap pertanyaan, desain, perilaku dan pengantaran. Ulasan cepat membuka draft yang sama pada pemeriksaan tilikan akhir. Tidak ada menerbitkan atau mengirim secara otomatis.

Pilihan pengiriman dan perilaku sekarang

Halaman standalone & link

Sebuah halaman responsif bermerek dengan sendiri URL Gunakan undangan pribadi dan kedaluwarsa ketika setiap penerima membutuhkan link yang terkontrol. QR berbagi poin pada pengalaman host ini.

Widget situs web

Kanal warisan yang dimigrasi. Ini dapat menggunakan halaman, geografi, perangkat, pengunjung, tanggal, sampling, dinginkan, kunjungi dan aturan kuota. Hal ini masih didukung oleh jembatan widget warisannya sementara arsitektur penyebaran dibangun.

Terbenam dalam baris

Survei responsif ditempatkan di dalam halaman, portal, produk atau pusat bantuan. tidak memerlukan Promotion Studio.

Surel

Hari ini Studio dapat menghasilkan undangan HTML dan link pribadi. End-to-end mengirim dari CRM kontak / segmen, dengan persetujuan, penindasan, penjadwalan, coba lagi dan respon korelasi, adalah target integrasi yang disetujui CRM Oureach.

Desain dan pratinjau Enterprise

Halaman survey memiliki tema dan pajang yang dimiliki oleh para keluarga, kontrol responsif, diterima dan selesai menyalin, dan pratinjau draft yang ditandatangani. Pratilik prainerasi sepenuhnya di bawah penyunting, bukan sisi sempit rel. Ia menggunakan waktu berjalan yang sebenarnya dalam bingkai pasir dan mendukung desktop, tablet dan widget telepon; pemeriksaan lalu lintas tidak menulis tanggapan atau analitik.

💡
Survey Studio independen dari Promotion Studio. Target runtime, identitas, aset, rendering dan analitik harus dimiliki secara ilmiah. Isi promosi mungkin hanya digunakan kembali melalui salinan / impor waktu eksplisit yang membuat data Survey terpisah; kemudian Progerakan edits harus memiliki efek.

Produk formulir penuh

Penyebaran Independen

Tingkat

Satu survey dapat memiliki halaman bernuansa terpisah, widget, embed, email CRM, pribadi-link dan QR displastments, masing-masing dengan keadaan sendiri, desain, penonton dan analisis. Setiap survei dapat diistirahatkan, dinonaktifkan atau dihapus.

CRM Outreach dan kampanye

Tingkat

Buat audiens yang diverifikasi dari segmen CRM dan konektor yang mampu, bekukan ke versi tak dapat diubah, keluarkan satu undangan yang ditandatangani, dan kirimkan melalui konektor surel berjepitan dengan bukti pengiriman yang lebih baik.

Kotak dan validasi

Tingkat

sliders, image choice, file upload, signature, address, phone, headdings and rich text, with min / max length, email /URL/ presets nomor, teks galat kustom dan per- pertanyaan prefill URL parameter.

Logika, rumus, hasil

Tingkat

AND / OR grup kondisi, aturan cabang, mesin formula aman atas jawaban, dan band skor yang membawa hasil mereka sendiri: tanah kuis mencetak pada putusannya.

Bahasa, kios, prefill

Tingkat

Sebuah daftar dropdown bahasa pengunjung hanya dengan bahasa-bahasa nyata, mode kiosk untuk tablet bersama (target besar, auto- reset, tanpa pengalihan ulang), sebuah prefill link building, dan dapat diperbaiki aman lencana dan teks footer.

Pengujian versi A / B

Tingkat

Publikasikan versi penantang pada penyebaran apapun dengan pembagian lalu lintas. Pengunjung diberikan sticcony, respon dicap dengan versi yang sebenarnya dilayani, dan tabel perbandingan menunjukkan tanggapan, pelengkapan dan berarti skor per versi.

Digest weekly

Tingkat

Email mingguan dengan yang terakhir 7 hari ini dari survei KPI, survei tersibuk, pulsa Feedback dan pengarahan AI terbaru, dikirim melalui konektor terikat disematkan. Konfigurasikan di Pusat Pengiriman, Automatisasi.

Pemerintahan

Tingkat

Daftar akses per-survey membatasi yang dapat menyunting, menerbitkan, atau menghapus sebuah survey. Publikasikan persetujuan (four- eyes) memerlukan admin kedua untuk merilis draft yang tepat; mengedit reset persetujuan. Tautan berbagi link agar peninjau melihat rancangan sebenarnya tanpa log masuk.

Platform pengembang

Tingkat

Kontrak Konektor 2.2, mengetik survei. * dan umpan balik. * Aksi pada api/ v1, survey kanonikal. * event, awable signed webhooks dengan format relay Slack and Google Sheets, dan satu - respons PDF Export.

Perkembangan & keterlibatan

Survey Analytics dan Feedback adalah produk yang berbeda

Survey Analytics menjelaskan bagaimana survei itu sendiri mencapai orang dan berkinerja. Feedback menjelaskan apa yang dikatakan pelanggan di semua sumber diperbolehkan dan apa bisnis harus dilakukan untuk hal itu.

Analytics Survey

Terkirim dari survei individu di Survey Studio, bukan dari navigasi sisi global. Ini mengukur eligibilitas, paparan, perilaku pemicu, dimulai, pelengkapan, pengabaian, pertanyaan, waktu, hasil penyebaran / kampanye / versi dan keandalan waktu berjalan.

Ringkasan & Kotak Masuk Feedback

Satu umpan balik widget warisan, obrolan dan tiket CSAT, umpan balik tiket jawaban, pelanggan AI- Jawaban peringkat, knowledge- dasar membantu suara dan disetujui sumber eksternal / custom.

Analisis Feedback

Menganalisa makna pelanggan: tren metrik asli, topik / tema, emosi, maksud, mendesak, permintaan, pujian, perjalanan / produk / layanan / tim, pengurangan dan hasil akhir dari loop.

Kepemilikan data

Jawaban survey tetap berwibawa di penyimpanan Survey. Feedback menyimpan referensi sumber yang dapat dibangun kembali dan sinyal yang berasal, lalu memuat bukti yang diizinkan sesuai dengan permintaan.

⚠️
Halaman Feedback saat ini masih memiliki peramban respon Survey dan suatu inbox widget warisan yang terpisah, dan total AI belum menggunakan model sumber normalisasi. Overview / Inbox / Analytics / Desation & easment design adalah target implementasi.

NPS, CSAT, CES, bintang, ibu jari dan bantuan harus selalu mempertahankan metode asli mereka, skala, sampel, jendela tanggal dan penyebut. Mereka tidak boleh digabungkan menjadi satu rata-rata yang tidak dapat dijelaskan.

Pertumbuhan & SEO

Studio Promosi

Studio Promosi mengubah situs Anda menjadi mesin konversi. Mendesain pop- up, geser-in, bar atas / bawah, sepenuhnya-layar pengambil barang, blok inline dan bahkan negara-berbasis redireksi, kemudian menunjukkan pesan yang tepat untuk pengunjung yang tepat pada saat ini. Semuanya disampaikan melalui OpsIQ widget sudah di situs Anda, sehingga tidak ada tambahan untuk menginstal. Anda merancang dan menyimpan kampanye; mereka hanya menunjukkan Anda telah terminukan untuk studio.

Studio Promosi
Perancang Promosi StudioPerancang kampanye visual dengan palet blok, pop- di atas kanvas, dan panel penargetan.Promosi Studio - DesignerBLOKxSelamat datang, {first_name}!Dapatkan 15% off pesanan pertama AndaSAVE15Klaim kupon sayaTARGETNegaraAS, CAPemicuKeluar-niatPisah A / B50 / 50Terbitkan1DESAINSeret blok ke kanvas2TARGETNegara, halaman, penonton3EVASTlEA / B pemenang + AI wawasan
Desainer visual: palet blok di sebelah kiri, kampanye Anda di kanvas (di sini adalah kupon pribadi popping-up menggunakan {first_name} token), dan menarget + panel terbitan di sebelah kanan.

Gambaran besar

Kampanye

Apa

Satu promosi: sebuah pop- up, banner, bar, slide- in, full-screen, inline block atau geo-direct. Masing-masing memiliki tujuan: penjualan, memimpin, menandatangani, chatting, survei, pengumuman.

Mendesain & versi

Bagaimana

Kau bangun tampilan di penyunting visual. setiap save menciptakan versi baru, jadi kau selalu bisa berguling kembali. tidak ada yang pernah hilang.

Target

Siapa

Yang melihatnya: negara, halaman, perangkat, sumber lalu lintas, kembali vs baru, jadwal, dan (dengan penghubung) log-in pelanggan Anda.

Pemicu

Kapan

Ketika muncul: seketika, saat penundaan, pada gulungan, pada exit- tujuan, ketika menganggur, pada klik, setelah N halaman, atau dari aktivitas obrolan / tiket.

Analisis

Hasil

Kesan langsung, klise, konversi, corong putus-putus, negara / halaman / perangkat terbagi, pemenang A / B dan sebuah wawasan AI.

Luncurkan promosi pertama Anda di 5 langkah

1
Mulai dari suatu templat atau kosong

Buka Studio Promosi dan klik kampanye baru, atau pilih desain yang sudah dibuat dari galeri Templat.

2
Mendesain

Seret di blok, judul, teks, tombol, gambar, lencana, statistik, jumlah nilai, formulir, kupon, video, peringkat, roda-roda. Warna gaya, gradien dan efek 3D dengan slider. Pratilik Desktop / Tablet / Mobile, dan gunakan Free move untuk menempatkan apa saja.

3
Prialisasilah.

Tipe token seperti {first_name}, {country} atau {company} Pada acara-waktu mereka menjadi nilai real pengunjung.

4
Target & pemicu

Pilih siapa yang melihatnya (country, page, device, audiens) dan ketika itu kebakaran (delay, scroll, exit-intents). Tinggalkan aturan kosong untuk berarti semua orang.

5
Periksa, lalu terbitkan

Klik Periksa untuk pemindaian sebelum peluncuran, lalu Publish. ini akan berlangsung dalam hitungan detik dan mulai mengumpulkan analisis.

Blocks yang dapat Anda buat

Isi

Inti

Tajuk, paragraf, daftar, kutipan, gambar, ikon, lencana, stat, pembagi dan ruang angkasa, blok bangunan dari pesan apapun.

Panggil ke aksi

Inti

Tombol dengan aksi nyata: buka tautan, mulai obrolan, buat tiket, salin kupon, atau lompat ke halaman.

& Penangkapan Darurat

Premium

Penghitung mundur, formulir (email / telepon / teks), kupon mengungkapkan dan embed video.

Umpan balik & tergagas

Premium

Polos-to-win roda, kartu goresan, peringkat NPS / star dan banyak langkah corong.

Tata Letak & efek

Premium

Kolom, batang kemajuan, berbagi sosial, stiker bukti sosial, ya / tidak ada dua langkah, kuis, dan efek 3D, kemiringan, cahaya, paralel, glassmorphism.

Token kepribadian

Ketik semua ini dalam headdings, paragraf, tombol, lencana, statistik, daftar atau kutipan. Mereka digantikan dengan rincian langsung pengunjung saat acara promosi (selalu dibersihkan untuk keselamatan):

Token tersedia
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

Lokasi & Negara

Hanya tampilkan di (atau sembunyikan) negara-negara yang dipilih, kota-kota, atau zona waktu melalui GeoIP. Bagus untuk penawaran khusus pada resimen atau redirect geo.

Halaman & URLs

Batasi ke halaman tertentu menggunakan sama dengan / starts-with / conds / regex, dan exclude pages juga.

Perangkat

Desktop, tablet atau ponsel, misalnya sebuah bar ramping pada mobile, sebuah modal pada desktop.

Tipe pengunjung

Baru, kembali, dikenal (dalam CRM) atau anonim; segmen CRM, tahap lifecycle, skor memimpin atau bahasa peramban.

Sumber lalu lintas

Demi UCM (utm_source, utm_campaign) atau situs referensi, misalnya hanya pengunjung dari iklan tertentu.

Jadwal & frekuensi

Tanggal awal / akhir, jendela waktu -of-day, dan seberapa sering orang dapat melihatnya (per sesi, per hari, setelah mereka menutup / klik / konversi).

Terpisah lalu lintas A / B

Tampilkan ke persentase pengunjung dan jalankan varians head-to-head; orang yang sama selalu melihat varian yang sama.

Audiens (log-in)

Dengan konektor yang diaktifkan, target oleh negara akun hidup, misalnya pelanggan dengan faktur tidak dibayar, atau pelanggan aktif.

Pemicu

Pilih bagaimana promosi muncul: Segera, setelah penundaan, pada kedalaman gulungan, pada exit- tujuan, ketika idle, pada klik elemen, setelah sejumlah halaman dilihat, pada form-meninggalkan, atau dari percakapan / tiket aktivitas. Pengembang dapat memecat satu dari kode mereka sendiri dengan window.OpsIQPromo.fire('event').

Target log-dalam pelanggan (konektor)

Inilah yang membuat OpsIQ Promosi spesial: hubungkan platform seperti WHMCS (atau koneksi apapun yang mendukung penonton) dan studio dapat menargetkan pengunjung dengan keadaan akun hidup mereka.

1
Aktifkan konektor pendengar

Di bawah Konektor, memungkinkan salah satu yang mengekspos fakta-fakta penonton (WHMCS tidak keluar dari kotak). Pelanggan dikenali aman ketika login ke platform itu, OpsIQ tidak pernah mempercayai sebuah typed- dalam email.

2
Tambahkan aturan pendengar

Dalam kampanye Targeting > Penonton, membutuhkan log-in dan menambahkan aturan seperti faktur yang belum dibayar > = 1, langganan past-due, atau kredit akun > 0.

3
Personalise dengan data mereka

Gunakan token seperti {first_name} atau {balance_due} Pengingat "Anda memiliki faktur yang terlambat" menulis sendiri.

Pemanaman penonton adalah kegagalan: jika konektor tidak dapat mengkonfirmasi fakta (atau pengunjung belum login), promosi tidak menunjukkan, sehingga tawaran biling- yang ditargetkan tidak pernah mencapai orang yang salah. membangun konektormu sendiri? Lihat "Promosi audiens target" dibawah ini.

Perdagangan Terhubung (kekuatan super studio)

Kartu produksi dari tokomu

Data langsung

Sebuah blok produk menarik butir-butir nyata (nama, harga, harga jual, gambar, link) langsung dari WHMCS, WooCommerce, Shopify atau Anda OpsIQ Billing. Centang "Keep fresh" dan kartu memperbarui harganya dari platform setiap jam ketika diterbitkan.

Kupon penyimpanan-diatur

Kupon

Sebuah blok kupon dapat membuat kode diskon nyata di toko Anda saat Anda mempublikasikan, sehingga kode pengunjung mengungkapkan selalu bekerja di kasir.

Order- pendapatan kebenaran

Atribut

Perintah nyata dari platform Anda cocok kembali ke kampanye per jam (dengan kode kupon digunakan atau dengan email timbal) sehingga pendapatan yang Anda lihat adalah dari penjualan sebenarnya, bukan perkiraan.

Bukti sosial yang nyata

Kepercayaan

Tiker sosial-bukti dapat memimpin dengan perintah asli baru-baru ini ("Ada memerintahkan Starter Plan 2h lalu "), nama depan dan item saja, tidak pernah email atau jumlah.

Percobaan & perjalanan

Varian A / B & auto- pemenang

Bagi lalu lintas di seluruh varian desain; biarkan studio mempromosikan pemenang statistik secara otomatis, atau tangan lalu litas ke bandit optimizer yang memindahkan pengunjung menuju apa yang mengubah sebagai bukti datang.

Holdout mengangkat

Cadangan sepotong pengunjung yang tidak melihat apa-apa, sehingga Anda dapat membuktikan kampanye itu sendiri menyebabkan lift.

Variasi segment

Isi yang berbeda setiap penonton pada kampanye SAME (pengunjung mobile, gerobak besar, pelanggan kembali), tiap segmen mendapat versinya sendiri.

Trigger experiment

Varians juga dapat menguji KETIKA untuk muncul: langsung vs tertunda vs exit- intent, diukur kepala ke kepala.

Jurnals (chaining)

Target dengan apa yang seseorang lakukan dengan kampanye lain ("melihat kampanye A tapi tidak mengkonversi") untuk membangun urutan promosi multi- langkah.

Para Guru

Seorang pengunjung kecil bisa membuka kembali pil setelah menutup kampanye, sehingga pop- up tertutup tidak pernah pergi untuk selamanya.

Tahu apa yang terjadi

Klik peta panas

Desainer

Dalam desainer, menjungkitkan peta panas untuk melukis pengunjung nyata klik lebih dari setiap blok desain Anda.

Corong langkah

Kanal

Kampanye langkah ganda menunjukkan dimana orang-orang drop off, layar demi layar.

Bandingkan kampanye

Studio

Diatur ke empat kampanye berdampingan (kesan, klik, konversi), nilai terbaik disorot.

Cerita mingguan & digest

AI

Setiap Senin tanah digest dalam notifications Anda;📖Tombol weekly story menulis ringkasan bahasa yang salah dengan langkah berikutnya kapanpun Anda mau.

Bekerja dengan nyaman

Kopilot AI & ide

Ngobrol dengan kopilot desain untuk menyunting kanvas ("buat judul penting, tambahkan hitungan mundur"), dapatkan ide kampanye dari data lalu lintas Anda sendiri, terjemahkan kampanye per negara, atau otomatis perbaiki skor desain rendah.

Impor Kit Brand

Satu perintah membaca situs web Anda dan mengusulkan warna merek asli Anda dan fonta; menyimpan dan setiap picker mengarah dengan mereka.

Kanal layar ganda

Langkah blok mendapat penyuntingan layar per- benar: tab untuk setiap layar, menambahkan atau mengurutkan ulang layar, dan pratinjau mengikuti sepanjang.

Nama versi & kehadiran

Nama versi penting ("Kandidat Peluncuran"), kembalikan salah satu dari mereka, dan lihat peringatan ketika rekan setim mengedit kampanye yang sama.

strip perangkat & penggaris

Lihat desktop, tablet, dan sisi mobile berdampingan dalam satu tampilan; pilih penggaris pixel untuk penempatan yang tepat.

Halaman & kanal yang diselenggarakan

Setiap kampanye juga dapat menjadi halaman standalone yang diselenggarakan untuk bios dan kode QR, sebuah urutan tetesan email untuk lead ditangkap, atau satu-klik web- push draft.

Keselamatan Enterprise

Publikasikan jendela beku (perubahan-periode pembekuan), sebuah pause darurat - semua switch, persetujuan, jejak audit dan versi rollback.

Apa aku perlu menambahkan kode ke situsku?+

No Promosi yang dikirimkan oleh OpsIQ yang sama dengan widget yang telah Anda instal. Desain, terbitkan, selesai.

Akankah pengunjung melihat yang sama muncul berulang-ulang?+

No. Set tutup frekuensi (per sesi / setiap hari, atau stop setelah seseorang menutup, klik atau konversi). Default sensible diterapkan.

Siapa yang bisa menerbitkan?+

Penerbitan, berhenti, arsip dan menggulung kembali terbatas untuk pemilik area kerja dan administrator penuh. Setiap anggota tim dapat membuat dan merancang rancangan.

Pertumbuhan & SEO

Desain Promosi

Proposisi Designer adalah seorang editor blok responsif untuk bangunan, meninjau, versi dan menerbitkan pengalaman kampanye.

Layar produk
Desain PromosiDesainer menggabungkan kanvas, pratilik perangkat, blok, variabel personalisasi, komentar dan sejarah versi.Desain Promosiarea kerjaVIEWPORTDesktopVERSIv12STATUSDrafHIDUP WORKSPACE VIEWBlok pahlawanHeadline, media dan CTASuntingBlok tawaranDiskon dan tenggat waktuSuntingPersonalisasiVariabel kontak dan kampanyeSiapPeriksa peluncuranKomentar dan validasiUlasan1BUILD BLOCKSSunting tata letak hidup2PREVIEWDesktop, tablet, ponsel3PUBLISHDilepaskan secara berversinya
Desainer menggabungkan kanvas, pratilik perangkat, blok, variabel personalisasi, komentar dan sejarah versi.

Gunakan blok untuk menyusun pengalaman, pratinjau setiap viewport yang didukung dan masukkan variabel personalisalisasi yang disetujui. Ulas komentar dan persetujuan media AI- sebelum peluncuran. Menyimpan membuat versi sehingga desain sebelumnya dapat diperiksa atau dipulihkan.

Pertumbuhan & SEO

Templat Promosi

Templat menyediakan galeri awal yang dapat dicari dan dikategorikan untuk kampanye Promotion Studio.

Layar produk
Templat PromosiFilter template dari tempat kerja premium dan warna area kerja berlaku ketika template menjadi draft.Templat Promosiarea kerjaKATEGORIKonversiRESULTS24BRANDDiapanHIDUP WORKSPACE VIEWTawaran keluarModal dengan urgensi dan CTAPratilikPengunjung baru selamat datangDaftar Banner dan manfaatPratilikPeluncuran produkPahlawan, bukti dan hitung mundurPratilikPermintaan umpan balikPrompt survei kompatePratilik1FILTERKategori dan pencarian2PREVIEWInspeksi desain lengkap3USEBuat draft bermerek
Filter template dari tempat kerja premium dan warna area kerja berlaku ketika template menjadi draft.

Cari atau saringan berdasarkan kategori, isi hasil tambahan, pratinjau pengalaman lengkap, lalu pilih Gunakan templateKampanye baru tetap draft dan dapat diubah dalam Promotion Designer sebelum publikasi.

Pertumbuhan & SEO

Analisis Promosi

Analisa promosi menghubungkan kesan dan klik ke konversi, konteks penonton, aksi konektor dan pembelajaran kampanye.

Layar produk
Analisis PromosiAnalisis promosi menunjukkan kinerja headline, penonton dan pemicu kerusakan, memimpin ekspor dan hasil aksi konektor.Analisis Promosiarea kerjaIMPRESSIONS42.8kCTR6.4%CONVERSIONS814HIDUP WORKSPACE VIEWNegaraInggris 31%PecahHalaman/pricing · 22%PecahPemicuKeluar 44%PecahAksi konektorKupon diciptakan 97% SuksesHasil1EVASTlEImpression untuk konversi2SLICEPage, country, perangkat3LEARNTerapkan wawasan
Analisis promosi menunjukkan kinerja headline, penonton dan pemicu kerusakan, memimpin ekspor dan hasil aksi konektor.

Pembacaan kesan, click-melalui rate dan konversi bersama. Break hasil demi negara, halaman, pemicu dan perangkat; ekspor ditangkap memimpin ketika diperlukan. Aksi konektor keluar menunjukkan apakah promosi dijanjikan mengikuti sebenarnya dijalankan. AI wawasan dan ringkasan belajar harus diperlakukan sebagai hipotesis untuk validasi, bukan bukti otomatis.

Pertumbuhan & SEO

Pengumuman

Pengumuman mempublikasikan pesan di area pemberitahuan widget dengan target opsional, jadwal dan panggilan untuk tindakan.

Layar produk
PengumumanEditor Pengumuman meliputi isi, CTA, penonton, segmen, aturan halaman, tanggal aktif dan gaya visual.Pengumumanarea kerjaAKTIF3AUDIENCESegmenJAMJul22–29HIDUP WORKSPACE VIEWJudulPerawatan yang direncanakanSiapIsiPesan MarkdownSiapCTABaca pembaruanOpsionalAturanHarga halaman pelangganTarget1WRITEJudul dan Markdown2TARGETPenonton, segmen, halaman3JAMJendela aktif
Editor Pengumuman meliputi isi, CTA, penonton, segmen, aturan halaman, tanggal aktif dan gaya visual.

Pilih semua pengunjung, menandatangani pengunjung atau pengunjung baru; mungkin mempersempit penonton dengan segmen kontak dan aturan halaman. Atur aktiv-dari / active-ke tanggal dan bendera aktif. Premium style preset dan warna mengubah presentasi tetapi tidak mengganti konten yang jelas.

Pertumbuhan & SEO

Push kampanye

Mendorong kampanye mengirim pemberitahuan peramban kepada pengunjung berlangganan setelah mereka meninggalkan situs.

Layar produk
Push kampanyeKomposer push menunjukkan jangkauan, isi, media, aksi, aturan target dan keadaan jadwal.Push kampanyearea kerjaSUBSCRIBERS8,214DIPERIKSA31.6kCLICK RATE5.8%HIDUP WORKSPACE VIEWJudulGerobakmu sedang menunggu.SiapTubuhKembali hari ini untuk pengiriman gratisSiapCTABuka gerobakSiapJadwalKirim sekarang atau dijadwalkanDraf1PREPARE PUSHJudul, tubuh, ikon2TARGETPenonton, segmen, halaman3SENDSekarang, jadwal atau draft
Komposer push menunjukkan jangkauan, isi, media, aksi, aturan target dan keadaan jadwal.

Atur tombol Web Push pertama di bawah pengaturan Web Push. Sebuah kampanye dapat memasukkan judul, tubuh, ikon, gambar pahlawan, lencana, CTA dan sampai dengan dua tombol aksi; pemberitahuan tetap gigih sampai wawancara pengunjung.

Target oleh penonton, segmen kontak opsional dan aturan halaman. Simpan draft, jadwal atau kirim segera. Gunakan langganan dan klik metrik untuk menilai jangkauan. HTTPS dan layanan pekerja yang diselenggarakan dengan benar diperlukan pada situs ketiga partai; lihat Push Web pada situs-pihak ketiga.

Pertumbuhan & SEO

Pesan proaktif

Pesan Proaktif menjangkau secara otomatis saat perilaku pengunjung cocok dengan aturan, sebelum mereka bertanya. Anda membangun masing-masing sebagai aturan dengan tiga bagian: apa yang harus terjadi, ketika itu harus api, dan seberapa sering. Semuanya disampaikan melalui OpsIQ widget sudah ada di situsmu.

Proaktif
Pesan proaktifSeorang penggubah proaktive- rule dalam tiga bagian: pilih sebuah aksi (obrolan, banner, tour, push, email), tambahkan kondisi, dan atur pendinginan frekuensi.Pesan Proaktifarea kerja1 · AksiPesan percakapanBannerTourTolakSurel2 · Kondisipage = /pricingwaktu di halaman > 20skembali3 FrekuensiSekali per sesiStatus1AKSINgobrol, spanduk, email, dorong...2CONDITIONSHalaman, waktu, skor, kembali3FREKWENSICooldown per pengunjung
Setiap aturan proaktif adalah tiga pilihan: apa yang terjadi (obrolan, banner, tur, push, email, webhook), ketika (kondisi), dan seberapa sering (cooldown).

Tiga bagian dari aturan

1
Apa yang harus terjadi (aksi)

Tampilkan gelembung obrolan atau satu halaman, mulai Tour Guided, kirim push web atau email, masukkan ke departemen, atau jalankan webhook. Tokens seperti {{visitor_name}} dan {{page_title}} menjadi nilai-nilai nyata.

2
Ketika itu harus api (kondisi)

sempit yang memicunya: halaman /URL, waktu di halaman, kedalaman gulungan, skor timbal, kembali vs baru, menganggur. tanpa syarat, aturan api untuk setiap pengunjung. Tambahkan setidaknya satu ke target. kondisi menggabungkan dengan AND.

3
Seberapa sering (frekuensi)

Atur pendinginan sehingga orang yang sama tidak meresahkan, misalnya sekali per sesi atau sekali per hari. Setiap aturan memiliki status on / off.

⚠️
Area kerja memutar "Jalankan aturan waktu / diam per jam" memungkinkan aksi sisi server (email, push, webhook, assign) menembak pada jadwal untuk kontak yang dikenal yang tidak ada pada halaman, sehingga Anda dapat "email idle hot leads" otomatis. Perlu OpsIQ cron berjalan. Biarkan saja jika Anda hanya ingin hidup di nudges halaman.
Apa itu akan menembak semua orang?+

Hanya jika kau tak menambahkan kondisi, tambahkan setidaknya satu syarat (halaman, skor utama, kembali...) untuk menargetkan pengunjung yang tepat.

Bagaimana hubungan ini dengan aliran dan tur?+

Mereka bekerja sama: sebuah aturan proaktif dapat memulai Tour Guided, dan Chabot Flow dapat dipicu oleh aturan proaktik. mulai dengan satu pemerintahan chat- pesan, kemudian lapisi yang lain.

Pertumbuhan & SEO

Chatbot mengalir

Chatbot Mengalir skrip percakapan di dalam widget obrolan Anda (salam, jawaban kunci, jalur yang dipandu) tanpa kode. Aliran adalah seperangkat langkah-langkah terhubung (node): Anda mengajukan pertanyaan, pengunjung memilih pilihan, dan arus mengirimkan mereka ke cabang yang cocok. Hanya mengalir Aktif yang berjalan di situs Anda.

Bagaimana cara kerjanya
Chatbot mengalirKanvas aliran: node salam percabangan ke dalam tiga tombol pilihan, masing-masing mengarah ke langkah selanjutnya, mencari urutan, atau menyerahkan perintah ke manusia.SalamHai, ada yang bisa kubantu?Lacak pesanankuPertanyaan tagihanBicara pada manusia.Cari perintah→Agen manusia.Trigger: Salam · Kata Kunci · Manual · Rincian-setelah · Akhir-chat
Chatbot mengalir

Flow vs the AI kapan untuk menggunakan

Gunakan aliran

Ketika jalan dapat diprediksi dan Anda ingin identik setiap kali: langkah pemesanan, penyihir kembali, "rencana apa?" pemilih, mengumpulkan email sebelum handoff. Flows tidak pernah berimprovisasi.

Gunakan AI

Ketika pertanyaan-pertanyaan yang terbuka, "apakah ini bekerja dengan setup saya?". Chat Pelanggan AI jawaban dari pengetahuan terlatih Anda. aliran dapat menyerahkan ke AI (atau manusia) pada setiap langkah.

Pemicu

Salam

Berjalan sebagai pesan pembuka ketika pengunjung pertama kali membuka obrolan.

Kata Kunci

Berjalan ketika pengunjung jenis kata yang terdaftar (misalnya pengembalian, harga, batal).

Setelah rincian / Setelah penundaan

Dimulai setelah kontak rincian dibagi, atau set waktu ke percakapan.

Pada akhir percakapan / Proaktif

Berjalan sebagai obrolan membungkus (misalnya rating), atau dimulai oleh aturan Pesan Proaktif.

Bangun satu dalam empat langkah

1
Buat aliran

Klik New Flow, sebutkan, pilih tipe pemicu (dan kata kunci jika Kata Kunci), simpan. Ini mulai dimatikan.

2
Buka kanvas

Klik Sunting Kanvas. Pembangun visual di mana Anda menambahkan langkah (pesan, pertanyaan dengan tombol, cabang) dan menghubungkannya.

3
Tambah branch dan hand- off

Untuk setiap pilihan, menggambar cabang ke langkah berikutnya. akhiri jalan dengan menyelesaikan, menyerahkan ke AI, atau mentransfer ke manusia.

4
Aktifkan

Klik Aktifkan. Aliran akan langsung hidup di widget Anda. Matikan kapan saja tanpa kehilangan desain.

Apakah arus mengganti AI?+

Tidak, mereka berlari berdampingan, menggunakan aliran untuk jalur yang dapat diprediksi dan AI untuk pertanyaan-pertanyaan yang terbuka; sebuah arus selalu bisa diserahkan ke keduanya.

Pertumbuhan & SEO

Tur-tugas yang dipandu

Guided Tours adalah langkah-langkah melewati yang menunjuk bagian halaman Anda dengan gelembung berbicara dan sorotan, membimbing pengunjung melalui onboarding atau fitur baru. mereka sepenuhnya bertema dan dibangun dalam sebuah desainer visual dengan pratinjau hidup. perjalanan wisata hanya ketika ditandai Aktif.

Bagaimana cara kerjanya
Tur-tugas yang dipanduSebuah halaman redup dengan cincin sorotan di sekitar tombol Add-deal dan gelembung pidato bertema membaca Langkah 1 dari 4 dengan tombol berikutnya.Tambah kesepakatanSTEP1OF4Buat kesepakatan pertamamuKlik di sini untuk menambahkan kesepakatan ke pipeline Anda.→ Berikutnya
Tur-tugas yang dipandu

Bagaimana tur dibangun

Langkah

Setiap langkah menargetkan elemen dan menampilkan gelembung dengan teks Anda. Tambahkan sebanyak mungkin berhenti sebagai kebutuhan walkthrough dan pesan mereka.

Presets & tema

Mulai dari preset atau desain gelembung Anda sendiri (warna, gradien, sorotan) dengan pratinjau hidup di sebelah kanan.

Pemicu

Secara opsional menghubungkan Aturan Proaktif sehingga auto- tur dimulai ketika aturan itu kebakaran (misalnya kunjungan pertama pengunjung yang kembali).

Jungkit aktif

Sebuah tur yang memenuhi syarat untuk menjalankan hanya sementara Aktif sedang berdetik.

Bangun satu dalam empat langkah

1
Tur baru

Klik Tour Guided Baru, sebutkan itu, dan secara opsional menghubungkan Aturan Proaktif sehingga dimulai secara otomatis.

2
Tambah langkah

Tambahkan setiap stop: pilih elemen yang dipointnya dan tulis teks bubble. Mengurutkan kembali sampai path mengalir.

3
Mendesain

Pilih preset atau gaya gelembung sendiri Preview live menunjukkan persis apa pengunjung melihat.

4
AktifkanRegister Function

Tick Active dan save. Tur kini dapat berjalan, dengan pemicunya sendiri, atau dimulai dengan aturan Pesan Proaktif.

Bagaimana tur dimulai?+

Dengan pemicu mereka sendiri, atau melalui aturan Proaktif Pesan "Tur Panduan" aksi, sehingga Anda memutuskan pengunjung mana yang melihat tur dan kapan.

Pertumbuhan & SEO

Tujuan konversi

Conversion Goals mengubah aktivitas yang Anda pedulikan (sebuah acara inbound webhook, pesan obrolan, resolusi tiket) menjadi konversi direkam dengan atmas. ketika aktivitas kebakaran, OpsIQ log konversi terhadap kontak dan menghubungkan kembali ke kampanye, segmen dan sumber yang mengarah ke sana.

Bagaimana cara kerjanya
Tujuan konversiA goal flow: a payment.successful webhook event become a record "bearing" conversion worth $49, dikaitkan dengan sumber dan kampanyenya, dengan cepat-start preset chip di atas.Cepat mulaiStripe pembelianDipesan DemoTanda tangan Newsletterpayment.succeededwebhook masukKonversi"Membeli"$49Atributsumber kampanye
Tujuan konversi

Tentukan tujuan dalam tiga langkah

1
Pilih aktivitas pemicu

Klik tujuan konversi Baru. Pilih tipe aktivitas yang dihitung sebagai sebuah konversi, atau gunakan preset Quick-start,Stripepembelian, Demo dipesan, Newsletter signup atau langganan dimulai.

2
Sebutkan dan atur nilainya

Berikan nama konversi (pembelian, demo_booked, mendaftar) dan mungkin nilai tetap dan jendela atrisit.

3
Simpan

Mulai saat itu, setiap kali aktivitas api, OpsIQ mencatat konversi terhadap kontak dengan atclaits untuk sentuhan sebelumnya.

Target sudah tersambung ke webhooks masuk: target manapun yang pemicunya cocok dengan jenis peristiwa masuk akan ditembakkan secara otomatis saat kejadian mendarat. Gunakan halaman Webhooks Masuk untuk menghubungkan Stripe, Calendly atau sistem apapun yang bisa POST. JSON.
Apa yang bisa menjadi konversi?+

Aktivitas rekaman apapun: sebuah inbound acara webhook (payment. success. succeed), penangkapan email obrolan, resolusi tiket, apa pun pada timeline kontak.

Analisis

Papan dasbor gubahan

Dashboard Gubahan memungkinkan Anda membangun pandangan Anda sendiri tentang metrik yang penting, daripada hanya mengandalkan pada Pinggiran Standar. Tambahkan widget yang Anda inginkan, seret dan ubah ukurannya ke dalam tata letak yang Anda suka, simpan, dan bagikan dengan tim Anda.

Papan dasbor gubahan
Papan dasbor gubahanPembangun dashboard dengan tibin widget KPI dan bagan, zona penurunan yang dashboard-, dan tombol Add- widget.Dashboard Gubahanarea kerjaDasbor saya+ Tambah widgetKUnjungan2,481PENDAPAT$8. 2kTRAFIKTarik widget ke siniHalaman Utama/pricing/docs/signup1ADD WIDGETSPilih metrik & grafik2ARRANGESeret & ubah ukuran3SHAREDengan tim Anda
Buat papan tulis Anda sendiri: tambahkan KPI, bagan, dan daftar widget, tarik dan ubah ukuran mereka ke dalam tata letak yang Anda inginkan, lalu bagikan dengan tim.

Bangun satu dalam tiga langkah

1
Tambah widget

Klik Tambah Widget dan pilih metrik atau bagan yang ingin Anda lacak. Ulangi untuk semua yang Anda inginkan di papan.

2
Atur tata letak

Tarik widget untuk mereposisi dan tarik pinggiran mereka untuk mengubah ukuran. KPI di atas, grafik di bawah.

3
Simpan & berbagi

Simpan dashboard dan berbagi dengan tim Anda sehingga semua orang menonton nomor yang sama.

Jauhkan papan terpisah untuk pekerjaan yang terpisah (papan "melirikan sehari-hari" dengan jumlah hidup, dan sebuah "review bulanan" papan dengan grafik tren) sehingga masing-masing tetap fokus.
Pertumbuhan & SEO

Kampanye outreach

Outreach adalah OpsIQ's1:1dan mesin email besar: tulis pesan pribadi atau jalankan sebuah kampanye ke segmen CRM, dengan deteksi jawaban, kirim-waktu kontrol, buka / klik pelacakan, pixel pelacak dan satu-satu - klik unsubwriter. Ini adalah convergated dan CAN-SPAM / CASL compliant.

Outreach
Kampanye outreachLayar Outreach dengan Composer / Campaigns / Templates / Replies tab dan tabel kampanye yang menunjukkan dikirim, terbuka - rate dan mengisi-rate.Outreacharea kerjaKampanyeKomposerTemplatBalasanCAMPILGNDIPERIKSABukaJAWABSurat kabar Juni1,20048%7%Sidang dilanjutkan.34062%14%Win-back82039%5%Balas deteksi otomatis berhenti mengikuti-up klik-buka langganan pada setiap kirim11:1 & BULKKomposisi atau kampanye2TRACKEDBuka, klik, balas.3COMPLIANTBerhenti langganan dibangun di
Mesin Outreach: kirim1:1atau jalankan kampanye ke sebuah segmen, trek terbuka dan menjawab, dan tetap compliant dengan built - dalam unsubscription dan deteksi jawaban.

Empat tab

Komposer

Tulis sebuah personalisasi1:1surel dengan {tokens} dari kontak dan CRM.

Kampanye

Kirim ke segmen CRM, dijadwalkan atau sekarang, dengan topi dan send- time control.

Templat

Templat pesan dapat digunakan ulang untuk jangkauan berulang.

Balasan

Balas catatan deteksi dan auto- berhenti mengikuti ke siapa pun yang menjawab.

Bagaimana kampanye berjalan

1
Pilih penontonnya

Pilih segmen CRM (atau unggah daftar). Tekanan dan persetujuan diterapkan secara otomatis.

2
Tulis

Tulis pesan dengan token personalisasi; pratinjau terhadap kontak nyata.

3
Jadwal & kirim

Kirim sekarang atau pada waktu terbaik. Sebuah pixel pelacakan catatan terbuka; klik dan balasan dikaitkan.

Oureach ditahan dan dijajah, termasuk satu klik unsubscrick pada setiap pengiriman, dan mengikuti CAN-SPAM / CASL. Replies secara otomatis berhenti mengikuti lebih lanjut.
Analisis

Laporan yang dijadwalkan

Dijadwalkan Email Laporan yang dipilih ditata ke penerima yang dipilih pada jadwal (harian, mingguan atau bulanan) sebagai suatu cetak, white- label PDF. Set sekali dan laporan tanah secara otomatis inbox melalui OpsIQ Cron.

Laporan yang dijadwalkan
Laporan yang dijadwalkanLayar laporan yang dijadwalkan: tabel laporan dengan jadwal, penerima dan terakhir dikirim waktu, ditambah tombol Save-rapor.Laporan Dijadwalkanarea kerjaLaporan yang dijadwalkanLaporan + SimpanLaporanJAMPENYERAHANSENT TERAKHIRLalu lintas mingguanMon9:00[email protected]2d yang laluLaporan klien SEOBulanan[email protected]Jun 1Ringkasan penjualanHarian[email protected]todayDikirim sebagai white- label PDF via OpsIQ cron1AUTOMATEDSetiap hari · mingguan · bulanan2WHITE-LABELPDF kepada klien3PENYERAHANDiemail pada jadwal
Atur laporan sekali (set metrik, jangkauan, jadwal, penerima) dan OpsIQ email white- label PDF otomatis pada irama Anda.

Mengatur laporan

1
Pilih apa yang akan dikirim

Pilih set metrik (lalu lintas, SEO, penjualan, dukungan...) dan rentang tanggal.

2
Atur penerimanya & jadwal

Setiap hari, setiap minggu atau bulan, pada saat yang Anda pilih, kepada satu atau lebih penerima email.

3
Simpan

Simpan dan aktifkan. Laporan menghasilkan dan email itu sendiri pada jadwal, tidak ada langkah manual.

💡
Laporan yang dijadwalkan dijalankan melalui Cron dan automatisasi OpsIQ, jika sebuah laporan tidak tiba, konfirmasi cron berjalan (lihat Cron and otomasi).
Privasi

Privasi & kepatuhan

Halaman Privasi & Compliance adalah tempat tunggal untuk menunjukkan audit Anda menangani data pribadi dengan bertanggung jawab: buku besar persetujuan, log akses admin, residensi dan kebijakan penahanan Anda, dan sebuah benar-benar - cetak DPA Hanya administrator yang bisa membukanya.

Privasi & kepatuhan
Privasi & kepatuhanLayar Privasi & Komplain: tab untuk buku besar Consent, log Akses, Residensi dan DPA, dengan meja persetujuan dari hibah dan mencabut melalui saluran.Komplemen & Privasiarea kerjaBuku kas yang berisiLog aksesKediamanDPAKONAKTCHANNELAKSIDAE[email protected]surelDiberikanJun 12[email protected]pushDicabutJun 10[email protected]marketingDiberikanJun 9Bukti yang dapat ditemukan dari setiap persetujuan hibah dan dibatalkan, melalui saluran1LEDGER KONSETBukti setiap hibah2ACCESS LOGYang menyentuh data3DPATemplat yang dapat dicetak
Satu layar audit-ready: buku besar persetujuan yang dapat dicari (hibah / revokes dengan saluran), log akses dari siapa yang menyentuh data, pengaturan residensi / retensi, dan cetak DPA.

Empat tab

Buku kas yang berisi

Sebuah catatan yang dapat dicari dari setiap persetujuan hibah dan recoke, dengan kontak, saluran (email, push, SMS, in- widget), aksi, sumber dan tanggal. Bukti Anda telah setuju (atau ditarik kembali).

Log akses

Siapa di tim Anda yang melihat, diedit, diekspor, terhapus atau mengirim pesan data kontak, dengan admin, kontak, aksi, menyatakan alasan dan IP Persis apa regulator meminta.

Retensi

Menentukan di mana data area kerja ini hidup, mengatur berapa hari baris aktivitas disimpan (0 = selamanya), dan rekam pengontrol datamu dan DPO.

Templat DPA

Sebuah data yang dapat dicetak yang Memproses Addendum yang mengisi pengontrol, alamat, DPO, residensi dan retensi. cetak atau simpan sebagai PDF.

Privasi & Kompliance berpasangan dengan Studio persetujuan Cookie (yang mengumpulkan persetujuan) dan halaman Expor (yang memproduksi data copy untuk DSAR Lihat juga Cron dan otomatisasi untuk pembersihan retensi malam.
Konektor

Hubungkan platform Anda

Link konektor OpsIQ ke platform eksternal: e- toko perdagangan, sistem penagihan, prosesor pembayaran, penyedia email, dan custom APIs Setelah tersambung, AI dapat melihat perintah, data pelanggan, subscriptions, dan lebih, dan mengambil tindakan dengan persetujuan Anda.

Bagaimana cara kerjanya
Pusat koneksiOpsIQ core terhubung ke WHMCS, Shopify, Stripe, WooCommerce, Profil Bisnis SendGrid dan Google, masing-masing menunjukkan status yang terhubung.WHMCSShopifyStripeWooCommerceSendGridGoogle BPOpsIQCORE1PLUG IN25+ pre- built connectors2AI CONTEXTData platform sebenarnya3ACTIONSSelesai dengan persetujuanmu
Konektor

Kapal dengan OpsIQ

Ini adalah saat Anda memasang dan hanya perlu kredensial mereka.

WHMCS

Tagihan

Pendaftaran Internet: klien, layanan, tiket, faktur, domain, server.

Shopify

E- Commerce

E- Commerce: perintah, pelanggan, produk, inventaris, pembayaran, webjacks.

WooCommerce

E- Commerce

WordPress e-commerce: perintah, pelanggan, produk, kupon, pengiriman.

WordPress

CMS

Konten dan pengguna di sebuah situs WordPress.

Kotak

Pembayaran

Pembayaran dan titik penjualan: perintah, pelanggan, katalog.

osCommerce

E- Commerce

Legacy e-commerce: perintah, pelanggan, produk.

Botble Hotel

Jembatan

A Botble Situs hotel CMS melalui tanda tangan. OpsIQ Implementasi referensi untuk sebuah platform tanpa bridge. API.

Zendesk

Dukungan

Helpdesk: tiket, pengguna, organisasi, komentar.

Profil Bisnis Google

Pemasaran

Bisnis lokal: ulasan, posting, Q & A, wawasan. Uses OAuth.

Kalender Google

Produktivitas

Kalendar dan peristiwa, menggunakan OAuth.

Gmail dan IMAP

Surel

Kotak surat: inbound dan outbound mail, address- buku sync.

SendGrid

Surel

Kiriman email: mengirim email dan mengelola template.

Mailgun

Surel

Kirim email melalui Mailgun.

Slack, Telegram, LINE, X DM

Pesan

Pesan saluran untuk inbound dan outbound percakapan.

Kanal Meta

Pesan

Facebook Messenger, Instagram DM dan WhatsApp.

Site Intelligence (GA4, Konsol Pencarian)

Analisis

Analisis dan data pencarian untuk SEO suite.

Website pengayaan dan impor CRM

CRM

Perusahaan memperkaya dan import pelanggan massal.

Tersedia dari pasar

Ini adalah paket yang diterbitkan, bukan bagian dari instalasi. Pasang satu dari Konektor, Marketplace dan itu disalin ke dalam folder konektor hidup, setelah itu ia berperilaku persis seperti yang di atas.

Stripe

Tempat Marketplace

Biaya, pelanggan, faktur, subscriptions, pembayaran, sengketa.

BigCommerce

Tempat Marketplace

E- Commerce: perintah, pelanggan, produk, kategori, merek.

Magento 2

Tempat Marketplace

E- Commerce: perintah, pelanggan, produk, kategori, inventaris.

PrestaShop

Tempat Marketplace

E- Commerce: perintah, pelanggan, produk, aturan kereta dorong, operator.

OpenCart

Tempat Marketplace

E- Commerce: perintah, pelanggan, produk, kategori.

Amazon Sets, Postmark, Resend

Tempat Marketplace

Pengiriman email transaksional.

Jira, Linear

Tempat Marketplace

Edisi dan pelacakan proyek.

Zum, Microsoft Calendar, Outlook Mail

Tempat Marketplace

Pertemuan, kalender dan surat.

DocuSign, Apollo, SerpApi,. Google Analytics

Tempat Marketplace

Tanda tangan, prospeksi, pencarian dan data analisis.

Webflow, Wix, Squarespace

Tempat Marketplace

Platform Website.

💡
Daftar konektor yang bergerak sebagai paket telah diterbitkan. Daftar otoritatif untuk instalasi ANDA adalah halaman Konektor: apa yang tercantum di sana adalah apa yang ditemukan oleh waktu-jalan, dan tab Marketplace menunjukkan apa yang dapat Anda tambahkan.

Memasang konektor

1
Pergi ke Konektor

Navigasi ke Konektor di batang admin.

2
Temukan konektor

Ramban daftar atau pencarian. Konektor dikelompokkan berdasarkan kategori.

3
Aktifkan

Klik konektor dan toggle Aktifkan.

4
Masukkan kredensial

Isi dalam ruas yang diperlukan: API kunci, URL, token, dsb. Setiap konektor memiliki persyaratan tertentu didokumentasikan dalam panel setting nya.

5
Uji sambungan

Klik "Uji Koneksi". Hasil hijau berarti konektor dapat mencapai platform eksternal. Hasil merah menunjukkan kesalahan.

6
Atur fitur

Pilih fitur mana yang akan aktif: sync, webhook sync, AI action. Tidak semua konektor mendukung semua fitur.

Apa yang konektor memberi Anda

Konteks AI

AI dapat melihat data pelanggan, perintah, langganan, dan lebih melalui konektor.

Konteks AI (penulis konektor)

Konektor Pengelola Konteks Anda memberi umpan - AI sebuah read -hanya ringkasan akun dari pemilik tiket. Selesaikan pelanggan dengan customer_id ketika diketahui; jika tidak, pada tiket otomatis-membalas, di mana bendera ctx customer_trust_email benar, lihat akun yang muncul customer_email (pengirim tiket yang diverifikasi). Platforms remote mengekspos sebuah /context/customer-by-email titik akhir dan konektor menyebutnya. Ini adalah apa yang membuat AI mengutip keseimbangan / faktur nyata daripada mengatakan "silakan log masuk". Menghormati data operator-class toggles (customer_sections, customer_allow_credit) dan tetap baca secara ketat -hanya, tidak pernah memancarkan rahasia.

Direktori pelanggan (penulis konektor)

Konektor Anda Penemu tiga pencarian tiket universal: lookupCustomerById() (kartu pelanggan) lookupCustomerServices() (tabel produk / layanan), dan listCustomers($query,$limit): "Pencari pelanggan atau ketik email" picker pada formulir Compose- New- Tiket asli. Mengembalikan baris dari {id, external_id, name, email, company, phone, platform, platform_label}. Aturan remote: jika pelanggan Anda tinggal di database lain atau layanan, menjemput mereka atas platform Anda API di dalam metode ini, tidak pernah membaca tabel sistem lain secara langsung (dalam OpsIQ DB mereka adalah placeholder kosong, itulah sebabnya lokal membaca mengembalikan picker kosong). Gate jalur remote pada konfigurasi Anda API URL; tetap membaca lokal hanya sebagai same- DB fallback.

Tiket Email-piped, deteksi & routing (penulis konektor)

Ketika inbound email menjadi tiket asli, OpsIQ mendeteksi pengirim dengan memanggil lookupCustomerById(0, ['email'=>$sender]) di setiap konektor; pertandingan pertama "memiliki" pelanggan dan yang platform siput dicap pada ticket.created event as _pipe_owner_platform (kosong = tamu). Jadi WHMCS-pelanggan email membuka tiket masuk WHMCS (WHMCS mati-matian, dicermin sebagai salah satu), sedangkan pengirim tidak diketahui tetap tamu asli. Jika konektor Anda cermin tiket asli ke platform sendiri, Anda ticket.created penangan harus gerbang ini: if (array_key_exists('_pipe_owner_platform',$payload) && $payload['_pipe_owner_platform'] !== '<your-slug>') return;Kunci tidak ada pada tiket non-piped (chatting / manual / AI), sehingga mereka cermin seperti sebelumnya. Kontrol perdepartemen hidup di bawah Team & Department→Buka tiket melalui email (Hanya untuk Siapapun / Pelanggan).

Aksi

AI dapat melakukan aksi melalui konektor: membuat tiket, perintah update, membatalkan subscriptions, semua dengan persetujuan Anda melalui Lapisan Kepercayaan.

Pengetahuan

Konektor berkontribusi dalam Platform-spesifik artikel pengetahuan ke AI. Shopify Konektor menambahkan e- commerce traffoooting; WHMCS Konektor menambahkan host pengetahuan.

Impor dasar (penulis konektor)

Jika platform Anda host dasar pengetahuan, menyatakan kb_capabilities blok masuk settings.json (tipe kb_source) dan konektor Anda muncul di Editor Pusat Bantuan Impor KB → Impor dari sebuah aplikasi terhubung dropdown ketika diaktifkan dan dikonfigurasi di ruang kerja. Ini deklarasi, tidak ada metode untuk mengimplementasikan: nama built-in adapter (zendesk untuk exact- tree Help Center API, atau crawl untuk situs KB apapun) dan base_template seperti https://{subdomain}.zendesk.com, yang OpsIQ mengisi dari konfigurasi konektor yang tersimpan. Kredensial tidak pernah meninggalkan server; peramban hanya mengirim siput connector. Untuk mendukung platform baru, tambahkan opsiq_kb_<platform>_manifest() adaptor dan referensi dengan nama. Referensi penuh: connectors/PLATFORM_CONNECTORS.md §5.

Webhook

Beberapa konektor mendaftarkan webdocks dengan platform eksternal untuk pemberitahuan acara real-time (perintah baru, pemutakhiran tiket, dsb.).

Pelacakan penjualan

Konektor E- Commerce memberikan data pendapatan ke dasbor penjualan untuk atribute dan analitik.

💡
Konektor adalah ruang kerja - scoped. Setiap area kerja dapat memiliki konektor berbeda yang diaktifkan dengan kredensial yang berbeda. A WHMCS area kerja menggunakan WHMCS konektor; sebuah Shopify area kerja menggunakan Shopify Konektor.
Dapatkah saya menggunakan beberapa konektor sekaligus?+

Ya, kau bisa. Shopify untuk perintah dan Stripe untuk pembayaran di ruang kerja yang sama. AI menggabungkan data dari semua konektor yang diaktifkan.

Bagaimana jika platform saya tidak terdaftar?+

Gunakan Pembangun Konektor untuk membuat konektor gubahan bagi platform apapun dengan API. Atau periksa Marketplace untuk komuniti yang dibangun oleh PHARERZZXO.

Apakah konektor bekerja dengan sendiri-Host OpsIQ?+

Konektor bekerja sama di awan dan sendiri-edisi yang diselenggarakan.

Konektor

Kontrak penjualan dan penagihan

Setiap konektor perdagangan menggunakan platform-netral kontrak peristiwa yang sama. WHMCS adalah implementasi referensi, tetapi SaaS Bridge, toko, penyedia pembayaran, konektor pasar dan paket-paket Konektor Builder harus mematuhi aturan yang sama.

Apa yang setiap konektor perdagangan harus mempublikasikan

Satu buku besar yang berwibawa

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 dapat distabrikan

platform adalah instal connector, seperti whmcs, shopify atau opsiq_saas. traffic_source berisi akuisisi yang diverifikasi ketika diberikan; jika tidak gunakan siput yang sama sebagai fallback. Penyanderaan penyimpanan, bukan label tampilan. OpsIQ memecahkan nama konektor ramah di UI.

Idempotensi

event_id Harus deterministik order_ref, invoice_ref atau subscription_ref jadi webhook mengulang dan backfill update event yang sama daripada membuat duplikat penjualan. service_ref Mengidentifikasi produk atau layanan yang terpengaruh saat ada.

Penanda waktu sumber

occurred_at adalah pembayaran atau waktu ekonomi yang dilaporkan oleh platform sumber. Jangan pernah mengganti tanggal pembayaran sejarah dengan waktu impor.

Uang dan FX

Kirim jumlah sumber dan tiga huruf yang valid mata uang ISO. Jika konfigurasi koneksi memungkinkan OpsIQ FX konversi, melaporkan konversi ke ruang kerja pelaporan mata uang; jika tidak laporan melestarikan toko atau kode platform penagihan. Kode konektor tidak harus hardcode sebuah pertukaran mata uang atau laju pertukaran.

Terbukti - berbasis lifecycle

Gunakan yang baru, pembaharuan, peningkatan, pengembalian, kredit atau tidak diketahui. Klasifikasi dari alasan faktur, berlangganan atau hubungan layanan, tipe line-, atau kolom sumber otoritatif lain. Pembelian ulang oleh pelanggan yang sama tidak secara otomatis pembaruan.

Batas penjualan

Hanya positif yang dibayar baru, pembaruan, peningkatan, atau sah tidak diketahui penerimaan perdagangan milik dalam Sales & Converction. Pengembalian dana dilaporkan oleh pengembalian dan jaringan analisis pendapatan.

CRM tetap terpisah

Transaksi CRM mewakili aktivitas pipeline dan deal. Mereka tidak menjual platform-platform kecuali sebuah billing atau platform toko yang terhubung memancarkan perintah yang disadari atau faktur melalui kontrak ini.

Setiap sinyal pembayaran membuka baris

Jangan tergantung pada satu nama acara. Ketika platform mengirimkan beberapa konfirmasi pembayaran satu (tagihan dibayar, permintaan dibayar, transaksi ditambahkan, pembayaran selesai) salah satu dari mereka dapat membuka baris buku setelah platform menegaskan penjualan dibayarkan; sidik jari penjualan runtuh saudara dalam satu baris.

Rekonsiliasi terjadwal (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.

Proyeksi turunan

opsiq_conversions rangkuman dashboard adalah proyeksi kompatibilitas dibangun kembali dari buku pembukuan. Konektor tidak boleh memperlakukan sebuah proyeksi sebagai sumber keuangan kebenaran. Revisi kontrak dapat mengevaluasi ulang baris-baris turunan tanpa menghapus sejarah penagihan yang mendasari.

Batas platform jauh

Konektor remote membaca platform melalui terkonfigurasi API. Ini tidak boleh bergantung pada tabel basis data server same- server. Lokasi domain yang telah dikonfirmasi secara tepat yang disediakan oleh ConnectorRegistry dan harus diterapkan ke setiap buku dan pengcatatan ulang. Ruang kerja atau lingkup grup hanya baca-waktu; ini tidak pernah broeren kepemilikan peristiwa yang tersimpan.

Contoh acara-kejadian kanonikal

Peristiwa perdagangan Normalized
{
  "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 konektor Builder

Ketika penjualan dan penagihan diaktifkan dalam Pembangun Konektor, jumlah peta, mata uang, status sumber dan tanggal sumber, ditambah setidaknya satu urutan, faktur atau referensi subscription. Peta lifecycle_type ketika API mengekspos otoritatif lifecycle bukti. yang dihasilkan SalesIngest melewati setiap baris melalui sama CommerceEventRegistry normal digunakan oleh built-in dan konektor pasar.

⚠️
Kredit dan Dana Tambahkan sengaja dipertahankan untuk riwayat penagihan, konteks keseimbangan pelanggan dan analisis buku besar. Mencegahnya dari Sales tidak menghapusnya, hanya mencegah mereka dari inflasi kinerja perdagangan.

lifecycle_type memutuskan apa yang menjadi CRM sepakat

lifecycle_type bukan sebuah label analytics. OpsIQ membacanya untuk memutuskan apakah penjualan memasuki pipa CRM, jadi setiap konektor penjualan membuat keputusan pipeline apakah itu bermaksud atau tidak.

baru

Buka penutupan - won kesepakatan (bisnis baru).

Perbarui, upgrade

Rekaman sebagai pendapatan berulang. Tidak ada kesepakatan bisnis baru - pembaharuan mengubah pada kurva probabilitas yang berbeda dan mencampurnya merusak kedua prakiraan.

Kembalikan, kredit

Uang kembali ke pelanggan bukan kemenangan.

diabaikan / tidak diketahui

Penjualan dicatat tapi tidak pernah mencapai pipa.

Satu penjualan, satu baris buku besar: identitas adalah SALE, bukan acara

Jangan cocokkan event_id dan masukkan dirimu. event_id is platform:eventName:externalId, yang menjawab "apakah kita sudah memproses pengiriman ini" dan tidak bisa menjawab "telah kita sudah merekam penjualan ini". Sebuah platform yang mengumumkan satu pembayaran dua kali - seperti invoice.paid dan lagi sebagai payment.completed - Mencolok dua ID dan tanah uang yang sama dua kali, dengan apa-apa untuk bertabrakan dan tidak ada untuk memperingatkan.

💡
Ditemukan pada instalasi referensi: enam faktur dengan tiga baris buku besar masing-masing, dari tiga jalur kode menggunakan tiga berbeda event_id Rencana, mereka semua membawa 0.00 sehingga tidak ada total yang salah, dan proses apapun mengembalikan jumlah nyata akan menghitung satu pembayaran tiga kali.

Panggil penulis bersama sebagai gantinya. Core menghitung identitas bisnis penjualan (sale_fingerprint), cocok dengan baris yang ada di atasnya, mempertahankan asli event_id pada pemutakhiran, dan filter ke kolom nyata:

Satu-satunya cara yang didukung untuk menulis buku besar penjualan
\OpsIQ\Commerce\CommerceEventContract::upsertSaleRow('opsiq_sales_events', $row);
Penjualan yang sama, banyak peristiwa

faktur. Dibayar, gaji. Selesai dan sale. complete untuk satu faktice share satu sidik jari dan update satu baris.

Refunt tetap terpisah

Uang keluar adalah fakta yang berbeda dari uang masuk pengembalian faktur terus identitas sendiri, sehingga tidak pernah dapat menimpa pembayaran itu membalikkan.

Tidak ada referensi, tidak ada sidik jari

Baris yang tidak membawa perintah, faktur, langganan atau layanan referensi tidak mendapat sidik jari sama sekali, sehingga dua baris tidak berhubungan tidak pernah bertabrakan hanya karena keduanya hilang id.

Referensi mendahului

invoice_ref, maka order_ref, maka subscription_ref, maka service_ref — Yang terkuat pertama, jadi satu penjualan menyimpan identitas yang stabil.

Buku besar itu ditambahkan - hanya: tidak pernah menulis ulang penjualan

Sebuah pengembalian dana, pembatalan atau koreksi adalah entri baru yang tertanggalJangan pernah bermutasi baris itu benar menulis ulang pembayaran ke pengembalian uang terlihat rapi dan istirahat tiga hal sekaligus:

Itu menghancurkan pendapatan kotor

Tingkat penjualan dan pengembalian dana yang menjijikkan berhenti dipisahkan - dan tingkat pengembalian adalah metrik pembalikan ada untuk menginformasikan.

Buku pembalikan dalam periode yang salah

Sebuah pengembalian uang Maret dari penjualan Januari harus mengurangi Maret.

Ini merusak jejak audit

Sebuah catatan buku besar yang terjadi pada suatu titik waktu.

Jadi seorang konektor melaporkan pembalikan daripada menerapkannya: kembali refunded_at dan refund_amount Bersama dengan tulang belakang penjualan sendiri, dan biarkan penelepon menulis pengembalian sebagai deretan sendiri tanggal ketika pengembalian kembali. keduanya tidak pernah dapat bertabrakan, karena sidik jari penjualan memisahkan kembali dari penjualan.

💡
Prinsip yang sama berlaku untuk jumlah. Jangan "perbaikan" jumlah yang tersimpan untuk nilai platform saat ini: faktur diselesaikan dari rekening kredit secara sah direkam0pada waktu pembayaran, dan uang sudah dicatat ketika pelanggan naik. Mengembalikan nilai wajah menghitung itu dua kali.

Kontrak klasifikasi

OpsIQ memutuskan lifecycle sekali, in \OpsIQ\Commerce\SaleLifecycleClassifierKonektor menyatakan hanya yang Platformnya sendiri kata-kata berarti apa, dengan mengimplementasikan \OpsIQ\Connectors\SalesLifecycleConnectorInterface::salesLifecycleVocabulary(), dan kemudian memanggil klasifikasi terbagi. Jangan kembali mengimplementasikan penalaran.

Uraikanlah kosakata, hapus 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,
]);
💡
Precedence tetap dan dibagi: eksplisit, kemudian didanai / dibatalkan, kemudian kredit, kemudian upgrade, maka is_order, kemudian berulang, kemudian akuisisi, kemudian tidak diketahui. Upgrade duduk di atas pemeriksaan urutan karena platform meningkatkan urutan untuk upgrade juga; terulang duduk di bawah itu karena faktur pertama dari sebuah langganan baru membawa tipe baris berulang. Pada ambigu nonorder penjualan classifier miring ke pendapatan dan menjauh dari pipa.

Sebutkan seluruh kosa kata platform

Ini adalah kegagalan yang paling mahal dan terlihat paling tidak salah.WHMCS konektor cocok ['hosting','addon','domain'] - Daftar yang tertulis sebagai lengkap.WHMCS tidak memancarkan telanjang Domain tipe untuk baris domain nyata; ia memancarkan DomainRegister, DomainRenew, DomainTransfer, PromoHosting, PromoDomain, DomainAddon* dan UpgradeSemuanya sudah melewati daftar unknown: 1,288 faktur, tiga tahun, tidak ada kesalahan dan tidak ada baris log.

Setiap pelanggan baru mengimpor sejarah mereka melalui backfill konektor, jadi bug klasifikasi tidak mempengaruhi satu area kerja - itu mempengaruhi setiap ruang kerja yang pernah onboard melalui konektor itu, pada saat pertama kali mereka melihat pipa mereka. Ambil kosakata dari dokumentasi platform atau sensus data hidup, dan cocok keluarga yang tumbuh oleh awalan sehingga saudara tidak ada yang telah melihat namun diklasifikasikan dengan kerabatnya bukannya menghilang.

💡
cek praktis: hitung berapa banyak barisanmu sendiri yang tidak diketahui sebuah konektor penjualan sehat mengklasifikasikan hampir semua hal yang belum diketahui hampir tidak pernah data yang tidak kamu miliki - itu adalah kosakata yang tidak pernah dipelajari oleh konektornya untuk membaca.

Memperbaikan riwayat impor

Setiap dikirimOpsIQkonektor penjualan mengimplementasikan 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() menggunakan catatan atas apapun yang sudah ada. tools/crm_backfill_sales_lifecycle.php maka perbaiki riwayat impor Anda tanpa kode per- konektor: kering dijalankan secara baku, kembali ke atas dan verifikasi jumlah baris sebelum menulis, dikembalikan melalui buku besar yang tidak dapat dibatalkan, dan tidak pernah menulis kegagalan membaca sebagai jawaban.

💡
Jika konektor Anda tidak dapat membaca ulang catatan masa lalu - sebuah webhook -only connector tidak dapat - jangan stub metoda. Stub kembali tidak diketahui lebih buruk daripada tidak ada implementasi: isi ulang baris baik sebagai unclassified dan laporan sukses. Implikasikan kamus hanya antar muka.
💡
Referensi paket terrinci tetap tersedia dalam konektor /CONNECTOR_EVENTS.md dan konektor /PLATFORM_CONNECTORS.md dalam distribusi sumber sendiri.
Konektor

Kontrak acara perjalanan

Data perjalanan menerima satu paket pasar dan keluaran Conektor Builder. Nama Platform- spesifik diterjemahkan di tepi; corong, atscience code SaaS hanya mengonsumsi peristiwa kanonik.

Isolasi dan batas kepercayaan

Kunci peer-domain yang tepat

Setiap peristiwa terikat ke domain terotentikasi site_keySebuah konektor harus mengambil kunci dari ConnectorRegistry atau titik akhir yang dikonfirmasi, tidak pernah dari sebuah badan permintaan tak terpercaya. Ranah menyimpan catatan terpisah; grup domain adalah kumpulan waktu baca-waktu saja.

Identitas yang tak tergantikan

event_id Diperlukan untuk konektor dan harus deterministik untuk peristiwa asli yang sama. Coba lagi, webhook dan pemutakhiran latar belakang satu acara daripada menduplikasi perjalanan atau penjualan.

Nama asli ditambah kanonikal

Simpan source_event_name untuk bukti dan discovery, kemudian memetakan ke event_name_canonicalAnalisis inti tidak boleh cabang pada siput konektor.

Bukti server menang

Pengamatan peramban dapat memulai atau menyimpulkan perjalanan. Peristiwa yang terotentikasi mengkonfirmasi tanda tangan, masuk, pembayaran, pembelian, pembaruan, pengembalian dan hasil terminal lainnya. Sebuah sire-link yang valid-terikat adalah gabungan terkuat; sebuah token tidak valid ditolak dan ID tertanam nya tidak dipercaya.

Privasi

Kirim hanya identifier dan bidang yang diperlukan untuk perjalanan yang dideklarasikan. Aspek persetujuan, masking dan resitensi pengaturan. Jangan pernah tempatkan kredensial, data kartu, rahasia otentikasi atau badan pesan pribadi di properti.

Amplop kanonikal

Amplop Acara 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 kanonik

Gunakan nama yang benar. Didukung keluarga termasuk halaman keterlibatan / kejadian CTA; pendaftaran akun, log masuk, MFA dan kata sandi reset; memimpin dan bentuk tahapan; produk, gerobak, cek, pembayaran, langganan, renovasi, kesan promosi dan pengubahan; bantuan-pusat, percakapan dan acara tiket; peristiwa keamanan; dan nama acara khusus. Nama terminal umum adalah nama terminal account.signup.succeeded, account.login.succeeded, lead.form.succeeded, commerce.payment.succeeded, commerce.purchase.completed, commerce.subscription.renewed dan commerce.refund.completed.

Inferensi peramban, konfirmasi dan ditinggalkan

Widget dapat bekerja tanpa konektornya dengan mengamati struktur halaman, aksi bentuk, DOM keluar dan log perjalanan pengunjung. Bukti tersebut tetap dinilai secara eksplisit seperti diamati atau diverifikasi. Konektor menambahkan konfirmasi server yang otoritatif dan dapat menghubungkan ke upaya peramban yang sama. Abandonment pertama kali disimpan sebagai kandidat; itu hanya akan ditinggalkan setelah jendela inaktif diatur di UI dan hanya ketika tidak ada pemulihan kemudian atau keberhasilan yang ada.

Atribut dan pendapatan

Atribut lebih suka tanda tangan korelasi token, lalu perjalanan yang tepat, percobaan, atau referensi sesi atau perdagangan, lalu grafik identitas yang disetujui, dan akhirnya sebuah kecocokan perilaku terbatas. Penjualan tetap tidak cocok. Sentuhan ganda harus total bobot buku besar. 1Site Intelligence mengasosiasikan pendapatan membaca buku besar ini; kredit, top- up dompet, token top-ups dan Add Funds tidak pernah membeli konversi. Conektor FX perilaku tetap dikendalikan oleh pengaturan konektor itu.

⚠️
Model atribut, jendela lookback, penanganan lalu lintas langsung, kepercayaan minimum, jeda ditinggalkan dan definisi corong adalah kebijakan UI. Kode konektor tidak boleh kode hardcode mereka.

Pengelola Konektor dan Pembangun

Deklarasi perjalanan konektor
{
  "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"
    }
  }]
}

Deklarasi hanya kemampuan paket benar-benar memberikan. Conektor Builder memvalidasi pemetaan dan menghasilkan platform -netral adaptor yang sama digunakan oleh paket pihak pertama. Perjalanan intraffic menerima satu acara atau batch terbatas dari 100 melalui integrasi endpoint yang terotentikasi.

💡
Buku kas tetap sumber kebenaran keuangan.
Konektor

Bagaimana tindakan AI bekerja

Setiap konektor menyatakan satu set aksi: hal-hal yang AI dapat lakukan melalui platform eksternal. Aksi adalah jembatan antara "Al mengatakan" dan "AI tidak".

Aksi AI
Bagaimana tindakan AI bekerjaPermintaan pelanggan dipetakan ke kartu aksi jenis delete-, kemudian sebuah checklist: ijin diperiksa, anda konfirmasi, API dipanggil.Bagaimana tindakan AI bekerjaarea kerja"Batalkan langganan saya"pelangganAIcancel_subscriptiondeletekonfirmasi dibutuhkanparam: subscription_id (dari konteks)TIPES AKSIreadtulisdeleteAkses & pemeriksaan peranAnda mengkonfirmasi tindakanAPI menelepon1DECLAREDSetiap penghubungnya daftar aksi2GATEDIzin + konfirmasi3THEN RUNAPI panggilan, hasil kembali
Permintaan menjadi aksi yang dideklarasikan (mengetik baca / tulis / delete) yang diijinkan diperiksa, dikonfirmasi, kemudian dieksekusi dan dilaporkan.

Garis hidup aksi

1
Pelanggan meminta sesuatu

"Batalkan langganan saya". AI mengidentifikasi ini membutuhkan "cancel_subscription"Action.

2
Hak akses pemeriksaan AI

Apakah aksi ini diperbolehkan? Apakah diaktifkan? Apakah pengguna saat ini memiliki peran yang benar?

3
Parameter kumpulan AI

Aksi ini membutuhkan ID berlangganan. AI mencarinya dari konteks pelanggan atau meminta pelanggan.

4
Konfirmasi

Untuk aksi destruktif atau dampak tinggi, AI meminta konfirmasi sebelum mengeksekusi.

5
Eksekusi

Aksi ini memanggil platform eksternal API.

6
Hasil

AI melaporkan hasil dari pelanggan.

Tipe aksi

Aksi baca

Cari data tanpa mengubah apa pun: list_orders, get_customerAman, tidak ada konfirmasi yang dibutuhkan.

Aksi penulisan

Membuat atau memodifikasi data. Contoh: create_ticket, update_orderMay membutuhkan konfirmasi.

Hapus aksi

Hapus data. Contoh: cancel_subscriptionSelalu membutuhkan konfirmasi.

Aksi HTTP

Menyatakan dalam tindakan.json, generik API panggilan didefinisikan secara deklarasi.

Tag kapabilitas

Aksi "kapabilitas" pada actions.json, sebuah tag kelas-netral connector- (mis. "tiket" untuk membaca / mencari tiket ",ticket_create"untuk membuka tiket). OpsIQ Gate the whole class uniforly across every connector: ticket reads drop out of the AI when the operator turns off AI Ticket Awareness, and tiket penciptaan disediakan untuk OpsIQkomposer sendiri (sehingga alat pembuat konektor tidak dapat menduplikasikannya). Menguraikannya dan konfigurasinya. OpsIQ The Conektor Builder mengeksposnya sebagai Capability dropdown per action.

Aksi kode

Terimplementasikan di PHP di kelas konektor.

Definisi aksi contoh
{
  "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" }
    }
  }
}
Konektor

Buat konektor

Pembangun Konektor memungkinkan Anda membuat konektor lengkap untuk platform apapun dengan API REST. Tidak diperlukan coding untuk konektor dasar.

Buat konektor
Pembuat PenghubungBentuk kode-no- konektor: nama, tipe auth, basis URL, pemetaan aksi, tes lewat dan tombol publikasi.Pembuat Penghubungarea kerjaPembuat PenghubungNamaPlatformkuAutentikasiOAuth 2.0(PKCE)Dasar URLhttps://api.example.com/v2AksiGET/customers → daftar_klienTes telah lewatKonektor paket1NO-CODENama, auth, dasar URL2ANY APIKunci, Pembawa, Dasar, HMAC, OAuth3PUBLISHInto /connectors/<slug>/
Arahkan pembangun pada REST apapun API Atur auth, dasar URL dan melakukan tindakan, mengujinya, dan mempublikasikan konektornya.

Capal API lengkap

Setiap dihasilkan API Konektor dapat mengekspos native terpisah API Baca dan Asli API Aksi penulisan. Tindakan kurated lebih disukai; operator sampul asli ditambahkan setelahnya. Waktu berjalan mendukung REST, GraphQL, JSON, formulir, XML, Raw dan multipart tubuh, pagination terbatas,API-version headers dan idempotency ketika menjaga kredensial didalam konfigurasi area kerja.

⚠️
Paket-paket Marketplace berasal dari /marketplace_connectors dan juga bundled /connectors. Meningkatkan versi paket, meregenerasi kontrak dan dokumentasi, jalankan tes konformance, kemudian tanda ulang dan mempublikasikan versi Marketplace baru.

Penyihir Pembangun Konektor

Penyihir itu punya enam langkah, ditunjukkan sebagai tab di atas, Anda bisa melompat di antara mereka dengan bebas, dan Simpan draft di kaki terus bekerja pada setiap titik.

1
Identitas dan profil

Nama, siput, deskripsi dan ikon, lalu pilih profil kontrak: StandarAPI, Commerce, Helpdesk, Mailbox, Site Intelligence, SaaS Bridge, lokal PHP Platform, atau Platform dengan tidak ada API (Dan apabila papan-papan itu telah tidak disebut) telah ditutup.OpsIQharus memasang jembatan profil ini memilih sebuah titik awal yang lengkap; anda masih dapat menyesuaikan kemampuan individu.

2
Autentikasi

Pilih pola otentikasi yang dipakai platform dan isi bidangnya. Masukkan kredensial tes nyata di sini juga: mereka digunakan untuk uji koneksi pada langkah berikutnya, dan mereka tidak disimpan setelah Anda mempublikasikan.

3
Uji

Masukkan API basis URL dan sebuah titik akhir verifikasi, kemudian jalankan uji koneksi langsung menggunakan kredensial dari langkah 2Lakukan ini sebelum Anda mendefinisikan tindakan apapun, jika auth atau dasar URL adalah salah, setiap tindakan yang Anda tulis setelah itu akan gagal untuk alasan yang sama dan Anda akan debug hal yang salah.

4
Aksi

Tentukan setiap operasi: nama, metoda HTTP, path titik-akhir, parameter, pemetaan ruas respon, dan pengaturan keandalan yang dijelaskan di bawah ini. Anda dapat menjalankan setiap aksi secara individual terhadap hidup API dari langkah ini.

5
Pemicu

Peta peristiwa webhook yang dikirim platform Anda ke OpsIQ peristiwa, sehingga hal-hal yang terjadi pada platform Anda dapat mulai bekerja di OpsIQ.

6
Ulasan, kontrak perusahaan dan mempublikasikan

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 TIDAK menjalankan konformance suite. Publikasikan hanya memvalidasi bentuk wizard dan emits peringatan yang tidak memblokir. Suite penuh, berkas bermanifestatif, kontrak identitas dan cek bridge- snippet - jalankan ketika Anda menekan Dry- run, dan lagi pada waktu instalasi. Tekan Dry-jalankan sebelum kapal, setiap kali.

Apa yang penerbitan melakukan bahwa bentuk tidak menunjukkan Anda

Lima perilaku generator mengejutkan orang-orang. tidak ada yang mengganggu; semuanya akan dikenakan biaya sore jika Anda bertemu mereka secara tidak sengaja.

Satu pertanyaan menentukan passpass: apakah platform melayaniAPI?

Menjawabnya dalam langkah1dengan memilih mode akses data (atau "Platform dengan tidak adaAPI"profile).APImode mendeklarasikan native_api and emits the <slug>_api_call passthrough. Bridge mode declares platform_bridge sebagai gantinya dan STRIPS native_api bahkan jika spesifikasi yang lebih tua membawanya, sehingga manifest, kelas dihasilkan dan keahlian docs tidak bisa tidak setuju. ai_brain_aware Ditambahkan dengan cara baik.

SILENCE MEANS "itu memilikiAPI"

The Builder mengikuti jawaban Anda, tidak bekerja kebenaran untuk dirinya sendiri, dan default ketika tidak ada yang dikatakanAPIMode, jadi tidak...APIplatform harus AKTIVELY mengatakan demikian - memilih "Peron dengan tidakAPI"profile, set data access to bridge, or tick 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.

Uji koneksi standar untuk GET /ping

Jika Anda membiarkan jalur verifikasi kosong, Tukang menulis /ping ke konektor yang dihasilkan dan ke profil.jsonhampir tidak ada platform nyata yang melayani rute itu, jadi Uji Koneksi gagal dengan HTTP404pada setiap pemasangan dan dibaca seperti sebuah miskonfigurasi pelanggan daripada cacat paket. Atur jalur verifikasi yang platform anda benar-benar menjawab. Untuk konektor bridge, arahkan ke titik akhir diagnostik anda sendiri - itu membuktikan seluruh rantai dalam satu panggilan: jembatan dikerahkan, pencocokan kunci, dan jembatan dapat mencapai basis data.

Penerbitan ulang masih menimpa penulisan tangan Anda

Capsibility sekarang mengikuti jawaban akses data, jadi mereka tidak lagi drift. Segala sesuatu yang lain yang dihasilkan masih tidak: edit ContextProvider. php atau file lainnya yang dipancarkan dan penerbitan berikutnya tempat itu. Pengecualian yang dilindungi adalah berkas bridge - penyihir hanya menimpa jembatan yang membawa penanda sendiri, sehingga tangan yang ditulis sendirian.

Menghapus berkas

Tak ada kemampuan dan penerbitan berikutnya menghapus berkas penyedia. Berikan ke berkas yang telah dihasilkan - ContextProvider.php di atas semua - yang ditulis ulang tanpa peringatan. Salin penyesuaian keluar pertama, atau ambil kepemilikan paket dengan menghapus.opsiq-pembangun.jsonDan mereka itu adalah benar-benar telah mengingkari Allah dan rasul-Nya.

release_status selalu pratinjau

Penyihir tidak memiliki kendali untuk itu paket yang dimaksudkan untuk kapal sebagai produksi harus memiliki release_status berubah dengan tangan di settings.json — dan bahwa edit istirahat tanda tangan, sehingga re-sign sesudahnya.

Tanda tangan membuktikan integritas, bukan asal

Paket-paket builder ditandatangani dengan kunci simetrik instalasi sendiri. Penghapusan yang mendeteksi. Ini tidak membuktikan siapa yang menulis paket, dan setiap memasang yang memegang kunci yang sama dapat menghasilkan tanda tangan yang sama. Perlakukan paket bertanda tangan lokal sebagai self-signed.

Tabrakan Slug hanya diperiksa dalam satu pohon

Penerbitan menolak sebuah siput yang sudah ada di bawah/connectors/.Ini tidak melihat/marketplace_connectors/,Jadi paket pertama yang ditulis tangan dengan peluru yang sama bisa berakhir menjadi bayangan.

💡
Pendeta tidak memiliki langkah penelusuran pengetahuan. Berkas pengetahuan yang menjelaskan platform Anda dibuat untuk Anda dari nama, deskripsi, tipe auth dan tindakan yang Anda definisikan, dan dimuat ke dalam AI ketika konektor diaktifkan.

Mendefinisikan sebuah aksi (langkah 4)

Setiap aksi memiliki pengaturan berikut. Hanya empat pertama yang diperlukan; kontrol sisanya yang dapat menjalankannya dan seberapa hati-hati.

Tombol aksi dan label

Kuncinya adalah apa panggilan AI; label adalah apa yang dibaca manusia. Kunci dinamai dengan selongsong konektor Anda secara otomatis, sehingga dua konektor dapat memiliki "list_orders"tanpa bertabrakan.

Metode HTTP

GET, POST, PUT, PATCH atau Delette.

Path URL

Ditambahkan ke dasar URL Gunakan {name} Sebagai contoh, untuk placeholder /opportunities/{id}/stage

Parameter

Untuk setiap parameter Anda juga memilih mana ia pergi: tubuh, path, Google DocsQuery atau tajukSebuah parameter jalur mengisi {placeholder}; sebuah parameter query ditambahkan ke URL.

Pemetaan respon

Katakanlah bidang mana di JSON respon berarti apa, yang merupakan nama pelanggan, yang adalah email, yang urutan total. Ini adalah apa yang memungkinkan AI membaca data platform Anda daripada menebak itu.

Siapa yang bisa menggunakannya

Tim Anda (admin Al), sinyal pelanggan (gustomer chat), baik, maupun asisten penulis. Tindakan pelanggan hanya dijalankan untuk signend- dalam pelanggan, dan bidang identitas terkunci kepada mereka secara otomatis sehingga salah satu pelanggan tidak dapat bertanya tentang yang lain.

Perlu konfirmasi

Seorang manusia harus menyetujui sebelum tindakan berjalan.

Destruktif

Tandai aksi sebagai penghapusan atau mengubah keadaan. Digunakan untuk memperingatkan sebelum dijalankan.

Perlu izin

admin harus menahan ijin ini untuk AI untuk menjalankan aksi atas nama mereka; administrator penuh selalu lulus. Pilih dari 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 tidak sama sekali, berarti setiap admin dikonfirmasi.

Deskripsi / Petunjuk AI

Opsional, tapi layak ditulis. Ini memberitahu AI ketika mencapai aksi ini, misalnya "Gunakan ini ketika admin meminta untuk mengubah tahap kesepakatan". Petunjuk yang baik adalah perbedaan antara tindakan yang digunakan AI dengan benar dan salah satu yang diabaikan.

Kapasyability

Tag kelas opsional, baik tiket (membaca atau lookup tiket) atau ticket_create (Membuka tiket). Tagging memungkinkan OpsIQ gerbang seluruh kelas sekaligus, misalnya, menyembunyikan tiket membaca ketika operator ternyata kesadaran tiket AI off.

Path daftar

Opsional. Untuk titik akhir yang mengembalikan suatu daftar, path bertitik-titik ke array, misalnya data atau dat. itts

Lokasi galat

Opsional. Sebuah bidang tubuh yang keberadaannya berarti panggilan gagal, misalnya error.message, berguna untuk APIs yang mengembalikan HTTP 200 gagal.

Jalankan

Setiap tindakan dapat dijalankan terhadap hidup API dari langkah ini, sehingga Anda dapat memperbaiki jalan yang salah atau nama lapangan sebelum orang lain menggunakannya.

⚠️
Aksi penulisan diproteksi secara baku. Aksi apapun memakai POST, PUT, PATCH atau DELETE dimulai dari manage_integrations yang memerlukan izin dan konfirmasi manusia sebelum dijalankan ini disengaja tindakan penulisan baru gagal ditutup daripada membiarkan AI mengubah data tanpa pengawasan kamu dapat mengubah keduanya pada tindakan, tetapi mengubahnya dengan sadar
💡
Untuk dapat dipanggil dari obrolan pelanggan, sebuah tindakan harus dibaca saja: tinggalkan konfirmasi dan Destructive untick. tindakan yang bisa memicu seorang pelanggan juga mengubah keadaan bukanlah sesuatu yang akan diberikan oleh penyihir.

Menerima webhooks (langkah 5)

Langkah Triggers memberimu webhook URL untuk mendaftar dengan platform Anda, dan memverifikasi setiap permintaan yang tiba di atasnya.

Tajuk tanda tangan

Header tanda platform Anda dengan, misalnya X- Hub- Signature-256.

Algoritma tanda tangan

HMAC-SHA1, HMAC - SHA256 atau HMAK-SHA512.

Skema tanda tangan

Sederhana, hex biasa atau tercerna base64 atau gaya Stripe-, t =..., v1 =... format yang digunakan oleh Stripe dan beberapa platform yang disalin itu.

awalan tanda tangan

Opsional. Beberapa platform memprefiks digest, misalnya sha256 =. Biarkan kosong jika Anda tidak.

Pemetaan acara

Peta setiap acara platform Anda mengirimkan ke OpsIQ acara itu harus meningkatkan.

Otomatis-mendaftarkan webhook

Jika platform Anda memiliki API untuk mengelola webhooks sendiri, Anda tidak perlu mendaftarkan URL dengan tangan. Otomatis-register webhook ini saat mengaktifkan dan titik itu pada dua tindakan yang Anda didefinisikan dalam langkah 4:

Aksi Create-webhook

Disebut ketika sebuah admin memungkinkan konektor. Anda memberikan nama parameter yang membawa URL, mungkin satu yang membawa daftar peristiwa, dan jalan dalam respon yang memegang id webhook baru.

Hapus aksi webhook

Disebut ketika konektor dinonaktifkan, menggunakan id yang ditangkap di atas, sehingga menonaktifkan connector juga menghentikan platform Anda mengirim ke titik akhir yang mati.

Kabilitas Anda dapat beralih pada

Profil dan kemampuan didefinisikan oleh Kontrak Konektor 2.2. Dihasilkan dan kemampuan deklarasi yang dipancarkan secara langsung; kemampuan perusahaan menghasilkan EnterpriseExtension.php yang dibuat dengan kabel Lifecycle waktu-jalan.

Aksi

Operasi AI dapat berjalan pada platform Anda: daftar perintah, menemukan pelanggan, mengeluarkan pengembalian.

Pemicu

Menerima webhooks dari platform Anda dan mengubahnya menjadi peristiwa OpsIQ.

Tiket AI

Al Taxilot dan tiket balasan Copilot yang tetap berada di platform Anda. Pilih titik akhir yang mengembalikan satu tiket dengan jawaban dan memetakan ladang; OpsIQ membaca thread melalui itu.

Kotak surat dan kontak

Tampilkan surat pelanggan pada timeline mereka, mengirim dari kesepakatan, dan sync buku alamat Anda ke dalam OpsIQ CRM.

Impor pelanggan

Halaman melalui daftar pelanggan Anda dan impor masing-masing sebagai OpsIQ Ini adalah apa yang tombol Impor berjalan.

Konteks

Push data langsung dari platform Anda ke dalam setiap percakapan AI.

Identitas

Bekerja di luar yang pelanggan Anda pengunjung adalah, dan menunjukkan profil mereka dan pembelian pada tiket.

Penjualan dan penagihan

Peristiwa pendapatan pakan dan MRR tokoh ke dalam dasbor OpsIQ.

Tiket masuk

Putar tiket dan email platform Anda memberikan oleh webhook ke OpsIQ mendukung benang.

Outbound menjawab

Post OpsIQ staff replies back to the platform the thread origined on.

Selaraskan pengguna

Impor akun staf Anda ke pengguna admin OpsIQ.

Selaraskan departemen

Impor departemen dukungan Anda ke OpsIQ.

Promo target dan pakan produk

Biarkan Promosi Studio menargetkan fakta-fakta yang kau tahu tentang seseorang, dan membuat produk asli mu dalam promosi.

Penyedia Studio Survey

Tampilkan server - diverifikasi Fakta Survey, variabel lolos dan kelebihan CRM Oureach halaman penerima melalui eksklusif provider. php. Ini tidak menggunakan ulang waktu promosi.

Pribumi IP blocking

Kapan OpsIQ blok IP, memanggil platform Anda sendiri blok API Jadi blok itu juga di paksa disana.

Peristiwa keamanan

Menerima blok-IP sinyal ancaman dari OpsIQ.

Peron pengetahuan untuk AI

Setiap konektor Anda membangun kapal referensi pendek menjelaskan apa platform Anda dan apa tindakan yang dilakukan. OpsIQ admin AI membacanya setiap kali konektor Anda diaktifkan, sehingga memahami platform Anda daripada hanya melihat daftar nama aksi. Ini dibuat untuk Anda.

API Paste

Konektor Anda selalu mendapat panggilan tujuan umum sehingga AI dapat mencapai titik akhir Anda tidak mendefinisikan aksi yang diketik. Gunakan tindakan mengetik di mana Anda bisa; ini adalah menetas escape.

Konektor Canonical Kontrak 2.2 referensi

Versi kontrak: 2.4 · 57 capabilities · 8 profiles.

Profil konektor

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 kanonikal

aksi

Universal actions. Capability version: 1.0. Mode: generated. Runtime methods: registerActions. Package files: actions.json.

pemicu

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.

konteks

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.

identitas

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.2. Mode: generated. Interfaces: OpsIQ\Connectors\CommerceConnectorInterface. Package files: SalesIngest.php.

sales_reconciliation

Scheduled sales-ledger reconciliation against the platform. Capability version: 1.0. Mode: generated. Runtime methods: reconcileSales. Interfaces: OpsIQ\Connectors\SalesReconciliationInterface.

penagihan

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.

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.

crm

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.

lokal

Local search/location data. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

ini

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 tetap sumber otoritatif. Masukan platform-spesifik aturan bisnis dalam titik ekstensi yang dihasilkan; lifecycle paket, antrian, pekerja, migrasi dan konformansi tetap Pembangunan.

Pengaturan redubilitas pada setiap aksi

Ulangi

Berapa kali mencoba lagi panggilan yang gagal, dengan mundur yang dua kali lipat setiap usaha. 429s dan 5xx errors adalah reteed; a 4xx adalah kesalahan permintaan Anda dan mengulangi itu hanya akan membakar batas kecepatan Anda.

Batas rate

Sebuah langit-langit per-menit untuk tindakan ini, sehingga pemicu sibuk tidak dapat palu platform Anda. Biarkan di 0 tanpa batas.

Waktu habis

Berapa lama untuk menunggu platform Anda sebelum menyerah.

Konfirmasi

Perlu manusia untuk menyetujui sebelum aksi berjalan. Gunakan untuk apa pun yang merusak.

Jenis otentikasi

Langkah 2 menawarkan tujuh pola, pilih salah satu yang cocok dengan platform Anda API dokumentasi, generator memancarkan klien HTTP kanan untuk itu.

API kunci dalam header

Sebuah kunci statis dikirim sebagai header tetap, misalnya X-API-Key. Anda memberikan nama header dan label formulir admin harus menunjukkan. Ini mengirimkan kunci sebagai header saja; jika Anda API mengharapkan kunci sebagai parameter query, lebih baik gunakan header kustom atau konektor kode penuh.

Tanda Pembawa

Token sent as Authorization: Bearer <token>. Common for modern APIs.

Aut- dasar

Nama pengguna dan kata sandi, base64-dikodekan ke dalam header Otorisasi. Anda memilih label baik field show pada bentuk admin.

Tanda tangan HMAC

Kunci publik ditambah rahasia, dengan permintaan tubuh ditandatangani. Anda memberikan tajuk tanda tangan, header kunci dan tajuk timestamp yang diharapkan platform Anda.

OAuth 2.0 (Kredensial klien)

Server-ke-server, tanpa interaksi pengguna dan tidak ada redirect. Anda memberikan token URL dan sebuah scope pilihan; admin menyediakan ID klien dan rahasia. Gunakan ini ketika platform anda mengeluarkan kredensial ke aplikasi daripada kepada seseorang.

OAuth 2.0 (Tombol sambungan)

Arus kode otorisasi dengan PKCE, untuk Stripe, Shopify, Slack dan QuickBooksAnda memberikan otoritas. URL, the token URL dan skopnya. setelah menerbitkan, admin klik Connect pada konektor, authorizes di platform Anda, dan OpsIQ menyimpan token refresh dan mints akses token pada permintaan. Redirect URI untuk mendaftar di Anda. OAuth aplikasi ditampilkan pada halaman pengaturan konektor.

Tajuk ubahan

Bentuk bebas JSON peta header untuk apa pun pola di atas tidak meliputi, misalnya {"X-API-Kunci ":"{api_key}, "" X- Tenant ":"{tenant_id}"}. Setiap placeholder menjadi bidang pada bentuk admin.

💡
PKCE hanya berlaku pada aliran tombol-koneksi. Aliran kredensial klien tak memiliki redirect dan tanpa langkah pengguna, sehingga PKICE tak diterapkan padanya.

Gaya Paginasi

Ofset

Menggunakan ofset dan parameter batas. Contoh:? offset =100& batas =50.

Halaman

Menggunakan nomor halaman. Contoh:? halaman =3&per_page=50.

Kursor

Menggunakan tanda kursor dari respons sebelumnya.

Tautan header

Menggunakan header respon Link dengan rel = "next".

Advanced: kode PHP gubahan

connector.php RETURNS sebuah instansi. Ini tidak mendeklarasikan kelas bernama yangOpsIQNama-nama metode di bawah ini adalah yang dibutuhkan ConnectorInterface; salah satu kesalahan adalah sebuah muatan fatal, bukan peringatan.

connector. php - kontrak 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.

Tiket cermin ke sistem tiket asli

Ketika platform Anda memiliki tiket, cermin ke OpsIQ dari konektor anda menggunakan tiket terdalam pengonektor anda (buat untuk tiket baru, add- reply untuk follow-up). Keluarkan dan berlangganan ke acara tiket universal dalam konektor Anda subscribers() metode, ticket.created, ticket.replied, ticket.updated, ticket.deletedAuto- reply, eskalasi, SLA dan CSAT semua menghubungkan peristiwa yang sama, sehingga Anda mewarisinya tanpa kode ekstra.

Jika kau bisa mengatasinya ticket.deleted, Anda juga menangani penggabungan. Sebuah surat tilang yang digabung berisi merged_into (Dan tidak dikirim kepada seorang pun yang menyampaikan) maksudnya seseorang yang memberi kesaksian (tentang ini) maksudnya, kepada orang yang mengetahui perkara akhirat. ticket_merge; penggabungan tiba sekali sebagai ticket.merged sebagai gantinya, jadi kamu bisa bergabung di platform kamu daripada menutup tiket yang digabung disana. Kemampuan penggabungan tiket (Kontrak 2.4).

Katakan siapa yang menulis pesan pembuka

Tiket selalu untuk pelanggan, tapi pesan pembuka mungkin ditulis oleh stafSeorang agen membuka tiket atas nama pelanggan, atau menjangkau secara proaktif. ticket.created kontrak daripada sesuatu setiap konektor memecahkan secara pribadi.

author_type

klien (baku) atau admin. Abaikan dan diasumsikan pelanggan.

author_id

The staff id when author_type= admin, jangan pernah di lD pelanggan.

author_name

Agen atau departemen nama tampilan.

author_email

Tidak pernah ada satu pelanggan pesan di bawah e-mail pelanggan adalah laporan dan audit error.

Ini bukan kosmetik. Konsumen dibaca author_type Untuk memutuskan giliran siapa, staf yang menulis sebagai pembukaan. client meninggalkan auto- balasan yang memenuhi syarat untuk menjawab pesan yang ditulis oleh agen anda sendiri, dan membuat gema platform anda dari pembukaan tersebut terlihat seperti pesan pelanggan baru, yang kemudian mendarat sebagai duplikat dan membalik tiket ke MenjawabPeta platform Anda sinyal ke dalamnya dalam konektor Anda normalisasi peristiwa, tidak pernah di konsumen.

Memblokiran terpusat

Ketika seorang agen memblokir pengirim, yang berlaku di seluruh setiap kanal segera (e-mail, chat, portal, widget, dan setiap kembar konektor) karena blok ini dicantumkan secara sentral, sebelum koneksi melihat pesan. Konektor anda menggelamkannya dengan tidak melakukan apapun. Tak ada pekerjaan masuk untuk menerapkan dan tak ada cara untuk salah.

Bagian opsional adalah keluarMengekspos hanya jika platform Anda dapat mengekspresikan sesuatu yang setara.

kemampuan ()

Harus termasuk block_registry AND kelas harus mengimplementasikan BlockRegistyInterface. Flag adalah sebuah klaim; antar muka adalah jaminannya. Daftar memerlukan keduanya.

blockSender($b)

Menerima jenis (e-mail|domain|ip), nilai, alasan, admin_id, expires_at, site_key. Kembalikan [rezult, detail?, remote_ref?].

unblockSender($b)

Muatan yang sama, terbalik, harus idempoten, mencegah sesuatu yang tidak pernah diblokir adalah noop, bukan error.

isSenderBlocked($b)

Untuk rekonsiliasi, sehingga melayang dilaporkan daripada ditemukan oleh pelanggan.

Nilai hasil

ok

Terapan di platform Anda, termasuk remote_ref ketika Anda memiliki id layak merekam.

noop

Sudah di negara yang diminta.

unsupported

Platform Anda tidak memiliki konsep yang setara.

gagal

Kau bisa melakukannya dan itu menjadi salah termasuk detail, itu mendarat di jalur audit

Pengungkapan adalah jawaban yang benar. Banyak platform tidak memiliki "blok pengirim" konsep dan menawarkan hanya suspensi ACCOUNT, yang berhenti penagihan, daftar dan layanan daripada hanya mendukung surat. Pemetaan "agen diblokir alamat spam" ke "menutup rekening klien ini" akan membiarkan satu blok salah klik mengakhiri layanan pelanggan membayar. Jika itu adalah satu-satunya tuas yang Anda miliki, kembali unsupported dan biarkan saja.

Tolak juga mencakup kasus di mana platform dapat lakukan tapi tidak akan membiarkan Anda. Orbit Co, bukan fitur: tuas yang hanya ada di dalam admin UI platform adalah tuas penghubung Anda tidak memiliki.

Bekerja sebagai contohZendesk(implementasi referensi)

Baca connectors/zendesk/connector.php alongside this. It is short, and every branch below is a decision you will face too.

email → ok

PUT /api/v2/users/{id} dengan suspensi = true. Permintaan baru pengguna yang diskorsing beralih ke Tiket Suspend daripada membuka satu, benar-benar ide yang sama seperti memblokir pengirim, dan berhenti tidak ada penagihan karena Zendesk akhir pengguna tidak memiliki apapun. Mengembalikan id pemakai sebagai remote_ref.

domain → tidak didukung

Zendesk BISA menskors seluruh domain, tetapi hanya melalui suspensi: kata kunci dalam textatea blocklist Pusat Admin, dan tidak ada API tulis bidang itu. fitur ada; tuas tidak.

ip →tidak didukung

Tidak ada tiket-tingkat IP blok ada.

alamat tidak diketahui → noop

Zendesk tidak dapat mempre- suspensi alamat yang belum pernah dilihat. Tidak ada yang dilakukan adalah bukan kegagalan, dan blok lokal masih berhenti tiket.

agen atau admin → tidak didukung

Pensiun, staf yang menunda akan mengunci rekan dari meja pembantu alamat staf mencapai daftar blok jauh lebih mungkin menjadi kesalahan daripada instruksi, periksa peran sebelum Anda bertindak di atasnya.

Baris terakhir itu adalah yang layak disalin. Kontrak ini tidak dapat menghentikan anda memetakan sebuah blok ke sesuatu yang merusak, jadi setiap konektor harus memutuskan sendiri apa yang akan ditolaknya. detail operator dapat membaca, mengalahkan mematuhi.

Laporkan dengan jujur. Perhatikan bagaimana beberapa baris-baris okItu adalah hasil yang benar, bukan kesenjangan: blok domain masih bekerja (itu dipaksa dalam inti saat ditulis); ini tidak dapat dicermin keluar. Mengembalikan ok untuk sesuatu yang tidak Anda lakukan akan memberitahu operator blok mencapai platform Anda ketika tidak pernah meninggalkan OpsIQ.

Aturan

Blok lokal selalu menang

Hal ini ditulis sebelum Anda dipanggil dan berdiri apapun yang Anda kembali. Anda tidak dapat mencegah operator memblokir seseorang.

Jangan pernah melempar

Lemparan diperlakukan sebagai tidak didukung dan direkam. Return gagal dengan detail bukan sehingga alasan bertahan.

Jadilah idempoten

Blok yang sama dapat diumumkan lebih dari sekali.

Cepat kembali.

Keluar bersamaan dengan klik operator. Antrian pekerjaan lambat daripada menahan permintaan terbuka.

Jangan menelepon kembali

Jangan pernah blok-ulang ke OpsIQ dari handler anda registry melewati konektor asli, tetapi hop kedua akan loop.

Setiap pengumuman ditulis untuk opsiq_block_registry_log (operasi, baik, nilai, alasan, admin, asal, kanektor siput, hasil, detail dan timestamp) sehingga operator dapat melihat blok yang tiba dari platform Anda daripada dari agen, dan apa yang dilakukan setiap konektornya tentang hal itu.

Push lampiran dengan benar

Tangan attachments array untuk membuat ()/addReply(). Setiap item membawa berkas dalam satu dari tiga bentuk:

content_b64

Base64 dari byte berkas RAW, gunakan untuk file di belakang auth (sebagian besar huruf inbound). OpsIQ decode dan re-host file untuk Anda. Bentuk yang paling portabel.

url / source_url

Sebuah https publik URL (mis. a Zendesk content_url). Harus https; melewati pemeriksaan SSRF / allowlist sebelum disimpan.

stored_path

Referensi berkas yang telah Anda tulis (apa yang dihasilkan oleh uploader komposer 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 hanya nama berkas (bukan bytes), jadi pola inbound yang dapat diandalkan adalah: baca byte dimana kode anda telah berjalan (didalam platform, atau dari muatan webhook), base64 mereka, dan kirimkan sebagai content_b64 pada acara tersebut.

Outbound (OpsIQ →platform Anda). Ketika seorang agen melampirkan file, ticket.replied payload memberikan Anda berkas balasan sebagai stored_path item di bawah OpsIQ file store. Baca dan dorong dalam format platform anda sendiri, dan periksa platform docs, masalah pengkodean: WHMCS ingin base64_encode(json_encode([[name,data]])) (JSON, tidak serialisasi); Zendesk upload mentah bytes ke /uploads.json untuk sebuah token kemudian menetapkan comment.uploads; Gmail mengirim multipart / mixed RFC-822 pesan base64url-dikodekan dalam raw; Amazon SES inbound attachments need the S3 receive action (the SNS path caps at 150 KB).

Platform remote: API + webhook, tidak pernah tabel aplikasi lain

Jika platform Anda adalah pisahkan aplikasi atau basis data (SaaS host, remote WHMCS, sebuah DB berbeda pada server yang sama), tidak pernah menulis tabel secara langsung: sebuah basis data yang menulis tanah pada koneksi apapun yang aktif dan diam-diam melewatkan baris nyata. Selalu: keluar = panggilan platform ini ditandatangani REST API (balasan, status, departemen, deletes); masuk = POSTs platform sebuah webhook ditandatangani, Anda handleWebhook() verifikasi dan kebakaran pencocokan ticket.* event. Untuk menghentikan loop cermin, tandai apa yang anda tekan dengan penanda asal (mis. mirror_origin:'opsiq'); platform gema di webhook dan penangan inbound Anda melewati gema sendiri. Periksa OpsIQEvents::isMirroredEvent() di atas setiap handler.

Status cermin, prioritas & departemen

Sebuah jawaban bergerak status secara otomatis, sebuah agen balas → answered, a pelanggan balas → customer_reply; cermin itu dengan cara yang sama. ticket.updated dan baca payload['changes'] (mis. {status:'closed'}).

Status: set kanonikal OpsIQ adalah open, customer_reply, answered, in_progress, pending, closed. Simpan peta kecil dua- arah untuk kosa kata platform Anda, dan pastikan kolom Anda benar-benar menerima nilai-nilai yang Anda tulis (sebuah ENUM hilang nilai akan diam-diam dijatuhkan ke kosong oleh beberapa basis data). Departemen: yang OpsIQ Departemen id tidak berarti di sisi Anda, tidak pernah mengirimkannyaKirim deskripsi (name, email dan slug) dan menyelesaikannya terhadap departemen Anda sendiri oleh email→nama→Slug, jadi "Departemen penagihan" mendarat di Anda Departemen penagihan bukan JenderalTrigger pada keduanya ticket.escalated dan department_id ganti ticket.updated.

💡
Status / prioritas / subjek / departemen / hapus cermin digated oleh toggles per- konektor (mirror_status_changes, mirror_priority_changes, mirror_subject_changes, mirror_department_changes, mirror_deletes) membaca melalui shared OpsIQ\ Konektor\ MirrorOptions helper. Embed blok yang dalam anda settings.json dan setiap konektor-cermin membaca toggles identik.

Hubungkan tiket ke layanan / produk

Jika pelanggan memilih produk tertentu ketika membuka tiket, cap petunjuk sehingga agen melihat kartu layanan fokus (dengan satu klik "lihat produk lain" modal untuk sisanya). Berikan salah satu dari ini untuk membuat ():

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 S396 (layanan396) / D11 (domain11). OpsIQ terurai huruf + id opsional dan cocokkan daftar layanan Anda, dengan tipe penjaga sehingga kode domain tidak pernah cocok dengan hasil dari id yang sama. Tampilkan sebuah ref yang cocok pada setiap layanan untuk pencocokan yang tepat.

related_domain

Nama domain; cocok sebagai substring terhadap setiap detail / domain layanan.

💡
Bangun daftar lampiran sekali, dalam bentuk di atas, dan OpsIQ menangani sisanya: hosted URLs dilewatkan melalui dan isi base64 disimpan dan dire- hosted untuk Anda. Anda tidak perlu menulis penanganan berkas perplatform.
⚠️
Tombol aksi adalah huruf kecil, digit, dan garis bawah. Pembangun menerima3ke80karakter dan juga memungkinkan titik; toko aksi menerima2ke100karakter tanpa titik, jadi simpan untuk huruf, digit, dan garis bawah dan Anda memenuhi keduanya. Menambahkan sebuah aksi tidak menciptakan rute AJAX, sehingga tidak ada yang dapat meregenerasi - re-save konektor dan itu disinkronkan.

Biarkan AI membangunnya untuk Anda

Anda tidak perlu mengisi enam langkah dengan tangan, menjelaskan konektor dalam kata-kata Anda sendiri danOpsIQAl draft seluruh spesifikasi, menjalankannya melalui validator yang sama yang digunakan penyihir, dan menunjukkan rencana sebelum apa pun ditulis ke disk. Ada dua tempat untuk melakukannya, dan mereka menghasilkan paket yang sama.

Dalam wizard

Buka Konektor→+ Tambah konektor→Bangun konektorPada langkah 1 Anda akan melihat ✨ membangunnya untukkuKetik apa yang konektor adalah untuk - platform, apaOpsIQharus membaca dan apa yang seharusnya menulis, dan siapa yang menggunakannya - tambahkanAPIakar jika Anda tahu, dan tekan itu. penyihir mengisi setiap langkah dari draft, dan Anda mengulas dan mengedit persis seperti jika Anda telah mengetik.6panel yang sama muncul sebagai ✨ berbatasan dengan AI, sehingga Anda dapat meminta perubahan ("juga membaca faktur") daripada mengedit bidang.

Dengan meminta OpsIQ

Buka Tanyakan OpsIQ copilot dimana saja di admin dan katakan apa yang kau inginkan. kau tidak perlu menyebutkan sebuah aksi atau tahu penyihir itu ada.

1
Mintalah

Sebagai contoh: "Buat saya sebuah konektor untuk Trello, ini seharusnya daftar papan dan daftar saya, kartu baca, dan membuat kartu di papan.APIkunci plus token. "Jawaban kopilot dalam sebuah kalimat dan menunjukkan Draft konektor ini Kartu. pesan Anda singkat, jadi taruh platform, tulisan dan tulisan di dalamnya.

2
Konfirmasi wamil

Belum ada yang ditulis. Kopilot membuat spesifikasi, memvalidasinya, dan menjawab rencana: apa yang dilakukan oleh konektor, aksi itu akan mengekspos (menulis ditandai), asumsi yang dibuat, dan pertanyaan yang masih harus Anda jawab - biasanya yang kredensial untuk memasok. Draft diparkir di bawah id dan tetap tersedia untuk24Jam.

3
Katakanlah "membangunnya"

Kopilot menunjukkan Bangun 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
Masukkan kredensial dan aktifkan

Konektor baru diterbitkan tapi TIDAK diaktifkan, dan tidak menyimpan rahasia. Buka settingnya, masukkanAPIkunci atau token, tekan Uji, maka AktifkanSampai kau melakukannya, itu tidak akan berarti apa-apa.

💡
Kedua kartu membutuhkan klik anda. Langkah rancangan tidak menulis apa-apa; langkah membangun ditandai destruktif dan selalu bertanya. AI tidak dapat mempublikasikan konektor, memungkinkan satu, atau memasukkan kredensial sendiri.

Apa Al adalah dan tidak diperbolehkan untuk melakukan

Validator adalah dinding

Spesifikasi yang disusun melalui validate yang sama persis () tombol wizard 's Publish digunakan. Jika tidak lulus, AI akan diberikan kesalahan dan mencoba lagi, sampai tiga kali, dan kemudian menolak pada kata-kata validator sendiri. Sebuah rancangan yang gagal tidak pernah menjadi paket.

Ini tidak menulis kredensial

Draft nama pola otentikasi dan ruas pengaturan; tidak pernah menciptakan kunci, token atau rahasia. Anda mengisinya setelah itu pada halaman konfigurasi konektor.

Ini menjawab dengan pertanyaan, bukan menebak

Apa pun yang tidak bisa diketahui - ID rekening Anda, yang mana, yang dari dua titik akhir rencana Anda mengekspos - datang kembali sebagai pertanyaan tentang rencana daripada asumsi diam.

Sebuah titik akhir ditemukan gagal keras

AI diberitahu untuk tidak pernah menemukan jalan, tapi tidak ada model yang sempurna. sebuah jalan yang salah diterbitkan sebagai tindakan yang gagal ujian langsung pada langkah Aksi atau pertama kali berjalan - itu tidak pernah sukses diam.

Paket ini biasa

Apa yang dihasilkan adalah paket Pembangun normal: berkas hasil yang sama, kontrak yang sama. Tanda tangan yang sama yang dapat disunting dalam wizard, dihapus dari halaman Konektor. Tidak ada yang terpisah dari "konektor AI".

Model Anda melakukan penyusunan

Kualitas mengikuti model yang Anda konfigurasi di bawah Pengaturan→AI. Sebuah model kecil murah menggambar dengan benar tapi konektor polos dan menanyakan lebih banyak pertanyaan; sebuah model yang lebih kuat mendapatkan lebih banyak titik akhir saat pertama kali. Ganti di bawah konfigurasi AI; tidak ada lagi yang harus berubah.

⚠️
Kopilot hanya dapat menjalankan aksi instalasi ini sebenarnya telah terdaftar. Jika aksi Pembangun Konektor hilang - sebuah rencana yang tidak termasuk mereka, atau peran tanpa manage_connectors - Kopilot mengatakan begitu daripada menawarkan kartu yang akan gagal ketika klik.
Konektor

Jual melalui percakapan: peta peran perdagangan

Konektor yang dapat menjual - platform toko, sistem pemesanan, gerbang pembayaran - menyatakan mana yang menjawab operasi OWN nya OpsIQ's kanonical commerce roles → Percakapan Klien → Jual melalui percakapan secara otomatis; berhenti mendeklarasikan dan menghilang. Tidak ada daftar untuk didaftarkan.

Berkas: commerce_roles.json

Deklarasi hidup dalam file sendiri di akar paket - kehadiran berkas adalah klaimIni tidak bisa hidup di connector_contract.json: berkas tersebut dihasilkan ulang oleh alat-alat kemasan dan skema-nya menolak kunci yang tidak diketahui, sehingga blok yang ditambahkan dengan tangan akan gagal validasi dan kemudian ditimpa.

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

Peran adalah kosa kata tertutup

OpsIQtidak pernah menggabungkan peran dari sebuah nama aksi. Sebuah peran yang tidak dideklarasikan tidak ada - menyatakan adalah seluruh kontrak.

Operasi harus menjadi salah satu tindakan Anda

Setiap operasi yang dipetakan harus ada di dalam Anda actions.jsonSeorang tipo menyatakan kemampuan yang tidak dapat berjalan, dan muncul ke pelanggan sebagai "Aku bisa memeriksa bahwa untuk Anda" diikuti oleh apa-apa.

Peran membaca tidak pernah menunjuk pada operasi yang merusak

Baca peran (katalog, ketersediaan, kutipan, urutan pencarian) harus memetakan operasi yang tidak mengubah apapun di platform Anda.

Sebuah peran tulis tidak pernah memetakan ke sebuah operasi record generik

Pemetaan order_create ke sebuah masukan tabel mentah — record.create, db.insert, recordCreatebaris yang ditulis langsung melampaui harga platform Anda, mengunci dan konfirmasi surat, menghasilkan urutan sistem Anda sendiri tidak sepenuhnya percaya

Peran menulis menyatakan operasi pemulihan

Pencari idempoten yang menjawab "apakah tanah tulisanku?". Yang paling berbahaya adalah waktu setelah platform Anda mungkin sudah menciptakan perintah; tanpa pencarian pemulihan satu-satunya pilihan adalah untuk mencoba kembali buta atau kehilangan itu.

Menyediakan peran pembayaran membawa tiga kewajiban ekstra

Paket yang berbicara langsung ke penyedia pembayaran harus juga menyatakan payment_profile (Mata uang, negara, metode dan lingkungan - lingkungan yang tidak disebutkan adalah bagaimana integrasi tes mengambil pembayaran hidup), webhook_verify (Skema signature real penyedia; sebuah rahasia generik - perbandingan ditolak) dan event_map (Kejadian penyedia ke yang kanonikal). Konektor pedagang yang hanya terimplementasi record_payment menerima sudah diverifikasi bukti pembayaran kanonikal; itu tidak boleh berpura-pura menjadi pintu gerbang.

Katakan bagaimana pelanggan bisa memesan dari toko terhubung

Konektor pedagang dan bayaran, konektor gerbang adalah kontrak yang berbeda. Pesanan pelanggan toko yang terhubung, pilih mode terdalam platform dapat membuktikan. Pilihan dikemas di dalam ditandatangani commerce_roles.json; Toko dan Chat Klien membacanya kembali pada waktu eksekusi. Menghapus sebuah peran atau menonaktifkan / mencabut konektor sehingga tidak menyetujui proposal yang sebelumnya dibuat daripada meninggalkan otoritas stale di belakang.

catalog_only

Peta catalog_search atau catalog_get. OpsIQmungkin mencari dan menjelaskan produk, tetapi tidak dapat menunjukkan perintah eksekusi atau konfirmasi checkout. Setiap paket tetap pada standar yang jujur ini sampai sendiri mengetik kutipan dan cek / urutan tindakan melewati kontrak lebih dalam dan sertifikasi Marketplace; tidak pernah infer dukungan transactional dari nama platform.

platform_checkout

Juga peta quote dan platform_checkoutTindakan pedagang - bukan OpsIQ inti - kembali checkout_url, checkout_reference dan kutipan kanonikal. URL harus berupa HTTPS, nama host harus cocok customer_ordering.checkout_hosts atau host HTTPS diturunkan dari checkout_host_setting, dan kutipan mungkin hidup untuk tidak lebih dari 15 Sebuah produk permalink, lokal dirakit gerobak URL atau kembali URL bukan perdagangan - dikeluarkan kapabilitas checkout.

direct_order

Juga peta quote, order_create dan order_get, dengan order_create.recoveryInti menyegarkan kutipan segera sebelum eksekusi, memasok kunci idempotensi, dan meminta operasi pemulihan setelah setiap hasil yang tidak diketahui sebelum pengulangan apapun. Ketika payment_flow=opsiq_gateway, ini harus ditambahkan peta record_payment dengan operasi pemulihan / baca-balik yang otoritatif.OpsIQsecara aktif memverifikasi transaksi gerbang, jumlah yang cocok, mata uang, pedagang dan ketertiban referensi, menulis referensi penyedia sekali, kemudian membaca faktur pedagang / order kembali. A mark_invoice_paid status toggle ditolak karena tidak membawa bukti pembayaran. Aksi pembuatan harus memanggil platform sendiri harga, saham dan urutan bisnis logika; catatan basis data mentah ditolak.

Verifikasi identitas, dan apa operator dapat mengubah

Ketika OpsIQ memiliki pembayaran, pelanggan obrolan harus mencapai email_otp (Sebelum suatu waktu) lafal An-Naari berkedudukan sebagai Haal atau kata keterangan keadaan bagi Dhamir yang terkandung di dalam lafal Tabnuuna (diciptakan,OpsIQemail a6-digit kode dan memintanya. Ini bukan sesuatu yang konektor opps keluar dari; ini adalah lantai jaminan permintaan kernel eksekusi untuk order_create.

Satu pengecualian, dan siapa yang mengendalikannya

Operator dapat menerima alamat yang belum diverifikasi hanya di mana konektor Anda mendeklarasikan fulfilment_presence: customer_presentSeorang tamu hotel harus tiba, jadi alamat yang salah mengarahkan resepsi dan kamar masih ada. remote_delivery - Dikirim, ditetapkan, diunduh - dan verifikasi diperlukan apa pun operator set, karena nilai daun pada kekuatan alamat itu saja. Setting minimum_assurance atau reversibility: irreversible Juga menghilangkan kemampuan operator untuk melewatkannya.

Berapa lama kode berlangsung

Tiga puluh menit secara default, operator-dapat diatur dari5menit ke24Para pelanggan melihat hitungan mundur hidup yang diberikan di mereka sendiri zona waktu, bukan operator. Sebuah kode kadaluarsa mengatakan begitu jelas dan menawarkan yang baru daripada melaporkan sebuah kode tidak valid - pelanggan mengetik benar-butt-lama kode telah membuat kesalahan, dan memberitahu mereka bahwa mereka telah mengirimkan mereka putaran yang sama loop.

Apa yang pelanggan harus sediakan: bagian pelanggan

Nama dan email selalu dibutuhkan dan dikumpulkan terlebih dahulu. Desclare address, phone dan company as required atau optional untuk memenuhi bisnis: sebuah toko yang kapal parcel mendeklarasikan alamat dibutuhkan; hotel menyatakan telepon diperlukan, karena tamu itu tidak dapat memanggil memiliki kontak pemesanan. Asisten meminta mereka dalam percakapan sebelum mengutip, danOpsIQmenolak untuk menempatkan sebuah urutan yang kurang lapangan yang diperlukan. Pembangun menulis peta normalisasi keluar, baseline termasuk, sehingga kontrak di disk eksplisit.

Ketika akun dibuat: account_timing

at_order (bawaan) ijinkan urutan menulis buat akun pertama-waktu pembeli. Umumkan before_quote ketika harga platform Anda per account -WHMCSpajak oleh klien apos; s profil sendiri dan kutipan dalam mata uang klien - danOpsIQMembuat akun melalui Anda customer_create aksi segera setelah bidang yang diperlukan diketahui, kemudian meminta kutipan untuk account itu, sehingga kartu konfirmasi membawa total Anda akan benar-benar faktur. account_flow: connector_signup.

Asistennya fetches, tidak dibaca: client_tools

Dengan Membuat perintah, asisten tidak pernah membaca katalog yang ditempelkan. Ini memanggil tiga alat - commerce_catalog_search (sebuah query kosong adalah gambaran dari keluarga produk; hasil diluar batas yang terdaftar dengan nama), commerce_catalog_get untuk satu item secara penuh, dan commerce_quote, yang mana memasukkan kartu konfirmasi yang ditandatangani ke sisi-sisi melalui dinding yang sama jalur konektor selalu memiliki satu alat per kata, konektormu sebagai parameter, jadi sebuah toko dengan enam konektor mendapat tiga alat daripada delapan belas. client_tools batasi default; absen berarti setiap yang dipetakan, dan catalog_only Konektor tidak pernah mengutip konfirmasi bukanlah alat: tombol kartu di web, tepat CONFIRM perintah pada saluran, dan tidak ada model mengatakan menghabiskan uang.

Apa yang harus dibawa katalog Anda

id, name, a penggustra- aman summary, a category atau keluarga produk (ini adalah bagaimana kata pelanggan menemukan item yang namanya kode), currency, unit_amount_minor, available, dan input_schema Menamalkan bidang suatu keperluan perintah. Mencari skor kata-kata pelanggan terhadap nama, keluarga, siklus dan ringkasan.

Menolak dengan alasan pelanggan dapat bertindak pada

Kembali {"success":false,"error":"…","missing":["domain"],"retryable":true} ketika nilai salah atau hilang. Sebuah penolakan bahwa nama missing atau retryable mencapai pelanggan verbatim; kegagalan kosong tetap generik sehingga tidak ada kebocoran internal.

Mata uang Geo dan pemberhentian darurat

Ketika operator menyalakan mata uang Geo (Klien Chat→Behaviour), pelanggan membaca harga di setiap mata uang mereka sendiri pada setiap permukaan - teks obrolan, kartu web, kartu teks saluran dan buku pembuka toko - menggunakan platform sendiri toko FX. Harga Anda tidak pernah diganti: kartu menunjukkan tokoh pengunjung di samping total toko, dan proses gerbang persis jumlah yang ditampilkan. Jeda semua penjualan (Pengaturan→Iklan) adalah tombol pembunuh: katalog, kutipan dan pencarian tetap terbuka; mengusulkan dan mengkonfirmasi berhenti di setiap saluran.

Ketika menjual melalui obrolan tidak berperilaku

Pedagang tidak bisa dicapai

Segel paket rusak: sebuah berkas telah disunting setelah ditanda-tangani. Mengunggah ulang paket. Salinan pasar yang terpasang tidak pernah diedit di tempat; perbarui dari panel pasar.

Ordering sedang jeda untuk toko ini sekarang

Saklar kill sedang aktif. Pengaturan→Perdagangan→Jeda semua penjualan.

Ordering belum tersedia di saluran ini

Saluran ini tidak berada di bawah tempat pelanggan dapat membelinya.

Asisten menjelaskan sebuah butir tapi tidak ada kartu muncul

Alat kutipan ditolak. Setiap panggilan log sebagai [opsiq][commerce][client_tool] dengan alasan: sebuah id item salah, sebuah bagian item tidak mendeklarasikan, domain yang diambil, atau penolakan pedagang sendiri. Baca log sebelum mempercayai parafrase asisten.

Asistennya bilang tidak bisa melihat produk-produknya

Halaman ini milik ruang kerja lain. Setiap widget situs memiliki satu area kerja, dan konektor toko harus diaktifkan di sana.

Jawaban kaleng daripada jawaban

"Ceritakan sedikit tentang apa yang Anda butuhkan" berarti panggilan penyedia AI itu sendiri gagal; Sejarah AI menunjukkan kesalahan yang tepat di bawah belokan itu, dan alat-alat tidak pernah tercapai.

Penyuntingan konektor tak ditampilkan dalam obrolan

Pekerja mendaur ulang kode dalam satu menit, tapi pembicaraan memainkan kembali kartu terakhirnya. Memulai percakapan baru untuk diuji.

Seorang pengunjung Nigeria melihat dolar meskipun mata uang Geo ada di

Periksa bahwa geo- yangIP basis data dikonfigurasi (Klien Chat → Geo) dan bahwa mata uang pengunjung memiliki tingkat FX, tanpa rate OpsIQ Menunjukkan harga toko daripada nomor yang salah.

Totalnya adalah satu-satunya angka yang memindahkan uang

Kutipan membawa unit_amount_minor, quantity dan total_amount_minor, dan ini menggoda untuk memperlakukan ketiga seperti yang dapat dibanggakan dari dua pertama.

quantity Adalah apa yang dipilih CUSTOMER - satu ruangan, satu lisensi, satu kebijakan.OpsIQHotel mengutip satu ruangan selama tiga malam sebagai kuantitas1, unit105,000, total315,000. OpsIQdikalikan satuan dengan kuantitas untuk harga kartu konfirmasi, menunjukkan tamu105,000, dan kemudian dikenakan biaya315,000Berkesepakatan dengan satu tokoh dan dikenakan biaya yang lain adalah hal terburuk yang dapat dilakukan kontrak ini.

Aturan

total_amount_minor adalah satu-satunya angka OpsIQ menunjukkan, tanda-tanda, biaya dan konsiliasi terhadap. unit_amount_minor Jika total Anda tidak persis apa yang Anda inginkan dibebankan, kutipan Anda salah -OpsIQtidak akan memperbaikinya, karena total yang telah disesuaikan dengan bantuan adalah salah satu Anda tidak pernah setuju untuk menghormati.

Apa artinya ini untuk aksi kutipanmu

Kembalikan angka all- dalam gambar. Terapkan malam Anda sendiri, kutu, diskon, pajak dan biaya sebelum Anda menjawab. Jika baris Anda tidak mendamaikan - satuan kali seluruh nomor tidak pernah sama total -OpsIQMemperlakukan semuanya sebagai satu baris dengan harga sebenarnya daripada menciptakan kerusakan yang mendamaikan apa-apa.

Enam jawaban yang membuat kontrak ini sesuai dengan industri apapun

Deklarasi di atas dimulai sebagai deklarasi toko: membeli barang, membayar sekarang, itu adalah milikmu, kamu dapat membatalkan setiap salah satu dari empat adalah asumsi beberapa bisnis yang nyata tidak berbagi. Bank memindahkan uang tidak dapat membatalkannya.

Jadi konektor transkasional menjawab enam pertanyaan lagi. Setiap orang default ke pembacaan ketat - Mengatakan tidak ada yang selalu aman dan tidak pernah berlaku, karena mengatakan apa-apa adalah apa yang penulis tidak ketika mereka belum mempertimbangkan pertanyaan.

transaction_kind

purchase, booking, subscription, bill_payment, transfer, application, top_up, renewalVocaligence daripada perilaku: itu memutuskan kata yang pelanggan Anda baca. Memanggil transfer kawat "order" membuat asisten suara seperti tidak mengerti bisnis ia berbicara untuk, dan tidak ada jumlah pipa yang benar recover dari itu. Default to purchase.

decision_mode

immediate atau deferredPilih deferred untuk apa pun yang pergi ke underwriting, penilaian kredit, referensi, penerimaan atau komite.OpsIQkemudian mengatakan dimasukan daripada dikonfirmasi, dan menyerahkan referensi untuk menanyakan hal itu. Memberitahu seseorang aplikasi mereka dikonfirmasi sementara duduk dengan manusia adalah hal yang paling merusak seorang asisten obrolan dapat lakukan untuk bisnis diatur, dan itu adalah perilaku baku dari setiap aliran-belakang berbentuk. Default ke immediate.

payment_timing

on_confirmation, deposit_then_balance, invoice_later atau no_paymentIni memutuskan apakah OpsIQ membuka halaman pembayaran sama sekali, sehingga tidak dapat disimpulkan dari payment_flow - yang mengatakan siapa mengambil uang, ini mengatakan apakah dan kapan. Pekerjaan yang Anda faktur setelah itu, dan aplikasi yang tidak memerlukan biaya untuk menyerahkan, berakhir pada konfirmasi bukannya mencapai daftar gateway yang kosong atau salah.

reversibility

reversible atau irreversibleYang paling penting adalah konektor keuangan mengatakan sebuah ruangan dapat dirilis dan paket dapat kembali; transfer yang lengkap tidak bisa - tidak ada membatalkan, uang di ujung lain, dan satu-satunya obat meminta orang asing untuk mengembalikannya. irreversible secara otomatis memaksa cancellation_flow ke none dan melarang pengaturan operator apapun dari melewatkan verifikasi identitas, apapun yang deklarasi ini katakandua bidang yang tidak setuju bukanlah sebuah negara untuk diselesaikan pada saat waktu-jalan oleh mana yang membaca pertama standar untuk reversible.

cancellation_flow

none, platform_only atau connector_cancelPeran batal sudah ada tanpa aturan tentang siapa yang bisa mencapainya, dan dua tebakan salah gagal di arah berlawanan: coba tebak terbuka dan pesan obrolan membatalkan pemesanan berbayar tanpa tanda kutip biaya; kira tertutup dan seorang pelanggan yang ingin membatalkan diberitahu ke telepon. connector_cancel secara tambahan dibutuhkan cancellation_quote dan order_cancel Dengan pemulihan OpsIQ tidak pernah membatalkan sebelum mengatakan apa biayanya. none.

fulfilment_presence

customer_present atau remote_deliveryApakah alamat email yang belum diverifikasi dapat menyebabkan biaya apapun. Seorang tamu hotel harus tiba, sehingga alamat salah salah mengarahkan tanda terima dan kamarnya masih ada; paket yang diposting, server yang diberikan atau link unduhan daun pada kekuatan alamat itu saja. Ini yang membuat pengaturan "verifikasi email" menjadi operator sama sekali, dan dinyatakan oleh Anda daripada yang dipilih oleh mereka - sehingga alasan hotel tidak pernah dapat diwariskan oleh penghubung bahwa kapal barang. remote_delivery.

minimum_assurance dan disclosure (opsional)

minimum_assurance memungkinkan Anda menuntut lagi Bukti identitas daripadaOpsIQmembutuhkan, tidak pernah kurang - sebuah bank membutuhkan langkah-up untuk transfer adalah melaksanakan kontrak. Setting itu juga menghilangkan kemampuan operator untuk melewatkan verifikasi untuk konektor Anda, karena keputusan risiko pedagang sendiri outlanks kenyamanan operator. disclosure ditampilkan wording sebelum tombol konfirmasi, untuk sebuah harga, biaya atau pendingin-off kanan Anda harus hadir; tanpa itu, aturan bisnis diselundupkan diperlukan Wording menjadi nama produk.

notify_flow

platform_automatic, platform_triggered atau noneKetikaOpsIQmengambil pembayaran cek anda sendiri tidak pernah berjalan, jadi apapun itu email tidak pernah menembak merekam tanda pembayaran yang dibayar; itu mewajibkan platform untuk memberitahu siapa pun. platform_triggered membutuhkan order_notify peran dengan pemulihan, dan OpsIQ hanya meminta setelah pembayaran reading-back membuktikan uang dicatat. Menghiasi none membuatOpsIQ-side konfirmasi wajib, karena jika tidak pelanggan membayar mendengar apa-apa. Default untuk none.

Kontrak yang sama, sembilan bisnis yang tidak berhubungan

Setiap kontrak menjawab dengan jujur untuk industri yang berbeda.OpsIQTidak tahu apa-apa tentang mereka.

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 yang diberikan ke platform

Setelah pembayaran Storefront asli secara aktif diverifikasi dan berkomitmen, OpsIQ emits payment.completed dengan order_id, payment_id/provider_ref, gateway, tepat amount_minor, ISO currency, pelanggan, baris item, saluran dan paid_atKonektor pedagang harus bertahan bahwa bukti melalui record_payment dan membacanya kembali; konektor hosted- checkout mengkonsumsi sendiri acara pembayaran otoritatif dan tidak boleh menerima pembayaran ganda menulis.

AI adalah seorang proposer, bukan sumber otoritas

Model dapat memilih suatu produk yang dideklarasikan dan kuantitas, tetapi tidak dapat memilih sebuah nama operasi, mint checkoutURLatau membuat kondisi pedagang dari teks. Pelanggan menerima kartu yang ditandatangani secara tepat dan harus menekan tombol konfirmasi. Konfirmasi tersebut terikat ke area kerja, konektor, item, kuantitas, tanda kutip, benang, dan kadaluarsa.

Pelanggan sosial tetap mengikuti arus yang sama tanpa pesan email

WhatsApp, Messenger, Instagram, Telegram, LINE, SMS dan X menggunakan akun saluran yang diverifikasi oleh penyedia sebagai identitas pelanggan. Proposal ditandatangani ke akun kanal itu dan konfirmasi masih berjalan melalui kutipan baru yang sama, stok, idempotensi, pembayaran dan kontrol pemulihan. Seorang pelanggan sosial menggunakan aksi konfirmasi satu kali yang tepat dalam percakapan mereka; prosa biasa seperti "ya" tidak pernah menjadi otoritas pesanan.

Sejarah pesan mengikuti link identitas yang tepat, tidak pernah menebak email

Perintah asli diindeks oleh sebuah identitas saluran yang aneh, sehingga AI dapat menjawab "di mana perintah saya?" tanpa meminta nomor email atau urut. Untuk riwayat toko terkoneksi, menghubungkan identitas kanal ke area kerja CRM/ catatan klien dan mengimplementasikan pencarian berotoritas pelanggan / urutan dalam konektor. Penyedia konteks pelanggan menerima taut yang tersimpan; mereka tidak harus memilih sebuah akun dari nama tampilan atau email yang mengetik ke percakapan. Dengan satu urutan yang cocok dengan jawaban AI secara langsung; dengan beberapa itu merangkum pencocokan dan menanyakan yang mana; dengan tak satupun ia mengatakan tidak ada riwayat terkait.

Membuat muatan universal: ruas diketik dan identitas server- dimiliki

Inti berisi tidak adaWHMCSHotel, SaaS, toko, bank, produk, rute atau cabang vendor. parameters adalah skema formulir pelanggan dan slot AI. Konektor pemesanan dapat mendeklarasikan tanggal dan tamu; koneksi penagihan dapat mendeklarasikan sebuah siklus; konektor perusahaan masa depan dapat menyatakan bidang sendiri aman.OpsIQmembersihkan kendali primitif dan mengirim nilai yang dikumpulkan hanya ke aksi konektor dipetakan.

Aksi kutipan diketik
{
  "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, set customer_ordering.identity_parameter ke parameter aksi yang menerima id pelanggan eksternal connector. Bidang ini tidak pernah ditunjukkan kepada pelanggan dan setiap nilai caller- disediakan dihapus;OpsIQHanya menyuntikkan id dari link konektor yang diverifikasi. Checkout tamu meninggalkannya kosong. Sebuah email diketik adalah bukti untuk pencarian tamu yang dinyatakan, bukan log masuk dan tidak membeli otoritas.

Domain yang dikelompokkan: tanda tangan - dalam akun pelanggan dan konfigurasi konektor milik dari ruang kerja portal grup -primary. Namun, tanda identitas harus ditandatangani untuk situs anggota yang tepat yang merepresentasikan widget, menggunakan rahasia webhook anggota tersebut.OpsIQverifikasi bahwa permukaan pertama dan hanya kemudian menyelesaikan perdagangan dan pelanggan terkait melalui kelompok utama. Jangan mengganti kunci situs anggota dengan kunci primer dan tidak pernah menyalin rahasia utama ke sebuah situs anggota.

Canonical amplop konektor harus kembali

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"}
  }]}
}
Kutipan
{
  "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"
  }
}

Respon pemeriksaan platform-keluar mengulangi kutipan kanonikal yang valid dan menambahkan HTTPS checkout_urlInti menyegarkan kutipan pada konfirmasi dan perbandingan mata uang, pemilihan total dan stabil persis. Konektor menerjemahkan platform respons ke dalam amplop ini; inti tidak pernah menterjemahkan bidang vendor atau konstruksi pedagangURL.

Buat sebuah operasi - buat gateway yang tersedia di toko asli dan obrolan

Kemampuan pembayaran saja tidak menempatkan gerbang di depan pelanggan. Gateway pembayaran Toko Asli blok dalam Reader Konektor. Ini menambahkan kontrak eksplisit dengan penuh hati, memetakan pembuatan dan pencarian pembayaran aktif, dan memuat daftar penyedia-host domain checkout. Setelah konektor dipasang, diaktifkan dan dipilih di bawah pengaturan Komerce, gerbang yang sama muncul di toko umum, Modal Store, client- chat keluar dan pemeriksaan otonom. Tidak ada operator adalah hardcode.

Kontrak gateway Toko Asli
{
  "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 checkout kanonikal

Peta aksi checkout checkout_url (Dan apabila langit dilenyapkan) yakni dicabut dari tempatnya sebagaimana dicabutnya kulit domba. session_idURL pasti HTTPS, tidak memiliki kredensial, dan cocok dengan host yang terdaftar.

Keluaran status Canonical

Aksi status melakukan pencarian dan peta yang baru untuk penyedia API paid sebagai boolean nyata, amount_minor sebagai integer, currency sebagai kode ISO tiga huruf, dan provider_refSebuah URL kembali, string query, muatan klien, atau konektor- yang diberikan "dikonfirmasi" instruksi tidak pernah pembayaran kebenaran.

Kontrak pengembalian opsional

Jika gerbang mendukung pengembalian dana, peta payment_refund dan aksi pemulihannya, penciptaan kembali secara ketat accepted dan completed bool plus provider_ref; pemulihan melakukan pencarian penyedia dan pengembalian statusTanpa kedua tindakan, OpsIQ tidak mengiklankan pengembalian dana konektor.

Siapa yang mengkonfirmasi perintah

Konektor tidak pernah menulisOpsIQstatus perintah.OpsIQdibandingkan jumlah yang dikembalikan dan mata uang persis dan catatan referensi penyedia; hanya kemudian melakukan core melakukan transisi provider- diverifikasi. Transfer bank manual tetap satu-satunya aliran agen bernama dapat menyetujui.

Dalam Pembangun Konektor, tik perdagangan, memetakan peran, dan mengatur baik Pesanan pelanggan toko yang terhubung, Gateway pembayaran Toko Asli, atau keduanya ketika konektor benar-benar menyediakan kedua kontrak. commerce_roles.jsonPenerbitan masih menggunakan review Marketplace normal dan proses tanda tangan; kontrak ini tidak pernah melewati verifikasi paket atau membuat konektor bukan uninstable. Verifikasi paket dengan tangan php tools/verify_commerce_contracts.php.
💡
Transportasi adalah http untuk sebuah API atau bridge untuk operasi bernama pada jembatan dikerahkan (lihat NO-APIpola di bawah). Peran adalah transpor-agnostik; waktu jalan hanya perlu transportasi yang dinyatakan sehingga dapat version- pasangan jembatan.
Konektor

Jual melalui percakapan TANPA koneksi: Aksi & Triggers

Kontrak perdagangan di atas tidak memerlukan paket konektor. Jika platform anda adalah milik anda - sebuah kantor lain, sebuah internalAPI, sebuah sistem tidak ada yang mengirimkan konektor untuk - Anda dapat mencapai sama menjual mesin dengan dua alat yang telah Anda gunakan untuk mengintegrasikan hal lain: Aksi gubahan (titik akhir HTTP, didefinisikan pada halaman) dan Triggers (event webhooks). Kontrak sama, kartu sama, jaminan identitas sama, kernel pembayaran sama, penerimaan yang sama. Satu-satunya hal yang hilang adalah paket, karena tidak ada kode partai ke tiga kalinya untuk menandatangani.

Bagaimana cocok bersama-sama

Anda membangun satu aksi kustom per peran perdagangan - masing-masing adalah titik akhir HTTPS polos di sisi Anda, didefinisikan di bawah & Otomatisasi AI→Aksi denganURL, header auth dan parameter. Kemudian anda menyimpan satu deklarasi yang memetakan peran untuk aksi tersebut. Dari saat itu toko anda muncul dalam percakapan persis seperti sebuah connector- didukung satu: tanda kutip AI dari Anda aksi kutipan, konfirmast card render, pelanggan memverifikasi email mereka, urutan panggilan kernel Anda perintah aksi dengan sebuah kunci idempotensi,OpsIQmengambil pembayaran melalui gerbang area kerja, dan Anda Catatan - pembayaran buku aksi itu.

Deklarasi

Simpan JSON ini sebagai pengaturan area kerja commerce_custom_integration (Pengaturan→konfigurasi lanjutan, atau melalui pengaturan RESTAPIIni adalah bentuk yang sama sebagai paket commerce_roles.json titik perdagangan, dengan action namai id aksi gubahan 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 ke konektor yang diaktifkan untuk dijual di bawah Pengaturan→Percakapan Klien→Jual melalui percakapan. Penyesuaian adalah re- check on setiap permintaan, dan menolak dengan alasan bernama daripada menyembunyikan toko Anda diam-diam: sebuah peran yang Anda inginkan dari mode sehingga memetakan ke nol, sebuah peran tulis tanpa aksi pemulihan (td15.7- sebuah tulisan yang hasil tidak dapat diminta kembali ditolak), sebuah aksi yang telah dihapus atau dinonaktifkan sejak Anda disimpan.

Apa yang harus dilakukan setiap tindakan

Kembalikan amplop konektor

Jawab {"success": true, "data": { ... }} - atau {"success": false, "error": "a sentence a customer may read"}Tindakanmu. jalur kesuksesan respon harus menunjuk amplop.

Kutipan: seluruh-secara total, dalam unit kecil

Kembali quote_id, product_name, quantity, unit_amount_minor, total_amount_minor, currency, selection, selection_summary, expires_atSemuanya dalam "total Anda adalah satu-satunya tokoh yang memindahkan uang" bagian di atas berlaku verbatim: pajak, biaya, dan pengganda pergi INTO total Anda, karena total Anda apa yang ditandatangani, ditampilkan dan diisi.

Urutan tercipta: hormati kunci idempotensi

Kau menerima idempotency_key, ditandatangani total_minor dan currency, yang diverifikasi customer_email, dan parameter kutipan anda sendiri. Simpan kunci dengan urutan; jika anda telah membuat perintah untuk itu, kembalikan urutan tersebut sebagai ganti yang kedua. Verifikasi uang - jika harga sistem anda berbeda dari total yang ditandatangani, tolak secara ulang daripada overload. Kembalikan sebuah nilai yang belum terukur. reference Platform Anda mengakui.

Pemulihan: jawaban tentang One write

order_by_key menerima kunci idempotensi dan jawaban {"found": true, "order": {...}} atau {"found": false}. ditemukan: palsu adalah janji -OpsIQmungkin mencoba lagi tulisan pada kekuatan itu. Sebuah feed status atau daftar resent- perintah bukan jawaban tentang satu menulis.

Pembayaran rekaman: path penyelesaian anda sendiri

Menerima id transaksi gateway sebagai kunci idempotensi ditambah referensi urutan Anda, setelahOpsIQMenandai perintah dibayar melalui logika platform Anda sendiri - kebakaran email Anda sendiri, mengurangi saham Anda sendiri. Return platform_notified: true Jika platform Anda email pelanggan itu sendiri.

Masukan kartu berasal dari parameter aksi Anda

Parameter apapun yang Anda nyatakan pada aksi QUOTE Anda (di luar parameter identitas) yang belum dikumpulkan AI pada kartu konfirmasi sebagai masukan pelanggan mengisi sendiri - domain, tanggal, kursi. Label mereka dengan baik; label adalah apa yang pelanggan baca.

Mendengar penjualan Anda sendiri

Dua peristiwa kebakaran di bus bersama, sehingga webhook dan otomatisasi Anda mendengar setiap chat sale dimanapun itu dijalankan:

commerce.order.created

Saat perintah mendarat di sisi pedagang, sebelum pembayaran - referensi, konektor (atau custom_commerce), jumlah, mata uang, email pelanggan, benang id.

commerce.payment.confirmed

Tepat sekali setiap urutan, ketika gerbang secara aktif memverifikasi pembayaran. Ini mengendarai klaim yang sama yang mencegah duplikasi penerimaan, sehingga tidak dapat double-api webhook Anda.

Kapan lulus ke konektor

Integrasi kustom adalah konfigurasi area kerja: ia melayani toko ANDA, di ruang kerja Anda. saat Anda ingin mendistribusikan integrasinya - area kerja lain, pasar, versi, penandatanganan, instalasi dibayar - paket tindakan yang sama dan deklarasi yang sama sebagai konekktor. Kontrak tidak berubah; hanya pembungkus lakukan.

Konektor

Hubungkan platform yang memiliki NO API (pola jembatan)

Banyak platform nyata kapal tidak RESTAPISebuah hotel CMS, sebuah sistem penagihan tua, alat internal bespeaking kau masih bisa menulis lengkapOpsIQKonektor untuk satu orang: penghubung mengirimkan sebuah berkas PHP tunggal yang operator itu masukkan ke dalam webroot publik mereka sendiri, dan file ISAPIHalaman ini adalah pola keseluruhan, dengan aturan yang membuatnya aman untuk dijalankan dan alasan di balik setiap aturan.

Bentuk itu

Konektor normal memanggil API orang lain. Konektor jembatan membawa sendiri. Tidak ada yang berubah lagi: aksi yang sama, penyedia konteks yang sama.

1
Anda menulis satu file 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 mengkopi ke dalam webroot mereka

Di samping aplikasi . ph.. No platform kode telah dimodifikasi, tidak ada plugin yang terpasang, tidak satupun untuk mempertahankan di seluruh upgrade platform.

3
Panel penghubung memberikan mereka file

Anda settings.json deklarasi webhook_help.snippet_templateHalaman konektor menjadikannya sebagai berkas yang dapat disalin dengan pengaturan langsung mereka telah diganti, jadi tidak ada yang perlu disunting.

4
OpsIQ menyebutnya server server- to-server

Client.php Anda mengirimkan permintaan GET dengan kunci bersama dalam X-Opsiq-Bridge-Key header. basisURLsetting adalah akar situs platform.

Pembangun Konektor bisa membuat ini untukmu sekarang.API"profile (atau set data access to bridge) dan ia memancarkan berkas bridge, snippet panel yang cocok dan aksi yang ditulis dan tulis di dalamnya - untuk aplikasi Laravel membaca .env, untukWordPressmembaca wp-config.php, atau dengan kredensial Anda paste dalam untuk apa pun. Mode bridge membetulkan otentikasi keOpsIQprotokol bridge: konektor aman menghasilkan api_key ketika diaktifkan, mengirimkannya sebagai X-Opsiq-Bridge-Key, dan mengikat bahwa nilai disimpan yang sama ke OPSIQ_BRIDGE_KEY dalam berkas yang dapat disalin. Penulis tangan hanya ketika platform anda bukan satu-satunya, atau ketika anda memerlukan perilaku jembatan yang dihasilkan tidak mencakup. Jembatan ditulis tangan aman dari penyihir: itu hanya menimpa sebuah file bridge yang membawa penanda sendiri.
💡
Segala sesuatu di halaman ini ditampilkan dalam PHP melawan MySQL, karena itu adalah implementasi referensi dan kombinasi hanya paket pipeline sepenuhnya mendukung. Pola itu sendiri adalah langusa-agnostik dan agnostic-agnotis: lihat "Jembatan dalam bahasa lain dan database lainnya" untuk gerbang di Node, Python, Go, Ruby, 'Nev, dan Java, permintaan introspeksi untuk PostgreSQL, SQL Server, SQLite dan Oracle, dan MongoDB ekuivalen - bersama dengan batasan kemasan yang menentukan bagaimana jembatan PHP tidak mencapai operator.

Model keamanan, dan mengapa setiap aturan ada

Berkas ini berada di dalam Webroot publik di belakang satu kunci yang dibagi. fakta tunggal itu mendorong setiap aturan di bawah. Jangan santai salah satu dari mereka untuk membuat jembatan anda lebih sederhana.

Penelepon tidak pernah memasok SQL

Bukan sebuah clause WHERE, bukan sebuah fragmen ORDER BY, bukan hanya ini sekali parameter query mentah. Nama panggilan sebuah tabel, kolom dan nilai; file Anda membangun pernyataan. Saat seorang penelepon dapat berkontribusiSQLteks, salah satu kunci terbagi menjadi eksekusi basis data sewenang-wenang.

Nama tabel dan kolom divalidasi terhadap information_schema

Pengenal tidak dapat terikat sebagai parameter, jadi mereka harus diperiksa. Baca tabel sebenarnya dan daftar kolom untuk basis data ini dan tolak apapun yang tidak ada di dalamnya. Sebuah identifier yang bukan obyek nyata dari skema ini maka tidak dapat mencapai permintaan sama sekali - yang membuatnya aman untuk mengekspos setiap tabel.

Setiap nilai adalah parameter terikat

Tanpa pengecualian, termasuk nilai di dalam pencarian. Pengidentifikasi yang valid ditambah nilai terikat adalah pasangan yang membuat total permukaan dan nol permukaan injeksi.

Pembacaan universal, tulis allow- listed

Lihat blok berikutnya, ini adalah aturan orang yang paling ingin dilewati.

Kolom rahasia dihapus saat dibaca dan ditolak saat menulis

Cocokkan pada nama kolom: sandi, remember_token, rahasia, api_key, private_key, garam, token. Ganti nilai dengan placeholder saat keluar. Totalnya sama sekali dalam perjalanan - menulis sebuah hash sandi mentah bukan operasi, ini adalah pistol footgun. Kirim operator ke aliran password platform sendiri.

Hapus baris tunggal, menurut kunci primer

Tidak pernah menghapus massal, tidak pernah menghapus dengan filter. Sebuah penghapusan besar adalah bagaimana database mati. Jika seseorang benar-benar membutuhkannya, mereka dapat melakukannya di platform.

Pembaca dikerumuni

Jepit parameter batas dengan langit-langit keras. Sebuah query pelarian tidak boleh dapat membuang basis data melalui pesan obrolan.

Gagal ditutup sampai kunci ditata

Jawaban bridge yang belum dikonfigurasi403Jembatan yang sangat membantu sebelum dikonfigurasi adalah jembatan yang membantu orang asing.

Konstant- waktu perbandingan kunci, kunci dalam header

hash_equals, tidak pernah =. Kuncinya masuk X-Opsiq-Bridge-Key, bukan string query, sehingga tetap diluar dari log akses, proxy log dan header Referer.

GET HANYA

Satu metode, satu bentuk, tidak ada yang menyelundupkan tubuh.OpsIQadalah satu-satunya pemanggil.

Baca universal, tulis allow-listed - dan mengapa

Ini adalah aturan yang akan diperdebatkan, jadi ini alasan penuh. Asisten harus dapat melihat seluruh platform: itulah yang membuatnya berguna, dan pembacaan tidak bisa menghancurkan apa-apa. Penulis berbeda. Berkas ini duduk di web umum belakang One berbagi kunci. Jika kebocoran kunci, permukaan penulisan tak terbatas membuat kebocoran setara dengan kendali basis data lengkap - sebuah pengguna baru, tabel booking kosong. Daftar yang dibocorkan berarti kunci yang masih belum bisa mencapai sebuah operator yang difungsikan.

⚠️
TheOpsIQKartu persetujuan yang membuka kunci, bukan kunci. admin yang mengklik Ijinkan pada aksi merusak adalah kontrol atas asisten. Ini bukan kendali atas siapa pun yang memegang kunci bridge.
Operator-menghadap tombol, dari jembatan 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 rincian di bawah ini adalah mudah untuk salah. Nama tabel telah tiba RESOVED, membawa prefiks tabel instalasi, sementara operator menulis allow- list tidak terpratment karena itulah yang mereka alami akan mengetikkan. Bandingkan kedua cara atau memasang prefix diam-diam memungkinkan apa-apa dan setiap istirahat tulis. Dan penolakan harus menjelaskan sendiri, karena orang membacanya adalah sebuah admin dalam jendela obrolan, bukan pengembang dengan jejak stack.

Periksa daftar allow-, dari verbatim marketplace_connectors/botble/ bridge /opsiq-botble-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);
};

Pintu gerbang, penuh

Empat cek, dalam urutan ini, sebelum sesuatu menyentuh data. Salin pesanan serta pemeriksaan.

Empat gerbang cek, 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. */

Validasi identifier terhadap information_schema

Ini adalah bagian yang mengubah "asisten dapat mencapai tabel apapun" dari sembrono menjadi aman. Selesaikan nama tabel penelpon terhadap skema nyata, mentolerir prefiks tabel hilang atau ekstra, dan kembali kosong untuk apa saja.

Validasi identifikasi dan redaction, kata kerja 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;
};

Sebuah op baca dan op menulis, lengkap

Perhatikan apa yang terikat dan sah. Kolom penyaringan diperiksa terhadap daftar kolom nyata dan kemudian interpolasi sebagai sebuah identifier; nilainya terikat. Batas dijepit. Baris disunting di jalan keluar. Pemutakhiran menolak kunci primer dan kolom auth apapun, dan perangko updated_at ketika meja memiliki satu.

Baca tabel apapun - identifikasi tervalidasi, nilai terikat, baris yang dipotong
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 - allow-terdaftar tabel, menolak kolom auth, baris tunggal oleh kunci primer
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)),
    ]]);
}

Surviving schema difference

Versi plaform berbeda. Kolom berpindah, berganti nama, atau tidak ada. Jembatan yang mengasumsikan satu skema bekerja pada satu instalasi. Introspeksi dan beradaptasi: pilih hanya kolom yang ada di sini, mentolerir awalan tabel, dan mencoba pengejaan yang masuk akal dari referensi.

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 jembatannya sebuah op = diag yang melaporkan STRUCTURE saja - tabel mana yang diselesaikan, kolom yang telah ada tabel utama, dan SHAPE dari referensi terbaru dengan setiap digit bertopeng. Adalah key-gated seperti segala sesuatu yang lain, dan ternyata "lookup tidak menemukan apa-apa" dari tiket dukungan menjadi sepuluh-kedua jawaban. Jangan biarkan itu kembali catatan nyata.

Galat seragam, dan perangkap 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 ditemukan dan tidak cocok harus identik

Pada permukaan pencarian, referensi yang tidak ada dan sebuah referensi yang bukti tidak cocok harus menghasilkan respon SAME jawaban yang berbeda mengubah jembatan Anda menjadi oracle yang menegaskan mana referensi itu nyata, yang merupakan ekspor bebas pelanggan bagi siapa pun pasien.

Jangan pernah membocorkan alasan untuk pengunjung

Jembatan bisa tepat denganOpsIQApa yang sampai pengunjung diputuskan olehOpsIQ, Dalam satu penolakan tetap.

Berkas yang dapat disalin di panel konektor

Operator tidak pernah membuka repositori Anda. Mereka membuka panel konektor diOpsIQdan tekan Copy. salinan itu berasal dari pengaturan.json, dan itu harus menjadi program yang sama sebagai jembatan / * .php.

settings.json - entri panel untuk konektor 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.

snippet_bindings bertahan regenerasi

Uratkan setiap tugas rahasia secara eksplisit. Alat sinkronisasi membuat ulang salinan panel dari jembatan yang dikirim lalu menyimpan kembali OPSIQ_BRIDGE_KEY = {{setting:api_key}} dari pengikatan ini. Tanpa itu, sebuah peningkatan dapat secara setia menyalin berkas paket tanpa kunci dan dengan diam-diam menghapus placeholder kunci operator yang bisa disfilleshing. Conektor Builder memancarkan pengaitan ini secara otomatis untuk paket bridge yang dihasilkan.

Pemegang tempat lain diganti server- sisi

Terbukti dari itu,{webhook_url}, {webhook_path}, {webhook_secret}, {site_key}, {base_url}dan{slug}diisi sebelum panel melihat snippet.

webhook_help mungkin satu objek atau daftar

Daftar memberikan beberapa snippet dalam satu panel, misalnya berkas bridge dan kait relay terpisah.

🚫
Jangan mempertahankan snippet dengan tangan. Berkas bridge dan salinan panel adalah dua salinan dari satu program, dan mereka akan hanyut - jembatan telah ditingkatkan dan panel nya tidak, jadi siapa pun yang menginstal dan menyalin dari panel memasang jembatan lama dan diam-diam kehilangan setiap kemampuan baru. Tidak ada terdeteksi: konformance berlalu, tanda tangan lulus, tes lewat.
Tetap identik dengan dua salinan itu.
# 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 jembatan harus mengekspos

Operasi yang dibentuk dan permukaan data universal, bersama-sama. Bentuk yang kembali rapi, tujuan-dibangun jawaban untuk pertanyaan orang benar-benar bertanya; yang universal mencakup segala sesuatu yang lain sehingga asisten tidak pernah terjebak.

Baca berbayang

statistik, daftar objek utama dengan penyaring, satu objek dengan baris terkait, katalog dari apa yang dijual, pencarian pelanggan dengan sejarah. Ini memberikan AI jawaban yang baik dalam satu panggilan bukan lima.

Penulisan bentuk

Dua atau tiga perubahan negara yang penting - set status, batalkan. Simpan nilai yang diterima semua terdaftar.

Perdagangan yang diketik

Untuk platform yang dapat dijual mengekspos katalog dibangun, kutipan, checkout / order dan operasi bukti yang telah di jual, kemudian memetakan mereka commerce_roles.json dengan transport: bridgeJangan pernah memetakan sebuah peran perdagangan tulis ke universal record. create / update permukaan.

Penemuan Universal

tabel (dengan jumlah baris) dan menjelaskan (kolom, tipe, kunci primer, plus tanda dapat dibaca dan writable per kolom). Ini adalah bagaimana asisten belajar platform yang tidak anda antisipasi.

Baca dan tulis universal

query, record. get, record. create, rekor. update, catat. delete. setiap salah satu dari mereka validasi seperti yang ditampilkan di atas.

Identitas, sebelum gerbang kunci

Probe identitas dipanggil oleh BROWSER milik ADMIN 's, sama dengan asalnya, sehingga mereka tidak dapat mengirim header kustom. Otentikasi mereka adalah sesi platform itu sendiri. Taruh mereka di depan gerbang kunci, jauhkan mereka dari semua data rekaman, dan jangan biarkan mereka kembali sebagai rahasia. Lihat halaman identitas konektor.

Diagnostik

op=diag, structure only, masked.

Peta peran perdagangan jembatan
{
  "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"
    }
  }
}
💡
Peran kanonikal mengontrol urutan dan otoritas; operasi jembatan menyimpan muatan yang diketik oleh platform.WHMCSmungkin memerlukan klien yang ada atau koneksi yang dimiliki signal, dan platform SaaS mungkin membutuhkan siklus penagihan. Core tidak pernah mengkodekan bidang tersebut.
⚠️
record_payment bukan sebuah shortcut mark paid. Terima hanya server-diverifikasi bukti penyedia: urutan yang tepat, pedagang, jumlah, jumlah mata uang ISO, referensi operator, seprai timestamp dan idempotency baru diverifikasi. Persist melalui pembayaran / faktur platformAPI, kemudian kembali perintah yang berwenang atau faktur baca-kembali. sebuah hasil yang tidak diketahui harus menjalankan pemulihan sebelum mengulang.
💡
Sebuah connector baca-saja tidak memerlukan allow- list sama sekali. Jika platform anda hanya pernah menjawab pertanyaan, kirimkan sebuah jembatan tanpa operasi tulis dan seluruh kelas menulis risiko menghilang. Tambahkan menulis ketika seseorang meminta mereka.

Checklist sebelum Anda mengirim jembatan

Jembatan menolak segala sesuatu tanpa kunci set

Uji itu. Ubah nama konstanta untuk kosong dan konfirmasi setiap jawaban op403.

Kunci yang salah ditolak dalam waktu konstan

hash_equals, dan kunci hanya dibaca dari header.

Nama tabel yang dibuat-buat ditolak

Dan nama tabel yang sebenarnya dengan awalan yang salah masih memecahkan.

Kolom sandi tidak pernah muncul dalam pembacaan

Dan sebuah tulisan yang menyebutkan nama seseorang ditolak dengan penjelasan.

Sebuah tulis ke tabel di luar allow- list ditolak

Dengan pesan yang memberitahu operator bagaimana cara memperlebar itu.

Snippet panel cocok dengan berkas bridge

alat php / sync_connector_bridge_snippets. Laporan itu langkah.

Reinstall konektor tidak cukup

Jika paket Anda mengirimkan berkas bridge, operator meningkatkan konektor harus ALSO menyebarkan file itu ke dalam webroot mereka. Katakanlah dalam badan panel dan dalam CHANGELOG Anda, setiap rilis.

Konektor

Mencabut kerangka platform dari jembatan

Jembatan yang hanya membaca dapat berbicara SQL. Sebuah jembatan yang CREATES hal-hal pada platform (sebuah pesanan, pemesanan, faktur dibayar) harus pergi melalui platform sendiri lapisan aplikasi, dan boot lapisan tanpa kepala adalah di mana setiap kegagalan halus dalam pola kehidupan ini. semua di bawah ini belajar cara keras pada integrasi hidup, setiap aturan terhadap cacat nyata yang menghasilkan kesalahan di mana saja.

Baris dalam basis data bukan perintah

RAW INSERT create a shadow record

Baris ini muncul, admin mendaftarkannya, dan itu masih bukan sebuah catatan platform percaya bahwa ia dibuat: tidak ada nomor referensi asli, tidak ada model kait, tidak memiliki acara, tidak perlu faktur, tidak menggunakan email pelanggan, tidak bekerja-menghadap link. Pelanggan mengutip sebuah referensi platform yang tidak pernah diberikan kepada staf yang tidak dapat menemukannya. Buat melalui layanan sendiri platform; jika hanya mengekspos layanan pembayaran posting, membuat grafik yang diharapkan dan menyerahkan di jahitannya mendefinisikan.

Jangan pernah mengimplementasikan ulang penontonnya

Dua contoh dari format referensi membuatnya terlihat mudah untuk mereproduksi, dan memproduksinya adalah bayangan yang sama - menulis satu tingkat ke bawah: hari platform mengubah skema, setiap salah catatan Anda dan tidak ada yang memperingatkan Anda. Panggil generatornya (refleksi mencapai yang non-static), dan baca nilai tersimpan kembali daripada mempercayai apa yang Anda kirim.

Kolom platform menjaga arti platform

Sebelum Anda menyimpan sesuatu dari Anda dalam kolom platform, temukan setiap pembaca. Kolom yang bernama seperti slot bebas dapat berupa bantalan: pada integrasi referensi, transaction_id ternyata menjadi token pelanggan yang diemail "view your booking" link menyelesaikan melalui: sebuah idempotency dicerna disimpan di sana diam-diam memecahkan setiap hubungan tamu. Simpan pembukuan Anda dalam meja yang dimiliki dengan jembatan: UNIQUE (operasi, idempotency_key) adalah penjaga replay, kendala menolak kembar concurt, dan pencarian pemulihan membaca tabel yang sama dengan menulis penciptaan. Buat tabel itu sebelum awal Transaktion: MySQL DDL melakukan transaksi terbuka secara implisit.

Kejadian, pendengar dan perangkap dua kali email

Baca sumber layanan sebelum mengirimkan kejadiannya

Jika platform service yang anda sebut telah mengirimkan acara, kirimkan sendiri kirim dua email konfirmasi pelanggan dan hasilkan dua faktur. Jika tidak ada yang mendengarkan, membuang mengirim tidakada. baik kegagalan menimbulkan kesalahan. Menghidupkan kembali metode, mengiris baris sumbernya, dan membaca apa sebenarnya: sebuah nama-berdasarkan menebak dan bahkan regex di atas tubuh keduanya mendapatkan kesalahan ini sebelum sumber menyelesaikannya.

getlisteners () menyembunyikan kebenaran; getRawsteners

Pendengar kelas bungkus Laravel dalam penutupan, jadi getlisteners () melaporkan [email protected] untuk semuanya. Dapatkan RawWage Listeners [) nama kelas aktual. Jangan pernah mengirim acara yang pendengar tidak bisa Anda sebutkan.

ShouldAnue tidak berarti "berjalan kemudian"

Dengan antrian = sync (baku pada banyak instalasi produksi) pendengar yang antri menjalankan INLINE dalam permintaan bridge anda. Konteks boot anda IS konteksnya render: setiap registrasi atau URL cacat dalam boot tanah di inbox pelanggan. Periksa config ('queeu.default') sebelum penalaran tentang mana sesuatu berjalan, dan lihat dalam pekerjaan /failed_jobs Sebelum mengasumsikan seorang pekerja terlibat.

Penjaga mencoba kembali dengan keadaan platform sendiri

Sebuah layanan yang mengirimkan tidak kondisional harus disebut persis sekali. Tanda yang tidak dapat drift adalah platform negara rekaman sendiri (hanya panggilan sementara catatan masih tertunda), bukan paralel "dikirim" bendera Anda yang dapat tidak setuju dengan itu.

Boot tanpa kepala bukan boot web

Register apa yang register web boot

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.

Pin setiap URL root, bukan hanya router

Titik permintaan yang tertangkap pada script bridge Anda, sehingga rute (), url() dan aset () menghasilkan site.com/ publik /opsiq-bridge.php / checkout / TOKEN: link pelanggan melalui sebuah JSON titik akhir. forceRootUrl (config ('app.url') memperbaiki generator; disket STORAGE memiliki akar sendiri, sehingga logo email tetap rusak sampai filstems.disks.public.url diset juga (itu memecahkan lazily, jadi mengaturnya di boot works, dan hanya ketika kosong atau script-relative: sebuah operator CDN URL (Dan sekali-kali bukanlah kamu yang berkuasa) yang mampu menolak azab dari diri kamu sendiri.

Commit sebelum Anda menyerahkan

Layanan platform dibaca melalui koneksi mereka sendiri dan tidak dapat melihat transaksi terbuka Anda. Disebut sebelum komit, layanan pembayaran post- menemukan tidak ada pembayaran selesai, diam-diam meninggalkan catatan yang belum dibayar, dan masih kebakaran acara, sehingga pelanggan diemail tentang catatan platform berpikir belum terbayar. Commit grafik, kemudian panggilan.

Kejujuran aturan

Tidak ada bayangan fallbacks

Jika jalur asli tidak dapat dicapai, menolak dengan galat yang dapat diulang sebelum ada uang bergerak. Jangan pernah membuat referensi, jangan ubah status untuk membuat catatan terintegrasi seperi selesai. Pembayaran yang diverifikasi yang pemrosesan asli gagal pergi ke rekonsiliasi sebagai needs_attention: uang itu nyata, negara ini jujur "dibayar, belum diproses".

Laporkan fakta, bukan deklarasi Anda

"Layanan berlari" dan "pelanggan diberitahu" adalah fakta yang berbeda: integrasi referensi dikirim lengkap - mencari email dengan setiap bidang kosong sementara bendera mengatakan benar. Kembalikan mereka secara terpisah (pemrosesan selesai, pemberitahuan mencoba), terus lama panggilan platform_notified yang memaksa OpsIQ konfirmasi fallback ketika platform tidak proses, dan tidak pernah mengklaim pengiriman: sebuah inbox tidak dapat diamati dari server.

Mengukur, kemudian menulis

Kapal a read- hanya kemampuan probe di jembatan: Keberadaan kelas, metode tanda tangan, potongan sumber metode yang Anda berniat untuk memanggil, pendengar mentah, driver antrian, dan (ketika pertanyaan dapat dijawab dengan menyebut fungsi tidak berbahaya) panggilan hidup tentang satu email kosong mati terhadap pengukuran sebelum sumber menetap itu. Sebuah putaran rokell biaya salinan berkas; yang salah menulis pada platform hidup biaya pelanggan.

Konektor

Jembatan dalam bahasa lain dan basis data lainnya

Pola jembatan bukanlah pola PHP.OpsIQpanggilan adalah titik akhir HTTP, sehingga berkas dapat Node, Python, Go, Ruby, .NET atau Java, dan toko di belakangnya dapat berupa apapunSQLmesin atauMongoDBApa yang berbentuk PHP-adalah packing pipeline, dan batasan itu menentukan bagaimana jembatan Anda mencapai operator. Baca bagian pengiriman pertama: ini adalah bagian yang mengejutkan orang.

Apa yang sebenarnya dibutuhkan oleh konektor

Ini adalah seluruh kontrak Tidak ada di dalamnya nama bahasa.

Transportasi

HTTPS, satu permintaan pencarian setiap panggilan, tak ada tubuh, tak punya metode lain.

Otentikasi

Sebuah rahasia bersama di X-Opsiq-Bridge-Key permintaan header, dibandingkan dalam waktu konstan. Bukan sebuah parameter query, bukan cookie, bukan Auth Dasar.

Parameter

Tali Query. op nama permukaan, do names operasi, sisanya adalah bahwa argumen operasi.

Respon

JSON. {"success":true,"data":{...}} atau {"success":false,"error":"snake_case_reason"}Konten-Tipe aplikasi / json, dan tidak ada caching.

Kode status

200sukses.403kunci tidak dikonfigurasi atau salah,404tidak ditemukan,405metode yang salah,400argumen buruk,501tidak didukung pada skema ini.

Itu saja

Tidak ada kerangka kerja, tidak ada waktu-jalan, tidak akan ada OpsIQ perpustakaan di sisi Anda.

Pengiriman: apa yang mungkin hidup di jembatan /, dan apa yang tidak boleh

Paket yang ditandatangani mencakup daftar ekstensi berkas yang tetap, dan sebuah file di luar daftar yang ditinggalkan dari ZIP. Sebuah jembatan dalam bahasa yang tidak ditutup karena itu tidak dapat mengirimkan paket - tetapi tidak bisa lagi hilang pada Anda. Sejak itu juga, jembatan dalam sebuah bahasa tidak dapat mencakup dalam paket tersebut - tapi tidak dapat hilang lagi pada Anda juga.26Agustus2026sebuah berkas in bridge/ bahwa paket akan drop adalah sebuah kegagalan konformance keras, sehingga paket menolak untuk lulus daripada memasang dengan tidak ada jembatan di dalamnya.

Bagaimana jembatan / folder diperlakukan pada waktu bangun
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 - sepenuhnya didukung

Kapal berkas di ZIP yang ditandatangani, dan verifikasi snippet memuat salinan panel Anda secara identik dengan itu, mana dari dua itu. Cek drift membaca setiap berkas dalam bridge /, bukan hanya PHP yang ada, jadi jembatan dengan panel yang basi gagal membangun baik bahasa.

Segala sesuatu yang lain - memberikan melalui panel saja

Snippet panel adalah teks biasa tanpa tahu bahasa apa yang digunakannya, sehingga bekerja untuk setiap stack. Masukan seluruh program dalam webhook_help.snippet_template, nama berkas dalam snippet_filename, dan JANGAN meninggalkan salinan di bridge / - konformance akan menolak paket daripada kapal itu berongga. Katakan jelas dalam webhook_help.body bahwa operator menyalin file ini daripada mendapatkannya dari paket.

Jika kau benar-benar membutuhkan bahasa lain dalam paket

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 berkas di webhook_help.snippet_filename kapan saja paket Anda kapal lebih dari satu jembatan. Itulah bagaimana verifikasi tahu mana jembatan salinan panel milik; tanpa itu, pasangan ambigu dilaporkan sebagai peringatan konformance dan bahwa snippet dibiarkan tidak diperiksa.
⚠️
Titik dari drift check adalah bahwa sebuah file bridge dan salinan panel adalah dua salinan dari satu program dan WlLL diverge. Lebih baik diregenerasi daripada edit-tangan: php tools/sync_connector_bridge_snippets.php --apply, kemudian kembali menandatangani paket.

Gerbang, dalam enam bahasa

Empat pemeriksaan yang sama dalam urutan yang sama di mana-mana: gagal ditutup tanpa kunci, satu metode, terus menerus perbandingan kunci dari header, kemudian menghubungkan. Satu-satunya perangkap nyata adalah perbandingan, dan itu adalah perangkap yang berbeda dalam setiap bahasa.

⚠️
Bandingkan SHA-256pencernaan dari dua tombol daripada kunci sendiri. Adalah benar dalam setiap bahasa, dan menghindari fakta bahwa beberapa komparator waktu baik membuang atau kebocoran pada panjang tidak cocok - Node 's timingSecual meningkatkan sebuah RangeError ketika buffer berbeda dalam panjang, yang ternyata kunci salah menjadi500bukan sebuah403.
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,. T 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)));
}

Validasi identifikasi pada setiap mesin basis data

Properti keselamatan tidak berubah: tabel atau nama kolom yang diberikan oleh penelepon harus diperiksa terhadap skema sebenarnya sebelum interpolasi, dan setiap nilai harus parameter terikat. Hanya permintaan introspeksi, karakter kutipan dan klausul paging berbeda.

MySQL dan MariaDB

Tabel: SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?Kolom: sama melawan information_schema.COLUMNS dengan AND TABLE_NAME = ?Kutipan dengan backticks, menggandakan setiap backtick dalam Halaman dengan LIMIT n OFFSET m.

PostgreSQL

Sama information_schema tampilan, nama huruf kecil, WHERE table_schema = $1 (biasanya public). Kutipan dengan kutipan ganda, gandakan setiap kutipan gkau didalam halaman dengan LIMIT n OFFSET m. Perhatikan aturan lipatan: identifikasi yang tidak dikutip dilipat ke kasus lebih rendah, jadi bandingkan case- insensitive ketika Anda menyelesaikan sebuah nama.

Server SQL

INFORMASI sama dengan pandangan SKEMA. Kutipan dengan kurung persegi, gandakan setiap kurung penutup di dalamnya. Page membutuhkan 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_%'Kolom: SELECT name FROM pragma_table_info(?) - gunakan bentuk tabel itu, karena telanjang PRAGMA table_info(x) pernyataan tidak dapat mengambil parameter terikat dan mengundang interpolasi string ada persis lubang yang Anda coba untuk menutup. Kutipan dengan kutipan ganda. Halaman dengan LIMIT n OFFSET m.

Oracle

Tabel: SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = :owner; kolom dari ALL_TAB_COLUMNSKutipan dengan kutipan ganda, dan ingat lipatan identifier yang tidak dikutip ke kasus UPPER, kebalikan dari PostgreSQL dengan OFFSET :o ROWS FETCH NEXT :n ROWS ONLY pada 12c dan kemudian.

MongoDB

Tidak ada SQL, jadi tidak ada interpolasi identifier dan tidak ada parameter terikat - disiplin yang berbeda untuk tujuan yang sama.

Kuiri introspeksi per mesin
-- 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, lalu gunakan nama RESOLVED. Jangan pernah lewati ejaan penelepon ke daftar permintaan bahkan setelah memeriksanya - lihat nama asli di daftar yang akan Anda baca dari skema dan interpolasi itu. Biayanya kosong dan menutup jarak antara "nama ini cocok dengan sesuatu" dan "ini adalah nama yang akan saya jalankan".

MongoDB: aturan yang sama, tanpaSQL

Tidak ada string query untuk disuntikkan, sehingga orang menganggap tidak ada yang perlu dijaga. Ada: dokumen filter. Passing caller- diberikanJSONLangsung ke find() Biarkan penelepon mengirim {"$ne": null} atau {"$gt": ""} dimana anda mengharapkan nilai, dan dengan diam-diam pilih setiap dokumen. Bangun saringan sendiri.

MongoDB - daftar koleksi-allow-, filter kulit kepala-dipaksa, proyeksi sebagai redaction
// 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 berasal dari listCollections

Itu adalah skema informasi Anda. Selesaikan ejaan penelepon terhadap itu dan gunakan nama yang terselesaikan.

Memaksa setiap nilai filter ke skalar

String () atau Nomor () di sekitarnya adalah pertahanan terhadap injeksi operator. Sebuah dokumen yang Anda harapkan sebuah nilai sama dengan NoSQL dari kutipan nyasar.

Proyeksi adalah aturan redaction

Termasuk bidang yang berbentuk rahasia dalam proyeksi sehingga mereka tidak pernah meninggalkan server, daripada menghapusnya dari hasil setelahnya.

Hapus dokumen tunggal yang tersisa menurut _id

deleteOne dengan _id yang terpecahkan. Jangan pernah deleteMany, dan jangan pernah filter yang dipengaruhi oleh pemanggil.

Penulis tetap allow- terdaftar

Sama penalaran sebagaiSQL: nama koleksi menulis dapat menyentuh, dan menolak sisanya dengan penjelasan.

Endpoint identitas dalam bahasa lain

Probe identitas adalah bagian lain dari sebuah jembatan, dan juga HTTP blok penandatanganan identik dalam setiap bahasa: base64url muatan,HMAC-SHA256 string itu, bergabung dengan titik.

Jangan tulis ini dari awal. Pengaturan, Dukungan Portal membawa rute per bahasa untuk portal (satu-waktu, dua menit token). Site jarak jauh, situs Anda, Codes, C. Kenali log-in pelanggan otomatis membawa versi obrolan per bahasa (token satu-jam ditambah penyegaran). Ambil tanda tangan dari rasa yang cocok dengan tumpukan Anda.
Apa yang harus diubah ketika Anda menggunakannya kembali

Mereka snippets mint tanda handoff PORTAL, yang sengaja stricter: ia membawa jti dan single_use:benar dan hidup tentang 120 detik karena perjalanan dalam URLSebuah jembatan atau token identitas widget tidak membawa keduanya dan menggunakan exp lagi, menit ke jam.

Apa yang tetap sama

site_key, iat, exp dan tingkat atas terotentikasi: true, plus sebuah admin atau pelanggan subjek dengan id dan sebuah nama pengguna atau email. Klaim, tanda tangan sama, rahasia yang sama.

Kedua bentuk token memverifikasi

Tiga bagian JWT ditandatangani HS256 bekerja, dan begitu juga dua bagian muatan base64url ditambah hex HMAC bahwa PHP mereferensi emits. Gunakan mana perpustakaan bahasa Anda membuat alami - perpustakaan JWT biasanya jalan yang lebih pendek di luar PHP.

Never mint itu di browser

Benar dalam setiap bahasa, tanda tangan klien berarti mengirim situs rahasia kepada setiap pengunjung.

Memilih, jujur

Platform ini PHP

Tulis jembatan di PHP, kapal dalam paket, itu dibor, dan dapat boot kerangka platform sendiri untuk membaca sesi langsung untuk probe identitas.

Platform ini Node

Sebuah kapal jembatan . js, tanda-tanda dan terkemudi- diperiksa persis seperti PHP satu.

Platform ini Python, Ruby, Go,. ET atau Java

Berikan melalui snippet panel dan katakan demikian dalam tubuh panel; jangan tinggalkan berkas di bridge /, dimana konformance akan menolak paket. Konektor dinyatakan sepenuhnya normal: aksi, penyedia konteks, identitas dan tamu pencarian semua bekerja sama, karena tidak satupun dari mereka peduli apa panggilan HTTP.

Anda tidak dapat menjalankan proses pada host platform

Kemudian pola jembatan bukan alat yang tepat. Sebuah jembatan ada untuk mencapai platform dari dalam inangnya sendiri. Jika Anda hanya dapat mencapainya dari luar, Anda menulis biasaAPIKonektor terhadap apapun permukaan itu tidak mengekspos.

⚠️
Satu kendala lain yang perlu direncanakan: sebuah probe identitas harus membaca sesi login platform, yang biasanya berarti berjalan di dalam proses platform sendiri atau setidaknya pada host dengan akses ke toko sesi. Sebuah jembatan ditulis dalam bahasa yang berbeda dari platform dapat melayani data dengan nyaman dan mungkin masih berjuang untuk menjawab op =admin_identityJika itu adalah kasusmu, kirimkan data jembatan dalam bahasamu dan penyelidikan identitas di platform.
Konektor

Berikan asisten kedua bagian: aksi dan konteks

Ini adalah hal yang paling umum hilang dari konektor yang "bekerja" tidak berguna. Aksi memungkinkan tindakan AI DO hal. Bagian konteksi. agar dia tahu hal-hal itu. Konektor memerlukan keduanya, dan banyak pertanyaan admin yang dijawab oleh konteks, tidak pernah dengan sebuah aksi. Sebuah koneksi dengan tindakan yang sempurna dan tidak ada penyedia konteks yang akan melaporkan bahwa ia tidak dapat melihat apa-apa.

Kedua bagian

Aksi - bagaimana AI melakukan hal-hal

Menyatakan dalam tindakan.jsonatau dikembalikan dengan registerActions (). Model ini memilih satu, mengisi parameter, danOpsIQeksekusi itu. Aksi untuk kata kerja: batalkan pemesanan ini, buka tiket itu, ubah status ini.

Bagian konteks - bagaimana AI tahu hal-hal

"Berapa banyak pesanan bulan ini", "siapa pelanggan terbaruku", apa yang kita jual "semua menyelesaikan melalui pencarian konteks, dan tidak pernah menyentuh tindakan sama sekali.

⚠️
Gejala dari penyedia yang hilang: asisten menjawab "Tidak ada konektor yang diaktifkan yang menyediakan bagian konteks ini" sedangkan koneksi dipasang, aktif dan melewati tes sambungan. Tak ada yang log, tak ada kesalahan. Pesan itu berarti tidak ada penyedia yang mengklaim section tersebut.

Kosakata daerah universal

OpsIQmeminta bagian dengan nama umum tugas anda adalah untuk memutuskan apa yang masing-masing berarti pada platform anda dan menjawabnya pemesanan hotel IS pesanan hotel; sebuah kamar IS apa yang menjual hotel. Peta, jangan ditemukan.

perintah / pending_orders

Apa pun transaksi pada platform Anda: perintah, booking, pemesanan, pekerjaan, pengiriman. pending_orders adalah daftar yang sama disaring untuk yang belum selesai.

klien

Daftar pelanggan.

products

Apa yang menjual platform: produk, kamar, rencana, layanan.

penagihan

Pendapatan dan total berbentuk uang, ditambah jumlah per negara.

tiket, layanan, domain, server, aktivitas

Gunakan ini ketika platform Anda benar-benar memiliki mereka. Jangan memaksa pemetaan bagian yang belum terjawab lebih baik dari salah satu

Ada lagi yang punya platform-mu

Nyatakan sendiri. Penyedia yang menyatakan bagian (): ['licenses', 'pengiriman'] memiliki mereka bergabung ke dalam universal lookup -list, sehingga platform- spesifik pencarian menjadi tersedia tanpa perubahan inti.

Kesalahan yang biaya sehari

Suatu penyedia konteks HARUS mengimplementasi antar muka. Jenis registry memeriksanya, sehingga sebuah kelas yang hanya terlihat benar dilewati - tanpa ada kesalahan, di mana saja.

ContextProvider. php - kontrak, dari paket referensi 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 '';
    }
}
Pendaftaran dari konektor

Implikasi ContextConectorInterface dan kembalikan penyedia Anda dari context provider (). Kelas penghubung mungkin juga mengimplementasikan Antarmuka Konteks secara langsung dan terdaftar sebagai dirinya sendiri.

Kembalikan teks biasa, bukan JSON

build () mengembalikan sebuah blok teks yang dikonkatenasi ke prompt. Tulis itu untuk pembaca: judul, kemudian satu baris per baris.

Kembali "daripada melempar

Ambil pengecualian Anda sendiri. penyedia yang melempar log dan dilewati, tapi kembali "adalah kontrak.

Pembangun tidak dapat menulis bagian () untuk Anda

Konteks Provider. php bagian yang dihasilkan (): array {return [];} dan penyihir tidak memiliki bidang untuk itu. Isi dengan tangan - dan ingat bahwa penerbitan kembali dari wizard OVERWRITES berkas. Salin edits Anda terlebih dahulu.

⚠️
Sebutkan TOTAL sebenarnya, bukan jumlah baris yang anda kirim. Sebuah halaman tidak total.Penyedia yang daftar dua puluh baris tanpa disebutkan sehingga mendapatkan asisten percaya diri menjawab "Anda memiliki20booking "ketika platform memegang669Satu count murah dan satu baris eksplisit - "TOTAL pada file:669(Daftar ini menunjukkan yang terbaru20hanya) "- adalah seluruh memperbaiki, dan jumlah yang salah percaya diri lebih buruk daripada tidak ada hitungan.
Sebuah blok bagian yang tidak dapat disalahpahami
$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);

Nama tindakan Anda sehingga OpsIQ dapat memberitahu membaca dari menulis

OpsIQ mengklasifikasikan sebuah aksi oleh WORDS dalam nya action_id, dan secara sengaja konservatif: apa saja yang tidak dapat dikenal diperlakukan sebagai sebuah tulis dan meminta kartu persetujuan. Dapatkan kata kerja benar dan hanya membaca berjalan.

1
is_destructive atau requires_confirmation menang

Jika kedua sudah diatur, tindakan selalu membutuhkan persetujuanmu.

2
Sebuah kata yang ditulis di id membuatnya menjadi tulisan

tambah, buat, buka, buka! ulangan, ubah, ganti, hapus, hapus! batalkan, batalkan, kembalikan, matikan, aktifkan, tolak, kirim, ulang, rekam, putar, tarik, tutup, putuskan, tetapkan, reset, revoke, decovery, set, angkat, disable, keluarkan, hasilkan, isi, bayar, penyegaran, perbarui, gabungkan, gabung, transfer, transfer lagi, penelusuran, register, sync, dorong, impor, jalankan, mulai, dan lakukan lagi.

3
Kemudian membaca kata membuatnya membaca

get, list, search, find, view, show, fetch, few, look, lookup, descape, export, preview, ping, status, ringkasan, detail, akhir-akhir ini, history, log, statistik, metics, overview, receicids, ruise, anality, constance, quota, snapshot, wawasan, feed, draft, triage, clacement, espify, menyarankan.

4
Kemudian metode HTTP memutuskan

GET, HEAD DAN OPSI yang dibaca.

5
Jika tidak, itu adalah menulis

Tidak diketahui berarti persetujuan diperlukan. Itu default disengaja.

⚠️
Tulis kata-kata sebelum dibaca, sehingga nama campuran seperti get_and_sync_orders Pilih satu kata, dan jaga agar tetap bersih: list_orders, get_customer, search_bookings, cancel_booking, set_order_status.

Hanya mendeklarasikan native_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.

The Builder memutuskan dari jawaban dat- akses 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.

Paket yang ditulis dengan tangan harus tetap benar

Jika Anda menulis manifest sendiri, menyatakan persis salah satu native_api atau platform_bridgeKonformansi memperlakukan platform_bridge Sebagai pintu keluar jembatan konektor diharapkan untuk memiliki, dan Builder menolak spesifikasi yang klaim platform_bridge pada API Konektor.

Jauhkan ai_api_reference.md jujur cara baik

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.

Ajarkan otak admin tentang platform Anda

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 platform IS ini, bagaimana datanya dibentuk, apa yang obyek disebut, dan unik yang jika tidak akan membuat asisten menebak. Tulis itu untuk seorang rekan yang kompeten yang belum pernah melihat platform.

ai_api_reference.md

Permukaan yang dapat dihubungi untuk konektor jembatan ini adalah op Anda dan melakukan kosakata dengan parameter mereka, bukan tabel titik akhir REST.

Anggaran

Kira-kira6,000karakter disimpan per konektor, dan tentang24,000karakter untuk seluruh blok di setiap konektor aktif. Lebih dari tutup per- connector berkas Anda dipotong; be ringkas sebelum pentungan adalah.

Tepatan membayar

Berkas-berkas ini adalah perbedaan antara asisten menggunakan alat tabel universal Anda dan menjawab dari bagian yang salah karena tidak ada yang pernah mengatakan itu perangkat-alat ada.

💡
Kedua berkas harus dalam paket INSTALLED, bukan hanya pohon sumber Anda. Ini adalah berkas paket biasa, jadi mereka ditutupi oleh tanda tangan dan dikirim dalam ZIP - yang juga berarti menyunting satu setelah penandatanganan merusak segel. Tanda ulang.
Konektor

Identitas melalui konektor: admin, pelanggan, portal

Satu kontrak penandatanganan melayani tiga permukaan. Tugas konektor adalah untuk mengubah "yang login di platform" menjadi token ditandatanganiOpsIQdapat memverifikasi, dan kemudian untuk menyajikan subjek yang diverifikasi diOpsIQBentuknya. Konektor tidak pernah mengotorisasi siapapun - platform tidak, dan tanda tangan membawa pernyataan tersebut.

Tiga permukaan, satu penandatangan

Admin - staf Anda, di dalam backend Anda

Sebuah subjek admin. Widget yang dimuat di dalam panel admin platform dan setiap anggota staf cocok dengan milik mereka sendiriOpsIQagen. walkthrough penuh pada halaman widget admin.

Pelanggan - sebuah sinyal-dalam pelanggan, dalam percakapan klien

Ini adalah apa yang memungkinkan seorang pelanggan untuk masuk ke dalam akun mereka bukan pencarian tanpa nama: setiap urutan, detail penuh, dan tindakan layanan diri yang Anda izinkan.

Portal - link mendalam ke dalam portal dukungan

Klaim yang sama ditambah jti dan single_use, dengan 120-kehidupan kedua, karena token perjalanan dalam URL dan harus diberikan sekali. Jangan menggulungkan tangan yang satu ini: Pengaturan, Dukungan Portal membawa snippet siap per bahasa, dan platform mints untuk Anda ketika daerah akun berjalan di server ini.

Muatan kontrak

Ini adalah klaim cek verifikasi. Tidak ada di sini adalah opsional, contoh parsial apapun di tempat lain mungkin menyarankan.

site_key

Tingkat atas, harus sama dengan kunci situs permintaan, atau token ditolak.

iat dan exp

Token lebih dari satu menit di masa depan ditolak.

terotentikasi: true

Tingkat atas, di samping exp, platform Anda menegaskan bahwa manusia nyata login

platform

Tingkat atas, sebuah nama singkat asal peluru, direkomendasikan, dan memungkinkan operator identitas konektor memberitahu token sendiri dari platform lain.

admin atau pelanggan

Sebuah obyek yang menyebutkan subjek. Ini harus membawa sebuah id kosong, dan nama pengguna atau email - gerbang per-admin cocok pada mereka. Termasuk keduanya ketika Anda memiliki keduanya.

Minting, verbatim dari jembatan Botble
$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 verifikasi, dan kegagalan yang mereka sebabkan

OpsIQmemiliki dua tanda verifikasi, dan mereka tidak identik mengetahui hal ini menyelamatkan Anda di sore hari, karena gejala ini tidak terlihat seperti penyebabnya.

Widget admin memiliki verifikasi sendiri

opsiq/ embed /admin_ajax.php membawa sebuah verifikasi lokal yang menerima tanda terotentikasi di kedua posisi. Daftar percakapan, sejarah dan tidak dibaca semua pergi melalui itu, sehingga mereka mengotorisasi baik.

Verifier terbagi adalah stricter

opsiq/ termasuk /customer_identity_token_verify.php duduk di belakang stream obrolan dan inti AJAX APISecara historis diperlukan bendera di tingkat TOP.

Gejala

Sejarah dan percakapan bekerja. Setiap obrolan mengubah jawaban "Perlu login admin". Ini membaca persis seperti bug sesi dan bukan: token hilang bendera tingkat atas.

Apa inti saat ini tidak

Sekarang menerima bendera di tingkat atas OR dalam subjek, sehingga kontrak adalah seragam. Inti Older hanya dibaca tingkat atas. Keluarkan bentuk kanonikal dan paket Anda bekerja pada setiap rilis.

Ini adalah mesin yang dicentang sekarang. Setiap berkas dalam paket Anda yang menampilkan tanda identitas secara statis dipindai terhadap kontrak, dan muatan platform akan menolak gagal konformance dengan file dan baris. Jalankan sendiri: peralatan php /verify_identity_contracts.php.

Tanda tangan - dalam pelanggan dalam obrolan klien

Inti harus menstempel pelanggan yang diverifikasi, dan konektor Anda harus hadir itu.

1
Jembatan atau titik akhir Anda mengeluarkan token pelanggan

Sama dengan admin, dengan subjeknya pelanggan baca pelanggan dari sesi platform sendiri jika platform anda menandatangani pelanggan pada penjaga berbeda dari admin baca penjaga yang anda inginkan dan jangan pernah kembali ke subyek - itulah bagaimana seorang pelanggan akan diberikan tanda admin.

2
Inti memverifikasi dan perangko itu

Pada token yang valid, stempel inti subjek yang diverifikasi ke dalam sesi. Penyedia Anda membaca sebuah identitas yang terbukti; ini tidak pernah mengotorisasi.

3
Penjualnya Identityprovider anda menyajikan itu

detectPelanggan () mengembalikanOpsIQbentuk. Ini HARUS mengimplementasikanOpsIQ\ Platform\ IdenttityProviderInterface, atau registri diam-diam melewatinya - perangkap yang sama dengan penyedia konteks.

4
Anda pelanggan-scoped tindakan menerima sebuah customer_id

Dan OpsIQ menguncinya ke identitas yang diverifikasi sebelum eksekusi. Model tidak dapat mensuplai itu.

IdentityProvider. php - membaca identitas yang terbukti, hadir dalam bentuk OpsIQ ini
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 pelanggan yang discoped: dua kunci, keduanya dibutuhkan

Model tidak boleh memilih yang data itu baca.OpsIQpaksa yang di sisinya, dan platform Anda harus menegakkannya di sisi lain juga satu kunci adalah bug jauh dari kebocoran; dua kunci adalah kontrak.

Kunci1 — OpsIQoverwrite parameter identitas

Sebelum aksi penggubah-obrolan berjalan, OpsIQ menggantikan setiap parameter yang berbentuk identitas dengan identitas pengunjung VERIFIED: client_id, klien, user_id(Dan demi rombongan yang menggiring dengan sebenar-benarnya) demi para malaikat yang menggiring atau mengarak awan customer_id, account_id mengambil ID numerik yang diverifikasi; client_identifier, customer_identifier, account_identifier Anggap saja sebagai string; email, client_email, customer_email, user_email Ambil email yang diverifikasi. Apapun model yang diusulkan dibuang.

Kunci 2 - platform Anda re- scopes setiap query

Ambil id yang diberikan dan tambahkan ke klausul WHERE dari setiap bacaan dan setiap tulisan di permukaan itu. jangan percaya referensi dalam permintaan sendiri. tanda tangan - dalam pelanggan menanyakan tentang urutan orang lain harus kembali kosong, bukan dilarang.

Nama parameter Anda sehingga mengunci 1 dapat menemukan mereka

Sebut saja customer_id, bukan cust atau ref OpsIQ tidak mengenali adalah sebuah parameter tidak dapat mengunci.

⚠️
Berikan tanda tangan di permukaan pelanggan Operasi OWN nya, terpisah dari yang admin, bahkan ketikaSQLDua permukaan dengan aturan yang berbeda tetap jujur; satu permukaan dengan bendera menjadi kebocoran pada hari seseorang edits cabang yang salah.

Tidak ada kabel halaman: sambungan-dideklarasikan probe

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 - pengaturan 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."
}
Probe dipanggil oleh peramban

Asal-asal, sehingga tidak dapat membawa header gubahan. Otentikasi adalah sesi platform. Masukan AHED dari gerbang jembatan -kunci Anda, jauhkan dari data rekaman, dan kembalikan apa-apa untuk pengunjung logd- out.

Ini menjawab bentuk tetap

{"success":true,"authenticated":true,"admin":{...},"identity_token":"..."} — and {"success":false,"authenticated":false,"error":"..."} when nobody is signed in.

Tidak ada rahasia lama-hidup dalam sumber halaman

Hanya tanda tangan, token yang dikeluarkan.

Implementasi titik akhir penuh untuk Laravel,WordPress, WHMCS, Symfony dan plain PHP, ditambah hard-won Laravel spesifik dan urutan intruksi, berada di halaman widget admin. Mereka adalah kode yang sama untuk subjek pelanggan: mengubah penjaga yang Anda baca dan kunci subjek yang Anda tandatangani.

Konektor

Penerbitan: menyunting folder tidak dipublikasikan

Cara yang paling umum untuk kehilangan sore adalah untuk menyunting konektor di bawah marketplace_connectors/, instal ulang, dan tidak menemukan perubahan apapun. Install tidak membaca folder itu. mereka menarik ZIP yang ditandatangani dari katalog pasar. Publishing adalah urutan yang menempatkan perubahan ke dalam ZIP tersebut.

Mengapa editing tidak melakukan apa-apa

marketplace_connectors/<slug>/ is the SOURCE

Ini tempat kerjamu, tak ada yang memasang itu.

Katalog memegang sebuah ZIP ditandatangani

Sebuah instal mengunduh yang ZIP, memverifikasi tanda tangan, dan bongkar. Sampai Anda membangun kembali ZIP tersebut, setiap instalasi terus mendapatkan paket lama.

Pembangun Konektor menerbitkan 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
Bump versi dalam DUA berkas

settings.json dan connector_contract.jsonKonformance membandingkan mereka dan gagal jika siput, versi atau kemampuan set tidaksetuju. Tambahkan sebuah CHANGELOG.md entri sementara Anda berada di sana - itu adalah file yang diperlukan.

2
Sesuaikan ulang snippet bridge

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
Tanda-ulang setiap paket

perkakas php /resign_all_connectors.php - tanda-tangan melingkupi berkas hashes, sehingga APAPUN sunting tidak valid itu. Tanda tangani terakhir, setelah setiap berkas final.

4
Ekspor kunci penandatanganan, kemudian benih

Pencari tanda setiap paket saat membangun ZIP, dan berjalan dalam konteks di mana kunci tidak dapat dibaca dari pengaturan - sehingga harus berasal dari lingkungan.

5
Kirim ulang berkas bridge, jika Anda mengirimkan satu

Menginstal ulang paket pemutakhiran konektor. TIDAK menyentuh salinan yang ada di 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 ekspor tidak opsional: penandatangan mencari kunci dalam OPSIQ_CONNECTOR_SIGNING_KEY pertama dan connector_signing_key set second. Pencari berjalan pada bootstrap SaaS dan alat /sign_connector.php boot tidak ada sama sekali, jadi dalam kedua pembaca pengaturan tidak ada - dengan tidak ada variabel lingkungan tidak ada kunci, dan Anda mendapatkan "Tidak ada kunci penandatanganan yang tersedia" atau setiap paket dilaporkan sebagai signing_failed. Hanya alat /resign_all_connectors.php boots OpsIQ dan dapat menemukan kuncinya sendiri.

Apa sebenarnya kapal

Hanya berkas yang sampul tanda-tangan

ZIP dibuat dari daftar berkas milik penandatangan, jadi sebuah file yang tersesat yang ada di folder paket anda tidak dikirim. Itu disengaja: sebuah berkas yang belum ditandatangani dipakai untuk naik bersama dengan pelanggan.

Ekstensi terselubung

php,json, js,css, md, txt,html, sh, svg, png, jpg, jpeg, gif, webp, ico, yml, yaml - secara rekursif, termasuk bridge / dan tes /. signature.jsonitu sendiri dikecualikan dari hashes dan kemudian ditambahkan ke ZIP sehingga instalasi dapat memverifikasi.

Ada lagi yang dilaporkan sebagai not_packaged

Pencari nama setiap berkas yang tertinggal. Baca daftar itu. Berkas yang Anda harapkan muncul di sana berarti ekstensi yang salah atau lokasi yang salah - bukan sukses diam.

Menyunting berkas yang tertutup akan merusak segel

Termasuk file Markdown. Tanda tangani paket itu.

Perlu berkas dalam paket yang dapat didistribusikan

connector.php

Harus kembali instansi dari ConnectorInterface.

settings.json

Menyatakan: siput, nama, versi, manifest_versiondan (malaikat-malaikat) yang membedakan (antara yang hak dan yang bathil) dengan sejelas-jelasnya, connector_contract_version, pengaturan.

connector_contract.json

Kontrak yang mudah dibaca. Selongsong, versi dan kemampuan set harus identik dengan pengaturan.json.

REAMEEMD, DEVELOPER. md, CHANGELOGMD

Ketiganya dicentang keberadaan dan ukuran minimum. DEVELOPER. md perlu isi nyata, bukan stub.

Sebuah berkas per yang dinyatakan kemampuan

Setiap nama kemampuan yang dia harapkan — ContextProvider.php untuk konteks, IdentityProvider.php untuk identitas, GuestLookupProvider.php untuk guest_lookup, dan sebagainya - kecuali connector menerapkan kapabilitas inline.

Tidak ada yang terlihat seperti kredensial

Konformance memindai tiga berkas Markdown untuk nilai-nilai rahasia berbentuk dan kunci pribadi, dan gagal pada hit.

Periksa sebelum Anda kapal itu

Konformance Suite penuh adalah yang sama jalan instalasi. Ini memeriksa manifes terhadap kontrak kanonikal, bahwa waktu berjalan dan kemampuan nyata setuju, bahwa setiap keterampilan dideklarasikan memiliki file dan metodenya, kontrak identy- token dalam setiap berkas minet-snippet cocok, penjaga-lookup allowlist kebersihan, tindakan unik dan konfirmasi keselamatan, dan tanda tangan paket.

Jalankan keempat 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 diharapkan dan bukan masalah: pemeriksaan tanda-tangan paket melaporkan peringatan saat Anda masih mengedit. Ini membersihkan saat Anda menandatangai kembali. setiap kesalahan lainnya adalah nyata.
Konektor

Referensi paket konektor dan lifecycle

Ini adalah kontrak tingkat sumber untuk membangun konektor yang OpsIQ dapat menemukan, mengatur, memvalidasi, mengaktifkan, mengeksekusi, menguji, tanda tangan dan mendistribusikan.

Referensi pengembang
Paket konektorPaket penghubung memiliki implementasi konektor yang diperlukan dan manifes, dengan tindakan opsional, resep, pengetahuan, aset dan metadata tanda tangan.Paket konektordeveloperMANIFESTv1SIKLUS HIDUPDiaturworksPACEDicampurHIDUP WORKSPACE VIEWconnector.phpKelas / pabrik konektorDiperlukansettings.jsonSkema penyaringan dan pengaturanDiperlukanactions.jsonDefinisi aksiOpsionalsignature.jsonMetadata tanda tangan paketRilis1DECLAREKeberadaan dan kemampuan2IMPLEMENTLifecycle dan penyedia3ValidateUji, tanda tangan, paket
Paket penghubung memiliki implementasi konektor yang diperlukan dan manifes, dengan tindakan opsional, resep, pengetahuan, aset dan metadata tanda tangan.

Paket 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 nyata

settings.json menggunakan versi manifestasi 1Validator mengharapkan sebuah siput, nama, versi, manifest_version, kompatibilitas, deskripsi dan kemampuan. Kompatibilitas mendeklarasikan opsiq_min dan opsiq_maxStatus rilis adalah salah satu produksi, beta, pratinjau atau template; kedewasaan kemampuan menggunakan tingkat L1-L6. Paket Legacy dapat dinormalkan dengan peringatan, tetapi paket baru harus lulus tanpa peringatan.

Antarmuka inti konektor

  • Identitas dan pengaturan: slug(), name(), description(), capabilities(), settingsSchema(), testConnection().
  • Siklus hidup: onEnable() dan onDisable(). Matikan harus tidak merusak; pembersihan data adalah operasi terpisah yang disengaja.
  • Inbound / sync: handleWebhook(), poll(), backfill()Poll menangani pekerjaan bertahap; pengisi ulang impor sejarah dan harus aman untuk diulangi.
  • Dukungan: pushReply() dimana platform menerima balasan.
  • Aksi: registerActions() persediaan kontrak aksi yang dapat dieksekusi.
  • Keamanan: securityCapabilities(), syncBlockedIp(), removeBlockedIp(), testSecuritySync().

Basis abstrak juga menawarkan pengisi terbalik opsional, daftar pelanggan, penemuan akun email / penciptaan, pelanggan, pendeteksi admin / pelanggan, penagihan / konteks / identitas penyedia, ekstraksi, mencoba lagi panggilan HTTP, JSON-Jalan akses, peringkat fuzzy dan pembantu paginasi.

Kemampuan dan otentikasi

Nama-nama yang didukung termasuk aksi, pemicu, konteks, identitas, penjualan, penagihan, 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_ticketsPembangun menyediakan API kunci, pembawa, dasar, HMAC, OAuth 2 kredensial klien, OAuth 2 kode otorisasi dan template otentikasi gubahan.

Lifecycle registry

  1. Penemuan memuat paket dan memvalidasi manifest nya.
  2. Konfigurasi disimpan setiap area kerja; rahasia dienkripsi.
  3. Tes koneksi membuktikan kredensial tanpa mengaktifkan konektor.
  4. Aktifkan panggilan onEnable(), sinkronisasi definisi aksi dan dapat memulai awal mengisi kembali.
  5. Polling / webhook / subscriber execution selalu membawa konteks area kerja.
  6. Matikan panggilan onDisable() dan menghentikan aktivitas tanpa menghapus data yang diimpor.
  7. Pembersihan adalah operasi eksplisit terpisah.

Aturan perbaikan

  • Gunakan area kerja / situs kunci dalam setiap pencarian baca, tulis, cache, kunci deduplikasi dan webhook.
  • Buat pengisian backfill, gangguan webhook dan tulis aksi idempoten. Catat ID / event ID eksternal dimanapun platform menyediakan satu.
  • Untuk sistem remote, gunakan API; jangan pernah asumsikan tabel basis data mereka ada di OpsIQ koneksi.
  • Return terstruktur, gustomer-safe errors. Jangan pernah membongkar rahasia, jejak penyedia mentah atau keberadaan area kerja lain.
  • Hanya nyatakan kemampuan paket yang sebenarnya terimplementasi. Sebuah actions.json katalog tidak membuat aksi dapat digunakan sampai konektor diinstal, diaktifkan, dikonfigurasi dan koneksinya valid.

Testing dan rilis

Jalankan tes PHP lint, validasi manifest, tes koneksi, tes skema aksi, ujian webhook / replay, tes isolasi kerja, uji ulang-ulang, disabled-connector tes dan gagal / coba ulang tes. Paket pasar seharusnya ditandatangani dan diverifikasi, termasuk setup / perizinan / ijin / webhook dokumentasi, dan menyatakan status rilis yang sebenarnya. Konektor tes dan daftar adalah sinyal dewitatif.

Konektor

Resep konektor

Resep langkah untuk alat penghubung umum.

Resep
Resep konektorA Shopify setup resep sebagai sebuah checklist: buat aplikasi, hibah scopes, paste token dan test, aktifkan webhooks, letakkan perintah tes.Resep konektorShopifyResep Shopify dengan webhooksMembuat aplikasi gubahan dalam admin ShopifyGrant scope: read_orders, read_customers…Tempel domain penyimpanan + token, klik UjiAktifkan sinkronisasi Webhook (perintah auto-register)Tempatkan suatu perintah tes→muncul di Penjualan di30s1STEP BY STEPSalin resep pasta2REAL PLATFORMSShopify · WHMCS · Stripe · GBP3VERIFYPerintah tes menunjukkan di 30s
Setiap resep adalah checklist Anda mengikuti atas ke bawah, di sini, Shopify dengan real-time urutan webkait, diverifikasi oleh perintah tes.

Recipe: Shopify dengan webhooks real time

Skenario:
Tujuan: Sambung Shopify dengan urutan otomatis sinkronisasi dan GDPR kepatuhan.
Apa yang harus 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.

Recipe: integrasi WHMCS

Skenario:
Tujuan: Sambung WHMCS Sehingga AI dapat mencari klien, layanan, tiket, dan faktur.
Apa yang harus 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. Install the WHMCS module addon for ticket relay. 5. Verify: ask the admin AI "Find client [email protected]". WHMCS data should appear.

Recipe: pembayaran Stripe

Skenario:
Tujuan: pembayaran Track Stripe dan biarkan AI melihat transaksi.
Apa yang harus 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.

Resep: Profil Bisnis Google

Skenario:
Tujuan: Hubungkan GBP untuk manajemen peninjauan, posting, dan wawasan.
Apa yang harus 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.

Konektor

Memperluas CRM & Site Intelligence

OpsIQ subsistem terbuka untuk ekstensi. Konektor dapat plug kemampuan baru ke CRM atau Site Intelligence tanpa perubahan ke OpsIQ core, melalui platform kapabilitas registry (\OpsIQ\ Platform\ CapabilityRegistry). Menyatakan kemampuan, menerapkan metode kecil yang diatur, kapal konektor,OpsIQ Menemukannya dan kabel ke UI, Pelanggan 360 timeline dan install prompt.

Panjangkan CRM & SI
Kemampuan platformSebuah penghubung pada bus-bis berkemampuan makan kiri (CRM, Site Intelligence, Analytics) yang ditemukan oleh CapablityRegistry.Kemampuan platformarea kerjaKonektor Andamendeklarasikan kemampuanCRMkalender · perbaikan · esign · pembayaran · kotak suratSitus Intelijenlocal_listing · rank_dataAnalisisweb_analyticsCapabilityRegistryMenemukannya & kabel timeline UI +1DECLAREKemampuan, bukan inti edits2PLUG INCRM Bus analisis3AUTO-WIREDUI, timeline, prompt
Konektor menyatakan kemampuan (kalender, pengayaan, peringkat data, analisis...) dan OpsIQ auto- kabel mereka ke CRM dan Site Intelligence, tidak ada perubahan inti.

Sebutkan kemampuan

Declaratif (settings.json)

Tambah <domain>_capabilities array, terbaik untuk no-code / marketctors. Domain: crm, site_intelligence.

Dalam kode (connector. php)

Implementasipart-type crmCapabilities() / siCapabilities() mengembalikan deskripsi yang sama.

Sebutkan penyedia kalender CRM (pengaturan.json)

Skenario:
Tujuan: buat konektor kalender muncul dalam panel CRM Schedule-meeting.
Apa yang harus dilakukan:

"crm_capabilities": [ { "type": "calendar", "label": "Calendar (Acme)", "actions": ["createEvent","listEvents","freeBusy"], "requires_auth": true } ]

Umumkan penyedia Intelijen Site (settings.json)

Skenario:
Tujuan: memasukkan data ke dalam Badan Intelijen.
Apa yang harus dilakukan:

"site_intelligence_capabilities": [ { "type": "local_listing", "actions": ["listLocations","listReviews","getInsights"], "requires_auth": true } ]

Menangkap bus dan metode mereka permukaan

crm / kalender

createEvent($settings,$params) → {sukses,event_id,html_link,meet_link}; listEvents; freeBusyDidorong olehOpsIQ\CRM CalendarBridge.

crm / perakmuran

enrich($settings,$params) →[sukses, ciri]. Didorong oleh\OpsIQ\ CRM\ Enrichment Bridge (juga berjalan otomatis pada perusahaan membuat ketika penyedia terhubung).

crom / esign

sendForSignature($settings,$params) → {success,envelope_id,sign_url}. Didorong oleh \OpsIQ\CRM\EsignBridge.

site_intelligence / local_listing

listLocations, listReviews, getInsightsKapal melalui Google Business Profile connector.

site_intelligence / rank_data

keywordRanks($settings,$params) →[sukses, jajaran]. Didorong oleh\OpsIQKonektor SerpApi.

analitik / web_analytics

report($settings,$params) (sync / export) + ingest($settings,$events) (impor). Didorong oleh\OpsIQ\ Analytics\ WebAnaliticsBridge. Ships: Google Analytics (GA4) konektor. Data API untuk laporan, Pengukuran Protokol untuk impor. Analisa terbuka bagi konektor seperti CRM + Site Intelligence (domain analytics / analytics_capabilities).

pembayaran / payment_provider

listPayments, customerPayments, createPaymentLinkDidorong oleh OpsIQ\ Payment\ PaymentsBridge. Tampilkan pembayaran pelanggan pada timeline CRM + kirim link pembayaran pada kesepakatan. Pengiriman: Konektor Pembayaran Stripe. Domain payments / payments_capabilities.

kotak surat / email_sync

listMessages + sendMessageDidorong oleh OpsIQ Email-email pelanggan pada Pelanggan 360 timeline + kirim email dari sebuah transaksi. Pengiriman: Gmail + Outlook / Microsoft 365 Konektor, Domain mailbox / mailbox_capabilities.

OAuth aplikasi + One direct

Semua konektor Google berbagi satu aplikasi melalui\OpsIQ\OAuth\ SharedGoogleApp. Set google_oauth_client_id/_secret sekali dan Kalender, Analytics, Profil Bisnis + Gmail semua bekerja (per- connector "(opsional)" adalah overrides). Mereka juga berbagi satu redirect URI, <site>/connectors.php?oauth=callback (no per- connector sludes), because Google exposes no API untuk menambahkan URI redirect ke sebuah aplikasi; OpsIQ recovers konektor dari signed OAuth state noce. daftarkan bahwa URI tunggal sekali dan setiap konektor Google (sekarang + masa depan) otorisasi tanpa setup Konsol lebih lanjut. Kembali. SharedGoogleApp::resolve(...)' redirect_uri dari Anda oauthParams(); tidak pernah hard- kode perslug redirect Microsoft konektor melakukan hal yang sama melalui\OpsIQ\OAuth\ SharedMikrosoftApp (microsoft_oauth_*).

Tombol impor dikapabilitas

The Impor (Riwayat mengisi) dan Impor pelanggan tombol hanya menampilkan konektor yang mengimplementasikan, terdeteksi oleh refleksi, sehingga tidak ada flag untuk mendeklarasikan. Timpa backfill() atau backfillChunk() untuk memperoleh tombol Impor; override listCustomers() (mengembalikan {email, nama pertama,...} halaman untuk mendapatkan pelanggan Impor. Inherit AbstractConnector no- op dan tombol tetap tersembunyi, sehingga UI tidak pernah menawarkan impor konektor tidak dapat dilakukan.

AI di bus

Agen CRM mengusulkan dan buku pertemuan off deal signal (\OpsIQ\ CRM\ MeetingProposer→CalendarBridge), dan oto- meminjamkan rekening baru, "AI mengoperasikan CRM" loop, dijalankan di bus konektor.

Pencarian tiket obrolan klien (fetchTicket())

Two- tier, tidak ada perubahan inti

Ketika pengunjung mereferensi nomor tiket dalam obrolan klien ("apa status T -000123?"), OpsIQ menyelesaikan dalam dua seri. Tingkat 1 membaca bersama OpsIQ toko tiket, setiap konektor dengan inbound_ticket cermin tiket di sana, jadi sinkronisasi tiket hanya bekerja untuk ALL konektor dengan kode tidak per- konektor. Tingkat 2 adalah sebuah fallback langsung untuk tiket OLD yang tidak pernah dicermin: panggilan inti OPSIONAL fetchTicket() pada setiap konektor yang diaktifkan yang mengimplementasikannya. duck-typed (ditemukan oleh method_exists(), seperti contextProviders()/audienceCatalog()), jadi ditandatangani ConnectorInterface tidak tersentuh dan konektor yang tidak membutuhkannya (sumber email / chat yang membuat tiket secara natif) cukup abaikan itu.

⚠️
Kepemilikan adalah kewajiban dan Anda untuk menegakkan. fetchTicket() menerima identitas pengunjung terVERIFIED di $ctx (client_id + client_email, identitas yang sama yang diverifikasi yang digunakan oleh klien untuk percakapan AI). Selesaikan pelanggan platform dari identitas dan permintaan hanya tiket pelanggan itu, kemudian periksa kembali kepemilikan pada catatan detail. Kembali. null pada setiap miss, tidak cocok, atau error, tidak pernah data pelanggan lain. null Dengan anggun "tidak bisa menemukan tiket itu".
connector.php, kontrak fetchTicket () (referensi: konektor /whmcs dan konektor / 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

Penemuan

CapabilityRegistry::providers($domain,$type) daftar penyedia dengan status terpasang / diaktifkan / siap (filmstrem-based; DB hanya untuk flag aktif).

Pilihan

CapabilityRegistry::active($domain,$type) mengembalikan penyedia siap pertama dengan konektor dan pengaturan dimuat. Jembatan menyebut ini bukan siput hardcoding.

Notify-to- install

Dimana fitur membutuhkan kemampuan yang belum terhubung, UI menunjukkan satu klik Sambungan / Pasang prompt, tidak pernah ada kendali mati.

Panduan penuh

Lihat connectors/PLATFORM_CONNECTORS.md (CRM + Site Intelligence) dan connectors/CRM_CONNECTORS.md dalam paket.

Konektor

Pengurus layanan pelanggan & refunder (buat konektor untuk obrolan pelanggan)

Dalam daftar pelanggan dapat menanyakan pada pelanggan tentang akun mereka sendiri ("saldo saya" ", perintah saya", apakah mendukung tiket saya ") dan, jika bisnis memungkinkan itu, permintaan pengembalian dana semuanya didukung oleh deklarasi konektor ANDA: tidak OpsIQ perubahan core, tidak ada platform hardcoding. AI memanggil pencarian Anda sebagai alat asli (ia tidak dapat menciptakan satu), identitas terkunci server-side ke pelanggan yang diverifikasi, dan hasil secara otomatis dipangkas untuk AI.

Menyatakan pencarian pelanggan

Dalam Anda actions.json, sebuah aksi read- hanya menjadi gustomer-calable dengan SEMUA tiga: "scope":"client", "requires_confirmation":false, "is_destructive":falseGunakan "scope":"both" ketika pencarian yang sama juga harus dipanggil oleh tim Anda dalam AI Admin kosakata penuh adalah admin, client, both dan system (system mencapai tidak AI -APIdan rute webhook saja). Apapun yang lain ditolak langsung: validasi paket gagal dan aksi tidak memasang. Tidak ada writing scope - asisten penulis dilayani admin set aksi.

Aturan identitas (wajib)

Sebutkan parameter identitas Anda dari set standar. Terkunci ke id numerik yang diverifikasi: client_id, clientid, customer_id, user_id, userid, account_idTerkunci untuk id yang sebagai string: client_identifier, customer_identifier, account_identifier. Terkunci ke email yang diverifikasi: email, client_email, customer_email, user_emailOpsIQ mengunci dan otomatis-fills itu dari platform - diverifikasi signed-in pelanggan; AI tidak pernah melihat atau memilih identitas. Sebuah nama non-standar gagal ditutup (ditolak, tidak pernah bocor).

Apa yang harus tetap melekat-hanya

Apapun yang belum dipindai oleh identitas itu: fetch-by-bare- id (fetch- oleh - bare--id (order_id/ticket_id sendirian), daftar toko-lebar, pencarian free- text mereka adalah cross- customer kebocoran pada platform apapun simpan saja "scope":"admin".

Hasil membentuk (jawaban-bantalan kunci)

Hasil pencarian secara struktural dipangkas sebelum mereka mencapai AI: kunci berbentuk rahasia dijatuhkan, string panjang dan daftar yang dikutip, field kosong dipruned, dan peta datar lebih lebar daripada tutup kuncinya tetap jawaban - kunci bantalan pertama, uang (credit, balance, amount, total, due, paid), identitas (email, *name, phone, company), keadaan (status, active, expir*, renew*), tanggal, rencana / produk / domain / layanan / langganan / urutan / faktur / jalur tiket, mata uang, jumlah dan stats/summary/totals, sebelum setiap kursi tersisa pergi ke tombol-kecil lain - pertama praktis bimbingan: nama bidang Anda dengan kosakata standar dan kembali bidang yang menjawab pertanyaan pelanggan daripada mentah100-key platform dump; sebuah field bernama diluar kosakata bersaing untuk kursi sisa dan dapat dipangkas dari gaji yang sangat luas.

Kembalikan apa yang diberikan konektormu

Dua operasi mentah, bebas kebijakan: (1) sebuah pembayaran -verifikasi dibaca oleh identitas dan referensi transaksi (anda API harus AND filter), mis. whmcs_get_transactions; (2) sebuah aksi eksekusi pengembalian (scope:"admin", requires_confirmation:true, is_destructive:true, tidak pernah adastel- terekspos), mis. whmcs_refund_orderBisnis ini memilih kedua kunci dalam Pengaturan→Percakapan Klien;OpsIQverifikasi ulang sisi pembayaran server-, menerapkan kotak kebijakan bisnis (jumlah cap, jendela usia, batas bulanan), masalah dalam kotak, dan file tiket tinjauan untuk segala sesuatu yang lain.

Tidak ada pembuat kode

Penyunting aksi Konektor Builder memiliki kendali yang sama: set "Siapa yang dapat menggunakannya" untuk Signed- pada pelanggan, meninggalkan kedua kotak tulis, dan menggunakan nama parameter identitas standar.

Implementasi referensi

Entri "Pelanggan Self-Service" dalam connectors/whmcs/actions.json, woocommerce/actions.json, oscommerce/actions.json; kontrak penuh di connectors/README.md §8.1–8.2 dan ConnectorInterface::registerActions().

Konektor

Pencari tamu - biarkan pengunjung melacak pemesanan, pengiriman atau perintah TANPA penandatanganan masuk (guest_lookup)

Hotel, kurir dan banyak platform perdagangan melayani pelanggan yang memiliki referensi tapi tidak ada login: seorang tamu dengan konfirmasi pemesanan, penerima dengan nomor pelacakan. guest_lookup kapabilitas (Konektor Kontrak, mode: dihasilkan) memungkinkan konekktor ANDA melayani pengunjung tersebut dalam percakapan klien AI - tidakOpsIQtidak ada platform hardcoding konektormu menyatakan apa yang membuktikan hak dan bidang WHICH terlihat;OpsIQpaksa saklar, throttle dan seragam menyangkal.

Model kepercayaan

Referensi + bukti, tidak pernah identitas

Pengunjung menyediakan referensi rekaman (yang cocok dengan regex yang Anda declare) ditambah bukti yang Anda pilih - biasanya email pada catatan. Aksi pengambilan Anda mendapatkan catatan SERVER- SIDE oleh referensi;OpsIQpenyedia yang dihasilkan membandingkan bukti terhadap catatan FETCHED. Masukan pengunjung tidak pernah dipercaya, dan tidak ada identitas yang diverifikasi dibuat: cocok berhak pengunjung untuk bahwa salah satu kolom allowlisted record, tidak ada yang lain.

Unform menyangkal (tidak ada tanda perhitungan)

Tidak ditemukan dan tidak cocok menghasilkan satu jawaban identik. AI secara eksplisit diinstruksikan untuk tidak pernah mengkonfirmasi apakah referensi ada dan tidak pernah menciptakan rincian rekaman. Percobaan adalah rate - terbatas setiap percakapan +IPoleh inti sebelum konektor Anda pernah berkonsultasi.

Pilihan ganda, kedua baku OFF

Tidak ada yang melayani tamu sampai bisnis memungkinkan BOTH switch: ruang kerja-luas kontrol dalam Pengaturan→Keamanan→"Pencari rekor tamu dalam percakapan klien" (permission- gated DAN selalu lewat-dikonfirmasi, bahkan ketika pilihan langkah-up mati), dan konektor Anda sendiri guest_lookup_enabled Pemasangan dan penghambat konektor saja tidak pernah membuka permukaan tamu.

Permukaan tamu yang berdedikasi

Register penyedia yang dihasilkan pada guest konteks permukaan - struktural terpisah dari admin dan customer. Penyedia konteks tidak pernah berkonsultasi untuk pengunjung anonim, dan penyedia tamu tidak pernah dikonsultasi untuk sinyal-in. ctx itu menerima membawa pesan obrolan, id thread dan pengunjung yang dispesifikasikan (belum diverifikasi) sebelumnya - email percakapan sebagai kandidat bukti - tidak ada ruas identitas.

Menyanyikannya di Builder

1
Tentukan aksi pengambilan

Pada langkah Aksi, tambahkan aksi baca-saja yang mengembalikan satu catatan dengan referensi (misalnya GET /bookings/{booking_number}) dan memetakan bagian responnya dengan nama alias: status, kedatangan, keberangkatan, room_type, customer_email…

2
Centang "Pencari Tamu"

Pada langkah kemampuan, memungkinkan guest_lookupSebuah panel yang berdedikasi muncul: memilih aksi pengambilan, nama parameter referensi, memberikan pola acuan (tubuh regex seperti \bBK-[0-9]{4,10}\b), sebutkan catatan ("booking"), dan pilih bukti - email pada catatan (disarankan) atau tidak (referensi saja, untuk status- hanya kurir pelacakan).

3
Allowlist ruas yang tampak

Centang persis bidang yang dilihat tamu, semua yang lain adalah DROPPED - tidak pernah disunting.

4
Terbitkan dan aktifkan

Pembangun memancarkan GuestLookupProvider.php - yang mengeras kanonikal implementasi, identik untuk setiap paket yang dihasilkan - dan menambahkan guest_lookup_enabled Bisnis sedang mengaktifkan dua tombol dan percakapan AI mulai menawarkan pencarian ketika pengunjung menanyakan tipe rekaman anda.

Aturan kontrak

Hanya bagian yang berbentuk status

Pikirkan "apa yang akan seorang kurir cetak pada halaman pelacakan publik": status, tanggal, kamar atau kategori layanan, dihitung. Nama, rincian kontak, alamat jalan, catatan pembayaran dan teks bebas tidak memiliki tempat dalam percakapan anonim - Pembangun dan konformansi keduanya menolak mereka.

AI hanya menjawab dari blok

Penyedia yang dihasilkan mengakhiri keluaran dengan instruksi yang hanya menjawab dari ruas terdaftar dan menawarkan tiket untuk hal lain. Detail tidak dalam allowlist adalah "tidak tersedia dalam percakapan" - oleh desain.

Follow- up terus bekerja

Operator tersebut mengambil referensi dari pesan-pesan baru pengunjung dalam percakapan yang sama, jadi "dan kapan check-out?" bekerja tanpa mengetikkan kembali referensi. Referensi dan surat bukti yang cocok diingat pada thread obrolan sebagai CANDIDATES, sehingga follow- up tidak re-ask. Mereka adalah kandidat saja: setiap putaran masih fetch catatan server-side dan reply-profices the sebelum merilis satu field.

Paket-paket yang ditulis tangan

Sebuah paket pasar dapat mengirimkan sendiri GuestLookupProvider.php implementing ContextProviderInterface dengan surfaces(): ['guest']. Ikuti kontrak template yang dihasilkan secarak- mengambil dengan referensi, proof-cocokkan sisi server-, uniform menyangkal, allowlist- hanya output - dan mendeklarasikan guest_lookup in capabilitiesKonforman memverifikasi permukaan tamu dan scan allowlist untuk PII.

💡
Pencari tamu hanya baca context untuk percakapan AI. Mereka tidak pernah mengeksekusi aksi, tidak pernah membuat identitas, dan tidak pernah membuka jalur aksi layanan pelanggan di atas - bahwa path masih memerlukan platform-diverifikasi sinyal -dalam pelanggan.
Konektor

Promosi penontonnya menargetkan (promo_audience)

Biarkan target Promosi Studio dikampanyekan oleh klien LIVE dan kondisi penagihan dari platform ANDA: "memiliki faktur yang belum dibayar", "perintah tertunda", berlangganan dibatalkan ". Konektor apapun (sebelum dipasang, pasar, atau yang Anda bangun sendiri) bergabung dengan menerapkan dua metode kecil. Tidak ada OpsIQ perubahan core, tidak ada platform hardcoding: konektor Anda muncul sebagai sebuah platform di studio tab Targeting dengan dropdown sendiri fakta, dan beberapa konektor dapat diaktifkan berdampingan.

Promo audiens
Pembidikan target penontonSebuah identitas diverifikasi diberikan ke audienceFlags konektor disebut menghasilkan fakta yang mendorong aturan penargetan, dengan catatan gagal tertutup.Pembidikan target penontonarea kerjaLogdam- inIdentitas yang diverifikasiaudienceFlags ()konektor AndaWajahunpaid_invoices = 2PERAturanunpaid_invoices ≥ 1Kampanye menunjukkanGagal: klien tidak dikenal atau kesalahan apapun → kampanye tetap tersembunyi.1TWO METHODSpatalog + Flag2LIVE STATEBelum dibayar, tertunda, status3FAIL-SAFETidak pernah menunjukkan kepada orang yang salah
Konektor Anda menjawab fakta hidup untuk pengunjung logde- di; studio target pada mereka, dan gagal ditutup sehingga tawaran penagihan tidak pernah mencapai orang yang salah.

Bagaimana cara kerjanya

1
Tunjukkan fakta-fakta Anda

Implikasi tacatalog () pada kelas konektor anda. Ini mengembalikan sebuah label dan daftar kunci platform yang dapat menjawab. Setiap tombol muncul di studio dropdown dengan nama platform anda.

2
Jawaban untuk satu klien

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

Aktifkan konektor. Tab Penunjuk Studio Promosi mengembangkan bagian "Klien & Tagihan" daftar platform Anda; aturan pembuatan admin seperti "unpaid_invoices >= 1"; setiap fakta juga menjadi variabel personalisasi seperti {unpaid_invoices}.

connector.php, lengkap promo_audience kontrak
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'],
    ];
}

Aturan kontrak

Advertically kemampuan

Tambah 'promo_audience' untuk konektor Anda capabilities() array sehingga platform dan pasar daftar itu sebagai audience- mampu (penemuan juga bekerja dari metode kehadiran, tetapi menyatakan itu adalah sinyal bersih). Pre-instal connectors/whmcs Penghubung adalah implementasi referensi penuh.

Penamaan kunci

Huruf Kecil snake_case, 2-60 chars, pencocokan ^ [a-z0-9 _] + $. Types: nomor, teks, bool. Kunci tidak dideklarasikan dikembalikan oleh audienceFlags () masih dapat digunakan dalam aturan, tetapi mendeklarasikan segala sesuatu yang Anda dukung sehingga admins dapat melihatnya.

Identitas diverifikasi

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.

Gagal selalu

Pada galat APUN (API ke bawah, klien tidak ditemukan, timeout) kembali []. Sebuah aturan yang faktanya hilang membuat kampanye NOT show. Suatu popup biling- target tidak boleh mencapai orang yang salah; OpsIQ Memaksa ini dalam aturan Matcher juga.

Performa

audienceFlags () dipanggil paling sering dilihat oleh tiap konektor per halaman, dan hanya saat kampanye yang diterbitkan menggunakan aturan platform anda. 1-2 API panggilan; OpsIQ Memolezes dalam permintaan.

Operator disediakan secara gratis

Admin menggabungkan kunci Anda dengan =,! =, >, > =, <, < =, berisi, telah diset, kosong, Anda hanya menyediakan nilai.

Token personalisasi

Setiap fakta ganda sebagai variabel dalam salinan kampanye: {unpaid_invoices}, {client_status}, plus built-ins {first_name} dan {client_email} Nilai-nilai dibersihkan sebelum dirender.

Tidak ada kode konektor pasar

Fakta otomatis

Deklaratif (JSON-hanya) konektor pasar mendapatkan promo_audience untuk FREE: jika konektor Anda menyatakan pelanggan / pengguna, faktur, perintah atau subscription sumber daya, OpsIQ Bersumber customer_status, unpaid_invoices, amount_due, pending_orders, active_subscriptions dan subscription_status dari aksi pencarian yang ada. Tidak ada kode sama sekali.

Katalog gubahan (pengaturan.json)

Tambah audience_capabilities objek {"label": "My Platform", "kunci": ["key":open_carts"," label ":" Buka carts ", (Jenis):" number "}], untuk mengontrol fakta yang tepat (dan label) muncul di studio dropdown.

Menguji penyedia Anda

1
Aktifkan konektor

Konektor > konektor Anda > Aktifkan. Kemudian buka tab Targeting kampanye apapun. Platform Anda harus muncul di bawah "Klien & penagihan (connectors)".

2
Buat aturan

Tambahkan: Platform Anda · a kunci · >= · 1 dan atur "Hanya klien yang terdaftar". Simpan dan publikasikan.

3
Verifikasi kedua arah

Log ke platform Anda sebagai klien yang cocok dengan aturan (popup harus ditampilkan) dan sebagai orang yang tidak (popup mesti tetap tersembunyi). Tamu Logged- keluar tidak pernah cocok dengan peraturan log-in.

Tembakkan kampanye dari kodemu sendiri (pemicu gubahan)

Mengapa

Di luar pemicu built-in (delay, scroll, exit- intents, idle, click, page-looked, chat / ticket activity), anda dapat menembakkan kampanye dari manapun di situs anda atau konektor depan -end, setelah sebuah langkah checkout yang sukses, ketika sebuah gerobak ditinggalkan, ketika SPA anda mengubah rute, dll.

Bagaimana

Tata pemicu kampanye ke Gubahan dengan nama kejadian (mis. checkout_failed), lalu panggil hook global dari halaman Anda:

situs / konektor di depanmu berakhir JS
// 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');
💡
Menembak sebuah peristiwa tidak pernah melewati target atau frekuensi, hanya melepaskan "kapan". Kampanye masih harus melewati setiap aturan (geo, audiens, persetujuan, cap) sebelum itu menunjukkan.
Panduan lengkap bagaimana - untuk -use (merancang, blok, analitik, A / B, penerbitan) hidup di pusat bantuan aplikasi in- di bawah Terlibat→Studio PromosiKemampuan di sini ditemukan secara otomatis dari koneksi ENABLED manapun dalam konektor / atau marketplace_connectorsTidak ada yang bisa didaftarkan. / Kapal dua metode, dan studio melakukan sisanya.
Konektor

Kemampuan koneksi survey (Kontrak 2.2)

The survey Kemampuan apapun memungkinkan adanya pasokan platform yang diverifikasi adaptor identitas pelanggan, fakta penonton, variabel aman dan kandidat penerima ke Survey Studio. promo_audience dan tidak memberikan hak milik dari survei, tanggapan, analitik atau pengiriman email.

💡
Status implementation. Pemasangan selesai dan dapat digunakan hari ini: Kontrak Konektor 2.2, SurveyConnectorInterface, Panel Pembangun yang didedikasikan, dihasilkan SurveyProvider.php, paket metadata dan pengisolasian konformance semua kapal. Konsumsi belum kabel: SurveyConnectorRegistry Diimplementasikan dan diuji, tapi tidak ada Vevey runtime yang menyebutnya belum, jadi kesehatan penyedia tidak muncul di amentum UI dan tidak ada paket konektor diterbitkan mendeklarasikan kemampuan. Tanda tangan - token Kesan Informasi, menargetkan dan integrasi variabel, CRM Outreach materialisasi dan pemetaan pertama dikirim tetap terpisah phases. Membangun terhadap kontrak ini sekarang; mengharapkan waktu berjalan untuk mengkonsumsi dalam rilis kemudian.

Memberikan tanggung jawab

Katalog penonton dan fakta-fakta

Menandakan fakta kanonikal dan nilai penyelesaian hanya untuk server- diverifikasi, ruang kerja-terikat subject order_count, last_order_status, cancelled_order_count, customer_created_at, active_subscription_count, past_due_invoice_count dan open_ticket_count.

Katalog dan nilai variabel

Uratkan pelanggan, akun, ketertiban, berlangganan dan variabel dukungan dengan tipe, sensitivitas dan konteks yang diijinkan. Salinan survey membutuhkan fallback dan output- konteks escape.

Pembalikan paging

Kandidat yang dipilih untuk CRM Outreach dengan ID eksternal yang stabil, halaman tebal, cursor deterministik dan metadata terkait. Survey membekukan pendengar yang dipilih sebelum mengirim pesan.

Identitas

Terima identitas hanya dari Gateway Identitas Survey setelah tanda tangan token, kadaluwarsa, tujuan, konektor dan verifikasi area kerja. Peramban-diberikan email, ID, tag atau catatan fakta tidak pernah otoritatif.

Kesehatan waktu-jalan

Konektor SurveyConektorRegistry dirancang untuk melaporkan kompatibel, diblokir dan tidak tersedia penyedia tanpa membuka pengaturan, jalur, identitas mentah atau pesan pengecualian, dan sebuah operator diblokir tidak pernah dapat dipanggil. Permukaan pelaporan belum terkena dalam admin UI: hari ini penyedia terblokir hanya inert.

Aturan tertutup

Kunci tidak resmi, jenis yang salah, nilai yang terlalu besar, ketidakcocokan subjek, tenggat koneksi dan identitas yang tidak diketahui ditolak. Aturan penargetan yang perlu fakta yang tidak tersedia tidak cocok. Halaman recipien telah dicapped dan diaudit. Nilai-nilai sensitif tidak pernah muncul dalam pratinjau atau log publik.

Buka gerbang

Kontrak 2.2 kapal entri kapabilitas registry, antar muka, panel pemetaan Survey, dihasilkan SurveyProvider.php, kemampuan versi, README / pengembang referensi dan perbaikan konformance. Perdagangan, bantuan, jembatan SaaS dan profil PHP lokal termasuk; Standar API konektor opt in. Gerbang statis menolak penyedia Survey yang memanggil ruang-nama Promosi, tabel, atau kemampuan.

💡
Salin dari Promosi adalah imporsi- saja: Pembangunan dapat menerjemahkan pemetaan Promotion yang kompatibel sekali, menyimpan salinan lengkap milik dan catatan provenance. Menghapus atau mengubah pemetaan promosi tidak harus mengubah perilaku Survey.
Konektor

Balas kemampuan umpan balik (Kontrak 2.2)

The reply_feedback kemampuan cermin platform sendiri peringkat per- jawaban ke OpsIQ Seorang bintang pelanggan memberikan balasan staf di dalam WHMCS area klien tanah pada SAME reply di OpsIQ thread admin, dengan chip yang sama, kredit agen, entri halaman Feedback dan Tim & Performance komputasi sebagai peringkat yang diberikan pada OpsIQ Satu penyimpanan, satu chip, satu pipa; konektor hanya menerjemahkan.

Yang menulis jalan

Ada dua jalan masuk dan satu kebenaran. OpsIQ Tiket portal menulis secara natif, tiket peron mengalir melalui konektor, dan inti tanah setiap peristiwa melalui ReplyFeedback::recordMirrored()Kolom yang sama, aturan hanya staf, satu-tick- menjawab-terakhir memenangkan semantik, area kerja dan Suara Pengindeks Pelanggan akan penggunaan tulisan portal. Konektor tidak pernah menulis baris umpan balik sendiri.

Mengonforsikan (empat berkas, lalu tanda ulang)

1
connector_contract.json

Tambahkan kemampuan.reply_feedback masukan: versi 1.0, ReplyFeedbackConnectorInterface, metode replyCreedback Catalog dan PullReppyFeedback, menyiratkan inbound_ticket.

2
settings.json

Tambahkan reply_feedback ke daftar kemampuan. Ini adalah apa yang ditemukan oleh konektor.

3
spec.json

Declare reply_feedback.mode (jajak pendapat dan / atau webhook) dan skala rating platform. Ini adalah apa yang konformance gate baca.

4
Kelas runtime

Implikasi antarmuka, daftar reply_feedback dalam kemampuan (), kemudian tandatangani kembali paket.

Memberikan tanggung jawab

Katalog

Deklarasi mode, skala rating platform sendiri (normalisasi inti ke native 1-5), dan setiap token reaksi katalog harus setuju dengan spesifikasi.json.

Tarik terjemahan

pullReedFoedback return canonical events: platform ticket id, platform reply id, rating, opsional reaction / comment, sublided time and a stable event_idMembaca dan menerjemahkan, tidak pernah menulis.

Idempotensi

event_id stabil setiap STATE umpan balik, sehingga acara diputar ulang adalah no- op dan rating berubah overwrites (menang terbaru, seperti portal).

Kursor disiplin

Halaman yang terbatas dan deterministik; sebuah kursor yang tidak memajukan akhirnya berjalan.

Probe keselamatan

Tanpa konfigurasi, kembalikan halaman lengkap kosong daripada melempar. Proses pelari konformance dengan argumen kosong.

Resolusi tertutup

Core menyelesaikan setiap peristiwa ke dalam jawaban lokal oleh penanda cermin yang sudah ditempelkan cermin tiket (<slug>:<ticket>:reply:<reply>). Suatu peristiwa yang tidak dapat diselesaikan adalah dijatuhkan, tidak pernah tertebak; umpan balik hanya menempel pada staf menjawab; dan kredit agen selalu datang dari penulis jawabannya. inbound_ticket atau ticket_mirror.

Bekerja sebagai contoh: WHMCS

WHMCS menyimpan klien-daerah per-reply peringkat bintang di tblticketreplies.rating. WHMCS konektor mendeklarasikan mode poll dengan 1-5 skala, kapal ticket_reply_ratings perintah relay dalam file bridge, dan menerjemahkan setiap baris ke sebuah acara yang ID cocok whmcs:<ticket>:reply:<reply> tandai cermin tiket nya sudah perangko setelah meng-upgrade konektor, salin kembali file bridge ke WHMCS server sehingga perintah baru ada di sana.

💡
Pengembang penuh kontrak dengan antar muka, bentuk peristiwa, aturan normalisasi dan daftar pemeriksaan konforma: doc/contracts/TICKET_REPLY_FEEDBACK_CAPABILITY.md di OpsIQ paket. Penerimaan: rate a reply inside the platform, wait for the hourly polling, and the same balasan in OpsIQ Menunjukkan chip, halaman Feedback daftar itu, dan acara diputar ulang perubahan apa-apa.
Konektor

Kemampuan penggabungan tiket (Kontrak 2.4)

The ticket_merge kemampuan membuat sebuah tiket bergabung dalam OpsIQ penggabungan di setiap platform tiket terhubung. Kunci platform yang disimpan menerima pesan-pesan yang digabung, dimulai dengan setiap surat pembukaan tiket tergabung, daripada tiket platform yang hanya ditutup.

Mengapa ada

Sebuah penggabungan OpsIQ memindahkan setiap pesan dari tiket yang digabung ke dalam tiket yang disimpan dan menghapus tiket yang tergabung. Sebelum Kontrak 2.4 sebuah konektor hanya mendengar ticket.deleted untuk masing-masing tiket digabung. WHMCS menutup tiket itu dan disimpan WHMCS tiket tidak pernah menerima apa pelanggan pertama kali menulis: subjek menunjukkan [MERGED] dan isinya hilang.

Inti apa yang mengirimkan

ticket. merged (sekali per penggabungan)

ticket_id, ticket_number, subyek dan external_ref tiket KEPT; native_table (opsiq_tickets); site_key; sumber, tiket gabungan tertua pertama, masing-masing dengan ticket_id, ticket_number, subjek, external_ref, client_name, client_email, created_at dan pesan [{reply_id, author_type, author_name, created_at, body}]; merged_by; merged_atPesan adalah percakapan yang dapat dilihat oleh pelanggan, diambil sebelum perpindahan. Catatan internal tidak pernah disertakan.

ticket. deleted (per tiket digabung)

Masih kebakaran, sekarang dengan merged_into {ticket_id, ticket_number, external_refInti tidak mengirimkannya ke konektor yang menyatakan ticket_merge; konsumen lain dapat mengetahui penggabungan dari penghapusan.

Pengait web terluar

ticket.merged adalah acara yang dapat dilepas. Suatu titik akhir sitaan SaaS hook terlangganan ke tiket.Delete juga menerima tices.digabung, jadi integrasi dibangun sebelum 2.4 Mendengar penggabungan.

Apa yang konektor Anda tidak

Deklarasi

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.

Gabung native ketika Anda dapat

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.

Laporkan apa yang tidak bergabung

Kembali {ok, mode, digabung, dicatat, unmerged, error}. Setiap salinan yang tergabung Anda tidak dapat menggabung pergi dalam unjoging, dan core menerapkan penanganan penghapusan normal Anda (tutup, atau hapus dengan mirror_deletes) ke tersebut. Mode kembali tidak didukung hanya ketika platform tidak memiliki penggabungan dan tidak ada catatan pribadi. Kegagalan transportasi atau auth adalah ok = salah dengan alasan; ini direkam dalam Diagnostik.

Hormati jurusmu.

Pengaturan cermin yang sama yang pintu lain tiket mencerminkan Anda gerbang gabungan.

Menggabungkan 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.

Implementasi yang disisipkan

WHMCS

MergeTicket (ticketid = tetap tiket, mergeticketyds = menggabungkan tiket) ketika keduanya berada di WHMCS; AddTicketNote dengan transkrip sebaliknya. Ringkasan 's Tickettmerge hook menggabungkan OpsIQ salin ketika staf bergabung WHMCS.

Zendesk

POST /api/v2/tickets/{id}/merge.json dengan komentar merge privat (hingga lima tiket per panggilan), ditambah transkrip sebagai sebuah komentar pribadi pada tiket yang disimpan, karena Zendesk menutup tiket yang digabung tanpa memindahkan komentar mereka.

OpsIQ Jembatan SaaS

POST /v1/tickets/{id}/merge dengan source_ids, yang menggerakkan portal menjawab dan lampiran; sebuah jawaban internal membawa transkrip untuk tiket yang tidak pernah ada di portal /manage merge menggabungkan OpsIQ dimengerti.

Pembuat Penghubung

ticket_merge diturunkan, tidak pernah ticked: sebuah paket yang dihasilkan mendeklarasikan ketika menghubungan tiket platform yang ia buat (a ticket.created pelanggan dengan link ticket on), handle tilet.delete, atau declare ticket_mirrorDi ujung tiket, di bawah Gabung, pilih aksi gabungan platform (merge map.target_remote_id, dan bergabung.source_remote_ids atau penggabungan.source_remote_id) dan aksi catatan pribadi (catatan peta.remote_id dan note.body). Yang dihasilkan mergetickets () menggunakan keduanya. Dengan demikian, Builder memperingatkan bahwa pesan tiket yang digabung tidak akan mencapai platform.

💡
Kontrak penuh: doc/contracts/CONNECTOR_CONTRACT.md, bagian penggabungan Ticket. Penerimaan: gabungan dua tiket dalam OpsIQ yang keduanya ada di platform, kemudian membuka tiket tetap pada platform. Tiket bergabung pesan pertama ada.
Konektor

Pasar konektor

Tempat Marketplace memungkinkan Anda menemukan, menginstal, dan mempublikasikan konektor yang dibangun oleh masyarakat.

Tempat Marketplace
Pasar konektorSebuah jaringan yang dapat dicari dari kartu konektor komunitas dengan kategori, tombol instalasi dan rating bintang.Pasar konektorarea kerjaCari konektor...CalendlyMenjadwalPasang★ 4.8HubSpotCRMPasang★ 4.6MailchimpSurelPasang★ 4.7QuickBooksAkuntansiPasang★ 4.5TwilioSMSPasang★ 4.9NotionDocsCommentPasang★ 4.41DISCOVERKonektor komunitas2INSTALSatu klik3PUBLISHTanda tangani dan serahkan milikmu
Ramban konektor komunitas, pasang dalam satu klik, atau tanda tangan dan mempublikasikan sendiri, pre- terpasang dan pasar baik dapat dicari.

Mencari dan memasang konektor

1
Ramban

Pergi ke Konektor > Marketplace. Cari dengan nama, kategori, atau platform.

2
Ulasan

Periksa deskripsi, aksi yang didukung, dan rating.

3
Pasang

Klik Pasang. Paket konektor mengunduh dan memasang ke marketplace_connectors/.

4
Atur

Aktifkan dalam Konektor, masukkan kredensial API, dan uji.

Penerbitan suatu konektor

1
Build dan uji

Gunakan Conektor Builder. Verifikasi semua tindakan bekerja.

2
Paket

Buat profil.json, tindakan.json, Pengetahuan.json, dan file PHP.

3
Tanda tangan

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
Kirim

Unggah arus pengiriman pasar untuk ditinjau.

Dua penghitung konektor

konektor / - apa yang sebenarnya berjalan

Akar penemuan waktu jalan. Semua yang ada di sini adalah live: konektor yang kapal dengan OpsIQ, apapun yang dipasang dari pasar, dan apapun yang Konektor Builder mempublikasikan pada instalasi ini.

marketplace_connectors / - dimana paket ditulis

Penerbitan SUMBER untuk paket pasar pihak pertama. Ini bukan akar penemuan: tidak ada di sini yang hidup sampai dikemas, ditandatangani, menyebar ke katalog dan dipasang, di mana titik salinan tanah dalam konektor /.

💡
Lihat di kedua tempat. Paket yang Anda ciptakan dibawah marketplace_connectors/ bukanlah salinan yang berjalan — pemasangan menyalinnya ke connectors/, dan hanya salinan itu yang terdeteksi pada saat berjalan. Stripe, BigCommerce, Magento 2, PrestaShop, OpenCart, Amazon SES, Postmark dan Resend adalah semua paket marketplace: pasang satu sebelum mengharapkan menemukannya di Connectors.
Pengembang

API dan pembangun webhook

The API Dan Pembangun Webhook memungkinkan Anda membuat gubahan API titik akhir dan pendengar webhook di dalam OpsIQ tanpa menulis PHP mentah.

API pembangun
API dan pembangun webhookPembangun memilih tipe pemicu (inbound webhook, jadwal, event, manual) yang feed ke dalam aksi yang dapat diatur.API & pembuat webhookarea kerjaTRIGTERWebhook masukJadwal (cron)Acara OpsIQManualAksiLadang masuk peta →buat tiket / beritahu / panggil APISimpan titik akhir1TRIGGTERSWebhook · jadwal · peristiwa · manual2NO RAW PHPDibangun di UI3AKSILadang peta, lalu jalankan
Build titik akhir tanpa PHP mentah: pilih pemicu (inbound webhook, jadwal, event atau manual), lalu peta field untuk sebuah aksi.

Pemicu

Peristiwa

Jalankan ketika sesuatu terjadi di OpsIQ, atau ketika sebuah sistem eksternal memposting suatu peristiwa yang cocok dengan webhook Anda URL. Ketik nama acara, misalnya ticet.created.

Jadwal

Gunakan salah satu acara built-in sebagai nama acara: cron. minutely, kron. hourly atau cron. dail. The Actions dan Triggers layar memiliki tombol untuk ini, sehingga Anda tidak perlu mengingat mereka.

Frase

Jalankan ketika sebuah admin meminta AI untuk itu dalam bahasa biasa. Tambahkan frasa yang seharusnya cocok, sebagai contoh temukan pelanggan.

Webhook masuk

Sebuah sistem eksternal mengirimkan POST HTTP ke Anda OpsIQ webhook URL Setiap pemicu yang mendengarkan peristiwa itu.

Hanya menjalankannya kadang-kadang: kondisi

Pemicu peristiwa dapat membawa kondisi, sehingga hanya berjalan ketika data yang masuk cocok. Tanpa kondisi itu berjalan setiap kali acara kebakaran.

Ruas

Sebuah path ke dalam data peristiwa. Gunakan sebuah titik untuk nilai nested, sebagai contoh traver. email..

Cocokkan semua atau apapun

Pilih apakah setiap aturan harus cocok, atau hanya satu dari mereka.

Tes teks

sama dengan, tidak sama, berisi, tidak mengandung, dimulai dengan, adalah salah satunya, tidak termasuk. Cocok dengan kapitals yang diabaikan.

Tes angka

paling tidak, lebih kecil dari kebanyakan nomor yang ditulis sebagai teks masih dibandingkan dengan benar

Tes kehadiran

sekarang, hilang, kosong, tidak kosong.

Hanya halaman on- call insinyur untuk tiket mendesak

Skenario:
Tiket. created, dengan satu aturan: prioritas sama mendesak.
Apa yang harus dilakukan:

Tindakan berjalan untuk tiket mendesak dan dilewati untuk segala sesuatu yang lain.

💡
Jika kau meninggalkan aturan kosong pemicu berjalan pada setiap kejadian yang cocok, yang merupakan perilaku yang sama seperti sebelum kondisi ada.

Aksi

Kirim webhook

Kirim POST HTTP ke URL eksternal dengan muatan custom.

Buat tiket

Buat tiket dukungan dengan departemen, subjek, dan pesan yang ditentukan.

Kirim email

Kirim surel dengan templat gubahan.

Perbarui rekaman

Perbarui pelanggan, tiket, atau rekam CRM.

Jalankan aksi konektor

Jalankan aksi yang terdaftar dari konektor yang aktif dengan izin konektornya dan aturan konfirmasi.

Lari OpsIQ Umum API aksi

Cari yang lengkap bernama Umum API katalog. Fields, scopes, perizinan, konfirmasi, idempotensi dan dry- jalankan dukungan datang dari kontrak aksi langsung; arus kerja mengeksekusi di dalam ruang kerja yang disimpan dan konteks administrator.

Kirim permintaan . API asli

Gunakan sebuah konektor native API Baca atau dikonfirmasi asli API Aksi tulis ketika titik akhir penyedia tidak memiliki aksi kurated. Kredensial tetap berada di dalam konektor dan hanya jalur operator relatif yang diterima.

Pembangun Aksi & Triggers, /api/v1.php, OpenAPI dan Postman menggunakan sama ContractRegistry ActionContristry, sehingga aksi yang dipilih tidak dapat diselektable dari dokumentasi runtime.
Pengembang

Buku masak Triggers

Realy- to-use pemicu-action resep untuk otomatisasi umum.

Bagaimana cara kerjanya
Buku masak TriggersSebuah aliran resep: sebuah webhook uptime. down melewati filter produksi, kemudian penggemar keluar untuk membuat tiket mendesak dan memberitahu Slack.uptime.downmonitor webhookjika prodfilterBuat tiket mendesakBeritahu Slack # ops
Buku masak Triggers

Buat otomatis tiket dari pemantauan

Skenario:
Sistem pemantauan mengirim POST ketika server mati.
Apa yang harus dilakukan:

Trigger: Inbound webhook Condition: payload.status = "down" Action: Create ticket · Dept: Technical, Subject: "Server {{payload.hostname}} down", Priority: Urgent

Slack pemberitahuan pada perintah besar

Skenario:
Slackpesan setiap kali pelanggan menempatkan perintah atas$100.
Apa yang harus dilakukan:

Trigger: Event (order.completed) Condition: order.amount > 100 Action: Send webhook to Slack incoming webhook URL with order details

Surel yang dicerna mingguan

Skenario:
Ringkasan email ke manajemen setiap Senin pukul 9 pagi.
Apa yang harus dilakukan:

Trigger: Schedule (Monday 09:00) Action: Send email with last week's stats pulled from the REST API

Tiketg basi Escalate

Skenario:
Jika tiket tidak memiliki balasan untuk 24 jam, ditetapkan untuk memimpin tim.
Apa yang harus dilakukan:

Trigger: Schedule (every hour) Condition: ticket.status = "Open" AND ticket.last_reply_age > 86400 Action: Assign to team-lead, add internal note

Pengembang

Membangun tindakan pertama Anda

Jalan melalui ini menciptakan konektor yang sederhana tindakan dari awal.

Aksi pembangunan
Membangun tindakanSuatu bentuk definisi aksi-: nama lookup_order, permintaan GET untuk /orders/{id}, sebuah parameter id diketik, dan lewat 200 Tes.Aksi baruarea kerjaAksi baruNamalookup_orderPermintaanGET/orders/{id}Parameterid200 ditemukan1DEFINENama, metode, titik akhir2PARAMSMasukan yang diketik3UJILive 200 hasil
Buat satu aksi dari awal, sebutkan saja, atur metodenya dan titik akhir, nyatakan params yang diketik, dan uji secara langsung 200.

Dua jenis aksi

Sebelum Anda mulai, putuskan yang mana yang Anda butuhkan. Keduanya dikonfigurasi dalam layar yang sama.

Panggil eksternal API

Aksi mengirim permintaan HTTP ke platform Anda. Pilih ini ketika OpsIQ perlu menjangkau dan melakukan sesuatu di sisi Anda.

Jalankan aksi konektor

Aksi menjalankan sesuatu yang telah disediakan oleh konektor yang terpasang. Pilih ini ketika pekerjaan sudah tersedia dan Anda hanya ingin memicunya. Anda memilih aksi konektornya dari daftar, sehingga tidak ada untuk kawat.

Pilihan kedua adalah bagaimana Anda menggunakan kembali semua yang telah dapat dilakukan oleh konektor Anda tanpa membuatnya lagi: membaca sebuah benang tiket, mencari pelanggan, mengimpor kontak, dan sebagainya. Pilih aksi konektornya dari dropdown dan Anda selesai.
1
Rencana tindakan

Contoh: "lookup_product". Cari sebuah produk dengan nama, harga kembali, saham, dan deskripsi.

2
Definisikan dalam aksions.json

Tambahkan definisi aksi:

actions.json - bentuk nyata manifest
{
  "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 hal yang membuat sebuah tindakan gagal mendaftar sama sekali. action_id Adalah REQUIRED dan harus 2 ke 100 karakter dari huruf kecil, digit dan garis bawah - sebuah entri tanpa satu ditolak langsung. Muatan adalah sebuah objek dengan "aksi" LIST, bukan sebuah peta dikelarkan oleh nama action. Dan pemetaan balasan "dengan DOTED pata.id), bukan JSONPath ($.data.idd) - tidak ada"response_mapping, "metode", "titik akhir" atau "param" kunci di mana saja dalam registry.
3
Uji dengan dry- run

Dalam Langkah Penginjau Konektor, tekan Dry. Ini menjalankan daftar pemeriksaan konformance lengkap terhadap paket Anda dan, ketika Anda telah menyediakan kredensial, membuat tes koneksi yang nyata. Ini tidak menggunakan data contoh.

4
Verifikasi penggunaan AI

Tanyakan admin AI: "Cari Produk Widget Pro". AI harus menemukan dan mengeksekusi aksi.

⚠️
Menambahkan aksi ke actions.json TIDAK membuat rute AJAX, sehingga tidak ada untuk meregenerasi. Aksi konektor disinkronkan ke OpsIQ ketika konektor diaktifkan atau pengaturan disimpan: re- simpan connector dan aksi appears. alat /gen_route_registry.php mencakup pengiriman admin AJAX dan tidak memiliki bantalan pada aksi konektor.
Pengembang

Titik akhir acara inbound

Titik akhir diterima ditandatangani JSON dari sistem lain dan mengubahnya menjadi aktivitas kontak deduplikasi yang dapat memberi makan jadwal, mencetak angka dan aliran kerja.

Layar produk
Titik akhir yang terjalinSetiap sumber inbound memiliki sendiri URL, rahasia, pemetaan dan hasil aktivitas baru-baru ini.Titik akhir yang terjalinarea kerjaSUMBES5ACCEPTED12.4kREJECTED18HIDUP WORKSPACE VIEWplatform penagihanperistiwa berlanggananSehatAplikasi produkmendaftar dan penggunaan peristiwaSehatID Kegiatanprovider_event_idDeduplikasiTanda tanganX-OpsIQ-Inbound-SignatureHMAC1CREATE SOURCEURL dan rahasia2MAP PAYLOADEmail, event dan ID3VERIFYHMAC kemudian menelan
Setiap sumber inbound memiliki sendiri URL, rahasia, pemetaan dan hasil aktivitas baru-baru ini.

Buat satu sumber per sistem pengiriman. OpsIQ menghasilkan URL/ token dan rahasia. Kirim JSON dengan Content-Type: application/json dan menandatangani tubuh mentah yang tepat menggunakan HMAC- SHA256:

X-OpsIQ-Inbound-Signature: sha256=<hex hmac>

Peta JSON path untuk surel kontak, nama acara, dan ID peristiwa opsional. ID adalah kunci deduplikasi yang disukai. Aktivitas diterima memasuki timeline kontak dan dapat mempengaruhi peringkat, segmen, aturan lifecycle dan arus kerja.

Tolak tanda-tangan yang tidak valid sebelum mengurai data bisnis. Putar suatu rahasia dengan memperbarui kedua sisi di dalam jendela yang dikendalikan; jangan log rahasianya.

Pengembang

Operasi webhook outbound

Administrasi webhook terluar menciptakan langganan yang ditandatangani, tes titik akhir dan monitor asinkron pengiriman dan uji ulang kesehatan.

Layar produk
Pengait web terluarHalaman web yang dijilid daftar titik akhir HTTPS, langganan acara, kesehatan pengiriman dan satu kali klik ujian ditandatangani.Pengait web terluararea kerjaENDPOINTS7SUCCESS99.2%MENCARI BARU4HIDUP WORKSPACE VIEWCermin CRMkontak. * dan kesepakatan. *SehatBus dukunganTiket. * Dan chatting. *SehatGudang data*MencobaPengujian pengirimanMuatan sampel ditandatanganiSiap1SUBSCRIBEHTTPS URL dan kejadian2AUTHENTICATETanda tangan HMAC3OBSERVEPengiriman rel dan ulang
Halaman web yang dijilid daftar titik akhir HTTPS, langganan acara, kesehatan pengiriman dan satu kali klik ujian ditandatangani.

Administrator penuh membuat titik akhir HTTPS, memilih peristiwa tertentu atau wildcard, menyimpan rahasia dengan aman dan mengirim tes. OpsIQ tandai muatan mentah dengan HMAC- SHA256:

X-OpsIQ-Signature: sha256=<hex hmac>

Verifikasi tanda tangan sebelum deserialising atau akting. Pengiriman secara tidak sinkron dan otomatis dicoba kembali setelah sekitar 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. Gunakan recent- pengiriman rel untuk memeriksa status, kode respon dan usaha jumlah.

Penerima pesan anda harus iimpotasi karena setiap sistem asinkron dapat dikirimkan kembali. kembalikan respon 2xx hanya setelah penerimaan yang tahan lama.

Pengembang

Webhook

Pengait web membiarkan sistem eksternal memberitahu OpsIQ ketika sesuatu terjadi (inbound) dan membiarkan OpsIQ beritahu sistem eksternal ketika sesuatu terjadi secara internal (outbound).

Webhook
Pengait web terluarLayar webhook yang telah dikeluarkan. tabel titik-akhir dengan nama, kejadian yang terlangganan, titik-titik pengiriman, dan tombol uji Send-.Pengait web terluararea kerjaTitik Akhir+ Simpan titik akhirNAMAPERISTIWATRANSPORTASISlack # sales-alerthttps://hooks.slack.com/…crm.deal.won, urutanUjiCermin CRMhttps://api.acme.com/hookkontak. *, ticet. createdUjiZapierhttps://hooks.zapier.com/…chat.startedUji1ENDPOINTSNama, peristiwa, URL2SIGNEDHMAC + auto- dicoba lagi3SEND TESTVerifikasi pengiriman
Layar jebol web yang nyata: setiap titik akhir dengan kejadiannya, kesehatan pengiriman baru-baru ini, dan satu klik Tes Kirim, ditandatangani dan dicoba ulang.

Pengait web terluar

Berlangganan

Pergi ke Pengaturan > Pengait Web. Tambahkan sebuah titik akhir URL dan pilih acara untuk diterima.

Kejadian

Berlangganan ke acara tertentu, atau ke ["*"] Daftar lengkap untuk instalasi Anda ada di bawah, dan webhooks.events.list mengembalikan sebagai JSON.

Coba lagi

Gagal pengiriman ulang dengan latar belakang eksponensial. Setelah 15 gagal berturut-turut, titik akhir dimatikan otomatis.

Penandatanganan

Setiap pengiriman ditandatangani. X-OpsIQ-Signature carries v2=<hex>, dan string yang ditandatangani adalah version.timestamp.delivery_id.body - bukan hanya tubuhnya saja selalu verifikasi, dan selalu membangun kembali senar persis lihat contoh dibawah ini

Perlindungan SSRF

OpsIQ tidak akan mengirim ke private / internal IPs (127.x, 10.x, 172.16.x, 192.168.x, 169.254.169.254).

Pengiriman sinkronisasi

Pengait web dikirim melalui antrian tugas, bukan memblok OpsIQ Operasi.

ID Kegiatan Stabil

Setiap peristiwa memiliki event_id unik yang tetap sama untuk mengulang deduplikasi.

Apa yang datang dengan setiap pengiriman

X-OpsIQ-Event

Nama acara, misalnya ticket.created.

X-OpsIQ-Delivery

ID pengirimannya tetap sama di seberang retri - gunakan untuk mengabaikan duplikat.

X-OpsIQ-Timestamp

Unix detik saat penandatanganan waktu, menolak apapun yang lebih tua dari sekitar lima menit.

X-OpsIQ-Signature

Tanda tangan sebagai v2=<hex>Berpencar =: sisi kiri adalah versi, sisi kanan adalah nilai yang Anda bandingkan.

X-OpsIQ-Signature-Version

Skema yang sedang dipakai, saat ini v2. Baca dari header daripada hard- coding itu, dan kode Anda terus bekerja jika v3 yang pernah ditambahkan.

⚠️
String yang ditandatangani adalah version.timestamp.delivery_id.bodyHashing hanya tubuh adalah satu alasan yang paling umum verifikasi gagal setiap pengiriman asli ditolak dan titik akhir terlihat rusak.

Memverifikasi pengiriman

PHPOpsIQwebhook
<?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.jsOpsIQwebhook
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 acara yang dapat dikirim instal ini

Dihasilkan dari bangunan berjalan, sehingga selalu cocok versi yang Anda berada di.

52 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 daftar yang sama ini sebagai JSON, sehingga kode Anda tidak pernah harus hard- kode itu.

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.

kontak (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.

crm (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.

surel (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 (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.

keamanan (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 (5)

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.

user (1)

user.registered

Fired when a new user/customer account is created. Payload: user_id (required), email, firstname, lastname, company, country, source.

Bagaimana aku menguji webhooks lokal?+

Gunakan ngrok untuk mengekspos server lokal Anda. Atur titik akhir webhook ke ngok Anda URL.

Bagaimana jika titik akhir sementara saya turun?+

OpsIQ kembali dengan backoff eksponensial. Jika titik akhir Anda pulih dalam jendela percobaan ulang, tidak ada peristiwa yang hilang.

Pengembang

Kunci API

API kunci otentikasi permintaan ke OpsIQ REST API Setiap kunci memiliki izin scoped.

Kunci API
Kunci APIThe API layar kunci: panel masalah dengan tingkat akses dan chip scope, di samping daftar kunci bertopeng yang ada dengan tombol pembatalan.Kunci APIarea kerjaKeluarkan suatu kunciAksesHanya bacaTerbatasSCopescontacts.readtickets.readevents.writeKunci sertifikatKunci AndaIntegrasi Zapieropq_••••4f2aMenghilangkanAplikasi mobileopq_••••91c7MenghilangkanExport analisisopq_••••2db0Menghilangkan1SCOPEDHanya baca atau dibatasi2PER-ACTIONPilih scope yang tepat3REVOCABLEPutar kapan saja
Yang sebenarnya API layar kunci: keluarkan sebuah scoped, baca-saja atau kunci terbatas dengan memilih scope yang tepat, dan mencabut apapun kapanpun.

Membuat kunci API

1
Pergi ke Pengaturan > API Keys

Navigasi ke manajemen kunci API.

2
Klik Buat Kunci

Berikan nama deskriptif.

3
Pilih scopes

Berikan kunci itu hanya apa yang dibutuhkan. jadi integrasi laporan dapat diberikan dibaca dan tidak ada yang lain.

Scope tersedia

Pilih yang paling sempit yang bisa bekerja. admin memenuhi setiap ruang lingkup di bawah ini, jadi gunakan hanya ketika Anda benar-benar membutuhkan akses yang luas.

crom. read / crm. write

Kontak, perusahaan, penawaran, kegiatan, segmen, jangkauan, konversi, lifecycle dan CRM webhooks.

tickets. read / tites. write

Daftar dan baca tiket dan pesan mereka; balas, update, terbuka dan jalankan operasi antrian massal.

konversi. Baca / konversations. write

Baca percakapan-obrolan dan riwayat pesan; kirim pesan, penempatan dan mengubah status.

kb. read / kb. write

Entri dasar pengetahuan.

chat. read / chat. write

Templat jawaban yang tersimpan.

connectors.read

Lihat konektor mana yang dipasang, apa yang bisa mereka lakukan, dan uji kredensial mereka.

automations.read

Lihat tindakan Anda, pemicu dan sejarah berjalan mereka.

departments.read

Departemen tersedia untuk routing.

notifications.read

Pemberitahuan untuk operator bernama.

analytics.read

Bagian laporan, CSV ekspor dan definisi laporan dijadwalkan.

site_intelligence.read

Situs yang dimonopoli dan laporan SEO mereka.

files.read

Tertanda unduhan link untuk lampiran.

status.write

Status page komponen dan insiden.

menulis

Pembantu Al menulis: draft, summarise, translasi, tulis ulang, compose, analyse.

admin

Semuanya, termasuk sejumlah kecil aksi sensitif yang sengaja tidak dapat dicapai oleh lingkup sempit: menghapus kontak, mengubah pengaturan privasi, dan membaca log akses.

💡
Panggil meta. actions dengan kunci anda untuk melihat tindakan mana yang dapat dijalankan pada instalasi anda. Itu selalu lebih terpercaya daripada bekerja dari daftar.

Tingkat akses

Semua

Kunci ini bisa disebut apa pun yang boleh dilihat mata-matanya.

Hanya baca

Setiap tulisan ditolak, apapun yang dikatakan mata-mata pilihan teraman untuk pelaporan, dasbor dan apa pun yang seharusnya tidak mengubah data.

Terbatas

Anda menuliskan aksi yang tepat yang dapat dihubungi kunci.

4
Salin kunci

Ditampilkan sekali. Mulai dengan "opq _." Simpan secara aman.

🚫
Jangan pernah berbagi API kunci dalam kode publik, sisi klien JavaScript, atau penguasaan versi. Gunakan variabel lingkungan.
Pengembang

Hubungkan situs web Anda

The OpsIQ widget adalah sebuah JavaScript snippet yang Anda tambahkan ke situs web Anda untuk pelacakan, percakapan AI, pembuatan tiket, dan identifikasi pelanggan.

Bagaimana cara kerjanya
Hubungkan situs web AndaTanda skrip satu baris di sebelah kiri dan, di kanan, halaman web dengan OpsIQ chat bubble muncul di sudut.<!-- paste before </body> --><script src="https://cdn.opsiq.io/w.js" data-site="ws_8a2f" async></script>
Hubungkan situs web Anda

Instalasi dasar

Snippet widget dasar
<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

data-site-key

Perlu kunci situs Anda dari Situs Terhubung.

data-mode

Opsional. "chat" (default), "ticket", atau "both".

data-position

Opsional. "bottom-right" (default) atau "bottom- left".

data-color

Opsional, kode hex warna primer.

data-greeting

Pesan sambutan awal.

data-language

Bahasa UI: "en", "es", (e) "fr", 'de ",

data-identity-token

Opsional. Tanda identitas yang ditandatangani oleh Server-.

Dukungan SPA

Pelacakan rute Manual SPA
// 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,
}]);

Aturan CSP

Aturan CSP bagi 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 alat ini memperlambat website saya?+

No Under 15 KB gzipped, loads async after page content.

Dapatkah saya menyesuaikan penampilan?+

Gunakan dat- warna untuk warna primer. Dukungan kontak untuk pilihan CSS override.

Pengembang

Widget resep instalasi

Pemasangan platform-spesifik.

Bagaimana cara kerjanya
Widget resep instalasiPlatform kartu instalasi untuk WordPress, Shopify dan Google Tag Manager, masing-masing mengatakan di mana untuk menambahkan widget.WPWordPressPasang plugin, masukkankunci situsmu, simpan.TokoShopifyTempelkan snippet ketheme. fluid sebelum /body.GTMManajer TagHTML, semua halaman.
Pasang resep

WordPress

Skenario:
Tambahkan ke semua halaman dari sebuah situs WordPress.
Apa yang harus 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:
Tambahkan ke toko Shopify Anda.
Apa yang harus 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 harus 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:
Tambahkan ke Anda WHMCS area klien.
Apa yang harus dilakukan:

Penyiapan > Pengaturan Umum > Lainnya > Konten Global Footer. Tempelkan snippet. Atau edit templat footer. tpl Anda.

Google Tag Manager

Skenario:
Tambahkan melalui GTM.
Apa yang harus dilakukan:

Buat Ubahan HTML tag, paste snippet. Trigger: Semua Halaman. Publikasikan.

Pengembang

Widget admin di backend Anda (satu kontrak, platform apapun)

Embed OpsIQ Asisten admin - admin chat, tiket inbox dan Al Writing - di dalam platform Anda sendiri panel admin, sehingga tim Anda tidak pernah meninggalkan alat mereka SSO, ini adalah kontrak one generic yang diimplementasikan dalam ~15 baris dari kode server platform Anda - pola yang sama Zendesk, Intercom dan Discourse digunakan untuk SSO. Tidak ada plugin perplatform yang menunggu: stack apapun yang dapat menghitung HMAC bisa melakukan ini hari ini.

Langkah 1 - garis embed

Dari Situs Jauh→situs Anda→Kode, salin baris loader dan tambahkan ke halaman panel admin anda (footer termasuk, template tata letak, atau sebuah kotak admin-only gubahan-JS):

Satu baris embed
<script async src="https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=SITE_KEY&identity_token=TOKEN_FROM_STEP_2"></script>

Langkah2- KatakanOpsIQyang login (server-signed)

Hanya aplikasi ANDA yang tahu di mana admin ditandatangani - itu bukan sebuah kekurangan, itu adalah model keamanan. Server Anda menghasilkan tanda tangan pendek dari sesi anda sendiri, persis seperti tanda identitas pengunjung, ditandatangani dengan situs rahasia webhook yang sama:

PHP · tanda tangani 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 per-admin, otomatis

Setiap admin yang log ke platform Anda adalah cocok secara individual:OpsIQ's per-admin access gate resolve the token' s username + email terhadap satuOpsIQagen (halaman tim; gunakan daftar "cocokkan email" ketika platform email berbeda) dan menerapkan area kerja agen itu, departemen dan ijin inbox. Anggota staf baru = tambahkan agen dalamOpsIQ; tidak ada perubahan embed.

Jalan-jalan

Apapun string peran Anda kirim ditampilkan pada platformOpsIQsisi untuk atclair; otorisasi selalu berasal dariOpsIQAgen record, tidak pernah dari peran menegaskan.

Kenapa tidak membaca kue login kita?

Peramban tidak pernah mengirim kue admin Anda ke asal lain - tidak ada vendor dapat "hanya mendeteksi" lintas log masuk Anda. Setiap produk serius menyelesaikan ini dengan cara yang sama: server Anda vouches, ditandatangani. Itu adalah seluruh kontrak.

Tidak ada mode berbagi di situs Anda sendiri

Off OpsIQ host tidak ada mode unsigned atau shared-login: loader tetap tersembunyi sampai tanda tangan penanda admin tiba. Token =... nilai dalam Codes loader adalah kunci widget yang hanya mengidentifikasi situs; ini tidak pernah dapat menandatangani siapa pun masuk.

The authenticated tanda - taruh di tingkat TOP

Bendera ini adalah pernyataan server Anda bahwa manusia benar-benar login, danOpsIQmenolak setiap tanda tanpa itu. "authenticated" => true beside site_key/iat/exp, TIDAK hanya di dalam admin Obyek. OpsIQ saat ini menerima di kedua posisi, tapi rilis yang lebih tua hanya membaca tingkat atas - dan kegagalan adalah menipu: daftar percakapan, sejarah dan tidak dibaca semua keaslian baik sementara setiap obrolan mengubah jawaban "Perlu login admin", yang terlihat seperti bug sesi dan tidak. Jika Anda melihat persis bahwa split, periksa bendera ini terlebih dahulu.

Kepucian token

Tanda tangan di server saja, tidak pernah dalam perambanJavaScriptTerus eksp pendek (menit ke jam);OpsIQMenolak token yang sudah kadaluarsa dan tertanggal, dan tanda tangan mengikat token ke kunci situs Anda.

Implementasi referensi

The WHMCS modul melakukan ini secara otomatis dari WHMCS sesi admin; Botble Berkas penghubung Hotel yang melakukannya dari sesi Laravel (op =admin_identityKeduanya hanya kontrak ini dalam dialek platform mereka - salin mana yang paling dekat dengan tumpukan Anda.

Tidak ada kabel halaman (konektor- dideklarasikan probe)

When yourOpsIQPenghubung menyimpan titik akhir identitas Anda admin_identity_probe_url konfigurasi, baris loader PLAIN adalah semua halaman admin anda dibutuhkan: widget menemukan probe dari konektor, panggil dengan kunci situs + widget token, dan otentikasi setiap admin secara otomatis. Halaman masih dapat menimpa dengan data-identity-endpoint atribut atau window.OpsIQAdminIdentityEndpoint.

💡
Rahasia penandatanganan diisi untuk Anda. Dalam Situs Remote, situs Anda, Kode, Opsi 3, Tandatangani di stafmu, setiap contoh sudah berisi rahasia situs ini sendiri, jadi kode bekerja sebagai ditempelkan: tidak ada yang bisa menyalin atau mengkonfigurasi. Contoh pada halaman ini menunjukkan opsiq_whsec_YOUR_SITE_SECRET Setiap contoh terlihat untuk OPSIQ_SITE_SECRET (atau pengaturan kerangka kerja Anda sendiri, bernama dalam catatannya) pada server pertama dan gunakan itu ketika diatur, sehingga Anda dapat memindahkan rahasia keluar dari berkas kapanpun Anda mau, misalnya untuk memutarnya tanpa mengedit kode. Cara file berjalan di server Anda saja: tidak pernah menempelkannya ke halaman web atau browser JavaScript, dan tidak pernah komit ke repositori umum, karena siapa pun yang memegang rahasia dapat mendaftar sebagai salah satu pelanggan atau staf Anda. WHMCS dan Botble tidak perlu semua ini: WHMCS Hook tiba dengan rahasia diisi, dan Botble Panel konektor mengisinya ke dalam jembatan.

Komplete code, platform by platform

Setiap contoh mencetak tag Admin Chat hanya untuk sebuah tanda tangan pada anggota staf, dengan token yang ditandatangani ditambahkan, dan menjawab penyegaran widget (?opsiq_identity_refresh=1&role=admin) dengan {"success":true,"identity_token":"…"} atau 401. Remote Situs, situs Anda, Kode, Opsi 3Tanda tangan di stafmu menunjukkan kode yang sama dengan kunci situs dan rahasia yang kau isi.

⚠️
Token admin adalah dua bagian bentuk: base64url (payload), sebuah titik, maka hex HMAC-SHA256 dari teks base64url. Ini bukan JWT, dan JWT. ditolak. Objek admin membutuhkan id dan email, dan exp harus ada di dalam 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>`)
}

Menimplementasikan titik akhir identitas pada Laravel (catatan hard- won)

Jika platform Anda Laravel (Botble, Bagisto, aplikasi custom) dan titik akhir Anda adalah berkas standar yang menampilkan kerangka kerja untuk membaca log dalam admin, tiga spesifik akan menghemat jam - masing-masing menghasilkan kegagalan produksi nyata sebelum dipelajari:

Ikat permintaan sebelumnya Bootstrap

Penyedia layanan Anda mungkin bisa mengatasinya request Laravel sendiri mengikat permintaan pertama yang ditangkap di dalam Kernel::handle() - "Cermin", "Orde"... $app->instance('request', Request::capture()) SEBELUM $kernel->bootstrap(), atau Anda mendapatkan "Kelas target [permintaan] tidak ada".

Prefiks cookie adalah HMAC-keyed

Modern Laravel prefix cookie values dengan HMAC dihitung dengan KEY APP (CookieValuePrefix) - polos sha1(name."v2") Tidak pernah bisa cocok itu. CookieValuePrefix::validate($name, $decrypted, $keys), dengan struktur fallback (40 hex chars + | pada posisi40Katakan: sebuah sesi id lebih panjang dari40chars (81= prefiks masih dicantolkan) dan sesi yang memuat hanya dengan _token di dalamnya.

Dimana hidup login

Stempel bulan Agustus login_<guard>_<sha1(guard class)> - untuk penjaga web standar: 'login_web_' . sha1(Illuminate\Auth\SessionGuard::class)Pindai semua login_* kunci numerik sebagai fallback untuk penjaga custom.

Awakutu seperti jembatan

Kapal a debug=1 mode yang nama gagal STEP dan pengecualian - catch buta -semua membuat penyebaran langsung tidak terdiagnosis. jembatan Botble (dari v1.0.7) adalah rujukan: langkah penanda di kernel / bind / bootstrap / decrypt / session / auth / db.

Laravel (salin, atur dua konstanta, selesai)
<?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]);
}

Titik akhir yang sama pada tumpukan lainnya

Hanya "siapa yang terdaftar?" baris berubah — blok tanda tangan identik di mana-mana. Tanda tangan pada server, tidak pernah dalam JavaScript.

WordPress · WHMCS · Symfony · PHP biasa — swap lookup, 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]);

Ketika tidak bekerja - mendiagnosa urutan ini

Widget tak pernah muncul, konsol mengatakan "tanda tangani tanda identitas"

Titik akhirmu kembali tidak ada identity_token. Buka titik akhir URL langsung dalam logdy-dalam peramban admin dengan &debug=1 — Anda akan melihat langkah gagal. Pada Laravel ini hampir selalu item request-binding atau cookie-prefix di atas.

Sejarah dan percakapan bekerja, tapi setiap chatting mengubah mengatakan "Perlu login admin"

Perpecahan klasik. / Token mu hilang di TOP-LEVEL authenticated tanda - titik akhir widget sendiri menerima token, verifikasi bersama di balik arus obrolan menolaknya. Tambahkan "authenticated" => true beside exp.

"admin tidak diberikan dalam OpsIQ" (HTTP 401)

Token diverifikasi, tetapi nama pengguna + email nya tidak cocok OpsIQ Agen, tambahkan agennya OpsIQ → Tim, atau tambahkan email platform ke dalam daftar pesan surel milik agen tersebut ketika berbeda dengan mereka OpsIQ email.

Semuanya 403s dari browser tetapi bekerja dengan curl

Preflight CORS menolak salah satu tajuk permintaan Anda. Titik akhir Anda harus menjawab OPTIONS dan echo asal permintaan, atau hanya menghindari tajuk ubahan - widget hanya membutuhkan cookie.

Bekerja kemarin, gagal hari ini

Periksa exptoken: ditoken kurang hidup dengan desain. Widget secara otomatis probe, jadi ini biasanya berarti titik akhir berhenti melihat sesi - sebuah rotasi kunci aplikasi, perubahan driver sesi, atau perubahan cookie- domain.

💡
Widget admin yang dibuat tersembunyi sampai identitas memecahkan, dan setiap percakapan / inbox / data panggilan dipaksa server-side terhadap yang cocokOpsIQnilai terlepas dari apa pun asserts halaman. Token membuka kunci UI; hak akses selalu berasal dariOpsIQ.
Pengembang

Identitas pengunjung

Identitas menghubungkan pengunjung anonim ke pelanggan yang dikenal. OpsIQ link browsing sejarah, obrolan, dan tiket ke profil pelanggan.

Bagaimana cara kerjanya
Identitas pengunjungAliran: user log in di situs Anda, Anda mengeluarkan tanda tangan identitas yang ditandatangani, dan OpsIQ menyatukan sesi, obrolan dan tiket mereka ke dalam satu profil.Log pengguna masukdi situs AndaTanda tangantoken_identitas (HMAC)Satu profilsessions+ percakapan+ tiket
Identitas pengunjung

Dua tingkat identitas, dan ketika masing-masing sudah cukup

Tingkat 1 - petunjuk yang tak ditandatangani

Anda memberitahu widget siapa pengunjung adalah dengan polos JavaScript Obyek. Ini mengisi id surel dan pelanggan pada log pengunjung, jadi dasbor Anda menunjukkan tanda tangan dalam lalu lintas dan sesi bergabung. Ini adalah HINT: semua orang dapat mengeditnya di browser mereka, jadi OpsIQ tidak pernah melepaskan data akun pada kekuatan itu.

Tingkat 2 - sebuah tanda identitas ditandatangani

Server Anda menandatangani pendek-hidup token dengan situs webhook rahasia.OpsIQverifikasi tanda tangan dan hanya kemudian memperlakukan orang sebagai pelanggan yang telah terbukti. ini adalah tingkat yang membuka jawaban akun dalam pencarian percakapan pelanggan dan konektor. Gunakan untuk apa pun yang orang asing tidak boleh lihat.

⚠️
Tingkat1adalah sebuah kenyamanan display.2otentikasi. Jika sebuah pertanyaan hanya dapat dijawab untuk pemegang akun yang sebenarnya, Anda perlu Level2.
💡
Anda tidak perlu menulis Tingkat 2 dengan tangan: Site Jauh → situs Anda → Kode → C. Signed- dalam pelanggan menghasilkan kode penandatanganan dan penangan penyegaran untuk PHP, WordPressLaravel, Node.js, Python, Django,. NET, Rails, Jawa dan Go WHMCS kail dan Botble Jembatan konektor sudah menandatangani pelanggan. Identitas mengatakan siapa pelanggan ini; perintah atau pemesanan mereka mencapai percakapan melalui sebuah connector (dengan file bridge hanya ketika platform tidak memiliki API).

Tingkat 1 - petunjuk unsigned

Atur obyek sebelum skrip widget, atau hubungi identifikasi () setelah aplikasi Anda tahu siapa yang tertanda. Kedua bentuk dibaca; gunakan sebarang yang cocok dengan halaman Anda.

JavaScript
<!-- 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.

Tingkat2- Tanda identitas yang ditandatangani server-

Persis kontrak token yang sama dengan widget admin, dengan customer subject daripada sebuah admin satu. Tanda tangani di server anda dan berikan ke widget. Dua rincian memutuskan apakah itu memverifikasi, dan keduanya mudah untuk salah:

The HMAC meliputi string BASE64URL, bukanJSON

Tanda tangan $payload64, tidak $payloadMenandatangani JSON mentah menghasilkan token yang terlihat benar dan ditolak setiap kali dengan tanda tangan tidak cocok.

base64url, tidak diisi

Terjemahkan +/ ke -_ dan melucuti = Plain base64 terjadi untuk bertahan hidup hari ini; base64url adalah kontrak dan apa yang setiapOpsIQverifikasi dan referensi konektor memancarkan.

terotentikasi berlangsung pada tingkat TOP

Di samping site_key, iat dan expIni adalah pernyataan Anda bahwa manusia nyata login, danOpsIQMenolaknya tanpa itu.

adcuster. id wajib

Sebuah token yang hanya membawa email yang membuktikan sebagai tanda tangan dan kemudian secara diam-diam jatuh. Selalu kirim sebuah id.

Terus eksp pendek

Token ini adalah pernyataan sesi, bukan kredensial untuk disimpan.

PHP - tanda tangani tanda identitas pelanggan (kode verifikasi yang 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>';
🚫
Tanda tangan di server saja. Token yang ditampilkan dalam perambanJavaScriptberarti pengiriman situs rahasia untuk setiap pengunjung, yang tangan siapa pun kemampuan untuk meniru pelanggan apapun.

Kontrak yang sama, tiga permukaan

Chat pelanggan di situs Anda

Subyek pelanggan, lewat sebagai identity_token untuk widget .pp. Tercakup di atas. Opsional: dengan snippet A dan sebuah connector obrolan telah memverifikasi pelanggan itu sendiri (angka pemesanan atau urutan dengan bukti, atau sebuah kode email sebelum perintah). Site jauh, Codes, C menghasilkan kode untuk pengenalan otomatis dari pelanggan yang sudah masuk ke situs Anda.

Atur obrolan di dalam backend Anda

subject admin, dilewatkan ke opsiq/ embed /admin_widget.pp. Penandatangan sama, kunci subjek yang berbeda. Lihat "Widget admin dalam backend Anda".

Dukung link dalam portal

Sebuah varian stricter: klaim yang sama plus jti dan single_use:benar, dan 120-kehidupan kedua, karena token perjalanan dalam URL dan harus diberikan sekali. Jangan menggulungnya secara langsung. Pengaturan, Dukungan Portal memiliki snippet siap untuk bahasa Anda, dan platform mints untuk Anda ketika daerah akun Anda berjalan di server ini.

Bagaimana jika pengunjung membersihkan kue?+

Mereka menjadi anonim sampai mereka diidentifikasi lagi. OpsIQ menghubungkan catatan anonim baru ke profil pelanggan saat petunjuk atau tanda tiba.

Mengapa token saya memverifikasi untuk log pengunjung tapi tidak untuk pertanyaan account?+

Itu adalah Tingkat1/ Tingkat2split. Petunjuk yang belum ditandatangani mengisi log pengunjung dan tidak ada yang lain. Jawaban akun membutuhkan tanda tangan yang diverifikasi.

Pengembang

Tanda portal dalam: kode untuk setiap platform

Kirim seorang pelanggan yang sudah masuk ke aplikasi Anda langsung ke portal dukungan Anda, ditandatangani, tanpa password kedua. Halaman ini menjelaskan bagaimana handoff bekerja, setiap klaim dalam token, setup, dan rute lengkap untuk setiap platform. Pengaturan, Dukungan Portal mencetak kode yang sama dengan alamat portal Anda sendiri dan kunci area kerja diisi masuk.

Bagaimana cara kerjanya

1
Dukungan klik pelanggan dalam aplikasi Anda

Titik link pada rute kecil di server ANDA, misalnya /support-portal. Belum pernah pada suatu link yang telah memuat sebuah token: token dalam sebuah halaman bocor melalui sumber halaman, riwayat peramban dan header Referer.

2
Pemeriksaan rute yang ditandatangani

Ini membaca pelanggan dari sesi Anda sendiri. Seorang pengunjung yang tidak masuk masuk dikirim ke login pertama dan kembali ke rute setelah itu.

3
Rute tanda token satu kali

HS256 JWT standar ditandatangani dengan ruang kerja ini penandatanganan rahasia, yang hanya server anda memegang. Ini berakhir setelah 120 detik dan dapat digunakan sekali.

4
Rute mengarahkan ke portal

Untuk halaman portal pelanggan datang dari ketika portal meminta satu (opsiq_portal_return, hanya diterima di dalam alamat gerbang Anda), atau rumah portal. Respon membawa Referback-Kebijakan: no- referrer dan Cache- Kontrol: no-store.

5
Portal memverifikasi dan menandatangani pelanggan di

Tanda tangan, kunci area kerja, kadaluarsa dan id satu kali diperiksa. Pelanggan ditemukan atau dibuat dengan surel dan permintaan mereka yang ada cocok dengan mereka.

Token, klaim dengan klaim

site_key

Kunci area kerja anda. Token yang dibuat untuk ruang kerja lain ditolak bahkan ketika ditandatangani dengan benar.

iat / exp

Dikeluarkan dalam hitungan detik, token portal hidup 120 detik: itu hanya harus bertahan hidup satu redirect.

terotentikasi: true

Pernyataan aplikasi Anda bahwa orang ini benar-benar menandatangani daftar.

jti + single_use: benar

Sebuah id acak dan flag satu waktu. Link yang sama tidak dapat digunakan dua kali.

platform

Sebuah label gratis untuk mana pelanggan berasal (php, wordpress, whmcsShown dalam profil pelanggan.

adcuraer. id dan traster. email

ID adalah id pelanggan aplikasi Anda; email adalah bagaimana portal menemukan pelanggan dan cocok dengan permintaan mereka.

pelanggan. Nama / external_id

Nama tampilan opsional, dan id OpsIQ toko-toko terhadap platform Anda.

Penyiapan

1
Salin rute

Pengaturan, Dukungan Portal, Tanda Tanpa Laut dari aplikasi Anda. Pilih aplikasi yang berjalan; kode di bawah daftar memiliki alamat portal dan kunci area kerja diisi, dengan nomor catatan untuk platform tersebut.

2
Rahasianya sudah ada dalam kode

Rute yang disalin berisi berkas penandatanganan area kerja, jadi ini bekerja sebagai ditempelkan. Untuk menjaganya keluar dari file, set OPSIQ_SITE_SECRET (atau pengaturan kerangka kerja Anda) pada server sebagai gantinya: nilai tersebut digunakan terlebih dahulu. Jangan taruh rute dalam sebuah halaman, JavaScript, aplikasi seluler atau repositori publik: siapa pun yang memegang rahasia dapat masuk sebagai pelanggan manapun.

3
Hubungkan tombol Dukungan Anda ke rute

Misalnya https://your-app.com/support-portal.

4
Buat tanda tangan portal di tombol gunakan aplikasi Anda

Portal Studio, Sinyal-dalam halaman, Gunakan log masuk website saya, halaman login Anda URL: Menyiapkan ke rute yang sama opsiq_portal_return dengan sendirinya dan rute membawa pelanggan kembali ke halaman itu, ditandatangani masuk

5
Opsional: sign out di mana-mana

Pengaturan, Dukungan Portal, Tanda tangan di mana-mana: aplikasi Anda menandatangani URL, sehingga penandatanganan keluar dari portal juga menandatangani pelanggan dari aplikasi Anda.

6
Uji

Buat link tes yang ditandatangani pada halaman pengaturan yang sama untuk memeriksa sisi portal saja, kemudian buka rutemu saat ditanda-tangani ke aplikasi Anda.

WHMCS tidak membutuhkan kode: WHMCS hook dari Remote Sites sudah menandatangani klien ke portal dan membawa mereka kembali ke halaman mereka berada.
💡
Rahasia penandatanganan diisi untuk Anda. Dalam Pengaturan, Dukungan Portal, Tanda Tanpa Asing dari aplikasi Anda, setiap contoh telah berisi rahasia situs ini sendiri, sehingga kode bekerja sebagai ditempelkan: tidak ada untuk menyalin atau mengkonfigurasi. Contoh pada halaman ini menunjukkan opsiq_whsec_YOUR_SITE_SECRET Setiap contoh terlihat untuk OPSIQ_SITE_SECRET (atau pengaturan kerangka kerja Anda sendiri, bernama dalam catatannya) pada server pertama dan gunakan itu ketika diatur, sehingga Anda dapat memindahkan rahasia keluar dari berkas kapanpun Anda mau, misalnya untuk memutarnya tanpa mengedit kode. Cara file berjalan di server Anda saja: tidak pernah menempelkannya ke halaman web atau browser JavaScript, dan tidak pernah komit ke repositori umum, karena siapa pun yang memegang rahasia dapat mendaftar sebagai salah satu pelanggan atau staf Anda. WHMCS dan Botble tidak perlu semua ini: WHMCS Hook tiba dengan rahasia diisi, dan Botble Panel konektor mengisinya ke dalam jembatan.

Rute lengkap, platform dengan 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 keluar

Kunci rahasia atau area kerja tidak cocok dengan area kerja ini, token lebih tua dari 120 detik (periksa jam server), atau link yang sama dibuka dua kali. Buat sebuah sambungan tes yang ditandatangani: jika itu berhasil, bandingkan klaim token Anda dengan contoh.

Selalu mendarat di portal rumah

Alamat pengembalian tidak ada di dalam alamat portal Anda, sehingga diacuhkan dengan tujuan. Bandingkan dengan Portal URL yang ditampilkan dalam Pengaturan.

Tamu mendapat galat daripada log masuk

Ganti /login di rute dengan halaman login asli Anda, dan pastikan bahwa log masuk Anda kembali ke alamat yang diberikan.

Ini hanya berlaku untuk beberapa pelanggan.

customer. E atau adtraer. id kosong bagi mereka. Keduanya diperlukan.

Pengembang

Chat klien: mengenali log-di pelanggan

Opsional. Kebanyakan situs tidak memerlukan ini: dengan snippet obrolan polos dan konektor, percakapan memverifikasi pelanggan itu sendiri, dengan angka pemesanan atau urutan plus bukti untuk pencarian dan sebuah kode email sebelum perintah. Tambahkan ini ketika Anda ingin seorang pelanggan yang telah login di situs Anda secara otomatis, dengan seluruh akun mereka. WHMCS Site Jarak Jauh, situs Anda, Kode, C mencetak kode yang sama dengan kunci situsmu.

Bagaimana cara kerjanya

1
Halaman Anda mencetak tag obrolan

Untuk sebuah sinyal-dalam pelanggan widget URL membawa &identity_token=... ditandatangani di server Anda, untuk tamu itu adalah tag polos Tidak ada rahasia dalam halaman: hanya sebuah tanda yang berakhir.

2
Percakapan memverifikasi token

Tanda tangan, kunci area kerja dan kedaluwarsa. Pelanggan kemudian dikenal pada setiap permintaan obrolan, dan konektor Anda dapat menjawab tentang perintah mereka sendiri, booking atau faktur.

3
Obrolan ini menyegarkan sebelum jam habis

Ini panggilan halaman itu adalah dengan?opsiq_identity_refresh=1& Peran = pelanggan. Jawaban kodemu adalah "sukses": benar,identity_token":"... "} sementara pelanggan ditandatangani, atau 401 dengan "sukses": salah ",login_required": true} ketika mereka tidak ada. Itulah sebabnya penurun harus berjalan sebelum halaman Anda mencetak apa pun.

Bagaimana itu berbeda dari tanda portal

Seumur hidup

Satu jam (exp = iat + 3600) alih-alih 120 detik, karena naik setiap permintaan obrolan bukan satu mengarahkan kembali.

Tidak ada jti atau single_use

Tanda yang sama digunakan untuk setiap pesan sampai penyegaran menggantikan itu.

Sama segala sesuatu yang lain

site_key, iat, exp, terotentikasi: true, platform, dan pelanggan dengan id dan email yang dibutuhkan. Rahasia yang sama, tanda tangan yang sama.

💡
Identitas mengatakan WHO pelanggan adalah perintah mereka, booking atau faktur mencapai percakapan melalui koneksi: salah satu yang menyebut platform Anda API, atau, ketika platform Anda tidak API, konektor ditambah file bridge (pembangun connector membuat satu).
💡
Rahasia penandatanganan diisi untuk Anda. Di Situs Remote, situs Anda, Kode, C, setiap contoh telah berisi rahasia situs ini sendiri, jadi kode bekerja sebagai ditempelkan: tidak ada yang dapat menyalin atau mengkonfigurasi. Contoh pada halaman show ini opsiq_whsec_YOUR_SITE_SECRET Setiap contoh terlihat untuk OPSIQ_SITE_SECRET (atau pengaturan kerangka kerja Anda sendiri, bernama dalam catatannya) pada server pertama dan gunakan itu ketika diatur, sehingga Anda dapat memindahkan rahasia keluar dari berkas kapanpun Anda mau, misalnya untuk memutarnya tanpa mengedit kode. Cara file berjalan di server Anda saja: tidak pernah menempelkannya ke halaman web atau browser JavaScript, dan tidak pernah komit ke repositori umum, karena siapa pun yang memegang rahasia dapat mendaftar sebagai salah satu pelanggan atau staf Anda. WHMCS dan Botble tidak perlu semua ini: WHMCS Hook tiba dengan rahasia diisi, dan Botble Panel konektor mengisinya ke dalam jembatan.

Komplete code, platform by 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

Obrolan memperlakukan pelanggan yang log-in sebagai tamu

Tag telah dicetak tanpa identity_token (Rahasia hilang di server, sehingga kode gagal ditutup), atau kunci area kerja token atau rahasia tidak cocok.

Mengenali pada awalnya, kemudian seorang tamu setelah sekitar satu jam

Penangan refresh tak dicapai: ini mesti dijalankan sebelum keluaran apapun, di setiap halaman obrolan muncul.

Obrolan polos menunjukkan dua kali

Hapus tag obrolan polos dari templat Anda: kode ini mencetak percakapan itu sendiri.

Pengembang

Pengaya dan SDKsprint size

OpsIQ menyediakan SDK paket dan plugin untuk platform umum.

Bagaimana cara kerjanya
Pengaya dan SDKsprint sizeEmpat paket: PHP SDK, Node.js SDK, WordPress plugin dan WHMCS modul, masing-masing dengan perintah instalasi.PHPPHP SDKkomposer dibutuhkan opsiq/sdkJSNode. js SDKSekarang aku akan pergi.opsiq/sdkWPPlugin WordPressSatu klik instal & sambunganWHWHMCS modulAtur untuk penagihan + relay tiket
Pengaya & SDKs
PHP SDK

Paket komposer: pembuatan identitas token, aksi API pembantu, webhook tanda tangan verifikasi.

JavaScript SDK

Browser- sisi: pelacakan, identitas, acara custom, kontrol percakapan.

Plugin WordPress

injeksi Widget, identitas dari sesi pengguna WP, WooCommerce sinkronisasi.

WHMCS modul

Integrasi penuh: widget, relay tiket, identitas, admin AI.

ekstensi tema Shopify

App diembed dengan identitas pelanggan otomatis.

PHP SDK cepat mulai

PHP SDK contoh
composer require opsiq/sdk

use OpsIQ\SDK\Identity;
$token = Identity::createToken(
    siteKey: "site_abc123",
    secret:  "opsiq_whsec_your_secret",
    customer: ["id" => "cust_1001", "email" => "[email protected]", "name" => "Jane"]
);

// Call any catalog action over the action API
$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);
Pengembang

Pengelola API, peristiwa dan otomatisasi bebas-koneksi

Studio Survey dirancang untuk menggunakan Jenderal yang diketik sama API, pengeksekusi internal, bus acara dan operasi webhook sebagai sisa dari OpsIQ Ini memungkinkan pengembang mengintegrasikan akhir tanpa membangun konektor paket.

⚠️
Status implementation: katalog langsung yang kini hanya mengekspos platform.get.survey.config dan platform.save.survey.configThe surveys.* dan feedback.* Keluarga di bawah ini adalah kontrak yang disetujui dan harus kembali unknown_action sampai terdaftar.

Target keluarga aksi

Jenis, templat dan peluncuran cepat

surveys.types.*, surveys.templates.* dan surveys.quick_launch.* daftar, pratinjau, instantiate dan validate complete starter.

Surveys dan versi

surveys.create|get|list|update|archive|duplicate plus versi tidak dapat diubah, validasi dan aksi mempublikasikan.

Penyebaran dan menargetkan

surveys.deployments.*, surveys.links.*, surveys.audiences.*, surveys.triggers.* dan surveys.variables.*.

Keterlaluan dan tanggapan

surveys.invitations.*, surveys.campaigns.*, surveys.recipients.*, surveys.responses.*, ekspor, redaction dan analytics.

Pengait, impor dan Feedback

surveys.webhooks.*, surveys.imports.*, feedback.items.*, feedback.analytics.*, feedback.sources.* dan feedback.analysis.*.

Aliran bebas koneksi - bebas

1
Membuat dan mempublikasikan melalui General API

Gunakan survei yang diketik. * aksi dengan ruang kerja -tombol disematkan. Penulis menyatakan izin, risiko, konfirmasi, idempotensi dan perilaku kering-jalankan.

2
Terima acara bisnismu

Kirim sebuah acara yang ditandatangani ke sebuah inbound webhook, sebagai contoh sebuah perintah pembatalan atau selesai tahap onboarding. Replay proteksi deduplikasi ID kejadian.

3
Map dalam Aksi & Triggers

Pilih OpsIQ Umum API aksi seperti mengeluarkan undangan Survey atau mempersiapkan kampanye, kemudian bidang peta dari muatan pemicu yang diverifikasi.

4
Berlangganan ke Acara Survey

Kirim survei yang didokumentasikan bisnis aman. * lifecycle di subset ke titik akhir Anda dengan tanda tangan, filter, coba lagi, log dan resmisikan replay.

Target acara Canonical

Katalog bersama akan mencakup Negara depan / penyebaran, penonton dan pemicu keputusan, undangan, render / start / parsial / resume / abort, respon merah, status kampanye dan kegagalan pengiriman. Fokus tinggi-volume, gulungan dan waktu pertanyaan tetap di Penyimpanan Survey Analytics kecuali secara eksplisit didokumentasikan untuk fan- out.

Konektor adalah opsional. Ini menambahkan penemuan platform dapat digunakan ulang, diverifikasi identitas, fakta, variabel dan penerima. Umum API plus Aksi & Triggers / webhooks tetap jalur integrasi lengkap bagi pengembang yang tidak memerlukan sebuah konektor paket.
Pengembang

REST API

The OpsIQ REST API memungkinkan Anda memprogramtik mengakses semua fitur platform.

Bagaimana cara kerjanya
REST APITerminal menampilkan POST ke OpsIQ API dengan kunci Pembawa, daftar tiket terbuka, dan page JSON respon.$ 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 }
REST API

Format permintaan

Kirim kunci sebagai Authorization: Bearer opq_... atau X-OpsIQ-Key: opq_.... Gunakan satu header otentikasi, bukan keduanya.

Format permintaan API
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

The API adalah action- berbasis: kirim action nama di dalam tubuh. setiap administrator terdaftar JSON operasi memiliki stabil bernama aksi. POST {"action":"meta.actions"} (tidak ada kunci yang diperlukan) untuk daftar per- autoritative, per- install, kontrak permintaan, metadata risiko dan scope. Yang sudah ditinggalkan platform.routes.* jembatan tetap hanya untuk integrasinya yang lebih tua.

crm.contacts.list

Daftar kontak CRM (scope crm. read). Params: q, status, sumber, tag, skor lead, batas.

crm.contacts.upsert

Resolve- atau -make sebuah kontak (scope crm. write). Params: email ditambah field, tag, catatan.

crm.deals.list

Daftar CRM transaksi (scope crm.read). Params: status, stage_id, company_id, owner_admin_id, pipeline_id, batas.

crm.activities.record

Rekam aktivitas lifecycle / business untuk kontak (lingkup crm.write). Params: email atau contact_id, acara, nilai, mata uang.

crm.conversions.record

Rekam konversi (scope crm.write). Params: contact_id atau email, conversion_type, nilai, mata uang.

crm.events.list

Poll stream event CRM (scope crm. read). Params: batas.

tickets.list

Daftar tiket (skop tickets. read). Parameter: page, per_page, sort, order, status, priority, department_id, assigned_admin_id.

tickets.get

Satu tiket dan pesan-pesannya (scope ticketsread). Params: ticket_id atau ticket_number, include_messages, messages_limit.

tickets.reply

Kirim balasan ke tiket (scope ticketswrite). Param: ticket_id atau ticket_number, tubuh, author_type, author_name, internal.

tickets.update

Update a ticket (scope tilets.write). Params: ticket_id atau ticket_number, status, prioritas, subjek, department_id, assigned_admin_id.

tickets.open

Buka tiket dukungan (scope tilets.write). Param: customer_email, customer_name, subjek, tubuh, prioritas.

tickets.bulk

Jalankan operasi antrian massal (scope ticketswrite). Params: operasi, id.

conversations.list

Daftar percakapan live-chat (scope conversations.read). Param: halaman, per_page, status, assigned_admin_id, client_email, cari.

conversations.get

Satu percakapan dan pesan-pesannya (scope conversations.read). Params: conversation_id atau thread_key, include_messages.

conversations.messages

Sejarah pesan bertanda (percakapan lingkup. baca). Params: conversation_id, halaman, per_page, include_internal.

conversations.send

Kirim pesan ke dalam percakapan (bahasa lingkup. Tulis). Param: conversation_id, pesan, sender_type, internal.

conversations.update

Assign, re-status atau re-title percakapan (scope conversations.write). Params: conversation_id, status, assigned_admin_id, subjek.

konektors. list / . get / . test

Lihat konektor mana yang dipasang, apa yang dapat dilakukan masing-masing, dan apakah kredensial bekerja (lingkup connectors. read).

automations.actions.list

Aksi pembangun Actions Anda akan berjalan (scope mobil. Baca).

automations.triggers.list

Apa yang akan api dan di mana kondisi (scope otomatis. read).

automations.runs.list

Sejarah eksekusi untuk debug sebuah integrasi (scope automatis.read). Param: status, action_key.

departments.list

Departemen yang dapat Anda rute tiket untuk (ruang departemen-baca).

notifications.list

Notifikasi untuk satu operator (scope notifications.read). Params: admin_id (Diperlukan), unread_only.

analytics.export

Sebuah bagian laporan sebagai CSV (scope analitics.read). Params: daerah, preset, from, to. Panggil analitycs.sectionlist untuk nilai yang valid.

site_intelligence.sites.list / .reportslist

Monitored situs dan mereka SEO laporan (scope site_intelligence.read).

commerce. products. list / . get

Katalog Store Anda, paged (scope commerce. read). Filter: aktif, kategori, pencarian. .get mengembalikan satu produk dengan variansinya.

commerce. orders. list / . get

Perintah penyimpanan (scope commerce.read). Filter: status, payment_method, saluran, customer_emailAmbil satu oleh order_id atau referensi ORD- nya, dengan item baris. Gateway checkout handle tidak pernah kembali.

commerce.refunds.list

Permintaan dana kembali dan negara mereka (scope komersice. read).

commerce.quotes.create

Harga satu butir untuk pelanggan (scope commerce. write). Sumber store atau sebuah selongsong konektor tidak menghasilkan apapun tidak ada perintah, tidak ada pembayaran lihat bagian perdagangan

tiket.csat.list / .get / .metrics

Pelanggan - kepuasan respon sebagai data (scope ticketsread). Filter oleh rating, tiket, agen atau titik; .metrics mengembalikan angka yang sama di dashboard show.

conversations.ratings.list

Percakapan obrolan pengunjung Anda diberi peringkat, dengan komentar, apa yang mendorong rating dan agen dikreditkan (percakapan lingkup. Baca).

knowledge.articles.list

Halaman melalui artikel Pusat Bantuan Anda (scope kb. read).

knowledge.articles.get

Satu artikel Pusat Bantuan oleh id (scope kb.read). Param: article_id.

webhooks.events.list

Setiap peristiwa yang dapat Anda langganan titik akhir webhook dengan muatannya.

files.get

Sebuah link download yang pendek-hidup untuk lampiran (scope files. read). Params: referensi, ttl.

security.check

Tanyakan apakah IP atau email diblokir atau mencurigakan di sini (scope secuity.read). Kombinasi yang IP Firewall, daftar blok tiket spam dan vonis AI Keamanan Cached. ip, email.

security.report

Laporan penyalahgunaan sistem Anda diamati (scope security.write). Direkam sebagai acara keamanan, diklasifikasikan oleh Keamanan AI segera, dan admins d ip eringatkan pada keputusan beresiko tinggi. Params:ip, email, jenis, alasan, sumber.

secuity. blocklist. add / . list

Kelola aturan spam terhadap pemakaian baris pipa tiket (security.write / security.read). Sama seperti halaman tiket "Block sender" control. Params: kind (email, domain, ip), nilai, alasan, expires_hours.

💡
meta. actions selalu otoritatif. Ini mengembalikan setiap aksi yang tersedia pada instalasi Anda dengan lingkup masing-masing kebutuhan, sehingga Anda tidak perlu menebak atau hard- kode daftar ini.

Memanggil, menyaring dan menyortir

Setiap tindakan senarai menggunakan parameter yang sama, sehingga anda mempelajarinya sekali.

halaman / per_page

Nomor halaman dimulai dari 1, dan ukuran halaman. Baku 50, maksimum 200. batas dan offset juga diterima jika Anda lebih suka mereka.

urutkan / urut

Ruas untuk mengurutkan menurut, dan asc atau desc (default desc). Setiap aksi menerima set tetap dari bagian pengurutan; hal lain yang diabaikan daripada menyesatkan.

filters

Kirim filter sebagai objek, atau lewatkan penyaring sebagai parameter tingkat atas. Penyaring tidak dikenal diabaikan.

Apa yang datang kembali

item, page, per_page, jumlah, total dan has_moreTerus meminta halaman sampai has_more adalah palsu.

Permintaan daftar terurut, disaring, dan terurutkan
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
}

Galat

Setiap kegagalan kembali bentuk yang sama, dengan stabil code anda dapat melakukan branch. Jangan mencocokkan pada human- baca error teks, yang mungkin diisi ulang.

Respon galat
{
  "success": false,
  "code": "missing_scope",
  "error": "API key missing required scope. Needed one of: tickets.read, admin",
  "request_id": "req_8f2c1a9d4b7e"
}
missing_api_key / invalid_api _key

Tak ada kunci yang dikirim, atau tombol salah atau kadaluwarsa. HTTP 401.

missing_scope

Kunci valid tetapi kurang kebutuhan scope aksi ini. HTTP 403.

hanya_baca_kunci / action_restricted

Kunci baca-saja, atau aksi ini tidak dalam daftar allow- nya. HTTP 403.

unknown_action

Tidak ada aksi seperti itu. Panggil meta.actions untuk daftar saat ini. HTTP 400.

missing_parameter / invalid_parameters

Sebuah parameter yang diperlukan tidak hadir, atau sebuah nilai tidak diterima. HTTP 400.

not_found

Rekor ini tidak ada, atau tidak ada di area kerja yang dapat dilihat oleh kunci ini. HTTP 404.

plan_feature_locked

Rencana Anda tidak termasuk fitur tindakan ini milik. Nama tubuh feature, the plan_name dengan kekuatan dan upgrade_urlMencoba kembali tidak akan membantu; rencana harus berubah. HTTP402.

license_required

Lisensi instalasi tidak aktif, jadi tidak ada aksi yang akan berjalan sampai dipulihkan. 402 HTTP.

selling_paused

Komersial - spesifik: toko telah menjual dimatikan, sehingga tidak ada yang dapat dikutip atau memerintahkan. HTTP 400.

rate_limited

Batas jam untuk kunci ini habis. HTTP 429.

server_error

Sesuatu yang gagal di pihak kita request_id Mengidentifikasi percobaan jika Anda perlu untuk melaporkannya. HTTP 500.

Coba ulang yang aman

Jika suatu waktu menulis keluar anda tidak dapat memberitahu apakah itu mendarat. Kirim sebuah idempotency_key dan mengulang panggilan yang sama mengembalikan hasil aslinya daripada melakukan pekerjaan dua kali.

Idempocent write
{
  "action": "tickets.reply",
  "ticket_id": 4192,
  "body": "Thanks, that is now fixed.",
  "idempotency_key": "your-unique-id-for-this-attempt"
}
Berapa lama itu berlangsung

Sebuah kunci diingat untuk 24 jam melawan tindakan yang sama dan API kunci.

Apa yang Anda dapatkan kembali

Respon asli, ditambah idempotent_replay: benar sehingga Anda dapat memberitahu itu replay.

Perjanjiannya tetap dapat dicoba kembali

Hanya sukses menulis diingat. Jika sebuah panggilan gagal, mengirimnya lagi dengan kunci yang sama menjalankannya lagi, yang mana itulah yang Anda inginkan.

Baca

Pembaca mengabaikan kunci mengulangi pembacaan tidak berbahaya.

Uji tanpa mengubah apapun

Tambah dry_run: true Kuncimu, lingkup dan parameter semua diperiksa persis seperti normal, kemudian panggilan berhenti sebelum sesuatu dibuat atau berubah.

Dry run: verifikasi kredensial 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 Ini adalah cara tercepat untuk mengkonfirmasi kunci memiliki lingkup kanan dan payload Anda terbentuk dengan benar, tanpa membuat data tes Anda kemudian harus membersihkan.

Batas rate

Batas per- kunci

Batas per jam yang dapat diubah API kunci (baku 1000 permintaan per jam). Set itu setiap kunci di bawah Pengaturan,API Kunci.

Ketika dilampaui

HTTP 429 dengan kode rate_limited, ditambah sebuah header Retry-Setelah memberitahu Anda berapa detik untuk menunggu limit reset di atas jam berikutnya.

Mengetahui di mana Anda berdiri

Setiap respon membawa X-RateLimit- Limit, X- RateLiming- RAMing dan X-Rate Limite - Reset (sebuah timestamp Unix). Perhatikan Mengakhirkan dan memperlambat sebelum Anda kehabisan daripada menunggu untuk ditolak.

Menceritakan 429 dari 401

A 429 berarti menunggu dan mencoba lagi. 401 berarti kunci itu sendiri salah atau kadaluarsa, jadi mencoba kembali tidak akan membantu sampai Anda memperbaiki kuncinya.

Pengawal brute- pre- auth

Gagal ulang-auth upaya dari satuIPkunci yang valid tidak pernah perjalanan ini.

Latihan terbaik

Mundur ketika Remining mendapat rendah, dan kehormatan Retry- Setelah 429 Bukannya mencoba kembali segera.

Versions dan stabilitas

Versi kini

V1, setiap respon membawa X.OpsIQ-API-Versi dan X-OpsIQ-API-Status sehingga Anda dapat mengkonfirmasi apa yang Anda berbicara dengan.

(Bagaimanakah kamu dipalingkan?) dari iman, padahal bukti-buktinya sudah cukup jelas.

Jika versi pernah pensiun, tanggapan mendapatkan standar Deprekasi dan Sunset header, dan laporan meta.actions tidak berlaku lagi dan sunset_atPeriksa di monitormu dan kau tidak akan pernah terkejut.

Apa yang tidak akan berubah

Nama aksi yang ada, parameter mereka dan kode kesalahan mereka. Aksi baru dan bidang opsional baru dapat ditambahkan setiap saat, jadi abaikan field yang tidak Anda kenal daripada gagal pada mereka.

Sebuah integrasi lengkap, mulai untuk menyelesaikan

Ini adalah seluruh loop: menemukan pekerjaan, membacanya, bertindak di atasnya, dan mengkonfirmasi apa yang Anda lakukan.

Akses penuh mengalir di atas 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 yang di atas bekerja dengan cara yang sama untuk percakapan: konversations. list, conversasions. get, konversi. Kirim dan konversi. Ikuti pola identik, parameter dan bentuk respon.

Contoh yang lebih berhasil

Masing-masing adalah lengkap, runnable sepotong integrasi nyata daripada fragmen.

Halaman melalui setiap catatan, dalam tiga bahasa

Aturannya sama di mana-mana: teruslah meminta halaman berikutnya sampai has_more Tidak pernah menebak total.

Python
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
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 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"]));

Menangani setiap kegagalan API dapat kembali

Cabang pada code, tidak pernah pada kata-kata dari errorIni pembungkus adalah seluruh kontrak dalam satu fungsi.

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")

Jawab nilai kepuasan yang buruk dalam waktu satu jam

Baca skor rendah, buka tiket untuk masing-masing, dan jangan pernah bertindak pada yang sama dua kali.

Tutup loop 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.

Kutipan sebuah item dan bertindak atas jawaban pedagang

Penolakan yang memberitahu Anda apa yang harus mengumpulkan
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 }
}
⚠️
Tunjukkan pelanggan totals.total Quantity tidak selalu mengalikan harga unit - sebuah hotel mengutip satu kamar selama tiga malam - sehingga angka Anda menghitung diri Anda dapat berbeda dari apa pedagang sebenarnya akan biaya.

Sebuah penerima webhook yang aman untuk dijalankan dalam produksi

Verifikasi, de- duplikat, jawab dengan cepat, kemudian lakukan pekerjaan. Pengantar coba kembali, sehingga peristiwa yang sama dapat tiba lebih dari 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

Rencana dan hak

Setiap aksi termasuk fitur produk, dan rencana anda memutuskan fitur mana yang anda miliki. Jika rencana anda tidak menyertakan suatu fitur, maka jawaban tindakan 402 - setelah kunci Anda diperiksa, sehingga pemanggil tidak dikonfirmasi belajar apa-apa tentang rencana Anda, dan sebelum apa pun dibuat, sehingga menulis diblokir tidak pernah half-terjadi.

Sebuah tindakan plan- terkunci
{
  "success": false,
  "code": "plan_feature_locked",
  "feature": "commerce",
  "plan_locked": true,
  "plan_name": "Growth",
  "upgrade_url": "https://…",
  "request_id": "req_8f2c1a9d4b7e"
}
Bagaimana untuk mengatakannya selain masalah izin

A403berarti KUNCI terlalu sempit - reissue itu dengan lingkup yang tepat dan bekerja. A402berarti ACCOUNT tidak memiliki fitur - tidak ada kunci dapat membukanya, rencana harus berubah.

Jangan coba-coba 402

Hal ini tidak sementara Permukaan upgrade_url kepada siapapun yang memiliki rekening itu daripada mundur dan mencoba lagi.

Ruang admin tidak melewatinya

Scops mengekspresikan apa yang didelegasikan kunci; rencana mengungkapkan apa yang dibeli akun. Kunci admined-scoped masih mendapat 402 untuk fitur rencana yang kurang.

Cari tahu sebelum Anda kapal

The feature setiap aksi perlu dipublikasikan dalam direktori aksi di bawah dan dalam meta.action, sehingga Anda dapat memeriksa pada waktu membangun daripada menemukannya dalam produksi.

Cara tercepat untuk melihat dimana kunci berdiri adalah meta.meIni melaporkan rencana dengan kekuatan, setiap fitur yang dibawanya, dan setiap tindakan kunci ini tidak dapat memanggil dengan alasan untuk masing-masing.

meta. me - apa kunci ini benar-benar dapat melakukan
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 metal. me pertama ketika integrasi berperilaku berbeda antara dua instalasi. Ini menjawab "mengapa kunci ini tidak dapat melakukan itu" dalam satu permintaan, tanpa ada yang membuka admin tersebut.

Mengkucilkan harga

commerce.quotes.create harga satu item untuk satu pelanggan. Ini tidak menciptakan apa-apa - tidak ada perintah, tidak ada sesi pembayaran, tidak memegang saham - sehingga aman untuk memanggil sementara pelanggan masih memutuskan.

Pilih suatu butir
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"}}
Totalnya pedagang menang.

Untuk platform yang terhubung, total berasal dari pedagang itu dan tidak pernah dihitung lagi di sini. kuantum tidak selalu mengalikan harga unit - sebuah hotel mengutip satu kamar selama tiga malam - jadi menunjukkan total Anda diberikan, tidak satu Anda bekerja.

Penolakan memberitahu Anda apa yang hilang

Jika pedagang membutuhkan lebih dari pelanggan, Anda mendapatkan quote_refused dengan missing daftar nama bidang untuk mengumpulkan, dan pedagang sendiri kata untuk menunjukkan.

Memerintahanbukansebua API panggilan

Sebuah kutipan menunjukkan konfirmasi terjadi di mana pelanggan - kartu yang ditandatangani dalam chat, atau checkout pedagang sendiri - tidak pernah melalui iniAPIRespon mengatakan demikian dalam ordering.

Ketika menjual diistirahatkan

Jika toko telah menjual dimatikan, mengutip jawaban selling_paused Daripada harga yang tak bisa dibeli orang lain.

Titik akhir yang lain

Hampir semua yang Anda butuhkan adalah satu POST untuk /api/v1.phpIni adalah pengecualian, dan apa masing-masing adalah untuk.

/api/v1/openapi.php · /api/v1/postman.php · /api/docs/

Kontrak mesin dan referensi manusia. jadi kau bisa menjelajah sebelum memilikinya.

/api/ai_stream.php

Server- mengirim peristiwa untuk live chat replies karena mereka dihasilkan. Arus, bukanJSONAction.

/api/writing.php

Alkitab yang lebih tua, semua yang dilakukan juga tersedia sebagai writing.* aksi di /api/v1.php, dimana harus bekerja.

/api/inbox_copilot.php

Draft, tulis ulang dan triase untuk inbox tiket tertanam dalam admin Anda sendiri.

/api/v1/si/…

Site Intelligence sebagai REST kecilAPI- Situs, crawls, masalah, kata kunci, pendapatan - untuk jaringan pipa CI yang ingin mulai merangkak setelah menyebarkan dan membaca hasil.

/api/connectors.php?slug=&token=

Dimana platform terhubung POST webhooks sendiri kepada Anda. Token ini ditanamkan ketika Anda mengaktifkan konektor.

/api/integrations/*.php

Mesin integrasi: jalankan dan konfirmasi aksi, dan penjualan tak tergoyahkan, identitas dan acara perjalanan. Ini menggunakan jenis kuncinya sendiri, dikeluarkan di bawahAPI& Pembangun Webhook.

💡
Mereka semua mematuhi aturan rencana yang sama seperti tindakan.402Di sini juga, dalam bentuk yang sama.

Setiap tindakan, dengan lingkup yang dibutuhkan

Daftar ini dihasilkan dari katalog yang sedang berjalan, jadi selalu cocok dengan versi yang Anda berada. meta.actions mengembalikan informasi yang sama seperti JSON.

2420 named actions: 804 reads, 1616 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: 606; explicit: 63; route_inferred: 1633; source_inferred: 118.

administration (25)

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: declared_dynamic. 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.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

obrolan (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

crm (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.

pelanggan (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

Read. 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: declared_dynamic. 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: declared_dynamic. 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

surel (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 (163)

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.detail

Read. Scope: engagement.read, admin. Contract: route_inferred. Campaign Detail

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

kb (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 (926)

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

Read. Scope: platform.read, 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

Write. Scope: platform.write, 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

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Export Csv

platform.ai.history.get

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Get

platform.ai.history.list

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History List

platform.ai.history.stats

Write. Scope: platform.write, 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

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Smart Alerts

platform.ai.spoke

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Spoke

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.campaigns

Read. Scope: platform.read, admin. Contract: declared_dynamic. Campaigns

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.chatbot.node.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Node Delete

platform.chatbot.node.save

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Node Save

platform.chatbot.nodes.list

Read. Scope: platform.read, admin. Contract: route_inferred. Chatbot Nodes 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.countries

Read. Scope: platform.read, admin. Contract: declared_dynamic. Countries

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.devices

Read. Scope: platform.read, admin. Contract: declared_dynamic. Devices

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.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.list

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback List

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.feedback.stats

Write. Scope: platform.write, admin. Contract: declared_dynamic. Feedback Stats

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.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.heatmap

Read. Scope: platform.read, admin. Contract: route_inferred. Heatmap

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.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.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: declared_dynamic. 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.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.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.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.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.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.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.transfer.declare

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Transfer Declare

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.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.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.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.location.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Location Create

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.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.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.reveal

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Reveal

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: declared_dynamic. 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.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.interrupted

Read. Scope: platform.read, admin. Contract: declared_dynamic. Interrupted

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.mark.feedback.read

Write. Scope: platform.write, admin. Contract: route_inferred. Mark Feedback Read

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.ready

Read. Scope: platform.read, admin. Contract: route_inferred. Media Ready

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.observe

Read. Scope: platform.read, admin. Contract: declared_dynamic. Observe

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

Read. Scope: platform.read, admin. Contract: declared_dynamic. Overview

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.pages

Read. Scope: platform.read, admin. Contract: route_inferred. Pages

platform.paths.data

Read. Scope: platform.read, admin. Contract: route_inferred. Paths Data

platform.pause

Read. Scope: platform.read, admin. Contract: declared_dynamic. Pause

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

Write. Scope: platform.write, admin. Contract: route_inferred. Realtime Test

platform.resume

Read. Scope: platform.read, admin. Contract: declared_dynamic. Resume

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: declared_dynamic. 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: declared_dynamic. 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.silence

Read. Scope: platform.read, admin. Contract: declared_dynamic. Silence

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.takeover

Read. Scope: platform.read, admin. Contract: declared_dynamic. Takeover

platform.terminate

Read. Scope: platform.read, admin. Contract: route_inferred. Terminate

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.triggers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Triggers

platform.trust.evidence.report

Write. Scope: platform.write, admin. Contract: declared_dynamic. Trust Evidence Report

platform.turn.pool.add

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Add

platform.turn.pool.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Turn Pool List

platform.turn.pool.pick.test

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Pick Test

platform.turn.pool.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Remove

platform.turn.pool.update

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Update

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.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 (14)

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: declared_dynamic. Read sales statistics

sales.stats.route.sales.stats

Read. Scope: sales.read, admin. Contract: declared_dynamic. Sales Stats

sales.table

Read. Scope: sales.read, admin. Contract: route_inferred. Sales Table

keamanan (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: declared_dynamic. 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.pagespeed.bridge.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Pagespeed Bridge Status

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.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.

survei (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.

tim (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 (77)

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.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

webhooks (1)

webhooks.events.list

Read. Scope: webhooks.read, crm.read, admin. Contract: explicit. List outbound webhook events and their payloads

menulis (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.

Apakah OpenAPI dan Postman tersedia?+

Ya, yang dihasilkan OpenAPI 3.0 dokumen ada di /api/v1/openapi.php, koleksi tukang pos yang dihasilkan berada di /api/v1/postman.php, dan docs pengembang yang mudah dibaca berada di /api/docs/.

Bagaimana saya bekerja dengan lebih dari satu ruang kerja?+

Kirim site_key dalam badan permintaan untuk memilih area kerja. Sebuah kunci yang dikeluarkan untuk satu area kerja tetap ditempelkan padanya; sebuah kunci dengan konteks admin dapat memilih ruang kerja apapun yang diizinkan untuk dilihat, dan ditolak untuk apa pun itu tidak.

Tindakan mana yang bisa menjadi panggilan kunci?+

Aksi apapun yang ditandai sebagai pembacaan. Atur mode perizinan pada kunci ke read_only dan setiap tulisan ditolak dengan read_only_key, sehingga integrasi pelaporan tidak dapat mengubah apa pun bahkan oleh kesalahan.

Kenapa aku tidak menemukan sesuatu yang bisa kulihat di admin?+

Kunci discoped ke suatu area kerja. Catatan di ruang kerja lain tidak ditemukan bukan sebuah kesalahan, jadi API tidak pernah mengkonfirmasi apakah ada sesuatu di tempat lain.

Pengembang

API Keamanan

Satu kontrak keamanan untuk setiap konektor dan integrasi: tanya OpsIQ apa yang dia tahu tentang IP atau pengirim, dan memberi makan kembali penyalahgunaan yang dilihat sistem Anda sendiri.

OpsIQ sudah membela diri: IP Firewall blok penyerang, penyaring pipa tiket spam, dan Keamanan AI mengklasifikasikan pelaku dan mengusulkan aturan blok. API membuka kecerdasan itu ke sistem lainmu. sebuah platform penagihan, portal klien atau aplikasi gubahan dapat memeriksa pengunjung sebelum mempercayainya, dan melaporkan apa yang ia amati sehingga seluruh instalasi belajar dari setiap permukaan.

Apa yang bisa kau lakukan

Periksa sebelum mempercayai

security.check jawaban dengan keadaan firewall, aturan spam apapun yang cocok dengan pengirim, dan keputusan AI cached untuk IP Satu panggilan, satu pendapat konsolidated.

Laporkan apa yang kau lihat.

Keamanan. Laporan mencatat pengamatan sebagai acara keamanan, memiliki Keamanan AI mengklasifikasikan IP segera, dan peringatkan admin ketika vonis kembali beresiko tinggi laporan berulang cluster ke insiden, persis seperti serangan OpsIQ melihat langsung.

Aturan spam berbagi

security. blocklist. add dan security. blocklist. list membaca dan menulis aturan spam yang sama dengan halaman Tiket, sehingga pengirim yang terblokir di satu sistem akan terblokir dimanapun.

Melaporkan penyalahgunaan dari konektor
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 secuity. check dan security. blocklist. list. aman untuk memberikan integrasi pelaporan.

security.write

Diperlukan untuk secuity. rapor dan security. blocklist. ad. Berikan hanya kepada sistem Anda ingin makan aturan dan laporan masuk

Tidak ada yang diam-diam hancur

Seorang pengirim yang terblok masih mendarat di tampilan Spam dimana tiket dapat dibaca dan dipulihkan.

Platform melindungi dirinya sendiri

Server sendiri IP alamat tidak pernah dapat diblokir, blockstated atau dilaporkan melalui ini API, sehingga integrasi salah konfigurasi tidak dapat mengambil platform ke bawah.

💡
Mint a key under Integrations, thenAPI Kunci, dan hanya memberikan lingkup keamanan yang dibutuhkan. Kontrak permintaan penuh untuk setiap aksi ada dalam meta.actions dan dokumen OpenAPI.
Apakah konektor saya yang ada menggunakan ini secara otomatis?+

Sinkronisasi keluar sudah otomatis: ketika Anda memblok IP, platform terhubung diberitahu melalui sinkronisasi keamanan konektor. API Arahkan konektor atau kode gubahan pada empat aksi ini dengan kunci yang membawa lingkup keamanan.

Dimana aturan spam hidup?+

Satu toko. API semua bekerja melawan blocklist yang sama, sehingga ada persis satu tempat untuk melihat.

Pengembang

API

Kirim peristiwa gubahan dari server atau situs web Anda ke OpsIQ untuk analisis, percobaan, pemicu CRM, dan kondisi webhook.

Bagaimana cara kerjanya
APISuatu trek () call mengirim suatu gubahan demo_booked event into OpsIQ, yang feed tujuan konversi, segmen dan pemicu.OpsIQ.track ("demo_booked", {nilai: 0, rencana: "pro"});Tujuan konversiSegmenPemicu & webhooksPeramban (OpsIQ.track) atau server-side POST /v1/events
API

Kejadian sisi peramban

Pelacakan peristiwa peramban
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "button_clicked", {
  button: "signup",
  page: "/pricing",
  variant: "green"
}]);

Peristiwa sisi-server

Server- sisi, aktivitas rekaman dan konversi terhadap kontak melalui tindakan API Gunakan crm.activities.record untuk kegiatan lifecycle / bisnis dan crm.conversions.record untuk konversi. events.send aksi; inbound CRM penerima acara tinggal di /v1/inbound.php?t=<token> untuk sistem ketiga-partai yang mendorong peristiwa 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"
}

Konvensi penamaan

Notasi titik

"order. complete" bukan "ordquisted".

Masa lampau

"buton. clicked" bukan "button. clicck".

Spesifik

"Harga.plan_selected"tidak"user_action".

Pengembang

Bagaimana data mengalir melalui OpsIQ

Memahami aliran data membantu Anda debug integrations dan mengoptimalkan kinerja.

Bagaimana cara kerjanya
Bagaimana data mengalirData mengalir dari widget dan suar ke OpsIQ core (CDP, graph identitas, Otak AI, analitik, CRM) lalu keluar melalui webhooks dan REST API.Edo& suarOpsIQ coreGrafik identitas CDPOtak AIanalisis CRMWebhook keluarREST API
Aliran data

Aliran data masuk

1
Sinyal widget

The JavaScript widget mengirim tilikan halaman, klik, dan pesan obrolan ke /beacon.php.

2
Insuription event

Kejadian yang disimpan opsiq_events dengan site_key, jenis acara, pelanggan, dan properti.

3
Perakitan sesi

Halaman grup pembuat sesi menampilkan sesi (via cron).

4
Resolusi identitas

Ketika diidentifikasi, catatan anonim terkait dengan profil pelanggan.

5
Sinkronisasi Konektor

Konektor menarik data dari platform eksternal dan menyimpan dalam singgahan konektor.

6
Konteks AI

AI mengumpulkan konteks dari: riwayat pengunjung, profil pelanggan, data konektor, KB, dan prompt.

Aliran data keluar

1
Terjadi kebakaran

Internal event fires (ticet. created, chat. message, order. complete).

2
Antrian tugas

Acara ditempatkan dalam antrian tugas async.

3
Pengiriman Webhook

Dispatcher tanda-tanda dan mengirimkan ke semua berlangganan titik akhir.

4
Coba lagi saat gagal

Gagal pengiriman mencoba ulang dengan latar belakang eksponensial.

Pengaturan

Referensi pengaturan

Pengaturan adalah pusat kontrol untuk area kerja. Semua yang di bawah ini diskotik ke ruang kerja Anda, jadi satu akun dapat menjalankan beberapa merek dengan identitas yang berbeda, chatting perilaku dan aturan penahanan.

Mencari pengaturan

Ada sekitar enam ratus kontrol individu dalam Pengaturan, tersebar di sebelas tab dikelompokkan di bawah empat menu. Anda tidak diharapkan untuk browsing bagi mereka.

Pengaturan pencarian (Ctrl + K)

Tekan Ctrl + K, atau Cmd + K pada Mac, di mana saja di halaman Pengaturan. Ketik kata-kata biasa dan tekan Enter untuk melompat langsung ke kendali. Cari toleransi dari tipe kecil dan mengerti kata-katanya, jadi penjadwalan menemukan Cron dan privasi yang menemukan kontrol pelacakan. Ini hanya menunjukkan pengaturan peran Anda dapat terbuka.

Area Kerja dan Rencana

Jenderal dan Licence.

Dukungan AI dan Pelanggan

Asisten Admin AI, Klien Chat, OpsIQ Menulis dan Dukungan Portal.

Pemerintahan dan Data

Melacak dan Privasi, Hak dan Keamanan.

Sistem

Cron Setup (hanya milik-diri) dan Danger Zone.

Menyimpan

Setiap tab menyimpan sendiri dengan tombol Save sendiri. Klien Chat dan OpsIQ Menulis pin mereka ke layar. Simpan sebelum mengganti tab; perubahan tidak dilakukan.

Deep link

Tab aktif ditulis ke dalam alamat halaman, sehingga tab dapat ditandai atau dikirim ke rekan kerja.

Umum: Identitas Bisnis

Kartu yang paling penting pada halaman. AI membaca nilai-nilai ini pada setiap jawaban, laporan dan singkat sehari-hari.

Nama Bisnis

Digunakan dalam laporan AI, celana harian dan pelanggan menghadap ke kata-kata.

Industri Bisnis

Analisis EI, mencetak angka, daftar dan pensurvei, memilih dari hosting web, e- commerce, saaS, real estate, badan, konsultasi, kesehatan, pendidikan, keuangan atau bisnis umum.

Bahasa Sistem

Bahasa yang ditunjukkan kepada siapa saja yang belum memilih sendiri, setiap agen dapat mengambil alih dalam profil mereka.

Gunakan bahasa peramban

Jika seseorang memilih bahasa, pilihan mereka menang dan ini tidak akan bisa mengalahkan.

Zona Waktu Sistem

Zona seluruh sistem berjalan: tanggal, laporan, jadwal dan cron latar belakang. Gunakan zona waktu operasi Anda, bukan pelanggan Anda.

Umum: GeoIP dan Pelacakan

Path Basis Data GeoIP2

Lokasi lengkap ke GeoLite2 -City.mmdb. Otomatis-deteksi pada load pertama di seluruh cPanel, Plesk, DirectAdmin, Cloudways, Docker dan Linux atau Windows biasa. Tambahkan GeoLite2 -ASN.mmdb dalam folder yang sama untuk penyedia internet pengunjung.

Mode Sumber Geo

Hanya GeoLite2, GeoLite2 dengan Cloudflare fallback, atau Cloudflare Hanya.Cloudflare mode membutuhkan situs untuk proxied melalui Cloudflare, dengan header lokasi pengunjung diaktifkan untuk detail kota dan wilayah.

Tenggat Sesi

Ketidakaktifan sebelum sesi pengunjung dianggap selesai. Baku 14400, yaitu empat jam.

Live Refresh Interval

Seberapa sering Refresh Feed Live. 30 detik.

Ambang Aktif (min)

Berapa lama pengunjung menghitung sebagai hidup setelah halaman terakhir beban. Baku 2 Ini adalah siaran langsung Feed, bukan panjang sesi.

Retensi Data (hari)

Deletes yang dikumpulkan dan dihasilkan catatan masa lalu: analitik, chat, tiket, umpan balik, transaksi, telemetri AI, log integrasi dan aktivitas CRM. 0 menyimpan semuanya selamanya. Pengaturan, isi tertulis dan penerimaan persetujuan tidak pernah dihapus.

Ketika sebuah obrolan dihapus

Memilih berapa banyak percakapan yang dihapus tetap direkam: catatan lengkap, catatan tanpa percakapan, atau hanya mencetak skor. Menghapus selalu menyembunyikan obrolan dari inbox dan riwayat pengunjung. Mendaftar penerimaan dan melupakan pengunjung selalu menghapus secara penuh tanpa peduli dengan ini.

Pelacak lalu lintas bot

Menghitung crawlers sebagai pengunjung. Tinggalkan; ini akan menambah jumlah pengunjung dan membosankan setiap laporan.

popup survei feedback diaktifkan

Tampilkan widget umpan balik seluruh-putar ke pengunjung. Terpisah dari survei obrolan di bawah Percakapan Klien, Dukungan Flow.

Umum: Fitur AI

Master switch untuk setiap permukaan AI. Semua default untuk hidup dan menyimpan setiap area kerja.

Tiket AI Triplon

Klasifikasi setiap tiket dengan kategori, prioritas dan sentimen, dan tulis ringkasan benang di bagian atas tiket.

Ringkasan AI Tourhover

Tampilkan tag triage dan ringkasan dalam tooltip ketika seorang agen mengambil baris dalam daftar tiket. Butuh AI Tourts.

Kopilot Inbox (komposer)

Tambahkan Draft AI balasan, Warmer, Shporter, Lebih formal dan Apologik tombol di bawah kotak jawaban. Tidak ada yang mengirimkan tanpa agen.

Tanya-OpsIQ Copilot

Kontes-sadar kopilot mengambang pada setiap halaman admin. Tahu pelanggan mana, faktur atau tiket terbuka.

Pagi singkat

Pada pembukaan pertama setiap hari kopilot menyajikan tiket mendesak, terlambat membalas dan menunggu obrolan. Minggu menghasilkan seminggu dalam tinjauan.

Umum: uang, merek, cadangan

OpsIQ mata uang dasar

Setiap total uang dalam admin diubah menjadi mata uang ini untuk display. Konektor menyimpan sumber mata uang mereka sendiri; atur bahwa per konektor.

Laju FX yang otomatis sync

Refresh tingkat setiap enam jam dari pakan publik gratis dengan tidak API kunci. Anda dapat menambahkan laju manual yang menimpa asupan. Dengan otomatis-sync off, mata uang tanpa tingkat manual dibiarkan tidak dikonversi.

Aktifkan fitur Iklan dan Pencatatan

Dimatikan. Mengaktifkan itu mengungkapkan halaman penjualan dan konversinya, kartu pendapatan dasbor dan Umpan Intelijen Hidup. Dengan itu, setiap permukaan harga tersembunyi dan halaman Sales meninggalkan menu.

Kata-kata perdagangan

Mengajar OpsIQ kata Anda: apakah Anda melakukan pembaharuan, kata untuk memperbaharui, apa yang Anda jual, dan apa yang disebut pembeli.

Branch dan Logos

Dua upload, satu untuk latar belakang ringan (batang samping admin) dan satu untuk gelap (sign-in page). PNG, JPG, WebP atau SVG sampai ke 3 MB.

Agen Intelijen Situs, memungkinkan pribadi SSH target

Agen SEO AutoImplement menghubungkan lebih dari SSH Swasta, loopback dan alamat reserved diblok secara baku sebagai ukuran anti- SSRF. Hanya mengaktifkan instalasi self-hosted yang harus mencapai server lokal.

OpsIQBackup / Restore

Exports every setting and OpsIQ-dimiliki tabel ditambah file yang diunggah. Pulihkan menggantikan OpsIQ konfigurasi dan catatan saja; tidak pernah menyentuh klien, faktur, tiket, layanan, domain, perintah atau transaksi.

⚠️
Ambil cadangan sebelum menggunakan sesuatu di Zona Bahaya. Backup tinggal di Umum dan menghapus aksi hidup di Danger Zone, sehingga mudah untuk mencapai tombol hapus tanpa memiliki diekspor pertama.
Pengaturan

Pengaturan: Keamanan

Perlindungan untuk tanda admin, akun stafmu dan data yang dikumpulkan OpsIQ. Pelanggan menandatangani untuk portal dukungan dikonfigurasi secara terpisah.

Sinyal-dalam perlindungan

Google reCAPTCHA

Menghentikan penempatan bot dan kredensial pada tanda admin. Pilih v3 (tak terlihat, mencetak) atau v2 (checkbox), atur threshold skor V3, dan sediakan situs dan kunci rahasia. Kunci-kunci yang sama ini digunakan kembali oleh form permintaan portal dukungan.

Failed-Login Auto- Lockout

Blokir alamat setelah sejumlah kegagalan dalam jendela, untuk beberapa jam. Anda dapat menyesuaikan pesan halaman kunci dan menampilkan gangguan layar-kecil pada layar tunggu.

Hardening Login

Kebijakan sandi dengan panjang minimum, penolakan terhadap kata sandi yang ditemukan dalam pelanggaran yang dikenal, secara permanen mengunci terhadap isian kredensial, faktor dua wajib untuk setiap admin, masukan kata sandi sebelum aksi berbahaya, dan perangkat baru tanda-di peringatan.

Single Sig- On (OIDC)

Staf sinyal-in melalui penyedia identitas Anda. Perlu penerbit URL, ID klien dan rahasia klien. Domains Auto- penyediaan, satu per baris, membuat pengguna secara otomatis pada tanda pertama-in.

Sinyal Tunggal-hidup (SAML 2.0)

Untuk penyedia yang berbicara SAML. OpsIQ memberikan balasan ACS URL dan SP entitas ID; Anda memasok ID entitas IDP, sign- in URL, opsional sign-out URL dan X.509 penandatanganan sertifikat. Bagian atribut email dan nama hanya dibutuhkan untuk nama atribut tidak standar.

Penyediaan SCIM

Direktory- didorong penciptaan, pembaruan dan penonaktifan dari OpsIQ rekening.OpsIQ persediaan SCIM basis URL; Anda menghasilkan token berlabel di sini sehingga seseorang dapat dicabut tanpa melanggar sisanya.

Ancaman, pemblokiran dan koleksi

Daftar Allow- Egress Outbound

Batasi host eksternal mana yang dapat dihubungi oleh konektor area kerja ini. SSH Target kontrol di Umum.

Threat Scoring dan Auto- Block

Memblokir pengunjung sekali angka ancaman mereka melewati ambang pintu Anda. 0 Perhatikan halaman Keamanan Overview selama seminggu sebelum memilih sebuah angka.

Pesan Halaman Blok

Pesan pengunjung diblokir melihat, sebagai teks polos atau kebiasaan Anda sendiri HTML layar blok.

Core Web Vital dari pengunjung nyata

Mengukur LCP, INP dan CLS dari sesi nyata.

Dipukul, dikembalikan ke posisi aman.

Antrian peristiwa gubahan dalam peramban dan kirim dalam batch dengan mencoba ulang, mengurangi kerugian pada koneksi seluler yang buruk.

Pelacakan Tertanda Beacon

Widget embed sebenarnya membawa token kriptografi yang berputar sehingga data pelacakan palsu dapat ditolak. Secara baku; memungkinkan perubahan bagaimana embept mengothentifikasi, jadi uji dulu.

Alerts Keamanan

Off by default. Deteksi dan blocking berjalan terlepas. Kartu ini mengontrol apakah Anda diberitahu, dan berapa banyak pendukung AI.

Aktifkan peringatan keamanan

Master switch untuk kartu ini.

Ambang gelombang Failed- login

Berapa banyak tanda-tanda gagal dalam hitungan periode pendek sebagai gelombang yang layak diperingatkan.

IP reputasi intelijen

Tambahkan skor ancaman bagi pengunjung muncul dalam feed penyalahgunaan publik.

Jam tangan

Jam kerja yang panjang dan TLS berakhir pemeriksaan, waspada sebelum sebuah sertifikat lapses.

Analis keamanan AI dan insiden AI

Menambahkan putusan yang bisa dijelaskan terhadap aktivitas mencurigakan, dan kelompok terkait serangan ke dalam insiden mudah dibaca tunggal daripada aliran peristiwa.

Autopilot Kebijakan

Beraksi sendiri, mengubah apa yang ia pelajari dari sebuah insiden menjadi peraturan diusulkan atau terapan.

Petugas keamanan harian...

Rekap harian di halaman Keamanan Overview, dan daftar cek yang keras tiap minggu menunjukkan apa yang dilindungi dan apa yang masih terbuka.

Proposal basi otomatis-kadaluarsa

Aturan blok yang diusulkan Anda tidak pernah bertindak pada berakhir dengan sendirinya bukannya mengumpulkan.

Replay Sesi DOM

Aktifkan replay sesi DOM

Sesi pengunjung rekaman untuk diputar. Ketika dari perpustakaan replay tidak pernah dimuat, jadi tidak ada biaya untuk meninggalkannya off. Rekaman yang dibuat sampel dan primocly- bertopeng, dan diawasi pada halaman Replay Sesi di bawah Analis.

Laju sampel, penangkapan maksimal, penahanan

Apa bagian dari sesi untuk merekam, berapa lama rekaman tunggal dapat berjalan, dan berapa banyak rekaman yang disimpan.

⚠️
Replay sesi mencatat orang-orang yang menggunakan situs Anda. Pertahankan tingkat sampel dan penyimpanan serendah akan menjawab pertanyaan Anda, dan ungkapkan dalam pemberitahuan privasi Anda.
Pengaturan

Pengaturan: Pelacakan dan Privasi

Apa OpsIQ dapat mengumpulkan, dan berapa lama setiap jenis catatan bertahan.

Ekstensi

Selain IPs dan CDR Ranges

Alamat tidak pernah dilacak, satu per baris, alamat yang tepat atau rentang CIDR. Cara paling bersih untuk menjaga tim Anda sendiri dari analisis Anda, karena mencakup semua orang di alamat itu bukan hanya sinyal-dalam admin.

Selain URL Paths

Pola halaman tidak pernah dilacak, satu per baris, wildcard dengan tanda bintang. /admin/* menjaga seluruh kantor belakang dari log pengunjung.

Kebijakan Retensi Data

Per-subsistem auto- pembersihan dalam hari. terpisah dari keseluruhan Data Retention setting di Umum dan dari pembersihan Zona Bahaya.

Log interaksi AI

Percaya diri telemetri memegang preview pendek dari query dan respons. Baku 90 Ini memegang paling banyak pelanggan teks, sehingga memperpendek terlebih dahulu ketika mengencangkan privasi.

Peristiwa penggunaan AI

Nomor telepon dihitung untuk laporan biaya. Baku 90 Hanya nomor, tidak ada isi pesan.

Aksi autheies

Aksi yang jelas dan log keamanan. Baku 365 Ini adalah jejak buktimu.

Diagnostik

Sistem catatan kesehatan, hari-hari baku 30.

Pertanyaan yang belum terjawab

Cluster pertanyaan AI tidak bisa menjawab. Baku 90 Hari, kerjakan mereka pada Pertanyaan yang tak terjawab AI sebelum mereka berakhir.

Watchdog dan ekspor

Alerts Anomali Metric

Perbandingan harian kemarin terhadap baseline baru-baru ini, memperingatkan ketika metrik bergerak lebih dari ambang batas Anda. Baku 35 %. mati secara default.

Ekspor Gudang

Pembuangan malam dari sesi, pengunjung, pageview dan tabel terkait untuk tumpukan BI Anda sendiri, dalam format yang Anda pilih, disimpan untuk beberapa hari.

Pengaturan

Pengaturan: Asisten AI Adamin

Asisten yang mengambang yang digunakan staf Anda di dalam admin, dengan akses langsung baca ke klien, faktur, tiket, server dan log cron. Seorang asisten berbeda dari pelanggan-menghadap satu dibawah Client Chat.

Aktifkan OpsIQ Widget AI

Tampilkan tombol asisten di setiap halaman admin.

Tata letak dan perilaku

Posisi sudut, lebar panel (320 ke 600 px), tinggi maksimal (400 ke 900 px), radius sudut (0ke 24), ukuran font, dan buram kaca yang membeku di belakang panel.

Tampilkan Chips Quick

Satu klik tombol pintas di bawah header. Cara tercepat untuk kebanyakan staf.

Tampilkan Info Model

Tampilkan model mana yang menjawab dan berapa lama dibutuhkan. Berguna saat tuning biaya, kebisingan untuk penggunaan sehari-hari.

Gerbang akses per-admin

Hanya menampilkan asisten ke signed- dalam admin yang nama pengguna dan email keduanya cocok dengan OpsIQ agen yang ditugaskan ke area kerja ini pemilik selalu lulus gunakan Periksa tombol akses saya sebelum mengaktifkan atau anda dapat mengunci tim anda keluar.

AI Persona

Tampilkan nama, tag header dan pesan selamat datang yang ditampilkan ketika panel terbuka.

Chips Smart Quick- Action

Sunting label dan batasi prompt untuk setiap jalan pintas, tambahkan sendiri, atau reset ke nilai baku. Label adalah apa yang dilihat staf, prompt adalah apa Al terima.

Warna dan bentuk

Chip bentuk (pil, bulat, persegi), warna chip, tema kartu dan bentuk peluncur (bulat, squircle, persegi, dengan pratinjau hidup.

Memori Percakapan

Asistennya mengingat setiap sejarah orang di seluruh sesi browser, sampai 120 pesan, disimpan dalam basis data anda sendiri. Bersihkan untuk memulai yang baru.

Pengaturan

Pengaturan: Percakapan Klien

Widget obrolan yang digunakan pelanggan, dan area Pengaturan terbesar. Enam tab sub-, dengan saklar utama dan Simpan ditempelkan ke atas tab.

Bekerja melalui tab-sub- dalam rangka memasang baru: Identitas dan Salinan, Penampilan, Perilaku, Dukungan Flow, Pelatihan Pengetahuan. Lanjut adalah infrastruktur dan dapat menunggu.

Identitas dan Salinan

Identitas Merek

Nama widget, tagline, nama AI, nama yang dipakai untuk sistem dan pemberitahuan menganggur, dan bagaimana nama agen muncul. Sumber Nama Agen memutuskan antara nama asli, nama suai atau label tim.

Sambutan In- Percakapan

Dua salam, satu untuk semua pengunjung dan satu untuk pengunjung teridentifikasi pertanyaan dimulai lebih banyak percakapan daripada pernyataan.

Teaser Popup

Pesan mengambang sebelum obrolan dibuka, dengan namanya sendiri, ukuran huruf dan warna. AI dapat menulis para teaser, dengan kontrol untuk berapa banyak yang akan dihasilkan, berapa banyak untuk menunjukkan per kunjungan dan celah di antara mereka.

Promps dan Handoff

Naskah lengkap: Meminta nama dan email, konfirmasi, meminta manusia, tidak ada agen, tiket dibuat atau dibatalkan, handoff tertunda. Sekitar dua lusin baris individu dalam panel yang dapat ditembus.

Notifikasi Status dan Diam

Tiga pesan yang terlihat: agen menutup obrolan, pengunjung diam, dan agen tangan kembali ke AI. Hindari kata-kata internal seperti diselesaikan atau diperangkatkan.

Komposer dan Saran

Placeholder masukan, label tombol untuk-a-manusia, dan yang disarankan untuk membuka pertanyaan. Tiga saran yang baik membelokkan lebih banyak tiket daripada satu halaman artikel.

Peluncur, Ikon dan Avatar

Ikon peluncur, ikon pilihan berbeda ketika dibuka, ukuran peluncur dan gambar untuk agen manusia dan AI.

Penampilan

Tema dan Kaca

Mode tema, warna premium yang ada, intensitas kabur dan opasitas, ditambah toggle untuk animasi, garis pemisah, menyembunyikan baris status, menyembunyikan kartu kotak pesan dan menyembunyikan tombol tutup. Mulailah dengan sebuah preset; itu mengatur puluhan warna sekaligus.

Warna Utama

Peluncur, header, bantuan panel, links, buttons, pemberitahuan sistem dan komposer, masing-masing dengan warna awal dan akhir untuk gradien. Gunakan pilihan gelas baku mengabaikan ini dan menjaga penghabisan transparan.

Panel, Bubbles dan Chips

Sekitar tiga puluh pemilih yang meliputi panel, batas, teks, area masukan dan setiap jenis gelembung (pengunjung, AI, agen, mengetik, sistem) plus chip saran dan keadaan hover mereka. Buka ini hanya untuk kecocokan merek yang tepat, dan cek kontras pada teks gelembung.

Tata Letak dan Bentuk

Lebar panel dan tinggi, jari sudut, ukuran fonta, posisi layar, bentuk peluncur, gaya gelembung dan apakah avatar menunjukkan. Uji lebar pada telepon.

Perilaku

AI menjawab secara otomatis

"Master switch for AI replies". "Off" artinya setiap pesan menunggu manusia.

Manusia mengikuti dan dua kali pesan-pesan alam

Sebuah diikuti dengan lembut - up ketika pengunjung pergi tenang, dan pesan pendek opsional kedua cara seseorang akan mengirim satu. Tuned dengan maksimum follow- up per keheningan, pertama penundaan, kemudian pengganda, jendela kehadiran dan urutan maksimum jendela. Dapat terbatas pada jam-jam bisnis, dan ditekan setelah sederhana terima kasih.

Mesin ketik menjawab dan membalas kecepatan

Apakah menjawab jenis kata demi kata, dan seberapa cepat asisten jawaban, atau preset Anda sendiri minimum dan maksimum penundaan dalam milidetik. Sebuah jeda kecil membaca sebagai lebih manusia dari jawaban instan.

Terjemahan langsung

Setiap agen membaca dan menulis dalam bahasa mereka sendiri sementara pengunjung membaca mereka.

Kembalikan ke AI setelah agen menganggur

Menit-menit tidak aktif agen sebelum AI melanjutkan percakapan.

Otomatis-buka obrolan

Detik sebelum widget terbuka sendiri.0Jangan pernah buka.0kecuali diuji.

Jawaban Pintar

Merencanakan untuk satu - lewat jawaban, berpikir kedalaman, sebuah pilihan model terpisah untuk jawaban agen, menunjukkan alasan kepada pengunjung, toleransi kesalahan-pesan percakapan, membatasi asisten untuk bisnis Anda hanya, harga dalam mata uang tamu, dan bagaimana link muncul.

Biaya Menyimpan

Melewati pencarian pengetahuan untuk salam seperti hi dan terima kasih, dan topi jawaban terpanjang dalam token. Harga Trim tanpa mengubah kualitas jawaban pada pertanyaan nyata.

Bahasa

Bahasa mana yang didukung widget dan bagaimana memilih satu untuk pengunjung.

Jawaban Akun Pelanggan

Jawaban dari sebuah sinyal dalam akun pelanggan sendiri, mungkin mencari langsung, dan pilihan dimuat hanya bila dibutuhkan. Baca-saja di semua kasus; absen-ketika - diperlukan tanpa pemberitahuan mengurangi biaya.

Kembalikan

Membantu pengembalian uang meminta dimana asisten mengumpulkan detail dan tangan kepada seseorang.

Percakapan dan Widget

Menjaga percakapan masa lalu, melanjutkan obrolan di situs terhubung Anda, jendela yang dapat dibawa, meminta para tamu untuk email, dan membiarkan tim Anda mengubah chatting menjadi tiket.

Fitur Widget

Emoji picker, lampiran dengan mode pilihan - hanya, citra AI pemahaman, ikon inline, mikrofon, tombol talk-to-agent, suara pengunjung, pratinjau, special-call tombol dan isolasi sesi. Pengertian gambar Al adalah apa yang memungkinkan sebuah paste kesalahan dari cuplikan layar pengunjung dan mendapatkan jawaban yang berguna.

Admin Inbox, Notifications dan Welcome Popup

Pendatang popup tamu, ditambah peringatan agen Anda: inbox suara, pemberitahuan desktop, bisikan suara, apakah bisikan pribadi bip, dan interval polling inbox.

Dukungan Flow

Hantaff Manusia

Bagaimana permintaan untuk seseorang ditugaskan, detik seorang agen harus menanggapi, apakah penurunan kembali percakapan dengan AI, dan apakah AI dilanjutkan ketika timeout. Mengkonfigurasi ini sebelum akan hidup atau pengunjung yang meminta manusia hanya menunggu.

Jam Kerja

Membuka waktu, zona waktu dan pesan penutupan-jam. Di luar jam ini AI tidak akan menawarkan manusia. jadwal terpisah dari bisnis tiket jam bawah OpsIQ menulis.

Balasan ketika AI mati

Jawaban pertama untuk pesan baru, jawaban ketika seseorang sudah antri, dan berapa lama sebelum mengulangi.

Bentuk Luring

Tampilkan suatu bentuk kontak daripada percakapan.

Tiket Pencarian dan Pemberitahuan Departemen

Intelejen AI menunjukkan penerima nyata untuk setiap departemen, memecahkan cara yang sama dengan pemberitahuan untuk menyelesaikan masalah tersebut, sehingga Anda dapat melihat sebelum pelanggan melakukan hal itu tidak ada yang diberitahu oleh departemen.

Pusat Bantuan dalam widget percakapan

Membiarkan pengunjung membaca artikel tanpa meninggalkan obrolan. Anda memilih dimana titik entri muncul, label bar bawah dan ikon, dan apakah akan menawarkan link ke pusat bantuan penuh. Mati secara baku.

Peringkat Percakapan

Rating bintang dipicu ketika seorang agen menutup obrolan, ketika sebuah handoff berakhir, atau setelah periode inaktif yang Anda set. Pilih satu atau dua pemicu, tidak semuanya.

- Survey Percakapan Pos

Survei singkat ketika pengunjung menutup obrolan, dengan pertanyaan Anda, penundaan, aturan waktu dan cap per kunjungan. Pengunjung juga dapat mengirim email atau mengunduh transkrip. Satu pertanyaan akan dijawab; tiga tidak.

Survey Email Post- Percakapan

Sebuah survey berikut-up melalui email setelah percakapan berakhir, mungkin dalam bahasa pengunjung mengobrol dalam, dengan kontrol atas penundaan, subjek, intro, pertanyaan, baik tombol label dan terima kasih - Anda baris.

Balas Feedback

Jempol naik dan jempol ke bawah pada setiap jawaban AI, makan dashboard kualitas.

Arsip Percakapan

Arsip otomatis setelah hari, oto- tuntaskan setelah beberapa menit keheningan, dan hapus percakapan arsip setelah hari. Retensi tempat ketiga diatur, bersama Jenderal dan Pelacakan.

Pelatihan Pengetahuan

Apa yang diketahui asisten itu, tidak ada lagi dalam percakapan klien.

Pelatihan Pengetahuan Situs Web

Merangkak situs Anda sehingga asisten dapat menjawab dari itu. hingga sepuluh awal link, batas halaman, kedalaman link, dan folder yang dikecualikan. Satu URL bisa diuji sebelum merangkak penuh cek eksclude, akun dan jalur admin.

Pembenam

The API kunci dan model yang mengubah halaman menjadi makna yang dapat dicari daripada pencocokan kata kunci.

Organisasi Pengetahuan AI

Satu klik dan AI membaca setiap halaman FAQ dan merangkak dan menyortir mereka ke dalam kategori.

FAQ, Jawaban Terverifikasi

Pasangan pertanyaan dan jawaban diperlakukan sebagai sumber prioritas tertinggi, masing-masing dengan status, berat dan kategori. Dapat dicari, dapat dinilai dari JSON Ketika asisten mendapat sesuatu yang salah, tulis FAQ: outlanks halaman merangkak, sehingga memperbaiki segera.

Tingkat lanjut

Performa dan Batas

Interval polling, batas kecepatan pesan dan jendela, ukuran maksimal lampiran, percobaan lampiran per jendela, dan ekstensi berkas yang diperbolehkan. Daftar ekstensi adalah kendali keamanan; tetap ketat.

Pengiriman Realtime

Pesan dan status secara instan tidak termasuk polling, melalui Pusher, Ably atau Firebase, dengan interval polling fallback. Polling baik untuk sebagian besar situs.

Notifikasi Push

Peringatan perangkat untuk agen melalui Pusher Beam or OneSignal, dengan ketertarikan perangkat.

Push Web (VAPID)

Dorongan peramban menggunakan kunci yang dihasilkan sendiri tanpa penyedia pihak ketiga. Dihasilkan di sini, bukan di Danger Zone.

Berbagi Suara, Video dan Layar

Kredensial TURN sehingga panggilan koneksi melalui jaringan restrictive, menggunakan Cloudflare atau Twilio kredensial atau TURN Anda sendiri URL, Nama pengguna dan kredensial.

Keraman Kotak-masuk

Pengaturan area kerja Agen daripada pengaturan pengunjung: Respon pertama SLA dalam menit, tampilan antrian tersimpan, jalan pintas papan tik dan palet perintah, pencarian percakapan in-, dan tiket pelanggan di inspektur.

Kanal Pesan

App, SMS, Facebook Messenger, Instagram, Telegram, X pesan langsung dan LINE, masing-masing dengan saklar AI auto- reck sendiri, ditambah sebuah switch kebijakan untuk tindakan AI pada saluran, jawaban debounce dan template keterlibatan WhatsApp. Setiap lahan saluran dalam inbox yang sama seperti percakapan web.

Pratilik Widget Hidup di bagian bawah pemutakhiran tab saat Anda mengedit. Gunakan itu bukan memuat ulang situs web Anda untuk memeriksa perubahan.
Pengaturan

Pengaturan: Templat

Setiap emailOpsIQkirim, dan satu desain yang membingkainya semua Edit kata-kata dari pesan apapun, dan tulis template Anda sendiri untuk apa sajaOpsIQtidak sudah mengirim.

Satu desain, banyak pesan

The template surel global adalah pembungkus: logo Anda, header, kartu, tipografi dan footer, dengan tengah kosong.OpsIQmengirim dimasukkan ke tengah itu. Sunting pembungkus sekali dan setiap perubahan email bersama-sama - menjawab tiket, penerimaan Toko, kata sandi direset, pesan pengingat, surat PeopleOS, dan apa pun yang Anda tulis sendiri.

Tidak ada cara untuk mengirim email dariOpsIQIni diterapkan pada satu titik setiap pesan meninggalkan melalui, sehingga pesan ditambahkan kemudian tidak dapat melewatkannya.

Menyunting suatu pesan

1
Buka Pengaturan, lalu Templat

Pesan dikelompokkan oleh apa yang mereka ada: tiket dan portal, Store, tandatangan, dan akun keamanan, booking, percakapan, pemberitahuan, laporan, surat PeopleOS, dan surat-surat Anda sendiri.

2
Tekan Sunting pada yang Anda inginkan

Anda mendapatkan subjek, seorang editor teks kaya denganHTMLpandangan Anda dapat beralih untuk hidup, dan pratilik email selesai persis sebagai penerima menerimanya - pembungkus Anda termasuk.

3
Gunakan chip variabel

Chip di atas penyunting adalah fakta yang mengubah: nomor tiket, referensi urutan, waktu pemesanan. Klik satu untuk menjatuhkannya dimana kursor berada.

4
Simpan

Hanya pesan yang ditulis. Tinggalkan lapangan kosong dan itu terus membangun - dalam kata; pil pada baris memberitahu Anda yang menyatakan itu masuk

💡
Variabel yang tidak anda gunakan akan dihapus ketika email terkirim, dan begitu juga baris yang sedang ada. Itulah mengapa pemesanan tanpa nomor telepon tidak pernah mengirim "Telepon:" dengan apa-apa setelah itu.

Tulis template Anda sendiri

Gunakan ini untuk pesanOpsIQtidak telah mengirim: pemberitahuan pengiriman, pengingat pembaharuan, paket penyambutan, kunci lisensi. Ini membuat segala sesuatu yang dibangun - dalam pesan mendapat - editor, pratilik, aturan rencana dan desain global Anda - dan sistem Anda sendiri mengirimkannya melaluiAPI.

1
Tekan Tambah template

Tombol itu terletak di atas halaman Templat dan lagi di samping "Teplates Anda sendiri".

2
Sebutkan

Nama menjadi referensi sistem Anda mengirimkan oleh, ditampilkan di bawah lapangan seperti yang Anda ketik - misalnya x_custom_delivery_bookedIni tidak dapat berubah setelah itu, karena sesuatu sudah akan dikirim oleh itu.

3
Katakanlah apa itu untuk orang lain dan ketika ia diutus untuk menyampaikannya

Kedua baris ini adalah apa yang Anda dan rekan-rekan Anda baca di Templat halaman setahun dari sekarang.

4
Daftar bagian yang berubah

Comma- dipisahkan, misalnya: nama, ketika, tracking_linkMasing-masing menjadi {{variable}} Anda dapat memasukkan ke dalam subjek atau pesan, dan sistem Anda mengisinya pada waktu kirim.

5
Tulis subjek dan pesan

Kalimat biasa baik-baik saja - istirahat baris menjadi paragraf. Tulis PESAN saja; logo, header dan footer berasal dari template global.

6
Membuat, kemudian membukanya

Tampaknya di bawah "Teplat Anda sendiri" dengan penyunting penuh dan pratinjau langsung, sama seperti setiap built- dalam pesan.

⚠️
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.

Mengirim templat Anda sendiri

Dua panggilan pada produkAPIPenelepon menyediakan penerima dan variabel - tidak pernah kata-kata dan tidak pernah desain, sehingga integrasi tidak dapat mengirim email unbermerek melalui ruang kerja Anda atau mengubah apa yang Anda katakan kepada pelanggan Anda.

Daftar contoh dan variabel yang setiap orang ambil
POST /api/v1.php
Authorization: Bearer YOUR_API_KEY

{ "action": "email.templates.list", "mine": true }
Kirim
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 pergi TANPA kawat gigi diAPIcalled. Email.templates.list tangan mereka kembali dalam bentuk persis Anda lulus mereka masuk

Templat dan rencana Anda

Pesan yang tidak Anda miliki

Tetap terdaftar dengan link "Lihat rencana" dan tidak ada editor - sehingga Anda dapat melihat apaOpsIQakan mengirim, dan apa yang membukanya.

Templat Anda sendiri

Pilih layanan yang dimiliki template saat Anda membuatnya, atau tinggalkan pada Setiap rencana. Sebuah area kerja tanpa layanan tersebut melihatnya terdaftar tapi tak dapat menyunting atau mengirimkannya.

Sinyal-in, keamanan, pemberitahuan dan tes email

Tidak pernah merencanakan. Tidak dapat memperbaiki kata sandi reset admin Anda sendiri menerima akan menjadi salah jenis kunci.

Pertanyaan

Dapatkah saya mengubah desain hanya untuk satu pesan?+

Tidak, dan dengan sengaja, desainnya adalah pembungkus dan itu dibagi, yang membuat setiap email dikenali milikmu. Apa yang masuk ke pesan adalah kata, panel fakta dan tombol apapun yang kau tambahkan di dalam pesan.

Apa yang terjadi dengan kata-kata saya jika saya tekan Reset?+

Reset muncul pada template global saja, dan itu menggantikan apa yang ada di penyunting dengan desain built-in. Tidak ada yang ditulis sampai Anda tekan Save, sehingga Anda dapat menutup dialog untuk mengubah pikiran Anda.

Aku menghapus salah satu templat saya secara tidak sengaja.+

Menghapus mengambil dua klik untuk alasan itu - lengan pertama dan memberitahu Anda apa yang akan berhenti bekerja. jika sudah hilang, membuatnya lagi dengan nama yang sama dan referensi yang sama kembali; hanya kata yang harus diketik kembali.

Bisakah sebuah konektor atau add- pada membawa sendiri templat?+

Ya, sebuah paket kapal surat templat.jsondalam direktori sendiri, dan pesannya muncul di bawah "Templat Pengembang" dengan penyunting yang sama, pratinjau, pembungkus dan gerbang rencana. Anda menulis Edits milik ruang kerja Anda dan selamat dari paket pemutakhiran.

Pengaturan

Pengaturan: OpsIQ Menulis

Tiket yang dijawab secara tertulis: jawaban otomatis, sistem tiket asli, eskalasi, jam kerja, routing dan penggubah-menghadap email.

Auto- Tanggapan

Tampilkan OpsIQ Tombol menulis

Tambahkan tombol pembantu untuk agenmu di admin.

Aktifkan tiket otomatis - jawaban

Antrian tiket baru, jawaban dan menjawab mereka setelah penundaan dimulai dengan itu dan review draft selama seminggu pengembalian uang, pembatalan dan perubahan akses harus selalu mencapai seseorang

Bagian jawaban otomatis

Bagian mana yang otomatis dapat menjawab. Apa pun yang tidak terdaftar tersisa untuk manusia, yang merupakan standar aman.

Balas jadwal penundaan (menit)

Berapa lama menunggu sebelum jawaban otomatis terkirim. Jawaban instan berbunyi sebagai robot; beberapa menit dibaca sebagai tim cepat.

Max AI membalas setiap tiket oleh departemen

Sebuah topi per- departemen, misalnya Billing 1 dan Dukungan 3Tanpa topi, benang bingung bisa berputar.

Panjang jawaban, status dan identitas

Token penulisan maksimum, status tiket setelah jawaban dan setelah eskalasi, dan akun admin yang otomatis ditanggapi. Gunakan akun bernama jelas sehingga staf dapat memberitahu AI balasan dari manusia.

Operasi tiket asli

Sistem Tiket Asli

Sistem tiket yang dibuat ke OpsIQ, untuk instalasi tanpa bantuan eksternal.

Pipa inbound email ke tiket asli

Mengubah email masuk menjadi tiket. OpsIQ persediaan titik akhir URL, tanda auth, jalur script dan biner PHP apapun yang dapat memposting ke titik akhir itu dapat membuat tiket, jadi menjaga rahasia token.

Multi- turn replies dan delay and debounce

Apakah AI terus menjawab sebagai percakapan terus, dan apakah menunggu jendela tenang sehingga tiga pesan cepat mendapatkan satu reply dipertimbangkan. Jendela yang tenang adalah pengaturan tunggal terbaik untuk membuat jawaban otomatis merasa dipertimbangkan.

Portal dukungan publik

Sebuah halaman yang menghadap ke pelanggan dimana semua orang dapat menaikkan dan melacak tiket, dengan baris penyambutan opsional. Alamatnya dan melihat dikonfigurasi dalam tab Dukungan Portal.

Format nomor ticket

Berapa banyak huruf acak muncul dalam angka tiket yang dihasilkan.

Surel pelanggan dalam bahasa mereka sendiri

Email tiket mengikuti bahasa pelanggan. Surel staf tidak pernah mengubah bahasa: pemberitahuan, departemen waspada, briefing dan jadwal laporan tetap dalam bahasa sistem Anda.

Konfirmasi dan konfirmasi

Sebuah aknodlekasi tetap pada tiket baru, ditambah pesan konfirmasi ketika sebuah tiket dibuka, ketika umpan balik tersisa dan ketika sebuah Tiket ditutup, masing-masing dengan pratinjau hidup. Ada juga sebuah pembungkus template email global dan link di belakang tampilan tombol tiket Anda.

Pemutaran spam AI

Tiket Screens dari pengirim yang tidak diketahui, dan dapat secara opsional bergerak diduga spam sendiri. Tinggalkan otomatis bergerak sampai Anda telah menyaksikan keputusannya.

Otomatis-tutup tiket idle

Setelah beberapa hari tenang, aku akan memberikan tiket pada pelanggan untuk membuka kembali.

Jam bisnis (SLA kalender)

Zona waktu, pembukaan dan penutupan waktu, hari kerja dan liburan untuk pertama-jawaban dan timerasi resolusi. Jadwal terpisah dari Jam Kerja di bawah Percakapan Klien.

Otomatis-assign tiket baru

Penugasan otomatis, mungkin hanya untuk agen yang online, dengan keterampilan agen dan sensitivitas yang cocok untuk keahlian berbasis routing.

Saran tiket duplikat

Spots ketika pelanggan membuka tiket dekat dengan yang mereka sudah miliki, dengan adjustable sensitivitas pertandingan.

Survei kepuasan setelah ditutup

Email-survey sehari setelah penutupan. Hasil muncul di halaman CSAT.

Beritahu departemen melalui email

Email departemen ketika tiket baru tiba. Penerima adalah anggota departemen itu, bukan alamat kotak surat departemen, yang merupakan inbound tiket alamat tiba.

Apa Al dapat membaca

Akses data klien AI

Sebuah switch utama plus individu read- hanya hak akses untuk ringkasan profil klien, faktur, transaksi, saldo kredit, produk dan jasa, domain, server terkait dan overview akun tingkat tinggi. Mulailah dengan profil ringkasan dan tambahkan kategori sebagai balasan yang dibutuhkan mereka.

Eskalasi dan pengetahuan

Aktifkan eskalasi tiket AI

Pindahkan tiket ke departemen yang lebih cocok sebelum menjawab.

Pengaturan pengetahuan

Apakah menjawab menggunakan bahasa pelanggan, apakah mereka menggambar pada tautan merangkak dan FAQ, apakah AI membaca gambar dan PDF lampiran, mode jawaban pengetahuan, apakah diimpor JSON pengetahuan digunakan, dan apakah sumber link dapat muncul. Gunakan tautan merangkak dan FAQ seharusnya aktif, atau AI sedang menebak.

Hentikan auto- balas setelah manusia membalas

Setelah staf menjawab, AI berhenti menjawab tiket itu tanpa itu AI dapat berbicara atas agen Anda sendiri.

Instruksi tiket dan surel

Instruksi teks bebas membentuk nada dan isi untuk setiap jawaban, dengan contoh yang dapat diloadable. Lebih spesifik tentang apa yang AI tidak boleh dilakukan.

Impor pengetahuan JSON

Upload atau paste sebuah JSON berkas pengetahuan untuk asisten penulis.

Studio Tombol

Perancang penuh untuk tombol yang menghadap pelanggan: Gaya tampilan, ukuran, label, ikon, bentuk, lebar minimum, gaya latar belakang dengan warna primer dan sekunder, sudut gradien, batas, jari-jari pojok, bayangan, tipografi, animasi menganggur, gerakan melayang dan warna, dan cincin fokus, ditambah suatu gubahan CSS kotak untuk apa pun kontrol tidak menutupi.

Pengaturan

Pengaturan: Dukungan Portal

Situs yang menghadap pelanggan dimana orang-orang mengumpulkan dan melacak dan membaca artikel bantuan anda tab ini mengontrol bagaimana mencapai dan bagaimana pelanggan masuk; rancangan visual dilakukan dalam Dukungan Portal Studio.

Portal Studio atau Embedden Ticket Portal: Mana yang saya inginkan?

Ini adalah dua produk yang berbeda dan orang-orang mencampurnya terus-menerus. Mereka memecahkan masalah yang berbeda, dan menjalankan keduanya bersama-sama adalah normal.

Dukung Portal Studio: tempat Anda mengirim pelanggan ke

Studio mendesain situs dukungan lengkap bahwa OpsIQ host untuk AndaIni memiliki alamat web sendiri, atau domain Anda sendiri, dan itu membawa seluruh pengalaman layanan diri: membantu artikel dengan pencarian, formulir permintaan, riwayat tiket, tanda pelanggan dan asisten. Pilih sebuah template, bekerja melalui Tema, Navigasi, Tata Letak, Pengetahuan, Footer, Tiket, Asisten, Formulir dan CSS, pratinjau di desktop, tablet dan ukuran telepon, kemudian mempublikasikan.

Gunakan ketika Anda ingin satu tujuan bermerek yang dapat mengarahkan setiap pelanggan, dan Anda lebih suka tidak membangun atau mempertahankan area dukungan di dalam situs web Anda sendiri.

Tiket Tertanam Portal: tiket dalam situs Anda sendiri

Tempelkan embed hanya pengalaman tiket di halaman situs web Anda sendiriPelanggan buka, trek dan menjawab permintaan dukungan tanpa pernah meninggalkan halaman Anda, dan header Anda sendiri, navigasi dan desain tetap persis seperti mereka. Atur tata letak, penampilan, dan aturan akses pada pembuat widget, pratilik hasil, kemudian salin snippet embed ke halaman Anda.

Gunakan ketika Anda sudah memiliki situs atau aplikasi dengan desain sendiri, dan Anda ingin dukungan terjadi di dalamnya daripada menyerahkan pelanggan ke alamat yang berbeda.

Versi pendek

Studio membangun tempat Anda mengirim pelanggan keEmbed membawa tiket ke tempat pelanggan Anda sudahBanyak bisnis menjalankan keduanya, memasukkan widget tiket ke area akun mereka untuk permintaan in- konteks ketika menjaga portal yang diselenggarakan sebagai tujuan layanan penuh dengan artikel dan pencarian. Mereka adalah switch independen.

Alamat dan akses

Mode akses

Apakah portal terbuka untuk siapa pun atau dibatasi untuk menandatangani dalam pelanggan.

Pilihan tata letak

Apakah portal dan pusat bantuan berbagi satu pahlawan atau menggunakan dua, yang navigasi dan footer muncul pada kedua permukaan, dan label bagian navigasi.

Alamat portal

Alamat yang digunakan pelanggan, pilih nama dan OpsIQ menunjukkan portal yang dihasilkan dan alamat pusat pencocokan, mengubahnya kemudian istirahat link yang telah Anda kirim.

domain Anda sendiri

Melayani portal dari domain Anda sendiri, seperti support. yourdomain. com..

Kantung TerbenamTicket Portal

Menyalakan widget drop-in yang dijelaskan di atas, dan membuka pembuat penambahan dimana Anda memilih tata letak, penampilan dan aturan akses, pralihat hasil dan salin snippet untuk halaman Anda. Ini bukan Studio Portal: Studio merancang portal yang dihost, ini menaruh tiket ke dalam situs Anda sendiri. Keduanya dapat digunakan bersamaan.

Bagaimana pelanggan mendaftar

Ini adalah opsi yang anda tandatangani. Staf mendaftar-in dikonfigurasi di bawah Pengaturan, Keamanan.

Sinyal-dalam metode

Pilihan mana yang muncul pada tanda tangan pada halaman. Konektor dan surel masuk secara otomatis.

Tanda sosial - in

Penyedia akun konsumen, masing-masing membutuhkan ID klien dan rahasia, dengan alamat redirect yang disediakan oleh OpsIQ mendaftar dengan penyedia itu.

Single-sign-on (OIDC)

Pelanggan menanda-tangani melalui penyedia identitas, dengan penerbit URL, ID klien, rahasia dan daftar domain surel yang diijinkan opsional.

Pelanggan SAML 2.0

The SAML sama saja. OpsIQ memberikan balasan ACS URLdan SP entitas ID; Anda memasok ID entitas IDP, sign- in dan sign-out URLs X.509 sertifikat dan nama atribut opsional. Putar SAML pada dalam metode Sinyal-dalam atau tidak akan muncul.

Tanpa cela sinyal -in dari aplikasi Anda

Sebuah link yang ditandatangani dalam jadi pelanggan sudah masuk ke aplikasi Anda tanah di portal tanpa menandatangani lagi. OpsIQ Pasokan rahasia penandatanganan, portal URL dan kunci area kerja, rute lengkap untuk bahasa Anda (PHP, Laravel, WordPress, WHMCS, Node.js, Frask, Django, .NET, Rails, Java, Go, dan pada diri-hosted menginstal OpsIQ server itu sendiri), catatan setup step-by-step, dan generator untuk sambungan tes yang ditandatangani. Gunakan generator sebelum menulis kode apapun.

Bagaimana rute bekerja

Pelanggan Anda mengklik link Dukungan yang menunjuk di rute. Rute menemukan pelanggan yang ditandatangani ke aplikasi Anda (tamu dikirim ke log masuk dan belakang), membaca rahasia dari server Anda, menandatangani token satu-waktu yang berakhir dalam dua menit, dan mengarahkan kembali ke portal dengan alamat no- referer dan no-store sehingga token tidak cache atau bocor.

Tanda tangan di portalnya sendiri.

Di Portal Studio, Signed-in page, nyalakan Gunakan login website saya dan atur halaman log masuk Anda URL ke rute yang sama opsiq_portal_return (Halaman pelanggan berada di); rute menghormati hanya ketika itu di dalam alamat portal Anda dan membawa pelanggan kembali ke sana, ditandatangani masuk

WHMCS

Tidak ada yang perlu ditulis: WHMCS kait dari Remote Sites telah menandatangani klien ke dalam portal dan menangani alamat kembali. Set halaman log masuk Anda URL ke Anda WHMCS log masuk area klien.

Tanda tangan di mana-mana

Tanda tangan keluar dari portal juga tanda tangani pelanggan dari aplikasimu.

Intake dan perlindungan

Meminta daerah formulir

Setiap bidang tambahan kehilangan pengiriman, jadi mintalah hanya untuk apa yang Anda butuhkan untuk triase.

Spam dan perlindungan penyalahgunaan

A honeypot dan rate membatasi selalu melindungi bentuk publik. Di atas anda dapat memblokir alamat email sekali pakai, menambahkan domain terblokir anda sendiri, dan tambahkan CAPTCHA menggunakan Google reCAKPCHA atau Cloudflare Turnstile. reCAPTCHA reuses kunci yang telah ditetapkan di bawah Pengaturan, Keamanan; tombol turnstile dimasukkan ke sini.

Analitik Portal

Sebuah read-hanya ringkasan aktivitas portal selama tiga puluh hari terakhir.

Pengaturan

Pengaturan: Hak, Izin, Cron dan Zona Bahaya

Grup Sistem, ditambah kontrol akses tim yang menentukan siapa yang dapat melihat tab pengaturan mana.

Akses Tim dan Hak-Persyaratan

Per-admin permissions

Setiap admin mendapat satu set hak eksplisit meliputi akses inbox percakapan, dimana bagian Pengaturan yang dapat mereka sunting, dan departemen-departemen mereka. Siapapun dengan peran Administrator Penuh selalu memiliki setiap izin. Pengaturan memutuskan tab mana yang orang lihat, jadi berikan seperangkat sempit yang memungkinkan mereka bekerja.

Kelisenan

Menunjukkan SIM anda saat ini, apa yang berhak anda dan status anda.

Penyiapan Cron

Self-host hanya memasang. Pada OpsIQ awan tugas yang dijadwalkan dijalankan untuk Anda dan tab disembunyikan. Satu baris dari drive crontab setiap tugas yang terjadwal: tiket otomatis balas, eskalasi routing, exchange- rate refresh, kotak surat polling dan connector sync.

1
Salin baris

Tab ini menunjukkan baris crontab yang tepat bagi server Anda dengan biner PHP yang telah dipilih.

2
Tambahkan ke crontab

Jalankan crontab -e sebagai pengguna yang menjalankan PHP dan tempelkan baris tunggal. Pada cPanel lebih baik gunakan perangkat Cron Jobs.

3
Verifikasi

Dalam satu menit, naiknya berdetak, gunakan Run sekarang untuk menguji secepatnya, daripada menunggu.

Panel detak jantung menunjukkan run terakhir, durasi dan apa yang diproses bagi kedua antrian auto- jawaban dan jajak pendapat email dan konektor. Ini memperingatkan ketika run terakhir datang dari tombol web manual daripada cron server nyata, dan ketika sebuah detak jantung telah basi.

Zona Bahaya

Hapus Data Pelacakan Semua

Menyapu segalanya OpsIQ mengumpulkan atau dihasilkan. Anda menandai apa yang termasuk dan mengetikkan frasa konfirmasi tepat. Pengaturan dan konfigurasi situs, memblokir alamat, semua yang ditulis oleh tim Anda (pengetahuan dasar, FAQ, terjemahan, desain portal, definisi aksi) dan penerimaan persetujuan semuanya terjaga.

Pemurnian Data Daripada

Sapu yang sama terbatas pada catatan lebih tua dari 30, 60, 90 atau 180 hari, atau setahun. untuk retensi bergulir otomatis menggunakan nilai penahanan dalam Jenderal dan Pelacakan sebagai gantinya dan biarkan tugas yang dijadwalkan melakukannya.

🚫
Ekspor backup dari Pengaturan, Jenderal sebelum menggunakan apapun di Zona Bahaya. Aksi ini tidak dapat dibatalkan.
Pengaturan

Mengelola tim Anda

Undang anggota tim dan menetapkan peran untuk mengendalikan siapa yang dapat mengakses apa.

Tim
Bagian timLayar tim: sebuah tabel admin dengan kontak, lencana peran (Pemilik, Admin penuh, Agen) dan departemen masing-masing dapat mengakses.Bagian timarea kerjaBagian tim+ Simpan pengguna adminKONAKTPERANDEPARTEMENAO[email protected]Ada OwsuPemilikSemuaKM[email protected]Kojo MensahAdmin PenuhSemuaRT[email protected]Rita TettehAgenTagihanSB[email protected]AgenDukungan1TEAMUndang & mengelola admin2ROLESPemilik · Admin Penuh · Agen3SCOPEDAkses per- departemen
Layar tim yang sebenarnya: setiap admin dengan kontak mereka, peran dan departemen mereka dapat mencapai, agen scoped, pemilik penuh.

Peran

Pemilik

Akses penuh termasuk lisensi, tagihan, dan zona bahaya.

Admin Penuh

Akses penuh kecuali zona berbahaya, bisa mengelola admin.

Agen

Terbatas pada departemen yang ditugaskan, tiket, obrolan, dan analisis saja.

Mengundang anggota tim

1
Pergi ke Tim

Navigasi ke Tim di sisi bar.

2
Klik Undang

Masukkan email anggota tim.

3
Atur peran

Pilih Pemilik, Admin penuh, atau Agen.

4
Atur departemen

Bagi Agen, pilih departemen akses.

5
Kirim undangan

Mereka menerima email dengan link setup.

Pengaturan

Penampilan tim

Cara tim dukungan Anda tampil. Akses adalah dengan izin, bukan karena peran: ijin tampilan membuka halaman, ijin pengelolaan membuka target, QA dan McGue-mengidentifikasi membaca, dan reward- hak keuangan adalah apa menambahkan tab Rewards. Petunjuk tim dapat diberikan salah satu dari ini tanpa menjadi administrator penuh.

Penampilan tim
Penampilan timLayar kerja tim: agen-agen peringkat oleh sebuah bar skor komposit, CSAT dan saldo hadiah dengan tombol Pay per baris.Penampilan timarea kerjaPenampilan timAGENSkorCSATSAKIRANRTRita Tetteh4.8$42BayarSBSam Boateng4.5$28BayarKMKojo Mensah4.2$15BayarAOAda Owsu4.9$51Bayar1SCOREDPenampilan komposit2CSAT & LOADRating + volume3REWARDSMembayar jaminan agen
Layar kerja yang sebenarnya: setiap agen mencetak nilai pada volume dan CSAT, dengan saldo hadiah Anda dapat membayar per baris.

Bagaimana halaman terorganisasi

Performance Team adalah lima tab, setiap jawaban pertanyaan yang berbeda, dan mereka diperintahkan oleh bagaimana mendesak mereka biasanya membutuhkanmu.

01 Pusat Perintah

Kondisi antrian langsung, hasil pelanggan terhadap target Anda, bagaimana kapasitas dihabiskan, situasi membutuhkan keputusan, dan bukti-disesuaikan indeks per- rekan.

02 Teman setim

Papan peringkat, pengakuan (paling baik dan garis-garis), pencarian, dan pilihan yang memegang kendali bagi siapa yang dapat melihat rangkanya.

Kualitas 03

Skor, evaluasi direkam, perubahan... Perjanjian pengubah yang dikoreksi, penyimpangan peninjau, dan bukti sengketa.

04Rewards

Nilai Token, klaim pembayaran, dan alokasi periode yang diatur: otorisasi langit-langit didanai, meninjau pratilik, finalise.

Sejarah 05

Bagaimana ruang kerja telah berpindah dari waktu: metrik tren dengan bagan, dan 28 Setiap kartu tersembunyi sampai ada cukup sejarah untuk menggambarnya.

Tak dapat cetak bukan nol

Sebuah rekan tim tanpa cukup ditangani volume - atau yang dimensi membawa bukti menambahkan ke kurang dari setengah berat yang dikonfigurasi - ditampilkan sebagai Unscords. Nilai mereka, peringkat dan band kosong dan rincian mereka disembunyikan. Ini adalah disengaja: render sebuah ukuran absen sebagai nol menempatkan seseorang di bagian bawah peringkat untuk memiliki minggu yang tenang.

Dua batas bukti tidak mempengaruhi nilai: itu memutuskan penghargaan dan penghargaan jadi rekan satu tim dapat sepenuhnya mencetak dan peringkat dan masih tidak bisa diterima untuk periode itu karena terlalu sedikit pelanggan menilai mereka.

💡
Setiap angka yang diskotip ke area kerja yang Anda lihat dan rentang waktu yang Anda pilih. Seorang rekan kerja bekerja di dua ruang kerja terpisah memiliki catatan independen di masing-masing. Dua pengecualian layak diketahui: sebuah situs GROUP adalah satu area kerja, sehingga domain anggotanya diukur bersama-sama; dan All-situs melihat secara sengaja mengukur segala sesuatu sekaligus.

Indeks kinerja

Komposit dari lima dimensi, masing-masing diukur terhadap target yang Anda tetapkan daripada terhadap rekan, kemudian menarik ke tengah ketika bukti di balik tipis. Perhatikan arah: penyesuaian bergerak ke arah 70, jadi skor yang sangat tipis ditarik ke bawah dan skor yang buruk ditarik ke atas minggu pertama yang buruk pada empat percakapan bukan keputusan diselesaikan baik sebagai bukti mengumpulkan angka disesuaikan konverges pada mentah.

Kualitas

Kepuasan pelanggan dari umpan balik yang diverifikasi. Didukung oleh hasil scorecard QA dimana mereka ada dan diatur.

Tanggung jawab

Respon pertama di P50 dan P90%, melawan targetmu.

Resolusi

Waktu resolusi dan satu sentuhan tingkat resolusi.

SLA

Penangguhan terhadap SLA yang kau konfigurasi, ditambah dengan resiko dan jumlah pelanggaran.

Pramugari

Membuka kembali dan mentransfer tingkat - pekerjaan yang datang kembali.

💡
Weight are configurable and relative; they don 't have to total 100 Bukti hilang hanya dapat menurunkan indeks, tidak pernah menaikkan itu - seluruh dikonfigurasi berat tetap di penyebut.

Kapasitas dan waktu produktif

Pekerjaan, waktu produktif, dipecahkan per jam produktif dan berbagi online dari jendela. Utilisasi sengaja tidak dilaporkan: dibutuhkan jadwal jam sebagai penyebut,OpsIQ tidak memiliki daftar atau sumber shift, dan pengganti denominator akan menebak memakai tanda persentasi. ini dibaca sebagai tersedia dengan alasan yang terpasang.

⚠️
Pelaporan saja, Pekerjaan mengatakan bagaimana waktu dihabiskan, tidak pernah seberapa baik itu dihabiskan, dan tidak pernah dana, gerbang atau ukuran pembayaran.

Jaminan kualitas

Sebuah angka skor adalah peninjau rubric mencetak gol nyata percakapan melawan.

Perjanjian Pembalas

Dilaporkan sebagai perubahan statistik yang dikoreksi (Cohen dan Fleiss 'kappa), bukan persentase perjanjian mentah.100% waktu saat tidak membawa informasi.

Pengalihan drift

Apakah skor peninjau secara sistematis lebih sulit atau lebih lembut daripada rekan mereka dalam percakapan yang sama - perbandingan terhadap seluruh panel, bukan tren dari waktu ke waktu. ini membutuhkan interaksi yang ditinjau secara independen lebih dari sekali.

Buang

Seorang rekan tim secara resmi bisa membantah bukti yang direkam tentang mereka.

Ulasan self-content

Seorang rekan tim tidak bisa menyerahkan evaluasi diri mereka sendiri.

⚠️
Evaluasi yang dinilai tinggi tidak dapat mempengaruhi membayar sampai kalibrasi diterbitkan menunjukkan model tersebut setuju dengan pemirunya cukup dekat, diukur oleh kappa terhadap sampel minimum.

Pengakuan

Berranking sendiri telah mendokumentasikan mode kegagalan: game metrik, burnout, dan publik mempermalukan siapa pun yang terakhir. Tiga alternatif duduk di sampingnya.

Paling ditingkatkan

Diukur terhadap rekan satu tim sendiri sebelumnya catatan, tidak pernah melawan rekan, dengan penyusutan sehingga denominator kecil tidak dapat membeli menang.

Garis

Pertemuan periode menetap, yang dinyatakan standar - peringkat rata-rata, volume ditangani, jumlah rating dan negatif umpan balik, semua angka absolut.

Pilihan-dalam peringkat

Secara baku, rekan kerja selalu melihat indeks mereka sendiri, apakah mereka melihat kolega adalah keputusan area kerja.

💡
Pengakuan tidak pernah menyentuh uang. dan yang paling ditingkatkan bukanlah kategori penghargaan.

Pencarian

Target tim bekerja ke arah, diukur terhadap bar tetap dinyatakan bukan terhadap satu sama lain - sehingga setiap orang dapat membersihkan pencarian yang sama dalam periode yang sama.

Scope dan irama

Masing-masing atau tim; satu - off, berulang, atau musiman dengan jendela eksplisit.

Kriteria

Percakapan ditangani, peringkat diterima, hari aktif, rata-rata rating, atau tingkat umpan balik negatif.

Penjaga kualitas

Diperlukan setiap pencarian dengan target volume. Menonjok nomor sementara kualitas jatuh di bawah lantai menahan pencarian daripada menyelesaikannya, dan itu ditampilkan sebagai ditahan, tidak belum selesai.

Batas ulang

Sebuah topi per- periode, didorong oleh kriteria paling lambat, ditambah sebuah pilihan cooldown sebelum mengulang dapat menghitung.

Pencarian tim

Kemajuan bersama tanpa rekan kerja yang diterbitkan, jadi pencarian tim tidak bisa menjadi leaderboard.

Sesi pengalengan

Sesi pelatihan adalah sebuah rekaman, bukan obrolan, tapi memiliki pelatih, rekan satu tim yang dilatih, jadwal waktu, setuju untuk berbicara poin, dan ringkasan yang ditulis sesudahnya.

Titik pembicaraan

Setuju sebelum sesi, jadi rekan tim tidak masuk dalam kejutan.

Bukti yang dipinned

Percakapan, tiket dan evaluasi QA melekat pada sesi. Sebuah pin menyimpan referensi - sebuah tipe dan id - bukan salinan, jadi itu selalu menunjuk pada catatan hidup. OpsIQ tidak memverifikasi id sebelum menerimanya.

Butir aksi

Masing-masing dengan pemilik dan tanggal jatuh tempo. Suatu item yang melewati tanggal ditampilkan sebagai terlambat - sebuah keadaan diturunkan, bukan status seseorang harus ingat untuk ditetapkan.

Catatan pribadi

catatan pelatih sendiri teman tim yang dilatih tidak pernah bisa membacanya tidak sebagai agen, bukan sebagai manajer, bukan pemilik cek itu berjalan sebelum setiap ijin lain dan tidak dapat overridden.

Siapa yang bisa melihat sesi

Pelatih, rekan satu tim, dan siapapun yang punya izin untuk bekerja tim tidak ada orang lain termasuk rekan setim lainnya di departemen yang sama

Audit

Setiap pembuatan, perbarui, pin, unpin dan penyelesaian dicatat dengan apa yang berubah, oleh siapa.

💡
Pemandian sengaja terpisah dari mencetak dan uang. Sebuah sesi tidak mengubah indeks siapa pun, tidak gerbang hadiah, dan tidak muncul di papan peringkat.

Rewards dan penghargaan

Aktivitas rekaman berubah menjadi token dengan nilai tunai yang Anda set. Jalan untuk pembayaran sengaja lambat dan setiap langkah dicatat.

1
Menentukan nilai token

Berapa banyak token yang sama dengan berapa banyak uang, dan apa setiap aktivitas bernilai.

2
Otorisasi langit-langit yang didanai

Untuk periode kalender tertutup, administrator menyatakan token maksimum yang mungkin dibayar. Menyimpan bentuk pengaturan tidak otorisasi anggaran, dan tidak dapat mengubah langit-langit yang telah diizinkan.

3
Tinjau pratinjau

Penerima, cadangan, dan alasan siapa pun tidak dapat dibaca.

4
Selesai

Alokasi direkam secara permanen dengan bukti di belakangnya.OpsIQ menulis masukan kompensasi terhadap setiap dompet dan tidak pernah menghapus yang asli, sehingga buku itu masih menunjukkan apa yang terjadi dan mengapa, dan hanya kemudian adalah periode dirilis pembalikan menolak jika ada yang telah menguangkan lebih dari jumlah yang pulih, dan nama siapa dan oleh berapa banyak.

⚠️
Eligibilitas membutuhkan umpan balik pelanggan yang telah diverifikasi. Nilai kualitas AI mungkin suplemen bahwa penilaian tetapi tidak pernah menggantinya, dan rekan satu tim yang ditampilkan sebagai Unscore tidak memenuhi syarat 25% di atas share mereka diharapkan dari periode, sehingga satu bulan yang sangat tinggi-volume tidak dapat menyerap seluruh anggaran.
💡
Pemilik rekening tidak mengambil bagian dalam penghargaan atau hadiah token, dengan tidak ada switch: mereka otorisasi langit-langit didanai dan finalise setiap alokasi, dan tidak ada di atas mereka untuk menyetujui apa yang akan mereka bayar sendiri. pekerjaan mereka diukur, dinilai dan peringkat di papan persis seperti orang lain.

Semua orang mengambil bagian secara baku, tim memimpin dan pemilik ko-. Untuk meninggalkan seseorang keluar, membuka mereka di Tim & Departemen dan mematikan bagian Membawa dalam pilihan penghargaan dan hadiah. Pekerjaan mereka masih mencetak dan menunjukkan; mereka berhenti menjadi kandidat dari titik itu, dan tidak ada yang sudah diselesaikan disentuh.

⚠️
Tidak ada yang menyetujui uang untuk diri mereka sendiri.OpsIQ Mengurangi pembayaran atau kredit ke dalam dompet Anda sendiri, membayar klaim Anda, menyelesaikan periode di mana Anda akan dibayar, dan finalising penghargaan yang akan Anda menangkan, administrator penuh lainnya atau pemilik harus melakukannya.

Siapa yang bisa melihat dan melakukan apa

Tampilan kinerja tim

Dewan, negara, kapasitas dan kualitas untuk ruang kerja.

Atur kinerja tim

Target dan skor, ekspor, QA angka-angka dan evaluasi, pelatih, pencarian, dan tulisan yang membawa morgue- mengidentifikasi data seperti sejarah yang peradmin dan riwayat penghargaan.

Lihat keuangan tim

Balance, nilai tunai, catatan klaim dan referensi pembayaran - dipisahkan dari bukti kinerja karena itu adalah payroll- berdekatan.

Hanya administrator penuh

Setiap mutasi uang: membayar, membayar atau menolak klaim, menetapkan anggaran, menyelesaikan, membatalkan, membatalkan atau membalikkan alokasi, dan mengatur tingkat token-to-cash.

Menggunakan dengan adil

Indeks kinerja adalah bukti manajemen, bukan keputusan pekerjaan otomatis. Buka percakapan sumber di balik nomor sebelum menindaklanjutinya, dan menimbang kerumitan kasus, jadwal, tinggalkan dan aksesibilitas kebutuhan. Minggu yang sulit pun tidak terlihat seperti pola berkelanjutan.

Pengaturan

Situs Anda (area kerja)

Situs (area kerja) memungkinkan anda mengelola beberapa situs web dari satu instalasi OpsIQ. Masing-masing memiliki pelacakan sendiri, AI, konektor, dan akses tim.

Situs
Situs AndaSitus layar: daftar area kerja, masing-masing dengan domain, tipe, konektor, status lencana dan tombol terbuka, ditambah situs Add-new-.Situs Andaarea kerjaSitus Anda+ Tambah situs baruSshop.acme.comeCommerce Shopify konektorAktifBukaHhost.acme.comMengundang WHMCS konektorAktifBukaBblog.acme.comKontenPenyiapanBuka1MULTI-SITESatu area kerja per situs2ISOLATEDData tidak pernah bercampur3PER-SITEPengaturan sendiri & konektor
Layar layar sesungguhnya: setiap situs adalah area kerja terisolasi sendiri (domain, konektor, dan pengaturan), ditambahkan dan dibuka dari satu daftar.

Membuat situs

1
Pergi ke Situs Terhubung

Navigasi ke Situs Terhubung.

2
Tambah situs baru

Masukkan nama, domain, dan deskripsi.

3
Salin kunci situs

Setiap situs mendapat kunci unik (site_xxx) untuk snippet widget.

4
Atur secara independen

Setiap situs memiliki AI sendiri, konektor, dan pengaturan.

Berapa banyak situs yang bisa saya miliki?+

Tergantung rencana SIM-mu, periksa rincian SIM-nya.

Pengaturan

Lisensi dan rencana

OpsIQ lisensi Anda mengontrol fitur, batas situs, dan saldo kredit AI.

Lisensi
Pusat LisensiThe OpsIQ License Center: rencana, status aktif lencana, kunci lisensi bertopeng, all- kredit meter, dan Force- remote-check button.Pusat Lisensiarea kerjaOpsIQ Pusat LisensiRencanaBisnisStatusAktifKunciOPSIQ-••••-••••-2F9CKredit AI$68 kiriPeriksa paksa remote1PLAN & STATUSAktif, sekilas2KEYHMAC- cached lokal3CREDITSSaldo AI & batas
Pusat Lisensi yang sebenarnya: Anda berencana dan status aktif, kunci bertopeng, saldo kredit Anda, dan satu klik gaya re- verifikasi.
Kunci Lisensi

Masukkan dalam Lisensi Pengaturan >. Validasi terhadap server lisensi OpsIQ.

Detak jantung / validasi Lisensi

OpsIQ secara normal membaca cache lisensi lokal yang ditandatangani dan menyegarkan validasi ketika dibutuhkan. Gunakan Pemeriksaan jarak jauh Force ketika Anda membutuhkan hasil langsung; Diagnostik mengidentifikasi DNS, HTTPS atau server- masalah waktu.

Rencana

Menentukan fitur ketersediaan dan batas.

Batas tempat

Jumlah maksimum ruang kerja.

Kredit AI

Jika menggunakan AI Managed, saldo kredit Anda ditampilkan di sini.

Kedaluwarsa

Renew sebelum kadaluarsa untuk menghindari gangguan layanan.

Apa yang terjadi ketika lisensi saya berakhir?+

Pelacakan, tiket, dan CRM dilanjutkan. Fitur AI jeda sampai pembaharuan. Data dipertahankan.

Pengaturan

Otentikasi profil, sandi dan dua faktor

Setiap administrator dapat mempertahankan identitas mereka sendiri, preferensi kerja, kata sandi dan dua-faktor otentikasi.

Layar produk
Profil sayaHalaman profil ini memisahkan rincian pribadi, zona bahasa / waktu, avatar / tanda tangan, kata sandi dan dua-faktor otentikasi.Profil sayaarea kerjaBERKAS PROFILLengkapTIMEZONEEropa / Athena2FADiaktifkanHIDUP WORKSPACE VIEWNama dan surelIdentitas pribadiSuntingBahasa dan zona waktuTanggal dan antarmukaSuntingAvatar dan tanda tanganBalasan dan kehadiran timSuntingSandi dan 2FAPerlindungan akunAman1UPDATE PROFILEIdentitas dan lokal2SECURE LOGINSandi dan 2FA3SAVETerapkan ke admin ini
Halaman profil ini memisahkan rincian pribadi, zona bahasa / waktu, avatar / tanda tangan, kata sandi dan dua-faktor otentikasi.

Pengaturan profil milik dari penandatangan dalam administrator dan jangan ubah branding area kerja. Gunakan kata sandi unik dan aktifkan otentikasi dua faktor. Mengubah surel atau konfigurasi otentikasi mungkin memerlukan verifikasi ulang atau tanda masuk baru.

Pengaturan

preferensi notifikasi

Pemberitahuan preferensi kontrol yang acara operasional mencapai administrator dalam produk atau melalui email.

Layar produk
preferensi notifikasiHalaman pemberitahuan menyediakan perevent in- app dan pilihan email ditambah daftar notifikasi baru-baru ini.preferensi notifikasiarea kerjaIN-APPHidupSULAHANSelentifUNREAD4HIDUP WORKSPACE VIEWTiket ditugaskanIn- app dan emailHidupPelanggan menjawabIn- appHidupSLA RisikoIn- app dan emailHidupPersetujuan AIIn- app dan emailHidup1CHOOSE EVENTSHanya sinyal berguna2CHOOSE CHANNELIn- app atau email3TinjauanPemberitahuan baru-baru ini
Halaman pemberitahuan menyediakan perevent in- app dan pilihan email ditambah daftar notifikasi baru-baru ini.

Pengaturan tiket sampul Preferensi, balasan pelanggan, peringatan SLA, hasil obrolan dan acara persetujuan AI. Aktifkan sinyal operasional mendesak di suatu tempat; mematikan email tidak selalu mematikan pemberitahuan dalam app.

Pengaturan

Tampilan keamanan

The Security Overview adalah layar pertama untuk menilai blok, serangan login, sesi ancaman, kecenderungan keamanan dan integritas acara.

Layar produk
Tampilan keamananKeamanan Overview menggabungkan kartu risiko saat ini, sebuah 14-day trend, daftar penyerang, feed acara dan status integritas.Tampilan keamananarea kerjaACTIVE BLOCKS18FAILED LOGINS42HIGH THREAT3HIDUP WORKSPACE VIEWOtomatis diblokir7-hari total dan sumberTrendPenyerang terbaruIP, negara dan alasanUlasanPeristiwa keamananHasil resiko dan aksiFeedIntegritas rantai HashRantai peristiwa yang sangat jelasBerlaku1READ HEADLINEPaparan kini2OPEN EVIDENCEPenyerang dan kejadian3AKTIFBlock, menyelidiki, ekspor
Keamanan Overview menggabungkan kartu risiko saat ini, sebuah 14-day trend, daftar penyerang, feed acara dan status integritas.

Gunakan kartu judul untuk triase, kemudian buka Audit terkait, Log Masuk Gagal, Diblokir IPs atau JavaScript Halaman galat untuk pekerjaan tingkat rekaman. 14-day trend lebih berguna daripada satu lonjakan tunggal. High-sesi ancaman harus diselidiki terhadap pengunjung, permintaan dan bukti otentikasi sebelum blok permanen diterapkan.

Pengaturan

Log audit yang sudah jelas

Catatan log audit yang melakukan apa, kapan, pada objek mana, pada tingkat risiko apa dan apakah berhasil.

Layar produk
Audit AktivitasHalaman audit menyediakan aktivitas yang dapat dicari dengan aksi, aktor, risiko, target dan hasil.Audit Aktivitasarea kerjaPERISTIWA18.2kHIGH RISK21INTEGRITYBerlakuHIDUP WORKSPACE VIEWKonektor diaktifkan[email protected] · ShopifySuksesAPI kunci dicabut[email protected] kunci 19SuksesPengaturan berubah[email protected]SuksesIzin ditolak[email protected]Diblokir1FILTERAksi, risiko dan aktor2INSPECTTarget dan hasil3EXPORTCSV atau JSON
Halaman audit menyediakan aktivitas yang dapat dicari dengan aksi, aktor, risiko, target dan hasil.

Filter oleh aksi, resiko dan aktor; ekspor CSV atau JSON untuk sebuah penyelidikan. Rantai hash membantu mendeteksi baris audit yang hilang atau diubah, tetapi tidak menggantikan backup terproteksi dan akses basis data terbatas. Perlakukan ekspor audit sebagai sensitif karena mereka dapat mengidentifikasi pengguna, catatan, dan aksi keamanan.

Operasi

Diagnostik

Diagnostik mengubah pemeriksaan subsistem menjadi hasil kesehatan yang menyedihkan dan tindakan selanjutnya.

Layar produk
DiagnostikPemeriksaan kesehatan kelompok diagnosa untuk widget, AI, tiket, integrasi, Intelijen Site, tugas latar belakang, otomatisasi CRM, lisensi dan penyimpanan.Diagnostikarea kerjaSEHAT13WARNING2GAGAL1HIDUP WORKSPACE VIEWEdoBeacon dan titik akhir obrolanSehatTugas latar belakangCron detak jantung terlambatPeringatanSurelUji keluar gagalGagalKonektorPenambahan dan daftar acaraSehat1REFRESHJalankan pemeriksaan saat ini2OPEN WARNINGBaca bukti3FIX AND RETESTKonfirmasi pemulihan
Pemeriksaan kesehatan kelompok diagnosa untuk widget, AI, tiket, integrasi, Intelijen Site, tugas latar belakang, otomatisasi CRM, lisensi dan penyimpanan.

Halaman ini memeriksa Site Speed, pangkat / keyword / backlink / data lokal, AI dan gateway, tiket, crawler / audit, integrasi / event asures, tugas latar belakang, otomatisasi CRM, lisensi, widget dan layanan produk terkait. Ini sengaja melaporkan operasi-penyebab yang dapat dibaca daripada mengekspos rahasia mentah.

Setelah perubahan, Segarkan dan konfirmasi subsistem yang terpengaruh kembali sehat. Halaman diagnosis hijau diperlukan tetapi tidak cukup untuk peluncuran; selesaikan daftar pemeriksaan sebelum peluncuran juga.

Pengaturan

Keamanan dan akses

OpsIQ termasuk beberapa lapisan keamanan untuk melindungi admin, data, dan API Akses.

Bagaimana cara kerjanya
Keamanan dan aksesSebuah perisai keamanan di samping kendali yang diaktifkan: dua-faktor, OIDC SSO, SCIM 2.0, OAuth2 PKCE, CSRF/CSP IP Firewall, batas kecepatan dan sebuah lemari rahasia.Dua-faktor (TOTP)SSO OIDCSCIM 2.0OAuth2 PKCECSRF + CSPFirewall IPBatas rateBrankas rahasia
Keamanan

Fitur keamanan

Otentikasi admin

Email / password dengan opsional 2FA.

Kunci login

Sementara mengunci setelah terlalu banyak upaya gagal.

IP memblokir

Blok IPs atau CIDR berkisar dari akses situs dilacak.

Penilaian Ancaman

Berdasarkan angka ancaman pengunjung dengan jumlah yang tinggi bisa di blok otomatis.

Tegak HTTPS

Diperlukan untuk semua koneksi. HTTP mengarahkan kembali ke HTTPS.

Header HSTS

Transport-Strik- Keamanan mencegah serangan kelas bawah.

Perlindungan CSRF

Semua formulir admin termasuk CSRF token.

Perlindungan XSS

Semua masukan pengguna telah lolos. header CSP membatasi eksekusi skrip.

Perlindungan SSRF

Blog webhooks terluar pribadi / internal IP alamat.

Pengaturan direkomendasikan

1
Aktifkan 2FA

Untuk semua rekening admin.

2
Sandi yang kuat

Karakter minimal 12, dicampur.

3
Review akun

Hapus akses untuk mantan anggota tim.

4
Monitor gagal log masuk

Periksa setiap minggu pola mencurigakan.

5
Terus diperbarui

Terapkan pemutakhiran segera untuk patch keamanan.

Pengaturan

Peran dan perizinan

Role- Berdasarkan Akses Kontrol memungkinkan Anda mengontrol apa yang setiap anggota tim dapat lakukan.

Perputaran & ijin
Peran dan perizinanSebuah matriks dengan aturan: Pemilik memiliki segalanya; Admin Penuh kekurangan tagihan dan zona bahaya; Agen hanya memiliki tiket scoped.Perputaran & ijinarea kerjaATASBILLINGBahayaTIKETSPemilikAdmin PenuhAgenscoped13 ROLESPemilik · Admin Penuh · Agen2GRANULARPer-page + per-departemen3DEFAULT-DENYRute yang terlupakan diblokir
Matrix peran sekilas: pemilik mendapatkan segalanya, Full Admin segalanya tetapi menagih dan bahaya zona, Agen hanya tiket scoped mereka.

Peran bawaan

Pemilik

Semuanya termasuk lisensi, zona bahaya, dan manajemen instalasi.

Admin Penuh

Semuanya kecuali lisensi dan zona bahaya, bisa mengatur tim.

Agen

Jawab untuk menanda tangani tiket departemen dan obrolan, lihat analisis.

Dapatkah saya membuat peran kustom?+

Tidak saat ini. 3 built-in peran plus tugas departemen memberikan kontrol granular.

Pengaturan

Diblokir IPs

Kelola IP alamat diblokir dari mengakses situs dilacak Anda.

Diblokir IPs
Diblokir IPsTerblok itu...IPs layar: block- an-IP/ CIDR bentuk di samping tabel Alamat Blocked dengan setiap entri, tanggal, alasan dan tombol Unblock.Diblokir IPsarea kerjaBlokir sebuah IP / CIDR203.0.113.0/24Alasan (opsional)BlokAlamat yang diblokir203.0.113.9Jun 12 kekuatan brutalBuka Blok45.12.0.0/16Jun 10Buka Blok102.89.6.2Jun 9Buka Blok1BLOKIP atau CDR jangkauan2LISTSiapa yang & kapan, dengan alasan3UNBLOCKSatu klik
Yang nyata Diblokir IPs layar: blok satu IPatau kisaran CIDR, dan mengelola daftar, masing-masing dengan tanggal, alasan dan satu - klik unblock.

Cara memblokir

1
Pergi ke Keamanan > Blocked IPs

2
Tambahkan sebuah jangkauan IP atau CIDR

Contoh: 203.0.113.42 atau 203.0.113.0/24

3
Tambah alasan

Dokumen mengapa: spam, penyalahgunaan, menggores, dll.

Apakah memblokir mempengaruhi pengguna yang sah?+

Jika pelanggan berbagi perusahaan IP atau VPN, memblokirnya IP Hadang semua orang di atasnya Gunakan blok sempit.

Pengaturan

Gagal log masuk

Semua percobaan log masuk yang tidak sukses ke admin OpsIQ Anda.

Gagal log masuk
Gagal log masukLayar failed- log masuk: tabel akun /IPs dengan jumlah kegagalan, waktu percobaan terakhir, dan tombol Blok per baris.Gagal log masukarea kerjaGagal mencoba log masukAKUNTANSI / IPGAGALTERAKHIRAKSI[email protected] · 41.62.10.472m yang laluBlok[email protected] · 102.89.6.2318m yang laluBloktidak diketahui 45.12.9.71226m yang laluBlok[email protected] · 88.21.4.921h yang laluBlok1WATCHGagal mencoba log masuk2COUNTSPer akun / IP3AKTIFBlok dari baris
Layar log masuk yang Gagal sebenarnya: setiap akun /IP dengan jumlah kegagalan dan upaya terakhir, memblokir sumber brute- gaya langsung dari baris.

Apa yang menunjukkan setiap entri

Tanggal / waktu

Ketika percobaan itu terjadi.

Surel

Alamat surel yang dipakai.

IP alamat

Sumber dari percobaan.

Negara

Lokasi geografis.

Alasan

Sandi salah, terkunci, atau tak ditemukan.

Tanda-tanda peringatan

Banyak upaya, email yang sama

Tebakan kata sandi. Pastikan 2FA diaktifkan.

Banyak upaya, email yang berbeda

Serangan otomatis, blok sumber IP.

Negara-negara yang tidak biasa

Jika tim Anda lokal, upaya asing kemungkinan serangan.

Pengaturan

Analis keamanan AI

Sebuah lapisan analis di atas halaman keamanan: keputusan, laporan insiden, makanan sehari-hari, cek postur mingguan, Tanyakan Keamanan, dan 0- Tidak pernah berjalan di jalur permintaan pengunjung.

Setiap halaman keamanan mencatat apa yang terjadi, tapi membacanya masih perlu keputusan. Analis keamanan AI menambahkan penilaian itu di tempatnya, dan ini dibangun untuk menghabiskan hampir tidak ada: tidak pernah duduk di jalur mercusuar atau login, aturan deterministik menyelesaikan kasus yang jelas dengan tidak ada panggilan AI, kata kerja yang cache, dan keluaran terbaik analis adalah aturan desinimis yang kemudian memaksa selamanya pada nol token. Nyalakan fitur dalam Pengaturan keamanan →; semua default off.

Apa yang menambahkan

Verdect chips + Explain

Diblokir IPs dan baris Login Gagal menampilkan halus / curiga / bermusuhan chip dengan skor kepercayaan diri. Jelaskan membuka penalaran, fakta yang digunakan, dan satu- klik Block / Rilis aksi. Cache 24h, jadi kembali-melihat sebuah IPgratis.

Laporan insiden

Terkait kejadian cluster ke dalam satu insiden (gelombang login, URL Pemindaian, ledakan blok otomatis dengan garis waktu Inggris dan satu langkah direkomendasikan selanjutnya serangan akan dilipat ke dalam insiden yang sama

Digest harian

Satu rekap per hari: kemarin versus dasar Anda, blok, insiden, dan hal tunggal yang harus dilakukan.

Pemeriksaan postur minggu

Sebuah daftar cek yang hardening Senin (kesenjangan 2FA, batas penguncian versus volume serangan nyata, waspada) dengan tingkat keparahan, usaha dan perbaikan tepat per item.

Tanya Keamanan

Sebuah kotak pertanyaan di Keamanan Overview yang menjawab dari negara keamanan Anda yang hidup.

Proposal politik + autopilot

Analis mengusulkan aturan blok beton sebagai Kartu Approve / Dismiss; aturan yang disetujui berlaku pada nol token dengan kontra hit hidup. Pilot otomatis opsional menyetujui hanya aturan paling aman secara otomatis.

Pengaturan

Analis keamanan AI (security_ai_enabled)

Master Switch, Mengaktifkan chip vonis, Jelaskan, dan Tanyakan Keamanan, hanya ambigu IPs mencapai model, batched menjadi satu panggilan.

Laporan Insiden (security_ai_incidents)

Cluster kejadian ke dalam insiden dan menulis setiap cerita baru. berlari pada cron keamanan yang sudah per jam.

Harian digest (security_ai_digest)

Satu rekap keamanan per hari di Bell dan Overview.

Pemeriksaan postur mingguan (security_ai_posture)

Senin hardening checklist di Overview. Daftar cek sepenuhnya deterministik.

Autopilot kebijakan (security_ai_autopilot)

Memungkinkan analis mengaktifkan proposal paling aman tanpa pengawasan: reversibel waktu - blok hanya terbatas, tunggal IPs atau jangkauan tidak lebih lebar dari /24, tidak pernah berbagi / mobile / private, capped 10 per jam, selalu diaudit dan tidak bisa dilakukan.

💡
Setiap panggilan ditandai security_ai dengan topi bulanan sendiri dalam Konfigurasi AI → Biaya Guardrails (token 300k baku). Jika tutup dipukul, fitur deterministik akan dibaca. Blocking, lockout dan peringatan tidak pernah bergantung pada anggaran ini. Analis tidak pernah dapat menghapus data, perubahan pengaturan, sentuh buku audit, atau buat larangan permanen.
Operasi

Pemotongan dan otomatisCron

OpsIQ menggunakan satu penjadwalan produk untuk menjalankan sureling polling, tiket otomatisasi, analisis rollup, retention, AI queues, CRM bekerja, laporan dan pekerjaan konektor.

Layar produk
Pemotongan dan otomatisCronSatu produk cron masuk memasok detak jantung; OpsIQ memutuskan pekerjaan internal mana yang harus dilakukan.Pemotongan dan otomatisCronserverDETAK JANGANSetiap menitRUNNERcron/all.phpHEALTHPengaturanHIDUP WORKSPACE VIEWPelari produk unifiedopsiq/cron/all.phpDiperlukanTiket dan antrian emailPekerjaan yang dijadwalkan singkatAktifAnalitik dan retensiKadensi internalDijadwalkanPengguna KonektorEdisi yang telah di deklarasiDicampur1INSTALL ONE LINEJalankan penjadwalan produk setiap menit2CHECK CRON SETUPKonfirmasi detak jantung CLI3USE DIAGNOSTICSMenyelidiki akhir atau gagal bekerja
Satu produk cron masuk memasok detak jantung; OpsIQ memutuskan pekerjaan internal mana yang harus dilakukan.

Entri cron produk yang diperlukan

Tambahkan satu baris ke crontab untuk server yang sama dan lingkungan PHP yang berjalan OpsIQ:

OpsIQ masukan crontab produk
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1

Ganti /path/to/opsiq dengan akar instalasi. Gunakan jalur PHP CRI penuh ketika host membutuhkan satu, misalnya /usr/bin/php8.4.

Jangan gunakan level atas /cron.php untuk pekerjaan produk. Dalam repositori ini yang pelari milik layanan produk non-terpisah di luar buku panduan ini. Lintasan OpsIQ pengelola produk adalah opsiq/cron/all.php.

Apa yang dikombinasikan penjadwalan drive

Tiket dan antrian AI

Proses karena auto- balas budi, eskalasi, persetujuan dan pekerjaan produk antri lainnya.

Surel yang dalam

Polling yang dikonfigurasi kotak surat dimana polling adalah metode masukan yang dipilih.

Analitik dan sesi

Merakit sesi dan penyegaran agregat dijadwalkan ketika mereka jatuh tempo.

CRM dan keterlibatan

Berjalan mencetak angka, lifecycle, alur kerja, kampanye dan jadwal tugas laporan yang diaktifkan.

Retensi dan pemeliharaan

Melakukan pembersihan hak, arsip, kadaluwarsa dan pekerjaan integritas.

Konektor

Menampilkan konektor cron pelanggan dan polling hanya untuk terpasang, diaktifkan, dan dikonfigurasi connector.

Verifikasi cron

  1. Buka Pengaturan - Penyiapan Cron dan mengkonfirmasi pelari produk ada.
  2. Gunakan Lari sekarang sekali, kemudian mengkonfirmasi admin dan polling detak jantung update.
  3. Periksa Diagnostik untuk detak jantung yang terlambat, PHP CLI, database atau masalah jalur berkas.
  4. Inspeksi /tmp/opsiq-cron.log atau jalur log yang Anda pilih ketika menjalankan manual gagal.

Pertahankan penanganan konektor pendek, idempoten dan ruang kerja-scoped. Batch sinkronisasi panjang dan simpan kursor / checkpoint sehingga run berikutnya dapat terus aman.

🚫
Ketika Cron produk berhenti, waktu berbasis OpsIQ pekerjaan berhenti atau menjadi terlambat meskipun halaman admin biasa mungkin masih dimuat.
Operasi

Operasi penyebaran host

Sebuah hosted OpsIQ penyebaran menggunakan layar produk yang sama dan berjalan-jalan sementara operator hosting mengelola lapisan server. Komersial sign- up, rencana, tagihan dan akuntansi-portal prosedur berada di luar buku pegangan ini.

Layar produk
Pemindahan hostOperasi host berubah yang mempertahankan infrastruktur; tidak mengubah bagaimana pelanggan menggunakan OpsIQ.Pemindahan hostarea kerjaPRODUCT UIOpsIQ yang samaINFRASTRUCTUREOperator-dikelolaWORKSPACE DATATerisolasiHIDUP WORKSPACE VIEWWaktu berjalan aplikasiPHP, server web dan basis dataDiaturCron produkDijadwalkan oleh operator hostingVerifikasiBackup dan pemutakhiranMemberikan kebijakan dan buktiUlasanPengaturan OpsIQSitus, AI, tim dan konektorTimmu1OPERATE OPSIQ NORMALLYGunakan navigasi produk yang sama2VERIFY SERVICE HEALTHGunakan bukti status dan Diagnostik3KNOW RESPONSIBILITYSetting pengaturan produk dari pekerjaan hosting
Operasi host berubah yang mempertahankan infrastruktur; tidak mengubah bagaimana pelanggan menggunakan OpsIQ.

Apa yang biasanya dilakukan operator hosting

  • Web server, PHP waktu jalan, layanan basis data, TLS dan penyimpanan.
  • Cron produk terpadu dan catatan servernya.
  • Pembaruan aplikasi, pemantauan infrastruktur dan proses backup didefinisikan oleh perjanjian hosting.

Apa sebuah OpsIQ administrator masih mengelola

  • Situs web dan widget instalasi, pengaturan AI, pengetahuan, kotak surat dan travelers-support jalan-berjalan.
  • Akses tim, departemen, kontrol keamanan, API kunci, konektor, otomatisasi dan pengaturan retensi.
  • Hasil verifikasi melalui Diagnostik, log audit, tes konektor dan pemeriksaan akhir yang nyata.

Pemeriksaan operasional

Jangan berasumsi bahwa layanan yang dikelola berarti setiap integrasi produk sehat. Konfirmasikan bukti cadangan terbaru dan kebijakan penahanan dengan operator hosting, dan gunakan OpsIQ Diagnostik setelah perubahan ke DNS, email, penyedia AI, website atau konektor.

Bagian ini hanya mencakup operasi produk. Komersial onboarding, subscriptions, penagihan dan pengelola akun tetap diluar buku panduan OpsIQ.

Operasi

Self - hosting OpsIQ

Sebuah diri-diselenggarakan OpsIQ instalasi berjalan pada infrastruktur yang Anda kontrol Anda bertanggung jawab untuk waktu-jalan, basis data, TLS, Cron produk, backup, update dan pemantauan.

Layar produk
Song- tuan rumahPenginapan memberikan kendali infrastruktur dan membuat tim Anda bertanggung jawab atas setiap ketergantungan operasi.Song- tuan rumahserverPHP8.4+DATABASEMySQL 5.7+SCHEDULERSetiap menitHIDUP WORKSPACE VIEWEkstensi runtimecurl, pdo_mysql, mbstring, jsonDiperlukanEkstensi tambahanxml openssl, zip, intl, gdDiperlukanAlternatif basis dataMariaDB 10.3+ dengan InnoDBDidukungTransportasiHTTPS dan akses penyedia outboundVerifikasi1PREPARE THE SERVERCocok dengan persyaratan waktu-jalan2INSTALL AND CONFIGUREGunakan basis data dan HTTPS yang didedikasikan3ADD PRODUCT CRONLari opsiq/ cron / all.php
Penginapan memberikan kendali infrastruktur dan membuat tim Anda bertanggung jawab atas setiap ketergantungan operasi.

Kontrak perangkat lunak minimum

PHP

PHP 8.4 atau yang lebih baru. Perlu ekstensi: curl, pdo_mysql, mbstring, json, xml, openssl, zip, intl dan gd.

Basis Data

MySQL 5.7+ atau MariaDB 10.3+ menggunakan InnoDB. Buat basis data yang didedikasikan dan pengguna aplikasi paling-istimewa.

Server web

Apache atau Nginx dikonfigurasi untuk OpsIQ pengendali depan, aset statis dan perlu menulis ulang.

HTTPS

Diperlukan sesi admin, lalu lintas widget, API kunci, webhooks dan panggilan penyedia.

Akses keluar

Ijinkan DNS dan akses HTTPS ke AI, email, connector, dan titik akhir lisensi yang Anda aktifkan.

Akses berkas

Pengguna web dan CLI harus dapat membaca berkas aplikasi dan hanya menulis ke lokasi yang didokumentasikan waktu-jalan / penyimpanan.

Cron

Jalankan OpsIQ penjadwalan produk setiap menit dengan konfigurasi aplikasi yang sama dan akses basis data sebagai proses web.

Urutan instalasi

  1. Unggah rilis ke akar dokumen yang dimaksudkan dan simpan struktur direktori yang diberikan.
  2. Buat basis data dan pengguna aplikasi, lalu masukkan basis data, canonical URL dan pengaturan lisensi.
  3. Jalankan arus instalasi / setup dan membuat akun pemilik pertama.
  4. Aktifkan HTTPS dan verifikasi redireksi, cookies dan widget publik /API jalan.
  5. Tambahkan Cron produk OpsIQ terpadu:
Self - host produk cron
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1
  1. Buka Pengaturan - Cron Setup dan Diagnostik; jalankan penjadwalan sekali dan menyelesaikan setiap ketergantungan gagal.
  2. Atur backup, kembalikan pengujian, catatan retensi dan prosedur pembaruan sebelum menambahkan data produksi.

Memperbarui dengan aman

  1. Baca catatan rilis dan periksa PHP / ekstensi yang diperlukan sebelum mengubah berkas.
  2. Back up database dan berkas aplikasi / konfigurasi, kemudian membuktikan backup dapat dikembalikan dalam lokasi tes.
  3. Menyebarkan berkas baru tanpa menghapus konfigurasi spesifik atau data waktu-jalan.
  4. Jalankan proses migrasi / sebelum penerbangan dan verifikasi log masuk, pelacakan widget, tiket, email, AI, konektor dan cron.
  5. Simpan rilis dan basis data cadangan sebelumnya yang tersedia untuk jendela rollback terdokumentasi.
🚫
Tingkat top-repositori /cron.php bukan OpsIQ penjadwalan produk. Titik automatisasi produk hanya di opsiq/ cron / all.php.
⚠️
Jangan hapus.schema_cache.json sebagai pemeliharaan rutin. Hapus hanya ketika instruksi produk secara eksplisit memerlukan sebuah skema-cache membangun kembali.
Operasi

Panduan Produksi

Checklist dan praktek terbaik untuk menjalankan OpsIQ dalam produksi.

Panduan Produksi
Panduan ProduksiDaftar cek go- live: domain gubahan dan SSL, AI terlatih, konektor dan cron, backup dan retention, dan peran tim.Daftar periksa Go-livearea kerjaSebelum kau pergi hidupDomain gubahan + SSL dikonfigurasiAI dilatih pada isi AndaKonektor diuji berjalanBackup dijadwalkanPeran tim yang ditugaskan & diulas1GO-LIVEDaftar cek sebelum peluncuran2VERIFYDomain · SSL · salinan cadangan3CONFIDENTKapal ketika hijau
Sebuah go-live checklist sehingga tidak ada yang hilang: domain + SSL, terlatih AI, diuji konektor dan cron, backup dan penahanan, dan peran tim.

Sebelum pergi hidup

HTTPS dikonfigurasi

SSL terpasang, direksikan HTTP, HSTS diaktifkan.

Kron sedang berjalan

Verifikasi melalui halaman diagnostik.

AI diuji

Ngobrol sebagai pelanggan, memastikan akurasi dan nada.

Widget terpasang

Di semua halaman situs, verifikasi dengan Live Feed.

Backup dikonfigurasi

Database harian dan backup file otomatis.

Galat saat log

Log galat PHP diaktifkan dan dimonitor.

Tim diundang

Semua anggota memiliki akun dengan peran yang benar.

Pengetahuan dasar penduduk

Setidaknya 5-10 artikel.

Daily: periksa dashboard, antrian tiket yang jelas, cek percakapan AI.

Review AI Insight, update KB, cek kinerja tim, review keamanan.

Monthly: Trentang analisis review, konektor audit, pelatihan AI update, verifikasi backup.

Operasi

Daftar cek sebelum peluncuran

Jalankan gerbang sumber dan pemeriksaan produk yang lengkap sebelum peluncuran produksi pertama atau rilis perintah yang tersedia bukanlah bukti bahwa itu ada di lingkungan anda.

Layar produk
Verifikasi rilisTampilan rilis menunjukkan bahwa gerbang diperlukan untuk dijalankan; tidak perlu label sebelumnya seperti yang telah lewat.Verifikasi rilisserverBERSAMAPHP 8.4SOURCE GATESJalankan lokalOUTCOMETerbukti berbasisHIDUP WORKSPACE VIEWEkstensi yang diperlukanPeriksa sebelum suiteGerbangSapu sintaks PHPSemua berkas PHP projekGerbangEvaluasi AI dan PLTJalankan ketika ketergantungan hadirGerbangCek statik dan perambanJalankan ketika dikonfigurasiGerbang1RUN THE CHECKSMenangkap keluaran yang sebenarnya2FIX EVERY REQUIRED FAILUREJangan mengganti bukti dengan asumsi3TEST THE PRODUCTVerifikasi perjalanan pengguna sebenarnya
Tampilan rilis menunjukkan bahwa gerbang diperlukan untuk dijalankan; tidak perlu label sebelumnya seperti yang telah lewat.

Sumber dan rilis gerbang

Jalankan pemeriksaan repositori dari akar instalasi dan menjaga keluaran lengkap mereka dengan catatan rilis.

Gerbang prapenerbangan primer
php tools/preflight.php
Gerbang bebas ekstended
php tools/release_gate.php

Preflight memeriksa PHP 8.4 waktu berjalan dan ekstensi yang diperlukan, melakukan penyapuan sintaks PHP, menjalankan terminal evaluasi AI kapal dan penuh PHPUnit suite, dan menjalankan pemeriksaan PHPStan / Node ketika alat-alat itu dipasang. Gerbang diperpanjang juga termasuk asap, clean / schema dan peramban end-to-end ketika lingkungan mereka dikonfigurasi.

Pemeriksaan yang dilewati bukan sebuah pass. Catat mengapa tidak tersedia, instal ketergantungan yang hilang atau jalankan dalam lingkungan CI / staging yang benar sebelum rilis.

Pemeriksaan produk

1. Otentikasi dan peran

Masuk sebagai setiap peran yang dimaksudkan; verifikasi diijinkan dan ditolak halaman / tindakan.

2Widget dan Pelacakan

Muat situs nyata dalam peramban pribadi; verifikasi lalu lintas suar, Live Feed, pengunjung dan catatan sesi.

3. Chat dan AI

Tanyakan pertanyaan perwakilan; verifikasi dasar pengetahuan, keselamatan, eskalasi dan sejarah AI.

4. Tiket

Buat, assign, reply, eskalate, close and repart through every enabled asupan path.

5. Surel

Uji pengiriman outbound dan masing-masing dikonfigurasi insibel kotak surat atau jalur webhook.

6. CRM dan analytics

Buat kontak / kesepakatan / konversi yang dikendalikan dan verifikasi dasbor, corong, skor dan laporan.

7. Konektor

Jalankan tes koneksi, satu baca, satu kali tulis / kering dan jalankan webhook / polling tapak untuk setiap konektor yang diaktifkan.

8. API dan webhooks

Verifikasi lingkup sempit, batas kecepatan, pengulangan idempoten, tanda tangan dan penanganan duplikat.

9. Cron

Jalankan penjadwalan produk terpadu dan mengkonfirmasi semua detak jantung yang diperlukan di Cron Setup / Diagnostik.

10 Keamanan

Verifikasi 2FA, kontrol CSRF / session, entri audit, pembatalan kunci dan isolasi area kerja.

11 Cadangan dan kembalikan

Mengembalikan backup saat ini ke dalam lingkungan tes terpisah dan memverifikasi data dan konfigurasi.

12. Observabilitas dan rollback

Konfirmasi log / peringatan, pertahankan ID permintaan dan buktikan prosedur rollback.

⚠️
Hanya menyebar setelah setiap gerbang yang diperlukan dan bisnis perjalanan penting memiliki bukti saat ini untuk rilis dan lingkungan.
Pengembang

Push Web pada situs pihak ketiga

Pemberitahuan push peramban (termasuk OpsIQ Push Campaigns) membutuhkan pekerja layanan yang dilayani dari ORIGIN SAME sebagai halaman.OpsIQ widget beban dari Anda OpsIQ penyebaran, sehingga situs ketiga-partai tidak dapat register OpsIQ pekerja langsung tuan rumah satu file kecil pada domain situs sendiri untuk mengaktifkan push ada. Kampaigns memberikan melalui metode yang didukung KEDUA.

Bagaimana cara kerjanya
Push webSebuah pemberitahuan push bergaya OS-di atas dua kartu metode pengiriman: Built-in VAPID dan Pusher Beams.Toko AndaGerobakmu sedang menunggu · 10% off hari inisekarangBangun - dalam (VAPID)Tidak ada pihak ketigaHost satu berkasPusher BeamGunakan akun AndaHost pekerja
Push web

Mengapa ini dibutuhkan

Peramban hanya membiarkan suatu halaman mendaftarkan seorang pekerja layanan dari asalnya sendiri. Widget memuat asal lintas dari Anda OpsIQ penyebaran, sehingga tidak dapat menginstal pekerja push di situs pelanggan, sampai Anda host pekerja pada asal situs itu, widget diam-diam melewati push (tidak ada kesalahan, tidak ada langganan). Anda memiliki dua pilihan di bawah ini;OpsIQ Push Campaigns mempublikasikan melalui keduanya.

Pilihan A - Push Web yang diselenggarakan (VAPID, tidak ada pihak ketiga)

1. Unduh pekerja dari OpsIQ penyebaran: https://YOUR-OPSIQ/opsiq/opsiq-push-sw.js

2. Upload ke Anda root web sehingga dapat dicapai di https://yoursite.com/opsiq-push-sw.js. Widget mendeteksi lokasi ini pada asal halaman sendiri dan register itu, tidak ada perubahan snippet diperlukan. (Ini menggunakan sebuah lingkup sempit, sehingga tidak pernah menggantikan layanan pekerja yang telah Anda jalankan.)

Opsional: jika anda mesti menhost pada path bukan-standar, arahkan widget ke sana sebelum snippet. Hanya diterima ketika same-asal:

Opsional hanya jika berkas TIDAK ada di akar web
<script>window.OpsIQ=window.OpsIQ||{};window.OpsIQ.pushSwUrl="/custom/opsiq-push-sw.js";</script>

3. Masuk OpsIQ, buat kunci VAPID (Pengaturan → AI Percakapan Klien → Tingkat lanjut → Web Push). Widget kemudian meminta pengunjung untuk pemberitahuan dan mensubjurutnya.

Dibalik CDN/Cloudflare? Pastikan /opsiq-push-sw.js mengembalikan HTTP 200 (Bersihkan cache jika itu 404 sebelum Anda upload; cache 404 akan memblokir pendaftaran).

Pilihan B (operator) Pusher Beam)

1. Dalam pengaturan OpsIQ set penyedia push ke Pusher Beam dan masukkan Beams Anda ID Instance dan Kunci Rahasia.

2. Host the Beam service workers on the site 's root as /service-worker.js. Salin https://YOUR-OPSIQ/opsiq/pusher-beams-service-worker.js, atau menggabungkan baris ini ke dalam root pekerja Anda yang ada:

Beam pekerja, host di https://yoursite.com/service-worker.js
importScripts("https://js.pusher.com/beams/service-worker.js");

3. Widget otomatis memuat Beams SDK Dan melayani setiap pengunjung ke kepentingan perisite. opsiq-site-<your-site-key>Tidak perlu kabel lain.

Bagaimana kampanye memberikan

Push Campaigns mempublikasikan melalui keduanya metode sekaligus: pengunjung pada diri-pemilik VAPID mendapatkan Push Web terenkripsi, dan pengunjung berlangganan melalui Pusher Beam mendapatkan Beams mempublikasikan. Setiap pengunjung dicapai melalui mana mereka subscripted, sehingga Anda dapat menjalankan same- asal-asli VAPD di beberapa situs dan severage-earths Beams pada yang lain.

HTTPS diperlukan bagi pekerja layanan dan Web Push (localhost dibebaskan untuk pengujian). admin chating inbox telah menggunakan mekanisme bunga Beam yang sama untuk operator peringatan.

Operasi

Permasalahan yang mengganggu

Masalah umum dan bagaimana memperbaikinya.

Umum

Halaman kosong+

Periksa log galat PHP. Menyebabkan: PHP lama (perlu 8.4+), hilang ekstensi, koneksi DB gagal, ijin berkas salah.

Dashboard menunjukkan nol+

Periksa: widget terpasang? Cron berjalan? Jangkauan tanggal benar? IP dikeluarkan?

AI

AI tidak merespon+

Periksa: penyedia yang dikonfigurasi? API kunci valid (gunakan koneksi Uji)? anggaran habis? config AI workspace benar?

AI memberikan jawaban yang salah+

Periksa: dasar pengetahuan sampai saat ini? Konfirmasi aman? Penelusuran konektor kembali data yang benar? Percakapan review dalam Sejarah AI.

AI lambat+

Tergantung pada: penyedia API kecepatan, ukuran konteks (besar KB = lebih token = lambat), latensi jaringan. Coba model yang lebih cepat.

Pelacakan

Widget hilang+

Periksa: skrip dalam sumber halaman? galat JS dalam konsol? cSP memblokir? Ad blocker?

Negara tak dikenal+

GeoIP tidak dikonfigurasi. Gunakan Cloudflare (otomatis) atau database MaxMind GeoLite2.

Tiket

Email tidak membuat tiket+

Periksa: kotak surat tersambung? Cron berjalan? Sandi App berubah? IMAP pengaturan benar?

Auto- balasan tidak bekerja+

Cek: diaktifkan? Departemen diijinkan? AI dikonfigurasi? Cron berjalan? Manusia menjawab pertama?

Konektor

Koneksi gagal+

Periksa: kredensial benar? Kunci kadaluarsa? API akses dari server? Dasar URL Benar?

Terhubung tetapi tidak ada data+

Cek: API lock scopes? Webhook sync diaktifkan? cron berjalan?

Performa

Halaman lambat+

Periksa: kinerja basis data (SHOW PROCESSLIST), memori PHP (meningkat ke 1GB), aktifkan opcache, kurangi periode retensi.

Operasi

Widget tidak boleh dikunjungi penebangan

Gunakan pemeriksaan fokus ini ketika widget dimuat secara salah atau Siaran Hidup tetap kosong.

Ketika widget bukan kunjungan penebangan, verifikasi kunci situs, muat halaman dalam peramban pribadi, periksa panel browser / Console untuk sinyal terblok atau permintaan widget, tinjau Konten-Security- Kebijakan dan blocker iklan, konfirmasi situs aktif di OpsIQ Sebuah gelembung percakapan terlihat tidak dengan sendirinya membuktikan bahwa suar analisis diterima.

Referensi

Glosar

Definisi untuk istilah digunakan seluruh OpsIQ.

Aksi

Sesuatu yang AI bisa lakukan melalui konektor atau platform.

Agen

Anggota tim dengan akses terbatas, atau agen AI.

BYOK

Bawa Kunci Sendiri Anda, Anda menyediakan AI sendiri API kunci.

Konektor

Plugin yang memadukan platform eksternal dengan OpsIQ.

CSAT

Nilai kepuasan pelanggan.

Setuju

Kesempatan pendapatan di CRM.

Departemen

Sebuah kategori tiket untuk routing dan kontrol akses.

Eskalasi

Memindahkan tiket ke departemen yang berbeda atau dari AI ke manusia.

GeoIP

Pendeteksi lokasi pengunjung dari alamat IP.

Handoff

Mentransfer percakapan dari AI ke manusia.

Tanda identitas

Tanda tangan yang ditandatangani mengidentifikasi pengunjung website.

Dasar Pengetahuan

Artikel yang digunakan AI untuk menjawab pertanyaan.

Memimpin

Seorang pengunjung menunjukkan niat membeli.

Nilai awal

0-100 nomor menunjukkan kemungkinan konversi.

Panggung hidup

Dimana pelanggan adalah: memimpin, Prospect, Pelanggan, Pada Risk, Gereja.

AI Terkelola

AI disediakan sebagai bagian dari rencana OpsIQ Anda.

Baris pipa

Papan visual dari tahap kesepakatan.

RBAC

Role- Berdasarkan Akses Kontrol.

Sesi

Serangkaian tilikan halaman dalam jendela tenggang waktu.

Kunci tempat

Identifier unik untuk situs web yang dilacak.

SLA

Perjanjian Level Layanan, waktu respon target.

Token

Satuan teks AI. Kira-kira 4 karakter = 1 Token.

Tapis Kepercayaan

Sistem keamanan mengendalikan otonomi AI.

Webhook

HTTP callback untuk pemberitahuan acara.

Edo

JavaScript kode tertanam di website Anda.

Area Kerja

Sebuah situs dengan pelacakan sendiri, AI, konektor, dan tim. sama seperti "site".

Referensi

Cari bantuan lebih

Jika dokumentasi ini tidak menjawab pertanyaan Anda:

Admin AI

Klik "Ask OpsIQ" di admin. Memiliki akses ke dokumentasi ini dan data platform Anda.

Tiket dukungan

Sertakan: apa yang Anda coba, apa yang terjadi, apa yg Anda harapkan, dan pesan kesalahan apapun.

Surel

Dukungan email dengan kunci lisensi dan deskripsi isu.

Tips untuk permintaan dukungan efektif

Sertakan halaman

Halaman admin yang mana (URL atau nama).

Sertakan pengaturan

Nama pengaturan yang tepat dan nilai saat ini.

Sertakan galat

Pesan galat yang sama dengan kode.

Sertakan langkah

Apa yang kau lakukan, langkah demi langkah.

Sertakan yang diharapkan vs aktual

Apa yang harus terjadi vs apa yang terjadi.

💡
Semakin spesifik permintaan Anda, semakin cepat jawabannya. "Ini tidak bekerja" membutuhkan penyelidikan ". Mengklik Simpan pada Al Configure memberikan kode kesalahan 502"mendapat jawaban langsung.