OpsIQ Dokumentasjon

Bygg, drift og utvide OpsIQ.

Dette er den komplette dokumentasjonen til OpsIQ. Konfigurere produktet, kjøre støtte, konfigurere AI, administrere CRM, installere widgeten, bygge konnektorer, ringe REST API, motta webhooks, pakke markedsplass apper og betjene selvvært distribusjon.

KundeveiledningAdministratorveiledningUtviklerguideCRM-referanseKoble til SDKRESTAPISelvvært
Område

Omfang av denne håndboken

Alt OpsIQ gjør på ett sted: hvordan hver skjerm fungerer, tilkobling av dine egne systemer og hvordan du bygger oppå det. Start hvor som helst, seksjonene følger den samme rekkefølgen som admin sidepanelet.

Område
DokumentasjonskartHåndboken er organisert rundt OpsIQ -produktet, etter samme rekkefølge som admin sidepanelet.DokumentasjonskartOpsIQ -produktAUDIENCEOperatørerBUILDUtviklereRUNAdministratorerLIV ARBETSPESSONEBruk OpsIQProduktskjermer og arbeidsflytInkludertUtvid OpsIQKobling, APIs og widgetInkludertOperatione OpsIQSikkerhet, krone og distribusjonInkludertReferansePakke, API og webhook-kontrakterInkludert1CHOOSE AUDIENCEOperatør eller utvikler2FOLLOW THE UISeksjoner speil OpsIQ3USE SOURCE TRUTHStatus kommer fra bygg
Håndboken er organisert rundt OpsIQ -produktet, etter samme rekkefølge som admin sidepanelet.
Portal Studio felt guide

Bruk den dedikerte administratoren og utviklerguiden for portalarkitektur, sider, komponenter, forhåndsvisning, hjelpesenter, identitet SCIM.

Åpne portalen Studio guide

Hva er her inne

Kjøre produktet

Hver skjerm i admin: analyse, live chat, billetter CRM, kunnskapsgrunnlag, Site Intelligence, kampanjer og kundekontoportalen. Hva hver side gjør, hva tallene betyr å gjøre når de ser feil ut.

Koble til systemene dine

Nettstedet widget, e-postbokser, inngående og utgående webhooks samt kontaktbiblioteket for plattformer somShopify, WooCommerce, WHMCS, Zendesk, Stripe, SlackogGmail.

Bygg din egen

Connector Builder for no-code kontakter, handlinger og triggere hvis du helst ikke vil bruke koblinger i det hele tatt, samt REST API med alle handlinger, omfang og feilkode.

Operere den

Roller og tillatelser, sikkerheten, krone, diagnostikk, backups og både vert for og selvværte distribusjon.

Hvor skal man begynne

1
Hvis du kjører OpsIQ dag til dag

Les skjermdelene i sidelinjens rekkefølge. Hver åpner med hva siden er for, så du kan stoppe når det trengs.

2
Hvis du administrerer det

Legg til innstillinger, sikkerhet, diagnostikk og produksjon. Dette er seksjonene som bestemmer om alt annet fungerer stadig.

3
Hvis du bygger en integrasjon

Start på kontakter, så kontaktbyggeren og deretter REST API Les dem i rekkefølge, og du vil ha sett alle måter OpsIQ Kan snakke med et annet system.

💡
To ting endrer det du ser. Tillater skjule sider din rolle kan ikke åpnes, så en del som er beskrevet her mangler fra sidepanelet ditt. Be administrator om å sjekke rollen din og kontakter har et modenhetsvarikett på produksjon, Beta- eller Forhåndsvis - eller Mal; den kjørere bygningen og kontaktbildet til dens konnektoruttrykk er autoriteten du har, ikke denne siden.
Start her

Hva OpsIQ gjør for din virksomhet

OpsIQ er en komplett AI-første forretningsoperativ plattform. Den erstatter din analyse, live chat, aiddesk, CRM, SEO verktøykit, integrasjon mellomvare og utviklende plattform med én enkelt enhetlig admin der alle verktøyet deler den samme kundekonteksten. I stedet for å sy sammen 8-12 separate SaaS-produkter, du installerer OpsIQ En gang og bruk alt fra én skjerm.

Plattformen
OpsIQ Unit plattformEn sentral AI-hjerne som er koblet til live chat, CRM, billetter, Site Intelligence, kampanjer og analyse.Live chatkampanjerAI CRMNettsted IntelBiljettAnalyseOpsIQAI Brain1ONE WORKSPACEHvert verktøy i én administrator2SHARED BRAINEn kundesammenheng3ANYWHERESky eller selv-hostet
OpsIQ er én plattform med en delt kundekontekst, alle verktøyfôrer og drives av den samme AI-hjernen.

Alt OpsIQ gjør · i detalj

Nettsideanalyse og besøkendes intelligens

Real-tid besøkende sporing

Hver sidelast, klikk på, rull og navigasjonsarrangement blir tatt til fange i sanntid. Se hvem som er på nettstedet ditt akkurat nå, hvilke sider de ser, hvor lenge de tilbringer, og der de kom fra alle uten tredjeparts cookies.

Logg og økter

Full historie for alle besøkende med enhet, nettleser, operativsystemet, landet, byen, referanseren, UTM-parametere og innstilling av identitet. Sessionene gruppesidevisning i reiser slik at du kan se hele veien en gjest tar.

Øktgjentakelse

Tidslinje-stil avspilling av fanget besøkende økter. Se nøyaktig hva brukerne gjorde: musebevegelser, klikk på, ruller og sideovergange samt skjema interaksjoner. Bruk det til å diagnostisere UX problemer, forstå dråpepunktene og verifiser konverteringsflyten.

Direktestrøm

En sanntidsstrøm av besøkendes aktivitet som det skjer. Se sidevisninger, chat starter, skjemainnsendelser og intensjon signaler oppdatering hvert sekund. Filtrere etter land eller enhet til å fokusere på bestemte trafikksegmenter.

Toppsider

Sider rangert etter besøk, engasjementstid, studs rate og støtteaktivitet. Identifiser det høyeste performerende materialet ditt og sidene som trenger forbedring.

Geo-etterretning

Land, by og region deler seg med kart. Enhet og nettleserfordeling, trafikkkildeanalyse, søkemotor referansesporing samt markedsgjennomtrengning innsikt.

Forsettlig trakt

Spore besøkendes intensjonsignaler (prisbesøk på sider, gjentatt avkastning, dokumentasjon surfing mønster og støtteinteraksjoner) for å identifisere besøkere som er sannsynlige til å kjøpe eller trenger hjelp.

A/B-eksperimenter

Kjør splittede tester på nettstedet ditt direkte fra OpsIQ. Opprett varianter, sett trafikktildeling, definere konverteringsmål og måle statistisk betydning. Ingen eksterne testverktøy er nødvendig.

JavaScript feilsporing

Ta klientsiden JavaScript feil fra nettstedet ditt automatisk. Se Feilmeldinger, stabelspor, berørte nettlesere og hvilke sider utløser dem. Avluse frontend problemer uten separat feilsøkingsovervåking.

Hendelsers logg

Hver sport hendelse (sidevisninger, tilpassede arrangementer, chatinteraksjoner, skjemainnlegg og innkjøp) i en søkbar logg med fulle metadata.

Salg og konverteringer

Spor bestillinger, inntekter, refusjon, abonnementsfornyelser og attributtkonvertering til trafikkkilder, kampanje-og besøkende reiser. Inntekt dashboards med perioden sammenligning og trendanalyse.

Ledere

Høyt intent besøkende identifisert av atferdsmønstre. Score leads basert på sidebesøk, tid på nettstedet, returfrekvens, støtteinteraksjoner og tilpassede signaler. Feed fører direkte inn i CRM-rørledningen.

Nettsted Intelligence (SEO og innholdsanalyse)

Site kryper

Automatisert kryping av hele nettstedet for å oppdage sider, oppdage ødelagte lenker, finne manglende metatagger, sjekke bilde alt tekst, validert kanonisk URLs og kartlegg din nettside struktur. Planlegger krabber til å kjøre daglig, ukentlig eller etterspørselen.

Teknisk SEO-revisjon

Omfattende teknisk analyse: sidehastighetsscorer, mobil responsivitet, Core Web Vitals SSL sertifikatstatus, omdirigere kjeder, duplisert innholdsdeteksjon, krypdybdeanalyse og strukturert datavalidering.

Innholdsrevisjon

Evaluer alle sider for innholdskvalitet, ordtall, leselighetskarakter, søkeordtetthet, overskrift strukturen, interne / ekstern linkforhold og frisk. Identifiser tynn innhald, dupliserte sidene samt hull i innholdet.

AI-drevet søk

Semantisk søk på tvers av hele innholdet. Spør om naturlig språkspørsmål angående ditt innhald og få AI-syntesize svar med kildesiden referanser.

SERP rangering sporing

Overvåk søkemotorens rangeringer for målsøkeord på tvers av Google og andre motorer. Spor posisjonsendringene over tid, sammenlikn med konkurrenterne og se hvilke sider som rangeres etter hvilke vilkår.

Nøkkelordforskning

Oppdag søkeordsmuligheter basert på innhold, konkurrentanalyse og søkevolumdata. Få forslag til nye temaer for innhaldet, langhalevariasjonene samt mål om optimalisering av innhold.

Tilbakekoblingsanalyse

Overvåk din inngående lenkeprofil. Se hvilke nettsteder som link til deg, spor nye og tapte koblinger, analyser ankertekstdistribusjon samt identifiserer muligheter for å bygge sammen med linken.

Lokalt SEO-nett

For bedrifter med fysiske steder: visualisere din lokale søkesynlighet over et geografisk rutenett. Se hvordan rangeringen varierer etter plassering, avstand fra virksomheten og søksformålet ditt.

Google Business Profile synkronisering

Koble din Google Business Profil til OpsIQ. Synkroniser anmeldelser, innlegg, Q&A, bilder og forretningsinformasjon.OpsIQ Svar på anmeldelser, publiser innlegg og overvåke innsikt.

Planlagte rapporter

Automatiserte SEO og analyserapporter som genereres på planen din (daglig, ukentlige eller månedlige). Rapporter inkluderer rangering endringer i trafikktendenser, tekniske problemer funnet. Hvit-merke produksjon tilgjengelig for byråene.

AI-drevet støtte

Kunde AI chat

AI-svarer kundespørsmål på din hjemmeside 24/7 ved hjelp av kunnskapsbasen din, tilkoblede plattformdata (ordrer, kontoer og abonnement) og tilpasset opplæring. Støtter flere AI-leverandører: Claude Anthropic), GPT-4o (OpenAI), Gemini (Google) og Grok.

Admin AI-assistent

En AI-kompilot inne i adminpanelet som hjelper deg å skrive billettsvar, utkaste kundekommunikationen og analysere støttetrender, slå opp kunderdata på tvers av tilkoblede plattformer.

AI kunnskapsgrunnleggelse

AI er begrunnet i kunnskapsbase artikler, FAQ-oppføringer og produktdokumentasjon samt tilkoblede plattformdata. Det hallucinere ikke. Den svarer fra din faktiske forretningsinformasjon eller eskaleres når den er usikker.

Auto-handoff til mennesker

Når AI ikke kan løse et spørsmål, oppdager frustrasjon eller kunden ber om å få en menneskelig person, gir den automatisk av til teamet ditt med full konversasjon. Konfigurerbar nedgang/tid ut auto-omvend tilbake til AI.

AI-trening spør

Skriv separat instruksjon spør for kunde-vendt AI og adminsvert AI. Kontrolltone, grenser, eskaleringsregler, forbudt emner og forretningsspesifikk oppførsel. Per arbeidsrom konfigurasjon støttes.

AI historie og revisjon

Hver AI-samtale er logget med full forspørselsdetaljer/responsinformasjon, tokenbruk, kostnadssporing og leverandør som brukes. Gjennomgang samtaler til å identifisere treningsåpningene og forbedre AI nøyaktigheten.

AI-innsikter

Automatisk analyse av AI-samtalemønstre. Se vanlige spørsmål, oppløsningshastigheter, utlevering frekvensen, kundetilfredshet etter emne og områder der AI trenger bedre opplæring.

Per arbeidsrom AI-konfigurasjon

Hvert tilkoblet sted/arbeidsrom kan bruke sin egen AI-leverandør, modell, temperatur, tokenbudsjetter og opplæring. Et SaaS selskap kan benytte Claude for hovedproduktet samt GPT-4o i et sekundær merkevaremerke.

Administrert AI og BYOK

To AI-moduser: Managed AI (inkludert i planen din, no API Nøkkelen som trengs) eller ta med din egen nøkkel (bruk din egen OpenAI/Anthropic/Google/xAI API Nøkkelen for full kontroll over modellvalg og kostnader. Begge er førsteklasses, alle funksjoner fungerer med enten modus.

AI token budsjett og kostnadskontroll

Sett månedlige pollettbudsjetter, per konversasjon grenser og lavbalanse varsler. Spor utgifter pr leverandøren, per arbeidsområdet eller hver samtale. Forhindr kjøringskostnader med hardt tak.

Billetter og helpdesk

Nasjonalt billettsystem

Full helpdesk med avdelinger, prioriteringer (lav/medium / høy/urgent), statusser, SLA-sporing, interne notater, kundesvare og filvedlegg. Ingen eksterne hjelpemidler trenges.

AI triage og auto-reply

AI trigger automatisk innkommende billetter etter avdeling og prioritet. Aktiver auto-reply for trygge departementer. AIL utkastet, og sender et svar etter en konfigurerbar forsinkelse (standard: 2 minutt) så mennesker kan intervenere først.

E-post inntak

Koble til en postkasse (Gmail, IMAP, eller leverandørspesifikk) for automatisk å opprette billetter fra inngående e-post. Svar på kupongvarsling email oppdatere billetttråden.

Billettportalen er innpakket

Legg inn en kunde-vendt billettsportal på nettstedet ditt. Kunder kan sende ut billetter, se sin historie, svare til å åpne billetter og sjekke statusen din som alle merker i designen din.

Billettsammenslåing

Slå sammen dupliserte billetter til en enkelt tråd. Mergerte billettshow [Flettet] på emnelinjen. Alle samtalehistorier er bevart i den overlevende billetten.

Tilbake til AI

Når en menneskelig agent har overtatt et spørsmål, kan du bruke «Gå tilbake til AI» for å la kunstig intelligens fortsette med automatisk svar på det aktuelle spørsmålet.

Innboks copilot

AI-assistert billettsstyring fra innboksen visning. Copiloten foreslår svar, oppsummerer samtalehistorien, anbefaler prioritet/avdeling oppgaver og kan utføre handlinger på tilkoblede plattformer.

Chat og støtte i sanntid

Chat innboks

Real-time kundechatt som er drevet fra en enhetlig innboks. Se alle aktive samtaler, kundens identitet, samtalehistorie og AI forslag. Flere agenter kan samarbeide om en konversasjon.

Proactive chat regler

Trigger chatmeldinger basert på besøkendes atferd: tid på siden, bestemt URL besøkt, rull dybden, returbesøk telle, avslutte intensjon eller tilpassede hendelser. Eksempel: vis en hjelpemelding etter 60 sekunder på prissiden.

Chat-element

En tilpasset chat widget innebygd på nettstedet ditt. Støtter AI-prat, live agent chat, billetter innsendelse, kunnskapsbase søk og besøkende identitet. Responsive, tilgjengelig og brandable.

CSAT-undersøkelser

Samle kundetilfredshetsvurderinger etter chat- og billettinteraksjon. Designundersøkelser med dine egne spørsmål, vurderingsskalaer og oppfølgingsforespørsler. Resultatene kommer i lagytelse samt AI innsikt.

Postchat e-postundersøkelse

Etter at en chat er avsluttet, kan besøkende med en kjent e-post motta én merket post med et AI oppsummering av hva som ble håndtert og ett klikk "Var det lett?" Ja / Nei. En gang per tråd, signert engangskoblinger, hver sending logget, og resultatet lander på tilbakemeldingssiden som sitt eget signal ved siden av in-chat stjerner.

Tilbakemeldingsidentitetsløkke

Alle tilbakemeldinger som bærer en person viser dem: navn, e-post og klikk til full kundereise samt CRM kontakt.

Skriver AI

Separat AI-skriveassistent for komponering av epostutkast, billetter svar, kunngjøringer og kundekommunikasjon. Brukes sin egen kjap (ikke chat hjernen) til profesjonell forretningsskriving.

AI-Første CRM

CRM-kommandosenter

En enkelt skjerm som viser hele CRM-tilstanden din: pipeline verdi, deal hastighet, kommende oppgaver, risikotilbud, agentaktivitet og AI anbefalinger. Forsiden til CRm er ditt daglige utgangspunkt.

Kontakter og selskap

Administrer kundekontakter med full profil: navn, e-post, telefon, selskapet, tags, livscykelstadiet, samtalehistorien, billetthistorikken og spesialiserte felt. Link kontakter til bedriftene for B2B forhold management.

tilbud og rørledningsbrett

Visual Kanban-stil avtale bord med tilpassede stadier. Dra avtaler mellom trinn, sett verdier, tildel eiere, spor lukke datoene og se rørledningsverdi i hvert stadium. Flere kanaler støttet.

AI-avtale coaching

AI analyserer hver avtale og gir coaching: risikosignal (gone rolig, konkurrent nevnt, budsjett bekymring), neste-beste handling anbefalingene, vinne sannsynlighet og foreslått oppfølging timing.

Prognose og rapporter

Inntektsprognoser basert på rørledningsdata, historiske nærpriser og avtalehastighet. Rapporter inkluderer pipeline per etape av eieren etter kilden, konverteringskursen, gjennomsnittlig dealstørrelse og salgssykluslengden.

Uttalende agent (SDR)

AI-drevet prospektering som identifiserer potensielle kunder fra besøkende data, ledesignaler og tilkoblet plattformaktivitet. Foreslås utover målene, utkast initial meldinger samt scorer blykvaliteten.

Oppfølgingssekvenser

Automatisert multi-trinns oppfølgingssekvenser: epost, ventetid, email, sjekk svar og eskalere. Definer sekvensene for nye leads, oppholdne tilbud, inntjekningskampanje etter kjøperuttekten samt gjeninntak av kampanjer.

Livsyklus og oppbevaring

Spor kunde livssyklus stadier (leder, utsikter, kunder, churned) med automatiserte overgange. Reparasjonsmiddelet overvåker for krutsignal og antyder intervensjoner.

Dataadministrator

AI-agent som kontinuerlig renser og beriker dine CRM data: dedupliserer kontakter, fyller manglende feltene, validerer eposten, standardiserer firmanavnet ditt samt flaggs stole poster.

Bygg min CRM

Naturlig språk CRM konfigurasjon: fortell AI hvordan salgsprosessen ser ut, og det bygger pipeline-faser, tilpassede feltene, dealmaler og automatiseringsregler.

CRM helsekontroll

Automatisk revisjon av CRM-datakvaliteten din: dupliserte kontakter, tilbud uten neste trinn, trappeledninger og manglende kontaktinformasjon samt fullverdighetsscoring.

Tillitsoppringing

Tre nivå autonomi kontroll for hver CRM AI-agent: Autopilot (AI virker uavhengig), Copiper (AI antyder, human godkjenner) og manuelle (IA observeres kun). Velg dial per agent, pr handling type, og i hvert avtaleverdi terskel.

Fire AI-agenter

CRM driver fire spesialiserte AI-agenter: Steward (datakvalitet), SDR(prospektering) og Recenting (churnforebygging). Hver agent har sin egen Trust Dial innstilling.

Kobling og integrasjon

Forbygde kontakter

Klar til brukskontakter Shopify, WooCommerceBigCommerce, Magento 2, PrestaShop, OpenCart osCommerce, WordPress, WHMCS, Zendesk, StripeAmazon SES, Postmark, Resend SendGrid, Mailgun, Gmail, IMAP, Slack, og Google Business Profile. Hver kontakt gir plattformspesifikke AI-handlinger, kunnskap og datasynkronisering.

Connector Builder

Bygg egendefinerte kontakter for enhver plattform, ingen kode eller AI-assistert. Builderen støtter REST og GraphQL APIs, OAuth autorisasjonskodestrøm, webhook-autoregistrering med Stripe og enkle signaturordninger (offset), liste/feiltransformeringer, flerhandlingskontekster og markedsemballasje.

AI-assistert kobling forfatter

ConnectorBuilderAI hjelper deg å bygge koblingskontakter: beskrive hva du vil, og det foreslår handlinger, skriver forespørselsbehandlinger samt kart API -respons. Håndterer autentisering, paginasjon og feilhåndtering automatisk.

OAuth strømning for hvilken som helst kontakt

Generisk i-app OAuth autorisasjonsstrøm som fungerer med hvilken som helst forbindelse. PKCE støtte, site-spekulert tilstand styring og automatisk token oppdatering. Kontakter definerer deres OAuth parametre og OpsIQ håndtere flyten.

Buser med kapacitet (plattformvidde)

Kontakter ikke bare legge til plattformhandlinger. De kan drive kjernefunksjonene gjennom funksjons-busser - En kontakt erklærer en evne (kalendar, berigelse, esign in CRM; lokal_listing, range_data i Site Intelligence; web_analytics i Analytics; payment_producer in Paysions; email_sync in Mailbox; video_meetings in Comms) og gjennomfører dets små metodesett; OpsIQ Oppdager det via CapabilityRegistry og ledninger den inn i UI, Kunden 360 timeline, og AI-handlingene. Flere kontakter kan tilby den samme kapasiteten uten låsing. Se konnektorer/PLATFORM_CONNEECTORS.md.

Forinstallert vs markedsnivå

Connectors live in one of two tiers. Pre-installed connectors (connectors/) are registry-active out of the box, kept lean to just the keyless reference and the most-used provider per capability (e.g. Google Calendar, Gmail, Google Business Profile). Marketplace connectors (marketplace_connectors/) are discoverable but inert until installed, e.g. Microsoft 365 Calendar, Outlook, DocuSign, Stripe, GA4, SerpApi, Zoom. Every bridge surfaces a marketplace list so the UI and the AI can prompt "install from the marketplace" (notify-to-install) when a capability has no ready provider, never a broken button.

Kontakt markedsplass

Publiser kontaktene dine til OpsIQ markedsplass. Pakkekontakter med profil json Kunnskap.json, arbeidsflyt_recipes.json, og signerte arkiver. Marketplace støtter gratis og betalt connectors med multi-kilde fakturering

Koblingssignering

Alle kontakter er kryptografisk signert for verifisering av integritet. Signering blir kontrollert på installert tidspunkt. Bruk verktøyet «Reading_all_connectors» til å signere igjen etter oppdateringer.

SmartLookup

Deklarativt fuzzy-matching system for koblingshandlinger. Definer oppslagsregler og OpsIQ Eksempel: find_country("germ") matcher Tyskland med, mens finn_land("bakterier") matches Norge med. 88.9% Selvtillit.

Handlingskontrakter

GeneralenOpsIQ APIpubliserer alle registrerteJSONoperasjon som en oppdagelsesverdig navngitt handling. Bruk meta.aksjoner for live totale og nøyaktig skrevet kontrakter; kontakt pakker erklære sine egne leverandørhandlinger gjennom den felles ActionExecutoren.

Koblingsoppskrifter

Forhåndsbygde arbeidsflytoppskrifter som kombinerer flere koblingshandlinger i vanlige forretningsarbeidsflyter, f. eks. «Når en ny ordre kommer inn på Shopify, opprett et billett, oppdater CRM og send et Slack-varsel.»

Kunnskapssync

Koblinger erklærer kunnskapsemner som synkroniseres til AI-kunnskapsbasen. Plattformspesifikke hjelpeartikler, installasjonsveiledning og feilsøkingstrinn er automatisk tilgjengelige for AI uten manuell kunnskapsoppføring.

Utviklerplattform

RESTAPI

Et navn JSON API Dekker hver registrert administrator JSON drift, medAPI-nøkkelautentisering, arbeidsområdeisolasjon, omfangsgrenser, hastighetsbegrensninger og idempotente skrivere, OpenAPI eller en generert Postman-samling.

Webhooks

Utgående webhooks for alle store hendelser: bestillinger, fakturaer, abonnements- og billetter, chattespill, ledere, brukerregistreringer og vognavbestilling. Sync levering via jobbkøen, exponentiell tilbakebetaling reprøving, SSRF beskyttelse og autodeaktiverbar etter 15 påfølgende feil.

Webhook-signering

Alle utgående webhook er signert med HMAC-SHA256. Kontroller signaturer på mottaksslutten for å sikre Webhook autenticitet. Stabel event_id til idemppotensiell behandling.

WidgetSDK

JavaScript SDK for sporingswidget med identitetsoppløsning, tilpasset hendelsesporing, programmatisk chatkontroll og sidespesifikk konfigurasjon. Installer oppskrifter på React WordPress, Shopify, og statisk HTML.

Plugins og SDK

Server-side SDKs og plugins for felles rammeverk. WordPress plugin, WHMCS modul, og generiske PHP/Node.js integrasjonsbiblioteker

Begivenheter API

Skyv ut tilpassede hendelser til OpsIQ fra backend: kjøp, registreringer, funksjonsbruk, feil eller enhver forretningshending. Hendelser vises i besøkende tidslinje og feed in analytics and AI-konteksten.

Triggers kokebok

Bygg automatiserte arbeidsflyter utløst av hendelser: ny billett, chat startes, besøkende identifiserte, avtale scene endret eller tilpassede arrangement. Triggeres utfører kontakthandlinger, sende webhooks, oppdateringsoppføringer og varsle teamet ditt.

API byggmester

Visuell API og webhook-bygger inne i administratoren. Konfigurere endepunktene, testforespørsler, inspeksjonssvar og feilsøking integrasjon uten å forlate OpsIQ.

Team og administrasjon

Rollebasert tilgangskontroll

Tre roller: Eier (full adgang, fakturering, faresone), Full Admin (alle operasjonene bortsett fra fakturerings- og risikossonen) samt Agent (bare tildelt avdelingsavdeling. Alle sensitive sider er hardt plassert etter rolla.

Teamets ytelses dashboard

Eier og komplett Admin-bare dashboard som viser oppløsningstider, arbeidslastfordeling, håndtering dybden, kanalneddelingen, trendanalyse, SLA samsvar med agent CSAT av Agent, gjenåpningshastighetene, teamrullups og travleste timer. Oppdatert i sanntid

Admin tilstedeværelse og online sporing

Real-time som er online widget i admin navigasjonen. Heartbeat -basert tilstedeværelse deteksjon (60- Second ping, 300- sekunders forlengelse, autoprune etter 120 se hvilke administratorer som er aktive og på hvem sider.

Innstillinger for per arbeidsrom

Hvert tilkoblet nettsted (arbeidsplass) kan ha sin egen AI-konfigurasjon, konnektorinnstillinger, billettsavdelingene og driftsreglene. Globale standard caskade til arbeidsområder som ikke overstyr dem.

Flersetestyring

Administrer flere nettsteder fra én OpsIQ administrator. Hvert nettsted har sin egen sporingssnutt, besøksdata og konfigurasjon. Bytt mellom sider fra admin-navigasjonen.

E-postmalsystem

Registerdrevet e-postmaler for all automatisert kommunikasjon: billettevarsler, chattranskripsjoner, velkomstemails, passordoversettelser og system varsler. Rediger HTML maler med live forhåndsvisning, variabel chips ({{customer_name}}, {{ticket_id}}), og global layoutkontroll.

Import og eksport

Importere kontakter, billetter og kunnskapsartikler fra CSV/JSON. Eksportere besøkendes data, analyserapporter og CRM-registreringer; Dataportabilitet for migrant mellom systemer

Sikkerhet, overholdelse og drift

Enterprise SSO

OIDC (OpenID Koble til) enkeltinnlogging med full kjøringstid: oppdagelse, autorisasjon og tilbakekallelse av signaturkontroll fra JWKS-kontoen. SAML konfigurasjonsstøtte.

GDPR og overholdelse av data

Innebygget DSAR (Datasubjekttilgangsforespurnelse) håndtering: eksport og slette kundedata på tvers av alle systemer. Kontaktnivå datautrydning dekker økter, billetter, chatte, CRM-registreringer samt epostlogger. Samsvarlig styring og oppbevaringsregler.

IP blokkering og brukskraftbeskyttelse

Blokker spesifikke IPs eller varierer fra å få tilgang til nettstedet ditt eller administratoren. Automatisk låsing etter konfigurerbare mislykkede innloggingsforsøk. Mislyktes logg med IP, tidsstemple og brukeragent.

HSTS og sikkerhetshoder

HTTP Strict Transport Security, Tillatelser-Politiske headers og sikker informasjonskapselkonfigurasjon. Selvstyrte distribusjoner kan legge til CSP overskriftene gjennom server konvertering.

Utgående webhook herding

SSRF vaktblokker webhooks til privat/metadata IP rekkevidde. Sync levering hindrer langsomme endepunkter fra å blokkere applikasjonen din. Auto-disable etter 15 Påfølgende feil hindrer ressursavfall på døde endepunkter.

Arbeidsområdeisolasjon

Streng dataisolasjon mellom arbeidsområdene. Besøkende, billetter, chatte- og CRM-registrerer og AI-samtaler er dekket til arbeidsområdet sitt. Tverrarbeidsdatalekkasjer hindres i spørringslaget.

Fakturering av syklusstyring

Støtte for månedlige, kvartalsvise og halvårelige betalings-Sykluser. Valutanormalisering av multivaluta gateways. FX konvertering på betaling kvittering til nøyaktig inntektsrapportering

Krone og planlagt automatisering

Innebygd cronsystem for planlagte oppgaver: rapportgenerasjon, dataopprydding, abonnementsfornyelser, AI-trening oppdateringer, kontaktsynk og webhook retries. Helsediagnostik med varsling indikatorer

Databevaringspolicyer

Konfigurer hvor lenge besøkende sesjoner, chatttranskripsjonene og AI-samtaleloggen holdes. Automatisk opprydding av aldrende data for å administrere lagringsplassering og etterlevelsesregler.

Diagnostiske og helsemessige

System helse dashboard som viser Cron status, databasetilkoblingsstatus, AI-leverandørstatus, kontakthelse, webhook leveringshastigheter og lagring bruk. Advarsel for konfigurasjonsproblemer og ytelse flaskehalsene.

Hvem OpsIQ er for

E-handel butikker

Butikker

Spor hver besøkende fra landing til kjøp. La AI svare "Hvor er min bestilling?" ved hjelp av live Shopify/WooCommerce/BigCommerce-data. Administrer støttesaker med automatisk AI-svar. Kjør en avtalepipeline for engros og B2B-leads. Tilordne inntekter til trafikkilder og kampanjer. Overvåk handlekurvforlatelse med gjenopprettingsarbeidsflyter.

SaaS og programvareselskaper

SaaS

Overvåk prøveopptak og funksjonsadopsjon med økt replay. Spor hvilke dokumentasjon sider konverterer. Automatiser støtte med AI-grunnlagt i din API docs. Hanter abonnementets inntekter og utvidelse tilbud i CRM. Koble faktureringsplattformen (Stripe, WHMCS) for sanntid MRR sporing. Bruk CRM livssyklus agent til å oppdage og hindre churn.

byråer og frilansere

byrå

Tilby hvitmerkede analyser og støtteportaler til klientene. Spor fører på tvers av flere kundesider fra en administrator. Bruke CRM-rørledningen for å administrere utsiktspunkter og prosjektledere. Bygg tilpasset kontaktelementer for klientplattformen ved hjelp av Connector Builderen. Genert merkevare SEO rapporter med Site Intelligence. Reselg markedsforbindelser som verditilføyelsestjenester.

Vært og infrastruktur

Vert

Deep WHMCS integrasjon med 80+ AI-tiltak for ordreoppslag, servicestyring DNS, og levering. Auto-reply til vanlige hosting spørsmål ved hjelp av kunnskapsbase artikler. Spor server status side engasjement. Håndtere tekniske støtte billetter med AI triage. Bruk fakturerings syklus stige for månedlig gjennom levetiden hosting planer.

Støtte-tunge virksomheter

Støtte

Deflect 40-70% av repetitive spørsmål med AI chat som er grunnlagt i kunnskapsbasen din. Rute billetter til rett departement med AI triage. Spor teamets ytelse med oppløsningstid, SLA samsvar og CSAT ved agent. Bruk skrivende AI for profesjonell svarutarbeiding. Overvåk støtte trender med AI innsikt.

Markedsføring og SEO-team

Markedsføring

Full Site Intelligence-pakke: kryper, tekniske SEO revisjoner, innholdsanalyse, serp rangering av søkeordforskning og backlink monitoring. Google Business Profile management. Planlagt hvitmerkerapporter for klientene. A/B test bygget inn i sporingswidgeten. Campaign tilknytning på tvers over alle kanaler.

Solo grunnleggere og små lag

Oppstart

Start med bare sporing og chat, gratis å legge til. Deretter legg billetter når du får støttevolumet. Slå på CRM mens du begynner å selge. Koble plattformer som du adoptere dem OpsIQ fra én person som gjør alt til en 50-persondriftsteam med RBAC, avdelinger og per-agent ytelse sporing.

Enterprise og multi-brand

Enterprise

Bedrift SSO med OIDC for sentralisert autentisering. Multi-arbeidsrom isolasjon til separate merker eller divisjoner. Per arbeidsområde AI konfigurasjonen med ulike leverandører og modeller. Custom connector utviklingen med markedsplass distribusjon GDPR samsvarsverktøy og retningslinjer for datalagring.

Hva OpsIQ erstatter

Google Analytics + Hotjar+ Plausbar

Fulle nettstedsanalyser med besøkende sporing, sesjon replay, siderangeringer, geo intelligens, intensttrakter, konvertering tilskrivning, hendelser, A/B-eksperiment og JS feilsporing, alle personvernvennlige alt i én plattform.

Intercom + Drift+ Tidio

AI-drevet kundechat med kunnskapsgrunning, multileverandør AI support, autohåndoff til mennesker, proaktive pratregler, samtalehistorie, CSAT undersøkelser og billett opprettelse fra chat.

Zendesk + Freshdesk+ Hjelp Scout

Native billettsystem med avdelinger, prioriteringer, SLA-triage, AI-triasje og automatisk reply med konfigurerbar forsinkelse.

HubSpot + Pipedrive+ Salesforce

AI-første CRM med fire spesialiserte AI agenter (Steward, SDR, Retention, Analyst), Trust Dial autonomikontroll, rørledningsbrettet, avtale coaching, forutsetning, rekkefølger, livsyklusstyring og naturlig språk CRm konfigurasjon.

Ahrefs + SEMrush+ Moz

Nettsteds Intelligence med automatiserte kryp, tekniske SEO-revisjoner, innhold analyse, AI søk, SERP rang sporing, søkeord forskning, backlink analyse, lokale SO rutenett og planlagte hvitmerke rapporter.

Zapier + Lage + tilpasset mellomvare

Koble SDK med 25+ forhåndsbyggede kontakter, kontaktbygger (ingen kode/AI-støttet / fullkode), OAuth flow, webhook auto-registrering, en stor katalog av handlingsdefinisjoner som blir kjørbare bare når den aktuelle kontakten er installert, aktivert og validert, SmartLookup, markedsplass og signerte pakker.

Google Business Profile Manager

Full GBP-kontakt: gjennomgangshåndtering, postpublisering, Q&A management, fotoopplastinger, forretningsinfosync, innsiktsporing og AI-drevet anmeldelsesvar alt fra inne OpsIQ.

Separate e-postmalverktøy

Registreringsdrevet e-postmaler med visuell redaktør, live forhåndsvisning, variabel chips, global layoutkontroll og per arrangement tilpasning for all automatisert kommunikasjon.

Teamstyrings dashboard

Innbygget lagytelse: oppløsningstider, arbeidslast, SLA-overholdelse av agenten CSAT ved å åpne opp igjen priser, travleste timer, sporing i sanntid og inndelinger per department.

GDPR samsvarsverktøy

Innfødte DSAR håndtering, datasletting på tvers av alle systemer og samtykkestyring, retensjonsregler og revisjonstier som er bygget inn i plattformen.

To utgaver

Vertslig utplassering

OpsIQ kjører på kontrollert infrastruktur. Produktdrift er den samme; infrastruktur, oppdateringer og backup håndteres av hostingoperatøren. Denne håndboken dokumentere OpsIQ løpstid i stedet for markedsføring eller kommersiell konto flyter.

Selvværende modul

Installer OpsIQ på din egen server for full kontroll over data, merkevarearbeid og oppdateringer. 8.4+, MySQL 5.7+ eller MariaDB 10.3+, HTTPS og OpsIQ Unite cron. Støtter WHMCS integrasjon som en addonmodul. Full data suverenitet

Anbefalt leseordre

1
Rask start

Følg 30-minutters oppsett guide for å få sporing, chat og grunnleggende AI som jobber på nettstedet ditt.

2
Dashboard og analyse

Lær å lese besøksdataene dine, konfigurere øktspilling og identifisere spor.

3
Nettsteds Intelligence

Kjør din første SEO kryp, sjekk den tekniske helsen og konfigurer SERP rang sporing for mål-nøkkelord.

4
Billetter og støtte

Sett opp avdelinger, konfigurer automatisk med AI-en, koble epost inntak og tren din AI til å håndtere vanlige spørsmål.

5
CRM

Organiser kontakter, bygg rørledningen din, konfigurer AI-agentene, set Trust Dial nivåer og la AI coach dine tilbud.

6
Kontakter og utviklerverktøy

Koble din e-handel/billeringsplattform, bygg egendefinerte kontakter og installer via REST API.

💡
Ny til OpsIQ? Start med Hurtigstart guiden nedenfor. Du kan ha sporing og grunnleggende AI-chat kjører i under 30 - Minutt.
Start her

Rask start inn 30 min.

Følg disse trinnene for å få OpsIQ -kjøring. Hvert steg bygger på forrige. Ved slutten vil du ha besøkende sporing, AI chat og grunnleggende billettstøtte.

Oppsett
Sjekkliste for hurtigstartEn guidet installasjonskontrollliste som viser widget-installering, plattformtilkobling til AI-trening og teaminvitasjon. 60 prosent av fremdriftslinjen.Kom i gangsetupInstaller OpsIQ -elementetFERTIGKoble til en plattform (WHMCS, Shopify...)FERTIGTren din AI på innholdet dittFERTIGInviter teamet dittSjekk og gå liveOppstillingsframgang3 av 5 · 60%1STEP 1Installer widget2STEP 2Koble til og tog AI3STEP 3Inviter & gå live
Den 30-minuttsti: installer widgeten, koble til en plattform, tren AI-en din, invitere laget og deretter gå live.

Den 30-minutt oppsett

1
Aktiver lisens

Skriv inn lisensnøkkelen i OpsIQ admin. Gå til Innstillinger, skriv inn lisens nøkkelen som følger med denne installasjonen, og klikk Aktiver. Du bør se en grønn "Aktiv" badge.

2
Sett din forretningsidentitet

Gå til innstillinger og fyll ut firmanavn, bransje- eller tidssonetid. Denne informasjonen brukes av AI når du svarer på kundespørsmålene dine samt ved analyse for tidslinjebeskyttede rapporter.

3
Velg en AI-leverandør

Gå til AI-konfigurasjon og velg leverandøren din. Alternativer: Claude (Anthropic), GPT- 4o (OpenAI), Gemini (Google), eller Grok (xAI). Skriv inn din API Hvis du bruker din egen nøkkel, kan du velge å bruke Managed AI hvis det er tilgjengelig i abonnementet ditt.

4
Installer sporingswidgeten

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
Koble plattformen din

Hvis du bruker Shopify, WooCommerce, WHMCS, eller en annen plattform som støttes, gå til Connectors, finn din plattform og klikk på Testtilkobling. Dette gir AI tilgang til bestillingsdata, kundeprofiler og support-kontekst.

6
Inviter teamet ditt

Gå til Team, klikk Inviter og skriv inn e-posten sin (Owner eller Full Admin eller Agent). agentene kan kun få tilgang til avdelinger du gir dem. Eiere og fulle administrator ser alt.

Den raskeste mulige veien (5 minutter)

Trinn 1: Installer widget

Kopier snutt fra tilkoblede nettsteder og lim det inn på nettsiden. Dette gir deg sporing umiddelbart.

Trinn 2: Aktiver AI

Gå til AI-konfigurasjon, velg en leverandør og skriv inn nøkkelen din.

Ferdig

Du har nå besøkende sporing og AI-chat. du kan legge til billetter, CRM og kontakter senere.

dag 2: Gjør det nyttig

Legg til kunnskap

Gå til kunnskapsbase og legg 5-10 artikler om dine mest vanlige spørsmål. AI bruker disse til å svare kunder nøyaktig.

Opprette avdelinger

Gå til Tickets og opprett minst 2 avdelinger (f. eks. "Salg" og "Support") Tilordne teammedlemmer til hver.

Skriv din AI-prompt

Gå til AI-trening og skriv en kundebillett som beskriver virksomheten din, toneene dine og eskaleringsregler.

Test en samtale

Åpne nettstedet i en privat nettleser og chatte med AI som kunde. Sjekk at svarene er nøyaktige, og toneen har rett.

Uke 1Bygg dine operasjoner

Koble til e-post

Sett opp en postkasse (Gmail, IMAP, eller en leverandørkontakt) så kundee e-poster automatisk opprette billetter.

Sett opp autoreply

Aktiver billett auto-reply for trygge avdelinger. Velg en 2-minutt forsinkelse slik at mennesker kan intervenere først.

Gjennomgå analyse

Sjekk Dashboard daglig. Se på besøkende teller, studs rate, toppsider og salg hvis sporing er tilkoblet.

Start din CRM

Åpne AI CRM og la OpsIQ importer kontakter fra de tilkoblede plattformene. Se gjennom rørledningsbrettet

Måned 1: Optimer

Anmeldelse av AI-historie

Sjekk AI History ukentlig. Se etter feil svar, savnede spørsmål og muligheter til å legge til kunnskap.

Legg til proaktive regler

Opprette en regel: Hvis besøkende er på prissiden for 60+ sekunder, vis en chat melding spør om de trenger hjelp.

Bygg en kobling

Hvis du bruker en plattform som ikke har innebygd kontakt, bruk Connector Builder til å opprette én.

Sett opp webhooks

Koble til OpsIQ til dine interne verktøy ved hjelp av utgående webhooks for billett, chat og salgsarrangementer.

Kan jeg hoppe over AI og bare bruke sporing?+

Ja. AI-leverandøren er valgfri. OpsIQ fungerer som en ren analyse og billettplattform uten AI. Du kan aktivere AI senere når du er klar.

Kan jeg hoppe over kontakter og legge dem til senere?+

Ja. Koblinger beriger AI med plattformspesifikke data, men OpsIQ fungerer uten dem. Start med sporing og chatte, deretter koble til plattformene når det trengs.

Hva om jeg ikke har en nettside ennå?+

Du kan fortsatt bruke OpsIQ til billetter, CRM og teamsamarbeid. Sporingswidgeten er valgfri. Legg den når nettstedet ditt er klart.

Hvordan vet jeg om widgeten er installert riktig?+

Besøk nettstedet ditt i en privat/inkognito-nettleser. Deretter sjekker du OpsIQ Du bør se besøket ditt vises innen 24 timer. 15 Hvis ikke, sjekk: (1) er utdraget limt inn riktig, (2) er nettstedsnøkkelen riktig, (3) er annonseblokkere eller CSP-overskrifter som blokkerer skriptet.

Start her

Komplett produktkart

OpsIQ er ikke én funksjon. Det er en operatør admin, et nettsted widget, AI støttelag, billett / hjelpesystem, full CRM med fire AI-agenter, en Site Intelligence suite, en kontaktplattform med markedsplass og utvikler overflaten. Her er hver komponent den inneholder.

Operatør admin

Dashboard, live feed, besøkende loggen, sesjon replay, toppsider, geo-etterretningsenhet, intenst trakt, hendelser log, A/B eksperimenter, JS feilsporing, salg og konverteringar, lederne AI CRM (kommandosentrum, kontakter, selskapene, tilbud, rørledningskort, avtale coaching, prognoser, prospektering, livsyklus, dataadministrasjon API), billetter, chat-innboks, proaktive regler, CSAT spørreundersøkelser, epostutkast, postkasseer, AI konfigurasjon, AI trening, AI historie, AI innsiktsbase, kunnskapsgrunnlag, kontaktbyggere. markedsplassen, tilkoblede steder, teamstyring, lagytelse, innstillingene, diagnostikk og lisens.

Kundevendende overflater

Nettstedssporing widget (analytics beacon + chat + billett embed + kunnskap base søk), klient AI-prat, billettsinnsendelse portalen, besøkende identitet tokens håndtering, filopplastinger, CSAT undersøkelse widge og kundevendte hjelpesenter.

AI-Første CRM

Kommandosenteret, kontakter, selskaper, tilbud, rørledningsbrett med dra-og -dråper, AI håndtere coaching (risikosignalene, nest beste handlingen, gevinstsannsynlighet), inntektsprognose, prospekteringsmiddel (SDR) automatiserte oppfølgingssekvenser og oppbevaringsstyring av livsykluser, dataadministrasjonsagent (dedup, berikelse, validert); Bygg min CRM (naturlig språkoppsett), VR konfigurasjon, helsekontroll i CRm, Trust Dial (Autopilot/Copipar / Manual per agent), fire spesialiserte midler (Stéward, SDR, Retintion, Analyst). API med webhooks.

Site Intelligence Suite

Automatisert nettsted kryper, teknisk SEO-revisjon (speed, mobile, Core Web Vitals), SSL, omdirigeringer, strukturerte data), revisjon av innhold (ordtelling, leselighet, nøkkelordtetthet, overskriftsstruktur) AI-drevet semantisk søk, SERP rangering sporing på tvers av motorer, søkeord forskning med mulighet scoring, backlink analyse og overvåkning, lokal seo rutenett visualisering, Google Business Profile sync (reviews. innlegg, Q&A bilder, insikt), planlagte rapporter (daglig/ukentlig / månedlig). PDF Utgang for byråer.

AI og automatisering

Kunde AI chat (fleirtallsleverandør: Claude, GPT-4o Gemini, Grok), admin AI-assistent, AI kunnskapsgrunning og autohåndtak med konfigurerbar returtid. BYOK moduser, token budsjett og kostnadskontroll, AI-historiske revisjonsti, AI innsikt analyse, billetten AI triage, billetter automatisk reply med forsinkelser, skriving av AI (separate quick) og admin inbox copilot.

Kobling og integrasjon

25+ forhåndsbygde kontakter (Shopify, WooCommerce, StorHandel2, PrestaShop, OpenCartWordPress, WHMCS, Zendesk, StripeAmazon SES, Postmark, Resend, SendGridGmail, IMAP, Slack, Google Business Profile), Connector Builder (ingen kode/AI-assistert / fullkode)OAuthflyte med PKCE, kontaktmarked med betalt distribusjon og konnektor signering og verifisering, SmartLookup uklar matching, en stor katalog av HTTP-aksjonsdefinisjoner hvis tilgjengelighet er avhengig av installasjon i forbindelseskontakten, aktivering, konfigurering og validering, kunnskap synkronisering og arbeidsflyt oppskrifter.

Utviklerplattform

RESTAPI(besøkere, hendelser, billetter, kontakter og innstillinger), OpenAPI-spesifikasjonenAPI nøkkelhåndtering, utgående webhooks (async, signerte og retried, SSRF-beskyttet), hendelserAPI for egendefinert inntak av hendelse, widget SDKmed identitetsoppløsning, utløser kokebok, handlingsavtaler og kontakt SDK, markedsemballasje, serversiden SDKs (PHS og Node.js), WordPress plugin, og WHMCS modul.

Innstillinger og operasjoner

Forretningsidentitet, AI-konfigurasjon per arbeidsområde, sporingsinnstillinger og sikkerhet (HSTS) IP blokkering, brute-force beskyttelse), RBAC (Owner/Full Admin / Agent) team management og invitasjoner, lagytelses dashboard, administrasjon tilstedeværelse sporing, epostmal system (registrert, visuel redaktør, variable chips), undersøkelse designere, domenet kunnskap, billetten embed konfiguration, merkevare, dataretensjon retningslinjer, fakturerings syklus ledelse (månedlig gjennom levetid); valuta normalisering, import/eksport, diagnostikum, Cron automatisering og faresone.

Sikkerhet og overholdelse

Bedrift SSO (OIDC med JWKS-verifisering, JIT tilveiebringelse), SAML konfigurasjon, GDPR/DSAR håndtering (eksport og sletting på tvers av alle systemer), dataslettelse per kontakt, samtykkehåndtering, arbeidsområdeisolasjon (begrenset spørringslaging), revisjonstier, feilaktig innloggingssporing. IP blokkere, utgående webhook SSRF-vakt og databevaringspolicyer.

Tilbyder bro

Administrert AI-utstyr OpsIQ leverandør URL, Site Intelligence-leverandøren kaller til seg lisensvalidering og helserapporter. PDF gjengivelse og dataeksport, alle rutet gjennom det konfigurerte leverandørendpointet, ikke direkte selgeren API Ring fra serveren din.

Hver admin-side

Instrumentpanel

Kjerne

Daglig kommandosenter: trafikkoversikt, live besøkende teller, salgssamandrag, støttekødybde, AI-aktivitetsvarsler og snarveistastar.

Direktestrøm

Analyse

Real-time besøkende stream: sidevisninger, chat starter, skjema innsendelser og intensjon signaler oppdatere hvert sekund med land, enhets-og referansefiltre.

Besøkslogg

Analyse

Fullstendig besøksposter: enhet, nettlesere, OS-system, land, by, referanser, UTM params, landingside, identitet og full sidevisningshistorikk.

Sessioner

Analyse

Reise-gruppert visning: sidestrøm, tid på sidene, rulledybde, konverteringssti og avslutting for hver besøkende sesjon.

Øktgjentakelse

Analyse

Tidslinjeavspilling av fanget hendelser: musebevegelse, klikk på ruller og sideoverganger.

Toppsider

Analyse

Sideytelsesrangering: besøk, engasjementstid, studsehastigheter og konverteringer.

Geo-etterretning

Analyse

Geografiske rapporter: land/by-inndeling med kart, enhetsfordeling, nettleserandel, trafikkkilder og markedsgjennomtrengning.

Forsettlig trakt

Analyse

Atferdsmessig intensjon sporing: prisbesøk, returfrekvens, doc surfing, støtte samhandlinger og tilpassede signaler med konvertering sannsynlighet.

Hendelsers logg

Analyse

Søkbar hendelse historie: sidevisninger, tilpassede arrangementer, chatter, kjøper, skjema innlegg med full metadata og filtrering.

A/B-eksperimenter

Analyse

Split testing: lage varianter, tildele trafikken, definere mål, måle betydningen og erklære vinnere alle fra innsiden OpsIQ.

JS-feil

Analyse

Frontend feilopptak: meldinger, stabelspor, berørte nettlesere, frekvens, påvirket sider og trend sporing.

Salg

Salg

Inntekts dashboard: bestillinger, fornyelser og refunderinger. Tilknytning etter kilden, kampanjeytelse, periodesammenligning samt trendanalyse

Ledere

Salg

Ledende ledelse: score, kilde tilskrivning, CRM status, kontaktinformasjon, atferdssignaler og rørledning rutine.

AI CRM

CRM

Full CRM: kommandosenter, kontakter, selskaper, tilbud, rørledningsbrettet, coaching, prognoser, prospektering, rekkefølger, livscykel, datastyre og helse.

Biljett

Støtte

Støtte innboksen: avdelinger, prioriteringer, SLA sporing, AI triage, auto-reply, interne notater, filvedlegg, sammenslåings og statushåndtering.

Chat innboks

Støtte

Live-samtaler: AI og menneskelig chat, håndoff, samarbeid, samtalehistorie, kundeidentitet samt CSAT samling.

E-postutkast

Støtte

E-posthåndtering: inngående email til billetter, AI-assistert svarkomposisjonen og malvalget.

AI-oppsett

AI

Leverandøroppsett: Velg Claude/GPT-4o /Gemini/Grok, skriv inn API nøkkel eller aktivere administrert AI, satt modell, temperatur og token budsjett per arbeidsområde.

AI-trening

AI

Spør forfatterskap: kundevendende og admin-vendte spørringer, eskaleringsregler, toneretningslinjer, forbudt emner og grensekonfigurasjon.

AI historie

AI

Konversasjonsrevisjon: full forespørsels-/responslogger, tokenbruk, kostnader per samtale, leverandør, modellversjon og oppløsningsutfall.

AI-innsikter

AI

Mønsteranalyse: vanlige spørsmål, oppløsningshastigheter, avleveringsfrekvensen, tilfredshet etter emne og treningsgap identifikasjon.

Kunnskapsbase

AI

AI-trening innhold: artikler, FAQ oppføringer, produktdoks, kontakt kunnskap og egendefinerte poster. Semantisk og søkeord søk etter AI bakker.

Koblinger

Integrasjoner

Integrasjonshub: installerte kontakter, helsestatus, handlingsoversikter, kresentiell styring og markedslesere.

Tilkoblede nettsteder

Innstillinger

Nettstedshåndtering: sporing av snut, nettstedsnøkkel, widgetkonfigurasjon, domeneinnstillinger og arbeidsområdeisolering per-side.

Lag

Innstillinger

Brukeradministrasjon: invitere medlemmer, tildele roller (Owner/Full Admin / Agent), satt avdelingsadgang og administrere tillatelsene.

Teamets ytelse

Innstillinger

Ops metrics: oppløsningstid, arbeidslast, SLA compliance, CSAT av agenten, gjenåpningshastigheter, travleste timer og trendanalyse.

Innstillinger

Innstillinger

Konfigurasjon: forretningsidentitet, AI-oppsett, sporing, sikkerhet, merkevarebygging, retensjon, epostmalers, faktureringsarbeid, import/eksport av diagnostikk og faresone.

Lisens

Innstillinger

Planledelse: lisensstatus, planfunksjoner, bruksmatrise, fornyelsesdato og oppgradering/nedgraderingsalternativ.

Start her

Guidet onboarding

Om bordturen gjør en ny installasjon til et arbeid OpsIQ Arbeidsplass og kan bli igjen uten å miste utviklingen.

Produktskjerm
OmbordOmbord viser hvert oppsettsområde, dens nåværende tilstand og neste handling å fullføre.OmbordarbeidsflatePROGRESS60%COMPLETED6NESTEElementLIV ARBETSPESSONELisensValider produktlisensenFerdigAI-leverandørVelg leverandør og testnøkkelFerdigMerkeBedriftsidentitet og toneFerdigNettstedLegg til nettsted og installer widgetNeste1COMPLETE BASICSLisens, merkevare2CONNECT DATANettsted og kontakt3VERIFY LAUNCHTeam, e-post
Ombord viser hvert oppsettsområde, dens nåværende tilstand og neste handling å fullføre.

Anbefalt sekvens

  1. Lisens: Valider lisens og bekrefte at arbeidsområdet er aktivt.
  2. AI-leverandør: Velg leverandør/modell, skriv inn legitimasjoner og kjøre tilkoblingstesten. AI kan hoppes hvis arbeidsområdet i utgangspunktet vil bruke analyse-og billetter kun.
  3. Bedriftsidentitet: angi navn, bransjen, beskrivelsen og kundevendende tone-og merkedetaljer som brukes av widgeten.
  4. Koble til: muliggjør minst én ekstern plattform når OpsIQ trenger bestillinger, kunder, billetter eller annen plattform sammenheng.
  5. Nettsted og widget: opprette nettstedet/arbeidsrommet, kopiere nettsiden og verifisere et privat nettleserbesøk i Live Feed.
  6. Team og routing: invitere administratorer/agentene, opprette avdelinger, sette e-postruting og bekrefte varslingsinnstillinger.
  7. Go-live kontroller: testchatt, billett, kontaktsynkronisering, krone, utgående e-post, webhooks og sikkerhetshoder.

Reisen lagrer ferdigstillelse per arbeidsområde. Tilbake til onboarding bør vise fullførte trinn i stedet for å tvinge en omstart.

Start her

Administrasjons- og autorisasjonstillatelser

OpsIQ - sidepanelet er autorisasjonsbeskyttet. Dette kartet forklarer hvor hvert operativt område bor, og hvorfor en siden kan ikke være synlig for hver enkelt administrator.

Produktskjerm
OpsIQ navigasjonSidepanelets grupper OpsIQ etter arbeidsområde; individuelle lenker vises bare når den gjeldende rollen kan bruke dem.OpsIQ navigasjonarbeidsflateGROUPS8BIBELERTilgang basertSEARCHTilgjengeligLIV ARBETSPESSONEStøtteBilletter, e-post, CSATÅpneCRMKontakter, rørledning, tilbudÅpneAutomasjonArbeidsflyter, reglerÅpneSikkerhet og personvernOversikt, revisjons- og samtykkebekreftelseAdministrator1PICK A GROUPPasser til sidepanelet2CHECK ROLESkjulte midler begrenset3USE PAGE HELPÅpne den matchende delen
Sidepanelets grupper OpsIQ etter arbeidsområde; individuelle lenker vises bare når den gjeldende rollen kan bruke dem.
Støtte

Billetter, teamets e-postplattform, CSAT og Hjelpesenteret flyter.

CRM

De daglige salgsflatene: CRM Home, Kommandosenter, kontakter, rørlednings- og livscyklusprognose, prospektering, segmenter, lederbrettet, avtalegodkjenninger, datastyrende, vekstverktøy og aktivitetsstrømmen.

Automasjon

Eventdrevet arbeidsflyt, livssyklusregler og konverteringsmål.

Markedsføring

Utvendig, proaktive meldinger, kunngjøringer, kampanje Studio, Survey Studio, pressekampanjer og guidede turer.

Analyse

Report surfaces first — Analytics Hub, AI insights, sales, customers, leads, funnels, A/B tests, session replay, custom dashboards and scheduled reports — with the raw visitor, session, page, geography and event logs in a Raw Data sub-section.

Registrer deg på sider

Nettsted Intelligence, Team Performance og Feedback sitter utenfor gruppene som direkte oppføringer.

Integrasjoner

Koblinger, handlinger og utløsere, postkasser, utkast til e-postinnstillingene, inngående endepunkter, utgående webhooks og API nøkler.

Sikkerhet og personvern

Sikkerhetsoversikt, personvern og overholdelse av kravene til informasjonskapsler.IPsogJavaScriptfeil.

Innstillinger

Arbeidsplass grunnleggende (generelt, teamet, nettsteder, språk), deretter sammenleggbare underavsnitt: AI-brain (instrumentasjoner, konfigurasjonene, evalueringen, historien) CRM Oppsetning (bygger, tilpassede felt, blyskåring, helse), Data og Helse (diagnostiske, eksport) og Getting Started (onboarding, hjelp).

Sider som ikke kan åpnes, er skjult fra sidepanelet. Sidene den gjeldende planen inkluderer ikke å holde seg synlig med en Oppgradering tagge og åpne en i-app oppgraderingsskjerm.

Direkte ruter er fortsatt kontrollert serversiden. Å skjule en sidelinjelenke er ikke sikkerhetsgrensen: hver beskyttet handling må passere tillatelse og arbeidsområdekontroller.

Analyse

Analysesenter

Analytics-hubben gir støtte, chatt, AI og agent rapportering til ett datofiltrerte arbeidsområde med eksportbare resultater.

Produktskjerm
AnalysesenterAnalytics Hub viser et datoområde, metriske kort og faner for støtte-, Chat- eller AI-funksjonen.AnalysesenterarbeidsflateBILLETTER184AI RESOLVE63%CSAT4.7LIV ARBETSPESSONEStøtteOpprettet, lukket og venter på SLAFaneChatAI/menneskelige resultater og håndtere tidFaneAITroverdighet, tilbakemeldinger og tokenbrukFaneAgentVolum, hastighet og tilfredshetFane1CHOOSE DATESForhåndsinnstillinger eller tilpassede2CHANGE TABStøtte til agent3EXPORTLast ned CSV
Analytics Hub viser et datoområde, metriske kort og faner for støtte-, Chat- eller AI-funksjonen.

Filtre og kontroller

  • Bruk en forhåndsinnstilling eller et eget fra/til Velg, og oppfrisk for å gjenoppbygge hvert kort og diagram i samme periode.
  • Eksporter CSV eksportere aktiv analytisk visning i stedet for et skjermbilde.
  • Arbeidsområdescoping er automatisk; endrer nettsteder forandre det underliggende datasettet.

Hva hver fane måler

  • Støtte: billetter opprettet / lukket/avhengig, første svar, oppløsning, første kontaktoppløsning, SLA og prioritets-/department/status inndelinger.
  • Prate: økter startet, AI-oppløsningene, eskalering av oppsigelser, bortkasting og håndtering av tid, meldinger per sesjon samt AI/human/all CSAT.
  • AI: gjennomsnittlig tillit, lav-tillitsrate, triage nøyaktighet, tilbakemeldinger, kunnskap avbøyning, token/kakebruk og elementene som trenger gjennomgang.
  • Besøkende: trafikk og engasjement trender i den valgte perioden.
  • Agent: per-agent arbeidsbelastning, hastighetsinnsats og tilfredshet.

Bruk Analytics Hub for gjennomgang av tverrlaget; bruk dedikerte besøkende, billetter, CSAT-siderne AI History og Team Performance når du trenger rekordnivåundersøkelse.

Analyse

Dashboard

Dashboard er det daglige kommandosenteret. Det viser trafikk, salg, støttebelastning, AI aktivitet og konverteringsindikatorer i én visning. Åpne den hver morgen for å forstå hva som skjedde over natten og hva som trenger oppmerksomhet idag.

Instrumentpanel
Oversikts dashboardOversiktsskjermen ledet av et OpsIQ Intelligence AI-panel (med daglig korte, smart varsler, prognoser), KPI widget fliser og en syv dager lang trafikk widge plus en Tilbakestill layout kontroll.OversiktarbeidsflateOPSIQINTELLIGENCEVelg en analyse og OpsIQ skriver denDaglig kortSmarte varslerPrognoseTilbakestill layoutVisitorer i dag2,481+12%INNTEKTER$8.2k+5%Åpne billetter143 SLATrafikk · siste 7 -dager1AI-FIRSTOpsIQ Service-panelet2WIDGETSKPI fliser du arrangerer3DineTilbakestill layout når som helst
Den virkelige oversiktsskjermen: OpsIQ Intelligence-panelet oppe (plukk en analyse og det skriver den) ovenfor KPI widgetene du arrangerer deg selv.

Dashboard-kort som forklares

Live besøkende

Antall personer som er på nettstedet ditt akkurat nå. Dette oppdateres hver 15 En besøkende er "aktiv" hvis de lastet en side innenfor den aktive terskelverdien (standard: 0). 90 sekunder).

Unike besøkende

Hvor mange forskjellige besøker nettstedet ditt i det valgte datoområdet. OpsIQ identifiserer besøkende ved en kombinasjon av nettleser fingeravtrykk, informasjonskapsler og (dersom det er tilgjengelig) autentisert identitet.

Ny vs retur

Nye besøkende ser nettstedet ditt for første gang. Returnerende besøkende har blitt sett før. Et høyt returforhold betyr at innholdets fører folk tilbake. En svært lav avkastningsforhold kan bety du ikke beholder interesse.

Sprettfrekvens

Andelen besøkende som dro etter å ha sett bare én side. En studsrate over 70% På landingssider betyr vanligvis at siden ikke oppfyller besøkendes forventninger, feil innhold, langsom belastning eller dårlig mobilopplevelse.

Gjennomsnittlig tid på siden

Hvor lange besøkende bruker på hver side i gjennomsnitt. Svært korte ganger (under 10 sekunder) på innholdssider tyder ikke at innhaldet er engasjerende. Veldig lang tid på uttjekningssiden kan indikere forvirring.

Trusler blokkert

IPadresser som OpsIQ identifisert som potensielt skadelig basert på trusselssporing, brutekraftforsøk eller manuell blokker. Klikk for å se den blokkerte IPs Liste.

Salg i dag / denne uken/i år

Inntekter fra tilknyttede salgskilder (Shopify, WooCommerce, Stripe osv.). Hvis salg viser null, sjekk at plattformkontakten er tilkoblet og synkroniserer.

Trenddiagram

En linje graf som viser besøkende teller over det valgte datoområdet. Se etter mønstre: trafikk pigg (kampanjer, trykknotasjon), dypper (ukeends, helligdag) og vedvarende trender.

Toppkilder

Hvor besøkende kommer fra: direkte, Google, sosiale medier, e-postkampanjer og henvisningsnettsteder. Bruk dette til å forstå hvilke markedsføringskanaler som fungerer.

Topp nettlesere

Chrome, Safari og Firefox. Hvis en nettleser har uvanlig høy studshastighet kan det hende du vil ha et CSS eller JavaScript Problem med kompatibilitet.

Hourly Heatmap

Et rutenett som viser besøkende aktivitet etter time på dag og uke. Bruk dette til å bestemme når du skal planlegge støtteskift, når de vil sende kunngjøringer, og når kampanjene skal kjøres.

Nylige besøkende

De siste få besøkende med land, side og kilde. Nyttig for raske spot-sjekker under kampanjene.

Bruke datoområdefilteret

Klikk på datovalgeren øverst til høyre for Dashboard. Forutsetninger: I dag, i går 7 dager, Siste 30 dager, I denne måneden i forrige måned. Tilpasset område. Alle dashboard-kort og diagrammer oppdateres når du endrer området. Datoområdet er på den konfigurerte tidssonen din (sett i Innstillinger).

Funnet eksempler

Bounce rate pigg undersøkelse

Scenario:
Din støtfrekvens hoppet fra 45% til 78% Hva skjedde?
Hva skal jeg gjøre:

Sjekk: (1) Endret en bestemt landingsside? Gå til Toppsider og sorter etter studs. (2) Har en kampanje sendt trafikk til feil side? Sjekk Toppkilder for nye referansere. (3) Har nettstedet pause på mobil? Sjekk nettleserneddeling for mobil studs. (4) Er det bottrafikk? Sjekk trusselen mot og besøkende detaljer for mistenkelige mønstre.

Null besøkende på dashboard

Scenario:
Dashboard viser 0 live besøkende, selv om nettstedet ditt får trafikk.
Hva skal jeg gjøre:

Sjekk: (1) Er sporings widget installert? Vis nettstedets kildekode og søk etter den OpsIQ script. (2) Er nettstedsnøkkelen riktig? Sammenlign data-sidetasten i skriptet med nøkkelen på tilkoblede sider. (3) Er en CDN eller cache som betjener en staveside uten skriptet? Fjern din CDn-buffer. (4) Er en annonseblokker eller CSP-hode blokkering av skriptet? Sjekk nettleseren konsollen for blokkerte henvendelser.

Lese timevarmekartet

Scenario:
Varmekartet ditt viser kraftig aktivitet mellom 10 og 2 på hverdagene, men ingenting i helgene.
Hva skal jeg gjøre:

Dette er et B2B trafikkmønster. Dine besøkende jobber fagfolk som surfer i løpet av virketiden. Implications: (1) Planlegg støttepersonell for hverdagens virkedag. (2) Send e-postkampanjer tirsdag - torsdag morgen. (3) Weekend vedlikeholdsvinduer er trygge. (4) Vurder å tilby live chat kun i topp timer.

Trafikk spike fra ukjent kilde

Scenario:
Du ser en plutselig pigg av 500 Besøkende i løpet av en time fra ukjent referanse.
Hva skal jeg gjøre:

Gå til besøkende og filtrer etter tidsvinduet. Sjekk: (1) Er de ekte besøkende eller bots? Se på sesjon varighet, sider som vises og nettleser mangfold. (2Hvis det er sant, hvilken side lander de på?3) Sjekk referanser URL. Noen kan ha knyttet til deg fra Reddit, Hacker News eller en populær blogg. (4) Hvis det er bot trafikk, sjekk trussel og vurdere å blokkere IP Det er rekkevidde.

Hvorfor skiller besøkende seg fra Google Analytics?+

OpsIQ teller besøkende annerledes. Det bruker nettleser fingeravtrykk og informasjonskapsler, mens GA benytter en annen cookie-modell. Bot filtreringsfrekvensene for annonseblokkere kan også føre til forskjeller. A 10-20% Varians er normalt.

Kan jeg legge inn instrumentbordet i et annet verktøy?+

Dashboardet er designet for OpsIQ administrator. For ekstern rapportering, bruk REST API å trekke analysedata og vise dem i ditt eget instrumentpanel eller BI verktøy.

Hva betyr "trusler"-telleren?+

Det teller IP adresser som OpsIQ har flagget eller blokkert basert på trusselssporing, gjentatte feilmeldinger som mislyktes. Klikk på kontra for å se detaljer og administrere blokkene.

Analyse

Besøkslogg

Visitor-loggen viser hvert besøk på dine sporte nettsteder. Hver rad er én sidelast fra en gjest. Bruk den til å undersøke individuell besøkendes oppførsel, finne kampanjetrafikk og diagnostisere sporingsproblemer.

Besøkslogg
BesøksloggEn besøkende tabell med en filterlinje (dato, søk IP/email/city, kilde- og enhetskolonner)IP/ email, plasseringen, kilden, enheten og tiden med en flagget trussel rad.Besøksloggyoursite.com7 DagerSøk IP, e-post, by...Kildekode ▾Enhet ▾IP / EMENDLOKASJONSERVICEENHETERNår[email protected]USA · New YorkgoogleSkrivebord2m41.62.10.4StorbritanniadirectMobil6m[email protected]DE · Berlinutm: adsMobil14m203.0.113.9NG· LagosreferralSkrivebordthreat1–25 av 3,402Økt →1FILTERDato · søk · kilde · enhet2REAL COLUMNSIP/ email · plasseringen av enheten3DRILL INÅpne hele sesjonen
Den virkelige besøksloggen: filtrer etter dato, søk og enhet. Les deretter hvert besøk av IP/ email, plasseringen, kilden og tiden, trusler flagget i rødt.

Hva hver rad viser

IP Adresse

Den besøkendes IP adresse. anonymisert hvis IP anonymisering er aktivert i innstillinger. Klikk for å se alle besøk fra dette IP.

Land og by

Oppdaget fraIP Krever MaxMind GeoLite2-database eller. Cloudflare Viser « Ukjent » hvis GeoIP ikke er satt opp.

· Side URL

Siden den besøkende lastet inn. Klikk for å se hele URLLangt URLs er avkortet i tabellvisningen.

Referanse

Hvor den besøkende kom fra før han/hun landet på nettstedet ditt. «Direkte» betyr ingen henvisning (bokmerker, URLs-tekst, noen appkoblinger).

Enhet og nettleser

Besøkendes enhetstype (skrivebord, mobile, nettbrett) og browser (Chrome, Safari, Firefox osv.). Tolket fra bruker-agent header.

Dato og klokkeslett

Når siden ble lastet, i den konfigurerte tidssonen.

Kundesidentitet

Hvis besøkende er identifisert (via identitetssymbol eller innlogging), vises navnet eller e-posten. Ellers viser det seg anonymt.

Filtre

Datoområde

Filtrer besøk til en bestemt tidsperiode. Standard: siste 7 -dager

Søk

Søk etter IP adresse, side URL, referanser, land eller kunde e-post.

Kilde

Filtrer etter trafikkkilde: Direkte, Økologisk og sosialt.

Enhet

Filtrer etter skrivebord, mobil eller nettbrett.

Bare nytt

Vis kun førstegangsbesøkende som aldri har blitt sett før.

Funnet eksempler

Finn besøkende fra en bestemt kampanje

Scenario:
Du lanserte en Google Ads-kampanje med UTM parameter utm_source=google&utm _medium = cpc & utm/campaign=sommersalg. Hvordan finner du disse besøkende?
Hva skal jeg gjøre:

I besøksloggen, bruk søkefeltet og skriv inn "sommer-salg". Søket sjekker referrer URLs og side URLs Du kan også filtrere etter Kilde = Betalt for å begrense søket enda mer.

Finn en kunde som rapporterte et problem

Scenario:
En kunde sendte en e-post som sa: «Kassesiden din ble brutt i går rundt klokken 15.»
Hva skal jeg gjøre:

Søk på e-postadressen i besøksloggen. Hvis de var logget inn, vil identiteten din vises. Sett datoområdet til i går. Se etter besøk for å sjekke ut sider rundt kl 3pm. Klikk sesjonen deres for å se full sidestrøm og alle JavaScript feilene.

Oppdag en loop hiter eller skrapemaskin

Scenario:
Du legger merke til en IP Adressen har 500+ besøk på en time, alle til samme side.
Hva skal jeg gjøre:

Dette er sannsynligvis en bot, skraper eller ødelagt skript. Gå til Visitor Logg og søk med det IP Sjekk: (1) Er alle besøk på samme side? (2Er brukeragenten en kjent bot? (3) Er sesjonens varighet alltid 0 Hvis bekreftet som en bots, gå til Sikkerhet og blokkere IP.

Visitor log vs Sesjoner vs Live feed

Besøkslogg

En rad per sidevisning. Best for: å undersøke bestemte sider, finne trafikk fra spesifikke kilder og diagnostisere sporingsproblemer.

Sessioner

Grupper sidevisninger i reiser. En rad per besøksøkt. Best for: å forstå brukerstrøm, måle sesjon varighet og identifisere konverteringsveiene.

Direktestrøm

Real-time aktivitet. Viser besøkende for tiden på nettstedet ditt. Beste: overvåking kampanjer i gang, spotting høy intente gjestene og se støttemuligheter.

Hvorfor ser jeg mine egne besøk i loggen?+

OpsIQ sporer alle besøk som standard. For å utelukke din egen trafikk, legg til ditt IPAdresse til det utelukkede IPs liste i Innstillinger > Sporing.

Hvorfor viser en besøkende "Ukjent" land?+

GeoIP-oppslag krever heller Cloudflare geo-hoder (automatisk hvis du bruker Cloudflare) eller en MaxMind GeoLite2-databasefil. Sjekk Innstillinger > geoIP-sti for å sikre at databasefila eksisterer og er lesbar.

Hvor lang tid har besøksdata lagret?+

Besøksdata blir lagret for oppbevaringsperioden som er konfigurert i Innstillinger (standard: 90 -dager). Etter det rengjøres gamle poster automatisk av cron retention jobb.

Analyse

Sessioner

Sessionene grupperer flere sidevisningar fra samme person til en enkelt reise. Mens Visitor-loggen viser individuelle sider, vises sesjoner hvordan folk beveger seg gjennom nettstedet ditt fra landing til avslutning.

Sessioner
SessionerSession Log tabellen med IP, land- og enhetskolonner, kildeverdier, varighet og sider samt en flagget trusselrad.Sessioneryoursite.comLand (NG)SessionsloggIP(S)LANDRYENHETERSERVICEKJØPBIBELER41.62.10.4StorbritanniaSkrivebordgoogle3m12s6102.89.6.2NGMobildirect1m05s388.21.4.9NOSkrivebordutm: ads7m48s11203.0.113.9USAMobilreferral0m42s21SESSION LOGGruppereiser2COLUMNSLand · enhet · kilde · varighet3THREATRisikofylte sesjoner som flagges
Den virkelige Session Log: hver besøkende reise som en rad (IP, land og enhet med risikabele økter som er flagget i rødt.

Hvordan økter fungerer

En sesjon starter når en besøkende laster inn sin første side. Den fortsetter mens de navigere til flere sider. Et økt avsluttes når den som er inaktiv for tidsavbruddet i økta (standard: 30 minutter) eller stenger nettleseren. Den samme personen som kommer tilbake etter tidsavbruddet, skaper en ny økt.

Hva hver sesjon viser

Første side

Landing siden, hvor besøkende skrev inn nettstedet ditt. Dette forteller deg hvilket innhold tiltrekker folk.

Siste side

Utgangssiden, der besøkende forlot. Hvis utgangen siden ofte er prisside kan besøkere sammenligne deg med konkurrenterne.

Sidetall

Hvor mange sider den besøkende så på i denne sesjonen. Flere sidene betyr vanligvis mer engasjement, men det kan også bety at gjesten er tapt.

Varighet

Total tid fra første side belastning til siste aktivitet. Sessjoner med 0 sekunder er spretter (enkelt sidevisning, ingen ytterligere interaksjon).

Kilde

Trafikkkilden til denne sesjonen (Direkt, Google, sosialt jämt referanse etc.).

Land

Oppdaget land fra besøkendes IP -adresse.

Bunce

Om besøkende har forlatt etter å ha sett bare én side. Utstøtte økter kan være rødt.

Konvertering

Om besøkende fullførte en sport konverteringshending (kjøp, tilmelding og skjemainnsendelse) under denne sesjonen.

Filtre

Søk

Søk etter IP, e-post, siden URL, eller referere i sesjon.

Type

Filtrer etter nye besøkende (første økt noensinne) eller returnerende besøkere.

Kilde

Filtrer etter trafikkkilde.

Land

Filtrer etter land for å se økter fra en bestemt region.

Trusler/Bonunced

Filtrer for å vise bare studsede økter eller sesjoner flagget som trusler.

Funnet eksempler

Profil en høyverdikunde

Scenario:
En kunde gjorde bare et stort kjøp. Du ønsker å forstå deres reise før du kjøper.
Hva skal jeg gjøre:

Søk etter e-post i Sessionene. Sjekk alle økter: (1) Hvor mange ganger besøkte de før du kjøpte? (2) Hvilke sider så de? (3) Bruker du chat eller åpner billett? (4) Hva var den totale tiden fra første besøk til kjøp? Dette forteller deg typisk kjøpe reise for høyverdi kunder.

Oppdag innlogging fra en ny plassering

Scenario:
En kunde vanligvis logger seg inn fra Nigeria, men du ser en sesjon fra Russland.
Hva skal jeg gjøre:

Søk etter kundens e-post i sesjoner. Sammenlign landet av nylige økter. Hvis en sersjon plutselig vises fra et uvanlig land, kan det være legitim reise eller en kompromittert konto. Sjekk: (1Var det et mislykket innloggingsforsøk før den vellykkede?2) gjorde det IP endre i samme økt? Merk det for gjennomgang hvis mistenkelig.

Hva er forskjellen mellom en sesjon og besøkende?+

En besøkende er en person (eller nettleser). Et møte er et besøk fra den personen. Den samme gjesten kan ha mange sesjoner over tid. Sessions utløpe etter tidsavbruddsperioden.

Hvordan gjør OpsIQ identifisere tilbakekomne besøkende?+

OpsIQ bruker en kombinasjon av informasjonskapsler, fingeravtrykk fra nettleseren og autentiserte identitetssymboler. Hvis besøkende tømmer sine cookies og ikke er logget på vil de vises som nybesøkende.

Analyse

Direktestrøm

Live Feed viser besøkende på nettstedet ditt i sanntid. Det oppdaterer automatisk hver 15 sekunder (konfigurerbar). Bruk det under kampanje, produktlansering og travle støtteperioder for å se hva som skjer akkurat nå.

Direktestrøm
DirektestrømEn aktivitetsstrøm som viser et live-intervju med internett og en fôring av nylige besøkende handlinger fra land.Direktestrømyoursite.com37besøkende på nettet nåLive aktivitetUSA · visning /pricing2sNorge · startet en prat5sDE · lagt i handlekurven9sCA · fullført registrering1RIGHT NOWSe hvem som er på stedet2AUTO-REFRESHOppdaterer hver 15s3HANDLINGHopp inn i en live chat
Se hvem som er på nettstedet ditt i andre omgang og hva de gjør, forfriskende automatisk hver 15 sekunder.

Hvordan det fungerer

Live Feed-undersøkelsen viser serveren din på det konfigurerte oppdateringsintervallet. Hver rad vises en besøkende som er i bruk på nettstedet ditt: deres nåværende side, land, enhet, kilde, sesjonsvarighet og sidertelling. Grønne høydepunkter indikerer ny aktivitet siden den siste oppfriskningen. Klikk på enhver gjesterrekkja for å få vist hele øktdetaljene sine.

Innstillinger

Oppfrisk intervall

Hvor ofte de levende feed-oppdateringene. Standard: 15 sek. Lavere verdier (5-10s) gi raskere oppdateringer, men bruk mer serverressurs. Høyere verdi (30-60s) er enklere på serveren, men mindre sanntid.

Aktiv terskel

Hvor lenge en besøkende anses å være aktiv etter siste sidelast. Standard: 90 sekunder. Hvis en besøkende laster inn en side og deretter leser den for 2 minutter uten å klikke, forsvinner de fra levende fôr etter terskelen.

Pausa-knappen

Klikk på pause for å stoppe automatisk oppfriskende. Nyttig når du vil lese detaljer uten listeoppdateringen. Trykk På Fortsett og start om igjen.

Funnet eksempler

Finn et varmt resultat under en kampanje

Scenario:
Du kjører et produkt lansering. En besøkende har nettopp sett på hjemmesiden din, deretter funksjoner og priser, og er nå på uttjekningssiden !
Hva skal jeg gjøre:

Dette er høy-intent oppførsel. I Live Feed: (1) Klikk på besøkende for å se deres økt. (2Hvis de starter en chat, vil AI ha sin fulle reise sammenheng. (3Hvis de drar uten å kjøpe, blir de en leder i Leads-siden.4) Tenk å skape en proaktiv regel for å vise et chat-melding når besøkende kommer til utsjekking.

For mange besøkende fra det samme IP

Scenario:
Du ser 20 Besøkende fra det samme IP adresse, alle på ulike sider.
Hva skal jeg gjøre:

Dette kan være: (1) Et kontor med delt Internett. Sjekk om besøkene ser ut som ekte mennesker (forskjellige sider, rimelige sesjon varighet).2) En bot eller skraper. Sjekk om sesjoner er svært korte (0-1sekunder) eller treffer sider systematisk. (3) En lasttest. Hvis du kjører automatiserte tester, ekskluder IP fra sporing.

Hvorfor showet live feed 0 Besøkende når nettstedet mitt har trafikk?+

Sjekk: (1) Er widget-skriptet installert på ditt nettsted? (2Er nettstedet riktig? (3Har den aktive terskelen gått? (4) Er besøkende bruker aggressive annonsblokkere som blokkerer sporingsskriptet?

Kan jeg filtrere live-matingen fra land eller enhet?+

Live-feed viser alle aktive besøkende. For filtrerte visninger, bruk sidene Visitor Log eller Session med sine filteralternativer. Levematen er bevisst enkel for sanntidsovervåkning.

Analyse

Toppsider

Toppsider viser hvilke sider på nettstedet ditt får mest trafikk. Det rangerer sidene etter besøk, engasjement og støtteaktivitet. Bruk det til å identifisere din beste innholdsfortegnelsen dine, finne underopplysningssidene samt oppdage sider som genererer supportspørsmål.

Toppsider
ToppsiderEn rangert liste over de mest besøkte sidene med horisontale besøksstanger og antall.Toppsideryoursite.comMest besøkte sider/pricing3,402/2,910/docs1,740/blog/seo-guide980/signup6401RANKEDMest besøkte sider2SIGNALSBesøk og konverteringer3FINDSider som kjører billetter
Sidene dine rangert etter trafikk og engasjement, slik at du kan oppdage topp innhold og sider som genererer støtte.

Hva hver side viser

· Side URL

Den fullstendige URL -stien. Lignende sider (feks produktvarianter) grupperes hvis gruppen er aktivert.

Visninger

Totalt antall ganger ble denne siden lastet i det valgte datoområdet.

Unike besøkende

Hvor mange forskjellige personer har sett på denne siden (en person som ser samme side teller to ganger som 1 unik).

Sprettfrekvens

Prosentvis av besøkende som forlot nettstedet etter å ha sett på denne siden. Høyt hoppe på landingssider = problem.

Gjennomsnittlig tid

Hvor lenge besøkende bruker på denne siden i gjennomsnitt. Veldig kort = ikke lesing. Svært lang på en skjemaside= forvirring.

Chat starter

Hvor mange chatsamtaler ble startet fra denne siden. Høy prat starter på en produktside betyr at produktet beskrivelsen kan være uklare.

Støttebilletter

Hvor mange støttebilletter ble opprettet av besøkende som var på denne siden. Høy billetten teller = potensiell UX eller innholdsproblem.

Funnet eksempler

Finn sider som kjører støttespørsmål

Scenario:
Støtteteamet ditt får stadig spørsmål om frakt. Hvilken side mislykkes?
Hva skal jeg gjøre:

Sorter toppsidene etter «Kundestøttesaker» eller «Chat starter» i synkende rekkefølge. Se etter produkt- eller fraktsider med høyt antall. Siden med flest kundestøttespørsmål har sannsynligvis uklar informasjon. Rett opp sidens innhold og overvåk om antallet kundestøtte spørsmål reduseres.

Finn sider med høy utgangsrate

Scenario:
Du vil vite hvor folk forlater nettstedet ditt oftest.
Hva skal jeg gjøre:

Sorter etter hoppefrekvens nedadgående. Ignorer sider som er naturlig utløpspunkter (takk for at du sidene, bekreftelsesidene). Fokuser på sider som bør holde besøkende engasjert: produktsider, priser, funksjoner. Disse trenger bedre oppringing til handling eller klarere innhold.

Hvorfor viser en side 0 Selv om jeg vet det får trafikk?+

Sjekk: (1) Er sporingswidget installert på den spesifikke siden? Enkeltside-apper kan ikke brann sidevisninger ved ruteendring. (2) Er siden utelukket i sporingsinnstillinger? (3) Er en CDN som betjener en cached versjon uten sporingsskriptet?

Analyse

Geo-etterretning

Geo Intelligence viser hvor besøkende kommer fra land, by og enhet. Bruk den til å forstå dine geografiske markeder, bestemme språkstøtten, planlegge regional markedsføring samt oppdage mistenkelige trafikkmønstre.

Geo
Geo-etterretningEt kart over besøkende steder ved siden av en per-land bar rangering.Geo-etterretningyoursite.comBesøkende etter beliggenhetUSAStorbritanniaNOCANG1MARKETSLand, by2PLANSpråk og regioner3WATCHSpot odd trafikk
Hvor besøkende kommer fra (etter land, by og enhet) til størrelsesmarkeder og spotte uvanlig trafikk.

Hva du ser

Top Countries bar diagram

De beste landene rangert av besøkende. Klikk på et land for å bore ned til bynivå data.

Landdeignut

Visuelt sammenbrudd av trafikk etter land. Hover for prosentdeler

Full landsbord

Hvert land med besøkende i den valgte perioden, som viser antall gjester, økttall og bouting-rate.

Byboring ned

Klikk på et land for å se hvilke byer i det landet har de mest besøkende.

Hvordan GeoIP-deteksjonen fungerer

OpsIQ Oppdager besøkendes plassering på to måter: (1) Cloudflare geo headers. Hvis nettstedet ditt er bak Cloudflare Landet deteksjon er automatisk og nøyaktig. (2) MaxMind GeoLite2-databasen. Last ned den gratis databasen og konfigurer banen i innstillinger. Bynivå deteksjon krever geolite2 by-database, ikke bare land databaser.

VPN og proxy trafikk

Besøkende som bruker VPN-er vil se ut til å komme fra VPN serverens plassering, ikke deres virkelige beliggenhet. Dette er ved design. OpsIQ kan og bør ikke prøve å omgå VPNs. Hvis du ser uvanlige land mønstre, vurdere det 10-20% av besøkende kan bruke VPN.

Funnet eksempler

Uventet landtrafikk

Scenario:
Du driver en amerikansk-bare virksomhet, men 30% av trafikken er fra India.
Hva skal jeg gjøre:

Sjekk: (1) Er disse ekte besøkende? Se på sesjonsvarigheten og sidene som vises. Veldig kort økter med høy studs = sannsynlig bots. (2Finner de deg gjennom Google? Sjekk referanser. (3) Kan de være potensielle kunder i et nytt marked? Hvis trafikken er ekte og engasjert, bør du vurdere å legge til India-spesifikke priser eller innhold.

Beslutning om språkstøtte

Scenario:
Du vil vite om du bør oversette nettstedet ditt til spansk.
Hva skal jeg gjøre:

Se på siden Geo Intelligence. Hvis spansktalende land (Spania, Mexico, Colombia, Argentina etc) sammen representerer mer enn 10% av trafikken din med lave studspriser, oversettelse er verdt å vurdere. Sjekk også: konverterer besøkende fra disse landene til lignende priser som ditt primære marked?

Regional støtteskiftplanlegging

Scenario:
Du må bestemme støtteteamets timer for ulike tidssoner.
Hva skal jeg gjøre:

Bruk timevarmekartet (på Dashboard) kombinert med Geo Intelligence. Hvis 40% trafikken din er fra Europa og 35% fra USA, trenger du dekning for begge tidssoner. Varmekartet viser nøyaktig når hver region er mest aktiv.

Land med besøk, men ingen bestillinger

Scenario:
Tyskland viser 500 Besøkende denne måneden, men null salg.
Hva skal jeg gjøre:

Undersøkelse: (1) Er de hoppende på prissiden? Kanskje prisene dine ikke er konkurransedyktig for det markedet. (2) Sender du til Tyskland? Sjekk om din forsendelsesside nevner Tyskland. (3) Er utsjekkingen din tilgjengelig i EUR? Valutamangel forårsaker forlatte checkouter. (4Er disse besøkende fra en enkelt kilde som kan være lav-intensiv trafikk?

Hvorfor viser en besøkende "Ukjent" land?+

GeoIP er ikke konfigurert. Enten satt opp Cloudflare (som legger til geo-overskrifter automatisk) eller last ned MaxMind GeoLite2-databasen og angir filstien i Innstillinger > GEOIP bane.

Kan jeg blokkere trafikk fra bestemte land?+

OpsIQ blokkerer ikke etter land. Bruk webserveren din eller Cloudflare brannmurregler for landbasert blokkering.OpsIQ Fokuser på synlighet, ikke adgangskontroll i nettverk.

Analyse

Forsettlig trakt

Foredraget Funnel klassifiserer besøksøktene etter hva de synes å prøve å gjøre: bla gjennom, forskning, sammenligner, kjøpe, få støtte eller forlate. Bruk det til å forstå balansen av intense på nettstedet ditt og identifisere hvor gjestene faller ut.

Forsettlig trakt
Forsettlig traktEn tratt fra Bla gjennom til forskning for å sammenligne med Kjøp med antall, pluss støtte og etterlate chips.Forsettlig traktyoursite.comBla gjennom · 8,200Forskning · 4,100Sammenligne · 1,650Kjøp · 520Støtte 6%Forlater 11%1CLASSIFYHva besøkende ønsker2STAGESBla gjennom å kjøpe3FIXFinn drop-off
Sessjoner klassifisert etter hensikt (brune, forskning, sammenligner og kjøpe) slik at du kan se nøyaktig hvor folk faller av.

Foredragskategorier

Nettleser

Korte økter, få sider og ingen bestemte mål oppdaget.

Forskning

Besøkende leser produkt/feature sider, docs eller blogginnhold. Lengre tid på sidene Flere contentsider

Sammenligning

Besøkende som ser på priser, plansammenligning eller funksjonstabeller. Ofte returnerer besøkere.

Kjøpe

Besøkende på utsjekking, handlevogn eller tilmelding sider. Høy intensjon. Dette er dine konvertering muligheter.

Støttesøk

Besøkende på hjelpesider, kontakt sider eller chat. De trenger hjelp.

Spretter

Besøkende som reiste etter en side.

Hvordan lese trakten

Tolke din trakt

Scenario:
1,000 Besøkende så på Prising. 270 Åpnet chat. 92 Begynnte utsjekking. 64 betalt. 18 Åpnet støttebilletter.
Hva skal jeg gjøre:

Prising siden er sterk nok til å skape intensjon. Chat er viktig i kjøpestien: 27% av priser besøkende engasjerer seg med chat før kjøpe. Støttebilletter etter uttjekning kan indikere aktivering eller betaling forvirring. Handling: (1) Sørg for AI chat svar prissetting spørsmål godt. (2) Undersøker 18 post-utsjekking støttebilletter for felles problemer.

Tidsfiltre

Use the date range filter to compare intent patterns across periods. For example, compare Black Friday week to a normal week. You should see a spike in "Buying" intent and possibly "Support-seeking" if your promotions created confusion.

Hvordan klassifiserer OpsIQ -formål?+

OpsIQ Se på siden URLs, sesjon atferd og tidsmønstre. Prising sider signalere sammenligning intention. Sjekk ut sider signal kjøpe intent. Hjelp / kontakt sider signal støtte intensjonen. Klassifikasjonen er heuristisk-basert, ikke AI-drevet.

Kan jeg tilpasse intensjon kategorier?+

Ikke for tiden. Kategoriene er innebygd basert på vanlige webadferdsmønstre. Tilpasset intensjon klassifisering ligger i kørekartet.

Analyse

Funnler, retensjon og stier

Bygg egendefinerte reiser fra side- eller hendelsestrinn, mål kohorteretensjon og oppdag de besøkende oftest tar gjennom et nettsted.

Produktskjerm
TrakterEn egendefinert trakt viser hvert side/event-trinn, de resterende besøkende og konverteringsprosenten.TrakterarbeidsflateSTEPS4CONVERSION28.4%WINDOW72hLIV ARBETSPESSONEPriser sett på1,420 besøkende100%Planlegg valgt780 besøkende54.9%Utsjekking startet530 besøkende37.3%Bestilling fullført403 besøkende28.4%1DEFINEVelg 2–8 trinn2LEVERSett konverteringsvindue3IMPPROVEFinn den største dråpen
En egendefinert trakt viser hvert side/event-trinn, de resterende besøkende og konverteringsprosenten.

Trakter

Lag en navngitt trakt med 2 til 8 side- eller hendelsestrinn. Angi konverteringsvinduet i timer; en besøkende teller bare når de bestilte trinnet oppstår inne i vinduet. Bruk dråpe mellom steg for å velge hvor du skal inspisere replay, feil, sidehastighet og meldinger.

Oppbevaring

Hold grupper besøkende i ukentlige kohorter og viser hvor mange retur. Velg en 6, 8 eller 12 horisonten. Hold kohorte definisjon stabil når du sammenligner utgivelse eller kampanjer.

Stier

Baner viser de vanligste sidesekvensene. Velg banelengde fra 2 til 5 sider for å holde resultatet leselig. Bruk det til å finne uventede avturer, vanlige utganger og innhold som gjentatte ganger går foran konverteringen.

Egendefinerte trakter er analytiske definisjonar, ikke automatiseringer. For å reagere på et fullført trinn oppretter du en konverteringsmål, segment, utløse eller arbeidsflyt.

Analyse

Øktgjentakelse

Session Replay lar deg se en tidslinje på hva besøkende gjorde på nettstedet ditt: hvilke elementer de klikket, hvordan de rullede ned, hvor de sveve og det som skrev (med sensitive felt maskerte). Bruk den til å diagnosticere UX-problemer, bekrefte feilrapporter og forstå kundeforvirring.

Øktgjentakelse
ØktgjentakelseEn spiller som viser en sidevisning med markør, et øktinformasjonspanel og en tidslinje-skrubber.Øktgjentakelseyoursite.comKjøp nåØKTVarighet 3m 12s14 klikkUSA · SkrivebordChrome1241WATCHKlikk, rulle og type2MASKEDSensitive felt skjult3DIAGNOSEBekreft feilrapporter
Spille på nytt nøyaktig hva en besøkende gjorde: klikk, ruller og skriver (følsomme felt maskert), i et tidslinjeskrubb.

Finne riktig sesjon

Fra Session-siden, se etter økter med rapporterte problemer, høy side teller uten konvertering eller setninger fra kunder som har lagt inn støttebilletter. Klikk på replayikonet for å åpne tidslinjen visningen.

Hva gjenspill viser

Tidslinje

En horisontal linje som viser hendelser over tid. Klikk hvor som helst på tidslinjen for å hoppe til det øyeblikket.

Side navigering

Hver sidelast vises som et segment på tidslinjen. Du kan se nøyaktig stien besøkende tok.

Klikk

Klikk hendelser vises som prikker på tidslinjen og som høydepunkter i siden rekonstruksjon.

Rulle

Rulledybde er sporet slik at du kan se hvor langt ned besøkende leser.

Forminteraksjon

Feltfokus og skrivehendelser er registrert. Tekstinngang i passord, og sensitive felt blir maskerte som standard.

Personvern og maskering

Session replay masker sensitive skjema felt som standard. Passordfelt, kredittkortinnganger og felt merket med data-opsiq-mask blir aldri registrert. Du kan konfigurere flere maskeringsregler i Innstillinger > Sporing. Hvis overholdelsesreglene krever det, kan du slå av respillingen helt og holdent.

Diagnostisering av en ødelagt utsjekking

Scenario:
En kunde sier: «Jeg prøvde å kjøpe, men knappen gjorde ingenting.»
Hva skal jeg gjøre:

Finn økten på Økter-siden (søk etter e-post). Åpne gjenopptakelsen. Se segmentet for kassesiden.1) Klikket de på riktig knapp? (2) Gjorde en JavaScript (Sjekk JS-feilsiden for å finne ut når feilen oppstod.)3) Lastet siden på nytt eller viste en feilmelding? (4) Var et obligatorisk felt tomt? Replayen viser nøyaktig hva som skjedde.

Hvor mye lagringsplass bruker du?+

Replay data vokser med trafikkvolum. Bruk retensjonsinnstillinger til å automatisk rydde opp gamle respilldata. For høytrafikksider, vurdere en kortere gjenbruksretensingsperiode (feks 30 -dag) for å administrere lagring.

Kan besøkende velge å spille på nytt?+

Hvis "Respekter Ikke spor" er aktivert i Innstillinger, blir ikke besøkende med DNT-hoder registrert. Du kan også ekskludere bestemte sider fra gjenavspilling i sporingsinnstillingene.

Analyse

Hendelsers logg

Hendelsersloggen viser hver hendelse som OpsIQ har registrert: sidevisninger, klikk, chat starter, billettskapelser, salg og tilpassede arrangementer. Bruk det til å feilsøke integrasjoner, verifisere webhook-leveringene samt forstå handlingens rekkefølgen.

Hendelsers logg
Hendelsers loggEn kronologisk hendelseslogg med fargekodede typemerker: sidevisning, chatt, salg, webhook og tilpasset.Hendelsers loggyoursite.compageviewUSA · /pricing12:04:01chat.startNorge · widget åpnet12:04:09salg$49.00 · Bestill #104212:05:22webhookpayment.succeeded12:05:23customdemo_booked12:06:101EVERYTHINGHver registrerte hendelse2DEBUGBekreft webhook levering3ORDERSe den nøyaktige sekvensen
En tidslinje for alt OpsIQ poster (sidevisninger, chatter og salg, webhooks, tilpassede hendelser) for feilsøking og revisjon.

Innebyggede hendelser (automatisk)

⚠️
Disse er events-log navn - hva OpsIQ -poster på besøkstidslinjen for analyse, feilsøking og revisjon. De er et annet ordforråd enn utgående webhook hendelser du abonnere på. Hvis du bygger en webhook mottaker, bruk listen i Webhooks-delen eller ring webhooks.events.list; å abonnere på et navn fra dette bordet vil ikke levere noe.

Hver rad viser navnet du Send Det kanoniske navnetOpsIQ butikker det som. Begge er registrert: rånavnet du sendte, og den kanoniske en kartlegger til, så en rapport skrevet mot Canonical taksonomi fortsetter å fungere hvilken alias et sporingsmiddel brukte.

pageview page.viewed

En sport sidelaster. Inkluderer URL, tittelen, referanser og tidsstempelet. page_view og view er akseptert som det samme.

chat_open support.chat_opened

En besøkende åpner chat widgeten.

chat_send support.chat_message_sent

En besøkende sender en chatmelding. Svarsiden lagres som support.chat_message_received.

ticket_open support.ticket_created

En støttebillett er opprettet. ticket_create er akseptert som det samme; svar og nedleggelser lagres som support.ticket_replied og support.ticket_closed.

form_submit form.submitted

En sporbar form er sendt inn. submit er akseptert som det samme.

purchase commerce.purchase_completed

Kjøp fullført. purchase_success, og salgsaliasene order.completed, sale.completed, payment.completed og invoice.paidAlle er godtatt fra en tilkoblet plattform.

Utsjekking commerce.checkout_started

Utsjekkingen starter. Relatert: cart_view, checkout_view, checkout_intent, checkout_abandon, add_to_cart.

login_success identity.signed_in

En besøkende tegner seg inn. login_failed, lagret som identity.login_failedEn lås ut er login_lockout_created.

tilmelding conversion.signup

En besøkende fullfører et tilmeldingsskjema. lead, lagret som conversion.lead.

js_error error.js

En JavaScript -feil blir tatt opp på en sport side.

💡
Et hendelsesnavn du sender som ikke er et av disse aliasene blir fortsatt registrert ordrett - ingenting slippes. Det har ganske enkelt ingen kanonisk kartlegging, så det vil ikke rulle opp i taksonomibaserte rapporter.

Egendefinerte hendelser

Du kan sende egendefinerte hendelser fra nettstedet ditt eller serveren til OpsIQ. Tilpassede arrangementer er nyttige for å spore handlinger som spesifikkes i din virksomhet: knappklikk, funksjonsbruk, videospill, nedlastinger etc.

JavaScript · tilpasset hendelse fra nettleseren
// Send a custom event from the browser
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "plan_selected", {
  plan: "pro",
  billing: "annual",
  value: 99
}]);
PHP · registrere en kontaktaktivitet fra serveren din
// 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);

Filtrer hendelsene

Hendelsestype

Filtrer etter bestemte hendelsesnavn: pageview, chat. started, billett. skapes etc.

Datoområde

Vis hendelser fra en bestemt tidsperiode.

Søk

Søk i hendelsesdata etter søkeord (URL, e-post eller verdier for hendelsesgjenstand).

Hvor lenge holdes hendelsene?+

Hendelser følger oppbevaringsreglene som er satt i Innstillinger. Standard: 90 - dager. Høyverdiarrangementer (kjøp, sikkerhetshenvisninger) kan konfigureres med lengre retensjon.

Kan jeg bruke hendelser i A/B-eksperimenter?+

Ja. Når du oppretter et eksperiment, velger du en konverteringshending. Enhver innebygd eller tilpasset hendelse kan brukes som konverteringsmål.

Analyse

A/B-eksperimenter

Eksperimenter lar deg teste to versjoner av en side eller funksjon og måle hvilken som fungerer bedre. OpsIQ spor inntrykk, konverteringer og statistisk betydning.

A/B-eksperimenter
A/B-eksperimenterTo variantkort sammenligner konverteringsratene, med et vinnende merke og betydning på den ledende varianten.A/B-eksperimenteryoursite.comVariant A4.2%konvertering · 1,020 visningerVariant BVINNEREN6.8%konvertering · 1,005 visninger+62% Heis · 96% Betydelig1TESTTo varianter hode til hodet2LEVERKonverteringer og betydning3DECIDEDeklarer en vinner
Kjør to varianter, se konvertering og statistisk betydning.

Hvordan eksperimenter fungerer

1
Lag et eksperiment

Gi det et navn, definere din primære metriske (omsetningshending) og angi variantene.

2
Kjør den

OpsIQ tildeler tilfeldig besøkende variantene og sporer oppførselen deres. Ikke endre eksperimentet mens det kjører.

3
Les resultatene

Når nok data er samlet inn, sjekk konfidensnivået.95% Selvtillit betyr at du kan være.95% Vær sikker på at forskjellen er ekte, ikke tilfeldig sjanse.

Eksperimentsstater

Utkast

Laget, men ikke startet ennå. Du kan fortsatt redigere varianter og metrikk.

Kjøring

Aktivt tilordne besøkende i varianter. Ikke rediger mens du kjører.

Ferdig

Nådd statistisk betydning eller ble manuelt stoppet. Resultatene er endelige.

Arkivert

Resultatene er blitt gjennomgått og eksperimentet ikke lenger nødvendig i den aktive listen.

Beste praksis

Definer metrikken før lansering

Bestem hva du måler før start. Velg en metrisk etter å ha sett resultater introdusere bias.

Utelukk intern trafikk

Legg til teamets IP -adresser i utestengningslisten, så personalebesøk ikke skjev resultater.

Kjør lenge nok

Ikke stopp et eksperiment etter 100 besøkende. Du trenger hundrevis eller tusenvis av besøkere per variant for pålitelige resultater.

Test en endring om gangen

Hvis du endrer overskriften og knappen farge, vil du ikke vite hvilken endring som forårsaket forbedring.

Ta opp din beslutning

Etter eksperimentet er slutt, legg merke til hvilken variant som vant og hvorfor du valgte å implementere det.

Hvor mange besøkende trenger jeg for et gyldig eksperiment?+

Det avhenger av konverteringsfrekvensen for grunnlinjen og effektstørrelsen du vil oppdage.Som en tommelfingerregel: minst 500 besøkende per variant for en 20% For mindre effekter, trenger du tusenvis.

Kan jeg gjennomføre flere eksperimenter samtidig?+

Ja, men vær forsiktig. Hvis to eksperimenter påvirker samme side kan resultatene samhandle. Det er tryggere å kjøre forsøk på ulike sider eller funksjoner samtidig.

Analyse

JavaScript -feil

JavaScript Feil samler inn klient-side feil fra besøkende på nettstedet. En ødelagt knapp, en mislykkes API ring, eller en manglende ressurs dukker opp her. Bruk den til å finne og fikse feil som påvirker ekte kunder.

JS-feil
JavaScript -feilEn liste over innfangede front-end feil med alvorlighetsgrad prikker, kildefilen, nettleseren og forekomststallet.JavaScript -feilyoursite.comNylige feilTypefeil: kan ikke lese x av udefinertcatchout.js:42 · Chrome×214404 Laster inn /assets/app.cssindeks · Safari×88Unchecked (i løfte) NetworkErrorapi.js:17· Firefox×51Avpresningsvarsel: lossebegivenhetselger. js×331CAPTUREKundesidefeil2IMPACTTeller og nettlesere3FIXSquash ekte feil
Ekte besøkende treffer ødelagt kodeoverflate her (melding, kilde, nettleser og hvor ofte) slik at du kan fikse det som betyr noe.

Hva hver feil viser

Feilmelding

Feilteksten JavaScript (f. eks. "TypeError: Kan ikke lese egenskapene til undefined").

· Side URL

Hvilken side feilen oppstod på.

Nettleser og enhet

Hvilken nettleser og enhetstype så feilen. Noen av de feilene er browserspesifikke.

Stack spor

Kodeplasseringen der feil oppstod. Klikk for å utvide stabelsporet i full stang.

Første sett

Når denne feilen først dukket opp.

Sist sett

Når denne feilen nylig skjedde.

Teller

Hvor mange ganger denne feilen er registrert.

Påvirket økter

Hvor mange ulike besøkende økter opplevde denne feilen.

Prioritere feil

Ikke alle JavaScript Feil som krever øyeblikkelig oppmerksomhet. Prioriter etter: (1) feil på kritiske sider (kassen, registrering, innlogging), (2) feil med høye økter, (3) feil som dukket opp nylig (mulig regresjon fra en kodeendring), (4) feil på din egen kode (ikke tredjepartsskript).

Fikser en ødelagt utsjekkingsknapp

Scenario:
JS-feilsiden viser "TypeError: Kan ikke lese egenskapene til undefined (leser send)" på /checkout, påvirker 45 2 økter denne uken.
Hva skal jeg gjøre:

Dette betyr 45 ekte kunder kunne ikke fullføre utsjekking. Trinn: (1) Åpne siden i samme nettleser / enhet kombinasjon. (2) Åpne nettleserkonsollen og reproduser feilen. (3) Sjekk stabelsporet for å finne den nøyaktige linjen av kode. (4) Løs feilen, utplassere og overvåke at problemet kommer til null.

Oppfanger OpsIQ feil fra tredjeparts skript?+

Ja, OpsIQ Fanger alle JavaScript feil på siden, inkludert feil fra analyseskripter, chat widgets og annonsescript. Filtrer etter URL i stabelsporet for å fokusere på din egen kode.

Hvordan utelukker jeg kjente ufarlige feil?+

Du kan ikke undertrykke bestemte feil i OpsIQ, men du kan filtrere listen etter side URL eller feilmelding. Løs eller overse feil fra nettleserutvidelser (de viser ofte som feil fra ukjente kilder).

Salg

Salg og konverteringer

Salgssporing forbinder butikken eller faktureringsplattformen til OpsIQ, slik at du kan se inntekter sammen med besøkendes oppførsel. Hvert kjøp er tildelt en reise for besøkere så du vet hvilke sider og kampanjer som driver inntektene på kanalene.

Salg
SalgSalgsskjermen: en inntekt totalt med et hele tiden kontroll, søk og en nylige kjøpe tabell (dato, kunde, plattform, beløpet.Salgyoursite.comINNTEKTER$42,180+18%Alle tider ▾Søk i e-post, IPNylige kjøpDATALKUNDERPLATFORMConstellation name (optional)BELOPPSERVICEJun3[email protected]Shopify$49googleJun3[email protected]WooCommerce$129directJun2[email protected]Stripe$480annonser1INNTEKTERBestillinger og fornyelser2RECENT PURCHASESDato · Kunde3ATTRIBUTEDTil trafikkkilden
Den virkelige salgsskjermen, inntektene oppe på toppen og deretter Nylige Kjøp (dato, kunde, plattform eller beløp), hver tilskrives trafikkkilden.

Salg dashboard

Dagens salg

Inntekter fra bestillinger som er fullført i dag. Oppdateres med hver ny ordrehending fra den tilkoblede plattformen din.

Denne uken / denne måneden/hele

Inntekter samlet over perioden. Refunderingene trekkes fra disse totale satserne.

Trenddiagram

Linje graf som viser daglige inntekter over det valgte datoområdet. Se etter pigg (promosjoner, kampanje) og dips (utgavene, sesongmessig).

Topp konverteringskilder

Hvilke trafikkilder fører til flest kjøp? "Direkte" kjøpere lagde ofte bokmerker på nettstedet ditt. "Google"-kjøpere fant deg via søk.

Nylige kjøp

De nyeste ordrene med kundeemail, beløp og varer kjøpt.

Ubekreftede kjøp (kundereise)

Når sporingssporeren ser en besøkende når inn til kjøpsbekreftelse i nettleseren, men ingen sammenkoblet plattform har rapportert det salget ennå, viser kundereisen ei rekke (ufestede) med et ravmerke. Det teller aldri som inntektene. Da plattformen bekrefter salget erstatter den bekreftede kjøpet.

Forsoning

Salgkontakter er ikke avhengige av en enkelt webhook. Hvert betalingssignal plattformen sender kan åpne salget, og Connector kontrakt 2.3 Leser om plattformens egen liste over fullførte salg på en tidsplan (standard time per arbeidsområde) slik at et webhook plattformen aldri levert kan miste et salgs. Operatørene kan kjøre det etterspørsel fra kommandolinjen med verktøy/sales_reconcile.php .

Plattformoppsettguider

Shopify

Gå til kontakter >Shopify. Opprette en egendefinert app i din Shopify administrator (Innstillinger > Apper og salgskanaler> Utvikle apps). Grant rekkevidde: read_ordre, lese_customere. API Tilgang token. I OpsIQ Skriv inn ditt lagerdomene (f.eks your-store.myshopify.com) og tilgangssymbolet. Klikk på Testtilkobling. Hvis det lykkes, aktiver webhook synkronisering for bestillingsvarsler i sanntid.

WooCommerce

Gå til kontakter >WooCommerce. I din WordPress administrator, gå til WooCommerce> Innstillinger > Avansert > REST API. Opprette en nøkkel med Les/Skriv tillatelse. Kopier forbrukernøkkelen og konsumenthemmeligheten OpsIQ Skriv inn nettstedet ditt URL Forbrukernøkkel og forbrukere hemmelighet. Klikk Test Tilkobling

BigCommerce

Gå til kontakter > BigCommerce. I din store handelsadmin, gå til avanserte innstillinger >API Kontoer. Opprett en V2/V3 API Konto med leseområde for bestillinger, kunder og produkter. Kopier tilgangssymbolet, klient-ID API Vei. Skriv dem inn OpsIQ og test.

Magento2

Gå til Connectors > Magento. I din magento-admin, gå til System > Integrasjoner. Opprett en ny integrering med API ressurstilgang til Salg, Kunder og Katalog. Aktiver integrasjonen og kopier tilgangssymbolet OpsIQ med din Magento base URL.

PrestaShop

Gå til Connectors > PrestaShop. I administratoren i Prestashop, gå til Avanserte parametre> Webservice. Aktiver webtjenesten og opprette en ny nøkkel. Tillat tilgang til bestillinger, kunder eller produkter. Kopier nøkkelen og skriv den inn OpsIQ med din butikk URL.

OpenCart

Gå til kontakter > OpenCart. Oppretter API identifikasjoner fra OpenCart admin-panelet. Skriv inn API URL, brukernavn og nøkkel i OpsIQ. Koblingen bruker OpenCarts REST API for bestilling og kundedata.

osCommerce

Gå til Connectors > osCommerce. Konfigurer databasetilgang eller API legitimasjoner som dokumentert i kontaktinnstillingene. osCommerce integrasjonen krever vanligvis direkte databasetilgang eller en egendefinert API modul.

Stripe

Gå til kontakter > Stripe. Kopier stripen din begrenset API Nøkkel fra Stripe Dashboard (Developers >API nøkler). Nøkkelen trenger lesetilgang til kunder, kostnader og fakturaer. Skriv den inn OpsIQ. Konfigurere webhook-endepunkt for hendelser i sanntid

Egendefinerte/andre plattformer

Bruk REST API eller webhooks å sende salgsarrangementer fra enhver plattform. Send bestillings-fullstendige hendelser med kundeemail, beløp, valuta og elementer API Seksjon for nyttelastformat.

Forstå salgstrakten din

Topp konverteringskilder

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.

Refundering

Refinansierte bestillinger spores separat. De reduserer nettoinntekter summer. Hvis refusjonskursen er høy fra en bestemt kilde, kan trafikken være lav kvalitet.

Valutahåndtering

OpsIQ lagrer den opprinnelige transaksjonsvalutaen og beløpet. Multi-currency bedrifter ser inntekt i hver valuta. Normalisert rapportering bruker konfigurert valutakurs.

Funnet eksempler

100 besøkende, null salg

Scenario:
Din prisside får 100 -besøkende per dag, men null konverteringer.
Hva skal jeg gjøre:

Undersøkelse: (1) Bruk Session Replay på prissiden besøkende. Sjekk hvordan de samhandler med prisene tabellen (2) Sjekk Toppsider for prissiden hoppe rate og tid-på-side. (3) Sjekk Chat samtaler fra prissiden besøkende. Hvilke spørsmål stiller de? (4) Sammenlign prissiden din til konkurrentene. (5) Prøv et A / B-eksperiment med ulike prisutforminger.

Tilknytning til markedsføringskampanje

Scenario:
Du sendte en e-postkampanje med UTM tags. Hvordan måler du inntektene påvirkning?
Hva skal jeg gjøre:

Gå til Salg og filtrer etter kilde. Søk for kampanjen UTM parameter. Du vil se: (1) Hvor mange besøkende kom fra e-posten. (2) Hvor mange konverterte til salg. (3) Samlede inntekter som tilskrives kampanjen. (4) Sammenlign med samme periode før kampanjen.

Hvorfor viser salg null til tross for at butikken min har ordre?+

Sjekk: (1) Er plattformkontakten tilkoblet og sunt? Gå til kontaktere og sjekk status. (2) Er webhook synkronisering aktivert? Hvis du bruker polling, er cron jobb i gang? (3) Har kontakten den riktige API omfang? For Shopify Du trenger read_ordre.

Hvordan tilskriver OpsIQ et salg til en besøkende?+

Når en ordre kommer inn via kontakt, OpsIQ matcher kunden e-post til en kjent besøkende. Hvis den som ble sporet før kjøpet er salget tildelt deres reise, inkludert trafikkkilden og landingssiden samt sesjonshistorikken.

Kan jeg legge til salg manuelt?+

Du kan sende salgsarrangementer via REST API eller webhooks fra et hvilket som helst system. Hendelsesformatet er dokumentert i hendelsene API Seksjon.

Handels

Bygge, lansere og drive den innfødte Storefront

Storefronten er OpsIQs morbutikk for produkter, sider, utkikkbøker, reklamepaneler, kassen, kundekonto og AI-assistert salg i klient Chatt og støttede sosiale kanaler.

Start i markedsføring→Storefront

1
Velg arbeidsområdet

Bekrefte nettstedet du konfigurerer. Produkter, innstillinger, sider og analyser isolert til det arbeidsområdet !

2
Aktivere e-handel og Storefront

Generelle innstillinger → Ecommerce er den overordnede myndigheten. Storefront publisering, ordreopprettelse og betalinger forblir separat slik at du kan forhåndsvise en katalog trygt.

3
Publisher komplette produkter

Velg produkttype, pris, valuta, lager, varianter/alternativer og medieoppfyllelse. Forhåndsvisning av produktet før utgivelsen.

4
Konfigurer betaling og tilfredsstillelse

Koble til en gateway eller legg til bankoverføring, kontanter og motbetaling. Fysiske varer trenger leveringssonger eller innsamling; digitalvarer trengs beskyttede filer eller koder.

5
Kjøre Launch Readiness

Løs hver blokker og se gjennom alle advarsler, deretter fullføre en sandkasseordre fra den offentlige butikken.

Starter Om og policyinnhold

Nye og oppgraderte butikker mottar redigerbar starttekst for Om oss, Vilkår og betingelser, Personvern, og Refunder og avkastning når feltene er tomme. Eksisterende kjøpmannskopi blir aldri overskrevet.

  • Bytt ut hver [Add …] og STARTER TEMPLATE Legg merke til før lansering.
  • Bruk det virkelige juridiske navnet, kontaktveien, oppfylle løfter, returregler, datapraksis, oppbevaringsperioder og markeder som serveres.
  • Få råd som passer til produktene og landene du betjener. Starteren er operasjonell veiledning, ikke juridisk rådgivning.

Design, sider og kampanjer

Tema og sidedesign

Velg et kurert fargetema og komposisjon, deretter melde typografien, fyll/gradients, figurer, bredde, bevegelser, sveve-og lys / mørke atferd. Forhåndsvis desktop og telefon før du lagret.

Om, Kontakte oss

Bygg hver side fra ombestillingsblokker. Hver blokk har premium design varianter. Hold krav-making blokker som statistikk, lag, priser eller sitater av til deres innhold er sant.

Egnede sider

Sett tittel, sløve og helt.SEO og bestilte blokker; forhåndsvisning mens utkast, deretter publisering. Reserverte lagerruter som handlekurv, uttjekning, konto og retningslinjer kan ikke gjenbrukes.

kampanje popups og sidepaneler

Opprett en modal side med minst én blokk. Velg premiumdesign, sentrum/venstre/høyre/nedenfor plassering, last / delay/exit-click utløser, backdrop, bevegelsesbredde, kupong og engangsvisning atferd. Test lukk, tastatur -og telefonoppsett

Menuer og fotnote

Koble til sider, produkter, samlinger og retningslinjer, konto/hjelp/kart-handling eller sikre eksterneURLs. Header-elementene støtter én nedtrekks/mega -menunivå.

Kundechatt og sosial bestillinger

Enable Client Chat selling, then choose where customers may buy. The assistant searches the catalogue and asks the server for an authoritative quote; the server—not the model—creates the signed order card. Confirmation happens only through that card on the web or the verified interaction on the social channel.

WhatsAppBudbringer,Instagram, Telegram, LINE- og SMS-kontoen bruker leverandørens verifiserte kanalkonto som kanalens identitet. Epost er fremdeles innsamlet for mottakere. Connector bestilling holder sin signert universell kontrakt og handelsautoriserte totalt; Storefront konfigurasjon endre ikke den avtalen.

Store Intelligence Analytics

Gjennomgang unike besøkende, produktvisninger, kurvtillegg, utsjekking starter/abonnement / ferdigstillelser. Konvertering bruker eksplisitt merket offentlige-store hendelser; valuta totalene er aldri stille sammensatt. Et strekpunkt betyr at det valgte området ikke kan svare på konverteringen - ikke null prosent.

GenereltOpsIQ API

Bruk en bærernøkkel med commerce.read; analytics.read Også gir analytiske øyeblikksbilde. Nøkkelens bundet arbeidsområde er autoritativt.

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

Storefront får tilbake offentlig-sikre konfigurasjon, URL, menyer og startreview status. Lagerforlengelse katalog returnerer alle temaene, sidene design, blokktype, blokker komposisjonen og premium kampanjeskall så fjernbyggerne aldri hardkode valgene. Sider liste gir ut tilpassede sider og prium modals. Analytics avkastning aggregat uten kundeidentifikasjoner. Leslighet returnerar handlingbare lanseringskontroller. OpenAPI and Postman bruker disse samme kontraktene.

Siste kjøring i forveien

  1. Skrivebord og telefon: hjem, søk, produkt/varianter, handlekurv, utsjekking validering, konto, sporing, nedlastinger, Om, Kontakt, politikk, lookbook, sider, menyer og hver live kampanje.
  2. Fullføre en sandkasse betaling og verifisere bestillingsstatus, kvitteringer, aksjer og tilfredsstillelse.
  3. Plasser en klient Chat-ordre og én leverandørsandboks bestilling på hver aktiverte sosial kanal.
  4. Bekreft disse hendelsene vises under riktig overflate og valuta i Store Intelligence.
⚠️
Starter policytekst gjør en lager ikke-tom, men det gjøres ikke den juridiske kopien gjennomgått. Launch Readiness holder advarsel til hver blogging er erstattet.
Salg

Ledere

Leads er besøkende eller kunder som viser kjøp eller støtte intensjon. OpsIQ Detekter automatisk leads basert på atferd: prising sidebesøk, retur besøk, chatt interaksjoner, utcheckning starter og høy engasjement. Bruk Leads siden til å prioritere oppfølgingen og mate din CRM-rørledning.

Ledere
LedereLeads-skjermen: et søkbart bord med IP/ e-post, plassering, enhet, kilde og tid på nettstedet kolonner samt toppkilder og land.Ledereyoursite.comSøk IP, by, land...Topp kilde: google · Top land: USAIP / EMENDLOKASJONENHETERSERVICETID41.62.10.4StorbritanniaMobilgoogle4m12s[email protected]USA · New YorkSkriveborddirect7m02s[email protected]DE · BerlinMobilutm: ads5m40s203.0.113.9TorontoCity in Ontario CanadaSkrivebordgoogle3m28s1DETECTEDHøyt intente besøkende2TOPLeadkilder og land3ENRICHEDIP, beliggenhet og tid
Den virkelige Leads-skjermen, høyintensive besøkende som et søkbart bord (IP/email, plassering, enhet, kilde, tid på stedet) med toppkilder og land.

Hva som gjør en bly

Priser sidebesøk

Besøkende som ser pris eller planer siden vurderer aktivt et kjøp.

Tilbakebesøk

Besøkende som kommer tilbake flere ganger er engasjert, men ikke konvertert.

Chat interaksjoner

Besøkende som starter en chat, søker aktivt hjelp eller etterkjøp.

Utsjekking starter

Besøkende som når utsjekkingssiden, men ikke fullfører kjøpet.

Innsendinger i skjema

Besøkende som sender inn et kontaktskjema, demoforespørsel eller tilmeldingsskjema.

Høyside engasjement

Besøkende som ser på mange sider med lang sesjon varighet, er dypt forske.

Førende detaljpanel

Klikk på et hvilket som helst resultat for å se sin komplette profil:

Identifikasjon

Navn, e-post, selskap hvis kjent. Anonyme leads show IP og beliggenhet.

Sessioner

Alle økter fra dette bly med sidestrøm, varighet og kilde.

Sider vist

Hver side de besøkte, bestilt av rektangel.

Kilde

Hvordan de fant deg: organisk, betalte, sosialt, henvisninger direkte.

Lead score

A0-100 score basert på atferdsintensitet, resency og side intensjon.

CRM-status

Om dette føreren er lagt til CRM som kontakt eller avtale.

Salgstips

AI-generated suggestion on what to do next (e.g., "Visited pricing 3 times · consider proactive outreach").

Høy verdi blymerke

Lead med en poengsum over 80 får et "High Value"-merke. Dette er de mest attraktive prospektene dine, og du kan prioritere dem for oppsøkende arbeid, proaktiv chat eller CRM-pipelineoppføringer.

Funnet eksempler

Arbeide et varmt bly

Scenario:
En ledende titt på prissiden din 3 Tider i 2 Dager, startet en chat spør om virksomhet planer, men har ikke kjøpt.
Hva skal jeg gjøre:

Dette er en høy-intent leder.1) Sjekk deres hoveddetaljer for selskaps- og rolleinformasjon. (2) Les chatttranskripsjonen for bestemte behov og innvendinger. (3) Opprette en avtale i CRM med informasjonen samlet inn. (4Tilordne en oppfølgingsoppgave for et salgsteammedlem. (5Hvis de vender tilbake til prissiden, kan den proaktive chat-regelen utløse en personlig melding.

Konvertering av anonyme fører til CRM-kontakter

Scenario:
Du har 50 anonyme leder med høy poengsum, men ingen e-postadresser.
Hva skal jeg gjøre:

Alternativer: (1Opprett en proaktiv regel som tilbyr rabatt eller ressursnedlasting i bytte mot e-post på høyintente sider. (2) Bruk chat widgeten til å be om e-post når anonyme besøkende starter en samtale. (3) Legg til et identitetssymbol på dine innlogging/signatursider, slik at tilbakevendende besøkere automatisk identifiserer.

Hvordan beregnes resultatresultatet?+

Poenget vurderer: rektangel av besøk (resent = høyere), hyppigheten av besøkene (mer=høyere) på sidene som er sett (pris/utsjekking = høyere); sesjonsvarighet (lenger = høyere, chatinteraksjoner (enging = høyere).

Kan jeg tilpasse ledende poengregler?+

Ja. I CRM-konfigurasjon kan du legge til blykorrerende regler som forbedrer poenget basert på bestemte søkeord, hendelser, kilder eller sidemønstre.

CRM

CRM-en din starter her

OpsIQ sender en full AI-første CRM som fanger kundesannhet, rengjør data, resultat leads, coaches tilbud, prognoser inntekter og handler med nettstedets intelligens, støtte, billetter, produkter og betalinger som én live graf. Hver AI handling er kildet til, forklarelig, reversibel og godkjenning kontrollert.

AI CRM
Oversikt over AI CRMEn Trust Dial satt til Copilot ved siden av fire AI agentkort: Steward, Prospector, Retention og Analyst.AI CRMarbeidsflateTillitsoppringingManuellAndrepilotAutopilotHvor mye AI gjør på egen håndDSStewardFortvilelse, berigendeValider dataSDRProspektorFinn & poengNy virksomhetRTOppbevaringSpot churn,driv fornyelserANAnalysePrognose &forklare tall1AI-FIRSTFire spesialistagenter2YOU DECIDETrust Dial selvstyre3TRUSTEDKildet og reversibel
En AI-første CRM drevet av fire spesialist agenter, og en Trust Dial som bestemmer hvor mye de gjør på egen hånd.

CRM sider oversikt

AI CRM (kommandosenter)

Start her

Din daglige hjemmeskjerm: inntektspulse, hva AI fant, hva det gjorde, godkjenning køen, neste bevegelser, agent helse og ROI.

Kontakter

Kjerne

Folk og selskaper i CRM. Søk, filtrer, poeng og administrere profiler

Rørledning

Kjerne

Visual dealboard med dra-og -slepp stadier, vinne sannsynlighet og AI coaching.

Prognose og rapporter

Kjerne

Board-grad prognoser: begått, sannsynlige og best tilfelle med tillitsintervaller og nøyaktighet sporing.

Livsyklus

Kjerne

Når alle kunder står: aktiv, i fare for utvidelse klar til å bli fornyet eller renovert.

Bygg min CRM

Konfigurer

Beskriv CRM-oppsettet på vanlig engelsk. OpsIQ genererer en reversibel plan og anvender den på godkjenningen.

CRM helse

Ops

Selvkontroll side: skjema, agenter, ruter og live data counts.

Hvordan OpsIQ holder deg trygg

Spør før du spiller

AI-forslag går til godkjenningskøen. Du godkjenner, redigere eller avviser hver enkelt. Ingenting skjer uten din mening.

Overskriv aldri

Når AI foreslår en endring, viser den gjeldende verdien og foreslått verdi. Human-entered data har bevis på beskyttelsen.

Alt er reversibel

Hver AI-handling er registrert i dagboken. Du kan angre på alle endringer med ett klikk.

Forklarbar

Hver AI-anbefaling viser sin resonnement og datakilder den brukte. Ingen svart boks.

Nyt? Start her

1
Åpne AI CRM

Klikk AI CRM i venstre navigasjon. Kommandosenteret viser din nåværende tilstand.

2
Sjekk CRM helse

Åpne CRM helse for å verifisere skjemaet, agentene og rutene er klare.

3
Importer kontakter

Hvis en kontakt er aktiv (Shopify, WHMCS Kontakter importeres automatisk. Ellers importeres via CSV eller opprette manuelt.

4
Opprette en rørledning

Gå til Pipeline og lag din første rørledning med trinn (f. eks Lead, Kvalifisert, Forslagsforhandlinger, Wonn, Lost).

5
Legg til din første avtale

Opprett en avtale fra kontakt, angi beløp og fase, og la Deal Coach veilede deg.

Må jeg bruke CRM?+

Nei. CRM er valgfritt. OpsIQ fungerer perfekt som en sporing + støtte+ AI-plattformen uten VRm. Aktiver det når du er klar til å administrere salg og kundeforhold.

Kan CRM fungere uten kontakter?+

Ja. Du kan opprette kontakter og tilbud manuelt. Kontakter berike CRM med plattformdata (ordr, abonnementer eller billetter), men er ikke nødvendig.

Hva er det som er tillitslaget?+

Trust Layer er sikkerhetssystemet som kontrollerer hva AI kan gjøre. Copilot modus (standard): AI foreslår, menneskelig godkjenner. Auto pilotmodus (opt-in): AI virker automatisk på lav risiko og reversibel operasjoner.

CRM

AI CRM hjemmeskjermen

Kommandosenteret er din daglige orientering. Åpne det hver morgen for å se hva som skjedde, hva trenger oppmerksomhet og hva du skal gjøre neste gang.

Kommandosenter
CRM-kommandosenterCRM-hjemmet med Procord/Win-rate / Pipeline brytere, en vektet forutgående KPI og et AI forslag køen med Approve og utsett på hver rad.CRM-kommandosenterarbeidsflatePrognoseVinnerrateRørledningFOREKST · DETTE Q$74k87%AI-forslag · Godkjenn køLag avtale · Acme $24kfra en chat med kjøperenGodtaUtelukkendeFlytt Nimbus → Forslagpositive svar oppdagetGodtaUtelukkendeLogg oppgave · Følg opp Peakingen aktivitet i 7 dagerGodtaUtelukkende1TOGGLEPrognose · Vinnerrate2AI PROPOSESDeals, etapper og oppgaver3YOU DECIDEApprove eller utslett
Det virkelige kommandosenteret: bytte mellom Prognose, Win-rate og Pipeline. Arbeider AI forslag køen, godkjenne eller avvise tilbudene, fasebevegelser og oppgaver det antydes.

Hva kommandosenteret viser

Dagens tall

Pipeline-verdi, tilbud vant/tapt, nye leads, aktive avtaler og inntektstrender.

Hva OpsIQ har funnet

AI-oppdagede innsikter: oppholdskontrakt, risikokontoer, nye muligheter og datakvalitetsproblemer.

Hva OpsIQ gjorde

Handlinger AI har tatt (i autopilot) eller foreslått: faseframskridelser, scoreoppdateringer, kontaktberikelse og oppgaveoppretting.

Trenger godkjenning

Kylling av AI-forslag som venter på din beslutning. Hver viser foreslåtte handling, resonnement og bevis. Utfylle, redigere eller forkaste.

Neste trekk

AI-ranket liste over de 10 viktigste tingene å gjøre i dag: følg opp en varm avtale, sjekk på risikokontoen og forsker et nytt bly osv.

Hjelpestatus

Helse av AI-agenter: Fange, Data Steward, Deal Intelligence, department coach ; SDR. Grønn = løping, rav = trenger oppmerksomhet, rødt = feil.

Resultater

ROI sporing: tilbud påvirket av AI, tid lagret, nøyaktighet for spådommer og sammenligning med manuelle CRM-arbeid.

Morgenveiledning arbeidsflyt

1
Les dagens tall

Sjekk rørlednings helse og inntekt trend. Er du på sporet i denne måneden?

2
Tøm godkjenningskøen

Gjennomgang hvert AI-forslag. Utfyll trygge handlinger, rediger der det trengs og avvise dårlige forslag.

3
Sjekk hva OpsIQ funnet

Les AI-innsikter. Er det noen tilbud i fare? Finnes det nye muligheter?

4
Arbeid neste trekkliste

Begynn med topp prioritet. AI har rangert disse etter haster og potensiell effekt.

Fange opp etter fritid

Scenario:
-Hva skjedde mens du var borte?
Hva skal jeg gjøre:

Åpne Command Center og sjekk: (1Hva er det?OpsIQ"Did" viser alle AI handlinger under ditt fravær. (2"Trenger godkjenning" viser forslag som venter på din gjennomgang. (3Hva er det?OpsIQ"Ikke funnet" fremhever hasteelementer. (4) Angi datointervallet på dashbordet til fraværsperioden din for å se trenden.

CRM

Kontakter, selskap og tilbud

CRM organiserer forretningsforholdene dine i fire objekter: Kontakt (folk), selskaper (organisasjoner) og tilbud(gjenforeningsmuligheter) samt oppgaver.

CRM-objekter
CRM-objekterEn kontaktpost som er knyttet til selskaps-, avtale- og oppgaveobjekter i en sammenkoblet graf.CRM-objekterarbeidsflateKontaktperson · e-postSelskapetsaccountsDel utInntektsmuligheterOppgaveOppfølgingshandling1OBJECTSKontakter, selskaper2LINKEDEn tilkoblet graf3TASKSFølger vedlagt
Fire kjerneobjekter (kontakt, selskaper og oppgaver) som er koblet til én sammenkoblede kundegraf.

Kontakter

Hva er en kontakt

En person i CRM. De kan være en kunde, et prospekt, partner eller bly. Kontakter har e-post, navn, selskapet, tags, livsyklus scene og varmeness poengsummer.

Finne kontakter

Bruk søkefeltet til å finne på navn, e-post eller merker. Bruk filtre: livssyklusscene, blyscore, kilde, land og siste aktivitetsdato, tildelt eier.

Kontaktprofil

Klikk på en kontakt for å se sin fulle profil: personlig informasjon, selskapet, tilbud, aktiviteter, billetter, chatte, besøk av nettsteder, resultatresultat og AI-innsikt.

Hotness Score

A0-100 score beregnet ut fra atferdssignaler: nettsted besøk, e-post engasjement, chat interaksjoner, kjøpe historie og resency.

Selskapet

... flere billetter...
Kontaktselskapskobling

Kontaktene er koblet til selskaper via e-post eller manuell oppgave. Ett firma kan ha mange kontakter.

Avtaler

Hva er en avtale

En inntektsmulighet. tilbud har tittel, beløp, rørledning, etape, vinne sannsynlighet, lukk dato, tildelt eier og tilknyttede kontakter / selskapet.

Vinn sannsynligheten

En prosent sjanse for å vinne avtalen. Velg manuelt eller beregnet av AI basert på dine historiske gevinsterdata. Driver den vektede prognosen.

Helse

Grønn (helse), ravber eller rødt. Basert på aktivitetsgjenstand, fase varighet og engasjementsignaler

Oppgaver

Hva er en oppgave

En oppfølgingshandling som tildeles en person. Oppgaver har tittel, forfallsdato, prioritet, type (samtale, e-post og møte) samt lenket kontakt/deal.

AI-genererte oppgaver

AI oppretter oppgavene automatisk når det oppdages noe trenger oppmerksomhet: å følge opp på en steppet avtale, svare på et risikofritt konto og undersøke nytt lederskap.

Finne varme leads

Scenario:
Du vil se alle høyscore kontakter i Storbritannia som ikke har blitt kontaktet nylig.
Hva skal jeg gjøre:

Gå til Kontakter. Filtrer etter: Lead score > 80, Country = Norge, Siste aktivitet > 7 for dager siden. Sorter etter bly score synker. Dette er de hotteste oversette leads, prioritere outreach.

Opprette en avtale fra kontakt

Scenario:
En kontakt uttrykte bare interesse i din bedriftsplan under en chat.
Hva skal jeg gjøre:

Åpne kontaktprofilen. Klikk på « Opprett avtale ». Skriv inn avtalens tittel (f. eks. « Acme Corp - Enterprise Plan »), beløp, pipeline og stadium (f, eks. « Kvalifisert »). Angi sluttdatoen og tilordne den til deg selv. Deal Coach vil begynne å spore denne muligheten.

CRM

Rørledningen (dealboard)

Pipeline er et visuelt brett der tilbud beveger seg gjennom trinn fra venstre til høyre. Dra og slippe kort for å fremme avtaler. Hvertkort viser deal summen, vinne sannsynligheten og helsestatusen.

Rørledning
CRM-rørledningRørledningen skjerm med åpen dealer, åpne verdier, vektet-framdrift og attributtert-deale tall statistikken, en ny Deal knapp, en AI Approve kø samt Lead/Qualified / Won bord.RørledningarbeidsflateÅpne tilbud23Åpne verdier28 KAVektet værvarsel$74kTilknyttede tilbud12+ Ny avtaleApprove kø2 For å se gjennomBLYVolt Inc4KFlamme$ 6kKVALIFIDERTNimbusweather condition30 tusen dollar.Topp9KVINNEROmløpsbane48 tusen dollar.1LIVE STATSÅpen verdi og vektet værvarsel2AI QUEUEApprove foreslåtte avtaler3BOARDDra tilbud etter trinn
Den virkelige rørledningsskjermen: live statistikk (åpen verdi, vektvarsel), en AI Approve-kø for foreslåtte tilbud og dra -og dråpebrett.

Bruke rørledningsbrettet

1
Vis dine tilbud

Rørledningen viser alle aktive tilbud som kort arrangert i kolonner (trinner). Hver kolonneoversikt kan vise den totale verdien av dealer på det trinnet.

2
Dra til fremdrift

Dra et kort til neste stadium. Vinnersannsynligheten og teller oppdatering umiddelbart. Hvis trekket mislykkes (validasjonsfeil), snaps tilbake til den opprinnelige posisjonen sin.

3
Sjekk kortmerker

Grønn merke = sunn (resent aktivitet, på sporet). Amber= i fare (nedsettelse, trenger oppmerksomhet) rødt = stallert (ingen aktivitet for lang tid).

4
Klikk for detaljer

Klikk på et kort for å åpne deal detaljpanelet med kontakter, aktiviteter, Deael Coach-kort og raske handlinger.

Godkjenningskøen

AI-forslag vises i godkjenningskøen øverst på rørledningen siden. Hvert forslag viser hva AI vil gjøre, hvorfor og bevisene. Du kan:

Godta

Handlingen går gjennom Trust Layer og er registrert i tidsskriftet.

Rediger

Endre forslaget før godkjenning. For eksempel endre det foreslåtte trinnet eller justere beløpet.

Avvis

Avslå forslaget. AI lærer fra avvisninger å gi bedre forslag i fremtiden.

Vinne sannsynligheten forklarte

Sannsynligheten for å vinne kan stilles inn manuelt eller beregnes av AI. Når AI beregner det, bruker den en modell som er trent på dine egne lukkede avtaler (vunnet og tapt). Hvis du ikke har nok historiske data, bruker AI standard sannsynlighet. $10,000 deal at 30% sannsynlighet bidrar $3,000 til den "sannsynlige" prognosen.

Flytte en avtale til Won

Scenario:
En kunde underskrev kontrakten og betalte.
Hva skal jeg gjøre:

Dra utdelingskortet til "vunnet"-stadiet. OpsIQ vil: (1) Marker avtalen som avsluttet-vunnet. (2) Oppdater varselet. (3) Legg til en "vunnet" aktivitet på tidslinjen. (4) Hvis konfigurert, utløs en webhook-hendelse (crm.deal.won).5) Oppdater kontaktens livssyklusstadium til «Kunde».

Spotting fast tilbud

Scenario:
Du vil finne tilbud som har vært i samme fase for lenge.
Hva skal jeg gjøre:

Se etter røde (avsatt) merker på rørledningsbrettet. Disse tilbudene har ikke hatt aktivitet lenger enn konfigurert rotingsgrensen (sett i CRM-konfigurasjon > pipelines). Klikk hver oppholdsavtale for å se Deal Coach's anbefaling om reaktivering.

Kan jeg ha flere rørledninger?+

Ja. Gå til CRM Configuration > Rørledninger for å opprette ytterligere rørledningene. Vanlig brukssaker: separate pipetips for nye virksomhet vs fornyelser, eller ulike produkter/tjenester.

Hva skjer når jeg drar en avtale til "Tapt"?+

Avtalen er merket som lukket-tapt. Du vil bli bedt om en tap grunn. Dealet fjernes fra det aktive brettet, men kan finnes i den lukkede deal filter. Kontakten forblir i CRM.

CRM

Avtale coaching

Deal Coach analyserer hver avtale og gir deg en kort med helsestatus, risikosignaler, nøkkelpersoner, et kvalifiseringskontrollliste, møte prep. Alt er kildet til neste handlinger. Treneren viser hvilken billetter, chat eller aktivitet hvert krav kommer fra.

Deal coach
Deal coachEt dealkort som registrerer AI-detekterte risikosignaler med beviskilder, ved siden av en AI anbefaling og et utkast til email.Deal coacharbeidsflateAcme Corp ·$24,000Fase: Forslag · 60% VinnerRISK SIGNALERIngen svar i 10 dagarChampion gikk stilleKonkurranse nevnt i chatKilder: billett #482 · chat 6/12 · e-posttrådAI anbefalerBygg den økonomiske igjenKjøper med en ROI-innkjøpog en 7_-daglig avslutningsplan.Utkast til e-post1SIGNALSHvorfor en avtale kan bli kvitt2SOURCEDAlle krav citerer bevis3ActionEtt klikk neste steg
Treneren flagger hvorfor en avtale kan slippe (hver signal cites sin kilde) og hender deg neste trekk å ta.

Hva treneren forteller deg

Helseforklaring

Hvorfor avtalen er sunn, i risiko eller opphold. Spesifikke signaler: dager på trinn, siste kontaktdato, aktivitet frekvensen, konkurrent nevner, innvending mønstre.

Signaler

Kategori: Innvendinger hevet, konkurrent nevner, prisdiskussioner, støtterisikoindikatorer, fornyelse/utvidelse signaler. Hvert signal lenke til kilden (chatttranskripsjon, billetter, e-post og aktivitet).

Mester og blockere kart

Hvem hjelper avtalen (champion) og som er i stand til å motstå (blokker). Basert på samspillsanalyse og kontaktrollene.

Kvalifikasjonskontrollliste

MEDDICC eller BANT-sjekkliste (konfigurerbar) som viser hvilke kvalifikasjonskriterier som er oppfylt og som mangler. Grade: A,B, C, D eða F

Møteforhåndsbestilling

Før et planlagt møte genererer treneren en kort agenda, sentrale poeng til å dekke, spørsmål som skal stilles og risiko for å håndtere og materiale.

Svar og ring planer

Foreslått neste melding eller ring skript basert på gjeldende avtaletilstand og nylig interaksjoner.

Bevistid

Hvert krav som coachen gjør lenker til en kilde: et billettnummer, chat-transkripsjons ID, aktivitetsdato eller besøk på nettsiden.

Hvordan bruke treneren

1
Les kort

Åpne alle avtaler og bla til Deal Coach-delen. Les helsestatusen og nøkkelsignalene.

2
Lukke kvalifikasjonsåpninger

Sjekk sjekklisten for kvalifikasjoner. Hvis "økonomisk kjøper" mangler, planlegg å identifisere og engasjere budsjettholderen.

3
Lov om forslag

Treneren foreslår konkrete neste handlinger. Klikk for å opprette en oppgave, utkaste til e-post eller planlegge et møte som alle rutes gjennom godkjenning køen.

Forbered deg på et stort møte

Scenario:
Du har et møte med en utsikt i morgen om $50,000 - Avtale.
Hva skal jeg gjøre:

Åpne avtalen og les Møteforhåndseksjonen. Den viser: (1) Viktige talepunkter basert på nyere interaksjoner. (2) Men det var ikke noe de hadde i chatten forrige uke. (3) Konkurranse som de nevnte i en støttebillett. (4) Spørsmål å stille om sin tidslinje. (5) Risikofaktorer for å håndtere proaktivt. Bruk denne korte tiden til å forberede en fokusert, evidensbasert agenda

Forstå hvorfor en avtale er i fare

Scenario:
Rørledningen viser et rødt skilt på en avtale du trodde gikk bra.
Hva skal jeg gjøre:

Klikk på avtalen og les helseforklaringen fra Deal Coach, som kan si: "Denne avtalen har vært i forslagsfasen i 22 dager (terskel: ) 14 Siste kontakt var 1 time siden. 11 Den primære kontakten åpnet en kundestøttesak om problemer med dataoverføring. 5 for 2 dager siden (billet #T-892 Forslag: Ta opp problemet med overføringen og planlegg en oppfølgingssamtale." Nå vet du nøyaktig hva som må rettes.

CRM

Prognose og rapporter

Board-grad prognoser med et defensibelt område, avtalenivå endring forklaringer og nøyaktighet sporing slik at du kan bevise og forklare tallene dine.

Prognose
PrognoseEt kvartalsvis prognosenummer med innlegg, best-case og pipeline bands samt en nøyaktighetsnotat.PrognosearbeidsflateFOREKST · Denne kvarten312k87% Å målretteInndragBeste tilfelleRørledningAI-vektet av avtale helse og historie · nøyaktighet sporet over tid1KATEgorierInnføring i rørledning2AI-WEIGHTEDVed avtale helse3PROVABLENøyaktighet sporet
Legg til, best-case og rørledning på et øyeblikk, AI -vektet av avtale helse med nøyaktighet sporet slik at du kan forsvare det.

Prognose kategorier

Besvart

håndterer 80% eller høyere vinnersjanse. Dette er din mest sannsynlige gevinster. Det bør være dine minste forventede inntekter.

AI-vektet sannsynlig

Alle åpne tilbud vektet av deres AI-beregnet gevinst sannsynlighet. Dette er den mest realistiske forutsetningen om hva du vil lukke.

Beste tilfelle

Alle åpne tilbud til full verdi. Dette er maksimalt mulig inntekt hvis alt går perfekt (det sjelden gjør det).

Tillitsintervall

AnRegion/ state in France 80% Eksempel: "Det er sannsynlig at du vil lukke mellom 0,1 og 0.2". $45,000 og $72,000 Dette kvartalet."

Hva som endret seg og hvorfor

Prognosen inkluderer endringer i uken og uken. Når prognose faller med $15,000, rapporten forklarer nøyaktig hvilke avtaler som forårsaket endringen: -Del A gled til neste kvartal ($8,000), Deal B tapt ($5,000), Deal C redusert i verdi ($2,000)."

Nøyaktighetssporing

Forventning MAPE

Gjennomsnittlig absolutt prosentfeil: hvor langt av prognoser har vært historisk. Lavere er bedre 15% Forutsetningene dine er vanligvis i 15% av faktiske resultater.

Vinn sannsynlighetskalibrering

Brier score måle hvor godt vinne sannsynlighetene matcher faktiske resultater. Hvis tilbud på 70% Sannsynligheten vinner faktisk 70% Av tiden er kalibreringen god.

Ukebliksbilleder

OpsIQ fanger et øyeblikksbilde av prognosen hver uke (via cron). Over tid kan du se hvordan din prognoser nøyaktighet forbedrer.

Rulleopp og advarsler

Omregning per trinn

Hvor mange avtaler som flyttes fra hvert trinn til neste. Hvis 80% passere fra kvalifisert til forslag, men bare 20% Når du går fra forslag til forhandling, kan dine forslag trenge arbeid.

Per-kilde vinnerrate

Hvilke blykilder gir mest gevinster. Investere mer i høy-win-rate kilder.

Pere-owner ytelse

Hvordan hvert salgsteammedlem utfører: tilbud vunnet, pipeline verdi gjennomsnittlig deal størrelse og gevinst.

Advarsler

Sandbasje (uvirkelig lavt sannsynlighet), overkommitterende (orealistisk høy) og engasjerte-at -risiko (høyt sannsynlighetsavtaler som viser bodsignal).

Forstå et prognosefall

Scenario:
Din kvartalsprognose falt fra $180,000 til $155,000 Siden forrige uke.
Hva skal jeg gjøre:

Open the Forecast page and check "What changed." The report shows: "Acme Corp deal ($15,000) moved to Lost, competitor chosen. Beta Inc deal ($8,000) close date pushed to next quarter. New deal with Gamma LLC ($3,000) added this week." The net change is -$20,000 + $3,000 = -$17,000, explaining the drop from $180K to $163K (with the remaining $8K explained by probability adjustments on other deals).

CRM

Finne ny virksomhet

Prospecting Agent hjelper deg å finne og forske potensielle kunder. Beskriv den ideelle kunden din, legge til målselskaper, og la AI forskning, score og utkast første berøring utover.

Prospeksjon
ProspeksjonEn liste over AI-funnede prospektselskaper med passform notater, poeng og en utklippsknapp hver.ProspeksjonarbeidsflateUtsikter funnet av SDR-agentenUtvikler: Northwind LtdSaaS · 50 -ansatte88Utkast til uttakCobalt MfgManufacturing · 20074Utkast til uttakMesa RetraileCommerce · 3069Utkast til uttakVega HelseHelse · 8063Utkast til uttak1FINDAI-kilder målkontoer2POENGPasser & intensjon rangert3DRAFTFørste berøring skrevet for deg
SDR-agenten finner målselskaper, scorer dem på passform og trekker utdraget til første berøringsuttak for din gjennomgang.

Engangsoppsett

1
Beskriv din ideelle kunde

Gå til CRM-konfigurasjon > Prospektering. Beskriv din ideelle kundeprofil (ICP): målbransjer, bedriftsstørrelser, stillingstitler, geografisk fokus, produktmatchingsvilkår og minimum passpoeng. Eksempel: "B2B SaaS-selskaper med 50-500"Vi har 10 ansatte i USA/Storbritannia som selger utviklerverktøy, med en salgsdirektør eller vekstleder som primær kontakt."

2
Legg til målselskaper

Skriv inn selskapsdomener eller navn du vil forske. Du kan også la AI foreslå bedriftene basert på din ICP.

3
Gjennomgang av forskningsresultater

AI beriker hvert selskap med tilgjengelige data: størrelse, bransje, tech stabelen, nylige nyheter og passer til poenget.

4
Approve utslett

For godbitte selskaper, AI utkast til en personlig første-touch melding. Gjennomgang og godkjenne i køen.

Fit Scoring

Hver utsikt får en0-100 passform score basert på fem faktorer:

ICP-passasje

Hvor godt selskapet passer din ideelle kundeprofil (industri, størrelse og plassering).

Urenthetssignaler

Er det bevis som de trenger produktet ditt nå? Jobbinnlegg, tekniske endringer og klager på konkurrenter.

Budsjett proxy

Selskapsstørrelse, finansieringsfasen og inntektsmål tyder på budsjetter.

Produktmatch

Hvor relevant produktet ditt er for virksomheten din basert på industri og teknologi.

Støttepassing

Om du kan betjene denne kunden effektivt (tidssone, språk og kompleksitet).

Forskning av et målselskap

Scenario:
Du vil vurdere om acme.com er verdt å forfølge.
Hva skal jeg gjøre:

Legg til acme.com til prospektlisten. AI returnerer: Fit score 78/100 (god passform). Årsaker: B2B SaaS, 120 medarbeidere, USA-baserte og nylig ansatt en VP of Sales (urgency signal), bruker konkurrent X. Kjøp signaler: besøkte prissiden to ganger i måneden (fra nettstedssporing). Best kontakt [email protected] (VP of Sales). Utkastet opener refererer til deres nylige leie- og prissidebesøk.

CRM

Automatiske oppfølgingssekvenser

Sekvenser automatisere multi-trinn oppfølging: en blanding av epost, ventetid, oppgaver og anrop som kjører automatisk etter at du godkjenne den første sendingen.

Sekvenser
OppfølgingssekvenserEn horisontal sekvensstrøm: E-post, vente tre dager og email. Deretter en oppgave med svardetekteringOppfølgingssekvenserarbeidsflateNår du godkjenner den første sendingen→E-postIntroVent3 DagerE-postOppfølgingOppgaveRingTrinn kan være e-post, vente eller webhook. Et svar stopper automatisk sekvensen.1AUTOMATEMulti-trinn oppfølging2STEPSE-post · vente på oppgaven3YOU APPROVEFørste sending er portet
Automatisert multi-trinns oppfølging (email, vent på epost og oppgave) som du godkjenner først.

Hvordan sekvensene fungerer

1
Lag en sekvens

Definer trinnene: e-post, vent 3 dager, e-post 5 dager, oppgave (kall om ikke svar), e-post. Hvert email trinn har en mal du kan tilpasse.

2
Rulle inn kontakter

Legg til kontakter i sekvensen. AI kan også foreslå registrering fra prospektive resultater.

3
Automatisk utførelse

Trinn kjører automatisk på timeplan. Hvis kontaktsvarene når som helst, pauser sekvensen seg automatisk.

4
Sporresultater

Se åpne priser, svarssatser og avmeldelser per trinn. Bruk dette til å optimalisere sekvensen din.

Svar forståelse

Når en kontakt svarer klassifiserer AI svaret:

Positivt

Interessert, ønsker å snakke. Sekvens pauser og oppgave opprettet for oppfølging.

Retroaktivt

Har bekymringer, men ikke avviser. Sequence pauser og oppgave opprettet med innvendingsdetaljene.

Avslutt abonnement

Ønsker å slutte å motta meldinger. Kontakt undertrykkes permanent.

Ikke nå

Interessert, men timing er feil. Sekvens pauser og snooze oppgave opprettet.

Feil person

Ikke riktig kontakt. Sekvens stopper, ta kontakt flagget for anmeldelsen

Støtte

Et støttespørsmål, ikke et salgsrespons. Sekvens pauser og billett opprettes.

Anti-spam beskyttelse

Utstyrshåndtering

Slutte å be om setning blir respektert umiddelbart og kontakten undertrykkes fra alle fremtidige rekkefølger.

Daglig sende cap

Arbeidsplassnivå-daglig grense (standard: 1,000 epost). Forhindrer masse sender som utløser spamfilter.

Per kontaktgrense

Maksimum 1 -melding per kontakt/dag. Forhindrer overveldende individuelle mennesker.

Overtrekkshåndtering

Trinn som overstiger den daglige hette utsettes til neste dag. De blir aldri droppet eller hoppet over.

Hva skjer hvis en kontakt åpner støttebillett i løpet av sekvensen?+

Sekvensen pauser automatisk. Støtten prioriteres over utveier. sekvensen kan gjenopptas manuelt etter at støtteproblemet er løst.

Kan jeg teste trinn A/B?+

Ikke direkte i sekvenser, men du kan opprette to rekkefølger med ulike melding og sammenligne deres resultater.

CRM

Vekstverktøy

En side under CRM som holder vekstmotoren: løpende inntekter (MMR/ARL), produktkatalogen, bly-kapting skjemaene og bestillingslenker. Alt her skriver rett inn i CRm, så en forminnsendelse eller et bestilt anrop er kontakt med historie, ikke ei rad i regneark.

Hva som bor på siden

Resepterende inntekter

Inntekter

MRR og ARR projisert fra din reelle faktureringsleder. Prenumerasjonene er gruppert fra betalinger per plattform, fakturasyklusen blir avledet fra betalingsåpninger, mens et abonnement forfalle når en betaling som har gått forbi 1.5 ganger syklusen sin. Kundenes lenke til CRM-kontakter automatisk når lederen bærer epost.

Produktkatalog

Katalog

En kilde til sannhet for det du selger. Siter trekker navn og listepris fra katalogen, samt aksepterte sitat rulles opp i inntekt etter produkt. Produktarkivet sletter de aldri.

Lead-capture former

Opptak

Hvert skjema får en hostet side pluss et iframe innpakket kode for ditt eget nettsted. Innsendinger blir kontakter, eieren får melding og rutingreglene tilordner ledelsen.

Reservasjonslenker

Planlegging

Del en lenke, la utsikter velge et gratis slot. Slots respekterer arrangøren sin arbeidstid og tidssonen og eksisterende møter. En bestilling skaper møtet, e-post prospektet for å bekrefte og rapportere organisatoren.

Lederveiing

Ruting

Territoriets regler kjører først, deretter feltregler (match et område som land eller kilde), så rundt rotete over din rep-pool. Det ruter CONTACTS OG DEALS like, uansett avtalestatus: en vunnet deal fortsatt trenger eier for kommisjon tilskrivning, kontoansvar og oppfølgingsmodus, og i eieren eller team synlighet modus er usynlig for alle men manageren. Opptak opprettet av automatisering (ett kontaktsalg, chatter, import) bærer ingen interaktiv skaper, slik at dem rutes etter samme reglar på å skape snarere enn venstre ejerløse. Alt som allerede har eiere blir aldri omgjort.

Opprett din første skjema

1
Åpne vekstverktøy

Gå til CRM, deretter vekstverktøyene og deretter delen av bly-kapture skjemaer.

2
Navngjev det og velge felt

Skriv inn et navn og en kommadelt feltliste, for eksempel navn, e-post, telefon eller melding. Email er alltid nødvendig.

3
Del eller embed

Kopier den hosttede lenken for å dele det hvor som helst, eller kopiere innpakkede koden og lim dem på alle sider av nettstedet ditt.

4
Se på lederne kommer

Hver innsending er en CRM kontakt med et skjema. sendt aktivitet, eiervarsling og automatisk ruteføring.

💡
Offentlige fangesider bruker arbeidsområdets egen adresse. Skyarbeidsplasser benytter sitt tilordnede underdomene (selskapet).opsiq.help), så linken alltid løser riktige data.

Innbygget beskyttelse

Bots ser suksess, du kan ikke se noe

En skjult honningpottfelt kaster stille botten innlegg.

Begrenset rate

Ti innlegg i timen IP adresse på tvers av skjemaer og bookinger.

Samtykke forblir ærlig

Å sende inn et skjema gir ikke markedsføringssamtykke. Bare en eksplisitt samtykke-boksen gjør det.

Ingen dobbelt bestilling

En spilleautomat er omvalidert mot en fersk tilgjengelighetssjekk i øyeblikket av booking.

Hvor kommer de løpende inntektsdataene fra?+

Fra samme handelsleder bruker salgssiden din, matet av faktureringskontakter. Bruk re-sync fra fakturering etter å ha koblet til en ny plattform.

Kan jeg bruke skjemaene uten nettsted?+

Ja. Hvert skjema har en hostet side på din egen adresse som fungerer frittstående, med eller uten JavaScript.

CRM

Budskap Hub (SMS og WhatsApp)

En kontakt, opptil tjue gateways. Koble SMS- og WhatsApp-leverandørene du faktisk bruker, markerer en som standard, og velg noen av dem når teksting er kontakter. Samtykke kontrolleres av CRM før enhver inngangsport blir kontaktet.

Sett det opp

1
Aktiver koplingen

På siden Kontakter, åpne meldingshub (SMS og WhatsApp) og aktivere det.

2
Legg til en leverandør

I samme skuffe, eller i CRM-vekstverktøyene kan du velge en gateway fra rullegardinen (Twilio, Vonage, Termii, Meta WhatsApp Cloud og mer), lim inn dens API akkreditiv og koble til. Du kan legge flere, inkludert de samme portport to ganger med ulike kontoer.

3
Wire webhook

Hver leverandørpost viser sin egen webhook URL med en kopiknapp. Lim den inn i gatewayens leveringsrapporter og inbound-message innstillinger for å få status som levert tilbake til OpsIQ.

4
Send fra kontakt

Åpne en kontakt og bruk SMS- eller WhatsApp -knappen. Hvis mer enn én leverandør støtter kanalen, kan du velge et utvalg; Ellers brukes standarden.

Samtykke kommer først

Kun samtykke

Ukjent samtykke er ikke aksept. En sending nekter med mindre SMS-godkjenning uttrykkelig gis. WhatsApp kjører samme tillatelse.

Ikke kontakt vinner alltid

Et do-not contact flagg blokkerer hver kanal, uansett hva som er satt.

Forebyggingen er æret

Kontakter på undertrykkingslisten blir aldri sendt.

Refusals navngjevningen deres grunn

En blokkert sending forteller deg nøyaktig hvorfor, så du kan fikse dataene i stedet for å gjette.

For utviklere: webhook kontrakten

URL form

https://your-address/opsiq/cron/messaging_webhook.php?sk=SITE_KEY&e=ENTRY_ID&t=TOKEN. per entry token er mintet når tilbyeren blir koblet og aldri roterer på redigering.

Formater som forstår

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

Effekter

Leveringsrapporter stempler utreach ledger rad som bærer leverandørens meldings-ID som levert eller sprøyte. Inngående beskjeder samsvare kontakten med telefonnummer inne i arbeidsområdet, land som en melding. Mottatt aktivitet og markere samtalen svarte.

Feilmodus

Feil eller manglende token-svar 403 Ukjend nyttelast telles og ignoreres, aldri fatalt så en uforutsigbar gateway kan ikke bryte endepunktet.

Hvilke porter støttes?+

Twilio, Vonage, Plivo, MeldingsBird, Snimmer, Infobip, Telnyx, ClickSend, Termii, Afrika snakker, BulkSMER, Textlocalt, Meta WhatsApp Cloud, 360dialog, SMSAPI, Gupshup, Kaleyra, D7 Networks og en tilpassede HTTPS webhook for noe annet.

Er legitimasjonen sikker?+

Påloggingsopplysninger lagres kryptert i kontaktinnstillingene og blir aldri ekko tilbake til nettleseren. Å redigere en oppføring med tom hemmelighet holder den lagrade enheten.

Kan AI sende meldinger?+

Ja, gjennom registrerte handlinger som krever bekreftelse og kjører samme samtykke gate. AI kan også liste tilkoblede leverandører for å forklare hva som er tilgjengelig.

CRM

Holde og voksende kunder

Livsyklusstyring hjelper deg å beskytte eksisterende inntekter. Hver konto får en churn risikoscore, helse score, utvidelse og et anbefalt suksessspillebok.

Livsyklus
LivsyklusEn kunde livssyklus (påbord, aktiv, at-risiko og fornyelse) med helsebarer på hvert kontokort.LivsyklusarbeidsflateOmbordstigningAcmeCity in California USAhelse 40AKTIVTGlobexhelse 88Initechhelse 76AT- RISKSoylentCity in California USAhelse 28VEGLUmbraFornyelser i 12dutvidelse + $8k1STAGESOmbord til fornyelse2SCOREDHelse og utvidelse3PLAYBOOKAnbefalt neste trekk
Kundene beveger seg gjennom onboarding, aktiv, risikofri og fornyelse hver score for helsen og ekspansjonen med en spillebok.

Livsyklusen

Scenekart

Visual board som viser hvor hver konto står: Lead, Prospect, Opportunity, Kunde- og Utvidelsesbeløpet, Renéwal.

Risikokontoer

Kontoer flagget med høy churn risiko. Hver viser den øverste driveren (støtte pigge, inaktivitet, betalingsfeil) og en anbefalt sparespilling.

Utvidelsesmuligheter

Kontoer som viser signaler om beredskap til å kjøpe mer: høy bruk, funksjonsforespørsler og planlegg forespørsel.

Fornyelsesgrunnlaget

Kontoer med kommende fornyelsesdato. Sortert etter risikonivå og inntektsverdi

Hvordan OpsIQ registrerer churn-risiko

Churn-risikoen beregnes fra flere signaler sammen:

CRM-signaler

Deal helse, inaktivitet, nylige tap og nedgang i engasjement.

Støttesignaler

Åpne billetttelling, billettvolumspikes, negativ følelse og opptrapping.

Produktinnsats

Logg inn frekvens, funksjonsbruk, sidebesøk API samtaler.

Faktureringssignaler

Mislykkedes betalinger, forfallne fakturaer og nedgraderingsforespørsler.

Spillebøker

Lagre spill

For risikokontoer: når proaktivt ut, adresser bekymringen og tilby støtte.

Fornyelsesspill

For kommende fornyelser: bekrefte tilfredshet, gjennomgang bruk, nåverdi tilbyr incitament om nødvendig.

Utvidelsesspill

For klar til å grow-kontoer: presentere oppgraderingsalternativene, dele suksesshistorier og demonstrere ROI.

Adopsjonsspill

For å underutnytte kontoer: tilby opplæring, dele beste praksis og aktivere funksjoner de ikke bruker.

Spotting churn før det skjer

Scenario:
En kunde som normalt logger seg inn daglig, har ikke logga på 2 uker, og de åpnet 3 Støtte billetter i denne måneden.
Hva skal jeg gjøre:

Livssykluspanelet flagger denne kontoen som "I fare" med følgende drivere: inaktivitet (14 Dager siden siste innlogging) og støtte spike (3x Anbefalt spill: proaktiv oppsøkende samtale for å forstå hva som skjer. Er det et produktproblem? Evaluerer de konkurrenter? Tidlig inngrep kan redde kontoen.

CRM

Hold dataene dine rene

Data Steward-agenten finner og fikser automatisk datakvalitetsproblemer: dupliserer, manglende felter, uoverensstemmelser samt stangepost.

Dataadministrator
DataadministratorEn liste over problemstillinger i datakvalitet (dupliserer, mangler og utholdenhet), hver med en handling som kan fikses én klikk.DataadministratorarbeidsflateDataproblemer som Steward-agenten fantDuplisert[email protected] og [email protected]MerkMangler12 kontakter har ingen selskapBerikForeldet38 tilbud uberørt for 90+ dagerAnmeldelseFormatertelefonnummer i 4 formaterReparer alle1CATCHESDuper, hull2EXPLAINSHvorfor det flagget hver3FIXESPå din godkjenning
Steward-agenten holder CRM ren, finner dupliserer, huller og staveplater.

Hva det fanger

Dupliserte kontakter

Flere poster for samme person (f.eks [email protected] og [email protected]). Administratoren foreslår å slå dem sammen.

Mangler data

Kontakter uten e-post, tilbud uten beløp. Foreslår å fylle fra tilgjengelige kilder.

Utilknytte poster

Dealer uten tilknyttede kontakter, kontaktpersoner uten selskap. Foreslår å koble til basert på e-postdomene og konteksten.

Usikkerhet

En avtale i "Vonnet" stadium med 20% sannsynlighet, en kontakt merket "Kunde" uten avtaler, et selskap med mismatched bransje.

Feil faser

Deals som har vært i samme fase for lange eller kontakter hvis livsyklus-fase ikke samsvarer med aktiviteten.

Hvordan bruke

1
Åpne styrelisten

Gå til CRM og finn Data Steward-delen (eller åpne den fra CRm helse).

2
Approve trygge rettelser

Grønne elementer er trygge: klare dupliker, åpenbare manglende data. Approve disse i bulk !

3
Se resten

Amber elementer trenger din dømmekraft: mulige dupliserer med små forskjellene, foreslåtte trinn endringer, selskap linking.

Rengjøring av duplikatkontakter

Scenario:
The steward found "John Smith ([email protected])" and "J. Smith ([email protected])": same email, different display names.
Hva skal jeg gjøre:

Administratoren foreslår å slå sammen: holde registeret med mer aktivitet, slå sammen den andre rekordens tilbud og aktiviteter. Gjennomgå forslaget, justere det overlevende visningsnavn om nødvendig, og godkjenner. Begge poster historie er bevart i flettekontakten.

CRM

Bygg min CRM

Build My CRM lar deg beskrive din TM-oppsett på vanlig engelsk. OpsIQ genererer en validert, reversibel plan og bruker den på godkjenning. Ingen koding, ingen manuell konfigurasjon klikking.

Bygg min CRM
Bygg min CRMEn naturlig språkbeskrivelse til venstre som produserer en generert CRM-plan for stadier, felt og segmenter på høyre.Bygg min CRMarbeidsflateBeskriv din virksomhetVi er et webdesignbyråselger månedlige holdere ogEn-off prosjekter til små-Bergde.Bygg min CRMGenerert planEtapper: Lead → BeholdDeletyper: container, prosjektFelt: månedlig verdiSegmenter: SMB, byråSekvens: onboardingGodkjenn og bruk1DESCRIBEEngelsk i2AI PLANSStadier, felter og segment3APPROVEBrukt · Ingen kode
Beskriv virksomheten din på vanlig engelsk; OpsIQ Utkast til hele CRM (trinn, felt og segmenter) og gjelder det på godkjenning.

Hvordan det fungerer

1
Beskriv hva du vil ha

Skriv inn en beskrivelse av CRM-oppsettet ditt på vanlig engelsk. Eksempel: «Opprett en fornyelsestratt med stadier: Kommende, Kontaktet, Forhandler, Fornyet, Tapt. Poengsummen til potensielle kunder øker når de ser prisene to ganger.»

2
Se over planen

OpsIQ viser en forhåndsvisning av hva det vil skape: rørledning, stadier, fasesannsynligheter, score regler og livsyklusregler.

3
Bruk

Klikk på Bruk for å kjøre planen. Hver endring er registrert som en pakke du kan angre i ett klikk.

4
Rull tilbake om nødvendig

Hvis noe ikke er riktig, klikk Angre for å returnere hele pakken. CRM-en din går tilbake til den forrige tilstanden sin.

Hva du kan bygge

Rørledninger og -fase

Opprett navngitte rørledninger med egendefinerte stadier, standard sannsynligheter og rotterende terskelverdi.

Scoring regler

Øk kundeemnepoengene basert på atferd: "Score høyere når de ser prisene," "Scor lavere når de besøker karrieresiden."

Livsyklusregler

Automatisk fremover livssyklus stadier: "Gå til SQL når de ber om en demo," "Går til kunde når avtalen er vunnet."

Egnede felt

Legg til felt i kontakter, tilbud eller selskaper: tekst, nummer og dato. URL e-post.

Kvalifikasjonskontrollliste

Definer MEDDICC eller BANT sjekklisten til deal coach-rangeringene mot.

Opprette en fornyelsesrørledning

Scenario:
Du administrerer SaaS-abonnementer og trenger en rørledning for fornyelse.
Hva skal jeg gjøre:

Skriv: "Lag en fornyelsesrørledning. Faser: 90 Dager ut (10%), 60 Dager ut (25%), Kontaktt (40%), Forhandlinger (60%), Fornyet (100%), Churned (0%). Sett råtegrensen til. 14 dager."OpsIQ Når du har generert planen, går du gjennom den og klikker på Bruk.Trakten vises umiddelbart på Trakt-siden din.

Hva om jeg beskriver noe som ikke er mulig?+

Byggeren genererer bare handlinger den vet hvordan man validerer. Hvis du ber om noe utenfor dens evner (f. eks. "Integrere med min tilpassede API"), vil det avvise forespørselen og forklare hva den kan gjøre i stedet.

Kan jeg angre endringer?+

Ja. Hver Build My CRM-handling er fanget som en reversibel pakke. Gå til CRm Helse > Endre historie for å se alle bunter og angre noen av dem.

CRM

Konfigurer din CRM-vei

Manuell CRM-konfigurasjon for lag som foretrækker å klikke over skrive. Alle innstillinger som Build My CRm kan opprette er også tilgjengelige som tradisjonelle skjemafelt.

Rørledninger og -fase

Opprett, endre navn, omorganiser og slett rørledninger og stadier. Sett standard vinn sannsynlighet per stadium. Set den råtnende terskel (dager uten aktivitet før en avtale er merket "stalled").

Egnede felt

Legg til felt i tilbud, kontakter eller selskaper. Felttyper: tekst, nummer og dato (fall ned med forhåndsdefinerte alternativer), avkrydsningsboks, URL_-\", epost. Tilpassede felt vises på objektprofilen og i filtrene.

Kvalifikasjonskontrollliste

Definer sjekklisten Deal Coach bruker til å evaluere tilbud. Velg MEDDICC, BANT eller et egendefinert sett med kriterier. Hvert element kan merkes nødvendig eller valgfritt.

livssyklus-trinnsregler

Definere automatiske trinnoverganger: Når en kontakt oppfyller betingelsene (se priser, sende inn et skjema og kjøper), så vil livssyklusfasen deres bli forfremmet.

Ledende regler

Øk eller reduser poengsummen for potensielle kunder basert på atferd. Eksempler: "Visning av prisside = +15"Nedlastet hvitbok = +10"Besøkte karrieresider = -5Minimum antall poeng kan settes (f.eks. "må se prising minst 10 ganger"). 2 ganger").

Lagre visninger

Opprett navngitte filter+sort-kombinasjoner for kontakter, tilbud eller selskap. Del visningene med teamet ditt. Velg standardvisning per objekttype

Legge til en lead scoring regel

Scenario:
Du vil ha kontakter som ser prissiden din to ganger eller mer for å få høyere poengsum.
Hva skal jeg gjøre:

Gå til CRM-konfigurasjon > Regler for kundeemnevurdering. Klikk på Legg til regel. Sett: Hendelse = "sidevisning", URL inneholder = "/pricing", Minste antall =2, Poeng økning = +20 Neste gang scoreren kjører, vil kontakter som samsvarer med denne regelen få +20 til deres ledende poengsum.

CRM

CRM Helsekontroll

CRM Helse er en selvdiagnostisk side som verifiserer din VR-funksjon konfigureres riktig og kjører jevnt.

Helsekontroll
CRM HelsekontrollEn helsescorering på 92 ved siden av en sjekkliste over passerings- og varslingskonfigurasjonskontroller.CRM Helsekontrollarbeidsflate92HELSKEPipeline-faser konfigurertKobling koblet til & importAI-agenter aktivert!Ingen aktiv oppfølgingssekvens!12 -kontakter som mangler selskap1AUDITBekrefter oppsettet ditt2FLAGSHva som mangler3POENGEt samlet tall
En CRM-revisjon på én side: en generell helsescore pluss et sjekkliste over hva som er satt opp riktig og det som fortsatt trenger oppmerksomhet.

Hva den sjekker

Skjema

Databasetabeller eksisterer og har de riktige kolonnene. Hvis en migrasjon ble savnet, vil CRM Helse flagge den.

AI-midler

Alle CRM-agenter (Capture, Data Steward, Deal Intelligence osv.) er registrert og sunt. Grønn = kjører, rav = trenger oppmerksomhet, rød = feil.

Ruter

CRM API ruter og AJAX endepunkter er registrerte og kan ringes.

AI-handlinger

CRM-handlingskatalogen er registrert i Handlingsregisteret. Hvis det mangler handlinger, kan du selvhelbrede dem ved å registrere deg på nytt.

Live data teller

Totalt sett kontakter, selskaper, tilbud, oppgaver og arrangement. Nyttig for å verifisere import og pågående dataopptak.

Etter installasjonskontroll

Etter første gangs CRM-oppsett, åpner du VR Helse og verifiserer alle kontroller er grønne. Hvis noen er rav eller rødt klikker du på elementet for en diagnostisk forklaring og foreslått fikse.

Hvor ofte bør jeg sjekke CRM helse?+

Sjekk etter første oppsett, etter store oppdateringer og når som helst CRM Atferd virker feil.CRM Helse selvhelbreder mange problemer (som manglende handlingsregistrering) bare ved å åpne siden.

CRM

CRM-forbindelser for utviklere

CRM avslører en komplett offentlig REST API og utgående webhooks slik at det passer enhver stabel uten manuell eksport.

API Endepunkter

Autentisering

API nøkkel (Autorisasjon: Bearer opq_...) med omfang crm.read eller crm.write. POST til /api/v1.php med handling og site_key.

Kontakter

crm. contacts. list (søk + filter), crm. kontakter. detalje (etter ID) og crp. connects. upsport (opprett eller oppdater).

Avtaler

crm. deals. list, crm. Deals

Aktiviteter

crm. aktivities. list (tidline for kontakt/deal), crm. activitys. record (logg en ny aktivitet).

Hendelser

crm. events. list (duable change feed with page_id markør), crmm. events. catalog (liste tilgjengelige hendelse typer).

Lag en avtale 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
}

Webhook-begivenheter

opsiq.contact.upsert

Fyrt når en kontakt opprettes eller oppdateres. Dette er den kontakt hendelsen å abonnere på; det finnes ingen separate opprettede arrangementer.

contact.lifecycle_changed

Fyrt når en kontakt beveger seg til et annet livssyklus stadium.

contact.status_changed

Fyres når kontaktstatus endres.

contact.conversion

Fyres når konverteringen registreres mot kontakt.

contact.tag_added

Skyt når en tagg legges til i kontakt.

contact.erased

Fyres når en kontakt slettes for å få et personvernforespørsel.

crm.deal.created

Fyres når det opprettes en avtale.

crm.deal.stage_changed

Fyrt når en avtale beveger seg til et annet stadium.

crm.deal.won

Skyt når en avtale er stengt som vunnet.

crm.deal.lost

Skyt når en avtale er stengt som tapt.

crm.company.created

Fyrt når selskapet opprettes.

crm.task.created

Fyrt når en ny oppgave opprettes (manual eller AI-generert).

email.replied

Skyt når en kontaktsvar på utvendig e-post.

email.bounced

Skyt når en utvendig e-post studser.

💡
Ring webhooks.events.list for autoritativ sett på installasjonen din, med nyttelast av hver hendelse. Det genereres fra levering koden selv så det kan aldri være uenig i hva som faktisk kommer. Den fulle listen vises også i Webhooks-delen .

Alle webhook-hendelser er HMAC-signert og retried på feil. Abonner en URL i innstillingene > Webhooks, eller meningsmåling crm. events. list med day/id for et holdbart byttefôre.

Synkronisere CRM-kontakter til Google Sheets

Scenario:
Du vil at alle nye CRM-kontakter skal vises i et Google Sheet for markedsføringsteam.
Hva skal jeg gjøre:

Sett opp en webhook abonnent foropsiqVis det til en Google Apps Script-webapp eller Zapier webhookURL. Lønnslasten inkluderer kontaktnavn, e-post, selskapets resultat og kildekoder. Skriptet ditt legger til en rad i Google Sheet for hver ny kontakt.

CRM

Segmenter

Segmenter lagrer gjenbrukbare kontaktfiltre for CRM-visning, utveisføring og andre publikumsbeskyttede verktøy.

Produktskjerm
SegmenterSegment-redigeringsprogrammet kombinerer betingelser, viser live matchtallet og lar operatøren velge et levende filter eller festet øyeblikksbilde.SegmenterarbeidsflateMODENivåLOGICAlleMATCHES1,248LIV ARBETSPESSONEKundefasenlik aktiv kundeRegleneSiste aktivitetinnen 30 dagerRegleneLandlik StorbritanniaRegleneHøy intensjonscorer i det minste 70Reglene1CHOOSE MODELive eller øyeblikksbilde2ADD RULESAlle eller noen3REUSEkampanjer og CRM
Segment-redigeringsprogrammet kombinerer betingelser, viser live matchtallet og lar operatøren velge et levende filter eller festet øyeblikksbilde.

A levende segment reberegner fra gjeldende data når den brukes. A festet øyeblikksbilde fryser den gjeldende medlemslisten, som er nyttig når et utvendig publikum ikke må endre seg etter godkjenning.

Velg Alle når alle betingelser må matche eller Alle når en tilstand er nok. Se gjennom livetellingen før du lagrer. Systemsegmenter kan være synlige, men beskyttet fra vanlig redigering.

CRM

Lead-scoring

Lead-scoring regler gjør atferd og profilsignaler til en konsekvent score som salg og automatisering kan bruke.

Produktskjerm
Lead-scoringLead-scoring viser aktive regler, rullevinduet og den positive eller negative scoreendringen hver regel gjelder.Lead-scoringarbeidsflateKJØP12SCORED8,412HOT LEADS286LIV ARBETSPESSONEPrising3+ besøk i 14 Dager+20Kjøp søkeordinneholder migrasjon eller virksomhet+15Støtterisikoklage hendelse i 30 dager-10Trodd kildepartner referanse+121DESCRIBE RULEBruk vanlig engelsk2REVIEW FIELDSSignal, vindu3RESCORESøk på arbeidsområdet
Lead-scoring viser aktive regler, rullevinduet og den positive eller negative scoreendringen hver regel gjelder.

AI-regelbyggeren kan gjøre en vanlig engelsk instruksjon til strukturert regel. Hver regel bør fortsatt gjennomgås før aktivering: bekrefte aktiviteten eller søkeordet, minstetalene, rullende vindu og scoreendringer

Positive og negative regler kan coexist. Bruk Rescore arbeidsområde Etter endringer i materialregelen, slik at eksisterende kontakter vurderes under den nye modellen. Poengene kan mate segmenter, ruten, prospektering og arbeidsflytforhold.

CRM

Salgslederboard

Leaderboard sammenligner representanter ved hjelp av kvoteutvinning, vunnet inntektsinntekt og åpen rørledning for den valgte måneden.

Produktskjerm
SalgslederboardDen månedlige ledertavlen ranger salgsrepresentanter mens du holder vunnet inntekt, provisjon og åpen rørledning synlig.SalgslederboardarbeidsflatePERIODJuliTEAM QUOTA82%VINNERkr118kLIV ARBETSPESSONEAmina104% kvote · £ 62k vant1st- Ja.88% kvote · £51k vant2ndTegn76% kvote · £43k vant3. @ item: inlistboxÅpne rørledning£ 312k på tvers av teamAnmeldelse1CHOOSE MONTHSammenlign en periode2CHECK QUOTAOpphold ved rep3COACHBruk rørledningskontekst
Den månedlige ledertavlen ranger salgsrepresentanter mens du holder vunnet inntekt, provisjon og åpen rørledning synlig.

Kvoteutvinning er meningsfull bare når hver representant har en gjeldende kvote og avtaler som har riktig eieren, beløpet, valutaen eller nær status. Bruk lederbrett for coaching and recognition, ikke som det eneste kvalitetsmål; par den med avtale helse-, aktivitets -og prognoser nøyaktighet.

CRM

Utdelingsgodkjenninger

Godkjenninger krever manager avmelding før høyverditilbud kan merkes vunnet.

Produktskjerm
UtdelingsgodkjenningerGodkjenningspolitikken definerer to verdigrenseverdier og køen viser avventende, godkjente eller forkastede beslutninger.UtdelingsgodkjenningerarbeidsflatePOLICYAktivertWAITING6OLDEST3hLIV ARBETSPESSONENivå 1Deals fra £10,000LederNivå 2Deals fra £50,000SeniorFornyelse av virksomhet£72,000 · etterspurt av BenVenterMigrasjonsprosjekt£18,500 · etterspurt av RitaGodkjent1SET THRESHOLDS0 Deaktiverer et nivå2REQUESTRep sender avtalen3DECIDELegg til eller avslå
Godkjenningspolitikken definerer to verdigrenseverdier og køen viser avventende, godkjente eller forkastede beslutninger.

Slå på policyen og sett nivå 1 og nivå 2 terskelverdier. En grense for 0 deaktiverer det nivået. Når en ikke-manager prøver å vinne et avtale på eller over terskelen, OpsIQ oppretter en godkjenningsforespørsel i stedet for stille å endre scenen.

Administratorer og fulle administratorer er ikke blokkert av retningslinjene. Hver beslutning bør beholde forespurneren, godkjenneren, tiden og grunn til revisjonsevnen.

CRM

Livsyklusregler

Livsyklusregler flytter automatisk kontakter mellom trinnene når de aktuelle dataene samsvarer med en lagret tilstand.

Produktskjerm
LivsyklusreglerLivsyklusregler vurderes etter prioritet; den første matchende regelen endrer kontaktstadiet.LivsyklusreglerarbeidsflateAKTIVT7RUNSNattligPRIORITYHøyeste førsteLIV ARBETSPESSONELeder → Kvalifisertscore ≥ 60 og nylig aktivitetPrioritet 100Kvalifisert → KundenKjøp hendelse eksistererPrioritet 90Kunden→I fareingen aktivitet i 60 -dagerPrioritet 70I fare →Ny kjøp eller svarPrioritet 601PICK STAGESFra og til2DEFINE FILTERSegment-stil JSON3ORDER RULESFørste kamp vinner
Livsyklusregler vurderes etter prioritet; den første matchende regelen endrer kontaktstadiet.

Hver regel har et kildetrinn, målstadium, aktivt flagg og filter i segmentstil. Den planlagte livssyklusen evaluerer høyere prioriteter først og stopper etter den første kampen for en kontakt.

Regler bør være gjensidig forståelige. Unngå to aktive regler som kan flytte samme kontakt i motsatt retning under det samme kjøret. Test filtrer mot et segment før du aktiverer den.

CRM

CRM-aktivitetsstrøm

Arbeidsplassaktiviteten kombinerer kunde- og driftsarrangementer slik at teamene kan undersøke hva som skjedde uten å åpne hver modul.

Produktskjerm
CRM-aktivitetAktivitetsstrømmen chatter, billett, e-post, webhook, konvertering og anomali hendelser med filtre og paginasjon.CRM-aktivitetarbeidsflateHendelser2,804CUSTOMERS1,126ANOMALIES14LIV ARBETSPESSONEChat løst[email protected] AIBillet svarteT-1048· Billing4mInnbundet hendelsesubscription.upgraded12mKonverteringBestill #7788 · £14919m1FILTEREvent og kunde2OPEN CONTEXTHopp til rekorden3PAGE RESULTSHolde undersøkelser avgrenset
Aktivitetsstrømmen chatter, billett, e-post, webhook, konvertering og anomali hendelser med filtre og paginasjon.

Filtrer etter hendelsestype, dato eller kontakt-eller kundetilstand (inkluderende betalende kunder). Feed er en lesemodell av registrert aktivitet; det erstatte ikke kildebilletten, samtalen, avtaleposten eller koblingslisten. Åpne den koblede rekord før du tar sensitiv handling.

CRM

Arbeidsflyter

Arbeidsflyter reagerer på en hendelse og kjører en bestilt rekke handlinger, inkludert forsinkede skritt som gjenopptas av kronen.

Produktskjerm
ArbeidsflyterEn arbeidsflytkjøring viser utløseren, fullførte handlinger og venteforsinkelse.ArbeidsflyterarbeidsflateAKTIVT9RUNNING42FALDET1LIV ARBETSPESSONEUtløsercontact.createdStartTrinn 1Send velkomst e-postFerdigForseinkingVent 2 -dagerVenterTrinn 2Lag salgsoppgaveNeste1CHOOSE TRIGGEREvent starter kjøringen2ORDER STEPSHandlinger og forsinkelser3MONITORFortsett gjennom kronen
En arbeidsflytkjøring viser utløseren, fullførte handlinger og venteforsinkelse.

Opprette en arbeidsflyt ved å velge utløseren, legge til trinn i rekkefølge og aktivere den. Forseninger lagres ikke av nettleserforespurningen; det enhetlige kronen gjenopptar duale arbeidsflyt kjører.

Innebyggede startmaler inkluderer velkomst etter registrering, postkjøp takk-du og demobekreftelse. Klone en mal, erstatte mottakere/innhold, deretter test med et kontrollert register før bred aktivering.

Designhandlinger som skal være idempown. En reprøv må ikke sende duplikat penger-bevegelser forespørsler eller opprette kopierte poster.

Støtte

Biljett

Billetter er din formelle støttekanal. De har avdelinger, prioriteringer, SLA-mål, vedleggsnotater og full samtaletråding. Tickets kan komme fra OpsIQ admin, billettskjema/embedsform, e-postinntak, chatteopptrapping eller API.

Biljett
BillettdetaljerEn billett med et meta sidepanel (prioritet, avdeling, SLA-status), samtaletråden og AI utkast til og refundere handlinger.BilletarbeidsflateT-12345PrioritetHøyAvdelingFaktureringSLA3h12m leftStatusÅpneJeg ble tiltalt to ganger for minabonnement på juni 3.AIBekreftet duplikatetgebyr, refusjonsbehandling.AI-utkast til svarRefunder1THREADEDFull samtale + notater2SLA & ROUTINGPrioritet, depte3AI DRAFTSvar skrevet for deg
Hver billett har sin prioritet, avdeling, SLA timer og full tråd. AI kan skrive svaret for deg.

Hvordan en billett flyter

1
Billetten kommer

En kunde sender en melding via e-post, chatteskalering, billettintegrering eller administratoren oppretter en. Biletten får en unik ID (f. eks. T-12345).

2
Sorter

AI leser emnet og kroppen, tildeler prioritet (Low/Normal / High/Urgent), foreslår en avdeling. Dette skjer automatisk hvis triage er aktivert.

3
Svar

En agent åpner billetten, leser konteksten (kundeprofiler, plattformdata fra kontakter og tidligere billetter) og skriver et svar. AI kan skrive svaret, samt Agentredigering før du sender det.

4
Lukk

Når problemet løses, stenger agenten billetten. Kunde varsles. Hvis kunden svarer etter å ha stengt, åpner billettene automatisk igjen.

Per-billetter

Endre avdeling

Flytt billetten til en annen avdeling (f. eks fra General to Billing). Nyttig når den første ruten var feil.

Tilordne agent

Tilordne billetten til et bestemt teammedlem Den tildelte agenten ser billetten i visningen «Mine billetter».

Legg til internt notat

Skriv en note som kun er synlig for ansatte. Bruk til: etterforskningsfunn, refusjon grunner, ingeniørkontekst, tidligere forpliktelser. Internnotasjon ser aldri ut til kundene.

Slå sammen billetter

Kombiner dupliserte billetter fra samme kunde. Det flettede billettemnet får en [MERGED] tag. Alle meldinger fra begge billetten er bevart i den overlevende billettet.

Canned respons

Sett inn en forhåndsskrevet svarmal. Variabler som {{customer_name}} og {{ticket_id}} blir automatisk erstattet.

omskriver

La AI forbedre utkastet ditt svar: justere tone, forkorte/lengte, fikse grammatikk eller oversette. Du anmelder resultatet før du sender det.

Endre prioritet

Sett til Lav, Normal, Høy eller Urgent. Prioritet påvirker SLA timere og sorteringsordre

Endre status

Sett til Å åpne, vente på og venter på Kunden eller er løst.

Arbeidt eksempel: håndtering av en ulykkelig kunde

E-post fra kunde: «Jeg ble belastet to ganger for abonnementet mitt»

Scenario:
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.
Hva skal jeg gjøre:

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.

Avdelinger

Opprett avdelinger i innstillingene > Billetter> Avdelingskontor. Fellesavdeling: General, fakturering, Tekniske, Salg, Misbruk og Onboarding. Hver avdelingen kan ha ulike auto-reply regler, AI kunnskap og team oppdrag.

Innsjekket svar

Opprett gjenbrukbare svarmaler i innstillingene > Billetter> Canned-respons. Gode hermetiske reaksjonssvar inkluderer:

Eksempel hermetikkbelagt responsmal
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}}

Merger billetter

Når en kunde sender samme spørsmål flere ganger (via e-post og chat, eller to separate e-postadresser), kan du slå sammen kopiene. Gå til billetten, klikk Merge, velg den andre billett for å flette deg. Den overlevende billetten får alle meldingen fra begge billetter. Det fusjonerte emnet får et [MERGED] tag som indikerer at det ble kombinert.

Tilkoblede plattformer følger flettingen. Når billettene også er på en tilkoblede plattform (WHMCS, Zendesk, SaaS-kundeportalen), sammenslåingen skjer der også: plattformen fletter sine kopier så billetten du holder viser den fusjonerte kupongens første melding og svar. En slått billett som aldri var på denne plattformen har sin samtale lagt til i den holdt plattformbilletten som en privat personellnotat, aldrig som et svar kunden er epostet. Et slås sammen inne i plattformen (for eksempel i WHMCS) slås sammen OpsIQ billetter på samme måte.

Prioritet og SLA

Lav

Ikke-urgente spørsmål, funksjonsforespurnelser og generell tilbakemelding: 24 timer.

Normal

Standard støttespørsmål. Mål første respons: 8 timer.

Høy

Påvirkning av kundens virksomhet. Mål første respons: 4 _-timer

Haster

Tjeneste ned, sikkerhetshendelse, tap av data, faktureringsfeil. Mål første respons: 1 time

SLA-tidtakere starter når billetten opprettes, og stopper midlertidig når statusen er «Venter på kunde» Hvis SLA -målet ikke oppfylles, blir billetten uthevet og eventuelt eskalert.

Kan kunder se interne notater?+

Aldri. Interne notater er strengt ansatte-bare, de vises ikke i kundebilletten portalen eller epostvarslingene og noen kundevendte overflater.

Hva skjer når en lukket billett blir besvart?+

Billetten åpner automatisk og returneres til den aktive køen. Teamet er varsla om det nye svaret.

Kan jeg låse billett for å hindre ytterligere svar?+

Ja. Bruk alternativet Lås tråd for å hindre både kunde og AI fra å legge til nye svar. Nyttig i løste tvister eller stengt undersøkelser.

Støtte

Service Studio: SLA, statusstrøm og kvalitet

Kontrollrommet for hvordan din støtteoperasjon oppfører seg: SLA-policyer med eskaleringsstigere, kalendere fra virksomheten og driftstidene, en håndhevet statusstrømning, CSAT-innstillingene samt funksjonsbryterne. Åpne den fra billettsiden (knappen Service Studio i operasjonslinjen).

SLA-politikk

Hver ny billett får en første-reply og resolusjon tidsfrist fra den mest spesifikke aktive retningslinjen: avdeling + prioritet slår department, slå prioriteringen. Fristene pauser automatisk mens ein billett sitter i Venting eller På ventingen.

Escalation stiger

I stedet for en bruddhandling, kan det defineres opp til seks trinn: For eksempel advare utnevneren på 75% i vinduet, varsler på 100%, omsette til en navngitt agent på 150% Hvert trinn brann nøyaktig én gang per billett.

Forretningstimer og kalendere

Med arbeidstid på, SLA klokker bare brenne i løpet av arbejdstiden så en billett åpnes fredag kveld ikke brytes innen lørdag. Navngitt kalender (Tidssone, dager, timer og helligdager) kan være knyttet til individuelle retningslinjer for lag i ulike regioner.

Statusstrøm

En fra/til matrisebegrenser hvilken status endringsadministrasjoner kan gjøre, med en Zendesk-stil forhåndsinnstilling. Automasjonen, inngående epost og kundeorienterte billettsvar er alltid unntaket så en streng matrikse kan aldri jamne rørledningen. Valgfritt krever et godkjent avlogging før stenging.

Godkjenninger

Agenter ber om å logge av på billett (refundere over en terskel, policyunntak). En navngitt godkjenner eller enhver fulladministrator bestemmer med et notat; forespurnerne kan aldri godta sin egen anmodning. Ventar godkjenningsoverflaten som banner i innboksen.

Biljettforhold

Link billetter som relatert, duplisert eller foreldre/barnet eller blokkering; delt ut svar på en ny lenket billett (omvender fusjoneringen uten å e-poste kunden); følg billetter for i appvarsler og valgfritt CC følgere email adresser på outbound responder.

Levende innboks og kollisjoner

Med den sanntidsinnboksen aktivert, vil det vises nye billetter og svar for agenter innen få sekunder gjennom eksisterende varslingsstrøm. På en billett ser agentene hvem som ellers se på og får et advarselsbanner når lagkameraten allerede skriver ett spørsmål. En enkeltklikk-påstand tildeler billetten selv.

AI-medvitenskapelig rute

Ruteregler kan samsvare med AI triage signaler: prioritet, kategori, følelses- og eskalering risiko samt skrivne spesialfeltverdier fra portalen forespurn skjema. Regler ved bruk av disse betingelser holde sovende til funksjonen er aktivert.

💡
Alle selskapsbryterskip OFF. Slår på en i Service Studio → Kvalitet & Automation er opt-in; å la dem være av holder oppførselen identisk med før oppgraderinga.
Hvorfor kan en kunde fortsatt åpne opp til lukket billett når matrisen min forbyr stengt → åpen?+

Matrisen styrer kun ADMIN-handlinger. Kundeorienterte svar, epostsvar og automatisering er bevisst frigitt slik at en streng politikk aldri kan låse ut kunder eller bryte rørledningen.

Er det SLA-stiger som erstatter den gamle bruddhandlingen?+

Nei. Regler lagret med en enkelt bruddhandling fortsetter å fungere uendret. En stige erstatter bare den eneste handlingen på retningslinjer der du definerer trinnene.

Støtte

Billett autoreply og eskalering

Auto-reply lar AI reagere på nye billetter automatisk. Escalation flytter billetter til en annen avdeling når AI oppdager spesialiserte behov. Begge funksjonene fungerer over innfødte billett og epost opprettede billettar.

Autosvar
Automatisk svar på billetterEn flyt: ny billett, en to minutters forsinkelse, AI-svar fra kunnskap og kontekst. Deretter sendt eller lagret som et utkast.AutosvararbeidsflateNår en ny billett kommerNy billettenhver kildeForseinking2 minAI-svarKB + kontekstSendteller utkastHvis et menneske svarer under forsinkelsen, auto-reply kanselleres. Intenten kan eskalere til en annen avdeling først ;)1DELAYMennesker får første sjanse2AI REPLIESFra KB + sammenheng3OR ESCALATERute etter hensikt
Nye billetter får en kort forsinkelse (så mennesker kan hoppe inn), deretter et AI-svar fra kunnskapen din, sendt eller køet som utkast.

Hvordan auto-reply fungerer

1
Billet vises

En ny billett opprettes fra enhver kilde (email, chat, portal API).

2
Planlegg svar

OpsIQ Venter på den konfigurerte forsinkelsen (standard: 2 minutter). Dette gir menneskelige agenter en sjanse til å svare først.

3
Første svar vinner

Hvis en menneskelig agent svarer under forsinkelsen, automatisk-reply kanselleres. Dersom ikke genererer AI et svar.

4
Opprett og send

AI leser billetten, sjekker kunnskapsbase, kontaktkontekst og kundehistorikk. Deretter skriver vi et svar. Svaret sendes (eller blir køylagt som utkast til gjennomgang avhengig av innstillingene).

Hvordan eskalering virker

1
Konfigurere avdelinger

Sett hvilke avdelinger som kan motta eskalering (f. eks Billing kan eskaleres fra allmennheten, teknisk kan eskortes fra generell).

2
Klassifiser billetten

Før automatisk replying klassifiserer AI billetten til hensikt: fakturering, teknisk innholdsavgift og refusjon.

3
Flytt om nødvendig

Hvis billetten ikke samsvarer med en eskaleringsavdeling, flyttes billettene. En intern note forklarer hvorfor.

4
Opprett i ny stemme

Svaret genereres ved hjelp av destinasjonsavdelingens kunnskap og AI-trening.

Innstillinger referanse

Automatisk aktivert

Slå på for å aktivere AI automatisk reply til billetter.

Tillatte avdelinger

Hvilke avdelinger kan motta auto-replies. Start med lavrisikoavdeling (Generelt, Salg) før du aktiverer fakturering.

Forseinking

Hvor lang tid må man vente før AI-svarene (i sekunder). Standard: 120 sekunder (2minutter). Sett til0for øyeblikkelig svar.

Forsinkelsesplan

Velg forskjellig forsinkelser for arbeidstid vs. etter timer

Stopp på administratorsvar

Hvis en menneskelig agent svarer først, kansellere auto-reply. Standard: on

Escalation aktivert

Aktiver automatisk avdelingsruting basert på billett intensjon.

Escalation avdelinger

Hvilke billetter kan eskaleres til.

Eskaleringsstatus

Hvilken status skal angis når du eskalerer (f. eks, Åpne og venter).

Escalation Note

Om du skal legge til et internt notat som forklarer eskaleringsgrunnen.

E-postopprettede billetter

Billetter opprettet fra e-post (via postkassevalg eller MX piped levering) følger de samme automatiske og opptrappingsregler. AI svaret sendes som et svar på en email til kunden. E-postadresser går i kablene for gjennomgang hvis konfigureres.

Vil AI-en automatisk motta faktureringsspørsmål?+

Bare hvis du aktiverer automatisk for faktureringsavdelingen. Vi anbefaler at det starter med auto-reply off til fakturaering og gjør det mulig først etter å ha utdannet AI med omfattende fakturering kunnskap og testet grundig.

Hva om AI gir et feil svar?+

Hvis en kunde svarer at svaret var galt, bør et menneske intervenere. Gjennomgang AI-historien for å forstå hvorfor AI ga feil svar og deretter oppdatere kunnskapsbasen eller AI trening som hindrer det i å skje igjen.

Kan jeg se på autoreplies før de sendes?+

Ja. Angi leveringsmodusen til Kladd i stedet for Automatisk sending. Kladder med automatiske svar vises i kladdkøen, slik at de kan gjennomgås av en person før de sendes.

Støtte

Billettportalen er innpakket

Billettportalen embed lar deg legge til et billettstyringsgrensesnitt på alle nettsteder. Kundene kan se sine billetter, opprette nye og svare alt uten å gå inn OpsIQ administrator.

Hvordan det fungerer
Billettportalen er innpakketEn støtteportal som er innebygd på et nettsted og viser en kunde sine egne billetter, samt nybilletter.yoursite.com/supportStøttesenterNy billettDine TICKETS#1042 · Refundering spørsmålÅpne#1038 · KonfigurasjonshjelpLøst#1031 · FakturakopiVenter1EMBEDLegg til i ethvert nettsted2SELF-SERVEKundene ser billetter3NO LOGINIdentifikasjon håndtert sikkert
Billettportalen er innpakket

Tre embed smaker

Innvevd

Gjengivelse av billettportalen i en div på siden din. Portalen tar den fulle bredden til beholderen sin.

Flytende widget

Viser en flytende knapp som åpner billettportalen i et panel. Lignende til chat widget.

Autentisk

Krever en signert identitet token. Kundene ser bare sine egne billetter.

Installasjon

Billett og chat embed
<!-- 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.

Generasjon av identitetssymbol

For autentisert modus, skriver serveren din et kortlivet polikum med nettstedets hemmelighet. Dette symbolet forteller OpsIQ /who kunden er så de ser bare sine egne billetter. Det er en standard HS256 JWT: alle J WT bibliotek fungerer. Hemligheten går aldri inn på sidene.

PHP · generere identitetssymbol
<?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, generere identitetstoken
// 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 });
}

Widget-funksjoner

Billettliste

Søkbar, statusfiltrert liste. En "Venter på deg"-markering markerer billetter teamet har besvart.

Trådet samtale

Full samtalevisning med rik tekst, vedlegg og tidsstempler.

Utkast til autobesparende

Kundeutkast er automatisk utlevert, slik at de ikke mister jobben hvis det navigerer bort.

Live- avstemning

Vector-målingene for nye svar hvert ~12 sekunder.

Løs / gjenåpne

Kundene kan løse eller åpne sine egne billetter med ett klikk.

Interne medarbeidere er aldri vist til kunder i billetten embed. Dette er en hard sikkerhetsgrense.
Støtte

Chat innboks

Chat Inbox er der teamet ditt administrerer live kundesamtaler. Det viser aktive chatter, tildelte samtaler, AI-håndledde prater og arkivert historie.

Chat innboks
Chat innboksEn tre-panne agent chat innboks: samtaleliste, live samtalen med en AI utkast chip og et besøkende /CRM kontekstpanel.Chat innboksarbeidsflateJDJaneHvor er min ordreMOMensahCity in TunisiafaktureringsspørsmålRTTegnAI-håndteringHvor er ordren min?Sendt i dag · UPSAI-utkast klarSvar...VisitorJane DoeUSA · Chrome3 tidligere bestillingerLTV$480CRMSteg: Kunden1UNIFIEDHver live chat2CONTEXTBesøker + CRM-panel3AI ASSISTUtkast til omskriving
En innboks for hver live chat, samtaleliste, tråden med AI-utkast på trykk og full besøkende + CRM kontekst.

Håndtere samtaler

Aktive chatter

Samtaler som er i gang. Grønn prikk = kunde skriver eller nylig aktiv.

AI-håndtert

Samtaler der AI svarer. Du kan ta over når som helst ved å klikke på "Bli med."

Tildelt meg

Samtaler som er tildelt deg spesielt.

Venter

Samtaler hvor kunden venter på svar.

Arkiv

Ferdige samtaler. Søker etter søkeord, dato og kunde

Avgift fra AI til menneske

Når du tar over en samtale fra AI, følg disse tre reglene:

1
Velkomst personlig

Introduser deg selv ved navn. "Hei, dette er Sarah fra kundestøtteteamet."

2
Referansesammenheng

Vis at du har lest samtalen. «Jeg ser at du spurte om bestillingsstatusen din.»

3
Sett forventninger

Fortell kunden hva som skjer neste. - Jeg ser på dette nå og vil ha et svar for deg om noen minutter

Slår av/på AI per samtale

Bruk AI-bryteren øverst i hver samtale. Når AI er på, genereres svarene. Hvis av kan bare menneskelige agenter svare. AIL husker samtalekontekst selv når de slås av og tilbake på.

Bortmodus / ut av timer

Konfigurer åpningstider i Innstillinger. Utenfor åpningstiden kan AI: (1) Fortsett å svare på kunder, (2) Vis en "borte" -melding og opprett en billett for oppfølging, eller (3) Deaktiver chat helt og vis billettskjemaet.Velg oppførselen som passer din supportmodell.

Håndtere tøffe samtaler

1
Hold deg rolig

Ikke match kundens emosjonelle intensitet. Erkjenne frustrasjonen uten å være defensiv.

2
Samle fakta

Før du svarer, samle inn relevant informasjon: bestillingsdetaljer, kontostatus og tidligere billetter.

3
Escalate tidlig

Hvis situasjonen innebærer refusjon, juridiske trusler eller misbruk eskaler til et senior teammedlem i stedet for å prøve å håndtere det alene.

Kan jeg få lagchatt (agent til agent)?+

Ja. Bruk interne notater i en samtale for å kommunisere med andre agenter, og disse noter er aldri synlige for kunden.

Hva skjer når jeg lukker en chat?+

Samtalen beveger seg til Arkivet. Hvis kunden sender en ny melding senere, opprettes det nye samtalen.

Støtte

Meldingskanaler

Koble WhatsApp, Facebook Messenger, Instagram DM, Telegram og LINE slik at meldingene kunder allerede sender deg ankommer i samme innboks som din nettside chatten, svarte av den samme AI-assistenten.

Hver kanal oppfører seg identisk når den er koblet til: en kundemelding blir en samtale i Chatt-innboksen, svarer AI assistenten det ved hjelp av samme kunnskap og instruksjoner som din nettside chatten. Alle agentene kan ta over. Ingenting om ditt kunstige behov konfigurering per kanal.

Hvordan å koble til ser ut

Facebook Messenger &Instagram

Et klikk. Åpne kontaktpersoner → Facebook Messenger & Instagram DM, Klikk på Koble til og logg inn med den Facebook-kontoen som administrerer siden din, og velg Siden. Instagram kommer med det når siden har en Instagram profesjonell konto koblet sammen.

WhatsApp

Et klikk der leverandøren tilbyr det: åpne meldingshub-kontakt og bruk Connect WhatsApp, følg deretter Meta's guidede registrering for å plukke eller opprette WhatSapp Business nummer. Ellers lime inn legitimasjoner fra noen av 20 gateways.

Telegram

Two minutes. Message @BotFather in Telegram, send /newbot, choose a name and a username ending in "bot", and paste the token it gives you into the Telegram connector. OpsIQ registers the webhook for you.

LINJE

Opprette et meldinger API kanal på utviklere.line.biz, lim inn Kanalens hemmelige og tilgang token, deretter kopiere webhook URL Vist i OpsIQ til linie og slå sine egne auto-replies av.

SMS

Legg til en leverandør (Twilio, Vonage, Termi og andre) i meldingshub med sine legitimasjoner og avsendernummer.

Hver kontakt viser sine egne trinnvis instruksjoner inne i skuffen, inkludert nøyaktig hva du skal kopiere og hvor. Du trenger aldri utviklerinformasjon for one-click alternativene.

Slår på en kanal

Koble til en kanal starter den ikke. Gå til Innstillinger → Kunde Chat → Avansert → Meldingskanaler, slå på master-bryteren og deretter den enkelte kanalen. Hver kanal har sin egen AI autoreply bryter så du kan pilote på en før å åpne resten.

1
Koble kanalen

I konnektorer, ved hjelp av instruksjonene i den koblingens skuffe.

2
Test tilkoblingen

Klikk Test. Det gjør en ekte samtale til leverandøren og forteller deg hva som er galt hvis noe er det.

3
Aktiver meldingskanaler

Innstillinger→Kunde Chat→Avansert. Slå på masterbryteren, deretter kanalen.

4
Send deg en melding

Fra en annen konto, be om melding med siden din eller nummeret ditt. Den bør vises i Chat Inbox innen få sekunder og få et AI-svar.

Svar på vinduer

Meldingsplattformer begrenser hvor lenge en virksomhet kan svare etter at kunden skriver.OpsIQviser den gjenværende tiden på hver samtale og håndhever regelen for deg.

WhatsApp

24 timer fra kundens siste melding. Deretter kan du bare sende en godkjent mal, som du konfigurerer i samme avanserte fane.

Messenger &Instagram

24timer for normale svar; agenter kan svare opp til7Dager senere under Meta’s human-agent støtte.

Telegram, LINJE

Ingen plattform-imponert vindu.

⚠️
Hvis et svar mislykkes fordi vinduet stengt, viser samtalen hvorfor. Dette er en plattformregel ikke en OpsIQ -grense.

Vanlige spørsmål

Ser du at en AI-konto er svart?+

Bare hvis du forteller dem. Svaret kommer fra siden, nummer eller bot nøyaktig som et menneskelig svar ville. Din AI-instruksjoner kontrollerer tonen og om det identifiserer seg selv.

Kan en agent ta over midtkonversasjon?+

Ja. Åpne samtalen i Chat Inbox og klikk Bli med. AI stopper, skriver du inn, og kunden ser en kontinuerlig tråd på deres side.

Hva om jeg kobler fra en kanal?+

Bruk Koble til i kontakt. Meldingshistorikken holdes; nye meldinger slutter bare å ankomme, og plattformen blir fortalt at du skal slutte å sende dem.

Kan to arbeidsplasser bruke samme Facebook-side?+

Nei. En side tilhører ett arbeidsområde om gangen. Koble den til et annet sted flytter det, og det første arbeidsområdet slutter å motta meldinger, så koble av bevisst i stedet for gjenkobling andre steder.

Støtte

Ekte chat samtaler

Disse eksemplene viser hvordan en velutdannet kunde AI bør håndtere vanlige scenarier. Bruk dem til å teste din AI-trening og identifisere hull.

10 samtaleeksempler

1. Returnerer kunden spør om bestilling

Scenario:
Kunde: Hei, jeg har bestilt3dager siden og har ikke mottatt noen forsendelsesvarsel ennå. Bestill #ORD-5523.
Hva skal jeg gjøre:

AI bør: (1) Se opp bestilling #ORD-5523 gjennom koblingen.2) Rapporter gjeldende status og sporingsinformasjon om tilgjengelig. (3) Hvis ordren er forsinket, kan du bekrefte forsinkelse og gi en beregnet tidslinje. (4) Ikke oppfinn en fraktstatus dersom kontakten ikke har én.

2. Prospect spør om priser

Scenario:
Kunde: Hvor mye koster din Pro-plan? Tilbyr du årlig fakturering?
Hva skal jeg gjøre:

AI skal: (1) Svar fra kunnskapsgrunnlaget med gjeldende pris. (2) Forklar forskjellen mellom månedlig og årlig fakturering. (3) Hvis svaret ikke er i kunnskapsgrunnlaget, si det og tilby å koble dem med salg. (4) Ikke oppfinn priser som ikke er i kunnskapsgrunnlaget.

3. Angry kunder som krever refusjon

Scenario:
Kunde: Dette er latterlig! Produktet ditt fungerer ikke, og jeg vil ha pengene mine tilbake NU.
Hva skal jeg gjøre:

AI bør: (1«Kjenner frustrasjonen rolig.»2) Be om bestillingsnummer eller konto e-post. (3Forklar tilbakebetalingsprosessen. (4) Opprette en støttebillett eller eskalere til et menneske. (5Ikke lov en refusjon, det krever menneskelig godkjenning.

4. Dobbelt fakturering kant saken

Scenario:
Kunde: Jeg ble belastet to ganger i måneden. Min bank viser 2 kostnader på $29.99.
Hva skal jeg gjøre:

AI bør: (1) erkjenne bekymringen. (2) Samle de relevante detaljene (email, datoer for avgifter).3Forklar at faktureringsproblemer krever menneskelig gjennomgang. (4) Opprette en billett fra faktureringsavdelingen med detaljene. (5Sett prioritet til høy.

5. Flerspråklig kunde

Scenario:
Kunde: Bonjour, je voudrais savoir si Vous livrez en Frankrike?
Hva skal jeg gjøre:

AI skal: (1) Svar på kundens språk hvis dette språket støttes. (2) Svar på spørsmålet om levering til Frankrike fra kunnskapsgrunnlaget. (3) Hvis språket ikke støttes, kan du svare på standardspråket og nevne hvilke språk som er tilgjengelige.

6. Etter timers samtale

Scenario:
Kunde: Hei, er det noen der? Jeg trenger hjelp med kontoen min.
Hva skal jeg gjøre:

AI bør: (1) Hvis konfigurert for etter-time AI, svare og hjelpe. (2) Hvis det opprettes billetter etter kontortid, sier du: "Vårt team er for øyeblikket frakoblet. Jeg har opprettet en støttebillett for deg og noen vil følge opp i arbeidstiden."3) Oppgi billettnummeret.

7. Forkjøpssammenligningsbutikk

Scenario:
Kunde: Hvordan sammenligner produktet ditt med [Competitor X]?
Hva skal jeg gjøre:

AI skal: (1) Beskriv produktets styrker faktisk. (2) Ikke røff konkurrenten. (3) Hvis det er en sammenligningsside i kunnskap basis, lenke til den. (4) Hvis kunden spør om funksjoner du ikke har, vær ærlig.

8. Kunden ønsker en anbefaling

Scenario:
Kunde: Jeg kjører en liten nettbutikk med om lag 100 -bestillinger per måned. Hvilken plan er riktig for meg?
Hva skal jeg gjøre:

AI skal: (1) Stille utklaringsspørsmål om det er nødvendig (f.eks, hvilke funksjoner som betyr mest). (2) Anbefale en plan basert på kunnskapsgrunnlaget. (3) Forklar hvorfor planen passer til deres behov. (4) Mensjon om at de kan starte med en mindre plan og oppgradere senere.

9Kunden prøver å få en uautorisert rabatt

Scenario:
Kunde: Jeg så på nettet at du gir 50% rabatter. Kan jeg ha en?
Hva skal jeg gjøre:

AI bør: (1) Forklare aktuelle kampanjer om noen eksisterer. (2Ikke lag eller lov rabatter som ikke er i kunnskapsgrunnlaget. (3) Hvis kunden vedvarer, tilby å koble dem med salgsteamet.

10. Kunden trenger hjelp med en funksjon

Scenario:
Kunde: Hvordan eksporterer jeg dataene mine? Jeg kan ikke finne eksportknappen.
Hva skal jeg gjøre:

AI bør: (1) Gi trinnvis instruksjoner fra kunnskapsgrunnlaget. (2) Inkluder den nøyaktige sidestien og knappplassering. (3Hvis funksjonen krever en bestemt plan, nevne det. (4Hvis funksjonen ikke eksisterer, vær ærlig og foreslå alternativer.

Støtte

Chat routing og eskalering

Når en live chat trenger en ekte person, svarer AI to spørsmål: hvilket team eier denne samtalen og hvem som bør fortelles. Begge er konfigurert i Innstillinger, klient Chat, Support Flow under AI routing avdelingar.

Velg hvilke avdelinger AI kan bruke

De to boksene på panelet er en hvitliste. Avdelinger som flyttes til høyre, er de eneste AI kan rute inn eller åpne billetter i. Alt venstresiden av den er usynlig for det, selv om avdelingen eksisterer og bemannas. Start smalt og legg til departement når du ansatte dem.

💡
Hvis ingen avdeling er aktivert i det hele tatt, faller OpsIQ tilbake til arveruting over alle avdelingene den kan finne. Behandle at som et sikkerhetsnett ikke en konfigurasjonsvalg.

Hvem får eskaleringen

Dette er den delen de fleste forventer å konfigurere og ikke trenger. Når AI eskalerer en chat, OpsIQ -Emails folk knyttet til det avdelingen. Du administrerer listen én gang på siden Team and Departments, samt både billettopptrapping og chattut stigning følger etter det.

Departementets medlemmer

Hver aktiv administrator som er tilknyttet avdelingen får sin egen kopi. Suspendert og funksjonshemmede kontoer hoppes over.

Primær admin

Brukes når ingen lagmedlemmer er tilknyttet, så en eskalering nås fortsatt noen.

Ingen vedlagt

Levering er ikke mulig. Rutepanelet merker at avdeling i rødt og AI forteller besøkende et menneske ble varslet om det.

⚠️
En avdelings egen e-postadresse brukes ikke bevisst som mottakeren. Den adressen er avdelingens inngående billettpostkasse, den ene inngangen post matches mot å åpne billetter. Et oppgradering sendt det ville bli pipet tilbake i som ny billett snarere enn når et menneske.

Fangst-alle avdelingen

Akkurat én avdeling bærer catch-all mark. Det mottar chatter AI ikke trygt sted, og det er en siste feriested i stedet for normal stien.

1
Klare signaler vinner

Billing formulering går til en faktureringsavdeling, hosting og feilformulering til et teknisk nummer, kjøpe ordlyden på salg.

2
AI-klassifiseringslederen prøver neste

Hvis søkeord er ufullstendig, leser modellen samtalen og plukker fra de aktiverte avdelingene.

3
Så er det alle som tar

Bare når begge kommer opp tom får catch-all avdelingen samtalen.

4
Salgsvakten

Hvis catch-all er en salgsavdeling og besøkende ikke viste noen kjøpesignal, OpsIQ leter etter støtte eller teknisk avdeling i stedet så vanlige supportspørsmål samles ikke opp i Salg.

Hva besøkende får beskjed om

Hvis e-posten går ut, forteller AI den besøkende at laget har blitt varslet. Dersom det ikke kan gå ut, sier AI noe ærlig og inviterer dem til å forlate melding i chatten i stedet. Det vil ikke hevde et menneske ble varsling når ingen email er sendt.

Panelet sier "Ingen å varsle" for en avdeling+

Ingen er knyttet til det. Åpne team og avdelinger, vedføye minst én aktiv administrator, deretter laste innstillingssiden på nytt. Panelet leser live.

Kan chatteopptrappinger gå et annet sted enn teamet?+

Ja. En egendefinert adresse som tidligere har blitt lagret for et avdelingsland, overgår fremdeles laglistene. Nye oppsett bør legge folk til i avdelingen i stedet så det er ett sted å vedlikeholda.

Hvorfor ble alle mine grep hoppet?+

Sjekk om det er en salgsavdeling. Hvis den er, og besøkende ikke viste noe kjøpesignal, OpsIQ ruter til et støtte- eller teknisk avdeling med hensikt.

Støtte

E-postbokser og utkast

OpsIQ kan koble til e-postkasser for å automatisk opprette billetter fra innkommende email og sende svar som e-postadresse. Det gir også AI-utformede svar på menneskelig gjennomgang.

E-post
E-post til billettEn IMAP -postkasse til venstre som mater innkommende emails i en gjenget billett med et AI-utgitt svar på høyre.E-postarbeidsflate[email protected] · IMAPRefundering[email protected]Kan ikke logge inn[email protected]Fakturakopi[email protected]billett #1042fra e-post · BillingJeg vil ha en refusjon forDuplisert ladning...AI-utkastReview & Send svar1INGESTIMAP /videresending i2TO TICKETSTrådet automatisk3AI DRAFTSSvar på anmeldelse
Trekk e-post inn IMAP (eller videresending), gjøre hver til en gjenget billett, og la AI-en skrive svaret for gjennomgang.

Koble til en postboks

Protokoll

IMAP (de fleste leverandører), Gmail API (Google Workspace) eller Microsoft Graph 365).

Innstillinger som trengs

Vert, port og kryptering SSL/TLS), brukernavn, passord eller apppassord (vanligvis INBOX).

Avdelingskartlegging

Tilordne postboksen til en billettavdeling. E-poster til [email protected] oppretter billetter i "Support" -avdelingen.

Gmail-oppsett (stegvis)

1
Aktiver 2-Step Verifisering

Gå til Google-konto > Sikkerhet > 2_Step Verifisering og aktiver den.

2
Opprette et apppassord

Gå til Google-konto > Sikkerhet > Apppassord. Velg E-post og Annet (OpsIQ Kopier teksten 16-tegn passord.

3
Enter inOpsIQ

Gå til e-post > Postbøker> Legg til. Sett vert: imap.gmail.com, port: 993, kryptering: SSL, brukernavn: [email protected], passord: app-passordet.

4
Test

Klikk Testtilkobling. Hvis vellykket, OpsIQ vil begynne å polling for nye e-poster på det konfigurerte intervallet.

Outlook 365 -oppsett

1
Sjekk IMAP er aktivert

I Outlook-innstillinger > Epost> Synkroniser email, forsikre IMAP er aktivert.

2
Bruk apppassord eller moderne aut

Hvis MFA er aktivert, kan du opprette et apppassord. Ellers bruker du det vanlige passordet ditt.

3
Enter inOpsIQ

Vært: outlook.office365.com, port: 993, kryptering: SSL, brukernavn: [email protected].

cPanel -webmailoppsett

1
Finn IMAP innstillinger

I cPanel > E-postkontoer, klikk på epostadressen din for IMAP innstillinger.

2
Enter inOpsIQ

Vært: vanligvis mail.yourdomain.com eller din serverens vertsnavn, port: 993 (SSL) eller 143 (STARTLS), brukernavn: full e-postadresse.

AI e-postutkast

Når autosvar er satt til kladdemodus, genererer kunstig intelligens kladder som vises i kladdkøen.

Anmeldelse

Les utkastet og sjekk for nøyaktighet.

Rediger

Endre tekst, tone eller innhold før du sender.

Send

Legg til utkastet og send det som et e-postsvar.

Forkast

Slett utkastet hvis det ikke er passende.

Autosend

Hvis tilliten er høy nok og auto-send er aktivert, sendes utkast automatisk etter en konfigurerbar forsinkelse.

Hvorfor blir ikke e-poster konvertert til billetter?+

Sjekk: (1) Er postkassen tilkoblet og sunt? Se etter grønn status i e-postmeldinger. (2) Er kronejobben i gang? E-postvalg krever cron. (3) blir e-posten filtrert eller flyttet til en annen mappe enn INBOX?

Kan jeg bruke flere postkasser?+

Hver postkasse kan kartlegges til en annen avdeling. [email protected] Gå til støtte, [email protected] Går til Billing.

Støtte

Kundetilfredshet (CSAT)

CSAT måler billett og chattilfredshet, overflater ulykkelige svar og sammenligner AI-og menneskelige resultater.

Produktskjerm
KundetilfredshetCSAT siden kombinerer scorekort, detractor oppfølgingen, kommentarer, avdeling og agent innlegg samt Chat tilbakemeldinger.KundetilfredshetarbeidsflateRESPONSER386AVERAGE4.6POSITIVE91%LIV ARBETSPESSONEDetractor-oppfølging12 svar rangert1–2AnmeldelseBillettundersøkelserSendt 24h etter avslutningAutomatiskChat tilbakemeldingerAI 4.5 · Menneskelig 4.7SammenlignAgentvisningPoeng og responstallTrener1WATCH AVERAGEBruk trend, ikke én poeng2FOLLOW DETRACTORSLes kommentaren3COMPARE FAIRLYAI og menneske
CSAT siden kombinerer scorekort, detractor oppfølgingen, kommentarer, avdeling og agent innlegg samt Chat tilbakemeldinger.

Billettundersøkelser er planlagt etter avslutning (normalt 24 timer senere). En positiv respons er en score på4eller 5. Bruk detractor køen for poeng av 1 eller2Les billetten/konversasjonen før du kontakter kunden.

Chat tilbakemeldinger er rapportert separat for AI-oppløste og menneskehåndterte samtaler. Lav prøvestørrelser bør ikke brukes til å rangere agent eller modeller.

Støtte

Lag e-postsendinger

Siden e-postplattform lar en autorisert operatør sende éngangsmelding til alle aktive agenter, valgte agenter eller et avdelingskontor og gjennomgåelse sender historie.

Produktskjerm
E-postplattformTeamet e-postkomponist viser publikum, emne og meldinger.E-postplattformarbeidsflateREVELCAS12DELIVERED11FALDET1LIV ARBETSPESSONEPublikumAlle aktive midlerVelgEmneJuli støtte rotaKlarMeldingPlanlegg og eskaler notateneKlarHistorieTidligere sendinger og resultatVis1CHOOSE PEOPLEAlle, valgte eller lag2WRITE CLEARLYEmne og melding3REVIEW HISTORYBekreft utfall
Teamet e-postkomponist viser publikum, emne og meldinger.

Denne siden er for interne driftsmeldinger, ikke kundemarkedsføring. Velg det minste riktige publikumet som vises i forhåndsvisningen og adressene så send. Levering bruker konfigurert utgående e-poststi og registrerer resultatet.

Støtte

Postbokser, levering og inngående e-post

Konfigurer hvordan OpsIQ sender e-post, gjør inngående meldinger til billetter og beviser at sendedomenet er klart.

Produktskjerm
E-postinnstillingerE-postinnstillinger kombinerer utgående rute, Fra identiteten til postkasseinntaket og leveringskontrollene samt teste email.E-postinnstillingerarbeidsflateUteboundSMTPMAILBOXES3DOMENEPassLIV ARBETSPESSONEForetrukne kontaktSMTP / leverandørkontaktKonfigurertFra identitetSupport <[email protected]>KlarIMAP postkasse[email protected]· INBOXAvstemningLeverbarhetSPF · DKIMPass1CHOOSE OUTBOUNDKoble eller SMTP2CONNECT INBOXIMAP eller rør3TESTSend og verifiser
E-postinnstillinger kombinerer utgående rute, Fra identiteten til postkasseinntaket og leveringskontrollene samt teste email.

Utgående e-post

Fulle administratorer kan velge den foretrukne e-postkontakten; OpsIQ tilbake til konfigurert SMTP/mail levering når det er nødvendig. Velg gjenkjennelig Fra navn/adresse, send en test og sjekk den 24-timers suksess/feilmålinger.

Postbokser

En IMAP -postkasse trenger et navn, email adresse, målavdelingen, vertsland, sikkerhetsmodus, brukernavn, passord, mappen, valg av pollingtilstand og sertifikatvalidering. Bruk Poll nå å verifisere inntaket før du venter på kron.

Øyeblikkelig piping

På samme server kan et e-postrør passere den rå RFC822-meldingen direkte. En ekstern postserver kan POSTere det røynslesignalet til beskyttet inngående endepunkt ved hjelp av sin tokn. Begge stiene går i samme deduplikasjon, tråding og billettrutende rørledning.

Leverbarhet

SPF/DKIM / DMARC-kontrollen er rådgivningsbevis for det konfigurerte domenet. En grønn sjekk garanterer ikke plassering i innboksen, men en feil bør fikses før du sender produksjonsmeldinger.

Støtte

Støtteportal Studio

Støtte Portal Studio designer og publiserer kundestøtteopplevelsen uten å kreve eksterne bilderessurser.

Produktskjerm
Støtteportal StudioPortal Studio viser en responsiv forhåndsvisning sammen med tema, navigasjon og kunnskaper om billett, assistent, skjema. CSS kontroller.Støtteportal StudioarbeidsflateTEMPLATEModerneForespørselSkrivebordStatensUtkastLIV ARBETSPESSONETemaMerkefarger og typografiRedigerNavigasjonKunnskap, billetterRedigerBillettskjemaFelter, routing og kopiRedigerPubliserValider og lag liveAnmeldelse1CHOOSE TEMPLATEStart fra strukturen2PREVIEW SIZESSkrivebord til mobil3PUBLISH SAFELYReview deretter utgivelse
Portal Studio viser en responsiv forhåndsvisning sammen med tema, navigasjon og kunnskaper om billett, assistent, skjema. CSS kontroller.

Bruk malen som utgangspunkt, deretter konfigurere tema, layout, navigasjon, kunnskapssøk, billettskjema, assisterende, bunntekster, merkevare, billettsadferd CSS og generelle innstillinger. Forhåndsvisning av skrivebord, nettbrett og mobil før publisering.

Støtte

Kunnskapsgap

Kunnskaps-gap køen samler kundespørsmål som AI ikke kan svare trygt på, slik at teamet kan forbedre dekning.

Produktskjerm
KunnskapsgapGap kø ranger misset eller lav tillit spørsmål og spor om team har løst dem.KunnskapsgaparbeidsflateOPEN GAPS28REPEATED9RESOLVED116LIV ARBETSPESSONEMigrasjonsgrenseneSpør 14 gangerHøyStøtte i helgenSpør 8 gangerMiddelsRefunderingstidSpør 6 gangerMiddelsAPI regionenSpør 3 gangerLav1REVIEW QUESTIONSe konversasjon2CHOOSE FIXArtikkel eller rask3RESOLVEBekreft neste svar
Gap kø ranger misset eller lav tillit spørsmål og spor om team har løst dem.

Åpne et gap for å lese det opprinnelige spørsmålet og den nærliggende samtalen, deretter velge riktig fikse: oppdater en eksisterende artikkel opprett en ny kunnskapsartikkel . Legg til et forretningsfakt ; korrekt kontaktdata eller endre eskaleringsinstruksjoner ] Merk at dette bare løst etter vurdering eller reell test gir ett akseptert svar

Støtte

Statussideadministrasjon

Statusadministrasjonssiden kommuniserer tjenestehelse og hendelser ved hjelp av komponenter, aktuelle stater og oppdateringer.

Produktskjerm
StatusadministrasjonStatusadministrasjon lister komponenter og hendelser slik at operatører kan publisere klar, tidsforsterket serviceinformasjon.StatusadministrasjonarbeidsflateOVERALLOperasjonellKOMPONENTER7INCIDENTS1LIV ARBETSPESSONENettstedOperasjonellGrønnAPINedgradert ytelseSeE-post inntakOperasjonellGrønnNåværende hendelseAPI latensundersøkelseÅpne1UPDATE COMPONENTVelg klar tilstand2POST INCIDENTTidsstemplede oppdateringer3RESOLVENært med sammendrag
Statusadministrasjon lister komponenter og hendelser slik at operatører kan publisere klar, tidsforsterket serviceinformasjon.

Bruk komponenttilstander konsekvent. Når en hendelse påvirker kunder, publisere et første varsel, legg til tidsforsterkede oppdateringer som fakta endres og i nærheten av ett koncist oppløsning sammendrag. Ikke bruk statussiden som intern feilsøkingslogg; sensitiv diagnostikk tilhører i OpsIQ og serverlogger.

AI

Sett opp din AI

AI Configuration er der du velger din AI-leverandør, modell og kostnadskontroll. OpsIQ støtter flere leverandører: Claude (Anthropic), GPT-4o (OpenAI), Gemini (Google) og Grok (xAI). Du kan bruke din egen API nøkkel (BYOK) eller administrert AI hvis tilgjengelig på planen din.

Sett opp AI
AI-konfigurasjonEt AI innstillingspanel: en Managed-AI / BYOK leverandøren bytter, en modellvelger og et månedlig token-budsjettmåler.AI-konfigurasjonarbeidsflateAI-konfigurasjonLeverandørAdministrert AINøkkelen din (BYOK)Modellclaude · balansertMånedlig AI budsjett62%1TWO MODESAdministrert AI eller BYOK2PICK A MODELHastighet vs dybde3BUDGETSToken caps & kostnadskontroll
Velg Managed AI eller din egen nøkkel, velg en modell for hastighet vs dybde og cap månedlig bruk med et token budsjetter.

Velge leverandør

Claude (Anthropic)

Sterk resonnement, forsiktig med fakta, god til å følge komplekse instruksjoner. modeller: claude-sonnet -4-20250514, claude-3.5-sonnet. Best for: støtte samtaler, tekniske spørsmål og detaljert analyse

GPT-4o (OpenAI)

Rask, kreativ og god generell kunnskap. Modeller: gpt-4o ; gp- 4O - mini · Best for : raske svar, kreativ skriving

Gemini(Google)

God på faktaspørsmål, støtte for flerspråklige. Modeller:gemini-2.0-Flash,gemini-1.5-pro. Beste for: flerspråklig støtte, faktiske oppslag.

Gul (xAI)

Raske, konsistente svar. Modeller: grok-3-mini-fast. Best for: raske svar, casual tone

BYOK vs Administrert AI

BYOK (Bring din egen nøkkel)

Du gir din egen API -nøkkel fra leverandøren. Du betaler tilbyder direkte. Full kontroll over modellvalg og bruk.

Administrert AI

AI leveres som en del av din OpsIQ Plan. Nei API Nøkkel nødvendig. Bruken måles mot planen din AI kreditt saldo.

Trinn-for -stegoppsett

1
Gå til AI-konfigurasjon

I OpsIQ admin, naviger til Innstillinger > AI-konfigurasjon.

2
Velg leverandør

Velg din AI-leverandør fra nedtrekksboksen.

3
Skriv inn API nøkkel

Hvis du bruker BYOK Skriv inn din API Nøkkel. For Administrert AI, dette håndteres automatisk.

4
Velg modell

Velg den spesifikke modellen å bruke. Mindre modeller er raskere og billigere. Større modeller gir bedre kvalitet svar.

5
Testtilkobling

Trykk « Test tilkobling » for å bekrefte at API -nøkkelen og -modellen fungerer. En grønn hake betyr vellykket.

6
Lagre

Klikk på Lagre for å aktivere din AI-konfigurasjon.

Kostnadskontroll

Månedlig budsjett

Sett en maksimal månedlig bruk på AI-tokens. Når budsjettet er nådd, har AI graciøst nedgradering (kortere svar uten auto reply) i stedet for å stoppe helt.

Per konversasjon token grense

Maksimale polletter per enkelt samtale. Forhindrer løpende samtaler fra å konsumere overdreven kreditt.

Lav balansevarsel

Når din AI kredittsaldo synker under terskelen (standard: 50,000 en advarsel vises i administratoren. Velg dette under AI- konfigurasjon.

Konfigurasjon av per arbeidsrom

AI-konfigurasjonen er per arbeidsrom. Hvis du administrerer flere nettsteder, kan hver arbeidsområde bruke en annen leverandør og modell eller budsjett. Arbeidsområdet arver globale standard med mindre overstyrt. For å konfigurere hvert arbeidsområde: bytte til arbeidsområdet, gå så til AI konfigurasjon og lagre innstillingene der.

Hente API nøkler

Anthropic(Claude)

Gå til console.anthropic.com > API Taster > Opprett nøkkel. Kopier nøkkelen som begynner med "sk- an-".

OpenAI(GPT)

Gå til platform.openai.com > API Taster > Lag ny hemmelig nøkkel. Kopier nøkkelen som begynner med « sk- ».

Google (Gemini)

Gå til aistudio.google.com > Få API Nøkkel. Opprett en nøkkel for prosjektet ditt. Kopier nøkkelen.

xAI (Grekk)

Gå til console.x.ai > API Opprett og kopier nøkkelen din.

Testing av AI-oppsett

Scenario:
Etter at du har skrevet inn din API -nøkkel, klikker du på "Test tilkobling" Du bør se en grønn hake og et eksempelsvar fra AI.
Hva skal jeg gjøre:

Hvis testen ikke lykkes: (1) Sjekk at API Nøkkelen er riktig (ingen ekstra plasser).2) Sjekk at kontoen din har fakturering satt opp med leverandøren. (3Kontroller at modellens navn er gyldig. (4), Hvis du bruker Managed AI, bekrefter lisens er aktiv.

Hvilken leverandør er best?+

Det er ingen enkelt beste leverandør. Claude er utmerket for støttesamtaler. GPT-4o er raskt og allsidig. Gemini håndterer flere språk godt. Prøv hver ene og se hvilke som gir de beste resultatene til din bestemte brukssak.

Kan jeg bytte leverandører senere?+

Ja. Endre leverandøren og API -nøkkelen når som helst. Eksisterende samtalehistorie er bevart. AI vil bruke den nye tilbyderen for alle fremtidige samtaler.

Hva skjer når jeg ikke har fått kreditter?+

AI-en nedgraderer graciøst: svarene blir kortere, automatiske pauser og administratoren viser en lavbalansert advarsel. Core tracking, billetter og CRM fortsetter å fungere uten AI.

AI

Smartere og billigre kundechat

Et sett av opt-in kontroller som gjør kundechatten din smartere (det grunner på tvers av en kundes konto som et menneske) eller billigere (den sender AI mindre, eller svar i færre trinn). Hver kontroll er slått ut som standard og uavhengige. Slår den på aldri endre andre atferd. De fleste lever under innstillingene > klient Chatt> Atferd; noen få er på å konfigurere ditt AI og trene AI'en din.

Smartere svar (agentmodus)

En normal chatbot svarer på ett spørsmål fra en oppslag. Med Agentmodus on, the assistant can make several read-only account checks in a single turn and cross-reference them, e.g. "do I have open tickets, and is my balance enough for my next renewal?" is answered in one reply with the maths done. It only engages for verified customers on account or refund questions; everything else runs the normal single-answer path.

Agentmodus

Opp til noen få lesebare oppslag per tur, kryssreferert før svar. Slå på når du har en koblet plattform (WHMCS, Shopify Stripe, Zendesk etc.). Av = dagens en-søkeadferd, uendret.

Tenker dybde for agent svar

Hvor hardt modellen grunner til komplekse sving (lav/medium / høy). Start på Low; de fleste støttespørsmål håndteres godt der.

Agentmodell

Pins en sterkere modell bare for kompleks agent svinger, så daglig chat holder seg på et lys, billig modeller og kun de harde vendene betaler for dybde. Blank = din normale kunde-chat modellen.

Planlegg fremover · One-pass svar (beta)

Et lite planleggingssteg bestemmer hvilke oppslag som skal trekkes og om kunnskapsgrunnlaget er nødvendig, så svarer i et hovedsamtale istället for flere trinn. En under-toggle under Agent modusen. Det kan ikke slås på med mindre agentmodus er aktivert. Samme svarkvalitet, færre samtaler på flerdelt spørsmål.

Samtale og forståelse

Langkonversasjonsminne (beta)

Beholder en kort løpende sammendrag av eldre meldinger (navn, billett/fakturatall og beløp) slik at assistenten forblir konsekvent over svært lange chatter uten å endre hele transkripsjonen. Beste støtte-tunge, lange trådene; par med Agentmodus.

Typotoleranse

Leser små skrivefeil ("mine åpne billetter", "ubetalte fakturaer") som de tiltenkte ordene, slik at riktig informasjon blir funnet i stedet for å gå glipp av. Fungerer med alle tilkoblede plattformer. Av som standard; nyttig for mobil-tung chat.

Lean konto sammenheng

Bare fest kundens kontobilde når spørsmålet faktisk handler om kontoen (balansen, fakturaene og billettene), hopper over det på generelle spørsmål. Skutt kostnader uten tap av kvalitet. Assistenten kan fortsatt hente kontoen live hvis en tur trenger den.

Kostnadsbesparende

Hopp over kunnskapssøk etter hilsener (beta)

"Hi", "thanks" and "ok" don't trigger a knowledge-base search, those replies never use it. Any message with real content still searches as normal.

Lengste svar tillatt (tokens)

Caps hvor lenge et enkelt svar kan være. Svarlengde er den dyreste delen av en samtale, så en fornuftig hette (rundt 500 for støtte) er det enkle mest effektive chat cost control. Bare senker din globale grense, aldri hever det.

På å sette opp din AI

Tenker dybde (customer & admin chat)

Hvor mye modellen tenker før du svarer (minimell til høy). Hold kundechatten på minimal/lav for hastighet; reserver høyere innstillinger for analyse og administrasjonspilot.

Per-AI modell (per jobb)

Hver AI-overflate (liveschat, billettutkast, summerer, analyse, admin copilots, kampanjer og mer) kan kjøre på sin egen modell. Lys der hastigheten betyr noe som er viktig, sterk hvor kvaliteten spiller roller. Blank på en overflate = leverandørstandard for den jobben.

Admin chat kostnadskontroll

Admin copilot kan holde et avgrenset arbeidsminne og laste bare verktøyene som du trenger (lean Tools) i stedet for hvert redskap hver tur.

På trene din AI

Kompressinstruksjoner

Instruksjonene dine sendes på hver tur, så lengden er en gjentakende kostnad. Compress-knappen skriver om et spor for å si det samme i færre ord. Det nekter reskriving hvis den vil slippe noen {variable} eller regel og rapporterer hva som beskyttes slik at det aldri stille endrer mening.

"Hva er allerede i hjernen" (ℹ️)

Viser hva OpsIQ allerede vet om virksomheten din per spilleautomat, slik at du kan slette alt som var å gjenta i dine egne instruksjoner.

💡
Hvor går pengene? For kort støtte chat input (instruksjoner + kontodata + historie, sendt hver tur) koster vanligvis mer enn det korte svaret, cacheing og mager kontekst hjelper mest der. I lang generert innhold dominerer utgangen. Svar-lengden lua og en lavere tenkningsdybde betaler av seg der. Se Sett opp AI for å holde hurtig kasj på som gjør den store gjentatte delen av hvert slå billig.
Endrer dette hvordan chatten allerede svarer?+

Nei. Hver kontroll er slått av som standard og uavhengig. Slår du på bare legger til sin oppførsel; slå den fra returnere chatten for nøyaktig hvordan det fungerte før.

Hvilken ordre bør jeg slå på dem?+

Kjør daglig chat på en lysmodell og pin en sterkere agent modell. Deretter, hvis du har tilkoblet plattformen, aktiver Agent modus, planlegg deretter fremover, så lang-konversasjonsminne. Så mager kontekst, hoppe over KB for graderinger samt et svar cap. Endelig kompress instruksjonene dine. Se noen ekte samtaler etter hver endring.

Admin Agent-settet: websøk, runbooks, oppdrag

Admin AI chat er en fungerende tekniker, ikke bare et spørsmålsfelt. Det kan forskning fikser på nettet, holde bibliotek av dine operasjonsmetoder, patruljere serverne i planleggingen og flytte filer. Mesteparten av dette drives ved å be om det i prat; den eneste du konfigureres foran er hvilken websøk leverandør som bruker, på Set opp din AI-side.

Nettsøk

Bygget i

Agenten søker på nettet for docs, feilmeldinger og gjeldende informasjon mens det fungerer. Ut av boksen bruker dette DuckDuckGo som ikke trenger noen nøkkel eller ingen oppsett.

Runbooks

I chat

Et lagret bibliotek med prosedyrene dine («hvordan vi gjør X her») Agenten skriver ned en etter å ha løst en vanskelig jobb og følger den neste gang, slik at kunnskapen overlever slutten av chatten.

Oppdrag

Planlagt

Planlagte skrivebeskyttede patruljer. "Hver morgen, sjekk diskplass og feilloggene og fortell meg." Funnene kommer på administratorklokken din.

Filoverføring

I chat

Be om en loggfil og få en privat nedlastingslenke, eller ha én fil kopiert fra den tilkoblede serveren. Begge er dekket på 5 MB

Admin Agent-søk (på å sette opp din AI)

Søkeleverandør

Hva agenten web-søk bruker. Standard er DuckDuckGo: nøkkelløs, gratis fungerer på hver installasjon. Brave Search, Tavily og Serper.dev (Google-resultater) returnerer vanligvis bedre resultater, men hver trenger en API nøkkelen fra leverandøren. Hvis en nøkkelleverandør mislykkes av noen grunn (dårlig nøkkel, kvote som brukes opp, nettverksproblemer), faller det søket tilbake til DuckDuckGo automatisk, så søk aldri går mørk.

Søk API nøkkel

Nøkkelen for den valgte leverandøren, som bare er nødvendig for Brave eller Serper. Når du har lagret den blir maskert og aldri vist på siden igjen; lim inn en ny til å erstatte det. En nøkkelleverandør blir aktiv kun når både tilbyderen og nøkkelen gemmes.

Runbooks

Når agenten nettopp har jobbet gjennom en jobb du vil gjøre på samme måte igjen, si "Lagre det som en kjørebok kalt nightly- cleanup". Fra da av ser den kjøreboka ved navn i hver økt, og når du spør etter jobben ved navn (eller beskriver den) henter den frem trinnene og følger dem. Du kan be den om å liste opp, oppdatere eller slette kjørebøkene når som helst.

💡
En Runbook er veiledning, ikke et gratis pass. Når agenten følger ett, hvert steg som vil endre en server går fortsatt gjennom din nåværende tillatelsesmodus og viser de vanlige godkjenningskortene. Et løp kan aldri omgå godkjennelse.

Oppdrag

Et oppdrag er en gjentakende jobb som agenten kjører på egen hånd: hver time, daglig til et bestemt tidspunkt eller ukentlig på en fastsatt dag. Oppdrag er skrivebeskyttet av design. De kan lese servere, data og nettet, men de kan aldri endre noe; de undersøker og rapporterer. Når et oppdrag slutter, lander funnene som et varsel på administratorklokken din. Si « kjør morgenpatruljen nå » for å utløse en ved behov, eller be agenten om å liste, stoppe midlertidig eller fjerne oppdrag.

⚠️
Oppdrag kjører på OpsIQ cron, så den må settes opp (se Cron og automatisering). En engangs "kjør det nå" fra chatten fungerer selv mellom cron-kjøringer på de fleste servere.

Flytter filer

Spør etter en fil (« få meg dagens feillogg fra netttjeneren ») og agenten lagrer den og svarer med en privat nedlastingslenke. Lenken fungerer bare for innloggede administratorer og utløper etter omtrent en dag. Filene er begrenset til 5 MB; for noe større, spør agenten om å komprimere eller trimme det på tjeneren først.

Agenten kan også kopiere en enkelt fil mellom to tilkoblede servere, igjen opptil 5 MB. Skrivingen på destinasjonen behandles som enhver annen endring den gjør: i spør modus du får et godkjenningskort først er eksisterende filen sikkerhetskopiert og kopien reversibel. For sikkerhet leses innholdet fra kilden for øyeblikket kopien brukes ikke fra samtalen.

AI

Tren din AI

AI-trening er der du lærer OpsIQ hvordan å oppføre seg. Du skriver spørringer som definerer personlighet, grenser, kunnskapsfokus og eskaleringsregler. Tenk på det som en opplæring manual for et nytt støttebyrå.

Tog AI
Tren din AIEn AI-instruksjonsredaktør med kunde/admin faner og vanlig engelsk tone, alltid og aldri regler.Tren din AIarbeidsflateKunde AIAI- administratorToneVennlig, kortfattet og aldri pushy.AlltidTilby en menneskelig håndtak for faktureringskonflikter.AldriLov å refundere uten at du sjekker kontoen.1TWO MANUALSKunde & admin AI2PLAIN ENGLISHTone, alltid.3GROUNDEDPluss din kunnskap base
Tren AI som en ny leie, Kund og Admin manualer skrevet på vanlig engelsk (tone, alltid; aldri), jordet i din KB.

To treningsområder

Kunde AI-prompt

Kontrollerer hvordan AI snakker med kundene i chat widget. Dette er den viktigste instruksjonen for å komme seg riktig ut.

Admin AI-prompt

Kontrollerer hvordan AI hjelper admin-teamet i operatørens dashboard. Dette håndterer interne spørsmål og handlingsutførelse.

Skrive en god kunde AI-prompt

Kunde AI-prompten din bør dekke disse områdene:

1
Identifikasjon

Gi den et navn, en rolle og en personlighet. Eksempel: «Du er Luna, en vennlig og kunnskapsrik kundestøtteassistent for Acme Store.»

2
Tone og stil

Eksempel: "Vær profesjonell, men vennlig. Bruk enkelt språk. Unngå sjargong. Hold svarene korte (2-3 avsnitt maks)."

3
Kunnskapsgrenser

Hva bør den vite og ikke vite? Eksempel: "Du kjenner til våre produkter, priser, frakt- og returregler. Du vet IKKE om konkurrerende produkter eller interne beslutninger i selskapet."

4
Escalation regler

Når bør det overleveres til en menneskelig agent? Eksempel: «Eskalere til en human agent når kunden ber om refusjon, nevner rettslige skritt, rapporterer et sikkerhetsproblem eller stiller samme spørsmål tre ganger.»

5
Ting å aldri gjøre

Eksempel: «Aldri gi løfter om refusjon, aldri dele interne prisformler, aldri finne på produktfunksjoner som ikke eksisterer, aldri gi medisinske, juridiske eller økonomiske råd.»

Eksempel på spørsmål

Eksempel på kunde AI-prompt · nettbutikk
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
Eksempel på kunde AI-prompt · hosting selskap
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

Refinere din kontakt over tid

1
Lansering med grunnleggende

Start med identitet, tone og nøkkelgrenser. Ikke prøv å dekke alt på dag ett.

2
Gjennomgang av AI-historien ukentlig

Les samtaler der AI ga feil eller suboptimale svar.

3
Oppdatere spørringen

Add specific rules for recurring issues. Example: if the AI keeps promising refunds, add "Never promise a refund. Say you will escalate to the billing team."

4
Legg til kunnskap

Hvis AI ikke kan svare på et spørsmål, legg svaret til kunnskapsbasen i stedet for å prøve å passe alt sammen.

⚠️
Hold din kontakt under 2,000 -ord. Overlengte spørsmål kan forvirre AI og øke tokenkostnader. Legg detaljert informasjon i kunnskapsbasen i stedet.
Hva er forskjellen mellom den raske og kunnskapsgrunnlaget?+

Plötsen definerer personlighet, grenser og regler. Kunnskapsgrunnlaget gir faktainformasjon (produktdetaljer, prissetting, retningslinjer). AI leser begge deler av seg selv men den raske formene atferd mens KB tilbyr svar.

Kan jeg få forskjellige spørsmål til ulike avdelinger?+

Besøket er per arbeidsrom. Hvis du trenger forskjellig AI-adferd for ulike avdelinger, bruk kunnskapsgrunnlaget til å gi avdelingen spesifik informasjon og nevne enhet kontekst i din raske.

AI

AI historie

AI History viser hver samtale som AI har hatt med kunder og administratorer. Bruk den til å revisjon av AI-ytelse, finne feil svar og identifisere treningshullene.

AI historie
AI historieEn logg av AI svinger med typemerker, spørsmålet og svaret, responstid og utfall.AI historiearbeidsflateHver AI-tur, registrertchatQ: Hvor er min ordre?A: fraktet i dag, UPS sporing...0.9sSvaretbillettUtkast til svar på T-12345refusjonsbevis utarbeidet1.4sdraftedadminOppsummer denne ukens billetter12-linje sammendrag returnert2.1sferdigchatQ: Avbryt min planDelt ut til et menneske0.7sescalated1EVERY TURNSpør, svar2SEARCHABLEFiltrer og eksporter3OWNER-ONLYFull revisjonsspor
Hver AI-sving (chatt, billettutkast og admin handling) logget med nøyaktige spørsmålsforløp.

Hva hver samtale viser

Dato og klokkeslett

Da samtalen skjedde.

Kundesidentitet

Navn og e-post hvis kjent, ellers IP og land.

Kanal

Chat widget, billetten auto-reply, epost utkast eller admin AI.

Meldinger

Full transkribering av samtalen: Kundemeldinger og AI-respons.

Token bruk

Hvor mange polletter samtalen ble brukt. Høy tokens bruk kan indikere at AI gir overordnet ekstraherende svar eller konversasjonen gikk i sirkler.

Handlinger som er truffet

Alle handlinger AI utført under samtalen (sett ordre, opprettet billetten etc.).

Vurdering

Hvis CSAT er aktivert, kan kundens tilfredshet vurdering for denne samtalen.

Finne problemer

Søk etter søkeord

Søk etter spesifikke emner for å se hvordan AI håndterer dem, eksempel: søk etter "refusjon" for å sjekke om AI følger din refusjonspolicy.

Filtrer etter vurdering

Vis kun lave vurderinger for å fokusere på utilfredse kunder.

Filtrer etter kanal

Vis kun billett automatiske replikasjoner til å kontrollere automatiserte svar separat fra chat.

Sorter etter token bruk

Høyt taktiske samtaler kan indikere problemer: AI-angrepet, går i sirkler eller unnlater å svare på spørsmålet.

Ukelig revisjonsrutine

1
Sjekk lave vurderinger

Les den fulle transkripsjonen. Hva gikk galt? Var det et kunnskapsgapet, en tone problem eller feil svar !

2
Sjekk høye peksamtaler

Disse kan indikere forvirring. Var AI gjentar seg selv? Forsto det ikke spørsmålet?

3
Oppdater trening

For kunnskapsmangler, legg til artikler i Knowledge Base. I atferd problemer oppdater AI-prompten. Hvis du vil gjenta feil svar kan du legge eksplisitt korrektionsregler.

Finn kunnskapsmangler

Scenario:
Du søker i AI-historikken etter "installasjon" og finner 15 samtaler der AI sa: "Jeg har ikke spesifikke installasjonsinstruksjoner for dette produktet."
Hva skal jeg gjøre:

Dette betyr at kunnskapsgrunnlaget mangler installasjonsveiledninger. Lag kunnskapsbaseartikler for hvert produkts installasjonenstrinn. Etter å ha lagt til dem, test ved å stille AI-installeringsspørsmålene.

AI

AI-innsikter

AI Insight analyserer automatisk samtalemønstre og overflater som kan fungere: vanlige spørsmål, tilfredshetstrender, kunnskapsgapene samt eskaleringsmønster.

AI-innsikter
AI-innsikt (Intelligence Hub)Intelligence Hub: en AI Todays korte, smarte varsler og et Score-a - Lead / Analyticse-A-Page verktøy. 14- Daglig trafikkmønsterdiagram.AI-innsikterarbeidsflateI dag er BRIEFTrafikken opp 12%; 3 varme spor;2Tilbud trenger oppfølging.Smarte varslerUtsjekkingsfeil spikretBunce up on /pricingNytt varmt resultat fra USAInntekter i forkant av forrige ukeScore a Lead / Analyse en sideIP eller URL…Kjør14-Dags trafikkmønster1I dag er BRIEFAI skriver morgensummen2SMART ALERTSAnomalier som er overflatet3ON DEMANDScore a lead · analysere en side
Den virkelige etterretningshub: en AI-skrivet dagens korte, smart varslinger for abnormiteter, ledende poeng og sideanalyse. 14- Daglig trafikkmønster.

Hva innsikt viser

Topp spørsmål

De vanligste spørsmålene. Hvis "Hvordan tilbakestiller jeg passordet mitt?" er #1, trenger kunnskapsbasen din en fremtredende veiledning for tilbakestilling av passord.

Tilfredshetstrender

CSAT scorer over tid. Er AI tilfredshet forbedre eller senke? Tidlige dropper kan indikere en kunnskapsbase endring som brøt noe.

Oppløsningsrate

Hvilken prosentandel av samtaler løser AI uten menneskelig intervensjon? En sats over 70% er bra. Nedenfor 50% Det betyr at AI trenger mer trening.

Escalation grunner

Hvorfor samtaler blir avlevert til mennesker. Vanlige grunner: kunde etterspurd menneskelig, AI ikke kunne svare på, sensitiv emne og faktureringsproblemet.

Kunnskapsgap

Emner der AI ofte sier "Jeg vet ikke" eller gir lav-tillits svar.

Gjennomsnittlig samtalelengde

Hvor mange meldinger per samtale. Veldig lange samtaler (10+ meldinger) kan indikere at AI ikke forstår spørsmålet.

Bruke innsikter for å forbedre

Scenario:
AI Insights viser at 23% av eskalasjoner er "Kunden spurte om garanti" og AI kunne ikke svare.
Hva skal jeg gjøre:

Dette er en klar kunnskapsgap. Trinn: (1) Skriv en omfattende garantiartikkel i kunnskapsgrunnlaget som dekker alle garantier, kravprosess og utelukkelser. (2) Oppdatere AI-prompten til referansegarantiinformasjon. (3) Overvåk AI Insights neste uke for å se om garantien øker.

AI

Admin AI-spillebok

Admin AI (Ask)OpsIQ) Hjelper teamet ditt å håndtere OpsIQ fra i admin dashboard. Du kan be det om å slå opp data, forklare funksjoner, sammensummere billetter og utføre plattformhandlinger.

AI- administrator
Admin AI-spillebokKommandoboksen Ask-OpsIQ med et AI-foreslått plattformhandlingskort som viser parametre og bekrefter/cancel.Spør OpsIQarbeidsflateSpør OpsIQSuspender tjenesten til forfallen konto #4821AIForeslått handling: termin_servicekonto: #4821 (foreløpig $120)plattform: WHMCS · reversibelBekreftAvbryt1ASK ANYTHINGVanlige engelske kommandoer2PROPOSE FIRSTHandling som vises før den kjører3YOU CONFIRMOmfattet og revidert
Fortell admin AI hva du vil på vanlig engelsk; det foreslår nøyaktig handling (spekulert, reversibelt og revidert) samt venter på bekreftelsen.

Hva admin AI kan gjøre

Oppsøk data

Spør: "Vis meg alle billetter fra [email protected]" eller "Hva er statusen på bestillingen #ORD-5523?"

Oppsummerer

Spør: "Sammendrag de siste 10 billettene" eller "Hva er de viktigste kundestøtteproblemene denne uken?"

Forklar funksjoner

Spør: "Hvordan konfigurerer jeg autosvar?" eller "Hva betyr kortet med avvisningsfrekvensen?"

Utfører handlinger

Spør: « Opprett en billett for [email protected] Om fakturering" eller "Lukk billett T-12345"

Platform-forespørsler

Spør: "Hvor mange besøkende fikk vi i går?" eller "Hva er inntektene våre denne måneden?"

Eksempelsamtaler

Oppsøker en kunde

Scenario:
Admin spør: "Finn kunde [email protected] og vis meg deres siste aktivitet"
Hva skal jeg gjøre:

AI ser opp kunden på tvers av alle tilkoblede datakilder: besøkende sesjoner, billetter, chatsamtaler og CRM kontakter. Det returnerer en sammendrag over nylig aktivitet med lenker til hver element.

Få et daglig sammendrag

Scenario:
Admin spør: Hva skjedde i dag?
Hva skal jeg gjøre:

AI oppsummerer: "I dag hadde du 245 besøkende (opp ) 12%), 8Opprett nye billetter (3 løst av AI),2nye ordrer totalt $198, og1"Vi har mottatt en eskalering i chatten om en forsendelsesforsinkelse."

Utsettelse av en handling

Scenario:
Admin spør: "Endre billett T-5523 prioritet til Haster"
Hva skal jeg gjøre:

Kunstig intelligens bekrefter: «Jeg vil endre billett T-5523 prioritet fra Normal til Haster. Dette vil påvirke SLA timer. Bekrefte?» Du bekrefter, og handlingen utføres.

💡
Admin AI bare utfører handlinger som er registrert i handlingsregisteret. Det kan ikke oppfinne tiltak eller tilgangssystemer utenfor OpsIQ.
AI

Kunde AI-scenarier

Denne delen dekker vanlige kundevendte AI-scenarier med forventet oppførsel og opplæringstips.

Kunde AI
Kunde AI-scenarierEt bibliotek med kundespørsmål parret med forventet AI-adferd og en utfallsmerke for hver.Kunde AI-scenarierarbeidsflateScenario bibliotek · forventet AI-adferd"Hvor er bestillingen min?"Se opp ordren via kontakt, gi sporingLøs"Jeg vil ha en refusjon"Bekjennelse, aldri lov · hånd til et menneskeHandoff"Er tjenesten nede?"Sjekk status, rapporter gjeldende tilstandStatus"Avbryt min konto"Bekreft intensjon, og deretter rute til et menneskeBekreft1SCENARIOSVanlige spørsmål2EXPECTEDHvordan AI skal svare3TESTFinn treningsgap
Et bibliotek med reelle kundespørsmål og nøyaktig hvordan AI skal håndtere hver, for å teste treningen din og finne hull.

Scenario bibliotek

Bestill statusundersøkelse

Scenario:
Kunde: Hvor er min ordre #12345?"
Hva skal jeg gjøre:

Forventet AI-adferd: (1) Se opp ordren gjennom plattformkontakten. (2Rapporter nåværende status (bearbeiding, fraktet og levert).3) Inkluder sporingsnummer dersom det er tilgjengelig. (4Hvis bestillingen er forsinket, bekrefte og gi estimerte tidslinje. (5) Oppfinn aldri sporingsinformasjon.

Forespørsel om tilbakestilling av passord

Scenario:
Kunde: "Jeg har glemt passordet mitt og kan ikke logge inn"
Hva skal jeg gjøre:

Forventet AI-adferd: (1) Gi passordet tilbakestille trinn fra kunnskapsgrunnlaget. (2) Ta med tilbakestillingslenken eller sidestien. (3) Ment at tilbakestilling e-post kan ta noen minutter. (4) Foreslå å sjekke spam-mappen. (5Hvis kunden fortsatt ikke kan tilbakestille, eskalere til et menneske.

Funksjonsforespørsel

Scenario:
Kunde: "Kan dere legge til mørk modus i mobilappen?"
Hva skal jeg gjøre:

Forventet AI-adferd: (1) Takk for forslaget. (2) Forklar hvordan funksjonsforespørsler behandles (lappet, gjennomgått og prioritert). (3) Ikke lov at funksjonen skal bygges. (4) Hvis en lignende funksjon eksisterer, nevne det.

Billingstrid

Scenario:
Kunde: "Jeg ble belastet, men tjenesten min fungerer ikke"
Hva skal jeg gjøre:

Forventet AI-adferd: (1) Erkjenner frustrasjonen. (2) Sjekk servicestatusen om mulig. (3) Escalate til faktureringsavdelingen med alle detaljer. (4) Ikke lov en refusjon. (5) Sett billettprioritet til høy.

Off-topic spørsmål

Scenario:
Kunde: "Hvordan er været i London i dag?"
Hva skal jeg gjøre:

Forventet AI oppførsel: (1) Høflig omdirigere. "Jeg er din [Bedrift] støtteassistent og kan hjelpe med spørsmål om våre produkter og tjenester. For værinformasjon, prøv en værtjeneste." (2Spør om de har et produktspørsmål.

Hvordan tester jeg kundenes AI-adferd?+

Åpne nettstedet i en privat/inkognito-nettleser og chat med AI som kunde. Prøv vanlige spørsmål, kant tilfeller og adversarielle scenarier. Sjekk at AI følger dine raske regler og bruker kunnskapsbaseinnhold riktig.

AI

AI kunnskapsbase

Kunnskapsbasen er et bibliotek av artikler som AI bruker til å svare på spørsmål. Når en kunde spør noe, søker AI kunnskapsbase for relevante artikler og benytter dem til å generere nøyaktige, jordet respons.

Kunnskapsbase
KunnskapsbaseKilder som mates inn i en kunnskapsbutikk, og deretter et AI-generering av et jordet svar.KunnskapsbasearbeidsflateKilderNettsted krøllingHjelp artiklerVanlige spørsmålImporterte dokumenterKunnskapSemantisk + nøkkelordAIGrunnet svarmed en sitert kilde."Tilbakebetalinger tar 3–_51-3 virkedager."1INGESTCrawl, FAQ2RETRIEVESemantisk + nøkkelord3GROUNDEDSvar fra innholdet ditt
Crawl nettstedet og import docs til kunnskap basis; AI henter de riktige bitene, svarene, jorda og sitert.

Hvordan det fungerer

1
Kunden stiller et spørsmål

Hva er din returpolitikk?

2
AI søker kunnskapsgrunnlaget

OpsIQ finner "Returpolicy" artikkelen ved å matche søkeord og semantisk betydning.

3
AI genererer en respons

AI leser artikkelen og skriver et naturlig språk svar basert på artikkelinnhold.

4
Kunden får et nøyaktig svar

Svaret er basert på din faktiske politikk, ikke AIs generelle opplæringsdata.

Opprette gode artikler

Et emne per artikkel

Skriv en egen artikkel for hvert emne: returpolitikk, fraktpriser, kontooppsett og passordsett. Ikke kombiner urelaterte emner.

Skriv som et spørsmål

Begynn med spørsmålskundene spør, og gi svaret. Dette hjelper AI-kampspørsmål til artikler.

Vær spesifikk

«Returer må startes innen 30 dager etter levering» er bedre enn «Vi har en returpolicy.»

Inkluder kantsaker

Hva med internasjonale avkastning? Hva om digitale produkter? Hva er det som kjøpes på salget? Dekker unntakene.

Hold den oppdatert

Gjennomgang artikler kvartalsvis. Slett utdatert informasjon. Oppdater pris, retningslinjer og prosedyrer når de endres.

Startende artikler du bør skrive

Frakt og levering

Fraktkostnader, leveringstider og sporing av frakten.

Retur og refusjon

Return vindu, betingelser, prosess, refundering og unntak.

Kontoadministrasjon

Passord tilbakestilling, e-postendringer og kontoutvelgelse.

Pris og fakturering

Planbeskrivelser, faktureringssykluser og betalingsmetoder.

Produktguider

Hvordan bruke hvert produkt eller funksjon. Trinn-for-trinns instruksjoner med skjermbilde.

Feilsøking

Vanlige problemer og løsninger. Feilmeldinger og rettelser av dem

Kontaktinformasjon

Forretningstimer, støttekanaler, responstider og eskaleringssti.

Juridisk og overholdelse

Oppsummering av personvernerklæring, vilkår for tjenestesamandrag GDPR -dataforespørsler.

Kontaktinformasjon

Hver kontakt kan bidra til kunnskap om AI. Når en kobling er aktivert, blir dens innebygde kunnskapsartikler (produktkatalog, vanlige spørsmål og plattformspesifikk feilsøking) automatisk tilgjengelig for AI-en. Du kan slå av eller på kontaktens kunnskaper i forbindelseinnstillingene.

Token budsjett

Kunnskapsgrunnlaget har et konfigurerbart tokentak (standard: 32,000 polletter) som kontrollerer hvor mye kunnskapskonteksten sendes til AI per samtale. Hvis din kunnskapsbase er veldig stor, velger AI de mest relevante artiklene i dette budsjettet. Øk taket hvis AI ikke finner relevante artikler; redusere det dersom du ønsker å minske tokenskostnader.

Hvor mange artikler skal jeg ha?+

Begynn med5-10 artikler som dekker dine mest vanlige spørsmål. Legg til mer når du identifiserer hull gjennom AI History og AI Insights 20-50 artikler for omfattende dekning.

Kan jeg importere artikler fra et annet system?+

For tiden opprettes artikler manuelt i OpsIQ Du kan kopiere innhold fra eksisterende FAQs, hjelpesentre eller dokumenter.

Hvilket format bør artikler være i?+

Vanlig tekst fungerer best. AI forstår naturlig språk bedre enn strukturert HTML Skriv som du vil forklare til en kunde.

AI

AI-vurdering og VG

Evalueringssett gjør kritiske kundespørsmål til repeterbare tester for å få svar på kvalitet, sitering og utbyggings-og handlingssikkerhet.

Produktskjerm
AI-utredningAI-vurdering viser gullprøvesaker, nødvendig oppførsel og de siste resultatene.AI-utredningarbeidsflateSETS6CASES84PASS RATE96%LIV ARBETSPESSONEFraktpolitikkCitation krevesPassRefunderingMenneskelig bekreftelse krevesPassUstøttet kravForbudt handlingPassMigrasjonsspørsmålForventet kilde manglerFeil1CREATE CASESGolden input og regler2RUN SAFELYTørrkjøring eller levende eval3WATCHPlanlegg daglig eller ukentlig
AI-vurdering viser gullprøvesaker, nødvendig oppførsel og de siste resultatene.

Fulle administratorer kan opprette evalueringssett med en rask, forventet kildemerking, nødvendige siteringsregler, menneskelig bekreftelse regler, heving forventningene og forbudt handlinger. Kjør et sett direkte, tørkekjør det eller spille om valgt historie.

Vakten planlegger daglig eller ukentlig kontroller gjennom krone og driver et begrenset antall tilfeller (opp til åtte per planlagt pass). Gjennomgang feil sammen med leverandør/modell, rask versjon, kunnskapsversjonen, handlinger foreslått og kostnader før endring av produksjonadferd.

AI

Språk og oversettelse

Språk håndterer oversatt tekst fra kunder og den atferd som brukes når OpsIQ følger kundens språk.

Produktskjerm
SpråkSpråksiden viser kildespråket, oversatt språk, utkast/livstilstand og kunde-språkadferd.SpråkarbeidsflateSERVICEEngelskLANGUAGES4LIV3LIV ARBETSPESSONEfranskGrensesnitt og innholdNivåTyskGrensesnitt og innholdNivåSpanskUtkast til oversettelseUtkastFølg kundeSvar i detektert språk1SET SOURCEOpprinnelig operatørspråk2ADD LANGUAGEOversett i bakgrunn3PUBLISHUtkast eller live
Språksiden viser kildespråket, oversatt språk, utkast/livstilstand og kunde-språkadferd.

OpsIQ oversetter operator-entert kundevendende tekst. Angi kildespråket riktig før du oppretter oversettelser, legger til målspråk og deretter gjennomgå utkastene for publisering. «Følg kundens språk» styrer responsspråk; omsetjing av widgetgrensesnittet kontrollerer knappene sine, etiketterne og systemteksten.

Oversettelsesområde kan være utkast eller live. Ikke stole på maskinoversetting for lovlig, refusjon, sikkerhet og sikkerhetstekst uten menneskelig gjennomgang.

Hvert sted som holder din egen ordlyd er oppført med sin melding tell: klient chat beskjeder, kampanje, proaktivt budskap, chat flytende, guidede turer, kunngjøringer og teasere bobler Undersøkelser og skjemaer. Undersøkelsesoverflaten dekker hver publisert undersøkelse helt: tittel, hvert spørsmål, alle svaralternativer, knappene og takk-du kopi, sidekrom og utfall sider. Nøkler er bundet til spørsmålet ID og alternativverdien så omorganisering av spørsmål eller valg aldri mister en oversettelse, og reordner bare én melding som videreutsettes den meldinga. Published live spørreundersøkelser blir tilbudt standard; utkast slutte seg når du utvide omfanget.

Postchat-epostundersøkelsen følger språket som besøkende faktisk pratte inn, forutsatt at språk er et du tilbyr her; ellers bruker det systemet ditt. Dens seks redigerbare felt blir oversatt på denne siden også og oppførselen har sin egen bryter i klient Chatt innstillinger.

Billett- og portalmeldinger Dekker den faste tekstoperatøren type én gang og hver kunde mottar så på det ett språk: billettbekreftelsen, de åpnede, lukkede og tilbakemeldingsbekræftelserne, per-avdeling av loggeuttakene og portalens velkomstlinje. ( AI autoreply trenger ingenting av dette, svarer allerede i kundens sprog) E-postkunder på eget språk aktivert i OpsIQ Skriving, billett e-post løser mottakerens språk i denne rekkefølgen: språket de valgte på portalen eller Hjelpesenteret (på billetten), lokallaget på kontaktlisten sin og deretter det lokale språket som ble skrevet lokalt etter manusområde og markørord uten ekstern anrop. Bare språk valgt på Languages siden brukes noensinne så funksjonen er inert til sprogene blir lagt inn. Global HTML e-post wrapper er bevisst ikke oversatt: det er markering, ikke prosa. Personalevendende email (varsler om varsler fra avdelingen, analytiker briefs, planlagte rapporter, ukents fordøyelse) bruker alltid systemspråket.

PeopleOS HR

FolkeOS: det styrede arbeidsstyrkens operativsystem

Kjør arbeidstakerens livssyklus fra rekvisisjon til offboarding med mobil selvbetjening, bevisstøttede arbeidsflyter, skrevet integrasjon og menneskelig kontroll over sensitive beslutninger.

Interaktivt systemkart
PeopleOS livssyklus kommandosenterEn tredimensjonal PeopleOS dashboard som forbinder rekruttering, ansatte, lønnsinnleielse og styret AI.PeopleOS-kommandosenterEVIDENCE LIVEFolk248OPEN ROLES12KORTGATES15 / 15LIFECYCLERecruitLeieVokseBelønningOvergangEN REKORDIdentifikasjon + arbeidsbevisMENNESKE KVALITETAnke, rettelseANSVARER DETResultat og frigjøring av bevis
PeopleOS holder livssyklusen, kontroller og bevis på én styret rekord.

Administratorer

Operatione

Administrere mennesker, organisasjonen, rekruttere, onboarding, dokumenter, permisjon, lønnsforsoning, fordeler, ytelse, læring, ansatte relasjoner, analyse og styring.

Medarbeidere og ledere

Selvbetjening

Bruk en mobil-første portal for private registre, forespørsler, dokumenter, onboarding, tid, betalingsforklaringer, læringsopplysninger og rettighetene.

Utviklere

Utvid

Bruk kuratert hr.* Handlinger og den gjennomgang platform.hr.* operasjoner gjennom én kontrakt, pluss skrivne kontaktklasser. Den genererte indeksen i PeopleOS API -delen viser hver med sitt omfang.

⚠️
PeopleOS er ikke en lønnsleder, juridisk rådgiver eller bakgrunn-kontroll byrået eller identitet leverandør. Certifiserte eksterne systemer beholder disse ansvarene. En grønn teknisk sjekk skaper aldri lovlig godkjenning eller tjenesteyter bevis.

Få PeopleOS HR

PeopleOS HR er inkludert i Enterprise-planen. På alle andre betalte planer det er et tillegg: konto eieren åpner Konto→Add-ons & Tokens, plukker et PeopleOS HR-nivå og enten starter den gratis prøveperioden eller legger det direkte. Nivåene variere i hvor mange mennesker som rekrutterer, intervjuet og AI aktivitet de bærer. Prisen og grensene er satt på kontoen ikke skrevet inn produktet så se gjeldende nivå på prisside. Hva modulen gjør, overflate på overflate er på PeopleOS HR-produktside.

Hvem kan legge til det

En betalt plan som er aktiv. En gratis planer kan ikke legge til den, og en utbetalt Plan som fortsatt ligger i sin egen prøveperiode må vente inntil denne rettssaken avsluttes.

Den frie prøven

Prøvetiden kjører på nivået du velger. Når det slutter uten et kjøp er retten fjernet og ingenting belastes. Ingenting slettes: postene er der igjen øyeblikket tillegg blir lagt til.

Når den ikke eies

PeopleOS HR vises ikke i sidepanelet, kommandopaletten eller innstillingene. En direkte lenke til en HRS-side gir tilleggssiden i stedet for siden.

Å nå et nivåhette

Når en nivågrense er nådd tilbyr siden det neste trinnet. Å redigere eller fjerne det som allerede finnes, blokkeres aldri.

Selvvært installasjoner

Rettigheten reiser i lisensen. Legg til tillegg på din OpsIQ -konto og installasjonen plukker opp den ved neste lisenssjekking.

Første ukes oppsett

Alt under er en ekte skjerm; ingenting her trenger en utvikler.

1
Slå på modulen

Åpne FolkOS → HR Hjemflaggbrettet starter med hovedbryteren, PeopleOS HR: med det av ingen HR-side eller ansattoverflate er tilgjengelig. Slå på en bryter på, er to klikk bekreftelse; slå den av et trykk. AI bytter under (utførelse hjelpen screening program, autonom assistenter, AI intervjuer, automatisk tilby sending og identitetsverifisering) holde seg borte inntil du bestemmer deg for å gjøre det.

2
La Setup Copilot gjøre konfigurasjonen

Åpne PeopleOS → Super Copilot og si hva du ønsker på vanlig språk: en feriepolicy med sine dager og varsel, den offentlige helligdager for et land.SLA, en utgiftshette, et om bord malen. Du får planen tilbake med det den forstod og hva den antok. Ingenting kjører før du bekrefter; Et middelrisikosteg trenger en annen person; hvert løp etterlater seg en mottakelse.

3
Navn på medarbeiderportalen

Åpne PeopleOS→Frontline→Innloggingsdesign. På en selvvært installere portalen liv på /hr/<address>; Portaladresse Endrer navn på den umiddelbart og gamle logg-in koblinger fortsetter å fungere fordi den gamle adressen forsover. På skyen portal er /hr på arbeidsområdeverten din og trenger ingen adresse.

4
Publiser din karriere nettsted

Åpne FolkOS →. Hver innlegg du publiserer fra en godkjent rekvisisjon vises på siden for offentlig karriere; lenken Åpne den offentlige karrieresiden På toppen av Recruiting viser nøyaktig hva en kandidat ser.

5
Registrer en kiosk for delte enheter

Åpne PeopleOS→Frontline→Kiosker og velge Registrer en kiosk. Enhetstoken er vist én gang; åpne kiosk-siden på tablett eller PC (det er /kiosk på portalverten) og lim det inn. Folk klokke i med sin arbeids e-post og PIN, eller med den kortlivede merket kode fra deres Portal. Å gjenoppta en kiosk stopper enheten samtidig.

6
Bestem hva ansatte kan gjøre for seg selv

Åpne Innstillinger→HR. Hver egen tjeneste makt (registrerer, forespørsler, dokumenter, forlate, betale forklaring og så videre) er satt til hver arbeidstakere, ledere bare eller ett lag og teamene under det. Alle endringsposter som gjorde den og hvorfor, og en strøm du slår av forklares overfor medarbeideren i stedetfor å stille mangler.

7
Legg til folk og gi dem tilgang

FolkOS → Folk opprette personen, deres sysselsetting og leder. Tilgang til portalen bare når personen har gyldig e-post og et bestemt arbeidsforhold; invitasjonen går ut fra samme skjerm og onboarding starter fra reisen du satte opp.

Livsyklusen

Planlegger og rekruttere

Opprett godkjente rekvisitter, publiser jobber, motta programmer gjennom re-query-safe webhooks, strukturanmeldelser, timeplan intervjuer, rekordbeslutningene, problemtilbud og leie.

Bli med og gi

Bygg evidens-støttede ombordstigninger, samle riktig dokumentversjon, be om utstyr og gi godkjente tilgangsmaller samt tilby seteless portaltilgang.

Arbeid og vokse

Operativt permisjon, timeplaner, betalingsforklaringer, fordelene, utgifter, mål, tilbakemeldingar, vurderinger, læringsevner, interne muligheter og arbeidskraftanalyse.

Støtte og beskyttelse

Gi privat HR-støtte, styrede arbeidstakeres relasjoner saker, juridiske innehaver, dataforespørsler, rettelse, forklaring og uavhengig menneskelig gjennomgang.

Endre og forlate

Bruk effektive arbeidsendringer, tilbaketrekking av tilgang til utstyr som brukes på nettet og forene eksterne leverandører med adgang til å gjenvinne det.

Tilgang og identitet

En kanonisk person eier arbeidsopptegnelser og verifiserte eksterne identitetssidenter. E-post er mutable kontaktdata, aldri permanent identitet nøkkel. Portal lesninger er selvsenkert; manager og administrator synspunkter krever eksplisitt tillatelser.APIomfanger lag på toppen av rutetillatelser og aldri omgå dem.

Legg til en ny arbeider

Scenario:
Opprette personen, tildele jobb og leder, gi portaltilgang, deretter åpne ombordstigningen.
Hva skal jeg gjøre:

Bruk tørrkjøring og idempotens for API skriver. Bekreft at personen har en gyldig e-post eller tiltenkt arbeidsforhold før du sender tilgang.

Løs en duplikat identitet

Scenario:
To eksterne systemer identifiserer samme arbeidstaker annerledes.
Hva skal jeg gjøre:

Koble begge verifiserte facetter til den kanoniske personen og løse konflikten eksplisitt. Ikke flett sammen poster bare fordi to mutable e-postverdier samsvarer med hverandre.

PeopleOS HR

HR arbeidsflyt og medarbeiderportalen

Hvordan hvert større PeopleOS-område drives og hva ansatte ser etter innlogging.

Folk og organisasjon

Bevar den kanoniske personen, arbeid, arbeidstype, leder, teamet, plasseringen av ferdigheter og dokumenter.

Rekryter og tilbud

Flytt fra godkjent rekvisisjon til utlegg, søknader, strukturert bevis, intervju, beslutning og leie med overnattings-og appellrutene.

Ombord og dokumenter

Tildel bestilte eierspesifikke trinn; samle inn, se gjennom, signere, utløpe og holde dokumenter med versjons-og tilgangsbevis.

Tid, avgang og planlegging

Definer policystøttede permisjonstyper, balanseformer og fordringer.

Betal, fordeler og utgifter

Forklar lønn, håndgodkjente arbeidstakere for å betale ut penger og gjøre unntakene uforsonlige.

Ytelse og vekst

Operasjonsmål, innsjekking, tilbakemeldinger og vurderinger. Kalibrering, læring, ferdigheter, mentorskap, interne muligheter samt arvefølger

HR-tjeneste og relasjoner

Gi ansatte privat støtte mens de holder sorg, disiplin, whistleblower og forseglet sak bevis i dedikerte tillatelse grenser.

Analytics og planlegging

Bruk arbeidskraftmål, hoderegnskapsplaner og referansetall fra registre; aldri oppfatte manglende resultater som suksess.

Medarbeiderportal kart

Oversikt

Trenger oppmerksomhet, endringer siden siste besøket, åpne forespørsler og kommende hendelser.

Profil og poster

Ansettelse, verifisert rekord, dokumenter og tillatelser til å be om personvern.

HR-støtte og oppgaver

Private samtaler, forespørsler og handlinger som trenger den ansattes oppgaver og selskapets eide aktiviteter vist separat.

Dine første dager

Bevis-støttet onboarding tidslinje med eier, due state, ferdigstillelse og blokkerte arbeid.

Tid og reise

Balanser, ledige fordringer, tilgjengelighet og kalenderkonsekvens.

Ferdigheter og vekst

Læring, ferdighetsbeviser, mål, tilbakemelding og interne muligheter.

Min lønn, forklarte

Lønnskompensasjon og informasjon om lønnsforsoning som arbeidstakeren har lov til å se.

Selskapets

Katalog- og organisasjonsdiagram begrenset til informasjon kolleger har valgt eller politikk lar dem dele.

Rettigheter og beslutninger

Forklaringer, appeller, samtykke, rettelse og tilgang til eller sletting av forespørsler.

💡
Portalen er mobil-første. Kontokortet forblir tilgjengelig, navigasjon og innhold rulle uavhengig på brede skjermer, samt mobil navigasjonsoverlegg i stedet for å presse eller dekke siden. Lang forklarende kopi tilhører tilgjengelige verktøyelementer eller utleveringskomponenter.

Sikker driftssekvens

1
Konfigurer policy og tillatelser

Sett jurisdiksjon, roller, godkjenningsstier, oppbevaring og funksjonskontroll før du laster direkte registre.

2
Koble til eksterne leverandører

Installer riktig signert pakke, angi minst privilegeringsopplysninger og passere tilkoblings-og samsvarstester.

3
Kjør i sandkasse eller skygge

Utøve full arbeidsflyt med deterministiske data og sammenligne forventet bevis før muliggjør real-leverandør gjennomføring.

4
Utgivelse under dobbelt kontroll

En annen autorisert reviewer undersøker leverandør, sikkerhet, personvern, juridiske og rettferdighetsbevis.

PeopleOS HR

AI, rettferdighet og videokontroll

PeopleOS behandler automatisering som en styret verktøyvei: policytillatelse, forsøk på å utføre og leverandørutfall er separate fakta.

AI og agent kontroller

Alle agenter bruker registrerte skriveverktøy med et formål, jurisdiksjon og risikoklasse. Menneskelig overtakelse, kretsbrytere, hendelser og jurisdisjonsendringer stopper gjennomføringen. Korreksjoner kan danne en foreslått datasett men trene ingenting før annen autorisert person fullfører gjennomgang av personvernet.

Fairness

Definer kohorter, minimum prøveregler, metriske og evaluator-identiteter og en juridisk frigitt evaluering. Manglende data forblir manglende; det konverteres aldri til et pass.

Forklaringer og anke

Bygg forklaringer fra forseglede beslutninger og politiske bevis. Send appell til et uavhengig menneske, samt bevare resultatbevis.

Rettighetserklæring

Utgivelse av land politikk pakker bare med en utpekt ansvarlig juridisk eier, sitert juridiske kilder og passere test. Høy-selvstendig lov endringer suspendere berørte baner.

EU AI-loven

Oppbevar systeminventaret, risikoklassen og konsekvensvurderingen av grunnleggende rettighetsretter.

Video screening grense

Bestemmelsen er ikke deltakelse

hr.interview.room.provision oppretter møtested. Bare hr.interview.room.connect kan bevise at media nådde arbeideren.

Formålsspesifikk samtykke

Opptak, transkripsjon og biometrisk livlighet er separate valg. Uttrekking gjelder det valgte formålet.

Ingen utseendeanalyse

Videokontrakten har ingen felt eller metode for følelser, oppmerksomhet, attraktivitet, rase, funksjonshemming eller utseende.

Mennesker og tekstruter

En anmelder kan ta over permanent for sesjonen, og en tekstovernattingsrute er fortsatt tilgjengelig.

Oppbevaring og sletting

Kontaktrapporter kryptert transport, aktiv retensjonspolicy og leverandør mediereferanser, og må støtte verifiserbar sletting.

Rom opprettet, AI fraværende

Scenario:
Et Zoom-rom URL eksisterer, men mediebroen har ikke levert lyd/video til intervjuarbeideren.
Hva skal jeg gjøre:

Vis møtet som avgitt og AI-deltakelse som falsk. Hold menneskelig intervju og teksthotell stier tilgjengelig.

Tilbakekallelse sier en sjekk passert

Scenario:
En signert bakgrunnskontroll webhook rapporter ferdigstillelse.
Hva skal jeg gjøre:

Ta opp tilbakekallingen som et hint, og spør deretter leverandøren. Bare den autentiserte statusrespons kan oppdatere sjekkingene.

🚫
En teknisk tilgjengelighetsvurdering kan registreres av dens evaluator, men WCAG-godkjenning krever en separat person. Leverandørbevis, juridisk frigjøring og rettferdighetsbeviser kreve også sine ekte navngitte eiere.
PeopleOS HR

PeopleOSAPIog kontaktutvikling

Bruk den generelle API for regulerte HR-operasjoner og skrivne kontaktkontrakter til autoritative eksterne systemer.

Generelt API -kilder til sannhet

SendJSONtil POST /api/v1.php. Oppdag den løpende overflaten gjennom meta.actions, OpenAPI på /api/v1/openapi.phpPostmann på /api/v1/postman.php. Den genererte indeksen under bærer det nøyaktige antall kuratert hr.* Handlinger og gjennomgang platform.hr.* · drift i denne bygningen, så ingenting på siden skrives for hånd.

Liste mennesker
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}'
Tørrkjør en skrive
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}'

Bruk hr.read eller hr.write bare etter behov. Måladministratorruten kontrollerer fortsatt sin egen tillatelse. Skrivere krever en stabil idempaens-nøkkel; høyrisikoskriver trenger bekreftelse. Prøv forbigående feil med samme nøkkel og spørringsgjenoppretting status etter et usikkert tidsgrensepunkt.

Hver kurert time.* handling

48 curated hr.* actions (22 reads, 26 writes) and 484 reviewed platform.hr.* operations, out of 2415 named actions in this build. Generated from the action registry, the same source as meta.actions, OpenAPI and Postman.

Folk, organisasjon og identitet (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, primary_email, worker_type.

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.

Oppdrag og utlegg (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.

Leave, læring og kontaktmarkedet (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.

Kontaktsertifisering og helse (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.

Intervjurom (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.

Agenter og livssyklusbanene (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.

Rettighet (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.

Beslutninger og appeller (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.

AI-kvalitet (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.

Arbeidsstyrke samtaler og oppbevaring (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.

Lese og frigjøring (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).

Koble til klasser

Rekrytering

hr_job_board, hr_background_check, hr_identity_verification, hr_assessment og hr_tax_right_to_work.

Hiring og ombord

hr_esignature, hr_calendar, hr_video og hr_equipment_it.

Workforce-operasjoner

hr_payroll, hr_benefits, hr_learning, hr_expense_payment, hr_directory og hr_data_warehouse.

Kommunikasjon

hr_messaging Kontrakten inneholder ingen metode for å lese med ansatte.

Endepunktene for leverandørens gateway

PeopleOS HR Provider Gateway1.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

Gatewayen krever HTTPS, blokkerer usikre / private mål, pinner validertDNSresultater, følger ingen omdirigeringer og begrenser responsstørrelsen.JSON, bærer deterministisk idempatens og støtter tidsforsterkere HMAC i begge retninger. Webhooks er alltid hint etterfulgt av leverandøren re-query.

Innbundne webhook dører

Tre offentlige dører mottar leverandørens tilbakekallinger: POST /opsiq/ajax_api.php?ajax=hr_connector_webhook (felter) connector_class, connector_key, topic), ?ajax=hr_esign_webhook (connector_key, offer_uuid, provider_ref) og ?ajax=hr_check_webhook (check_uuid). Hver verifiserer kroppen gjennom den sertifiserte kontakten, brenner leveringen så en replay dør og registrerer bare et ventende omspørring; leverandørens eget svar endres rekord. Hvert avslag er det samme generiske svaret med hensikt. PeopleOS leverer ingen utgående webhook hendelser i dag: webhooks.events.list er den myndighet og navn som ingen i hr Familie, så du kan vurdere hr.* Les eller bruk hr.connectors.health.

Detaljerte referanser

Fullstendig PeopleOS håndbok

Les doc/contracts/PEOPLEOS_HR.md i en selv-vert installasjon for hver operatøren, API, kontakt, webhook og frigjøring regel.

Gateway utvikler kontrakt

The Marketplace-pakken inneholder README.md, DEVELOPER.md, connector_contract.json, hr_profile.json og et underskrevet fil manifest.

PeopleOS HR

Testing og produksjonsberedskab

Et lanseringskrav beregnes fra bevis. Pakkeberedskab, leverandør sertifisering, juridisk godkjenning, rettferdighetsvurdering og tilgjengelighetsgodkjennelse er med vilje separat.

1
Valider kode og kontrakter

Kjør PHP-syntaks, HR PhpUnit og rute/APIparitet, OpenAPI/Postmann-kontroller og pakkeuttrykkJSONPlanvalidering.

2
Øv full arbeidsflyt

Test rekruttering, AI-gjennomgang, intervju/video, onboarding, signaturer, permisjon, lønnsinntekt, portalen, varsler, modal og kontaktfeilsti.

3
Test responsiv og tilgjengelig UI

Kjøre skrivebord, nettbrett og telefonoppsett; tastatur-, fokuserings-, etiketters, kontrast-, reflow-, verktøytips- eller varslingsrulling.

4
Samle eksterne bevis

Bruk ekte leverandørens rundturer og sletting, juridiske policyutgivelser, representative rettferdighetsdata samt en uavhengig menneskelig WCAG-godkjenning.

5
Utgivelse under dobbelt kontroll

En anmelder forskjellig fra innleggeren godkjenner kontakt og frigjøring bevis. Trekk tilbake eller kill-switch en forbindelse hvis det utløper beviset.

Hva hvert resultat betyr

Pakken er signert

Filer har ikke endret seg siden den godkjente pakkesignaturen. Det beviser ingen tredjepartskonto fungerer.

Sandbox passert

Deterministisk oppførsel og statlige overganger samsvar. Det beviser ikke en ekte leverandør, residency term eller sletting.

Produksjonskontakt sertifisert

En spesifikk arbeidsområdekonto passerte de fem leverandør-siden forpliktelser under dobbelt kontroll.

Teknisk WCAG-rapport

Det finnes automatisk og evaluatorstyrt bevis for navngitte overflater.

Launch klar

Alle nødvendige porter er grønne samtidig og ingen bevis utløpes, trekkes tilbake eller motsettes av levende helse.

⚠️
Aldri opprette en passerende lovlig, rettferdighet, leverandør eller uavhengig-attestasjon rekord bare for å rydde porten. Ta opp blokker og eier i stedet. Beredskapsvisning er verdifull nøyaktig fordi det nekter ustøtte krav.
Hvorfor er en kontakt installert, men fortsatt utilgjengelig?+

Installasjonen beviser at pakken er tilstede. Aktiver det, lagre ekte minst privilege legitimasjoner og passere forbindelsestesten, gi den matchende PeopleOS-kontoproduksjonsområdet ved hjelp av ekte leverandørbevis og en annen anmelder.

Hvorfor har ikke en webhook endret rekorden?+

Tilbakekallelsen kan være gyldig, men bare et hint. Sjekk innboksen for webhook-innboksen og resultat av statusendpointet til leverandører samt oppforsoning. PeopleOS endrer autoritative tilstand etter requery.

Hvor er den komplette maskinlesbare HRAPI?+

Ring meta.aksjoner og filtrer for timer, eller bruk/api/v1/openapi.phpog/api/v1/postman.php.De genereres fra samme kjøretidsregister.

Støtte

Hjelpesenter

Hjelpesenteret ditt er et selvbetjent hjelpenettsted bygget fra artiklene du publiserer. Kundene kan lese og søke det på sin egen offentlige side, samt rett inne i chat widgeten så de finner svar på seg selv før de noensinne åpner en samtale. Alt i den kommer av din kunnskapsbase, slik at samme innhold som grunnlegger AI også all offentlig hjelp.

Hvor kundene ser det

Dens egen offentlige side

Et rent og søkbart hjelpeområde på /help.php. Kunder surfer etter kategori, søk og åpne enhver artikkel. Du kan gi det ditt eget navn og stil.

Inne i chat widget

En hjelp kobling i chat widget slik at kunder kan søke artiklene dine uten å forlate praten. Hvis de fortsatt trenger en person, er det ett trykk unna fra starten av samtalen.

Slå på det

1
Åpne siden Hjelpesenter

Gå til Config, then Help Center i din admin og slå på Aktivere offentlig hjelpsenter.

2
Gi det et navn og en titt

Velg navnet på Hjelpesenteret som viser i overskriften og nettleserfanen, og velg en visuell stil. Du kan slå av toppnavigering for å få en ren side uten meny.

3
Publiser noen artikler

Ingenting viser før du publiserer artikler til det. Neste del dekker hvordan.

Publiser artikler til Hjelpesenteret

Artikler lever i din kunnskapsbase. En artikkel vises i Hjelpesenteret når den er publisert og merket offentlig. Det finnes noen måter å gjøre dette på:

Publiser én artikkel

Åpne artikkelen, merke den publisert og slå på alternativet for å vise det i Hjelpesenteret.

Publiser alt på en gang

Bruke Publiser alle Trykk hele publisert settet på Hjelpesenteret i ett klikk, i stedet for å gjøre det én om gangen.

Gjør FAQ til artikler

Har du allerede spørsmål? Bruk Publiser alle til hjelp å gjøre dem til hjelp artikler, så de sitter sammen med alt annet.

Importere eksisterende kunnskapsbase

Flytte fra et annet hjelpebord? Importer KB knappen på fanen Artikler gir deg en eksisterende kunnskapsbase. Du har tre måter å peke den på innholdet ditt:

Lim inn en URL

Gi det adressen til ditt nåværende hjelpesenter. Hvis den gjenkjenne plattformen (for eksempel Zendesk) leser den nøyaktig kategoritre fra denne plattformen. Ellers kryper det nettstedet og gjenoppbygger strukturen på sidene, importerer bare de ekte artiklene og hopper over innloggings-, prissettings- eller kontaktsider.

Velg en tilkoblet app

Hvis en plattform allerede er koblet til dette arbeidsområdet og den har kunnskapsbase, vises det i et nedtrekk under Importer fra en tilkoblet appVelg det og import, nei URL eller passord som trengs. Appen er bare oppført når den er tilkoblet og satt opp.

Last opp en CSV

Ingen live-side å peke på? Last opp et regneark med title, category, og body kolonne. Sett Parent / Child i kategorikolonnen for å bygge reir kategorier.

Uansett hvor du velger får man en Forhåndsvisning først: artikler det fant, gruppert etter kategori, hver med en avkrysningsboks slik at du kan slippe alt som ikke er ønsket. Ingenting lagres før du klikker på Importere. Etterpå kan Angre hele importen med ett klikk, eller Omsync a URL eller tilkoblet app import senere for å trekke inn nye og endret artikler.

💡
Utviklere: enhver kontakt kan annonsere sin kunnskapsbase til denne nedtrekk ved å erklære en kb_capabilities Blokker i sin settings.json (type) kb_sourceMed en adapter og a base_template). Se delen av forbindelsene og referansen til plattformen-tilkobling.

Organiser med AI

Et rent hjelpesenter er enkelt å bla gjennom og lettere å søke. Organiser med AI knappen gjør rengjøring for deg. I ett klikk leser den utgitte artiklene dine, sorterer dem i fornuftige kategorier og legger til tags. Det skaper en kategori når det trenger én, gjenbruker enkategori som allerede passer, og hopper over alt du har organisert, så kan du kjøre det igjen når som helst du legger til nye artikler. Slå på La AI organisere i underkategorier i Hjelp Center innstillinger og det kan også fil artikler under hekket Parent / Child kategorier, som er praktisk rett etter import av en kunnskapsbase som hadde underavsnitt.

💡
Kategorier gir kundene en måte å bla gjennom på, og taggene skjerpe søket både på den offentlige siden og i widget. Du kan omdøbe eller flytte ting etterpå. AI-en gir deg et sterkt utgangspunkt, ikke ett oppsett du er fast med.

Hjelpesenteret i chat widgeten

Du kan vise Hjelpesenteret rett inne i chat widgeten slik at folk søker svar før de meldinger deg. I innstillingene for chat-widget velger du hvor hjelpelenken vises:

I overskriften

Et lite hjelpeikon øverst på widget.

Nederst

En tekstlenke under meldingsboksen, for eksempel « Bla gjennom hjelpesenteret ». Du kan endre ordlyden.

Begge steder

Vis det i overskriften og nederst for mest synlighet.

Hjelp-koblingen har sin egen fargekontroll under innstillingene for widget utseende. Legg den på Ingen å matche din oppstarter farge, eller velge en Fast farge eller en Overgang. Hele hjelpopplevelsen følger widget-temaet ditt, så det ser alltid ut som en del av merkevaren din.

Legg ditt hjelpesenter på din egen webadresse

Ut av boksen har hjelpesenteret allerede en ren, delt adresse (for eksempel /help/your-help-center. Du kan gå et skritt videre og betjene det under din eget domene, så kunder og søkemotorer ser det som en del av ditt merkenavn for eksempel yourdomain.com/help eller help.yourdomain.com. Alt fortsetter å jobbe på domenet ditt: lenker, bilder og artikkelvurderinger

Under din hovedside

I Konfigurer, deretter Hjelp SenterÅpne Innebygget tab and find "Show your help center on your own web address". Pick your setup (Cloudflare, Nginx or Apache), copy the ready-made block, and paste it into your site. Each option has a Konfigurasjonsguide ved siden av den med de nøyaktige trinnene.

På en underdomene

Foretrekker help.yourdomain.comDet samme panelet har et underdomenealternativ. På Cloudflare en underdomene er den mest pålitelige ruten, og det gir deg en ren adresse med ingenting etter.

💡
Bruker Cloudflare? Den kjører bare sin arbeider på en adresse som er proxied gjennom Cloudflare(den oransje skyen). Hoveddomenet ditt peker ofte rett på nettsiden din, så en regel som plasseres i hoveddomene kan stille gjøre ingenting. Den pålitelige måten er et proxied subdomæne som help.yourdomain.com. Konfigurasjonsguiden går gjennom den ene DNS -posten og ruten.
Godt for SEO. Når hjelpesenteret ditt er på eget domene, indekser søkemotorene dine under merket. Hver side erklærer sin riktig adresse og nettstedskartet liste dem så den samme artikkelen blir aldriindeksert to ganger.
💡
I chat-widgetens "Åpne i brukerstøtte" -innstillinger, angir du at du vil bruke Hvor linken går til Dit eget hjelpesenter domene og angi den samme adressen. Deretter åpner disse artikkellenkene på domenet ditt også, ikke i OpsIQ -adressen.

Se hvordan hele hjelpesenteret ditt gjør

Utover enkeltpartikkelstemmer har hjelpesenteret eget Analyser. Slå på det i Hjelp Center innstillinger og den registrerer stille hvordan folk bruker hjelpen din: de mest sedde artikler, hva de søker etter, og søk som kom tom igjen ( en klar to-write liste), arbeider ut besøkende land og enhet selv så trenger ikke chat widget installert for å rapportere. Hvert nummer vises til Begge deler plasser din hjelp vises, den offentlige siden og in-widget hjelpen samt kombinert så du kan se hvor mye hver enkelt er faktisk brukt.

💡
Analytics holder seg av til du slår den på, og du kan ha besøkende IP adresser anonymisert. Ingenting registreres før du velger å velge inn.

Velg hva som vises på hver side av siden

Hver del av Hjelpesenteret (kategoriene på hjemmesiden, de populære artiklene og artikkellisten på en kategoriside med mer) har sin egen enkle regel. For hver enkelt kan du vise eller skjule den, og vise alle elementene, a sett nummer, den sisteEller bare de du Funksjonen Når en regel avslutter en liste, får kundene fortsatt en Vis alle-kobling, slik at ingenting er virkelig utenfor rekkevidde.

Du bestemmer også hvordan de nyttige stemmene ser ut: skjult, et vennlig forhold som "12 av 14 En innstilling for minimum antall stemmer stopper en helt ny artikkel fra å vise et "0ut av0".

Se hvilke artikler som fungerer

Hver artikkel viser en Var dette nyttig? spør. Hvert ja eller nei er talt per artikkel, så du kan se på et øyeblikk hvilke artikler som svarer spørsmål godt og hvem de trenger en omskriving. Gjentatte stemmer fra samme besøkende ignoreres, slik at tellingene forblir ærlige.

Tekst og etiketter

Du kan endre overskrifter og etiketter på Hjelpesenteret for å matche stemmen din. La feltet stå tomt, så det faller tilbake til en fornuftig standard slik at du bare redigerer ordlyden som faktisk vil forandre seg.

Hjelpesenteret deler ett bibliotek med AI-en. Hver artikkel du publiserer her er det samme innholdet som AI bruker til å svare på samtaler og billetter, så forbedrer den ene forbedres den andre.

Vanlige spørsmål

Må jeg skrive separat innhold til hjelpesenteret?+

Nei. Det er bygget fra de samme kunnskapsgrunnlagene som AI allerede bruker. Publiser en artikkel én gang og det kan tjene begge deler.

Kan jeg holde noen artikler internt?+

Ja. Bare artikler du publiserer og markerer offentlig vises i Hjelpesenteret. Alt upublisert holder seg utenfor det.

Kan kundene nå en person?+

Ja. Skjermvaren hjelper link sitter et trykk unna fra å starte en samtale, så selvservering aldri fanger noen.

Vekst & SEO

Nettsted Intelligence (SEO suite)

Nettsted Intelligence er OpsIQ s innebygd SEO og søkevisning suite. Det kryper nettstedet ditt som en søkemotor, spor der du rangere, forsker nøkkelord, klokker backlinks og konkurrenter, skanner din lokale kart tilstedeværelse, sjekk siden hastigheten og gjør det til kundeklarte rapporter med en AI-analytiker som forklarer hva man skal fikse og kan kladd rettelsen. Den er et premiumfunksjon; når aktiveres det vises som Site Intellect i sidepanelet. Hvert domenets data blir separat, krabler, rankinger og rapportering aldri bland mellom domene .

Nettsteds Intelligence
Nettsted Intelligence dashboardEn SEO dashboard som viser en steds-helse score, søkeord rangering sporing og trafikk trend.Nettsteds Intelligenceyoursite.com86SITE HELSKE3 kritiske problemerNøkkelord rangering sporingai helpdesk#3Live chat-tjeneste#7crm for byråer#12Økologiske klikk1KRYLLINGConstellation name (optional)Finner tekniske problemer2SporRanger, nøkkelord3AI ANALYSTForklaringer og utkast til rettelser
Oversikten over nettstedets etterretningsfunksjon: en sted-helse score fra den siste kryp, live keyword range sporing, en organisk klikk trend og tretrinns loop: krølle, spore, la AI utkast til rettelser.

Få nettstedets intelligens

Site Intelligence er en del av planene som bærer den. På en plan som ikke fungerer, det virker akkurat som PeopleOS HR: kontoen eieren åpner Konto→Add-ons & Tokens, velger et Site Intelligence-nivå og starter den gratis prøveversjonen eller legger til det direkte. En fri plan, eller en betalt planer som fortsatt er inne i sin egen testperiode kan ikke legges inn. Inntil det eies suiten er skjult fra sidepanelet og en direkt lenke gir tillegget; når ett nivåhett nås siden har neste grad; Når en rettighet slutter uten kjøpe fjernes retten og ingenting belastes. Tiers and prises live på kontoen så se de nåværende nivåerene på listen prisside.

Kjør et kryp · start her

En kryp er OpsIQ besøke sidene dine på den måten en søkemotor ville, for å finne tekniske problemer: ødelagt koblinger, manglende titler, tynt innhold, langsomme sider og indekseringsproblemer.

1
Start krypet

Klikk for å starte en kryp. OpsIQ kabler den og fungerer gjennom sidene i bakgrunnen; En statusindikator viser fremgang.

2
Les rapportene

Når det er ferdig, åpne problemene og sidelisten. Hvert spørsmål grupperes etter alvorlighetsgrad slik at du takler de største gevinstene først.

3
La AI hjelpe

AI-analytikeren produserer en vanlig språklig kortfattet av hva som er galt og hvorfor det spiller rolle, og kan generere foreslåtte rettelser du gjennomgå før påføring.

Hvilke spor av etterretningstjeneste

Crawls & nettsteds helse

Skanner sidene dine for tekniske SEO-problemer og lister hver side med problemene sine. Kjør på nytt når som helst, eller planlegg den.

Ranksporing

Legg til de nøkkelordene du bryr deg om; OpsIQ -kontrollerer hvor nettstedet rangere og spor bevegelse over tid.

Nøkkelordforskning

Oppdag nye nøkkelord ideer å målrette, med AI søkeord coach for å hjelpe prioritet.

Tilbakelenker

Se hvem som koblinger til deg, oppdatere listen og avvis linkene du ikke ønsker å knytte seg til nettstedet ditt.

Konkurranse

Legg til konkurrentdomene og sammenlign din synlighet mot deres, med en AI-konkurrentanalyse.

Lokalt (kart) rutenett

Skann lokallistesynlighet over et geografisk rutenett for å se hvor du vises på kartet, pluss Google Business Profile verktøy.

Sidehastighet

Kjør sidehastighetskontrollene slik at du kan fikse langsomme sider som skader rangeringer og konvertering.

AI-innhold

Opprett innholdsbriefer og utkast rettet mot nøkkelordene du målrett.

Rapporter

Bygg utskrivbare, kundeklare rapporter om alt ovenfor.

Koble til Google for nøyaktige data

To Google-kontakter gjør estimatene til virkelige tall:

Google Søk Konsollen

Søk

Dra de nøyaktige spørsmålene, klikk og inntrykk av Google-rapporter for nettstedet ditt, kartlegg over eiendommen din og muligheter til å rangere overflaten direkte fra Googles egne data.

Google Analytics 4

trafikk

Ta med trafikk- og engasjementsdata sammen med SEO dataene dine, så rapporter viser synlighet og oppførsel.

Planlagte oppdateringer og hvite merker rapporter

Du trenger ikke å kjøre alt for hånd. Planlagte oppdateringer re-run kryp, rangkontroll, nøkkelordskontroller, backlink oppfriskninger, lokale-grid skannere og rapporter generasjon på en kadens (daglig eller ukentlige avhengig av plan and volum). Disse kjører gjennom den OpsIQ cron, se Cron og automatisering delen. Generert rapporter eksport som utskriftsbare kundeklare dokumenter: byråene sender hver klient en vanlig SEO-oppdatering, og fordi alle domenets data er separat, ser hver klient bare sin egen.

Noen nettstedets intelligens-funksjoner kaller eksterne dataleverandører og AI gjennom OpsIQ Konfigurert leverandør. De fungerer ut av boksen når suiten er aktivert for planen din. Hvis en oppdatering ikke kjører, bekrefter du OpsIQ cron kjører (se Cron og automatisering).
Må jeg legge til noe på nettstedet mitt for SEO sporing?+

Crawls, rangering sporing, søkeord forskning og backlinks fungerer uten å røre nettstedet. For trafikk-og nøyaktig søksdata kan du koble Google Search Console og GA4 til.

Kan jeg spore mer enn ett domene?+

Ja. Legg til hvert domene separat; deres kryp, rangeringer og rapporter holder seg helt isolert fra hverandre.

Hvor ofte bør jeg krype?+

Ukelig er det mye for de fleste nettsteder; krølle etter behov etter et stort innhold eller strukturendring. Sett en tidsplan så du aldri glemmer.

Vekst & SEO

Automatisk implementering (SEO Agent)

Auto-Implement er den delen av Site Intelligence som faktisk bruker rettelser krøllen og AI analytiker anbefaler, i stedet for bare å rådføre deg. Agent fungerer strengt fra det nettstedets intelligens allerede funnet (det kan aldri oppfinne en endring) og går hver fikse gjennom samme sikre loop: et tørrkjørings forhåndsvisning, din per trinn godkjenning, live skriving, automatisk øyeblikksbilde samt en recrawl som beviser at åpen utgavetallet gikk ned. Det er en Managed -AI eneste funksjon; det vises som autoimplementet (Rocket) handling inne på siden etterretningsdelen, og det er slått av til du slår dem på.

Auto-implementering
Auto-implementere SEO agentEn flyt som viser anbefalte SEO-rettinger beveger seg gjennom forhåndsvisning, godkjenning og liveskriving med en reproof-it-recrawl.Auto-implementeringyoursite.comAnbefalte rettelserAdd missing <title>godkjentReparer robots. txtgodkjentSend inn nettsted.xmlvurderingFORHANDLING AV DRYKKEKØRING (DIFF)+ <title>AI Helpdesk - OpsIQ</title>+ <meta name=description ...>- <title>Home</title>GodtaHoppRE-CRAWLÅpne problemer 124Snapshot lagret1ForespørselTørrkjørt diff på hver fix2GODKJENN OG BRENNSSH eller hostet API3RIKE & ROLLBACKRe-crawl + øyeblikksbilde
Hvordan en sesjon kjører: agenten lister opp rettelsene Site Intelligence allerede anbefalt, viser et tørtdrevet diff av hver og én, gjelder de du godkjenne over SSH eller hostet API, øyeblikksbilder før hver skriving og re-crawls for å bevise det åpne problemet antall falt.

Hva det kan endre seg

Agenten bruker bare noen gang rettelser som Site Intelligence (eller AI-analytiker) allerede anbefalt for det domenet. Over de støttede plattformene som dekker:

Serverkonfigurasjon

Nettsidekart.xml, roboter.txt og omdirigere, kanoniske regler og overskriftsregler i htaccess (Apache / LiteSped) eller nginx-konfigurasjonen.

Omdiriger kjeder

Slår sammen en multi-hop omdirigere kjede ned til et enkelt hopp rett på finalen URL, inne i den samme administrerte htaccess blokken så hastighet og link verdi slutte å lekke gjennom ekstra hopp.

Page <head>

Manglende eller svake sidetitler, metabeskrivelser og kanoniske tagger samt strukturerte (skema) blokker.

WordPress SEO

Yoast, Rank Math og SEOPress titler & meta samt bilde alt tekst som brukes gjennom Wp-CLI på SSH Vei eller REST API på den vertslige veien.

WordPress strukturerte data

Legger til JSON-LD (Schema) til sider som mangler det. På SSH sti en liten håndtert hjelper (en må-bruk plugin) skriver ut markering slik at det fungerer med eller uten SEO -plugin; på den vertssti som SO programtillegget bærer.

Interne lenker

Legger til en relevant intern lenke i eksisterende WordPress innhold for å redde foreldreløse sider og koble sammen tilknyttede innlegg. En link per side, aldri inne på overskriften, en eksisterende lenkje eller kortkode, og alltid godkjent av deg først.

Innhold på tynn side omskriver

Utkast til full erstatningsinnhold for tynne sider (drevet av et kryp alternativ, se nedenfor). Hvert utkast er gjennomgått og godkjent av deg før noe publiserer, og det gamle innhaldet holdes slik at den kan gjenopprettes.

Sidebuffer (WordPress)

Slår på W3 Total Cache-siden caching når krypet finner hastighetsproblemer og det plugin er installert, så sider betjene raskere.

Shopify SEO

Produkt og samling SEO titler, side-og blogartikkeler SO samt 301 omdirigerer, gjennom Shopify Admin API.

Webflow SEO

Per-side SEO tittel og meta beskrivelse gjennom Webflow Data API v2.

Forbered rettelsene automatisk (to krypalternativer)

Nettsted Intelligence Configure-panelet for et domene (dets krypinnstillinger) har to alternativ som bestemmer hvor mye agentlinjene står opp i førtid. Begge er av som standard og begge bruker AI kreditt, så du slår dem på bare når du vil det fungerer for deg.

Auto-preparere AI retter etter hver kryp

Hver kryp skriver også betongfiks innhold (titler, metabeskrivelser, alt tekst, skjemaer og omdirigeringer) for hva det fantes. Rettelsene er klare til å gjennomgå og bruke øyeblikket krøllen fullfører i stedet for senere på etterspørsel. Bruker AI-kreditt på hver kravle.

AI-innhold omskriver (tynne sider)

Agenten kan skrive ut fullt erstatningsinnhold for tynne sider. Ingenting er publisert på egen hånd: hvert utkast vises som en endring du gjennomgår side omside og godkjenne eller avviser, det forrige innhaldet holdes slik at den er reversibel, og det er begrenset til noen få sidene per pass. Bruker AI-kreditter pr kladd.

💡
Begge alternativene forbereder og trekker bare arbeid. Hver endring går fortsatt gjennom den samme per trinn godkjenning, øyeblikksbilde og rulle tilbake som enhver annen løsning så slå dem på aldri setter noe live for seg selv.

To måter den kobler sammen

SSH / SFTP bane

Selvstyrt

For nettsteder på din egen server, kobler agenten over SSH/SFTP ved hjelp av legitimasjoner du lagrer, redigerer serverkonfigurasjons- og sidefilene direkte. WordPress. Best når du har skalltilgang og ønsker full kontroll av filer.

Hosted-API sti (ingen SSH)

Ingen skall

For plattformer som ikke tillater SSH, agenten fungerer helt gjennom en offisiell API kontakt, WordPress (REST + Applikasjonspassord), Webflow (data)API v2) og Shopify (Admin)API Ingenting er installert på verten.

💡
Wix og Squarespace har ingen offentlig SEO-skrive API, så på disse plattformene Auto-Implement kjører i rådgivningsmodus: det viser deg nøyaktig endring for å gjøre (den presise tittelen eller meta eller innstilling) som du kan bruke ved hånden. Alt annet er skrivebeskyttet og trygt.

Slå på kontaktene

Agenten når hver plattform gjennom en kobling:

Bygget i

Shopify og WordPress konnektorer skip med OpsIQ, bare aktiver dem under Connectors og legge til lager / nettstedets legitimasjoner.

Fra markedet

Webflow, Wix og Squarespace installer fra Connectors → Markedssted, deretter koble til på samme måte.

Hvordan en økt kjører

1
Velg rettelser

Åpne automatisk implementering (rocket) fra Site Intelligence-delen. Den viser problemene som Nettsidens etterretning allerede har funnet ut at den kan fikse på dette domeneområdet.

2
Forhåndsvisning av hver endring

For hver fikse agenten viser en tørr-kjør diff (nøyaktig hva det vil skrive) før noe berører live site.

3
Approve trinn for steg

Du godkjenner (eller hopper over) hver endring individuelt. Ingenting brukes uten eksplisitt gå-over på det trinnet.

4
Det skriver, og deretter øyeblikksbilder

På godkjenning gjør agenten live endring over SSH eller hostet API og lagrer et øyeblikksbilde først, så enhver endring kan rulles tilbake.

5
Bevis det, lev

Når det gjelder hver endring, sjekker agenten umiddelbart om den nøyaktige siden og viser en per trinn “fiksert live” dom så du ser hvert fikse land på levende side som det skjer. Til slutt kraper hele nettstedet igjen og bekrefter at antall åpne utgavene falt.

Sikkerhet og fakturering

SEO-beskyttet

Agenten kan bare gjøre det Site Intelligence anbefalt for dette domenet. Det kan ikke foreta vilkårlige endringer på nettsted eller server.

Per trinn godkjenning

Hver skriving forhåndsvises som en diff og brukes først etter at du godkjenner det bestemte trinnet.

Ta øyeblikksbilde og tilbakestill

Et øyeblikksbilde lagres før hver skrive, slik at enhver endring kan returneres.

Live per-trinn bevis

Hver endret side er kontrollert om øyeblikket den skrives og får en \"fixed live\" dom, så et grep bekreftes mot Live-siden umiddelbart, ikke bare i lukkende recrawl.

Innhold blir aldri automatisk utgitt

Interne lenker og omskrivinger av tynt innhold er høyere impactive, slik at de alltid vises for godkjenningen.

Kun Administrert-AI

Auto-Implement kjører på Managed AI; det blokkeres når et arbeidsområde bruker sin egen (BYOK nøkler.

Fakturering

AI-tokens regning normalt som du bruker dem, pluss en flat per bruksavgift pr. AutoImplement sesjon, begge trukket fra den samme Managed -AI kreditten.

Automatisk implementering er av som standard. Aktiver den på AI-konfigurasjonssiden (AutoImplementkort) og sørg for at koblingen til plattformen din først kobles sammen.
Men endrer det noe uten å spørre?+

Nei. Hver endring blir forhåndsvist som en tørrkjørt diff og brukes først etter at du godkjenne det nøyaktige trinnet. Et øyeblikksbilde lagres før hver skrive, slik å rulle tilbake.

Trenger jeg SSH Access?+

Ikke på WordPress, Shopify eller Webflow Disse arbeider gjennom sin tjenestemann APIs uten tilgang til skall. SSH er bare en av de to stiene, som brukes når du vil at agenten skal redigere serverkonfigurasjon og filer direkte på din egen tjener.

Hvordan vet jeg at det fungerte?+

Etter å ha brukt den godkjente fikser agenten på nytt, og viser det åpne problemet før eller etter så kan du bekrefte at løsningene redusert problem.

Vil det omskrive eller publisere sideinnhold på egen hånd?+

Nei. AI-innholdsomskrivinger er av til du slår dem på i krypealternativene, de begrenser seg til noen tynne sider per pass og hvert utkast vises for side ved siden godkjenning før noe publiseres. Det forrige innhaldet holdes så en omskrivning kan alltid tilbakeføres.

Kan jeg bruke det med min egen AI-nøkkel?+

Nei. Auto-Implement er bare Managed -AI og blokkeres under BYOK_. Det regninger AI tokens normalt pluss én flat per bruk avgift for hver sesjon, fra den samme managede-AI kreditten.

Vekst og engasjement

Survey StudioGenericName

Survey Studio er arbeidsområdet for å opprette redigerbare undersøkelser som kan leveres som en rik frittstående side, nettside widget eller inline innebygd. Det aktuelle produktet gir også vertskoblinger, signert utkast til forhåndsvisningar, private invitasjoner, QR-deling, responsbrowsing og spørreundersøkelseskopt analyse. Nettstedet widewriteen er ett levering valg; det er ikke definisjonen av ei landmåling.

⚠️
Nåværende målgrense: førsteklasses opprettelse og forhåndsvisning, Connector Builder survey kapasitet, og Survey-eid leverandør register/helse grense er tilgjengelig nå. Undersøk Studio trenger fortsatt den uavhengige multideployment arkitekturen, signert-token undersøkelse identitet Gateway, målrettet / variable ledninger, CRM Outreach sende flyt og skrevet surveys.* API.

Opprett en undersøkelse

1
Velg hvordan folk tar det

Den gjeldende veiviseren tilbyr Standalone-siden og lenken, Nettsteds widget og Inline embed. Det godkjente målstrømmen begynner med undersøkelsestype og legger senere CRM epost, privat link og QR utdelinger som førsteklassesvalg.

2
Velg formålet

Velg NPS, CSAT, CES, produktfeedbacks, post-kjøpekassen, kansellering, onboarding, nettstedet, arrangementen, webinar, støtte, bly/demo, prøveperiode, vitnemål, forskning, ansatte, inntak eller generell tilbakemelding.

3
Bruk en komplett mal eller start tom

Den gjeldende katalogen har klare redigerbare startere gruppert etter formål. Å velge en mal oppretter et kopiert utkast: å endre undersøkelsen din ændrer ikke startmannen eller en annen spørreundersøkelse.

4
Tilpass eller rask gjennomgang

Tilpass åpner alle spørsmål, design og oppførselskontroll. Rask gjennomgang åbner det samme utkastet ved den endelige kundevisningen. Ingenting publiserer eller sender automatisk.

Levering valg og present atferd

Registrer deg på siden & link

En responsiv merkeside med sin egen URL. Bruk private invitasjoner og utløp når hver mottaker trenger en kontrollert lenke. QR delingspunkter på denne vertsopplevelsen.

Nettside widget

Den migrerte arvekanalen. Det kan bruke side, geografi, enhet, besøkende, dato, prøvetaking, nedkjøling og kvoteregler. Det støttes fortsatt av den gamle aktiv-widget bro mens distribusjon arkitekturen er bygget.

Innvevd

En responsiv undersøkelse plassert inne i en side, portalen eller hjelpesenteret. Den krever ikke kampanjestudioet.

E-post

I dag kan Studioet generere invitasjon HTML og private lenker. End-to-end sending fra CRM kontakter/segments, med samtykke, undertrykkelse, planlegging, reprøve og respons korrelation er godkjent VR OutReach integrasjonsmål.

Enterprise design og forhåndsvisning

Undersøkingssider har Survey-eide temaer og sideutleggsfamilier, responsive kontroller, velkommen til å fullføre kopien av programmet. Designeren er fullbredde under redaktøren, ikke en smal sideskinne. Den bruker den riktige vertens kjøretid i sandboksrammen og støtter skrivebordsoversikt, nettbrett eller telefon bredde; forhåndsvisning trafikk skriver ingen svar eller analyser.

💡
Survey Studio er uavhengig av kampanjestudio. Runtime målsetting, identitet, eiendeler og analyse må være undersøkelsesbasert. Innholdet kan kun gjenbrukes gjennom en eksplisitt engangskopi/import som oppretter fraskilte undersøkelsesdata; senere kampanjer har ingen effekt.

Fullformet produkt

Uavhengige distribusjoner

Nivå

En undersøkelse kan ha separat versjonsside, widget, embed CRM e-post, privat link og QR distribusjoner, hver med sin egen tilstand, design, publikum og analyse. Hver spørreundersøkelse kan settes i pauser eller slettet.

CRM Outreach og kampanjer

Nivå

Bygg et verifisert publikum fra CRM-segmenter og Survey Capable Connectors, frys det til en immutable versjon, utstede én signert invitasjon hver av dem. Send gjennom den festede utgående epostkontakten med per innvisjonsleveringsbeviset.

Feltsett og validering

Nivå

Slidere, bildevalget, filopplasting, signatur, adresse, telefon og rik tekst med min/maks lengde. e-post /URL/nummerinnstillinger, egendefinerte feiltekst og per spørringsprefill URL Parametre.

Logikk, formler, resultater

Nivå

OG/OR tilstandsgrupper, grenregler, en sikker formelmotor over svar og score band som bærer sin egen utfallside: et poengt Quiz lander på dommen.

Language, kiosk

Nivå

En besøkendes språk nedtrekk bare språket med ekte oversettelser, kiosk-modus for delte tabletter (biggermålene, auto reset, ingen omdirigeringer), en forhåndsutfylling lenkebygger og redigerbar sikker badge og bunntekst.

Versjon A/B-testing

Nivå

Publisere en utfordrerversjon på enhver distribusjon med trafikksplitt. Besøkende er tildelt klistremerke, svarene stemples sammen med versjonen faktisk serveret og sammenligningstabellen viser responsar, ferdigstillelse og gjennomsnittlig poeng per versjon. Fremme vinner i ett klikk.

Ukelig fordøyelse

Nivå

En ukentlig e-post med de siste 7 dager av undersøkelse KPIs, den travleste spørreundersøkelsen, Feedbackpulsen og den nyeste AI briefing som sendes gjennom det festede utgående kontakt. Konfigurer det i Leveringssenteret, Automasjon.

Styre

Nivå

Per-overvåkingslister begrenser hvem som kan redigere, publisere eller slette en undersøkelse. Publiser godkjenning (fire øye) krever at den andre adminen frigir det nøyaktige utkastet; redigering tilbakestiller godkjennelsen. Utkast til aksjelenker lar reviewer se det virkelige kladd uten å logge inn.

Utviklerplattform

Nivå

Konnektorkontrakt 2.2, skrivne undersøkelser* og tilbakemeldinger. * Handlingstiltak på api/v1, kanonisk undersøkelse.* hendelser, slitesterkt signerte webhooks med Slack og Google Sheets stafettformater samt ett-respons PDF eksport.

Vekst og engasjement

Survey Analytics og Feedback er ulike produkter

Survey Analytics forklarer hvordan en undersøkelse selv når folk og utfører. Feedback forteller hva kunder sa over alle tillatte kilder, og hva virksomheten bør gjøre med det. De to produktene knytter til hverandre men ikke deler eller skriver over analytisk sannhet.

Analyse av spørreundersøkelser

Oppgis fra den individuelle undersøkelsen i Survey Studio, ikke fra den globale sidenavigeringen. Den måler kvalifiserthet, eksponering, utløse atferd, starter, fullfører, avgir, spørsmål og gren friksjon, timing, distribusjon/kampanje / versjon resultater samt driftstid påliteligheten.

Tilbakemelding Oversikt & Innboks

En autorisasjon-aware kronologisk feed for fullført Survey svar, arv widget tilbakemeldinger chat og billett CSAT, kupongsvars feedback, kunde AI-svaring vurderinger, kunnskapbase nyttige stemmer og godkjent eksterne / spesialkilder.

Tilbakemeldingsanalyse

Analyserer kundebetydning: originale metriske trender, emner/temaer, følelser, intensjon, haster, klager, ros, reise / produkt / service / lag segmentene, nedsenkning og lukket loop utfall.

Dataeierskap

Undersøkelsessvar forblir autoritative i Survey-lagring. Feedback lagrer en gjenskapbar kildereferanse og avledede signaler, deretter laster tillatt bevis på etterspørselen. En fullført undersøkelserespons blir til det meste ett tilbakemelding element.

⚠️
Den nåværende Feedback-siden har fortsatt en Survey responsleser og et separat element innboks, og AIs totaler bruker ennå ikke den fullstendig normaliserte kildemodellen. Det forente Oversikt / Innbakke/ Analytics

NPS, CSAT, CES, stjerner, tommelfinger og hjelpeevne må alltid beholde sin opprinnelige metode, skala, prøven, datovinduet og nevneren. De kan aldri kombineres til et uforklarlig gjennomsnitt.

Vekst & SEO

Kampanjestudio

The Promotions Studio gjør nettstedet ditt til en konverteringsmotor. Design pop-ups, bannere, lysbilde innlegger, topp/bunn barrene, fullskjermovertakelser og inline blokker og selv landbasert omdirigeringer, deretter viser riktig melding til den rette besøkende i det rett øyeblikk. Alt leveres gjennom OpsIQ _widget allerede på nettsidene dine, så det er ingenting ekstra å installere. Du designer og lagre kampanjer når som helst; de bare vise dem etter at du publiserte og studiot slås på for arbeidsområdet din.

Kampanjestudio
Studio designerEn visuell kampanjedesigner med en blokk palett, pop-up på lerretet og et målgruppe.Studio - DesignerBLOKKERConstellation name (optional)xVelkommen, {first_name}!Få 15% av din første ordreSAVE15Krev kupongen minTARGERINGLandUSA, CAUtløserUtgangs-intentA/B-deling50 / 50Publiser1DESIGNDra blokker på lerret2MÅLLand, side3LEVERA/B vinner + AI innsikt
Den visuelle designeren: en blokker palett til venstre, kampanjen på lerretet (her er en personlig kupong pop-up ved hjelp av et {first_name} pollett) og målrettet + publiseringspanel til høyre.

Det store bildet

Kampanje

Hva

En kampanje: en pop-up, banner, bar, glide inn, fullskjermen eller inline blokk eller geo - redirect. Hver har et mål: salg, bly, tilmeldingsliste, chatt, undersøkelser og kunngjøring.

Design og versjoner

Hvordan

Du bygger utseendet i den visuelle redaktøren. Hver lagre skaper en ny versjon, slik at du alltid kan rulle tilbake. Ingenting er noensinne tapt.

Målrettet

Hvem

Hvem ser det: land, side, enhet, trafikkkilder og retur vs ny, timeplan eller (med en kontakt) dine innloggede kunder.

Utløsere

Når

Når det vises: umiddelbart, når du er forsinket, på ruller, ved utløpsinnsats, i inaktive tilfeller med et klikk etter N-sider eller fra chat/billetter.

Analyse

Resultater

Live-inntrykk, klikk gjennom, konverteringer, drop offtrakte, land / side/enhetsdelinger og en AI innsikt.

Start din første kampanje i 5 -trinn

1
Start fra en mal eller tom

Åpne kampanjestudio og klikk Ny kampanje, eller velg et ferdig design fra maler galleri. Et utkast åpnes i designeren.

2
Design den

Dra i blokker, overskrifter, tekst, knapper, bilder, merker, statistikk, nedtellinger, skjemaer, kuponger, videoer, vurderingar, spin-hjul. Stilfarger, gradienter og 3D effekter med glidebrytere. Forhåndsvisning Skrivebord / Tablett/mobil, og bruk Gratis flytting til å plassere noe som helst hvor som helst.

3
Personliggjør det

Type tokens som {first_name}, {country} eller {company} på hvilken som helst tekst. På show-tid blir de besøkendes virkelige verdier.

4
Mål og utløser

Velg hvem som ser det (land, side, enhet og publikum) når den brann (delay, rulle ut eller avslutte-inn). La en regel stå tom for å bety alle.

5
Sjekk og publiser deretter

Klikk Sjekk for en rask forhåndslansering-skanning, og deretter publiser. Det går live i løpet av sekunder og begynner å samle analyse.

Blokker du kan bygge

Innhold

Kjerne

Overskrift, avsnittet liste, sitat, bilde, ikon, merker, stat, delingsdeler og avstandsstykker, byggesteinene i enhver melding.

Ring til handling

Kjerne

Knapper med ekte handlinger: åpne en lenke, starte chatten, opprette billett, kopiere kupong eller hopp til siden.

Urgency & fangst

Premium

Nedtelling timers, skjemaer (email / telefon/tekst), kupong avslører og video embed.

Gamifisert og tilbakemelding

Premium

Spinn-til-vinne hjul, skrapekort, NPS / stjernerangeringer og flertrinnstrakt.

Layout & effekter

Premium

Kolonner, fremdriftsstanger, sosial deling, Social bevistikkere, ja/ingen to-trinn, quizzes og 3D effekter, tilting, gløde, parallax.

Personaliseringssymboler

Skriv inn noen av disse i overskrifter, avsnitts- knappene, merkete, statistikken eller sitatlisten. De erstattes med besøkendes live detaljer øyeblikket kampanjens visning (alltid rengjort for sikkerhet):

Tilgjengelige polletter
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)

Målrettsreferanse

Land og plassering

Vis kun i (eller skjul fra) utvalgte land, byer eller tidssoner via GeoIP. Flott for regionspesifikke tilbud eller en geo-omdirigert !

Sider og URLs

Begrens til visse sider ved å bruke lik / starter med/ inneholder // regulær, og ekskluder også sidene.

Enhet

Skrivebord, nettbrett eller mobile enheter som f. eks en slank bar på mobiltelefonen og et modal på skrivebordet.

Besøkstype

Ny, returnerende og kjent (i CRM) eller anonym; VR segmenter, livssyklus-stadiet, blypoeng eller nettleserespråk.

Trafikkkilde

Ved UTM (utm_source, utm/campaign) eller referansenettsted, for eksempel kun besøkende fra en bestemt annonse.

Planlegg & frekvens

Start / sluttdatoer, tids-på-dag vinduer og hvor ofte en person kan se det (per økt per dag etter at de lukkes/klikke på / konvertere).

A/B trafikk split

Vis til en prosentdel av besøkende og kjøre varianter hode-til -hode; den samme personen ser alltid det samme.

Publikum (lappet inn)

Med en kontakt aktivert, målrett ved live kontotilstanden, f. eks kunder med ubetalte fakturaer eller aktive abonnenter.

Utløsere

Velg hvordan kampanjen vises: umiddelbart, etter en forsinkelse på rulledybde, ved utløpsinnhold når den er inaktiv, med et klikk av ett element efter flere sider som ses i skjema-abandon eller fra chat/billettaktivitet. Utviklere kan brenne én fra sin egen kode sammen med window.OpsIQPromo.fire('event').

Målinnloggede kunder (tilkoblinger)

Dette er det som gjør OpsIQ kampanjer spesial: koble til en plattform som WHMCS (eller hvilken som helst kontakt som støtter publikum) og studioet kan målrette besøkende av deres live kontotilstand.

1
Aktiver en publikumskontakt

Under kontakter, aktiver en som avslører publikumsfakta (WHMCS gjør ut av boksen. Kunder er anerkjent sikkert når logget inn på den plattformen, OpsIQ Stoler aldri på en e-post.

2
Legg til en publikumsregel

I kampanjens målsetting > Audience, krever pålogging og legger til regler som ubetalte fakturaer >= 1, abonnement er forfallne eller kontokreditt > 0.

3
Personliggjøring med sine data

Bruk symboler som {first_name} eller {balance_due}. En "Du har en forfalt faktura" påminnelse skriver seg selv.

Audience targeting is fail-safe: if the connector cannot confirm a fact (or the visitor is not logged in), the promotion simply does not show, so a billing-targeted offer never reaches the wrong person. Building your own connector? See "Promotion audience targeting" below.

Konnektiv handel (studio supermakt)

Produktkort fra butikken din

Live- data

A Product block pulls real items (name, price, sale price, image, link) straight from WHMCS, WooCommerce, Shopify or your OpsIQ billing. Tick "Keep fresh" and the card updates its price from the platform every hour while published.

Butikk-provisionerte kuponger

Kuponger

En kupongblokk kan opprette den ekte rabattkoden i butikken din det øyeblikket du publiserer, så koden en besøkende avslører alltid fungerer ved utsjekking.

Ordre-sanne inntekter

Tilknytning

Ekte bestillinger fra plattformene dine er matchet tilbake til kampanjer timevis (etter kupongkode som brukes eller av ledelsens e-post) så inntekten du ser, kommer fra faktisk salg.

Ekte sosiale bevis

Stolt

The social-proof ticker can lead with genuine recent orders ("Ada ordered Starter Plan · 2h ago"), first name and item only, never emails or amounts.

Eksperimenter og reiser

A/B varianter & auto-vinner

Del trafikken på tvers av designvarianter; la studioet promotere den statistiske vinner automatisk, eller håndtrafikken til bandittoptimereren som skifter besøkende mot det som konverterer som bevis kommer inn.

Hold ut oppløfting

Reserver en bit av besøkende som ikke ser noe, så du kan bevise kampanjen selv forårsaker heisen.

Segmentvarianter

Forskjellig innhold per publikum på SAME-kampanjen (mobile besøkende, store kurver og returnerende kunder), får hvert segment sin egen versjon.

Trigger-eksperimenter

Varianter kan også teste NÅ å vises: umiddelbar vs forsinket mot utgangs-intent, målt hode til hodet.

Reise (kjede)

Target by what someone did with another campaign ("saw campaign A but didn't convert") to build multi-step promotion sequences.

Teasers

En liten pille besøkende kan åpne seg igjen etter å ha stengt kampanjen, så en lukket pop-up er aldri borte for godt.

Vet hva som skjedde

Klikk på varmekart

Designer

I designeren, slå på varmekartet for å male ekte besøkende klikker over hver blokk i designet ditt.

Steptrakt

Trakter

Flertrinnskampanjer viser nøyaktig hvor folk faller av, skjerm på skjermen.

Sammenlign kampanjer

Studio

Legg opp til fire kampanjer side omside (trykk, klikk og konvertering), uthevet best verdi.

Ukehistorie & fordøyelse

AI

Hver mandag lander en fordøyelse i varsler;📖Ukens historieknapp skriver en enkelspråklig sammendrag med neste trinn når du vil ha et.

Arbeider komfortabelt

AI copilot & ideer

Chat med design-copiloten for å redigere lerretet ("gjør overskriften presserende, legg til en nedtelling"), få kampanjeideer fra dine egne trafikkdata, oversett en kampanje per land eller automatisk fikse en lav designpoeng.

Import av merkesett

En kommando leser nettsiden din og foreslår dine virkelige merkefarger, lagrer alle velgere fører med seg.

Multi-skjerm trakter

Trinnblokker får ekte per skjermredigering: fanene for hver skjermen, legger til eller reorganisere skærmen og forhåndsvisning følger.

Navngitte versjoner og tilstedeværelse

Navngi viktige versjoner ("Launch candidate"), gjenopprett noen av dem, og se en advarsel når en teammedlem redigerer den samme kampanjen.

Enhetsstripe og linjaler

Se desktop, nettbrett og mobil side om siden i én visning; slå av piksel linjaler for nøyaktig plassering.

Hostet side & kanaler

Hver kampanje kan også være en frittstående vertsside for bioer og QR-koder, en epost drypp sekvens for fanget lead eller et ett klikk webpush utkast.

Bedriftssikkerhet

Publiser frysevinduer (forander-fryse perioder), en nødssituasjon pause alle bryter, godkjenninger, revisjonsti og versjon rulle tilbake.

Trenger jeg å legge til kode på nettstedet mitt?+

Nei. Kampanjer leveres av samme OpsIQ -widget som du allerede har installert. Design, publisere og gjort.

Vil besøkende se samme pop-up om og om igjen?+

Nei. Sett frekvens caps (per sesjon / per dag, eller stopp etter noen stenger, klikk eller konvertering). Følbare standardinnstillingene brukes.

Hvem kan publisere?+

Publishing, paussing, arkivering og rullende tilbake er begrenset til arbeidsflate eiere og full administratorer. Alle teammedlem kan opprette og design utkastene.

Vekst & SEO

Designer

Promotions Designer er en responsiv blokkredaktør for å bygge, gjennomlese og publisere kampanjen.

Produktskjerm
DesignerDesigneren kombinerer et live lerret, enhets forhåndsvisninger, blokker, variabler for personliggjøring, kommentarer og versjonshistorikk.DesignerarbeidsflateVIEWPORTSkrivebordVERSIONv12StatensUtkastLIV ARBETSPESSONEHelteblokkHoved, medier og CTARedigerTilbudsblokkRabatt og deadlineRedigerPersonaliseringKontakt- og kampanjevariablerKlarStartkontrollKommentarer og valideringAnmeldelse1BUILD BLOCKSRediger live-utforming2ForespørselDesktop, nettbrett3PUBLISHUtgitt utgivelse
Designeren kombinerer et live lerret, enhets forhåndsvisninger, blokker, variabler for personliggjøring, kommentarer og versjonshistorikk.

Bruk blokker til å komponere opplevelsen, forhåndsvise hver støttet visning og sette inn godkjente personaliseringsvariabler. Gjennomgang kommentarer og AI-media reprotestance før lansering. Sparing skaper versjoner slik at en tidligere design kan inspisere eller gjenopprettes.

Vekst & SEO

kampanjemaler

Maler tilbyr et søkbart, kategorisert startgalleri for kampanjekampanjer i promotionsstudio.

Produktskjerm
kampanjemalerMalgalleriet filtrerer premium layouts og anvender arbeidsområdemerkefarge når en mal blir et utkast.kampanjemalerarbeidsflateKATEGORYKonverteringRESULTS24BrandBruktLIV ARBETSPESSONEUtgangstilbudModal med haster og CTAForhåndsvisningNy besøkende velkommenBanner og fordellisteForhåndsvisningProdukt lanseringHelt, bevis og nedtellingForhåndsvisningTilbakemeldingsforespørselKompakt undersøkelsesbegrensningForhåndsvisning1FILTERKategori og søk2ForespørselSjekk det fulle designet3USEOpprett et merket utkast
Malgalleriet filtrerer premium layouts og anvender arbeidsområdemerkefarge når en mal blir et utkast.

Søk eller filtrer etter kategori, last inn ekstra resultater og forhåndsvisning av den komplette opplevelsen. Bruk mal. Den nye kampanjen forblir et utkast og kan endres i Promotions Designer før publisering.

Vekst & SEO

Forfremmelsesanalyse

kampanjeanalyse forbinder inntrykk og klikker til konvertering, publikumskontekst, kontakthandlingsutfall og kampanjelæring.

Produktskjerm
ForfremmelsesanalyseFremme analyse viser overskrift ytelse, publikum og utløse nedbrytninger, fører eksport-og kontakt actionresultatene.ForfremmelsesanalysearbeidsflateIMPRESSIONS42.8kCTR6.4%CONVERSIONS814LIV ARBETSPESSONELandStorbritannia 31%DelingSide/pricing · 22%DelingUtløserAvslutningsformål · 44%DelingKoble til handlingKupong opprettet · 97%Utfall1LEVERImponering til konvertering2SLICESide, land3LEARNBruk innsikten
Fremme analyse viser overskrift ytelse, publikum og utløse nedbrytninger, fører eksport-og kontakt actionresultatene.

Les inntrykk, klikk-gjennomgang og konverteringer sammen. Bryt ned resultatene fra land, side, utløser og enhet; eksport fanget fører når nødvendig. Kontakthandlingsresultatene viser om kampanjens lovede oppfølging faktisk kjørte. AI innsikt og læring summer bør behandles som hypoteser til validert, ikke automatisk bevis.

Vekst & SEO

Publiseringer

Kunngjøringer publisere en melding i widget-varslingsområdet med valgfri målretting, tidsplan og anrop til handling.

Produktskjerm
PubliseringerAnnonceringsredigeringsredaktøren inkluderer innhold, CTA, publikum, segmenter, sideregel og aktive datoer samt visuell stil.PubliseringerarbeidsflateAKTIVT3AUDIENCESegmentTidsplanJul22–29LIV ARBETSPESSONETittelPlanlagt vedlikeholdKlarInnholdMerk ned meldingKlarCTALes oppdateringenValgfrittReglenePriser sider · aktive kunderMål1WRITETittel og markdown2MÅLPublikum, segment3TidsplanAktivt vindu
Annonceringsredigeringsredaktøren inkluderer innhold, CTA, publikum, segmenter, sideregel og aktive datoer samt visuell stil.

Velg alle besøkende, logget inn eller nye besøkere; eventuelt smalner publikum med kontaktsegment og sideregel. Sett aktiv-fra/aktiv-til -datoer samt et aktivt flagg. Premium stilinnstillingsforutsetningene og farger endre presentasjon men ikke erstatte klart innhold.

Vekst & SEO

Push-kampanjer

Push kampanjer sender nettleserevarsler til abonnerte besøkende etter at de har forlatt nettstedet.

Produktskjerm
Push-kampanjerPush-komponisten viser abonnements rekkevidde, innhold, medier, handlinger og målregler.Push-kampanjerarbeidsflateSUBSCRIBERS8,214SEND31.6kCLICK RATE5.8%LIV ARBETSPESSONETittelDin handlevogn venterKlarKroppReturn i dag for gratis leveringKlarCTAÅpne handlevognKlarPlanleggerSend nå eller planlagtUtkast1PREPARE PUSHNavn, kropp2MÅLPublikum, segment3SENDPlanlegg eller utkast
Push-komponisten viser abonnements rekkevidde, innhold, medier, handlinger og målregler.

Konfigurer Web Push-tastene først under innstillingene for webpussj. En kampanje kan omfatte tittel, kropp, ikon, heltbilde, merket og opptil to handlingsknapper; en vedvarende varsling gjenstår til besøkende interaksjoneres.

Målrettet etter publikum, valgfri kontaktsegment og sideregel. Lagre et utkast eller sende umiddelbart. Bruk abonnementet og klikk metrikk for å dømme rekkevidde. HTTPS and a right hostet servicearbeider er nødvendig på innebygde tredjepartssider; se Web Push on third-party sites .

Vekst & SEO

Proaktive meldinger

Proaktive meldinger når ut automatisk øyeblikket en besøkendes oppførsel samsvarer med regelen, før de spør. Du bygger hver som regel i tre deler: Hva skal skje, når det bør brann og hvor ofte. Alt leveres gjennom OpsIQ _-widget allerede på nettstedet ditt.

Proaktiv
Proaktive meldingerEn proaktiv regelkomponist i tre deler: Velg en handling (chat, banner, tur, push og e-post), legg til betingelser og sett ned frekvensavkjøling.Proaktive meldingerarbeidsflate1 · HandlingChatmeldingBannerTurTrykkE-post2 · Betingelserpage = /pricingtid på siden > 20sTilbake3 · FrekvensEn gang per øktStatus1ActionChat, banner, e-post, push...2CONDITIONSSide, tid, score3FREKVENSKjøle ned per besøkende
Hver proaktiv regel er tre valg: hva som skjer (chat, banner, tur, push, e-post, webhook), når (betingelser) og hvor ofte (kjøle ned).

De tre delene av en regel

1
Hva som skal skje (handling)

Vis en chatboble eller på siden banner, start et guidet turne, send en nett push or e-post til en avdeling og brann en webhook. Tokens som {{visitor_name}} og {{page_title}} bli virkelige verdier.

2
Når det skal brenne (betingelser)

Narrow som utløser det: side/URL, tid på siden, rulledybde, blypoeng, retur vs ny, inaktiv. Med ingen betingelser brann regel for hver besøkende. Legg til minst én å målrette det. Betingelser kombinere med OG.

3
Hvor ofte (frekvens)

Sett ned en avkjøling slik at den samme personen ikke blir skadet, for eksempel én gang per sesjon eller én gong om dagen. Hver regel har på/av status.

⚠️
The workspace toggle "Run time/idle rules hourly" lets server-side actions (email, push, webhook, assign) fire on a schedule for known contacts who are not currently on the page, so you can "email idle hot leads" automatically. It needs the OpsIQ cron running. Leave it off if you only want live on-page nudges.
Vil det skyte for alle?+

Bare hvis du legger til ingen betingelser. Legg minst én betingelse (side, resultatresultat og retur...) for å målrette de riktige besøkende.

Hvordan relaterer disse til flyt og tur?+

De jobber sammen: en proaktiv regel kan starte et guidet tur, og Chatbot Flow kan utløses av en profylaktiskregel. Start med én chat-melding regler, deretter lag de andre på.

Vekst & SEO

Chatbot flyter

Chatbot Flows skriptgrening samtaler i chat widget (målinger, søkeord svar, veiledede stier) uten kode. En flyt er et sett av tilkoblete trinn (noder): du stiller spørsmål, besøkende velger en mulighet og strømningen sender dem ned matchende grenen. Bare aktive bekkene kjører på nettstedet ditt.

Hvordan det fungerer
Chatbot flyterEt flyt lerret: en hilsen node grener inn i tre alternativ knapper, hver fører til et neste skritt, se opp rekkefølge eller gi avkall på et menneske.HilsenHvordan kan jeg hjelpe?Følg ordren minBilling-spørsmålSnakk med et menneskeSe opp bestilling→Menneskelig agentUtløsere: Hilsen · Nøkkelord · Håndbok · Etter-detaljer · På chat-slutt
Chatbot flyter

Flow vs AI · når du skal bruke som

Bruk en flyt

When the path is predictable and you want it identical every time: booking steps, a returns wizard, a "which plan?" chooser, collecting an email before handoff. Flows never improvise.

Bruke AI

Når spørsmålene er åpne, - gjør dette arbeidet med min installasjon-. Kundechatt AI svar fra din utdannede kunnskap. En flyt kan gi av til AI (eller et menneske) i hvert steg.

Utløsere

Hilsen

Kjører som åpningsmeldingen når en besøkende først åpner samtale.

Nøkkelord

Kjører når besøkende skriver et ord du har oppført (f. eks refusjon, prissetting og kansellering).

Etter detaljer / etter forsinkelse

Starter når kontaktdetaljene deles, eller en bestemt tid i samtalen.

På chatten / Proactive

Kjører som chaten pakker opp (f. eks en vurdering), eller startes av et Proactive Meldingsregler.

Bygg en i fire trinn

1
Opprett flyten

Klikk på Ny flyt, navng det. Velg en utløsertype (og nøkkelord hvis Keyword), lagres. Det begynner å slå av.

2
Åpne lerretet

Klikk på Rediger lerret. Den visuelle byggmesteren der du legger til trinn (meldinger, spørsmål med knapper og grenar) og koble dem sammen.

3
Legg til grener og hånd-av

For hvert valg, trekk en gren til neste trinn. Avslutt stier ved å løse, gi til AI eller overføre til et menneske.

4
Aktiver det

Klikk på Aktiver. Strømmen går live i widgeten umiddelbart. Deaktiver når som helst uten å miste designet.

Er flyter erstattet av AI?+

Nei. De kjører side omside. Bruk flyter for å forstå stiene og AI til åpne spørsmål; en strøm kan alltid gi av til heller.

Vekst & SEO

Guidede turer

Guidede turer er trinn for steg gjennomgang som punkt på deler av siden din med talebobler og et spotlight, leder en besøkende via onboarding eller ny funksjon. De er fullt temaet og bygget i en visuell designere med live forhåndsvisning. En tur kjører bare når det markeret Aktive.

Hvordan det fungerer
Guidede turerEn dimmet side med en spotlight ring rundt et tillegg-deal knapp og en tema tale boble lesing trinn 1 av 4 med en neste knapp.+ Legg til avtaleSTEP 1 AV 4Opprett din første dealKlikk her for å legge til en avtale i rørledningen.Neste →
Guidede turer

Hvordan en tur er bygget

Trinn

Hvert trinn måler et element og viser en boble med teksten. Legg til så mange stopp som gjennomgang behovene, og bestill dem.

Forvalg og tema

Start fra en forhåndsinnstilling eller design din egen boble (farger, gradienter og spotlight) med live-forhåndsvisning til høyre.

Utløser

Alternativt knytter en Proactive-regel slik at turen starter automatisk når den regelen brann (f. eks. et tilbakevendende besøk av besøkendes første dashboardbesøk).

Aktivt bytte

En tur er kun kvalifisert til å kjøre mens Active er merket. Fjerne for å ta den ned uten at det slettes.

Bygg en i fire trinn

1
Ny tur

Klikk på Ny guidet tur, navngi den og koble en proaktiv regel slik at det starter automatisk.

2
Legg til trinn

Legg til hvert stopp: Velg det elementet den peker på og skriv bobleteksten. Reorganisere inntil banen strømmer.

3
Design den

Velg en forhåndsinnstilling eller stil boble selv. Live preview viser nøyaktig hva besøkende ser.

4
Aktiver

Tick Active og lagre. Turen kan nå kjøres på egen utløser, eller startet med en Proactive Melding regel.

Hvordan starter turene?+

On their own trigger, or via a Proactive Message rule's "Guided tour" action, so you decide which visitors see which tour and when.

Vekst & SEO

Konverteringsmål

Konverteringsmål gjør en aktivitet du bryr deg om (en inngående webhook-hending, chatmelding og billettoppløsning) til et registrert konverteringsskjema med full tildeling. Når aktiviteten brann logger OpsIQ ein konvertering mot kontakten og bind den tilbake til kampanjene, segmentene og kjeldene som førte der.

Hvordan det fungerer
KonverteringsmålEn målflyt: en payment. succeeded webhook-hendelse blir en registrert «kjøp»-konvertering verdt $49, som tilskrives kilden og kampanjen, med forhåndsinnstilte hurtigstartsmarkører ovenfor.Rask startStripe kjøpeDemo booketNyhetsbrevpayment.succeededinnkommende webhookKonvertering"kjøp" · $49TilpassetKilde · kampanje
Konverteringsmål

Definere et mål i tre trinn

1
Velg utløseraktiviteten

Klikk på nytt konverteringsmål. Velg aktivitetstypen som teller som en omdannelse, eller bruk et hurtigstartinnstillinger, Stripe kjøp, Demo-bestilt, Nyhetsbrevregistrering eller abonnement startet.

2
Navngjev det og sett en verdi

Gi konverteringen et navn (kjøp, demo_booked og tilmelding) samt eventuelt en fast verdi og ei tildelingsvindue.

3
Lagre

Spar og aktiver. Fra da av, når aktiviteten brann OpsIQ registrerer en omdannelse mot kontakten med å tilskrive seg de foregående berøringene.

Målene er allerede kablet til inngående webhooks: ethvert mål som utløser samsvarer med en inbound events type brann automatisk det øyeblikket hendelsen land. Bruk Innbunden Webhooks-siden for å koble Stripe, Calendly eller et system som kan POST JSON
Hva kan være en konvertering?+

Enhver registrert aktivitet: en inngående webhook hendelse (payment. succesed), chat e-post fangst, billettoppløsning og alt på kontakt tidslinjen.

Analyse

Tilpassede dashboards

Tilpassede Dashboards lar deg bygge din egen visning av metrikkene som betyr noe, i stedet for å stole på standardoversikten. Legg til widgeter du vil ha, dra og endre størrelsen dem inn i layoutet du liker, lagre det og dele den med teamet ditt.

Tilpassede dashboards
Tilpassede dashboardsEn dashboard-bygger med KPI og diagram widget fliser, en strekt drop sone samt et Add Widget knapp.Tilpassede DashboardsarbeidsflateMitt instrumentpanel+ Legg til widgetVisitorer2,481INNTEKTER$8.2kTRAFFIKKDra en widget herTOP BIBLESTER/pricing/docs/signup1ADD WIDGETSVelg metrikk og diagrammer2ARRANGEDra & størrelsesendring3SHAREMed ditt team
Bygg ditt eget brett: Legg til KPI, diagrammer og liste widgets, dra dem inn i layouten du vil ha.

Bygg en i tre trinn

1
Legg til widgets

Klikk Legg til Widget og velg metrikken eller diagrammet du vil spore. Gjenta for alt som er på brettet.

2
Arranger layouten

Dra widgets for å reposisjonere og dra kantene sine til størrelse. KPIer over toppen, diagrammer nedenfor. Uansett hva som leses best.

3
Lagre & delt

Lagre instrumentbordet og dele det med teamet ditt slik at alle ser på de samme tallene.

Keep separate boards for separate jobs (a "daily glance" board with live counts, and a "monthly review" board with trend charts) so each stays focused.
Vekst & SEO

Utreach-kampanjer

Utreach er OpsIQ's1:1og bulk e-postmotor: komponere en personlig melding eller kjøre en kampanje til et CRM segment, med svardetektering, sendetidkontroll, åpen/klikk sporing, en sporingspiksel og ett klikk abonnement. Det er samtykket og CAN-SPAm / CASL samsvarende.

Utreach
Utreach-kampanjerUtreach-skjermen med Komponist/kampanjer / Maller og Replies fanene, samt en kampanjetabell som viser sendt, åpent og svarrate.UtreacharbeidsflatekampanjerKomponistMalerSvarKAMPANJESENDÅPNEConstellation name (optional)SvarNyhetsbrev juni1,20048%7%Oppfølging av prøve34062%14%Vinnerback82039%5%Svar på deteksjon automatisk stopper oppfølging · ett-klikk abonnement på hver sending11:1 & BULKKomponere eller kampanje2TRACKEDÅpner, klikker og svarer3COMPLIANTSlutt å bygge i
Outreach-motoren: Send1:1eller kjører kampanjer til et segment, spor åpner og svarer på det, samt holder seg i samsvar med innebygd abonnements-og svaroppdaging.

De fire fanene

Komponist

Skriv en personlig1:1e-post med {tokens} fra kontakt og CRM.

kampanjer

Send til et CRM-segment, planlagt eller nå med hetter og sendetidkontroll.

Maler

Reusable meldingsmaler for gjentatt utvei.

Svar

Svar på deteksjon poster svar og auto-stopper oppfølging til alle som svarte.

Hvordan en kampanje kjører

1
Velg et publikum

Velg et CRM-segment (eller last opp en liste). Opptrykk og samtykke blir brukt automatisk.

2
Komponer

Skriv meldingen med personaliseringssymboler; forhåndsvisning mot en ekte kontakt.

3
Planlegg og send

Send nå eller til beste tid. En sporingspikselpost åpnes; klikk og svar er tildelt.

Outreach er samtykke- og undertrykkelsesportert, inkluderer et ett klikk abonnement på hver sending. Følg CAN-SPAM / CASL. Svar stopper automatisk ytterligere oppfølginger.
Analyse

Planlagte rapporter

Planlagte rapporter e-post et valgt metrisk sett til valgte mottakere på en tidsplan (daglig, ukentleg eller månedlig) som utskrivbar hvitmerking PDF. Sett det én gang og rapporten lander i innboksene automatisk gjennom OpsIQ krone.

Planlagte rapporter
Planlagte rapporterSkjermen som skal rapporteres: en tabell med rapporteringer, der de har planlagt seg og siste gang.Planlagte rapporterarbeidsflatePlanlagte rapporter+ Lagre rapportRapportTidsplanREVELCASSIST SENDTUketrafikkMon9:00[email protected]2d sidenSEO klientrapportMånedlig[email protected]Jun1SalgssammendragDaglig[email protected]todayLeveres som en hvit etikett PDF via OpsIQ cron1AUTOMATEDDaglig · ukentlig · månedlig2WHITE-LABELPDF til kunder3REVELCASSendt på skjema
Angi en rapport én gang (metrisk sett, område, tidsplan og mottakere) OpsIQ e-post en hvit etikett PDF Automatisk på kadensen din.

Oppgi en rapport

1
Velg hva du skal sende

Velg metrisk sett (trafikk, SEO, salg og støtte...) samt et datoområde.

2
Sett skjemabehandlere

Daglig, ukentleg eller månedlig til en gang du velger å velge én e-postmottaker.

3
Lagre

Spar og aktiver. Rapporten genererer, e-poster selv på timeplan, ingen manuelle skritt.

💡
Planlagte rapporter kjører gjennom OpsIQ cron, hvis en rapport ikke ankommer, bekrefter kronen kjører (se Cron og automatisering).
Personvern

Personvern og overholdelse

Personvern- og samsvarssiden er det eneste stedet å vise en revisor du håndterer personopplysninger ansvarlig: samtykket leder, admin tilgang loggen, dataoppholdsregler for oppbevaring av opplysninger samt et klar til trykk DPA i én fanevisning. Bare fulle administratorer kan åpne den.

Personvern og overholdelse
Personvern og overholdelseSkjermen Personvern og overholdelse av personvern: faner for samtykke, tilgangslogg, residency og DPA med en godkjennelsesblad over bidrag og tilbaketrekkinger via kanal.Personvern og overholdelsearbeidsflateSamtykkeslederTilgangsloggBostedDPAKontactKANALActionDATAL[email protected]e-postForutsetningJun12[email protected]pushTilbakekaltJun10[email protected]marketingForutsetningJun9Søkeverdig bevis på hvert samtykke og tilbaketrekking, via kanal1Konsentrert LEDGERBevis på hvert bidrag2ACCESS LOGHvem rørte ved data3DPAUtskrivbar mal
En revisor-klar skjerm: en søkbar samtykkeleder (granter/gjenkaller via kanal), en tilgangslogg av hvem som rørte ved data, opphold / gjensidighet innstillingene og et utskriftsbart DPA.

De fire fanene

Samtykkesleder

En søkebar post av alle samtykkebidrag og tilbaketrekking, ved kontakt, kanal (e-post, push, SMS, inwidget), handling, kilde og dato. Din bevis en avtale om kontakt (eller trekt ut).

Tilgangslogg

Hvem som på teamet ditt så, redigerte og eksporterte eller sendte en kontaktdata med administratoren. Kontakte, handling, angitt grunn og IP

Residens & retensjon

Deklarer hvor arbeidsområdets datalevetid, angir hvor mange dager aktivitetsradene holdes (0 = for alltid) og registrere din dataansvarlige.

DPA mal

Et trykkbart databehandlingstillegg som fyller ut kontrolleren din, adressen til DPO-enheten og oppholdet. Skriv eller lagrer PDF

Personvern og overholdelse par med Cookie-godkjenningsstudioet (som samler inn samtykke) samt Eksportsiden ( som produserer datakopien for en DSAR). Se også Cron and automation for nattbevaring rengjøring.
Koblinger

Koble plattformene dine

Koblingslenke OpsIQ til eksterne plattformer: e-handel butikker, faktureringssystemer, betalingsbehandlere, epostleverandører og tilpassede APIs Når det er koblet til, kan AI slå opp bestillinger, kundedata, abonnementer og mer.

Hvordan det fungerer
Kobling hubbOpsIQ kjernen som er tilknyttet WHMCS, Shopify, Stripe WooCommerce, SendGrid og Google Business Profile som alle viser en tilkoblet status.WHMCSShopifyStripeWooCommerceSendGridGoogle BPOpsIQKERNConstellation name (optional)1PLUG IN25+ forhåndsbyggede kontakter2AI CONTEXTReal plattform data3ACTIONSFerdig med din godkjenning
Koblinger

Skip medOpsIQ

Disse er tilstede i det øyeblikket du installerer og trenger bare deres legitimasjon.

WHMCS

Fakturering

Netthotell fakturering: klienter, tjenester, billetter, fakturaer, domenenavn og server.

Shopify

E-handel

E-handel: bestillinger, kunder, produkter, beholdninger, betalinger.

WooCommerce

E-handel

WordPress e-handel: bestillinger, kunder, produkter, kuponger og frakt.

WordPress

CMS

innhold og brukere på enWordPressNettsted.

Square

Betalinger

Betalinger og salgssted: bestillinger, kunder.

osCommerce

E-handel

Legacy e-handel: bestillinger, kunder og produkter.

BotbleHotell

Bridge

Et hotell i Botble CMS gjennom det signerteOpsIQbro. Referansen implementering for en plattform utenAPI.

Zendesk

Støtte

Hjelpdesk: billetter, brukere og organisasjoner.

Google bedriftsprofil

Markedsføring

Lokal virksomhet: anmeldelser, innlegg og innsikt. Bruker OAuth

Google kalender

Produktivitet

Kalendere og hendelser. BrukerOAuth.

GmailogIMAP

E-post

Postbokser: inngående og utgående e-post, adresseboksynkronisering.

SendGrid

E-post

Send e-post: send emails og administrere maler.

Mailgun

E-post

Send e-post via Mailgun.

Slack, Telegram

Budskap

Meldingskanaler for inngående og utgående samtaler.

Metakanaler

Budskap

Facebook Messenger, Instagram DM og WhatsApp.

Nettsted etterretning (GA4, Søkekonsoll)

Analyse

Analytiske og søkedata for SEO -suiten.

Nettstedsberikelse og CRM import

CRM

Berikelse og bulk kundeimport.

Tilgjengelig fra markedet

Disse er publiserte pakker, ikke en del av installasjonen. Installere én fra Connectors og det blir kopiert i live connects-mappen som den oppfører seg nøyaktig slik de ovenfor.

Stripe

Markedsplass

Betalinger: gebyr, kunder, fakturaer, abonnementsinnbetalinger og tvist.

BigCommerce

Markedsplass

E-handel: bestillinger, kunder, produkter, kategorier og merker.

Magento2

Markedsplass

E-handel: bestillinger, kunder, produkter, kategorier.

PrestaShop

Markedsplass

E-handel: bestillinger, kunder, produkter og varebilregler.

OpenCart

Markedsplass

E-handel: bestillinger, kunder, produkter og kategorier.

Amazon SES, Postmerker

Markedsplass

Transaksjonell e-postlevering.

Jira, Lineær

Markedsplass

Problem og prosjektsporing.

Zoom, Microsoft kalender og Outlook e-post

Markedsplass

Møter, kalendere og e-post.

DocuSign, Apollo, SerpApiGoogle Analytics

Markedsplass

Signatur, prospektering og analysedata.

WebflowWix, Squarespace

Markedsplass

Nettstedsplattformer.

💡
Kontaktlisten beveger seg som pakkene er publisert. Autoritative listen for DIN installasjon er Connectors siden: det som står oppført, er hva kjøretiden oppdaget og fanen Marketplace viser hva du kan legge til.

Installere en kobling

1
Gå til kontakter

Naviger til kontakter i admin-panelet.

2
Finn kontakt

Bla gjennom listen eller søket. Kontakter grupperes etter kategori.

3
Aktiver det

Klikk på kontakten og slå av.

4
Skriv inn akkreditiv

Fyll ut de nødvendige feltene: API nøkkel, URL, polletter etc. Hver kontakt har bestemte krav dokumentert i innstillingspanelet.

5
Testtilkobling

Klikk på « Test tilkobling ». Et grønt resultat betyr at koblingen kan nå den eksterne plattformen, mens et rødt resultat viser feilen.

6
Konfigurer funksjonene

Velg hvilke funksjoner som skal aktiveres: kunnskap synkronisere, webhook synkronisering og AI-handling. Ikke alle kontakter støtter alle funksjonene.

Hvilke kontakter gir deg

AI-kontekst

AI kan slå opp kundedata, bestillinger og abonnementer med mer gjennom kontakten. Når en kunde chatter har AI reelle plattformsdata som refererer til det.

AI-kontekst (connector forfattere)

Kontaktens kontekstProvider gir billetten-AI en lesebeskyttet kontosummering av leieren. customer_id når det er kjent; ellers på billett auto-replies, der cTX flagg customer_trust_email er sant, se kontoen opp av customer_email (den verifiserte billettavsenderen). Fjernplattformer avslører en /context/customer-by-email sluttpunkt og kontakt kaller det. Dette er hva som gjør AI-en til en reell balanse/faktura i stedet for å si \"Vær så snill\" administratorens dataklasse bryter (customer_sections, customer_allow_credit), og forbli strengt skrivebare, aldri avgir hemmeligheter.

Kundemappen (connector forfatterne)

Kontaktens identitetsleverandør gir tre universelle billettoppslag: lookupCustomerById() (kundekort) lookupCustomerServices() (produkt/servicetabell) og listCustomers($query,$limit): the "Search customer or type email" picker on the native Compose-New-Ticket form. Return rows of {id, external_id, name, email, company, phone, platform, platform_label}. Fjernstyre: Hvis dine kunder bor i en annen database eller tjeneste, kan du hente dem over plattformens API inne i disse metodene, aldri lese det andre systemets tabeller direkte (i OpsIQ DB de er tomme plassholdere, og derfor returnerer en lokal lese en tom picker. Port fjernstien på konfigurert API URL Hold en lokal lese bare som samme-DB tilbakefall.

E-postbilletter, deteksjon og rute (connector forfattere)

Når inngående e-post blir til en innenlandsk billett, OpsIQ Oppdager avsenderen ved å ringe lookupCustomerById(0, ['email'=>$sender]) over hver kobling; den første kampen "eier" kunden og dens platform Slit er stemplet på ticket.created hendelse som _pipe_owner_platform (tom = gjest). Så a WHMCS Kunde e-post åpner billett i WHMCS (WHMCS nummerering, speilet som én), mens en ukjent avsender forblir hjemme. Hvis kontaktspeilene dine speglar innfødte billetter på egen plattform, din ticket.created Forvalteren må ha port på dette: if (array_key_exists('_pipe_owner_platform',$payload) && $payload['_pipe_owner_platform'] !== '<your-slug>') return;Nøkkelen er fraværende på ikke-pipe (chat/manual / AI) billetter, så de speil som tidligere. Per-department kontroll liv under Team & Departements → Åpne billett via epost (Enhver / Kunder bare / Av).

Handlinger

AI kan utføre handlinger gjennom kontakten: opprette billetter, oppdater bestillinger, avbryt abonnementer og alle med godkjenningen via Trust Layer.

Kunnskap

Kontakter bidrar med plattformspesifikke kunnskapsartikler til AI. Shopify kobling legger til e-handelsfeilsøking; WHMCS Koble til hosting kunnskap.

Import av kunnskapsbase (connector-forfattere)

Hvis plattformen din er vert for en kunnskapsbase, erklærer du et kb_capabilities blokk i settings.json (type) kb_source) og kontakten vises i Hjelp Center-redigeringens Importer KB → Import fra en tilkoblet app nedtrekk når det er aktivert og konfigurert på arbeidsområdet. Det er deklarativ, ingen metode å implementere: navn en innebygd adapter (zendesk for nøyaktig trehjelpesenter API, eller crawl for alle KB-nettsteder) og base_template som https://{subdomain}.zendesk.com, som OpsIQ fyller fra kontaktens lagrede innstillinger. Påbud aldri forlate serveren; nettleseren sender bare kontaktsvaken. For å støtte en ny plattform kan du legge til et opsiq_kb_<platform>_manifest() adapter og referanse den ved navn. Full referanse: connectors/PLATFORM_CONNECTORS.md §5.

Webhooks

Noen kontakter registrerer webhooks med den eksterne plattformen for hendelsesvarsler i sanntid (nye bestillinger, billettoppdateringer osv.).

Salgssporing

E-handelskontakter feeder inntektsdata inn i salgsdatorn for tildeling og analyse.

💡
Koblinger er arbeidsområdeskoplete. Hvert arbeidsområde kan ha forskjellige kontakter aktivert med ulike legitimasjon WHMCS Arbeidsplassen bruker WHMCS kobling; a Shopify Arbeidsplassen bruker Shopify Koble til.
Kan jeg bruke flere kontakter på en gang?+

Ja, du kan haShopifyfor bestillinger ogStripefor betalinger i samme arbeidsområde. AI fletter data fra alle aktiverte kontakter.

Hva om min plattform ikke er oppført?+

Bruk Connector Builder til å opprette en egendefinert kobling for hvilken som helst plattform med et REST API. Eller sjekk markedsplassen for fellesbygde kontakter

Gjør kontakt med selvvært OpsIQ?+

Ja. Koblinger fungerer identisk i både sky- og selvværte utgaver

Koblinger

Salg og faktureringskontaktkontrakt

Hver handelskontakt bruker den samme plattformneutrale hendelseskontrakten. WHMCS er referanse implementasjonen, men SaaS Bridge-butikker og betalingsleverandører må overholde de samme reglene.

Hva alle handelskontakter må publisere

En autoritativ leder

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.

Stabil kilde identitet

plattformen er konnektorregisteret snegle, som whmcs, shopify eller opsiq_ssaas. traffic_source inneholder verifisert oppkjøp tilskrivelse når de leveres; Ellers bruke den samme snegle som tilbakefallet. Oppbevar identifikatorer, ikke vise etikettene. OpsIQ Løser det vennlige kontaktnavnet i UI.

Idempatiens

event_id må være deterministisk. Kart minst én immutable bestilling _ref, factor_rev eller abonnement_ref så webhook retries og backfills oppdatere samme hendelsen i stedet for å opprette dupliserte salg. service_ef identifiserer det berørte produktets eller tjenesteinstansen når en eksisterer.

Kildetidsmåler

arrangert_at er betaling eller økonomisk-event tid som rapporteres av kildeplattformen. Aldri erstatte historiske betalingsdatoer med importtiden.

Penger og FX

Send kildebeløpet og en gyldig ISO-valuta med tre bokstaver. Hvis koblingsinnstillingen aktiveres OpsIQ FX-konvertering, rapportering konverteres til arbeidsområderapporteringsvalutaen; på annen måte rapporterer å bevare butikken eller fakturering plattform valuta. Kontaktkode må ikke hardcode en rapportvalue eller vekslingskurse.

Bevisbasert livssyklus

Bruk ny, fornyelse, oppgradering, refusjon, kreditt eller ukjent. Klassifiser fra fakturagrunnen, abonnements- og tjenesteforholdet, linjeelementtypen eller et annet autoritativt kildefelt. Et gjentatt kjøp av samme kunde er ikke automatisk en fornyelse.

Salgsgrense

Kun positive betalte nye, fornyelses- eller oppgraderinger av kvitteringene for handel tilhører salg og konvertering. Refundering er rapportert ved refusjon og nettogjenvein analyse. Kontokreditt, lommebok toppopphold, toket topups og Add Funds blir faktureringsleder hendelser som aldri teller som salgs-, omsetninger, ordrevolum eller salgsinntekter.

CRM forblir separat

CRM-avtaler representerer rørlednings- og avtaleaktivitet. De er ikke handel plattform salg med mindre en tilkoblet faktureringsplattform avgir den realiserte betalte ordren eller fakturaen gjennom denne kontrakten.

Hvert betalingssignal åpner raden

Ikke avhengig av ett arrangement navn. Når plattformen sender flere bekreftelser om én betaling (faktura betalt, bestilling utbetalt, transaksjon lagt til, betalinger fullført) kan noen av dem åpne ledningen rad når plattformen bekræfter salget er betalt; salgs fingeravtrykk kollapser søsken i en rekke.

Planlagt forsoning (Kontrakt 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.

Avledede projeksjoner

opsiq_konverteringer og dashboard-sammendrag er kompatibilitetsutstikk som gjenoppbygges fra ledgeren. Kontaktene må ikke behandle en utbygging som den finansielle kilden til sannhet. Kontraktrevisjon kan revurdere avledede rader uten å slette grunnregningshistoriken.

Fjernplattformgrense

En fjernkontakt leser plattformen gjennom den konfigurerte autentiserte API. Den må aldri avhenge av samme server databasetabeller. Det nøyaktig godkjente domenet site_ key leveres med ConnectorRegistr og skal brukes på alle magasinskriv-og backfill. Arbeidsplass eller gruppeområde er lesetid sammenlegging bare; det kan ikke utvide lagret eielse i hendelser.

Canonical betalt-event eksempel

Normalisert handelsarrangement
{
  "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"
}

Koble til byggemaskiner

Når salg og fakturering er aktivert i Connector Builder, kartbeløpet, valutaen, kildestatus-og kildedato samt minst én ordre eller abonnementsreferanse. API avslører autoritative livssyklusbevis. Den genererte SalesIngest passerer hver rad gjennom den samme CommerceEventRegistry normalizere som brukes av innebygde og markedskontaktene.

⚠️
Kreditter og add Funds er bevisst beholdt for faktureringshistorikk, kundebalanse sammenhengen og ledende analyse. Utvikle dem fra Sales sletter ikke; det hindret bare de i å oppblåse handelsytelse.

lifesyklus_type bestemmer hva som blir en CRM-avtale

lifecycle_type er ikke en analyse etikett. OpsIQ leser det å bestemme om et salg går inn i CRM-rørledningen, så hver salgskontakt tar ei rørledningsbeslutning om den har til hensikt eller ej.

Ny

Åpner en lukket-won avtale (ny virksomhet).

fornyelse, oppgradering

Opptegnet som løpende inntekter. Ingen ny-business avtale - fornyelser konvertere på en annen sannsynlighetskurve og bland dem ødelegger begge prognoserne.

refusjon, kreditt

Aldri åpner en avtale, i alle moduser. Pengene som returneres til kunden er ikke en seier.

utelatt / ukjent

Bare inntekter. Salget er registrert, men aldri når rørledningen !

En salgs-, en ledgers rad: identitet er salget og ikke arrangementen.

Ikke match på event_id Sett inn deg selv. event_id is platform:eventName:externalId, som svarer “har vi allerede behandlet denne leveringen” og kan ikke svare på \"har vi tidligere registrert dette salget\". En plattform som annonserer en betaling to ganger - som invoice.paid og igjen som payment.completed - minter to ids og lander de samme pengene to ganger, med ingenting å kollidere eller ikke noe å advare.

💡
Funnet på referanseinstallasjonen: seks fakturaer med tre ledger rader hver, fra tre kodestier ved hjelp av tre forskjellige event_id-ordninger. De alle båret0.00Så ingen totale sett feil, og en senere prosess gjenoppretting reelle beløp ville ha teller én betaling tre ganger.

Ring den delte skrive i stedet. Core beregner salgets forretningsidentitet (sale_fingerprint), matcher en eksisterende rad på den, bevarer originalen event_id om oppdatering, og filtrer til ekte kolonner:

Den eneste måten å skrive salgslederen på
\OpsIQ\Commerce\CommerceEventContract::upsertSaleRow('opsiq_sales_events', $row);
Same salg, mange arrangementer

faktura. betalt, payment. completed and sale. fullført for én fakturering deler en fingeravtrykk og oppdaterer ett rad.

Refunderinger forblir separate

Penger som går ut er et annet faktum enn penger kommer inn. En refusjon av en faktura holder sin egen identitet, så det kan aldri overskrive betalingen den reverserer.

Ingen referanse, ingen fingeravtrykk

En rad som ikke har noen ordre, faktura eller tjenestereferanse får ingen fingeravtrykk i det hele tatt. To uberørte rader kolliderer aldri bare fordi begge mangler et ID-nummer.

Referansepresentasjon

invoice_ref, så order_ref, så subscription_ref, så service_ref — Den sterkeste først, så et salg holder en stabil identitet.

Lederen er bare vedlegg: aldri omskrive et salg

En refusjon, en kansellering eller rettelse er Ny datopost. Aldri muta raden det korrigerer. Skrive en betaling i refusjon ser ren og bryter tre ting på én gang:

Den ødelegger bruttoinntekter

Bruttosalgs- og tilbakebetalingskursen stopper å være separat — og refusjonsgraden er den estiske reverseringen eksisterer for å informere.

Den bøker reversen i feil periode

En mars refusjon av et januar salg må redusere March. Skrive Januar raden stille om en lukket periode.

Det bryter revisjonsstien

En ledende oppføring registrerer hva som skjedde på et tidspunkt i tiden. Rettelser er kontra-entres, noe som er hvordan dobbel entry bokføring har jobbet i fem århundrene.

Så en kobling rapporterer reversen i stedet for å påføre den: retur refunded_at og refund_amount sammen med salgets egen livssyklus, og la samtaleren skrive refusjonen som sin egen rekke datert når tilbakebetalingen skjedde. De to kan aldri kollidere fordi selge fingeravtrykk skiller en retur fra et salgssalg.

💡
Det samme prinsippet gjelder beløp. Ikke reparer - et lagret beløp til plattformens nåværende verdi: en faktura som er avgjort fra kontokreditten legitimt registrert 0 på betalingstid, og pengene var allerede tatt opp når kunden toppa seg. Gjenoppretting ansiktsverdien teller det to ganger.

Klassifiseringskontrakten

OpsIQ bestemmer livssyklusen en gang, in \OpsIQ\Commerce\SaleLifecycleClassifierEn kontakt kun erklærer hvilken av egen plattforms Ord betyr hva, ved å implementere \OpsIQ\Connectors\SalesLifecycleConnectorInterface::salesLifecycleVocabulary(), og så kaller den delte klassifier. Ikke gjenopprette resonnementet på nytt

Deklarer ordforråd, delegere avgjørelsen
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,
]);
💡
Forutsetningen er fast og delt: eksplisitt, deretter refundert / kancellert/sellert, så kreditt, da oppgradering, derefter is_ordre, deretter gjentar seg, etterpå oppkjøpet. Oppgradere sitter over ordrekontrollen fordi plattformer hev en bestilling for oppgradering også; gjentatt ligger under det fordi den første faktura av et nytt abonnement bærer en tilbakevendende linjetype. På ett tvetydig ikke-bestill salg klassifier len til inntektene og unna rørledningen.

Deklarer plattformens hele ordforråd

Dette er feilen som koster mest og ser minst galt ut.WHMCS kontakt matchet ['hosting','addon','domain'] — En liste som leser så fullstendig. WHMCS ikke avgir en naken Domain type for ekte domenelinjer; det avgir DomainRegister, DomainRenew, DomainTransfer, PromoHosting, PromoDomain, DomainAddon* og UpgradeAlle falt forbi listen til unknown: 1,288 fakturaer, tre år, ingen feil og ingen logglinje.

Alle nye kunder importerer sin historie gjennom en tilbakefylling av kontakten, så en klassifiseringsfeil påvirker ikke ett arbeidsområde - det påvirker alle arbeidsflater som noensinne om bord gjennom den kontakten i øyeblikket de først ser på rørledningen. Ta ordforråd fra plattformens dokumentasjon eller et folketal av levende data og matche voksende familier ved å prefiks Så en søsken som ingen har sett ennå klassifiserer med sine slektninger i stedet for å forsvinne.

💡
En praktisk sjekk: telle hvor mange av dine egne rader lander på ukjent. Et sunt salgskontakt klassifiseres nesten alt. En jevn strøm av ukjent er nesten aldri data du ikke har - det er et ordforråd som koblingen aldri lært å lese.

Reparasjon av importert historie

Hver fraktet OpsIQ salgskontakt implementerer dette — 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() ved å bruke det per-record hente kontakten allerede har. tools/crm_backfill_sales_lifecycle.php deretter reparerer kontaktens importerte historie uten per-connector kode: tørt kjøre som standard, backer seg opp og verifiserer raden teller før skriving, reversibel gjennom en angre ledningene, og det skriver aldri et feilaktig lese som svar.

💡
If your connector cannot re-read past records — a webhook-only connector cannot — do not stub the method. A stub returning unknown is worse than no implementation: a backfill would rewrite good rows as unclassified and report success. Implement the vocabulary interface only.
💡
Detaljerte pakkereferanser er tilgjengelige i konnektorer/CONNEECTOR_EVENTS. md og kontakter / PLATFORM _CONNEKTORERs. med i selv-hostede kildedistribusjoner.
Koblinger

Reisearrangement kontrakt

Journey Intelligence aksepterer en plattformnøytral hendelseskonvolutt fra nettleseren widget, innebygde kontakter, SaaS Bridge, markedspakker og kontrip control Buildere utgang. Plattformspesifikke navn er oversatt ved kanten; trakter, tilskrivning og Site Intellect kode bruker bare kanoniske begivenheter.

Isolasjon og tillitsgrense

Eksakt peer-domenenøkkel

Hver hendelse er bundet til den autentiserte domenesidens_ taste. En kontakt må ta denne nøkkelen fra ConnectorRegistry eller det godkjente endepunktet, aldri fra en upålitelig forespurt kropp. Domeneer beholder separat poster; ei domaingruppe består bare av et lesetid aggregat.

Ubehagelig identitet

event_id er nødvendig for kontakter og må være deterministisk i samme innfødte hendelse. Rettelser, webhooks og backfills oppdaterer én begivenhet fremfor å duplisere en reise eller salg.

Indisk pluss kanonisk navn

Bevar kilde_event-navn for bevis og feilsøking, så kartlegg den til event_name_canonical. Core analytics må aldri gren på en kontaktsvak.

Serverbevis vinner

Nettleserobservasjon kan starte eller referere til en reise. Autentiske kontakthendelser bekrefter registrering, innlogging, betaling, kjøp, fornyelse og andre terminalresultater. Et gyldig sidebundet korrelationssymbol er den sterkeste sammenslutning; et ugyldig polikum blir avvist og det innebygde ID-ene ikke stole på.

Personvern

Send kun identifikatorer og felt som er nødvendige for den deklarerte reisen. Respekt samtykke, maskering-og bevaringsinnstillingene. Legg aldri legitimasjoner, kortdata, autentiseringshemmeligheter eller private meldingsorgan i eiendommer.

Canonical konvolutt

Reise event konvolutt
{
  "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"}
}

Canonical taksonomi

Bruk det smaleste sanne navnet. Understøttede familier inkluderer engasjementside/CTA hendelser; kontoregistrering, innloggings- og passordoversettelse; bly-og skjemafaser; produkt, handlekurv, utbetaling, betaling, kjøp, abonnement, fornyelse og tilbakebetale; kampanjeinntrykk og konverteringar; hjelpesentre, chatt- og billettehendinger; sikkerhetshendelser samt navngitt tilpassede arrangementer. Typiske terminalnavn er account.signup.succeeded, account.login.succeeded, lead.form.succeeded, commerce.payment.succeeded, commerce.purchase.completed, commerce.subscription.renewed og commerce.refund.completed.

Nettleserinferanse, bekreftelse og avbestilling

Skjermprogrammet kan fungere uten en kontakt ved å observere sidestruktur, skjemahandlinger og besøksreiseloggen. Det beviset forblir eksplisitt rangert som observert eller belagt. En kobling legger til autoritativ serverbekreftelse og kan korrelere det med samme nettlesereforsøk. Overgivelse lagres først som kandidat; den blir forlatt bare etter inaktivitetsvinkel sett i brukergrensesnittet og kun når ingen senere gjenoppretting eller suksess eksisterer.

Tilknytning og inntekter

Tilknytning foretrekker et gyldig signert korrelasjonssymbol, deretter en nøyaktig reise, forsøk på å sesjon eller handelsreferansen og til slutt den samtykkede identitetsgrafen. En avgrenset atferdsmatch er uovertruffet salg som ikke er distribuert. Multi-Touch shipping vekt må totalt 1_. Site Intelligence tildelt inntekt leser denne leder; kreditter, lommebok toppups, tokens top ups and Add Funds kjøper aldri konverteringar. Kontakt FX oppførsel blir fortsatt kontrollert ved hjelp av kontaktinnstillingene.

⚠️
Tildelingsmodell, utkikksvinduer, direktetrafikkhåndtering, minimal tillit, bortvisning tidsavbrudd og traktdefinisjoner er UI-policy. Kontaktkode må ikke kode dem hardt.

Kontakt manifest og byggmester

Kontakt reiseerklæring
{
  "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"
    }
  }]
}

Deklarere kun funksjonene pakken virkelig leverer. Connector Builderen validerte kartleggingen og genererer den samme plattform-neutral adapter som brukes av førsteparts pakker. Reiseinntaket akseptert én hendelse eller en begrenset sats 100 gjennom det genererte, autentiserte integrasjonsendepunktet.

💡
Handelslederen forblir den økonomiske kilden til sannhet. Den handel-til-Jurney bro publiserer serverbekreftede utfall og konsistenter tildeling etter eksisterende idempotensielle ledger upsert, så en betaling aldri blir to salg.
Koblinger

Hvordan AI-handlinger fungerer

Hver kobling deklarerer et sett med handlinger: ting kunstig intelligens kan gjøre gjennom den eksterne plattformen. Handlinger er broen mellom "AI sier" og "AI gjør."

AI-handlinger
Hvordan AI-handlinger fungererEn kundeforespørsel som er kartlagt til et handlingskort av slette type, og deretter en sjekkliste: tillatelse kontrollert. API Ringer.Hvordan AI-handlinger fungererarbeidsflate"Avbryt abonnementet mitt"KundeAIcancel_subscriptiondeleteBekreft nødvendigparams: abonnement_id (fra kontekst)Action TYPESreadskrivedeleteTillatelseskontrollDu bekrefter handlingenAPI kalt · resultat rapportert1DECLAREDHver kontaktliste lister handlinger2GATEDTilgang + Bekreft3THEN RUNAPI Ring, resultat tilbake
En forespørsel blir en deklarert handling (skrivet lese/skriving / slette) som er autorisert, bekreftet og deretter utført.

Handlingslivet

1
Kunden ber om noe

"Avbryt abonnementet mitt." AI identifiserer dette krever handlingen "cancel_subscription".

2
AI-kontrollbekreftelser

Er denne handlingen tillatt? Har den er aktivert? Har gjeldende bruker riktig rolle?

3
AI samler parametre

Handlingen trenger en abonnements-ID. AI ser det opp fra kundekontekst eller spør kunden.

4
Bekreftelse

For destruktive eller høy-impact handlinger, ber AI om bekreftelse før utføre.

5
Utførelse

Handlingen kaller ekstern plattform API.

6
Resultat

AI rapporterer resultatet til kunden.

Handlingstyper

Les handlinger

Slå opp data uten å endre noe. Eksempler: list_ordre, get_customer. Sikkert og ingen bekreftelse nødvendig.

Skriv handlinger

Opprett eller endre data. Eksempler på skap_ pikett, update_ordre. Kan kreve bekreftelse.

Slett handlinger

Fjern data. Eksempler: kanseller_subscription. Alltid krever bekreftelse

HTTP-handlinger

Deklarert i handling.json, generisk API Kalle definert deklarativt.

Funksjonsmerker

Optional per-action "capability" field in actions.json, a connector-neutral class tag (e.g. "tickets" for a ticket read/lookup, "ticket_create" for opening a ticket). OpsIQ gates the whole class uniformly across every connector: ticket reads drop out of the AI when the operator turns off AI Ticket Awareness, and ticket creation is reserved for OpsIQ's own composer (so a connector's create tool can't duplicate it). Declare it and your connector conforms. OpsIQ never needs to know your action names. The Connector Builder exposes it as a Capability dropdown per action.

Kodehandlinger

Utstyrt i PHP i kontaktklassen. Full kontroll over logikk

Eksempelhandlingsdefinisjon
{
  "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" }
    }
  }
}
Koblinger

Bygg en kobling

Connector Builder lar deg opprette en komplett kobling for enhver plattform med REST API Ingen kode som kreves for grunnleggende kontakter.

Bygg en kobling
Connector BuilderEn no-code koblingsform: navn, auth type URL En handlingskartlegging, en passerende test og et publiseringsknappen.Connector BuilderarbeidsflateConnector BuilderNavnMin plattformAutentiserOAuth 2.0(PKCE)BaseURLhttps://api.example.com/v2HandlingGET/customers → liste_kunderTest passertPakkekontakt1NO-CODENavn, aut URL2ANY APINøkkel, Bearer HMAC, OAuth3PUBLISHInto /connectors/<slug>/
Peker byggmesteren på alle REST API. Sett auth, base URL og handlinger, test det og publisere en fungerende kontakt. Ingen kode nødvendig.

Fullstendig leverandør API dekning

Hver generert API kobling kan eksponere separate Native API Les og innfødte API Skrivehandlinger. Kuraterte handlinger forblir foretrukne; morsmålshandlingar dekker leverandørendpointene lagt til senere. Runtime støtter REST, GraphQL JSON, form XML, rå- og flerdelte legemer som er avgrenset paginasjon API-versjonshoder og idempatens mens du holder legitimasjoner inne på arbeidsområdekontaktinnstillingene.

⚠️
Markedsplasspakker kommer fra /marketplace_connectors samt pakket /connectors. Øk pakkens versjon, regenerere kontrakten og dokumentasjonen, kjøre konformansetester, deretter signerer du på nytt og publiserer den nye markedsplassversjonen.

Kontakt Byggeguide

Veiviseren har seks trinn, vist som faner over toppen. Du kan hoppe mellom dem fritt og Lagre utkast I bunnen holder arbeidet ditt når som helst.

1
Identifikasjon og profil

Navn, slump, beskrivelse og ikon. Velg deretter en kontraktprofil: Standard API;, Handelsplasser, Helpesk, Postkasser, Site Intelligence, SaaS Bridge eller Plattform utenAPI Når plattformen ikke tjener noe som kan ringes og OpsIQ har å installere en bro. Profilen velger et komplett utgangspunkt for evne; du kan fortsatt justere individuelle evner.

2
Autentiser

Velg autentiseringsmønster plattformen bruker og fyller ut sine felt. Skriv inn ekte testinformasjon her: de brukes til forbindelsestester på neste trinn, og ikke lagret etter at du publiserer.

3
Test

Skriv inn API base URL og et verifisert endepunkt, så kjøre en live-tilkoblingstest ved hjelp av legitimasjonene fra trinn 2Gjør dette før du definerer noen handlinger, hvis auth eller basen URL er galt, hver handling du skriver etterpå ville mislykkes av samme grunn og det vil være feil.

4
Handlinger

Definer hver operasjon: navn, HTTP-metode, endepunktstien, parameterne og innstillingene for responsfelt som er beskrevet nedenfor. Du kan kjøre alle handlinger individuelt mot live API fra dette trinnet.

5
Utløsere

Kartlegg webhook-arrangementene plattformen sender på OpsIQ hendelser, så ting som skjer på plattformen din kan begynne å fungere i OpsIQ.

6
Gjennomgang, kontrakt med bedrifter og publisering

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>/.

⚠️
Publishing does NOT run the conformance suite. Publish only validates the wizard form and emits warnings that do not block. The full suite — manifest, capability files, the identity-token contract and the bridge-snippet check — runs when you press Dry-run, and again at install time. Press Dry-run before you ship, every time.

Hvilken publisering viser at skjemaet ikke gir deg

Fem atferder av generatoren overraske folk. Ingen er en feil; alle vil koste deg ein ettermiddag hvis du møter dem ved et uhell.

Et spørsmål bestemmer gjennomgangen: tjener plattformen enAPI?

Answer it in step 1 by picking the data-access mode (or the "Platform with no API" profile). API mode declares native_api and emits the <slug>_api_call passthrough. Bridge mode declares platform_bridge I stedet og STRIPS native_api Selv om en eldre spesifikasjon hadde den, så manifestet kan det genererte klassen og kompetansen ikke være uenige. ai_brain_aware Det legges til på alle måter.

SILENCE MEANS "it has an API"

The Builder follows your answer; it does not work the truth out for itself, and the default when nothing is said is API mode. So a no-API platform must ACTIVELY say so — pick the "Platform with no API" 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.

Tilkoblingstesten standard å få/ping

Hvis du la den bekreftede banen være tom, skriver byggmesteren /ping inn i den genererte kontakten og til profil.jsonTestblokk. Nesten ingen reell plattform tjener den rute, så testtilkobling mislykkes med HTTP404på hver installasjon og leser som en kunde feilkonfigurasjon i stedet for et pakkedefekt. Angi en bekreftet bane at plattformen faktisk svarer. For brokontakt, peke det ved ditt eget diagnostiske endepunkt - den beviser hele kjeden i ett anrop: brua er utplassert, nøkkelen matcher og bron kan nå databasen.

Ompublisering overskriver fortsatt håndredigeringene dine

Funksjoner følger nå svar på data-tilgang, så de ikke lenger driver. Alt annet generert fortsatt gjør: rediger KontekstProvider. php eller andre utsendte fil og den neste publisering erstatter det. Den ene beskyttet unntaket er brofilen - veiviseren overskrives bare en bru som bærer sin egen markør, slik at et håndskrevet nummer igjen alene blir gjengitt.

Publiserer sletter filer

Fjerne en evne og den neste publiseringen fjerner leverandørfilen. Håndredigeringer til enhver generert fil — ContextProvider.php fremfor alt - er overskrevet uten varsel. Kopier tilpasninger ut først, eller ta eieren av pakken ved å slette .opsiq- Bygger.json (Deretter vil trollmannen ikke lenger styre den).

release_status er alltid forhåndsvisning

Veiviseren har ingen kontroll over det. En pakke som er ment å sende ettersom produksjon må ha endret release_status for hånd i innstillinger.json- og den redigeringen bryter signatur, så signer deretter.

Signaturen viser integritet, ikke opprinnelse

Byggepakker er signert med denne installasjonens egen symmetrisk nøkkel. Det oppdager manipulering. Den beviser ikke hvem som skrev pakken, og alle installerede samme nøkkelen kan produsere den samme signaturen. Behandle en lokalt signeret pakke som selv-signet.

Slug kollisjoner er bare sjekket i ett tre

Utgivelsen nekter en sløv som allerede eksisterer under/connectors/.Den ser ikke på/marketplace_connectors/,slik at en hånd-forfatter førsteparts pakke med samme sleep kan ende opp skyggelagt.

💡
Veiviseren har ikke et kunnskaps-authoring trinn. En kunnskapsfil som beskriver plattformen din genereres for deg fra navnet, beskrivelsen, auttypen og handlingene du definerte i AI når kopling er aktivert.

Defining a action (trinn 4)

Hver handling har følgende innstillinger. Bare de fire første er nødvendig; resten kontroll som kan kjøre det og hvor forsiktig.

Handlingsnøkkel og etikett

Nøkkelen er det AI kaller; etiketten er hva et menneske leser. Nøkler er namespaced med din connector slug automatisk, slik at to koblinger kan begge ha en "list_orders" uten å kollidere.

HTTP-metode

Få, pose, putt eller delikat.

URL bane

Leggt til basen URL. Bruk {name} for eksempel plasseholder /opportunities/{id}/stage

Parametre

For hver parameter velger du også hvor den går: kropp, bane, spørring eller overskrift. En baneparameter fyller a {placeholder}; En spørringsparameter er lagt til i URL.

Svarkartlegging

Si hvilket felt i JSON -responsen betyr hva, som er kundenavnet, som ikke er epost. Dette er det som lar AI lese plattformens data heller enn gjett på den.

Hvem kan bruke den

Teamet ditt (admin AI), loggede kunder (kundechatt) både eller skriveassistent. Kunden handlinger kjører bare for den innloggede kunden, og identitetsfeltene er låst til dem automatisk slik at en kunde ikke kan spørre om noe annet.

Krever bekreftelse

Mennesket må godkjenne før handlingen går.

Destruktiv

Marker handlingen som slette eller endre tilstand. Brukes til å advare før den kjører.

Nødvendig tillatelse

Admin må ha denne tillatelsen til at AI skal kjøre handlingen på deres vegne; fulle administratorer alltid passer. Velg mellom manage_integrasjons, management_general, administrature_billling, construction_sales_bridge, administration_cnowledge _advisor_apprearance, manager_behaviator, remanging_permissions, manage/dangerzone, replief_to_chats, eskalere_too_ticket, send_agent_Email eller ingen som betyr noen autentisert administrative.

Beskrivelse / AI-hint

Valgfritt, men verdt å skrive. Det forteller kunstig intelligens når den skal bruke denne handlingen, for eksempel « Bruk dette når administrator ber om å endre en avtalefase ». Et godt hint er forskjellen mellom en handling som kunstig intelekt bruker riktig og en den ignorerer.

Kapabilitet

Valgfri klassetagge, enten billetter (billetter som leses eller oppslag) eller billett_skape (åpner en billette). OpsIQ Gate hele klassen på en gang, for eksempel skjule billett leser når et operatør slår AI-billett bevissthet av.

Listesti

Valgfritt. For endepunkt som returnerer en liste, den prikkede banen til tabellen for eksempel data eller data. items

Feilsti

Valgfritt. Et karosserifelt hvis tilstedeværelse betyr at samtalen mislyktes, for eksempel feilmelding som er nyttig APIs som returnerer HTTP 200 ved svikt.

Kjør den

Hver handling kan kjøres mot live API fra dette trinnet, slik at du kan fikse feil sti eller feltnavn før noen andre bruker det.

⚠️
Skrivehandlinger er som standard beskyttet. Enhver handling ved hjelp av POST, PUTH eller DELETE starter med å kreve autorisasjon til management_integrasjonen og menneskelig bekreftelse før den kjører. Dette er bevisst. En ny skrivehandling mislykkes i stedet for å la AI endre dataene dine uovervåket. Du kan forandre begge på handlingen, men endre dem med vilje.
💡
For å være ringe fra kundechatt, må en handling bare leses: la både Krever bekreftelse og destruktiv unclicked. En action som kunden kan utløse at også endringer tilstand er ikke noe veiviseren vil tillate deg skip ved et uhell.

Mottak av webhooks (trinn 5)

Triggers trinn gir deg en webhook URL å registrere deg hos plattformen din og verifisere alle forespørsler som kommer på den.

Signaturoverskrift

Hovedet plattformen tegner med, for eksempel X-Hub-Signature -256.

Signaturalgoritme

HMAC-SHA1, HMAC - SHA256 eller HMac-SHAB512.

Signaturordning

Enkel, en vanlig heks eller base64 fordøye. Eller Stripe-stilen, t=... uv1 = ... format som brukes av striper og flere plattformer som kopierte den.

Signaturprefiks

Valgfritt. Noen plattformer prefiks fordøyelsen, fx ha256=. La det være tomt hvis din ikke gjør det.

Event kartlegginger

Kartlegg hver hendelse plattformen sender på OpsIQ -hending den bør heve.

Autoregistrering av webhook

Hvis din plattform har en API for å administrere sine egne webhooks, trenger du ikke registrere URL for hånd. Åpne Autoregistrer denne webhook ved aktivering og peker det på to av handlingene du definerte i trinn 4:

Opprett-webhook handling

Oppringt når en administrator aktiverer forbindelsen. Du gir parameternavnet som bærer URL, eventuelt den som bærer hendelseslisten og banen i responsen som holder det nye webhoooks ID.

Slett-webhook action

Ringt når kontakten er deaktivert, ved hjelp av id-en som fanges opp ovenfor så å slå koplingen stopper også plattformen din med å sende til et blindpunkt.

Funksjoner du kan slå på

Profiler og funksjonalitet er definert av Connector-kontrakten 2.2. Generert og deklarativ evne sendes direkte; bedriftskapasitet genererer en EnterpriseExtension.php stillaser med løpstid livssykkel ledning.

Handlinger

Operasjoner som AI kan kjøre på plattformen din: liste bestillinger, finne en kunde og utstede refusjon.

Utløsere

Motta webhooks fra plattformen din og gjøre dem til OpsIQ events.

AI-billetter

AI Triage og svar Copilot på billetter som holder seg i plattformen din. Velg endepunktet som returnerer én billett med sine svar, kartlegg feltene; OpsIQ les tråd gjennom den.

Postboks og kontakter

Vis en kundes e-post på sin tidslinje, send fra et tilbud og synkroniser din adressebok til OpsIQ CRM.

Kundeimport

Siden via kundelisten din og importer hver som en OpsIQ -kontakt. Dette er hva Importer knappen kjører.

Kontekst

Skyv live data fra plattformen din inn i hver AI-samtale.

Identifikasjon

Finn ut hvilken av kundene dine som er besøkende, og vis deres profil og kjøp på billett.

Salg og fakturering

Feed inntektsbegivenheter og MRR-tall i OpsIQ dashboards.

Inngående billetter

Slå billetter og e-poster plattformen leveres av webhook til OpsIQ support trådene.

Utgående svar

Post OpsIQ -ansatte svarer tilbake til plattformen tråden har sitt opphav på.

Synkroniser brukere

Importer dine ansatte kontoer til OpsIQ admin-brukere.

Sync avdelinger

Importer dine støtteavdelinger til OpsIQ.

Promomålsetting og produktføde

La kampanje Studio mål om fakta du kjenner til en person, og gjøre dine ekte produkter inne i et promoter.

Survey Studio-leverandør

Expose server-verifisert undersøkelse fakta, rømt variabler og avgrenset CRM Outreach mottaker sider gjennom en dedikerte SurveyProvider. php Dette gjenbrukes ikke kampanjens løpstid.

Innfødte IP blokkering

Når OpsIQ blokkerer en IP Ring plattformens egen blokk API Så blokken er også håndhevet der.

Sikkerhetsbegivenheter

Motta blokkert-IP trusselsignaler fra OpsIQ.

Plattform kunnskap for AI

Hver kontakt du bygger skip en kort referanse som beskriver hva plattformen din er, og hvilke handlinger den gjør. OpsIQ admin AI leser det når kontakten er aktivert, så den forstår plattformen din i stedet for bare å se en liste med handlingsnavn. Dette genereres til deg.

API gjennomgang

Koblingen får alltid et generelt samtale så AI kan nå en endepunkt du ikke definerte en skrevet handling for. Bruk skrivne handlinger der du kan; dette er fluktluken.

Canonical Connector kontrakt 2.2 referanse

Kontraktversjon: 2.4 · 57 capabilities · 8 profiles.

Kontaktprofiler

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.

Canonical evner

Handlinger

Universal actions. Capability version: 1.0. Mode: generated. Runtime methods: registerActions. Package files: actions.json.

Utløsere

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.

sammenheng

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.

identitet

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.

Fakturering

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.

handel

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.

dette

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.

Analyser

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.

⚠️
Byggerspesifikasjonene forblir autoritative kilder. Sett plattformspesifikke forretningsregler i genererte forlengelsespunkter; pakke livsyklusen, køer, arbeidere, migranter og konformancetester er fortsatt bygge-styrt.

Pålitelighetsinnstillinger på alle handlinger

Restene

Hvor mange ganger å prøve et mislykket anrop, med en backoff som dobler hvert forsøk. Bare tidsavbrudd 429s 5xX feil er retried; en 4 x X er din forespørsels skyld og gjentar det vil bare brenne rate grensen.

Prisgrense

Et tak på hvert minutt for denne handlingen, så en travel utløser kan ikke hamne plattformen. La den være ved 0 uten grense.

Tidsavbrudd

Hvor lenge venter du på plattformen din før den gir opp?

Bekreftelse

Kreve et menneske å godkjenne før handlingen kjører. Bruk det til noe destruktivt.

Autentiseringstyper

Trinn 2 tilbyr syv mønstre. Velg den som matcher plattformens API dokumentasjon, sender generatoren ut riktig HTTP-klient for det.

API nøkkel i hodet

En statisk nøkkel som sendes til et fast hode, for eksempel X-API-Key. Du angir overskriftens navn og etiketten administratorskjemaet skal vise. Dette sender nøkkelen som kun et hode; hvis din API forventer nøkkelen som en spørringsparameter i stedet, bruk Egendefinerte header eller et fullkode-kontakt.

Bearer-token

Token sent as Authorization: Bearer <token>. Common for modern APIs.

Grunnleggende autentisering

Brukernavn og passord, base64-kodet i autorisasjonshode. Du velger etikettene begge feltene som vises på admin skjemaet.

HMAC-signert

En offentlig nøkkel pluss en hemmelighet, med forespørselsorgan signert. Du gir signaturhodet og nøkkelen header samt tidsstempeloverskriften som plattformen forventer.

OAuth 2.0 (Klientinformasjon)

Server til server, uten brukerinteraksjon og ingen omdirigering. Du gir poliketten URL /og et valgfritt omfang; admin leverer en klient-ID og hemmelighet. Bruk dette når plattformen utsetter legitimasjon for ett program i stedet fyri en person.

OAuth 2.0 (Koble til-knappen)

Autorisasjonskodestrøm med PKCE, for Stripe Shopify, Slack og QuickBooks-stil apper. Du gir autorisasjonen URL, token URL og omfanget. Etter publisering klikker administratoren Koble til på kontakten, autoriserer på plattformen din, samt OpsIQ lagrer oppfriskende polen og mynter tilgang tokens på etterspørsel. Omdirigering URI å registrere seg i din OAuth appen vises på konnektorens innstillingsside.

Tilpassede headers

En fri form JSON Bruk header map for alt som mønstrene ovenfor ikke dekker, for eksempel {"X-API- Key":"{api_key}","X-Tenant":"{tenant_id}"}. Hver plassholder blir et felt på admin-skjemaet.

💡
PKCE gjelder kun for strømmen av forbindelsesknappen. Kunde-kredittstrømmen har ingen omdirigering og ikke brukersteg, så det gjelder ikke den.

Paginasjon stiler

Forskyvning

Bruker offset og grenseparametre. Eksempel: ?offsett=100& Begrens=50.

Side

Bruker sidenummer. Eksempel: ?page=3&per_page=50.

markør

Bruker et markørsymbol fra forrige svar.

Link-header

Bruker Link svarhodet med rel="neste".

Avansert: PHP-kode

connector.php RETURNS en instans. Det erklærer ikke et navngitt klasse somOpsIQjakt etter. Metodenavnene nedenfor er de ConnectorInterface krever; å få én feil, er et fatalt ved belastning og ikke en advarsel.

connect. php - den virkelige kontrakten, minimal og renoverbar
<?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.

Speilbilletter til det opprinnelige billettsystemet

Når plattformen eier en billett, speil den i OpsIQ fra kontakten din ved hjelp av billettinntakshjelpen (opprette for en ny billett, tilleggsvarig til oppfølging). Emit og abonner på universalbillettarrangementene i koblingens subscribers() metode, ticket.created, ticket.replied, ticket.updated, ticket.deleted. Auto-reply, eskalering, SLA og CSAT alle krok de samme hendelsene så du arver dem uten ekstra kode.

Hvis du håndterer ticket.deletedDu håndterer også sammenslåing. En sammenslått billett sletter bærer merged_into og ikke sendes til en kontakt som erklærer ticket_merge;Fusjonen kommer en gang som ticket.merged i stedet, så du kan slå deg sammen på plattformen din snarere enn å lukke den fusjonerte billetten der. Se Billettfletting (Kontrakter 2.4).

Hvem som skrev åpningsmeldingen

En billett er alltid for Kunden, men åpningsmelding kan skrives av personal: en agent som åpner billett på kundens vegne, eller når ut proaktiv. Hver helpdesk støtter dette så det er del av universal ticket.created Kontrakt i stedet for noe som hver kontakt løser privat.

author_type

klient (standard) eller admin. Utelat det og kunden antas å være den samme som kunden.

author_id

Personalet id når writer_type=admin. Aldri kunden ID.

author_name

Visningsnavn for agent eller avdeling. Går tilbake til « Staff ».

author_email

En personellmelding under kundeens e-post er en rapporteringsfeil.

Dette er ikke kosmetisk. Forbrukere leser author_type å bestemme hvem som er den. En personale-skrivet åpning rapportert client etterlater automatisk berettigede til å svare på en melding din egen agent skrev, og gjør plattformens ekko av den opningen ser ut som et nytt kundemeldinger, noe som deretter lander som dupliserer og vipper billetten til Svaret. Kartlegg plattformens signal på det i kontakten din hendelsesnormalisatorAldri i forbrukerne.

Sentralisert blokkering

Når en agent blokkerer avsender, gjelder det på tvers hver kanal umiddelbart (e-post, chatt, portal, widget og hver kontakt tvilling) fordi blokken håndheves sentralt før noen forbindelse ser melding. Koblingen arver den ved å gjøre ingenting. Det er ingen inngående arbeid for å implementere det og ingen måte å få feil på.

Den valgfrie halvdelen er utgående: å fortelle plattformen din at en kunde ble blokkert her. Implementere det bare hvis plattformen kan uttrykke noe tilsvarende.

kapasiteter()

Må inkludere block_registrering og klassen må implementere BlockRegistryInterface. Flagget er et krav; grensesnittet er garantien. Register krever begge deler.

blockSender($b)

Mottar slag (emailądomain noget)ip), verdi, grunn, admin_id, utløper _at, site_key. Returnerer [resultat, detaljer?, remoté_ref?].

unblockSender($b)

Det er ikke noe som aldri blokkeres.

isSenderBlocked($b)

For forsoning, er det rapportert så drift i stedet for å oppdage av en kunde. Returnerer [resultatet blokkert?]

Resultatverdier

OK

Brukes på plattformen. Inkluder fjern_ref når du har en id verdt å ta opp.

noop

I den forespurte staten.

unsupported

Plattformen din har ikke noe tilsvarende konsept.

mislykkedes

Du kunne ha gjort det og den gikk galt. Inkluder detaljer; Det lander i revisjonsstien.

Å avklare er et riktig svar. Mange plattformer har ikke noe "blokkere denne avsenderen" konsept og tilbyr bare KONTO suspensjon, som stopper fakturering, innlogginger og tjenester i stedet for bare support e-post. Mapping "en agent blokkert en spam adresse" til "lukk denne klientens konto" ville la ett feilklikket blokkering avslutte en betalende kundes tjenester. Hvis det er den eneste spaken du har, return unsupported La det være alene.

Dekning dekker også tilfelle der plattformen Kan Gjør det, men vil ikke la deg. Sjekk etter en API, ikke en funksjon: En spak som bare finnes i plattformens admin-UI er et håndtak kontakten din har ikke.

Arbeidt eksempel · Zendesk (referansen implementering)

Les connectors/zendesk/connector.php alongside this. It is short, and every branch below is a decision you will face too.

e-post → ok

PUT /api/v2/users/{id} med suspendert=true. En avhengig sluttbrukeres nye forespurnninger omdirigerer til suspenderede billetter i stedet for å åpne en, virkelig den samme idé som blokkering på senderen, og det stopper ingen fakturering fordi Zendesk-sluttbrukerne ikke har noen. Returnerer brukerid som fjern_ref.

Domene → Ikke støttet

Zendesk kan suspendere et helt domene, men bare gjennom suspensjonen: søkeord i Admin Center blocklist-tekstområdet og ingen API skriver det feltet. Funksjonen eksisterer; spaken gjør ikke.

ip → Ikke støttet

Ingen billettnivå IP Det finnes blokk.

ukjent adresse → noop

Zendesk kan ikke forhåndsavløse en adresse den aldri har sett. Ingenting å gjøre er ingen feil, og lokalblokken stopper fortsatt billetten.

agent eller admin → ikke støttes

REFUSED. Suspending personalet ville låse en kollega ut av helpdesk. En ansatt adresse som når til et blokkliste er langt mer sannsynlig å være feil enn en instruksjon, sjekk rollen før du handler på det.

Den siste raden er den som verdt å kopiere. Kontraktet kan ikke stoppe deg med kartlegging av en blokk på noe destruktivt, så hver kontakt må bestemme seg selv hva det vil nekte. Avviser høyt, med et detail En operatør kan lese, slå lydighet.

Rapporter ærlig. Legg merke til hvor få av disse radene er ok. Det er det riktige utfallet, ikke et gap: en domenesblokk fungerer fortsatt (det håndhevs i kjernen når den skrives); Den kan bare ikke speileres utover. ok For noe du ikke gjorde ville fortelle en operatør blokken nådde plattformen din når den aldri forlot OpsIQ.

Regler

Den lokale blokken vinner alltid

Det er skrevet før du blir kalt og står hva som helst. Du kan ikke hindre en operatør blokkering noen.

Aldri kaste

Et kast behandles som ustøttet og registrert. Return mislyktes med en detalj i stedet så grunnen overlever.

Vær idempowen

Den samme blokken kan bli annonsert mer enn én gang.

Tilbake raskt

Fan-out er synkron med operatoren klikk. Køye sakte arbeid i stedet for å holde anmodningen åpent.

Ikke ring tilbake

Aldri blokkert inn igjen OpsIQ registeret hopper over den opprinnelige koblingen, men en andre humle ville loop.

Alle meldinger er skrevet til opsiq_block_registry_log (Operasjon, type, verdi, grunnen til at administrator, opprinnelse, kontaktslite, resultat, detalj og tidsstempling) slik en operatøren kan se et blokk ankom fra plattformen din i stedet for fra agent, og hva hver forbindelse gjorde om det.

Trykk vedlegg riktig

Hånd en attachments tabell som skal opprettes ()/addReply(). Hvert element bærer filen i en av tre figurer:

content_b64

Base64 av RAW-filbytene, bruk for filer bak auth (de fleste inngående tilfeller). OpsIQ avkoder den og omverter filen for deg. Den mest bærbare formen.

url/ source_url

En offentlig https URL (f. eks. et Zendesk content_url). Må være http; passerer en SSRF / tillateliste sjekk før den lagres.

stored_path

En lagret filreferanse du allerede har skrevet (det som den opprinnelige komponisten opplaster produserer).

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 bare filnavn (ikke byte), så det pålitelige inngående mønsteret er: Les bytene der koden allerede kjører (innenfor plattform, eller fra webhook nyttelast) og skip dem som content_b64 på arrangementet.

Utgående (OpsIQ → din plattform) Når en agent legger til fil, ticket.replied nyttelast gir deg svarene som stored_path elementene under OpsIQ filbutikk. Les dem og trykk i plattformens eget format, og sjekk plattformen docs, kodingsspørsmål: WHMCS Ønsker base64_encode(json_encode([[name,data]])) (JSON, ikke serier); Zendesk laster opp rå byte til /uploads.json For et tegn så sett comment.uploadsGmail sender en multipart/blandet RFC-822 melding base64url-encoded i raw; Amazon SES inbound attachments need the S3 receive action (the SNS path caps at 150 KB).

Eksterne plattformer: API + webhook, aldri en annen app tabeller

Hvis plattformen din er en separat app eller database (en vert SaaS, en fjerntelefon WHMCS; En annen DB på samme server), Skriv aldri tabellene direkte: en kryss-database skrive land på hvilken som helst forbindelse er aktiv og stille savner de virkelige radene. Alltid: utgående = Ring plattformens signerte REST API (svarer, status, avdeling og sletter); innbundet = plattformen POST en signert webhook, din handleWebhook() verifisere det og brann matching ticket.* hendelse. For å stoppe en speilløkke, merke det du trykker med et opprinnelsesmerke (fx mirror_origin:'opsiq'); plattformen ekko det på webhook og din inngående manager hopper over sine egne echoes. OpsIQEvents::isMirroredEvent() På toppen av hver manager.

Speilstatus, prioritet og avdeling

En svarbevegelsesstatus automatisk, en agent Svar → answered, a Kunde Svar → customer_reply;-speil som på samme måte. For eksplisitte endringer abonnerer til ticket.updated Lese payload['changes'] (f. eks. {status:'closed'}).

Status: OpsIQ kanonisk sett er open, customer_reply, answered, in_progress, pending, closed. Hold et lite toveis kart til plattformens ordforråd, og sørg for at kolonnen din faktisk godtar verdiene du skriver (en ENUM manglende verdi blir stille og rolig falt til tom av noen databaser). Avdeling: OpsIQ -avdelings id er meningsløst på din side, Send den aldriSend deskriptoren (name, email og slug), og løse det mot dine egne avdelinger via e-post → navn → snegle, så \"Billing Department\" land i din Billing i stedet for generelt. Utløse på begge ticket.escalated og a department_id Endring i ticket.updated.

💡
Status / prioritet / emne / avdeling / slett speiling er gated ved per-kobling veksler (mirror_status_endringer, mirror_priority_changes, mirror _subject_change, mirror # department_endringene, mirror# deletes) lest gjennom den delte OpsIQ\Connectors\MirrorOptions hjelper. Bygg den blokken i innstillingene dine.json og hver billett-speil kobling leser vekslene identisk.

Koble billett til et produkt / tjeneste

Hvis kunden valgte et bestemt produkt når han åpnet billetten, kan du gi en antydning slik at agenten ser et fokusert servicekort (med ett-klikks "se andre produkter" modal for resten).

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

En plattforms tjenestekode, f.eks WHMCS S396 (service396) / D11 (domene11). OpsIQ Demonterer den valgfrie type-bokstaven + id og passer til tjenestelisten din, med en Type Guard så et domenekode aldri matcher produktet av samme ID.

related_domain

Et domenenavn; matchet som en understreng mot hver tjenestes detalj / domene.

💡
Bygg vedleggslisten én gang i form over, og OpsIQ håndterer resten: hostet URLs er passert gjennom og base64-innhold lagres og hostes på nytt for deg. Du trenger aldri å skrive per plattform filhåndtering.
⚠️
Handlingstastene er små bokstaver, siffer og understrek. Byggeren godtar3til80tegn og også tillater prikker; handlingsbutikken akseptere2til100tegn uten prikker, så hold bokstavene og sifferet tilfreds med begge. Å legge til en handling skaper ingen AJAX-rute, slik at det ikke er noe å regenerere - lagre koblingen på nytt og den blir synkronisert.

La AI bygge den til deg

Du trenger ikke fylle seks trinn i hånden. Beskriv kontakten med dine egne ord og OpsIQs AI utkast hele spesifikasjonen, kjører den gjennom samme validerer veiviseren bruker, og viser deg planen før noe er skrevet til disk. Det finnes to steder å gjøre det, og de produserer den samme pakken.

I veiviseren

Åpne Koblinger→+ Legg til kobling→Bygg kobling. På steg1Du vil se ✨Bygg den til meg. Skriv hva kontakten er for - plattformen, hvadOpsIQbør lese og hva den skal skrive, og hvem som bruker det - legge tilAPIrot hvis du vet det, og trykk på den. Veiviseren fyller hvert trinn fra utkastet, og du anmelder og redigere nøyaktig som om du hadde skrevet det. På steg6samme panel vises som ✨Rens med AI, so you can ask for a change ("also read invoices") instead of editing fields.

Ved å spørre spørOpsIQ

Åpne Spør OpsIQ copilot hvor som helst i administratoren og si hva du vil. Du trenger aldri å nevne en handling eller vite at trollmannen eksisterer.

1
Be om det

For example: "Build me a connector for Trello. It should list my boards and lists, read cards, and create a card on a board. Trello uses an API key plus token." The copilot answers in a sentence and shows a Utkast til denne kontakten Ditt budskap er kort, så legg plattformen og lesningene i den.

2
Bekreft utkastet

Ingenting er skrevet ennå. Copiloten utkaster spesifikasjon, validerer den og svarer med planen: Hva kontakten gjør, handlingene det vil eksponere (skrives merket), antagelsene som ble gjort, og spørsmål du fortsatt må svare på - vanligvis hvilke legitimasjoner å levere. Utkastet parkert under en id og forblir tilgjengelig til 24 times.

3
Si: Bygg den!

Copiloten viser en Bygg 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
Skriv inn legitimasjoner og aktiver

Den nye kontakten er publisert, men ikke aktivert og den har ingen hemmeligheter. Åpne innstillingene, skriv innAPItaste eller token, trykk på Test, så Slå påFør du gjør det, så er det ingenting.

💡
Begge kortene trenger klikket. Utkaststrinnet skriver ingenting i det hele tatt; byggsteget er merket destruktivt og spør alltid. AI kan ikke publisere en forbindelse, aktivere et eller skrive inn et referanseelement på egen hånd.

Hva AI er og ikke har lov til å gjøre

Validereren er veggen

En utformet spesifikasjon går gjennom nøyaktig den samme validert() veiviserens Publisher- knapp bruker. Hvis det ikke passerer, får AI feilene og prøver igjen opp til tre ganger, og nekter deretter i Validator' s egne ord. Et utkast som aldri blir en pakke.

Den skriver ingen legitimasjoner

Utkastet navnger autentiseringsmønster og innstillinger felt; det oppfinner aldri en nøkkel, token eller hemmelighet. Du fyller dem i etterpå på konnektorens innstillingside.

Svaret på spørsmål, ikke gjetninger

Alt det ikke kunne vite - din konto-ID, hvilken region av to endepunkter planen avslører - kommer tilbake som et spørsmål om plan snarere enn en stille antakelse.

Et oppfunnet endepunkt mislykkes høyt

AI blir fortalt å aldri oppfinne stier, men ingen modell er perfekt. En feil bane publiseres som en handling som mislykkes sin live test på Handlingene trinn eller første gang den kjører - det er ikke et stille suksess.

Pakken er vanlig

What it produces is a normal Builder package: same generated files, same contract, same signature, editable in the wizard, deletable from the Connectors page. There is no separate "AI connector" kind.

Modellen din gjør utarbeidelsen

Kvalitet følger modellen du konfigurerte under Innstillinger → AI. En liten, billig modell utkaster en riktig men enkel kobling og stiller flere spørsmål; en sterkere modeller får mer av endepunktene til første gang. Endre det under AI-konfigurasjon; ingenting annet må endres.

⚠️
Copiloten kan bare kjøre handlinger som denne installasjonen faktisk har registrert. Hvis Connector Builder-handlingene mangler - en plan som ikke inkluderer dem, eller en rolle uten manage_connectors — copiloten sier det i stedet for å tilby et kort som ville mislykkes når du klikket på.
Koblinger

Selg gjennom chat: handel rolle kart

A connector that can sell — a store platform, a booking system, a payment gateway — declares which of its OWN operations answer OpsIQ's canonical commerce roles. Declare it and the connector appears under Settings → Client Chat → Selling through chat automatically; stop declaring and it disappears. There is no list to register on.

Filen: commerce_roles.json

Deklarasjonen bor i egen fil ved pakkeroten — Tilstedeværelsen av filen er kravet. Det kan ikke leve i connector_contract.json: den filen regenereres av emballasjeverktøyene og skjemaet forkaster ukjente nøkler, så en hånd-tilsatt blokk ville mislykkes valideringen og deretter bli overskrevet.

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

Reglene og hvorfor hver eksisterer

Roller er et lukket ordforråd

OpsIQ har aldri en rolle fra handlingens navn. En rolle som ikke erklært eksisterer ikke - å erklære seg hele kontrakten.

Operasjonen må være en av dine handlinger

Hver kartlagt operasjon må finnes i din actions.json. A typo declares a capability that cannot run, and it surfaces to a customer as "I can check that for you" followed by nothing.

En leserolle peker aldri på en destruktiv operasjon

Les roller (katalog, tilgjengelighet, sitat og ordreoppslag) må kartlegge til operasjoner som ikke endres på plattformen.

En skriverolle som aldri kartlegger til en generell rekordoperasjon

Kartlegging order_create til et råt bordinnlegg - record.create, db.insert, recordCreate, enhver staving eller en separator - blir avvist strukturelt. En rad skrevet direkte passerer plattformens prissetting, lagerlås og bekreftelsesposten din som produserer et eget system ikke tror fullt ut på det.

En skriverolle erklærer en gjenoppretting operasjon

An idempotent lookup that answers "did my write land?". The most dangerous timeout is the one after your platform may already have created the order; without a recovery lookup the only options are to retry blind or to lose it.

Leverandørens betalingsroller har tre ekstra forpliktelser

En pakke som taler direkte til en betalingsleverandør må også erklære payment_profile (valutor, land og metoder) omgivelsene — et uuttalt miljø er hvordan en test integrasjon tar live betaling), webhook_verify (leverandørens egentlige signaturordning; en generell hemmelig-komparer blir nektet) og event_map (leverandør hendelser på kanoniske). En kjøpmannskontakt som bare implementer record_payment mottar allerede verifisert kanonisk betalingsbevis; det må ikke late som om å være gateway.

Deklarer hvordan kunder kan bestille fra en tilkoblet butikk

En kjøpmannskontakt og en betalingsport er forskjellige kontrakter. Under Tilkoblet butikken kundebestilling, velg den dypeste modus plattformen kan bevise. Valget er pakket inne signert commerce_roles.json; Lagra og klientchatt relese den på kjøretid. Fjerning av en rolle eller deaktiverer/utinstalleringen av kontaktkontakten ugyldiggjør derfor et tidligere gjengitt forslag i stedet for å forlate stal-myndighet bak seg.

catalog_only

Kart catalog_search eller catalog_get. OpsIQ kan søke og forklare produkter, men det kan ikke vise en kjørelig ordre eller utsjekking bekreftelse. Hver pakke forblir på denne sanne standarden til sin egen skrevet sitat-og sjekkut/bestilling handlinger passerer dypere kontrakt og markedsplass sertifisering; aldri infer transaksjonell støtte fra et plattformnavn.

platform_checkout

Også kart quote og platform_checkout. The merchant action—not OpsIQ core—returns checkout_url, checkout_reference og kanonisk sitat. URL må være HTTPS, vertsnavnet skal matche customer_ordering.checkout_hosts eller HTTPS-verten som er avledet fra checkout_host_setting, og sitatet kan leve for ikke mer enn15minutter. En produkt permalink, lokal montert kurvURLeller returURLer ikke en kjøpmann-utstedt kasjer evne.

direct_order

Også kart quote, order_create og order_get, med order_create.recovery. Core oppdaterer sitatet umiddelbart før utførelse, leverer idempetensnøkkelen og spør gjenopprettingsoperasjonen etter hvert ukjent resultat før forsøk på nytt. payment_flow=opsiq_gateway, det må også kartlegge record_payment med en autoritativ gjenoppretting / read-back operasjon. OpsIQ verifiserer aktivt gateway transaksjonen, matcher beløpet, valuta, kjøpmann og ordrereferansen, skriver leverandørens referanse én gang, les deretter handelsfaktura/bestilling tilbake. mark_invoice_paid Statusomslag blir avvist fordi det ikke har noen betalingsbevis. Opprette handlingen må påkalle plattformens egen prissetting, aksje- og ordrevirksomhetslogikk; rå database skriver er nektet.

Identifikasjonsverifisering, og hva operatøren kan endre

Når OpsIQ eier betalingen, må en chatkunde nå frem til email_otp før en ordre opprettes -OpsIQe-poster a6-sifferkode og ber om det. Dette er ikke noe en kobling velger ut av; Det er garantigulvet som utføre kjernen krever for order_create.

Et unntak, og hvem som kontrollerer det

En operatør kan kun akseptere en uverifisert adresse der kontakten erklærer fulfilment_presence: customer_present. En hotellgjest må ankomme, så feil adresse retter en mottakning og rommet er fortsatt der. remote_delivery — shipped, provisioned, downloaded — and verification is required whatever the operator sets, because value leaves on the strength of that address alone. Setting minimum_assurance eller reversibility: irreversible Fjerner også operatørens evne til å hoppe over den.

Hvor lenge koden varer

30 minutter som standard kan operatøren konfigureres fra5minutter til24timer. Kunden ser en live nedtelling som gjøres i deres egen tidssone, ikke operatørens. En utløpt kode sier så tydelig og tilbyr en ny i stedet for å rapportere et ugyldig program - en kunde som skriver riktig-men-gammelkode har gjort ingen feil, og forteller dem at de har sendt dem rundt den samme sløyfeen.

Hva kunden må gi: kunde_felts

Navn og e-post er alltid nødvendig, men samles inn først. address, phone og company as required eller optional for å passe virksomheten: en butikk som skip pakker erklærer adresse nødvendig; et hotell erklærer telefon kreves, siden gjester ikke kan ringe har ingen bestillingskontakt. Assistenten ber om dem i samtale før sitering og OpsIQ nekter å plassere en ordre som mangler et påkrevet felt. Byggeren skriver normalisert kart ut, baseline inkludert så kontrakten på disken er eksplisitt.

Når kontoen opprettes: account_timing

at_order (standard) lar ordren skrive opprette en førstegangs kjøper konto. Deklarasjon before_quote when your platform prices per account — WHMCS taxes by the client’s own profile and quotes in the client’s currency — and OpsIQ creates the account through your customer_create handling så snart de nødvendige feltene er kjent, spør deretter sitatet om den kontoen, slik at bekreftelseskortet bærer det totale du faktisk vil fakturer. account_flow: connector_signup.

Assistenten henter, den leser ikke: client_tools

Med Opprett bestillinger på, leser assistenten aldri en innpakket katalog. Det kaller tre verktøy - commerce_catalog_search (en tom forespørsel er en oversikt av produktfamilien; resultater som ligger utover grensene, vises med navn), commerce_catalog_get for én gjenstand i sin helhet, og commerce_quote, som minterer den signerte bekreftelseskortserver-siden gjennom de samme veggene kontakten banen har alltid hatt. Ett verktøy per verb, din kontakt som en parameter så et lager med seks kontakter får tre verksteder i stedet for atten. client_tools begrenser standarden; fraværende betyr hver kartlagt, og en catalog_only kontakt aldri sitater. Bekreftelse er ikke et verktøy: kortets knapp på nettet, nøyaktig CONFIRM kommando på en kanal, og ingenting som står i modellene bruker penger.

Hva katalogene dine bør bære

id, name, en kundesikker summary, a category eller produktfamilie (det er slik en kundes ord finner et element som heter kode), currency, unit_amount_minor, available, og input_schema navngitt feltene en ordre behov. Søk Scorer kundens ord mot navnet, familien, syklusen og sammendraget.

Avviser med en grunn kunden kan handle på

Tilbake {"success":false,"error":"…","missing":["domain"],"retryable":true} når en verdi er feil eller mangler. En avslag som navnene missing eller retryable når kunden ordrett; en bare feil forblir generisk så ingenting interne lekkasjer.

Geo-valuta og nødstopp

When the operator turns on Geo currency (Client Chat → Behaviour), the customer reads prices in their own currency on every surface — chat text, the web card, the channel text card and the storefront’s opening currency — using the platform’s own FX store. Your price is never substituted: the card shows the visitor’s figure beside the store total, and the gateway processes exactly the amount it displays. Paus alle selgere (Innstillinger → Commerce) er den kill-bryteren: katalog, sitater og oppslag holder åpen; foreslår å bekrefte stopp på hver kanal.

Når du selger gjennom chat, oppføres ikke

Kjøperen kan ikke nås

Pakkens segl er brutt: En fil ble redigert etter signering. Publiser pakken på nytt. Det blir aldri redigeres en installert markedskopi; oppdater den fra markedet-panelet.

Bestillingen er satt i pause for denne butikken akkurat nå

Kill-bryteren er på. Innstillinger→Handel→Pausa all salg.

Bestilling er ikke tilgjengelig på denne kanalen ennå

Kanalen er ikke merket under Hvor kunder kan kjøpe. Serverloggnavn kanalen.

Assistenten beskriver et element, men det vises ikke noe kort.

Citatverktøyet nektes. Hvert anrop er logget som [opsiq][commerce][client_tool] med grunnen: et feil element-ID, en felt varen ikke erklærer, et tatt domene eller kjøperens eget avslag. Les logg før du stoler på assistentens parafras.

Han sier at det ikke kan se produktene

Siden tilhører et annet arbeidsområde. Hver nettside widget hører til ett arbeidsområde, og lagerkontakten må være aktivert der.

Et hermetisk svar i stedet for et svar

\"Fortell meg litt mer om hva du trenger\" betyr at AI-leverandøren kaller seg selv mislykkes; AI History viser nøyaktig feil under den turn, og verktøyene ble aldri nådd.

En kontaktredigering vises ikke i chat

Arbeideren resirkulerer på kodeendring innen et minutt, men en samtale spiller sitt siste kort. Start ny samtale for å teste.

En nigeriansk besøkende ser dollar selv om Geo-valutaen er på

Sjekk at geo-IPdatabasen er konfigurert (Client Chatt→Geo) og at den besøkendes valuta har en FX-rente; uten rateOpsIQViser lagerprisen i stedet for feil nummer.

Din totale er det eneste tallet som beveger seg penger

Et tilbud bærer unit_amount_minor, quantity og total_amount_minor, og det er fristende å behandle den tredje som avledet fra de to første. Det ikke; og anta at det allerede har kostet en kunde ekte penger.

quantity is what the CUSTOMER chose — one room, one licence, one policy. Your multiplier can be something OpsIQ never sees: nights, seats, billing cycles, distance, weight, tiers. A hotel quotes one room for three nights as quantity 1, unit 105,000, total 315,000. OpsIQ multiplied unit by quantity to price a confirmation card, showed a guest 105,000, and then charged the 315,000 the merchant actually returned. Agreeing to one figure and being charged another is the worst thing this contract can do.

Reglene

total_amount_minor er den eneste figuren OpsIQ shows, tegn, kostnader og forsones mot. unit_amount_minor er en visningsdetalj på linjen. Hvis totalen ikke akkurat det du vil lade, sitatet ditt feil -OpsIQvil ikke korrigere det, fordi en total som har blitt nyttig justert er den du aldri ble enige om å ære.

Hva dette betyr for sitathandlingen din

Returner all-in figuren. Bruk dine egne netter, nivåer, rabatter og avgifter før du svarer på det. Hvis linjen din ikke forsones - enhet ganger noe helt tall aldri er lik total — OpsIQ behandler det hele som en linje til sin virkelige pris i stedet for å oppfinne et sammenbrudd som er konsistent med ingenting.

Seks svar som gjør denne kontrakten passer alle bransjer

The declaration above began as a shop's declaration: buy a thing, pay now, it is yours, you may cancel. Every one of those four is an assumption some real business does not share. A bank moving money cannot undo it. An insurer cannot say "confirmed" until an underwriter has looked. A tradesman invoices afterwards. A clinic bills someone who is not the patient. With no way to say so, those businesses either misrepresent their own process to their own customers or cannot connect at all.

En transaksjonskontakt svarer på seks spørsmål. Alle standarder til streng lesing - Å si at ingenting er trygt og aldri å bekjenne seg til det, fordi ikke noe er hva en forfatter gjør når de ikke har vurdert spørsmålet.

transaction_kind

purchase, booking, subscription, bill_payment, transfer, application, top_up, renewal. Vocabulary rather than behaviour: it decides the word your customer reads. Calling a wire transfer an "order" makes the assistant sound like it does not understand the business it speaks for, and no amount of correct plumbing recovers from that. Defaults to purchase.

decision_mode

immediate eller deferred. Velg deferred For alt som går til underskriving, kredittvurderinger, referanser og opptak eller en komité.OpsIQSå sier sendt i stedet for bekreftet, og hender over referansen å spørre om det. Å fortelle noen deres søknad er bekreftet mens den sitter hos et menneske er det mest skadelige ting enchat assistent kan gjøre for en regulert virksomhet, og det er standard atferd av hver detaljhandel-formet flyten. Standard til immediate.

payment_timing

on_confirmation, deposit_then_balance, invoice_later eller no_payment. Dette bestemmer om OpsIQ åpner en betalingsside I det hele tattSå det kan ikke bli opplyst fra payment_flow — det sier Hvem Ta pengene, det sier om og når. Arbeid du faktura etterpå, og programmer som ikke koster noe å sende inn, avslutte på bekreftelsen i stedet for å nå en gateway-liste som er tom eller feil.

reversibility

reversible eller irreversible. Det viktigste en finansiell kontakt sier. Et rom kan frigjøres og et pakket kan komme tilbake; En fullført overføring ikke - det er ingen angre, pengene er på den andre enden, og det eneste middelet ber om at en fremmed å returnere det. Deklarere irreversible Automatiske krefter cancellation_flow til none og forbyr enhver operatør som setter opp fra å hoppe over identitetsverifisering, Alt annet denne erklæringen sier. To felt er ikke uenige, men en tilstand å løse ved bruk av det som leses først. reversible.

cancellation_flow

none, platform_only eller connector_cancel. Avbestillingsrollene allerede eksisterte uten noen regel om hvem som kunne nå dem, og de to feil gjetting mislykkes i motsatte retninger: Gjett åpen og en samtalemelding kanselleres en betalt bestilling uten noe avgift sitert; Gitt stengt og kunden som ønsker å avbryte blir fortalt til telefonen. connector_cancel I tillegg krever cancellation_quote og order_cancel med en gjenoppretting -OpsIQaldri kansellerer før du sier hva det koster. Standard none.

fulfilment_presence

customer_present eller remote_delivery. En uverifisert e-postadresse kan koste noe som helst, og en hotellgjester må ankomme på et feilaktig sted vil gi rett adresse til å motta mottakelse og rommet er fortsatt der; en postpakke eller serveren har gitt deg den adressens styrke. This is what makes an operator’s "skip email verification" setting available at all, og det erklært av deg i stedet for valgt av dem - så et hotells resonnement kan aldri arves ved en kontakt som skiper varer. Standard remote_delivery.

minimum_assurance og disclosure (valgfritt)

minimum_assurance La deg kreve mer identitetsbevis enn OpsIQ krever, aldri mindre - en bank som trenger et trinn for overføringen utøver kontrakt. Å sette den fjerner også operatørens evne til å hoppe over verifisering av kontakten din fordi en handelsmanns egen risikobeslutning utviser operatørens bekvemmelighet. disclosure er ordlyd vist Før Bekrefte-knappen for en rate, et avgift eller avkjølingsrett må du presentere; uten det regulerte virksomheter smugle nødvendig formulering til et produktnavn.

notify_flow

platform_automatic, platform_triggered eller noneNår OpsIQ tar betalingen din egen utsjekking aldri kjører, så uansett hva det normalt e-poster aldri brann. Opptak av bestilling markerer ordren betalt; den pålegger ingen plattform å fortelle noen. platform_triggered krever order_notify rolle med en gjenoppretting, og OpsIQ spør bare etter at betaling read-back beviser pengene er registrert. none gjør denOpsIQ-side bekreftelse obligatorisk, fordi ellers en betalende kunde ikke hører noe i det hele tatt. Standard none.

Same kontrakt, ni ikke-relatert virksomhet

Ingen av disse var designet rundt. Hver er kontrakten som svarer ærlig for en annen bransje, med OpsIQ _-viter ingenting om noen av dem.

En kontrakt, ni bransjer
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
Betalt hendelse levert til plattformer

Etter at en innfødt Storfront betaling er aktivt verifisert og forpliktet,OpsIQUtsender payment.completed med order_id, payment_id/provider_ref, gateway, nøyaktig amount_minor, ISO currency, kunde- og linjeelementer paid_atEn handelskontakt må holde det beviset gjennom record_payment og lese den tilbake; en host-checkout kontakt bruker sin egen autoritative betalte hendelse, og må ikke motta et duplikate betaling skrive.

AI er en forslagsgiver, ikke et myndighetskild

Modellen kan velge et deklarert produkt og mengde, men den ikke velger en operasjonsnavn. Mint ut en sjekk URL eller opprette handelstilstand fra tekst. Kunden mottar nøyaktig signert kort og må trykke på bekreftelsesknappen. Den bekreftelsen er bundet til arbeidsområdet, kontakten, elementet, antallet sitater, valuta, tråd og forfallsdato.

Sosiale kunder holder samme strøm uten e-post

WhatsAppBudbringer,Instagram, Telegram, LINE- og SMS-kontoen brukes som kundesidentitet. Forslaget er signert til den kanalkontoen og bekreftelsen kjører fortsatt gjennom det samme ferske sitatet, aksjen, idemppotensialiteten, betalingskontrollene og gjenopprettingskontrollerne. En sosial klient bruker nøyaktig éngangsbekreftelse handling utført i samtalen sin; vanlige prose såsom \"ja\" blir aldri bestillingsmyndigheten.

Ordrehistorie følger en nøyaktig identitetskobling, aldri et e-post gjett

Innfødte bestillinger er indeksert av en ugjennomsiktig kanalidentitet, slik at AI kan svare \"hvor er min ordre?\" uten å spørre om et e-postnummer eller rekkefølge nummer. For tilkoblet lagerhistorikk knyt kanalens identitet til arbeidsområdet CRM/client registrere og implementere autoritative kunde/ordre-oppslag i kontakten. Kunde kontekstleverandører mottar den lagrede lenken; de må ikke velge en konto fra et visningsnavn eller epost skrevet inn chatt. Med én matchende rekkefølge AI svarene direkte, med flere det oppsummerer kampene og spør hvilken som helst; uten at det sier ingen historie er knyttet til.

Gjør nyttelasten universell: skrivne felt og en servere-eide identitet

Kjernen inneholder ingen WHMCS, hotell, SaaS butikk, bank, produkt- eller rutegren. parameters er kundeskjemaet og AI-sporeskjema. En bookingkontakt kan erklære datoer og gjestene; en faktureringsforbindelse kan deklarere et syklus, en fremtidig bedriftskobling kan erklære sine egne trygge felt.OpsIQsaniterer primitive kontroller og sender de innsamlede verdiene bare til den kartlagte kontakthandlingen.

Typet sitatshandling
{
  "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"}]}
  ]
}

For clients_only, sett customer_ordering.identity_parameter til handlingsparameteren som mottar kontaktens eksterne kunde-ID. Dette feltet vises aldri for en kunden, og enhver oppringte verdi fjernes; OpsIQ injiserer kun id fra et verifisert kontaktkobling. Gjest utspørsel gjør det tomt. En skrivt epost er bevis på at gjesteoppslag ikke finnes eller kjøper myndighet.

Gruppenavn: Logget inn kundekontoer og konfigurasjon tilknyttet den gruppeprimære portalen arbeidsområdet. Imidlertid må identitetssymbolet signeres for det nøyaktige medlemsnettstedet som innesluttes widget, ved hjelp av medlemmets webhook-hemmelighet.OpsIQverifiserer at overflaten først og bare så løser handelen, og den koblede kunden gjennom gruppen primær. Aldri erstatte medlemmet site nøkkelen med hovednøkkelen og aldri kopierer den primære hemmelighet til et medlemsområde.

Canonical konvolutter kontakten må returnere

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"}
  }]}
}
Sitert
{
  "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"
  }
}

Plattformskontrollresponsen gjentar gyldig kanonisk sitat og legger til en HTTPS checkout_url. Core oppdaterer sitatet ved bekreftelse og sammenligner valuta, totalt og stabilt utvalg nøyaktig. Kobberen oversetter sin plattformrespons i disse konvoluttene; kjernen omsettes aldri leverandørfelt eller konstruere forhandleren URL

Gjør en operatør-bygd gateway tilgjengelig i den innfødte butikken og chat

Betalingsevne alene ikke plassere en gateway foran kunder. Aktiver Innenlandske lager betalingsgateway blokker i Connector Builder. Det legger til en eksplisitt versjonskontrakt, kart kausjonsopprettelse og aktive betalingsoppslag, samt lar leverandør-verte ut kassadomenene. Når kontakten er installert, aktivert og valgt under Handelsinnstillinger vises den samme gatewayen i offentlig Store, Stor modal, klientchatuttaket eller autonom checkout. Ingen tilbyders room er hardcoded.

Native Store gateway kontrakt
{
  "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"]
    }
  }
}
Canonical utsjekking

Utsjekkingshandlingskartene checkout_url og når leverandøren har én, session_id. URL må være HTTPS, inneholde ingen legitimasjoner og matche en tillatt vert.

Canonical status utdata

Statushandlingen utfører en ny leverandør API -oppslag og kart paid som virkelig en boolesk, amount_minor som et heltall, currency som en ISO-kode med tre bokstaver, og provider_refEn retur URL, spørringsstrengen, klientens nyttelast eller \"bekreftet\" instruksjon er aldri betalingssannhet.

Valgfri refusjonsavtale

Hvis gatewayen støtter refusjon, kartlegg payment_refund og dens gjenopprettingshandling. Refundering av opprettelsen returnerer strengt accepted og completed bobler pluss provider_ref; gjenoppretting utfører en leverandør-oppslag og retur status. Uten begge handlingene, OpsIQ reklamer ikke tilbakebetaling av kontaktene.

Hvem bekrefter ordren

Koblingen skriver aldri enOpsIQBestillingsstatus.OpsIQSammenligner det returnerte beløpet og valutaen nøyaktig, samt registrerer leverandørens referanse; først da utfører kjernen den tjenestebekreftede overgang. Manuell bankoverføring forblir den eneste flyt en navngitt agent kan godkjenne.

I kontaktbygger, kryss handelKartlegg rollene og konfigurer enten Tilkoblet butikken kundebestilling, Innenlandske lager betalingsgateway, eller begge når kontakten virkelig gir både kontrakter. Veiviseren validerer erklæring og skriver commerce_roles.json. Publishing bruker fortsatt den normale markedsplass gjennomgang og signaturprosess; denne kontrakten omgår aldri pakkeverifisering eller gjør en kontakt ikke-installerbar. php tools/verify_commerce_contracts.php.
💡
Transport er http For en fjerntliggendeAPIeller bridge for en navngitt operasjon på en utplassert bro (se NO-APImønstret nedenfor). Roller er transport-agnostiske; kjøretiden trenger bare transporten angitt slik at det kan versjonspar en bro.
Koblinger

Selg gjennom chat uten kontakt: Handlinger og utløsere

Handelskontrakten ovenfor krever ikke en kontaktpakke. Hvis plattformen er din egen - et eget bakkontor, et interntAPI, et system ingen sender en kontakt for - du kan nå den samme selgende maskinen med de to verktøyene som allerede bruker til å integrere noe annet: egendefinerte handlinger (din HTTP-endpoints, definert på Handlinger siden) og Triggers (enter webhooks). Samme kontrakt er det samme kort, same identitetssikring, samme betalingskjerne. Det eneste manglet var pakken fordi det ikke finnes noen tredjepart kode å signere.

Hvordan det passer sammen

Du bygger én egendefinert handling per handel rolle - hver er et vanlig HTTPS endepunkt på din side, definert under AI & Automasjon→Handlinger med sin URL, auth-hode og parametre. Deretter lagrer du en erklæring som kartlegger roller til disse handlingene. Fra det øyeblikket vises butikken din i chat nøyaktig som et kontaktstøttet: AI sitater fra din citathandling, bekreftelseskortet gjengir, kunden verifiserer sin e-post og bestillingskjernen ringer din bestillingshandling med idempactens key, OpsIQ tar betaling gjennom arbeidsområdeportene og din rekordbetalingshandlinger bøker det. Ingenting om kundeopplevelsen sier - tilpasset

Erklæringen

Lagre denne JSON som arbeidsområdeinnstillingen commerce_custom_integration (Innstillinger→avanserte innstillinger eller via REST-innstillingeneAPI). Det er den samme formen som en pakkes commerce_roles.json handel node, med action navngitt dine egendefinerte handlings-ID:

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

Til slutt legger custom_commerce til kontaktene som er aktivert for salg under Innstillinger→Kunde Chat→Selger gjennom chat. Inntaket er kontrollert på nytt hver be om, og det nekter med navngitte grunner i stedet for stille å skjule butikken din: en rolle modusen krever at kart til ingenting. En skriverolle uten recovery handling (§15.7 — en skrive hvis utfall ikke kan bli spurt om, og som har blitt slettet eller deaktivert siden du lagrede.

Hva hver handling må gjøre

Returner konnektoren

Svar {"success": true, "data": { ... }} — eller {"success": false, "error": "a sentence a customer may read"}. Din handling er responsen suksess bane Det bør peke på konvolutten.

Sitert: det totale, i mindre enheter

Tilbake quote_id, product_name, quantity, unit_amount_minor, total_amount_minor, currency, selection, selection_summary, expires_at. Alt i totalen din er det eneste tallet som beveger seg penger - avsnittet ovenfor gjelder ordrett: skatter, avgifter og multiplikatorer går INTO totalt fordi summen av dem blir signert, vist eller belastes.

Ordre opprette: ære idempatens-nøkkelen

Du mottar idempotency_key, det underskrevne total_minor og currency, den verifiserte customer_email, og dine egne sitatparametre. Bevare nøkkelen med ordren; Hvis du allerede har opprettet en bestilling for det, returnere den rekkefølge i stedet for et andre ett. Kontroller pengene - hvis systemet priser order annerledes enn signert totalen avviser igjen i stedetfor under-charging. Returner a reference Plattformen din gjenkjenner.

Recovery: Svar om en skrive

order_by_key mottar idempetens-nøkkelen og svar {"found": true, "order": {...}} eller {"found": false}. funnet:falsk er et løfte - OpsIQ kan prøve å skrive på styrken av det. En status feed eller en nylig bestillingsliste er ikke noe svar om én skriving.

Record betaling: din egen løsningsvei

Mottar gateway-transaksjons ID som idemppotens key plus ordrereferansen din, etterOpsIQhar aktivt verifisert beløp og valuta med gateway. Merk ordren som er betalt gjennom plattformens egen logikk - brann dine egne e-poster, redusere din egen aksje. Retur platform_notified: true Hvis din plattform e-post kunden selv.

Kortinnganger kommer fra handlingsparametrene dine

Any parameter you declare on your QUOTE action (beyond the identity parameter) that the AI has not collected is rendered on the confirmation card as an input the customer fills themselves — a domain, a date, a seat. Label them well; the label is what the customer reads.

Triggers: Hør ditt eget salg

To arrangementer brann på den delte hendelsesbussen, så nettbutikkene og automatisering hører hvert chat salg uansett hvor det utføres:

commerce.order.created

I det øyeblikk ordren lander på kjøpmannsiden, før betaling - referanse (eller custom_commerce), beløp, valuta, kunde e-post.

commerce.payment.confirmed

Akkurat én gang per ordre, når gatewayen aktivt verifiserer betaling. Den kjører den samme påstand som hindrer duplikat kvitteringer, så det kan ikke dobbelt-brann din webhook.

Når å utdanne til en kontakt

The custom integration is workspace configuration: it serves YOUR store, on YOUR workspace. The moment you want to distribute the integration — other workspaces, the marketplace, versioning, signing, paid installs — package the same actions and the same declaration as a connector. The contract does not change; only the wrapper does.

Koblinger

Koble til en plattform som ikke har noeAPI(bromønsteret)

Masser av ekte plattformer ikke RESTAPIi det hele tatt. Et hotell CMS, et gammelt faktureringssystem som er spionert internt verktøy. Du kan fortsatt skrive en komplettOpsIQkontakt for én: kontakten sender en enkelt PHP-fil som operatøren faller inn i sin egen offentlige webroot, og den filen erAPI. Denne siden er hele mønsteret, med reglene som gjør det trygt å kjøre og grunnen til hver regel.

Formen på den

En normal kontakt kaller noen andres API. Et brokontakt bringer sin egen. Ingenting annet endrer seg: de samme handlingene, den samme kontekstleverandøren og den samme identitetsavtale som pakken layouter.

1
Du skriver en PHP-fil

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
Operatøren kopierer den til sin webroot

Ved siden av plattformens egen indeks. php. Ingen plattformkode er endret, ingen plugin installeres, ingenting å opprettholde på tvers av oppgraderinger til plattformen.

3
Konnektorpanelet gir dem filen

Dine innstillinger.json erklærer webhook_help. snippet_template. Kontaktsiden gjengir den som en kopierbar fil med deres live-innstillingene allerede erstattet, så det er ingenting å håndredigering.

4
OpsIQ kallar den server-til-server

Client.php sender Få forespørsler med den delte nøkkelen i en X-Opsiq-Bridge-Key. BasenURLInnstilling er plattformens rot.

The Connector Builder CAN generate this for you now. Pick the "Platform with no API" profile (or set data access to bridge) and it emits the bridge file, the matching panel snippet and the typed actions that read and write through it — for a Laravel application reading its .env, for WordPress reading wp-config.php, or with credentials you paste in for anything else. Bridge mode fixes authentication to the OpsIQ bridge protocol: the connector securely generates api_key Når den er aktivert, sender den som X-Opsiq-Bridge-Key, og binder den samme lagrede verdien i OPSIQ_BRIDGE_KEY i kopibar fil. Håndforfatter bare når plattformen din er ingen av dem, eller hvis du trenger oppførsel den genererte broen ikke dekker. En håndskrevne bru er trygg fra veiviseren: det overskrives kun en bridgefil som bærer sin egen markør.
💡
Everything on this page is shown in PHP against MySQL, because that is the reference implementation and the only combination the packaging pipeline fully supports. The pattern itself is language-agnostic and engine-agnostic: see "The bridge in other languages and other databases" for the gate in Node, Python, Go, Ruby, .NET and Java, the introspection query for PostgreSQL, SQL Server, SQLite and Oracle, and the MongoDB equivalent — along with the packaging constraint that decides how a non-PHP bridge reaches the operator.

Sikkerhetsmodellen, og hvorfor hver regel er der

Denne filen sitter i en offentlig webroot bak én delt nøkkel. Det eneste faktum driver hver regel nedenfor. Ikke slapp av noen av dem for å gjøre broen enklere.

Ringeren leverer aldriSQL

Not a WHERE clause, not an ORDER BY fragment, not a "just this once" raw query parameter. The caller names a table, a column and a value; your file builds the statement. The moment a caller can contribute SQL text, one shared key becomes arbitrary database execution.

Tabell- og kolonnenavn er validert mot info_schema

Identifikatorer kan ikke være bundet som parametere, så de må kontrolleres i stedet. Les den virkelige tabellen og kolonnelisten for denne databasen og nekte noe som er på det. En identifikator som ikke er et reelt objekt av dette skjemaet vil da ikke nå en spørring - hvilket gjør det trygt å eksponere hver tabell.

Hver verdi er en bundet parameter

Uten unntak, inkludert verdier i et søk. Validerte identifikatorer pluss bundete verdien er paret som gjør overflaten total og injeksjonsoverflata nil.

Lesninger er universelle, skriverne kan listes opp

Dette er den regelen som de fleste ønsker å hoppe over.

Hemmelige kolonner er omdelt på lesning og nektet å skrive

Match på kolonnenavn: passord, remember_tokenHemmelig, api_key, private_key, salt og token. Bytt ut verdien med en plassholder på vei ut. Avslå skrive helt på veien inn - å skrive et rå passord hash er ikke en operasjon, det er en fotvåpen. Send operatøren til plattformens egen passordstrøm.

Sletting er enkelt rad, med primær nøkkel

Aldri en bulk slette, aldri et slett ved filter. En masse fjerning er hvordan ein database dør. Hvis noen virkelig trenger én kan de gjøre det i plattformen.

Less er raddekket

Klemme grenseparameteren med et hardt tak. En løpende spørring må ikke kunne dumpe databasen gjennom en chat- melding.

Feil lukket til nøkkelen er satt

En ukonfigurert bro svarer 403 til alt. en bru som er nyttig før den konfigureres, er en bridge som var hjelpsom for en fremmed.

Konstanttid-nøkkelsammenligning, nøkkel i et header

hash_equals, aldri ==. Nøkkelen går i X-Opsiq-Bridge-Key, ikke spørringsstrengen. Så det forblir utilgjengelig fra tilgangslogger og proxy loggfiler samt referanseoverskrifter.

Få kun

En metode, en form og ingenting å smugle i kroppen. Alt som broen gjør er uttrykkelig som et GET med validerte parametere, og OpsIQ är den eneste anroperen.

Leser universelle, skriver tillatt-listet - og hvorfor

Dette er regelen som blir argumentert med, så her er resonnementet i sin helhet. Assistenten bør være i stand til å se hele plattformen: det er hva som gjør den nyttig og en lese kan ikke ødelegge noe. Skrivere er forskjellige. Denne filen sitter på et offentlig webroot bak En delt nøkkel. Hvis denne nøkkelen lekkerer, vil en ubegrenset skriveoverflate gjøre lekkasen tilsvarende full databasekontroll - en ny administrator bruker, en tømm bestilling tabell. Et tillatt-liste betyr at en utlekket nøkkel fortsatt ikke når frem til ett bord operatøren aldri aktiveres.

⚠️
DenOpsIQgodkjenningskortporter AI, ikke nøkkelen. Admin klikk Tillat på en destruktiv handling er kontroll over assistenten. Det er ingen kontrol over hvem som har brunøkkelen. Dette er to forskjellige trusler og tillatelisten er svaret på den andre.
Den operatørvendte knotten fra Botble-broen
/* ── 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';

To detaljer i sjekk nedenfor er enkle å gjøre feil. Tabellnavnet kommer allerede RESOLD, bærer installasjonens tabellprefiks mens en operatør skriver den tillatte listen udefinert fordi det vil naturlig skrive. Sammenlign begge måter eller et forutsatt installere stille tillater ingenting og alle skrivpause. Og avslaget må forklare seg selv, siden personen som leser det er admin i ett chattvindu, ikke utvikler med stabelspor.

Sjekken av tillatt liste, ordrett fra markedsplass_connectors / botble/bridgeopsiq-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);
};

Porten i full

Fire kontroller i denne rekkefølgen, før noe berører data. Kopier bestillingen samt sjekkene.

Fire porter, i rekkefølge
<?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. */

Validere identifikatorer mot info_schema

This is the piece that turns "the assistant can reach any table" from reckless into safe. Resolve the caller's table name against the real schema, tolerate a missing or extra table prefix, and return null for anything else. Everything downstream then works with a name that provably exists.

Identifikasjonsvalidering og omsetning, ordrett fra Botble broen
/** 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;
};

Lese op og skrive opp, komplett

Merk hva som er bundet og det som valideres. Filterkolonnen blir kontrollert mot den virkelige kolonnelisten, og deretter interpolert som en identifikator; verdien er bunden. Grensene klemmer. Rader omaktiveres på veien ut. Oppdateringen nekter primærnøkkelen og alle auth-kolonner samt frimerker oppdaterte_ ved når tabellen har én.

Les alle tabeller - validerte identifikatorer, bundet verdier og overtrekkede rader
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,
    ]]);
}
Write one row — allow-listed table, refused auth columns, single row by primary key
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)),
    ]]);
}

Overlevende skjemaforskjell

Plattformversjoner er forskjellige. Kolonner bevege seg, få nytt navn eller fraværende. En bro som antar at ett skjema fungerer på én installasjon. Introspektere og tilpasse i stedet: velg bare kolonnene der det finnes her, toler tabellens forstavelse og prøv de potensielle stavingene til en referanse.

Skjematoleranse, fra Botble broen
/* 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));
💡
Give your bridge an op=diag that reports STRUCTURE only — which tables resolved, which columns the main table has, and the SHAPE of the newest reference with every digit masked. It is key-gated like everything else, and it turns "the lookup does not find anything" from a support ticket into a ten-second answer. Never let it return real records.

Uniforme feil, og opptellingsfellen

En form for alt

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.

Ikke funnet og ingen kamp må være identiske

På en oppslagsoverflate, må det være et referanse som ikke eksisterer og en henvisning hvis bevis ikke samsvarer med samme respons. Forskjellige svar gjør broen til ett orakel som bekrefter hvilke referanser er ekte, noe som er gratis kundeliste eksport for alle pasienter.

Lekk aldri grunnen til en besøkende

Broen kan være nøyaktig medOpsIQ. Hva som når en besøkende bestemmes avOpsIQI ett fast avslag.

Den kopierbare filen i kontaktpanelet

Operatøren åpner aldri lageret ditt. De öppnar koblingspanelet iOpsIQog trykk på Kopier. Den kopien kommer fra innstillingerjson, og det må være samme program som bro/*.php

innstillinger.json — paneloppføringen for en brokontakt
{
  "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.

snut_bindinger overlever regenerering

Deklarer hver generert hemmelig oppgave eksplisitt. Sync verktøyet gjenoppbygger panelet kopi fra den sendte broen og gjenopprettes deretter OPSIQ_BRIDGE_KEY = {{setting:api_key}} fra denne bindingen. Utan den kan en oppgradering trofast kopiere nøkkelløs pakkefil og stille fjerne operatørens utplasseringsbare nøkkelen holder. Connector Builder sender dette bindet automatisk for genererte bropakker.

Andre stedholdere er erstattet serverside

Uavhengig av det,{webhook_url}, {webhook_path}, {webhook_secret}, {site_key}, {base_url}og{slug}er fylt inn før panelet noensinne ser snutten.

webhook_help kan være ett objekt eller en liste

En liste gir deg flere snut i ett panel, f. eks en brofil og et separat relékrok.

🚫
Ikke oppretthold snutten for hånd. Brofil og panelkopi er to kopier av ett program, og de vil drive - en bro ble oppgradert og dens panelet kopi var ikke det så alle som reinstallerte og kopiere fra panelet installert den gamle brua og stille mistet hver ny evne. Ingenting oppdaget det: konformance passerer, signaturer sendt, testene gikk forbi.
Hold de to kopiene identiske
# 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.

Hva broen bør avsløre

Formet operasjoner og en universell dataoverflate sammen. De formede de returnerer ryddelige, målbygd svar på spørsmålene folk faktisk spør; universal dekker alt annet så assistenten aldri er fast.

Formete lesninger

statistikk, hovedobjektlisten med filtrer, ett objekt som har sine tilhørende rader, katalog over det som selges. Kundesøk med historie. Disse gir AI et godt svar i én samtale i stedet for fem.

Formete skriver

De to eller tre tilstandsendringene som gjelder - sett status, kanseller. Behold de aksepterte verdiene tillatt-listet.

Type handel

For en selgende plattform eksponerer hensiktsbygd katalog, sitat, ut-/utbetaling og betalingsbevis-operasjonene, deretter kartlegg dem i commerce_roles.json med transport: bridge. Aldri kartlegge en handel skrive rolle til universell rekorden. skape/oppdatering overflaten.

Universell oppdagelse

tabeller (med radtall) og beskrive (kolonner, typer, primærnøkkel samt leselige flagg per kolonne). Slik lærer assistenten en plattform du ikke forventet.

Universal lese og skrive

spørring, post. get, record. create, record. update, poster. slette. Alle av dem validert som vist ovenfor.

Identitet, før den viktigste porten

Identifikasjonsprober kalles av ADMIN'S BROWSER, samme åpningen så de kan ikke sende en egendefinert overskrift. Deres autentisering er selve plattformsesjonen. Sett dem foran nøkkelporten og hold dem borte fra alle data som registrerer deg, og la dem aldri returnere et hemmelig sted. Se siden for kontaktidentitet.

Diagnostikk

op=diag, structure only, masked.

Bridge-handel rollekart
{
  "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"
    }
  }
}
💡
Den kanoniske rollen kontrollerer sekvens og myndighet; brooperasjonene holder plattformens egen skrivne nyttelast. Et hotell kan kreve ankomst, avreise og gjesterWHMCSkan kreve en eksisterende klient eller konnektor eid tilmelding, og SaaS-plattformen vil kanskje måtte faktureres. Kjernekoder aldri disse feltene. Broen må påkalle plattformens forretningstjenester så lagervarer, skatter, fakturaer, bekreftelsespost og krog alle løpere.
⚠️
record_payment er ikke en merket-betalt snarvei. Godta bare serververifisert leverandørbevis: nøyaktig ordre, handelsmann, beløp, ISO valuta, tilbyderreferanser, ny verifisert tidsstempel og idempatensnøkkel. Vedlikehold det gjennom plattformen sin betaling/faktura API; deretter returnere en autoritativ bestilling eller faktura readback. Et ukjent resultat må kjøre gjenoppretting før noen forsøker igjen.
💡
En skrivebeskyttet kontakt trenger ingen tillate-liste i det hele tatt. Hvis plattformen din bare noen gang svarer på spørsmål, sende en bro uten å skrive ops og alle klassene av skriving risiko forsvinner. Legg til skriver når noen ber om dem.

Sjekkliste før du sender bro

Broen nekter alt uten noe nøkkelsett

Test det. Endre om konstant til tom og bekrefte alle op svar403.

En feil nøkkel blir nektet i konstant tid

hash_equals, og nøkkelen leses fra overskriften.

Et oppsummert tabellnavn nektet

Og et ekte tabellnavn med feil prefiks løses fremdeles.

En passordkolonne vises aldri i en lese

En bok som heter en blir nektet med forklaring.

En skrive til et bord utenfor den tillatte listen blir nektet

Med meldingen som forteller operatøren hvordan du utvider den.

Panelet snutt passer til brofilen

php verktøy / sync_connector _bridge_snippet. phP rapporterer det i trinn.

Å installere koblingen på nytt er ikke nok

Hvis pakken din sender en brofil, må operatøren oppgradere kontakten ALSO omdeplete den filen i sin webroot. Si det så i panelets kropp og i endringsprogrammet ditt, hver utgivelse.

Koblinger

Starte plattformens egen ramme fra en bro

En bro som bare leser kan snakke SQL. en bru som BERBETT ting på plattformen (ei bestilling, et betalt faktura) må gå gjennom plattformens eget programlag og starte laget hodet uten problemer er der alle subtil feil i dette mønsteret liver. Alt nedenfor ble lært den vanskelige måten å leve integrasjonen på, hver regel mot en reell defekt som ikke produsert noen feil hvor som helst.

En rad i databasen er ikke en ordre

Raw INSERTs opprette en skyggerekord

Raden vises, admin lister det og den er fortsatt ikke en rekord plattformen mener at den opprettes: ingen innfødt referansenummer, ingen modell kroker, Ingen hendelser, ingen faktura, ingen kunde e-post eller noen fungerende kunden-vendende link. Kundene sitere et referanseplattform som aldri utgitt til ansatte som kan finne det. Opprett gjennom plattformens egen tjeneste; hvis det bare avslører en postbetaling service, lage grafen den forventer og overlate på sømmen det definerer.

Aldri gjenopprette plattformens nummerering

To prøver av et referanseformat gjør det enkelt å reproducere, og reproduserer den er samme skyggeskriven ett nivå ned: dagen plattformen endrer sin ordning, hver en plate er feil. Ingenting advarer deg. Ring generator (refleksjon når ikke-statisk), og les lagret verdien tilbake i stedet for å stole på hva du sendte.

Plattformsøyler holder plattformens betydninger

Before you store anything of yours in a platform column, find every reader. A column named like a free slot can be load-bearing: on the reference integration, transaction_id turned out to be the token the customer's emailed "view your booking" link resolves through: an idempotency digest stored there quietly broke every guest link. Keep your bookkeeping in a bridge-owned table: UNIQUE(operation, idempotency_key) is the replay guard, the constraint refuses the concurrent twin, and the recovery lookup reads the same table the create wrote. Create that table BEFORE beginTransaction: MySQL DDL commits an open transaction implicitly.

Hendelser, lyttere og dobbelt e-postfellen

Les kilden til tjenesten før avsendelse

Hvis plattformtjenesten du ringer allerede sender arrangementet, sende det selv sendes kunden to bekreftelsese-poster og genererer 2 fakturaer. Dersom ingenting er å lytte, avsendelse ikke overføre noen. Ingen feil heves en feil. Reflekter metoden, dele kildelinjene sine, og les hva den faktisk gjør: et navnbasert gjetting og til og med ett regulært over kroppen begge fikk dette galt før kjelda løst det.

get Lytteres () skjuler sannheten; getRawListeners( ) forteller den

Laravel pakker klasselyttere i stenginger, så få Lytters() rapporter [email protected] for alt. getRawListeners () navnger de faktiske klassene. Send aldri ut en hendelse som du ikke kan nevne.

ShouldQueue does not mean "runs later"

Med kø=sync (standarden på mange produksjonsinstallasjoner) kjører en køyelydende lytter INLINE i din broforespørsel. Boot-kontekst er dens gjengivelse kontekst: hver registrering eller URL defekt i oppstarten lander i kundens innboks. Sjekk oppsett( 'queue.default') før resonnement om hvor noe kjører, og se på jobber/failed_jobs Før en arbeidstaker ble involvert.

Guard retries med plattformens egen stat

En tjeneste som avgir betingelsesløst må kalles nøyaktig én gang. Markøren som ikke kan drive er plattformens egen rekordtilstand (bare anrop mens posten fortsatt venter), ikke et parallellt flagg til din, som kan være uenig med den.

Den hodeløse støvlen er ikke web boot

Registrer hva web boot registers

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 ALLEURLrot, ikke bare routeren

De fanget forespørselspunktene på broskriptet, så rute() url() og aktiva() genererer site.com/offentlig/opsiq-bridge.php/checkout / TOKEN: en kundelenke gjennom et JSON endpoint. forceRootUrl( config (' app.url') løser generatoren; OBS-disk har sin egen rot, så den emailede logo forblir brutt til filsystemer. disks.public.url er satt også (det løser lett, så innstilling av det ved oppstart fungerer og bare når tomt eller skript-relatert: en operatørs CDN URL Det er ikke ditt å overstyre).

Gi deg før du gir over

Plattformens tjenester leses gjennom sin egen forbindelse og kan ikke se din åpne transaksjon. Ringes før forpliktelse, finner en post-betaling tjeneste ingen fullført betaling, stille etterlater rekorden ubetalte, og fortsatt brann sine hendelser så kunden blir epostet om et register plattformen mener er ubetalt. Legg inn grafen, deretter ringe.

Ærlige regler

Ingen skyggespalter

Hvis den opprinnelige banen er ugjennomførlig, nekte med en omprøvbar feil før noen penger beveger seg. Aldri oppfinn et referansepunkt, aldri rå-update a status for å gjøre halvintegrert rekord ser fullført ut. En verifisert betaling hvis innfødt behandling mislyktes går til avstemming som needs_attention: pengene er ekte, staten er ærlig - betalt ennå ikke behandlet

Rapporter fakta, ikke din erklæring

"The service ran" and "the customer was told" are different facts: the reference integration shipped a complete-looking email with every field blank while the ran-flag said true. Return them separately (processing completed, notification attempted), keep a per-call platform_notified that forces the OpsIQ fallback confirmation whenever the platform did not process, and never claim delivery: an inbox is not observable from a server.

Mål og skriv deretter

Send en lesebeskyttet evnesonde i broen: klasseeksistens, metodesignaturer og kildeskiver av metodene du har tenkt å ringe til, rå lyttere, kø driver. (Når et spørsmål kan besvares ved å kalle på en ufarlig funksjon) den levende samtalen seg selv. Fem teorier om én hul e-post døde mot målingene før kjelden løst det. En sonde rund koster filkopi; feil skriving på en live plattform kostnader kunden.

Koblinger

Broen på andre språk og andre databaser

Broen mønster er ikke et PHP-mønster. Hva OpsIQ Ring er et HTTP-endepunkt, så filen kan være Node, Python, Go, Ruby eller .NET og lagret bak den kan bli noe som helst SQL motor eller MongoDB. Hva som er PHP-formet, er emballasjerørledningen og den begrensningen bestemmer hvordan broen når operatøren. Les leveringsdelen først: det er delen som overrasker folk.

Hva kontakten faktisk krever

Det er ikke noe som heter et språk.

Transport

HTTPS. En får forespørsel per samtale, ingen kropp eller annen metode.

Autentisering

En felles hemmelighet i X-Opsiq-Bridge-Key forespørselsoverskrift, sammenlignet i konstant tid. Ikke en spørring parameter, ikke ein informasjonskapsel eller Basic auth.

Parametre

Spørringsstreng. op navn på overflaten, do Navn på operasjonen, resten er den operasjonens argumenter.

Svar

JSON. {"success":true,"data":{...}} eller {"success":false,"error":"snake_case_reason"}. Innholdstypeprogram/jsonOg ingen kake.

Statuskoder

200på suksess.403ukonfigurert eller feil nøkkel,404ikke funnet,405feil metode,400Dårlig argumentasjon,501Ikke støttet i dette skjemaet.

Det er alt

Ingen rammeverk, ingen kjøretid eller noe OpsIQ -bibliotek på din side. Hvis det kan tjene som den kan være en bro.

Levering: Hva kan bo i broen/, og hva må ikke

The signed package covers a fixed list of file extensions, and a file outside that list is left out of the ZIP. A bridge in a language the list does not cover therefore cannot ship inside the package — but it can no longer disappear on you either. Since 26 August 2026 a file in bridge/ at pakkeren ville slippe er en hard samsvarsfeil, så pakken nekter å passere i stedet for installere uten broen.

Hvordan en bro/mappe behandles på byggetid
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 JavaScript — Full støtte

Filen skip i det signerte ZIP, og snuttsignerten holder panelet ditt kopi byte- identitet til den, uansett hva av de to er. Drivkontrollen leser hver fil på bro/ ikke bare PHP en, så en oppgradert bru med et staveslot panel kopier mislykkes bygget på hvert språk.

Alt annet - bare lever gjennom panelet

Panelet snutt er vanlig tekst uten anelse om hvilket språk det har, så den fungerer for enhver stabel. Legg hele programmet i webhook_help. snippet_template, navng filen i bunt_filename og ikke la en kopi i broen/ - konformance vil nekte pakken heller enn å sende den hul. Si klart på Webhook _help. body at operatøren kopierer denne fila snarere enn få den fra pakke.

Hvis du virkelig trenger et annet språk i pakken

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.

💡
Navn på filen i webhook_help.snippet_filename når pakken din sender mer enn én bro. Det er slik verifiseringa vet hvilken bru en panelkopi tilhører; uten den, rapporteres det et tvetydig par som samsvarsvarsel og at snutten ikke blir vist.
⚠️
Poenget med drivsjekken er at en brofil og dens panelkopier er to kopier av ett program, og vil divergere. Genieres i stedet for hånd-rediger: php tools/sync_connector_bridge_snippets.php --applySå skriv du på pakken.

Porten på seks språk

Same fire kontroller i samme rekkefølge overalt: mislykkes lukket med ingen nøkkel, en metode og konstant tidsnøkkelsammenligning fra overskriften. Den eneste virkelige fellen er sammenligningen, og det er en annen felle på hvert språk.

⚠️
Sammenlign SHA-256fordøyelse av de to nøkler i stedet for tastene selv. Det er riktig på hvert språk, og det sidetrinner at flere konstant-tid komparatorer enten kaster eller lekkasje på en lengdematch - Node's timingSafeEqual øker et områdefeil når bufferene varierer i lengden, noe som gjør feil nøkkel til en500i stedet for403.
Node.js — porten
// 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 — porten
# 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)
Gå, Ruby . NET og Java - samme sammenligning
// 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)));
}

Validere identifikatorer på hver databasemotor

Sikkerhetsegenskapen endres ikke: en tabell eller kolonnenavn den som leveres må kontrolleres mot det virkelige skjemaet før den er interpolert, og alle verdier skal være et bundet parameter. Bare introspektionsspørselen, siteringstegnene og pagingsklausulen varierer.

MySQLogMariaDB

Tabeller: SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?. Kolonner: det samme mot information_schema.COLUMNS med AND TABLE_NAME = ?. Sitert med backsticks, dobler enhver ryggstikk inne i. Page with LIMIT n OFFSET m.

PostgreSQL

Same info_schema visninger, små bokstavnavn WHERE table_schema = $1 (vanligvis public). Sitert med dobbelt sitats, dobbel noen todobbelte siteringer inne. Page with LIMIT n OFFSET m. Se folderegelen: en ikke-sitert identifikasjon brettes til små tilfeller, så sammenlign kaseufølsomt når du løser et navn.

SQLServer

Same INFORMASJON_SCHEMa visninger. Siter med firkantede parentes, dobler alle lukkebraketten inne i. Paging trenger en VAREERING AV: ORDER BY [id] DESC OFFSET @o ROWS FETCH NEXT @n ROWS ONLY.

SQLite

Tabeller: SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'. Kolonner: SELECT name FROM pragma_table_info(?) - bruk den tabell-verdid form, fordi bare PRAGMA table_info(x) erklæring kan ikke ta en bundet parameter og inviterende streng interpolasjon er det nøyaktig hullet du prøver å lukke. Siter med doble sitater LIMIT n OFFSET m.

Oracle

Tabeller: SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = :owner; kolonner fra ALL_TAB_COLUMNS. Siter med dobbelt sitat, og husk en ikke-sitert identifikasjons folder til UpPER Case, det motsatte av PostgreSQL OFFSET :o ROWS FETCH NEXT :n ROWS ONLY 12c og senere.

MongoDB

NeiSQL, så ingen identifikasjon interpolasjon og ingen bundet parametere - en annen disiplin for samme mål. Se nedenfor

Introspektionsspørselen per motor
-- 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;
💡
Resolve, then use the RESOLVED name. Never pass the caller's spelling through to the query even after checking it — look the real name up in the list you read from the schema and interpolate that. It costs nothing and it closes the gap between "this name matched something" and "this is the name I am about to run".

MongoDBDe samme reglene, utenSQL

Det er ingen spørringsstreng å injisere i, så folk antar at det ikke finnes noe som skal beskytte. Filteret dokumentet. Passing caller-SuppliedJSONRett inn i find() La en anroper sende {"$ne": null} eller {"$gt": ""} hvor du forventet en verdi, og velg stille hvert dokument. Bygg filteret selv.

MongoDB - samlings tillate-liste, skalarforsterket filter, projeksjon som 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();
Samlingsnavn kommer fra listCollections

Det er din info_schema. Løs oppkallerens stavekontroll mot den og bruk det løste navnet.

Tving hver filterverdi til en skalar

En streng () eller et nummer() rundt er hele forsvaret mot operatørinjeksjon. Et dokument der du forventet en verdi, tilsvarer noSQL- ekvivalenten av et bortfallende sitatet.

Prosjektion er redaksjonsregelen

Utelukk hemmelig-formede felt i projeksjonen, slik at de aldri forlater serveren og ikke sletter dem fra resultatet etterpå.

Sletter opphold enkeltdokument av _id

SletteOne med et løst _id. Aldri sletteMange, og aldri en filtrering som har påvirket oppkalleren.

Skriver opphold tillatt-listet

Same resonnement som SQL: navngi samlingene en skrive kan røre, og nekte resten med en forklaring.

identitetsendpoint på andre språk

Identifikasjonsproben er den andre halvdelen av en bro, og det er også HTTP. Signeringsblokken er identisk på alle språk: base64url nyttelastene HMAC-SHA256 som strengen, bli med i et punktum.

Ikke skriv dette fra grunnen. Innstillinger, Support Portal bærer en klar rute per språk for portal (eit tidspunkt og to minutters toket). Fjernliggende nettsteder, ditt område, Kodene dine, C. Kjend deg automatisk påloggede kunder har chat-versjonen pr. sprog (ein time pollett pluss oppdatering manager) som passer til stabelen din.
Hva skal endres når du gjenbruker det

Disse snuttene mint et PORTAL håndoff token, som er bevisst strengere: det bærer jti og single_use : sant og liv om120sekunder fordi det reiser i enURL. En bro eller widget identitet token bærer ingen av dem og bruker en lengre exp, minutter til timer.

Hva som forblir det samme

site_key, iat, exp og en toppnivå-godkjent: sant plus et administrator eller kundesubjekt med ID og brukernavn eller email. Same krav, samme signaturen, samme hemmelighet.

Begge poliksformene bekrefter

En tredelt JWT signert HS256 fungerer, og det samme gjør to-dels base64url nyttelast pluss heks HMAC som PHp referansen sender ut. Bruk uansett hvilket språk bibliotekene ditt er naturlig - et J W T biblioteket er vanligvis den kortere banen utenfor php .

Aldri mint det i nettleseren

Sann på alle språk. å signere klientsiden betyr forsendelse av nettstedets hemmelighet til hver besøkende.

Valg, ærlig

Plattformen er PHP

Skriv broen i PHP. Det skiper i pakken, det er driv-sjekket og kan starte plattformens egen rammeverk for å lese en live sesjon til identitetssonden. Ingenting annet gir deg alle tre.

Plattformen er node

En . js bro skip, tegn og er driv-sjekket nøyaktig som en PHP én. Ingenting gis opp.

Plattformen er Python, Ruby, Go . NET eller Java

Lever gjennom panelets snutt og si det i panelkroppen; ikke la filen være på bro/, hvor konformans vil nekte pakken. Koblingen er ellers helt normal: handlinger, kontekstleverandører, identitet-og gjesteoppslag alle fungerer den samme fordi ingen av dem bryr seg om hva som svarer HTTP-samtalen.

Du kan ikke kjøre en prosess på plattformens vert

Da er bromønsteret ikke det riktige verktøyet. En bru eksisterer for å nå en plattform fra sin egen vert. Hvis du bare kan komme frem utenfor, skriver du et vanlig API -kontakt mot hvilken overflate den eksponerer.

⚠️
En annen begrensende verdt å planlegge rundt: en identitetsprobe må lese plattformens innloggingssesjon, som vanligvis betyr løping inne i plattformen egen prosess eller minst på vertshuset med tilgang til sin øktbutikk. En bro skrevet av et annet språk fra plattformen kan tjene data komfortabelt og kan fortsatt slite for å svare op=admin_identitet. Hvis det er ditt tilfelle, skip databroen på språket ditt og identitetssonden i plattformens.
Koblinger

Gi assistenten begge halvdeler: handlinger og kontekst

This is the single most common thing missing from a connector that "works but is useless". Actions let the AI DO things. Context sections let it KNOW things. A connector needs both, and most questions an admin asks are answered by context, never by an action. A connector with perfect actions and no context provider will truthfully report that it cannot see anything.

De to halvdelene

Handlinger - hvordan AI gjør ting

Deklarert i handling.jsoneller returnert av registerActions(). Modellen velger en, fyller sine parametre ogOpsIQutføres det. Handlinger er for verb: avbryte denne bestillingen, åpne den billetten og endre status.

Kontekstseksjoner - hvordan AI vet ting

Assembled by a ContextProvider before the model runs. "How many orders this month", "who are my newest customers", "what do we sell" all resolve through a context lookup, and never touch an action at all.

⚠️
Symptom of a missing provider: the assistant answers "No enabled connector supplied this context section" while the connector is installed, enabled and passing its connection test. Nothing is logged, nothing errors. That message means no provider claimed the section.

Den universelle delen ordforråd

OpsIQbe om seksjoner med generisk navn. Din jobb er å bestemme hva hver enkelt betyr på plattformen din og svare det. En hotellbestilling IS hotellets ordre; et rom iS som hotellet selger. Kart, ikke oppfinne.

bestillinger / avventing_ordre

Uansett hva en transaksjon er på plattformen din: bestillinger, reservasjoner og jobber. Ventar_ordre er den samme listen filtrert til de uferdige.

Kunder

Kunden roster.

products

Plattformen selger: produkter, rom og planer.

Fakturering

Inntekter og pengeformede total, pluss teljing etter stat.

billetter, tjenester, domener, servere

Bruk disse når plattformen din virkelig har dem. Ikke tvinge en kartlegging - et ubesvart avsnitt er bedre enn feil ett.

Alt annet plattformen din har

Deklarer din egen. En leverandør som erklærer seksjoner (): ['licensier’, 'shippings`] har de slått seg sammen til den universelle oppslagstillatelsen sin liste, så plattformspesifikke utløsninger blir tilgjengelige uten noen kjerneendringer.

Feilen som koster en dag

En kontekstleverandør må implementere grensesnittet. Registertypen sjekker det, så en klasse som bare Looks rett er hoppet over - uten feil eller noe sted.

KontekstProvider. php - kontrakten, fra Botble referansepakken
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 '';
    }
}
Registrer det fra kontakten

Implement ConnectorInterface og returnere leverandørene fra kontekstProviders(). Koblingsklassen kan også implementere KontextSamarbeidsområde direkte, og bli registrert som seg selv.

Returner vanlig tekst, ikkeJSON

build( 2) returnerer en tekstblokk som er konkatert i spørringa. Skriv den for leseren: ei overskrift, og deretter én linje per rad.

Gå tilbake i stedet for å kaste

Fang dine egne unntak. En leverandør som kaster er logget og hopper over, men å returnere '' er kontrakten.

Byggeren kan ikke skrive seksjoner() for deg

Den genererte KontekstProvider. php skips sections(): array { retur []; } og veiviseren har ikke noe felt for den. Fyll det i hånd - og husk at publisering fra guiden Overskrider filen. Kopier redigeringene dine ut først.

⚠️
State the true TOTAL, not the number of rows you sent. A page is not a total. A provider that lists twenty rows without saying so gets the assistant confidently answering "you have 20 bookings" when the platform holds 669. One cheap COUNT and one explicit line — "TOTAL on file: 669 (this list shows the newest 20 only)" — is the whole fix, and a confidently wrong count is worse than no count.
En seksjonsblokk som ikke kan feilbetales
$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);

Navngi dine handlinger slik at OpsIQ kan fortelle lesninger fra skrivere

OpsIQ klassifiserer en handling av WORDS i sin action_id, og det er bevisst konservativt: alt den ikke kan gjenkjenne blir behandlet som et skrivekort. Få verbet rett til høyre og ei lesning bare kjører.

1
is_destruktiv eller krever _bekreftelse gevinster

Hvis det enten er satt, trenger handlingen alltid godkjenning. Deklarer dem ærlig - dette er hva overflater administratorens godkjennelseskort.

2
Et skriveord hvor som helst i ID gjør det til en skriving

Legg til, åpne, oppdatere, redigere, endre, modifisere, fjerne, slette, ødelegge, avbryte, tilbakebetale, avslutte, si opp, aktivere, avvise, sende, markere, gjøre om, legge ned, ta bort, lukke, gjenåpne, overføre, gi, angige, slå på, slå av, deaktivere, opprette, bruke, belasta, betale, levere, fornye, forbedre, flytte, bevege seg, eskalere, flagget, registrere, synkronisere, trykke, installere, kjøre, starte, begynne og slutte å gjenoppta.

3
Et leseord gjør det til en læsning

få, liste, søk, finne, vise, seeing, vist, hente, telle, oppslag, beskrive, lese, eksportere, forhåndsvisning, test, ping, status, sammendrag, detaljer, nylig, historie, sjekk, loggen, statistikk, metriske, oversikt, inntekter, neddeling, rapport, analytiske, balanse, bruk, kvota, øyeblikkelig innsikt, matning, utkast til nyhetsbyrået.

4
Så bestemmer HTTP metoden

Få, hør og valg er lesninger.

5
Ellers er det en skriving

Ukjent betyr godkjenning som kreves. Denne standarden er intensjonell

⚠️
Skriveord er kontrollert før lese ord, så et blandet navn som get_and_sync-ordener klassifiseres som en WRITE. Velg ett verb, sett det først og hold det rent: list_ orders, get_customer search _bookings, cancelon_bestilling, set_ Ordre_status.

Bare erklære moro_api hvis plattformen virkelig har en

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.

Byggeren bestemmer det fra datatilgangsvaret ditt

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.

Håndgodkjente pakker må fortsatt få det riktig

Hvis du skriver manifestet selv, deklarer nøyaktig en av moro_api eller plattform _bridge. Konformanse behandler platform_broen som unnslippelekken er forventet å ha et brokontakt, og Builderen nekter en spec som hevder at plattform_ Bridge på enAPIKoble til.

Hold ai_api_reference. md ærlig uansett

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.

Lær administratoren hjernen om plattform

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

Hva denne plattformen er, hvordan dataene blir formet og hva dens objekter kalles. Og de quirks som ellers ville gjøre assistent gjettet. Skriv det til en kompetent kollega som aldri har sett plattformen.

ai_api_reference.md

Den oppkallbare overflaten. For en brokontakt er dette op og gjør ordforråd med sine parametere, ikke et REST endepunkttabellen.

Budsjett

Grovt6,000tegn som holdes per kontakt, og om24,000tegn for hele blokken på tvers av hver aktivert kontakt. Over per-connector cap filen er kutta; bli kortfattet før trancatoren er det.

presisjon betaler

Disse filene er forskjellen mellom assistent ved å bruke universelle tabellverktøy og svare fra feil seksjon fordi ingenting har fortalt det disse verktøyene eksisterte.

💡
Begge filene må være i INSTALLED-pakken, ikke bare kildetreet. De er vanlige pakkefiler så de dekkes av signaturen og sendes på ZIP - som også betyr å redigere et etter signering bryter segningen.
Koblinger

Identitet gjennom en kontakt: admin, kunde og portal

One signing contract serves three surfaces. The connector's job is to turn "who is logged in on the platform" into a signed token OpsIQ can verify, and then to present the verified subject in OpsIQ's shape. The connector never authenticates anyone — the platform does, and the signature carries that assertion.

De tre overflatene, en signer

Admin - din ansatte, inne i backend

Et administratoremne. Skjermprogrammet lastes inne i plattformens admin-panel og alle ansatte er matchet til sin egen OpsIQ agent. Full walkthrough på Administrasjonswidgetsiden.

Kunde - en kunde som er logget inn i klientchat

Dette er det som lar en kunde få sin HELE-konto i stedet for et anonymt oppslag: hver ordre, full detalj og alle selvbetjeningstiltak du tillater.

Portal — a deep link into the support portal

De samme kravene pluss jti og single_use, med en120- andre livet, fordi token reiser i enURLog må være brukervennlig én gang. Ikke håndrull denne: Innstillinger, Support Portal har en klar snut per språk, og plattformen minterer det for deg når kontoområdet kjører på serveren.

Lønnslastkontrakten

Dette er kravene som verneplikterne sjekker. Ingenting her kan være valgfritt, uansett et delvis eksempel andre steder vil foreslå det.

site_key

Toppnivå. Må være lik nettstedsnøkkelen til forespørselen, eller toket blir nektet.

iat og exp

Toppnivå, Unix sekunder. exp må være i fremtiden og etter Iat. Et tegn mer enn et minutt fremover blir nektet. Hold livet kort - minutter til timer.

autentisert: sant

Toppnivå, ved siden av exp. Plattformens påstand om at et ekte menneske er logget inn

plattform

En kort slanke som navngir opprinnelsen. Anbefalt, og det lar en kontakts identitet leverandør fortelle sine egne polletter fra andre plattformens.

administrator eller kunde

Et objekt som navngir emnet. Det må ha med seg en ikke-tom id, og et brukernavn eller email - per admin adgangsporten matcher på de. Inkluder begge når du har både.

Minting, ordbok fra Botble-broen
$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);

De to verifiserte og den svikt de forårsaker

OpsIQ har to symbol-profiler, og de var ikke identiske. Å vite dette sparer deg en ettermiddag fordi symptomet ser ingenting ut som årsaken.

Admin- widgeten har sin egen verifisering

opsiq/embed/admin_ajax.php bærer en lokal verifisering som aksepterer det autentiserte flagget i enten posisjon. Samtaleliste, historie og ulest alle går gjennom den, så de godkjenner botten.

Den delte verifikatoren er strengere

opsiq/includes/customer_identity_token_verify.php sitter bak chat-strømmen og kjernen AJAXAPIDet hadde historisk behov for flagget på TOP-nivå.

Symptomet

History and conversations work. Every chat turn answers "Admin login required". It reads exactly like a session bug and is not: the token is missing the top-level flag.

Hva dagens kjerne gjør

Det aksepterer nå flagget på øverste nivå ELLER inne i emnet, så kontrakten er ensartet. Eldre kjerner leser bare toppnivå. Utskriv den kanoniske form og pakken fungerer på hver utgivelse.

Dette er maskinsjekket nå. Enhver fil i pakken som mynter identitet tokens blir statisk skannt mot kontrakten, og en nyttelast plattform ville nekte å samsvare med den nøyaktige filen og linjen. Kjør det selv: php verktøy / verify_idendity_contracts. php.

Signert kunder i klientchat

To ting må være sant. Core skal stemple den verifiserte kunden, og kontakten din bør presentere det.

1
Broen din eller endepunktet minterer et kundetokens

Same signerer som admin en, med et kundeemne. Les kunden fra plattformens egen sesjon. Hvis din plattform registrerer kunder på en annen vakt enn administratorer, les den garden du vil ha og aldri faller tilbake over emner - det er slik en klient ville bli levert ett Admin token.

2
Core verifiserer og frimerker det

På et gyldig symbol, frimerker kjernen det verifiserte emnet i sesjonen. Leverandøren leser en bevist identitet; den bekreftes aldri.

3
Din identitetsleverandør presenter den

detectCustomer() returns the OpsIQ shape. It MUST implement OpsIQ\Platform\IdentityProviderInterface, or the registry silently skips it — the same trap as the context provider.

4
Dine kundeskoplede handlinger aksepterer en customert_id

Og OpsIQ låser den til verifisert identitet før utførelse. Modellen kan ikke levere det.

IdentityProvider. php - les den dokumenterte identiteten, presentere det i OpsIQs form
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;
    }
}

Kundeskoplede handlinger: to låser, begge nødvendige

Modellen må aldri velge hvem data den leser. OpsIQ håndhever det på sin side, og plattformen din skal også håndheve dem på andre siden. En lås er en feil fra lekkasje; to låse er kontrakt.

Låse1 — OpsIQOverskriver identitetsparametrene

Før en kunde-chat handling kjører, erstatter OpsIQ /hver identitetsformet parameter med den VERIFIED besøkendesidentitet: klienten_id, kundend, bruker_ID, userride, kunder_identifier.

Låse2— plattformen din re-scopes hver spørring

Ta id-en du ble gitt og legg den til hvor klausulen for hver lese, og alle skrive på overflaten. Stol aldri referansen i anmodningen selv. En kunde som spør om en annens ordre må komme tilbake tom, ikke forbudt.

Navngjev parametrene dine så lås1Kan finne dem

Kall det kunde_id, ikke cust eller ref. En parameterOpsIQgjenkjenner ikke er en parameter den kan ikke låse.

⚠️
Gi den loggede kundeoverflaten sin egen drift, adskilt fra administratorens, selv når SQL ser lignende ut. To overflater med ulike regler holder seg ærlige; en flate med et flagg blir til lekkasje dagen noen redigerer feil gren.

Null side ledninger: den kontakt-deklarerte sonde

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.

innstillinger.json— sondeinnstillingen
{
  "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."
}
Sonden kalles av nettleseren

Same-origin, så det kan ikke bære en egendefinert overskrift. Dens autentisering er plattformøkten. Sett den AHEAD av brutastporten din, hold den unna platedata og returnere ingenting i det hele tatt for et logget ut besøkende.

Svar på en fast form

{"success":true,"authenticated":true,"admin":{...},"identity_token":"..."} — and {"success":false,"authenticated":false,"error":"..."} when nobody is signed in.

Ingen lengeslevende hemmelighet i sidekilden

Bare det underskrevne, utløpende token.

De komplette endepunkt implementeringene for Laravel,WordPress, WHMCSSymfony og vanlig PHP, pluss hardwon Laravel spesifikasjoner og feilsøkingsordre er på admin widget-siden. De er den samme koden for et kundesubjekt: endre vakten du leste og emnenøkkelen du signerer.

Koblinger

Publisering: Redigerer ikke mappen

Den vanligste måten å miste en ettermiddag på er å redigere et koblingselement under markedsforbindelser/, installere det og finne ingenting endret. Installeringer leser ikke den mappen. De trekker ut ett signert ZIP fra markedskatalogen. Publishing er rekkefølgen som setter endringene dine i dette posten.

Hvorfor redigeringen ikke gjorde noe

marketplace_connectors/<slug>/ is the SOURCE

Det er der du jobber.

Katalogen har et signert ZIP

En installasjon nedlastinger som ZIP, verifiserer signaturen og pakker ut den. Til du gjenoppbygget Zip fortsetter hver enkelt installere å få gamle pakken.

Connector Builder publiseres et annet sted

It writes into /connectors/<slug>/ on this install. That is a local connector, not a marketplace release. The two paths do not overlap.

Utgivelsessekvensen

1
Bump versjonen i TWO-filer

innstillinger.jsonog connect_contract.json. Konformanse sammenligner dem og mislykkes hvis slim, versjonen eller evnen settet er uenig. Legg til en endringLOG.md-inngang mens du befinner deg der - det er et nødvendig fil.

2
Sync broen om

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
Signer hver pakke på nytt

php verktøy/resign_all_connectors. php - signaturen dekker fil hashes, så alle redigeringer ugyldiggjør det. Signer sist etter hver fil er endelig.

4
Eksporter signaturnøkkelen, så frø

Seeder signerer hver pakke som den bygger ZIP, og det kjører i en sammenheng der nøkkelen ikke kan leses fra innstillingene - så det må komme fra miljøet.

5
Omdøp brofilen hvis du sender en

Installere kontakten på nytt. Den berører IKKE kopien som sitter i operatørens webroot. Fortell dem, i panelet og endringloggen.

Hele utgivelsen, i rekkefølge
# 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
⚠️
Why the export is not optional: the signer looks for the key in OPSIQ_CONNECTOR_SIGNING_KEY first and the connector_signing_key setting second. The seeder runs on the SaaS bootstrap and tools/sign_connector.php boots nothing at all, so in both the settings reader does not exist — with no environment variable there is no key, and you get "No signing key available" or every package reported as signing_failed. Only tools/resign_all_connectors.php boots OpsIQ and can find the key on its own.

Hva faktisk skip

Bare fil signaturdeksler

ZIP er bygget fra signererens egen filliste, så en utilsiktet fil som sitter i pakkemappen din sendes ikke. Det vil være bevisst: En uvedkommende fil brukes til å ri sammen med kunderne.

Dekkerte utvidelser

php,json, jscssmd, txthtml, sh, svg. png; jpvjsonselv er utelukket fra hashes og deretter lagt til ZIP slik at installasjoner kan verifisere.

Alt annet er rapportert som ikke-pakket

Frønavnene navngir hver fil den etterlot. Les listen. En fil du forventet å sende som vises det betyr en feil forlengelse eller et galt sted - ikke en stille suksess.

Redigering av en fil som er dekket bryter forseglingen

Inkluderer en Markdown-fil. Skriv den pakken på nytt

Nødvendige filer i en distribusjonsbar pakke

connector.php

Må returnere en forekomst av ConnectorInterface.

settings.json

Manifest: slank, navn, versjon, manifest_version, kompatibiliteter, funksjonalitet, connector_contract_versjon.

connector_contract.json

Maskinlesbar kontrakt. Dens snegle, versjon og evne sett må være identisk med innstillinger.json.

LESME. md, DEVELOPER. med

Alle tre er kontrollert for eksistens og minste størrelse. DEVELOPER. md trenger ekte innhold, ikke en stub.

En fil per deklarert evne

Hver funksjon navn den forventer - KontekstProvider. php for kontekst, Identityprovider. phP for identitet, GuestLookupPROvider

Ingenting som ser ut til å være et kreativt

Konformans skanner de tre Markdown-filene for hemmelige verdier og private nøkler, og mislykkes på et hit.

Sjekk før du sender den

Den fulle konformans suiten er den samme som en installasjon kjører. Det kontrollerer manifestet mot kanonisk kontrakt, at løpstid og åpenbare evner samtykker i å alle deklarert evne har sin fil og sine metoder, identitets-token avtale i hver myntfil, broensnippets matching, gjestesupplevelse tillateliste hygiene, handling unikhet og bekreftelse sikkerhet samt pakkesignatur.

Kjør alle fire før hver utgivelse
# 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
💡
En feil er forventet og ikke et problem: pakkesignaturen sjekker en advarsel mens du fortsatt redigerer. Det fjernes det øyeblikket som du logger på nytt. Alle andre feilene er virkelige.
Koblinger

Kontaktpakke og referanse til livssyklus

Dette er kildenivåkontrakten for å bygge en kontakt som OpsIQ kan oppdage, konfigurere, validerer, aktivere, utføre, testa, signere og distribuere.

Utviklerreferanse
KontaktpakkeEn kontaktpakke har en nødvendig koblingsimplementasjon og manifester, med valgfrie handlinger, oppskrifter, kunnskap, eiendeler og signaturmetadata.KontaktpakkedeveloperMANIFESTv1LIFECYCLEAdministrertARBETSPESSOmfangetLIV ARBETSPESSONEconnector.phpKontakt klasse / fabrikkNødvendigsettings.jsonManifest og innstillingsskjemaNødvendigactions.jsonHandlingsdefinisjonerValgfrittsignature.jsonPakkesignaturmetadataUtgivelse1DECLAREManifest og evner2IMPLEMENTLivsyklus og leverandører3VALIDATETest, tegn og pakke
En kontaktpakke har en nødvendig koblingsimplementasjon og manifester, med valgfrie handlinger, oppskrifter, kunnskap, eiendeler og signaturmetadata.

Minimum pakke

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

Manifest kontrakt

settings.json bruker manifest versjon 1. Validereren forventer en sløv, navn, versjon, manifest_versjon, kompatibilitet, beskrivelse og evner. opsiq_min og opsiq_max. Utgivelsesstatus er en av produksjon, beta, Forhåndsvisning eller malEldre pakker kan normaliseres med advarsler, men en ny pakke bør passere uten advarsel.

Kjernekontaktgrensesnitt

  • Identitet og oppsett: slug(), name(), description(), capabilities(), settingsSchema(), testConnection().
  • Livsyklus: onEnable() og onDisable()Deaktivering må være ikke-destruktiv; datautrensning er en egen bevisst operasjon.
  • Inngående/sync: handleWebhook(), poll(), backfill()Poll håndterer gradvis arbeid; backfilp import historie og må være trygt å gjenta.
  • Støtte: pushReply() der plattformen tar imot svar.
  • Handlinger: registerActions() tilby kjørbare handlingskontrakter.
  • Sikkerhet: securityCapabilities(), syncBlockedIp(), removeBlockedIp(), testSecuritySync().

Den abstrakte basen tilbyr også valgfri buntet backfill, kundeliste, e-postkontooppdagelse/skaping, abonnenter, administrator / kunder deteksjon, fakturerings/context/identitetsleverandører, responsutvinning og forsøk på HTTP-samtaler JSON-banetilgang, uklar rangering og paginasjon hjelper.

Funksjoner og autentisering

Støttede navn inkluderer handlinger, utløsere, kontekst, identitet, salg og fakturering 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 og ai_ticketsByggeren tilbyr API Nøkkel, bærende, grunnleggende HMAC, OAuth 2 kundeinformasjon, OAuth 2 autorisasjonskode og egendefinerte autentiseringsmaler.

Register livssyklus

  1. Oppdaging laster pakken og validerer det manifest.
  2. Konfigurasjonen lagres per arbeidsområde; hemmelighetene krypteres.
  3. Tilkoblingstesten viser legitimasjoner uten å aktivere kopling.
  4. Aktiver samtaler onEnable(), synkroniserer handlingsdefinisjonene og kan starte den første tilbakefyllingen.
  5. Polling/webhook / subscriber-utførelsen alltid bærer arbeidsområde sammenheng.
  6. Slå av samtaler onDisable() og stopper aktivitet uten å slette importerte data.
  7. Purge er en separat eksplisitt operasjon.

Korrekthetsregler

  • Bruk arbeidsområde/site-nøkkelen i hver lese, skrive, cachenøkkel, deduplisering nøkkel og webhook oppslag.
  • Ta tilbake påfylling, webhook inntak og skrive handlinger idemppotent. Skriv opp en ekstern ID/event-ID hvor plattformen gir én.
  • For fjernsystemer, bruk deres API Aldri anta at deres databasetabeller eksisterer i OpsIQ Tilkobling.
  • Return strukturerte, kundesikre feil. Aldri avsløre hemmeligheter, rå leverandør spor eller et annet arbeidsområdes eksistens.
  • Kun kan erklære pakken faktisk implementere. En actions.json katalog gjør ikke en handling brukbar før koblingen er installert, aktivert og konfigureres.

Testing og frigjøring

Kjør PHP-lint, manifest valideringstester, tilkoblingsprøver, handlingsplante tester, webhook signatur/opptakstester, arbeidsområdeisolasjonsprøver, backfill-repeat-prøving, deaktiveringsforbindelsesøk og feil/gjenkjennelse prøver. En markedspakke bør deretter signeres og verifiseres inkludert installasjon / utslipp/webhook dokumentasjon samt oppgi sin sanne frigjøring status. Koblefliseretningen er det autoritative tilgjengelighetssignalet.

Koblinger

Koblingsoppskrifter

Trinn-for-trinns oppskrifter for vanlige kontaktoppsett.

Oppskrifter
KoblingsoppskriftEn Shopify installasjonsoppskrift som en sjekkliste: lag app, gi omfanger, lim inn token og teste, aktiver webhooks, plassere ein prøveordre.KoblingsoppskriftShopifyOppskrift · Shopify med webhooksOpprett en egendefinert app i Shopify adminGrant omfang: read_ordre, lese_customers...Lim inn lagerdomene + token, klikk TestAktiver Webhook-synkronisering (bestillinger automatisk register)Legg en prøveordre→Viser seg i salg30s1STEP BY STEPKopier-paste oppskrifter2REAL PLATFORMSShopify · WHMCS · Stripe3VERIFYTestordre viser i 30s
Hver oppskrift er en sjekkliste du følger øverst til bunn, her Shopify med real-time bestilling webhooks verifisert av testordre.

Oppskrift: Shopify med real-time webhooks

Scenario:
Mål: Koble til Shopify med automatisk rekkefølgesynkronisering og GDPR overholdelse.
Hva skal jeg gjøre:

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.

Oppskrift: WHMCS integrasjon

Scenario:
Mål: Koble til WHMCS slik at AI kan slå opp klienter, tjenester og billetter.
Hva skal jeg gjøre:

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.

Oppskrift: Stripe betalinger

Scenario:
Mål: Spor Stripe -betalinger og la AI slå opp transaksjonene.
Hva skal jeg gjøre:

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.

Oppskrift: Google Business Profile

Scenario:
Mål: Koble GBP for gjennomgang, innlegg og innsikt.
Hva skal jeg gjøre:

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.

Koblinger

Utvid CRM & Site Intelligence

OpsIQ subsystems are open for extension. A connector can plug a new capability into the CRM or Site Intelligence with no changes to OpsIQ core, via the platform capability registry (\OpsIQ\Platform\CapabilityRegistry). Declare the capability, implement its small method set, ship the connector, OpsIQ discovers it and wires it into the UI, the Customer 360 timeline and the install prompts.

Forleng CRM & SI
PlattformsfunksjonerEn kontakt på venstre matingskapasitetsbusser (CRM, Site Intelligence og Analytics) som ble oppdaget av CapabilityRegistry.PlattformsfunksjonerarbeidsflateKontakten dinerklærer evnerCRMkalender · berikelse · esign · betalinger · postkasseNettsteds IntelligenceLokal oppføring · rangeringsdataAnalyseweb_analytikere · rapporter & inntakCapabilityRegistryOppdager det og ledningene UI + tidslinje1DECLAREFunksjoner, ikke kjerneredigering2PLUG INCRM · SI3AUTO-WIREDUI, tidslinje
En kontakt erklærer evner (kalendar, berigelse, rangdata, analyse...) og OpsIQ auto-wires dem inn i CRM and Site Intelligence, ingen kjerneendringer.

Deklarasjonsevner

Deklarativ (innstillinger.json)

Legg til en <domain>_capabilities array, best for no-code/marketplace connectors. Domeneer: crm, site_intelligence.

I kode (connector. php)

Implementer crmCapabilities() / siCapabilities() Tilbake til de samme beskrivelsene.

Deklarer en CRM kalenderleverandør (innstillings.json)

Scenario:
Mål: Gjør en kalenderkontakt vises i CRM Schedule-møtet panelet.
Hva skal jeg gjøre:

"crm_capabilities": [ { "type": "calendar", "label": "Calendar (Acme)", "actions": ["createEvent","listEvents","freeBusy"], "requires_auth": true } ]

Deklarer en Website Intelligence-leverandør (innstillingene.json)

Scenario:
Mål: mate lokalt listende data til nettstedets etterretning.
Hva skal jeg gjøre:

"site_intelligence_capabilities": [ { "type": "local_listing", "actions": ["listLocations","listReviews","getInsights"], "requires_auth": true } ]

Buser med evne og overflate av metoden

crm/kalender

createEvent($settings,$params) → {sukseptes,event_id;html_link. meet_Link} listEvents; freeBusy. Drevet av \OpsIQ\CRM\CalendarBridge.

crm / berigelse

enrich($settings,$params) → {success,traits}. Drevet av \OpsIQ\CRM\EnrichmentBridge (kjører også automatisk på selskapet opprette når en leverandør er koblet).

crm/esign

sendForSignature($settings,$params) → {success,envelope_id,sign_url}. Drevet av \OpsIQ\CRM\EsignBridge.

Nettsted_internasjonalitet/lokal_liste

listLocations, listReviews, getInsights. Skip via Google Business Profile-kontakten

nettsted_intelligens/ranke-data

keywordRanks($settings,$params) → {success,ranks}. Drevet av \OpsIQ\SiteIntelligence\RankDataBridge. Skip: SerpApi-tilkobling.

Analytikere/web_analyttikk

report($settings,$params) (synkroniser/eksporter) + ingest($settings,$events) (import). Driven by \OpsIQ\Analytics\WebAnalyticsBridge. Ships: Google Analytics (GA4) connector. Data API for reports, Measurement Protocol for import. Analytics is open for connectors like CRM + Site Intelligence (domain analytics / analytics_capabilities).

betaling / payment_leverandør

listPayments, customerPayments, createPaymentLink. Driven by \OpsIQ\Payments\PaymentsBridge. Show a customer's payments on the CRM timeline + send a payment link on a deal. Ships: Stripe Payments connector. Domain payments / payments_capabilities.

postkasse / e-post_sync

listMessages + sendMessage. Driven by \OpsIQ\Mailbox\MailboxBridge. A customer's emails on the Customer 360 timeline + send email from a deal. Ships: Gmail + Outlook/Microsoft 365 connectors. Domain mailbox / mailbox_capabilities.

Delt OAuth app + EN omdirigering

All Google connectors share ONE app via \OpsIQ\OAuth\SharedGoogleApp. Set google_oauth_client_id/_secret en gang og kalender, Analytics, Business Profile +Gmail alt arbeid (de per-connector -(valgfrie) feltene er tilsidesatt). De deler også en omdirigering URI, <site>/connectors.php?oauth=callback (ingen per-connector slim), fordi Google avslører ingen API å legge til omdirigere URI-er i en app; OpsIQ gjenoppretter koblingen fra det signerte OAuth state Registrer den enkelt URI en gang og hver Google-kontakt (nåværende + fremtid) godkjenner uten ytterligere konsolloppsett. Return SharedGoogleApp::resolve(...)« redirect_uri fra din oauthParams(); aldri hardkode en per-slug omdirigering. Microsoft koblinger gjør det samme via \OpsIQ\OAuth\ SharedMicrosoftApp (microsoft_oauth_*).

Importere knapper er utstyrt

Den Importer (historisk backfill) og Importer kunder knapper viser KUN for kontakter som faktisk implementere dem, detektert ved refleksjon så det er ikke noe flagg å erklære. Overstyr backfill() eller backfillChunk() å tjene importknappen; overstyre listCustomers() (retur {email, fornavn og ...} sider) til å tjene import kunder. Arve den AbstractConnector no-op og knappen forblir skjult, så UI aldri tilbyr en import et kontakt kan ikke utføre.

AI på tvers av busser

The CRM agent proposes and books meetings off deal signals (\OpsIQ\CRM\MeetingProposer → CalendarBridge), and auto-enriches new accounts, the “AI operates the CRM” loop, executed across connector buses.

Kundechatt billettoppslag (fetchTicket())

To-tier, ingen kjerneendring

When a visitor references a ticket number in the client chat ("what's the status of T-000123?"), OpsIQ resolves it in two tiers. Tier1 leser den delte OpsIQ billettbutikken, hver kontakt med inbound_ticket speiler billettene der, så synkroniserte billetter bare fungerer for alle kontakter med null per-tilkoblingskode. Tier2 er en live reserve for gamle billetter som aldri ble speilet: kjernen kaller et valgfritt fetchTicket() på hver aktivert kobling som implementerer den. Det er duck-typed (oppdaget av method_exists()som contextProviders()/audienceCatalog()), så det signerte ConnectorInterface er urørt og kontakter som ikke trenger det (email/chat kilder som skaper billetter i innlandet) bare utelate den.

⚠️
Eierskap er obligatorisk og din å håndheve. fetchTicket() mottar den overflødige besøkendes identitet i $ctx (client_id + client_email, den samme bekreftede identiteten klientchatten AI bruker. Løs plattformkunde fra denne identifikasjon og spør bare at kundens billetter, så sjekk eierskap på detaljlisten. Return null på eventuelle feil, mislykkes eller feil, aldri en annen kundes data. En retur av null nedgraderes grasiøst til "kunne ikke finne den billetten".
connector.php, henteTicket() kontrakten (referanse: kontakter/whmcs og kontakter/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
    }
}

Hvordan plattformen bruker den

Oppdagelse

CapabilityRegistry::providers($domain,$type) lister leverandører med installert/aktivert / ready-status (filsystembasert; DB bare for det aktiverte flagget).

Utvalg

CapabilityRegistry::active($domain,$type) returnerer den første klar leverandøren med sin lastede kobling og innstillinger. Broene kaller dette i stedet for hardcoding slims.

Varsle-til - installasjon

Når en funksjon trenger kapasitet som ikke er tilkoblet ennå, viser brukergrensesnittet et klikk på Connect/Install-prompten og aldri en dead control.

Full veiledning

Se connectors/PLATFORM_CONNECTORS.md (CRM + Site Intelligence) og connectors/CRM_CONNECTORS.md I pakken.

Koblinger

Kundens selvbetjeningsoppslag og refusjoner (bygge kontakten din for kundechat)

Signed-in customers can ask the customer chat AI about their OWN account ("my balance", "my orders", "did support answer my ticket") and, if the business enables it, request refunds. All of it is powered by YOUR connector's declarations: no OpsIQ core changes, no platform hardcoding. The AI calls your lookups as native tools (it cannot invent one), identity is locked server-side to the verified customer, and results are automatically trimmed for the AI.

Deklarer et kundeoppslag

I din actions.jsonEn kun lesebeskyttet handling blir kundesamtale med alt tre: "scope":"client", "requires_confirmation":false, "is_destructive":false. Bruk "scope":"both" Når det samme oppslaget også skal være mulig å ringe av teamet i Admin AI. Det fulle vokabular er admin, client, both og system (system Ingen av dem når AI —APIog bare webhook ruter. Alt annet blir avvist direkte: pakkevalidering mislykkes, og handlingen installerer ikke. Det er ingen writing scope — the Writing assistant is served the admin Handling satt.

Identifikasjonsreglene (obligatorisk)

Navngjev identitetsparameteren fra standardsettet. Låst til den verifiserte numerisk id: client_id, clientid, customer_id, user_id, userid, account_idLåst til ID som en streng: client_identifier, customer_identifier, account_identifierLåst til den verifiserte e-posten: email, client_email, customer_email, user_email. OpsIQ -låser og automatisk fylles det fra plattformen bekreftet logget inn kunde; AI aldri ser eller velger identitet. Et ikke standard navn mislykkes (dedikt, aldri lekket).

Hva må bare være administrator

Alt som ikke er tildekket av den identiteten: crypt-by-bare-id (order_id/ticket_id alene), store-wide lister, gratistekstsøk. De er krysskunde lekkasjer på hvilken som helst plattform. "scope":"admin".

Resultatforming (svarbærende nøkler)

Oppslagsresultatene trimmes strukturelt før de når AI: hemmelige-formede nøkler er droppet, lange strenger og lister blir overtrukket, tomme felt rennes ut, og et flatt kart bredere enn nøkkelen hette holder den svarbærende nøkler først, penger (credit, balance, amount, total, due, paid), identitet (email, *name, phone, company), stat (status, active, expir*, renew*), datoer, plan/produkt / domene- og tjenestenummer/subscription/ordre/faktura/billetter feltene, valutaen, tall og stats/summary/totalsFør noen gjenværende seter går til andre nøkler minste verdi-første. Praktisk veiledning: navngi feltene dine med det standard ordforrådet og returnere felt som svarer på kundens spørsmål i stedet for en rå 100 - nøkkel plattform dump; et felt kalt utenfor vokabular konkurrerer om venstresete, og kan trimmes fra svært bred nyttelast.

Refunds · det kontakten gir

To råoperasjoner, policyfri: (1) en betalingsverifisering som kan filtreres etter identitet og transaksjonsreferanse (din API må og filtre), f.eks whmcs_get_transactions; (2) en tilbakebetalingstiltak (scope:"admin", requires_confirmation:true, is_destructive:true, aldri kundeutnyttet), f. eks whmcs_refund_order. Forretningen velger begge tastene i innstillinger → Kundeschat; OpsIQ verifiserer betalingsserversiden, anvender virksomhetens retningslinjer boks (fjell cap, aldersvindu og månedlig grense), problemer inne i boksen, samt filles en gjennomgang billett for alt annet.

Ingen kodebygger

Handlingsredigeringsprogrammet i koblingsverktøyet har de samme kontrollene: Angi Hvem kan bruke det til Påloggede kunder, la begge skriveavmerkingsboksene være avmerket og bruk et standardnavn på identitetsparameteren.

Referansegjennomføring

Oppføringene "Kundeselvbetjening" i connectors/whmcs/actions.json, woocommerce/actions.json, oscommerce/actions.jsonFull kontrakt i connectors/README.md §8.1–8.2 og ConnectorInterface::registerActions().

Koblinger

Gjesteoppslag — la besøkende spore en bestilling, forsendelse eller ordre uten å logge på (guest_lookup)

Hoteller, kuratorer og mange handelsplattformer betjener kunder som har en referanse men ingen innlogging: gjest med bestillingsbekreftelse. En mottakere kan ha sporingsnummer guest_lookup kapasitet (Connector Contrakt, mode: generert) lar din kontakt betjene de besøkende i klientchatten AI - neiOpsIQkjerneendringer, ingen plattform hardcoding. Kontakten erklærer hva som viser rettighet og tilgjengelige felt er synlige;OpsIQhåndhever bryterne, throtle og uniformen nekte.

Stoltmodel

Referanse + bevis, aldri identitet

Den besøkende leverer rekordreferansen (sammenliknet med det regulære alternativet du erklærer) pluss beviset du velger - vanligvis e-posten på post. Din hente handling henter opptakstjenesten SERVICE ved referanse;OpsIQDen genererte leverandøren sammenligner beviset mot FETCHED-listen. Besøkets inngang er aldri betrodd, og ingen verifisert identitet opprettes: matchen gir besøkende rett til det ene rekordens tillatte felter, ingenting annet.

Uniform benekting (ingen opptelling orakel)

Ikke funnet og bevis-mismatch produserer et identisk svar. AI er eksplisitt instruert til å aldri bekrefte om en referanse eksisterer og ikke oppfinne platedetaljer. Forsøkene er satsbegrenset per samtale +IPKjernen før kontakten din blir hørt.

Dobbeltopt-in, begge standard OFF

Nothing serves guests until the business enables BOTH switches: the workspace-wide control in Settings → Security → "Guest record lookups in client chat" (permission-gated AND always password-confirmed, even when optional step-up is off), and your connector's own guest_lookup_enabled innstillinger slå av. Installere eller aktivere en kontakt alene åpner aldri gjestoverflaten.

Den dedikerte gjesteoverflaten

Den genererte leverandøren registrerer seg på guest kontekstoverflate — strukturelt adskilt fra admin og customer. Eksisterende kontextleverandører blir aldri konsultert for anonyme besøkende, og gjestgiveren er ikke rådgitt til logget inn dem. Den ctx den mottar bærer chat-meldingene, trådens id og besøkets hevdet (uverifisert) epost som en beviskandidat - ingen identitetsfelt.

Deklarer det i byggmesteren

1
Definere hentehandlingen

På handlingstrinnet legger du til en skrivebeskyttet aksjon som returnerer ONE-posten ved referansen (f. eks. GET /bookings/{booking_number}) og kartlegg sine svarfelter med alias: status, ankomst, avgang, rom_type, kunde_email...

2
Tick "Guest lookups"

På evnestrinnet, aktiver guest_lookup. Et dedikert panel vises: Velg uthentingshandlingen, navng referanseparameteren og gi referansemønsteret (ei regulært legeme som \bBK-[0-9]{4,10}\b), name the record ("booking"), and pick the proof — email on the record (recommended) or none (reference alone, for status-only courier tracking).

3
Tillat å vise de synlige feltene

Tick nøyaktig feltene en gjest kan se. Alt annet er DROPSPED - aldri omdøpt. Builderen nekter PII-formede felt (email, telefon, adresse og betaling...) i autorisasjonslisten, og utgivelsesgate samsvaret ser på nytt samme regel før du publiserer så et håndredigeringt spec ikke kan snike seg inn. Merk at installasjonstiden validering dekker manifestasjonen og signaturen bare, slik å kjøre konfidans suit selv før deg skip. Bevisfeltet i seg selv kan aldri vises.

4
Publiser og aktiver

Byggeren sender ut GuestLookupProvider.php — kanonisk herdet implementering, identisk for hver generert pakke - og legger til guest_lookup_enabled slå av til konnektorens innstillinger. Bedriften arms de to bryterne og chatten AI begynner å gi oppslag når en besøkende spør om din platetype.

Kontraktregler

Bare statusformede felt

Think "what would a courier print on the public tracking page": status, dates, room or service category, counts. Names, contact details, street addresses, payment data and free-text notes have no place in an anonymous chat — the Builder and conformance both refuse them.

AA-svarene bare fra blokken

The generated provider ends its output with an instruction to answer only from the listed fields and to offer a ticket for anything else. Detail not in the allowlist is "not available in chat" — by design.

Følgeroppfølger fortsetter å fungere

Leverandøren re-deparer referanse fra besøkendes nylige melding i den samme samtalen, så - og når er uttjekning - fungerer uten å gjenstytte referansen. Den matchede referanse-og bevis epost blir husket på chattråd som CANDIDATES, slik at oppfølging ikke spør om igjen. De er kandidatene bare: hver tur fortsatt tilbake fetches rekordserversiden og sammenlikner beviser før frigjøring av et enkelt felt.

Håndgodkjente pakker

En markedspakke kan sende sin egen GuestLookupProvider.php implementing ContextProviderInterface med surfaces(): ['guest']. Follow the generated template's contract exactly — fetch by reference, proof-match server-side, uniform deny, allowlist-only output — and declare guest_lookup in capabilities. Konformansen verifiserer gjesteoverflata og skanner den tillaterne for PII

💡
Gjesteoppslag er lesebeskyttet sammenheng for chatten AI. De utfører aldri handlinger, oppretter aldrig identiteter og lås ikke opp kundenes selvbetjeningslinje ovenfor - den banen krever fortsatt en plattform-verifisert loggede kunder.
Koblinger

Fremme publikumsmålretting (promo_audience)

Let the Promotion Studio target campaigns by LIVE client and billing state from YOUR platform: "has an unpaid invoice", "order pending", "subscription cancelled". Any connector (pre-installed, marketplace, or one you build yourself) joins by implementing two small methods. No OpsIQ core changes, no platform hardcoding: your connector appears as a platform in the studio Targeting tab with its own dropdown of facts, and several connectors can be enabled side by side.

Promo publikum
Foredragssøkende rettet motEn verifisert identitet sendt til et kontaktpublikumFlags-samtale som produserer fakta som kjører en målrettingsregel, med feillukket notat.Foredragssøkende rettet motarbeidsflateLogget innverifisert identitetaudiensFlags()din kontaktFAKTERunpaid_invoices = 2REGLERUbetalte _fakturaer ≥ 1KampagnshowFeil lukket: ukjent klient eller feil → kampanjen forblir skjult.1TWO METHODSpublicerCatalog + flagg2LIVE STATEUbetalt, avventende3FAIL-SAFEViser aldri feil person
Koblingen din svarer live faktureringsfakta for den loggede besøkende; studioet mål på dem, og mislykkes lukket så et fakturatilbud aldri når feil person.

Hvordan det fungerer

1
Deklarer dine fakta

Implementer audiensCatalog () på kontaktklassen. Det returnerer et etikettnavn og listen over nøklar plattformen kan svare. Hver nøkkel dukker opp i studio- nedtrekksmenyen under dittplattformnamn.

2
Svar for én klient

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
Ferdig

Promotion Studio Targeting-fanen utvider en "Kunde og fakturering" -seksjon som viser plattformen din; administratorer lager regler som "unpaid_invoices >= 1"; hvert faktum blir også en personaliseringsvariabel som {unpaid_invoices}.

connector. php, den komplette promo_audience kontrakt
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'],
    ];
}

Kontraktregler

Annonser evnen

Legg til 'promo_audience' til kontakten din capabilities() array så plattformen og markedsplassen liste det som publikum-kapabel (oppdaging fungerer også fra metode tilstedeværelse, men erklærer at den er ren signal). Den forhåndsinstallerte connectors/whmcs Koblingen er den fulle referanse implementeringen.

Nøkkelnavn

Små bokstavar slange_case 2-60 tegn, som passer til ^[a-z0-9_]+$. Typer: tall, tekst og bool. Udeklarerte nøkler returnert av publikumFlags() er fortsatt brukbare i regler, men erklære alt du støtter slik at admins kan se det.

Identifikasjon er verifisert

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.

Forsinkelse · alltid

På noen feil (API ned, klient ikke funnet, tidsavbrudd) retur []. En regel hvis faktum mangler gjør kampanjen IKKE viser.En faktureringsmålrettet popup må aldri nå feil person; OpsIQ Dette håndheves også i regelen matcher.

Ytelse

publisherFlags() er kalt på det meste én gang per kontakt pr sidevisning, og bare når en publisert kampanje faktisk bruker plattformens regler. Anonym besøkende koster deg null samtaler. 1-2 API anrop; OpsIQ Minne i forespørselen.

Operatører som er gitt gratis

Admins kombinerer tastene dine med =, !=, >;}

Personalisering polletter

Hvert faktum dobler som variabel i kampanjekopi: {unpaid_invoices}, {client_status}, pluss de innebygde {first_name} og {client_email}. Verdier er sanisert før gjengivelse.

Ingen kode markedskontakter

Automatiske fakta

Deklarativ (JSON-kun) markedskontakter får promo_audience gratis: hvis kontakten erklærer kunder/brukere, fakturaer, bestillinger eller abonnementsressurser OpsIQ Henter kunde_status, ubetalte _invoices, summ_dued, avventing_ordrere, active_subscriptions og abonnement_status fra dine eksisterende søk. Ingen kode i det hele tatt.

Egendefinert katalog (innstillinger.json)

Add an audience_capabilities object · {"label": "My Platform", "keys": [{"key": "open_carts", "label": "Open carts", "type": "number"}]}, to control exactly which facts (and labels) appear in the studio dropdown.

Teste leverandøren din

1
Aktiver koplingen

Connectors > your connector > Enable. Then open any campaign's Targeting tab. Your platform must appear under "Client & billing (connectors)".

2
Bygge en regel

Legg til: Din plattform · en nøkkel · >= · 1 og sett "Kun innloggede klienter". Lagre og publiser.

3
Bekreft begge retningene

Logg inn på plattformen som klient og samsvarer med regel (popup må vise) og som person som ikke gjør det.

Skyt en kampanje fra din egen kode (kundeutløser)

Hvorfor

Utover de innebygde utløsere (delay, rulling, avsluttende intent, inaktivt, klikk på sider-viset chat / billet aktivitet), kan du avfyre en kampanje fra hvor som helst i nettsted eller kontakt frontend etter et vellykket kassentrinn når ei kurv er forlatt, da SPA endrer ruten etc.

Hvordan

Sett kampanjen utløser til Tilpasset med et arrangementsnavn (f. eks checkout_failed), så ring den globale kroken fra din side:

din hjemmeside / kontakt front-end 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');
💡
Å finne en hendelse omgås aldri målrettet eller frekvens. Det frigjør bare \"når\". kampanjen må fortsatt passere alle regler (geo, publikum, samtykke) før den viser seg.
Den fulle hvordan-å-bruk guide (designing, blokker, analyse, A/B publicering) lever i in app Hjelp Center under Engage → kampanje Studio. Funksjonen her er oppdaget automatisk fra en ENABLED-kontakt i kontakter/ eller markedsplass_connectors /. Det finnes ingenting å registrere seg. Send de to metodene, og studioet gjør resten.
Koblinger

Kontinuerlig kontakt (Kontrakt 2.2)

Den survey kapasitet lar alle plattformer levere verifiserte kundeidentifikasjonsadaptere, publikum fakta, trygge varier og mottakere kandidatene til Survey Studio. promo_audience og gir ikke kontakt eierskap av undersøkelser, svar, analyse eller e-postlevering.

💡
Implementasjonsstatus. Forfatterskap er fullstendig og brukbar i dag: Connector kontrakt 2.2, SurveyConnectorInterface, det dedikerte byggepanelet som genereres SurveyProvider.php, pakke metadata og konformanseisolasjon alle skip. Forbruket er ennå ikke kablet: SurveyConnectorRegistry er implementert og testet, men ingen Survey kjørtid kaller det ennå så leverandørens helse ikke overflater i admin-grensesnittet og ingen publisert kontaktpakke erklæres evnen. Signerte undersøkelse Identity Gateway utstedelse, målrettet og variabel integrasjon, CRM Outreach materialisering samt de første fraktede tjenestekartleggingene forbli separat fasene. Bygg mot denne kontrakten nå; forventer løpstiden til å begynne å konsumere den i en senere utgivelse.

Leverandøransvar

Katalog og fakta om publikum

Deklarer kanoniske fakta og løse verdier bare for et serververifisert, arbeidsområdebundet emne. Typiske fakta inkluderer ordre_count, last_ordre_status, avlyst_ order_count client_created_at, active _subscription_count; past_due_invoice_count and open_ticket_count

Variabel katalog og verdier

Deklarer kunde, konto, ordre og støttevariabler med type, følsomhet og tillatt kontekst. Survey kopi krever reserves og utgangs-context flyktning.

Mottaker paging

Valfritt opptjene kandidater til CRM Outreach med stabil ekstern ID, avgrensede sider, deterministiske markører og samtykkerelatert metadata. Undersøk fryser det valgte publikum før noen sendes.

Identifikasjon

Godta kun identitet fra Survey Identity Gateway etter token signatur, utløper, formål, kontakt og arbeidsområde verifisering. Nettleseren-supplied email, ID, tags eller faktureringsfakta er aldri autoritative.

Runtime helse

SurveyConnectorRegistrer er utformet for å rapportere kompatible, blokkerte og utilgjengelige leverandører uten eksponering innstillingene, stien eller rå identitets-eller unntaksmeldingane. En blokkert udbyder kan aldri påkalles. Rapporteringsoverflata blir ennå ikke eksponert i adminensgrensesnittet: I dag er en blokkleverandør ganske enkelt inerte.

Feillukkede regler

Udeklarerte nøkler, feil typer, overdimensjonelle verdier, emnefeil og ukjente identiteter avvises. En målrettingsregel som trenger et utilgjengelig faktum stemmer ikke med. Mottakeresider er nedlagte og revidert. Følsomme verdiar vises aldri i offentlig forhåndsvisning eller logger.

Byggerutgivelsesport

Kontrakten 2.2 skiper kapasitet registeroppføring, grensesnitt, kartleggingspanel for undersøkelser som genereres SurveyProvider.php, funksjonsversjonen, README/developer referanse og konformanse fikser. Handels-, aiddesk- eller SaaS broprofilene inkluderer det; Standard API connectors velger inn. Den statiske gate avviser en undersøkelse leverandør som kaller et kampanjenavnrom, tabell eller evne.

💡
Kopier fra kampanje er import-bare: Builder kan oversette kompatible kampanjekartlegging én gang, lagre en fullstendig undersøkelsesejet kopi og registrere bevis. Sletting eller endring av kampanjen kartlegging må ikke endre Survey oppførsel.
Koblinger

Svar tilbakemeldingskapasitet (Kontrakt 2.2)

Den reply_feedback evne speiler en plattforms egen per-reply vurdering i OpsIQ. En stjerne en kunde gir et personale svar inne WHMCS Kundeområdet lander på SAME-svar i OpsIQ admin tråd, med samme chip, agent kreditt, tilbakemelding side oppføring og lag & ytelse beregning som en rating gitt på et OpsIQ portalbillett. En lagring, en chip, én rørledning; koblingen oversetter bare.

Den som skriver vei

Det er nøyaktig to inngangsstier og én sannhet. OpsIQ portalbilletter skrive innfødte . Plattform billetter flyt gjennom kontakten, og kjerne lander hver hendelse via ReplyFeedback::recordMirrored(): de samme søylene, kun stav-beskytterregelen, en rating per reply nyeste wins semantics og stemme fra kundeindeksering av portalskriveren bruker. En kontakt skriver aldri tilbakemelding rader selv.

Forenlig (fire filer, deretter logg)

1
connector_contract.json

Legg til funksjonene.reply_feedback oppføringen: versjon 1.0, SvarFeedbackConnectorInterface-metoder svarerKatalog og trekker tilbakeReveller Feedbakke.

2
settings.json

Legg til svar_feedback i listen over evner. Dette er det koblingsfunnet leser på.

3
spec.json

Deklarer svar_feedback. modes (poll og/eller webhook) samt plattformens vurdering skala. Dette er hva konformance gate leser.

4
Runtime klasse

Implementer grensesnittet, list respond_feedback i kapasitet() og signer deretter pakken på nytt.

Leverandøransvar

Katalog

Deklarasjonsmoduser, plattformens egen ratingskala (core normalises til det innfødte 1-5), og alle reaksjonssymboler. Katalogen må være enig med spec.json.

Trekk oversettelse

trekkRevraFeedback returnerer kanonisk hendelse: plattformbillett id, plattformsvars-ID, vurderinger, valgfri reaksjon/komment, innsendt tid og en stabil event_id. Den leser og oversetter. Det skriver aldri.

Idempatiens

event_id er stabilt per tilbakemelding Staten, så en replayed hendelse er ikke-op og et endret rating overskriver (seneste gevinster som portal).

markør disiplin

Sider er avgrenset og deterministisk; en markør som ikke går videre avslutter kjøringen. Historisk tilbakefylling dreneres som et rullende vindu, aldri én gigantisk trekking.

Probe sikkerhet

Ingen konfigurasjon, returnere en tom fullstendig side i stedet for å kaste. Konformansekjører prober med tomme argumenter.

Feillukket oppløsning

Core løser hver hendelse til et lokalt svar fra speilmerket billettspeilet allerede frimerke (<slug>:<ticket>:reply:<reply>). En hendelse som ikke kan løses, er droppet og aldri gjett; tilbakemeldinger bare knytter til ansatte svar; Og agent kreditt alltid kommer fra svaret eksisterende forfatter. Vurderingen skriver aldri endrer forfatterskap. Dette er grunnen evnen krever inbound_ticket eller ticket_mirror.

Arbeidt eksempel: WHMCS

WHMCS lagrer klientområde per-reply stjernerangeringer i tblticketreplies.rating. Den WHMCS konnektor erklærer meningsmålingsmodus med en 1-5 skala, skip a ticket_reply_ratings relékommando i brofilen, og oversetter hver rad til en hendelse som passer med ID-ene whmcs:<ticket>:reply:<reply> markører billettspeilet allerede frimerker. Etter oppgradering av koblingen, kopier brofil til den WHMCS serveren så den nye kommandoen eksisterer der.

💡
Fullutviklerkontrakt med grensesnitt, arrangementsformer og normaliseringsregler samt samsvarskontrolllisten: doc/contracts/TICKET_REPLY_FEEDBACK_CAPABILITY.md i OpsIQ pakke. Aksept: ranger et svar inne i plattformen, vent på timemålingen og det samme svaret i OpsIQ viser chipen, Feedback-siden lister den og en gjenspilt hendelse endres ingenting.
Koblinger

Billettfletting (Kontrakter 2.4)

Den ticket_merge kapasitet gjør en billett sammenslåing i OpsIQ En sammenslåing på alle tilkoblede billettplattformer. Den holdte plattformbilletten mottar de fusjonerte meldingene om billetter, som starter med hver slått billetts åpningsmelding i stedet for at den flettede plattformbilletten kun blir stengt.

Hvorfor det eksisterer

En sammenslåing i OpsIQ flytter hver melding av de sammenslåtte billettene inn i den lagrede billetten og fjerner dem. Før kontrakt 2.4 En kobling som kun høres ticket.deleted For hver sammenslått billett. WHMCS Lukket billetten og den holdt WHMCS billetten mottok aldri det kunden først skrev: emnet viste [MERGED] og innholdet manglet.

Hva kjernen sender

free. merged (en gang per flett)

ticket_id, ticket_number, emne og external_ref KEPT billetten; native_table (opsiq_tickets); site_key; kilder, de sammenslåtte billettene eldste først ticket_id, ticket_number, emne external_ref, client_name, client_email, created_at og meldinger [{reply_id, author_type, author_name, created_at, kropp}]; merged_by; merged_at. Meldinger er kunde-synlig samtale, fanget før trekket. Interne notater blir aldri inkludert.

billett. slettes (per flettet billett)

Branner, nå med merged_into {ticket_id, ticket_number, external_ref}. Core leverer den ikke til en kontakt som erklærer ticket_mergeAndre forbrukere kan fortelle en sammenslåing fra et slettet.

Utgående webhooks

click.merged er en leveringsbar begivenhet. Et SaaS webhook-endepunkt som abonnerer på billetten. slettet mottar også trailet.mergered, så et integrasjon bygget før 2.4 Hører sammenslåingen.

Hva kontakten gjør

Deklarasjon

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.

Slå sammen i det innfødte når du kan

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.

Legg til et privat notat

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.

Rapporter hva som ikke ble slått sammen

Return {ok, modus, slått sammen, bemerket, umergert error}. Hver flettet kopi du ikke kunne slå saman går i ubegrensede og kjerne gjelder din normale slettingshåndtering (lukk eller slett med mirror_deletes) til nøyaktig de. Returmodus som ikke støttes bare når plattformen har ingen sammenslåing og ingen private notater. En transport eller aut feil er ok=falsk med grunn; den registreres i diagnostics.

Heier dine bytter

De samme speilinnstillingene som porten din andre billett speiling gate fletter.

Slår sammen den starten på plattformen din

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.

Levert implementasjoner

WHMCS

MergeTicket (tikketid = holdt billetten, fishedicketider= flettede billetter) når begge er i WHMCS; AddTicketNote med transkripsjonen ellers. Reléens billettfletting krog fletter sammen OpsIQ kopier når personalet smelter i WHMCS.

Zendesk

POST /api/v2/tickets/{id}/merge.json med private flette kommentarer (opptil fem billetter per anrop), pluss transkripsjonen som en privat kommentar på den holdt billetten, fordi Zendesk Lukker sammenslåtte billetter uten å flytte sine kommentarer.

OpsIQ SaaS bro

POST /v1/tickets/{id}/merge med source_ids, som beveger portalen svar og vedlegg; et internt svar bærer transkripsjonen for billetter som aldri var på portal. A /manage fletter sammen OpsIQ kopier.

Connector Builder

ticket_merge er avledet, aldri merket: en generert pakke erklærer det når den kobles plattformbilletten som den oppretter (En billett.skapet abonnent med linkbillett på), håndterer billetten ticket_mirrorPå billetttrinnet, under FøyerVelg plattformens sammenslåingshandling (kartfletting.target_remote_idog slå sammen.source_remote_ids eller slå sammen.source_remote_id) og en privat notathandling (kartnote.remote_id og note.body). Den genererte fushTickets() bruker begge deler. Med heller ikke, advarer Builderen om at en sammenslått billetts meldinger vil ikke nå plattformen.

💡
Full kontrakt: doc/contracts/CONNECTOR_CONTRACT.md, delen billett fusjonerer. Akseptansen: slå sammen to billetter i OpsIQ som begge eksisterer på plattformen og deretter åpne den holdte billetten påplattformen. Den slåttet billettens første melding er der.
Koblinger

Kontakt markedsplass

Marketplace lar deg oppdage, installere og publisere kontakter bygget av samfunn.

Markedsplass
Kontakt markedsplassEt søkbart rutenett av felles kontaktkort med kategorier, installer knapper og stjernerangering.Kontakt markedsplassarbeidsflateSøkekontakter...KalenderPlanleggingInstaller★ 4.8HubSpotCRMInstaller★ 4.6MailchimpE-postInstaller★ 4.7QuickBooksRegnskapInstaller★ 4.5TwilioSMSInstaller★ 4.9BegrepDokumenterInstaller★ 4.41DISCOVERSamfunnskontakter2INSTALLEtt klikk3PUBLISHLogg inn og send din
Bla gjennom fellesskapskontakter, installer i ett klikk eller signer og publiser dine egne, forhånd installerte og markedsplassnivåene både søkbare.

Finne og installere kontakter

1
Bla gjennom

Gå til Kontakter > Markedsplass. Søk etter navn, kategori eller plattform

2
Anmeldelse

Sjekk beskrivelsen, støttede handlinger og vurderinger.

3
Installer

Klikk Installer. Koblingspakken laster ned og installerer til markedsplass_connectors/ !

4
Konfigurer

Aktiver det i konnektorer, skriv inn API akkreditiv og test.

Publisering av en kontakt

1
Bygge og test

Bruk Connector Builder. Kontroller alle handlinger fungerer

2
Pakke

Opprett profil.json Handlinger.json Kunnskap.json, og PHP-filer.

3
Signere

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
Send

Last opp gjennom markedsinnsendelsesflyten for vurdering.

To kontaktnivåer

kontakter / - hva som faktisk kjører

Runtime funn rot. Alt her er live: kontaktene som leveres med OpsIQ, alt installert fra markedet og hva som helst Connector Builder publiseres på denne installasjonen.

marketplace_connectors/ - der pakkene er skrevet

Utgivelses- SERVICE for førsteparts markedspakker. Det er ikke en oppdagelse root: ingenting her er live før det pakket, signert og frød i katalogen og installert på hvilket punkt et kopiland i kontakter/.

💡
Se på begge steder. En pakke du skrev under marketplace_connectors/ er ikke kopien som kjører - installere kopier den i kontakter/, og bare det eksemplaret oppdages ved kjøring. StripeBigCommerce, Magento 2, PrestaShopOpenCart, Amazon SES Postmark og Resend er alle markedspakker: installer en før du forventer å finne den i Connectors.
Utvikler

API og webhook builder

Den API og Webhook Builder lar deg opprette egendefinerte API Endepunkter og webhook-lyttere inne OpsIQ Uten å skrive rå PHP.

API byggmester
API og webhook builderEn byggmester velger en utløsertype (innbundet webhook, tidsplan, hendelse og manuell) som mater til et konfigurerbart handling.API& webhook builderarbeidsflateTRIGGERConstellation name (optional)Innkommende webhookPlanlegger (kron)OpsIQ _hendingManuellHandlingKart innkommende felt →opprette billett / varsle/samtale APILagre endepunkt1UTLØSEREWebhook · Planleggingstabellen2NO RAW PHPBygget i UI3ActionKartfelt, og deretter kjøre
Bygg endepunkter uten rå PHP: Velg en utløser (innbundet webhook, tidsplan, hendelse eller manuell), og kartlegg felt til handling.

Utløsere

Hendelse

Kjør når noe skjer i OpsIQ, eller når et eksternt system legger inn en matchende hendelse til din webhook URL. Skriv inn hendelsesnavnet, for eksempel billett.skapes.

Planlegger

Bruk en av de innebygde intervall hendelsene som arrangementsnavn: cron. minutuously, kron. hourly eller Cron. daily. Handlingene og Triggers-skjermen har knapper for disse så du trenger ikke å huske dem.

Frase

Kjør når en administrator spør AI for det på vanlig språk. Legg til frasen som skal matche, fx finne kunden.

Innkommende webhook

Et eksternt system sender en HTTP POST til din OpsIQ webhook URL Alle utløsere som lytter til hendelsesbrannene.

Bare kjør det noen ganger: betingelser

En hendelsesutløser kan bære betingelser, så det kjører bare når de innkommende dataene matcher. Uten forhold den kjører hver gang hendelsen branns.

Felt

En sti til hendelsesdata. Bruk en prikk for hekkede verdier, f. eks. kunde-email.

Passer alle eller noen

Velg om alle regler må samsvare, eller bare én av dem.

Tekstprøver

lik, ikke like, inneholder og har ikke, starter med er en av, det er ikke én.

Antall tester

større enn i det minste mindre enn, på de fleste. Tal skrevet som tekst sammenlignes fortsatt riktig.

Forekomstprøver

Det er til stede, det mangler og tomt.

Bare side on-call ingeniør for haster billetter

Scenario:
Event billett. skapet, med én regel: prioritet er like presserende.
Hva skal jeg gjøre:

Handlingen går for hastebilletter og er hoppet over til alt annet. Ingen filtrering nødvendig i slutten av din.

💡
Hvis du la reglene slette utløseren kjører på hver matchende hendelse, som er den samme oppførselen som før forholdene eksisterte.

Handlinger

Send webhook

Send HTTP POST til en ekstern URL med egendefinert nyttelast.

Lag billett

Opprette en støttebillett med spesifisert avdeling, emne og melding.

Send e-post

Send en e-post med egendefinert mal.

Oppdater rekord

Oppdatere en kunde, billett eller CRM-rekord.

Kjør kontakthandling

Kjøre en registrert handling fra et aktivert kontaktstykke med konnektorens tillatelses- og bekreftelsesregler.

Kjøre OpsIQ Generelt API handling

Søk i den komplette navngitt generelle API katalog. Felt, omfanger, tillatelser, bekreftelse, idempaens og støtte for tørrkjøring kommer fra livehandlingskontrakten; arbeidsflyt utføres inne på det lagrete arbeidsområdet og administratorkonteksten.

Send leverandør-native API forespørsel

Bruk en koblings-institusjon API Lese eller bekreftet Native API Skriv handling når leverandørens endepunkt ikke har noen kurert action. Kreditter forblir inne i kontakten, og bare relative tilbyderstier er aksepterte.

Handlinger og utløsere, /api/v1.php, OpenAPI and Postman bruker samme ActionContractRegistry slik at en valgbar handling ikke kan drive fra kjøretiddokumentasjon.
Utvikler

Triggers kokebok

Klar til bruk trigger-action oppskrifter for felles automatisering.

Hvordan det fungerer
Triggers kokebokEn oppskrift flyt: en oppetid. down webhook passerer et produksjonsfilter, og fansen ut for å skape en hasterlig billett samt varsle Slack.uptime.downskjerm webhookHvis prodfilterOpprette rask billettVarsle Slack #ops
Triggers kokebok

Auto-skape billett fra overvåking

Scenario:
Overvåkingssystemet sender POST når serveren går ned.
Hva skal jeg gjøre:

Trigger: Inbound webhook Condition: payload.status = "down" Action: Create ticket · Dept: Technical, Subject: "Server {{payload.hostname}} down", Priority: Urgent

Slack varsling om store bestillinger

Scenario:
Slack melding hver gang en kunde legger ordre over $100.
Hva skal jeg gjøre:

Trigger: Event (order.completed) Condition: order.amount > 100 Action: Send webhook to Slack incoming webhook URL with order details

Ukelig fordøyelsesmail

Scenario:
Oversiktlig e-post til ledelse hver mandag kl. 09:00
Hva skal jeg gjøre:

Trigger: Schedule (Monday 09:00) Action: Send email with last week's stats pulled from the REST API

Escalate stale billetter

Scenario:
Hvis billetten ikke har noe svar på 24 time, tilordne lagleder.
Hva skal jeg gjøre:

Trigger: Schedule (every hour) Condition: ticket.status = "Open" AND ticket.last_reply_age > 86400 Action: Assign to team-lead, add internal note

Utvikler

Bygg din første handling

Denne gjennomgangen skaper en enkel kontakt action fra grunnen.

Byggetiltak
Bygge en handlingEt handlingsdefinisjonsskjema: navneoppslag_ordre, en GET-forspørsel til /orders/{id}, en skriven id-parameter og et passerende 200 Test.Ny handlingarbeidsflateNy handlingNavnlookup_orderForespørselGET/orders/{id}Parametereid · streng200 · rekkefølge funnet1DEFINENavn, metode og endepunkt2PARAMSTyper inndata3TESTLive 200 resultat
Bygg en handling fra grunnen. Navng det, angi metoden og endepunktet, erklære skrivne paramer, og test den til et live 200

To typer action

Før du starter, avgjør hvilken som er nødvendig. Begge konfigureres på samme skjerm.

Ring et eksternt API

Handlingen sender en HTTP-forespørsel til plattformen din. Velg dette når OpsIQ Må komme seg ut og gjøre noe på din side.

Kjør en kontakthandling

Handlingen kjører noe som en installert kontakt allerede gir. Velg dette når arbeidet er tilgjengelig, og du vil bare utløse det. Du velger koblingshandling fra ei liste så det ikke finnes noget å koble opp.

Det andre alternativet er hvordan du gjenbruker alt kontaktene dine kan allerede gjøre uten å bygge noe av det igjen: les en billetttråd, slå opp kunden, importere kontakter og så videre. Velg kontakthandlingen fra rullegardinet og gjør deg ferdig !
1
Planlegg handlingen

Example: "lookup_product". Look up a product by name, return price, stock, and description.

2
Definer i handlinger.json

Legg til handlingsdefinisjonen:

Handlinger.json— den virkelige manifeste formen
{
  "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" }
      ]
    }
  ]
}
⚠️
Three things that make an action fail to register at all. action_id is REQUIRED and must be 2 to 100 characters of lowercase letters, digits and underscores — an entry without one is rejected outright. The manifest is an object with an "actions" LIST, not a map keyed by action name. And response mapping is "returns" with DOTTED paths (data.id), not JSONPath ($.data.id) — there is no "response_mapping", "method", "endpoint" or "params" key anywhere in the registry.
3
Test med tørrkjøring

I Connector Builders Review trinnet, trykk Dry-kjør. Den kjører den fulle samsvar sjekklisten mot pakken din og når du har levert legitimasjonene gjør en ekte tilkobling test. Det bruker ikke prøvedata.

4
Kontroller bruk av AI

Spør admin AI: "Slå opp produkt Widget Pro." Den kunstige intelligensen skal finne og utføre handlingen.

⚠️
Legg til en handling i handlinger.jsonoppretter IKKE en AJAX-rute, så det er ingenting å regenerere. Kontakthandlinger synkroniseres tilOpsIQnår koblingen er aktivert eller innstillingene lagres: Lagre kontakten på nytt og den nye handlingen vises. verktøy/gen_route_registrery.php dekker admin AJAX-sendinga, som ikke har noe å gjøre med kontakthandlinger.
Utvikler

Innbundne hendelsesendepunkter

Inngående endepunkter akseptere signert JSON fra et annet system og gjøre det til deduplisert kontaktaktivitet som kan mate tidslinjer, scorer og arbeidsflyt.

Produktskjerm
Inngående endepunkterHver inngående kilde har sin egen URL Hemmelig, kartlegging og nylige aktivitetsresultat.Inngående endepunkterarbeidsflateKJØP5ACCEPTED12.4kREJECTED18LIV ARBETSPESSONEFaktureringsplattformabonnenterSunnProdukt appRegistrer og bruksbegivenheterSunnHendelses- IDprovider_event_idDedupliserSignaturX-OpsIQ-Inbound-SignatureHMAC1CREATE SOURCEURL og hemmelig2MAP PAYLOADE-post, hendelse og ID3VERIFYHMAC inntas deretter
Hver inngående kilde har sin egen URL Hemmelig, kartlegging og nylige aktivitetsresultat.

Opprette én kilde per sendingssystem. OpsIQ genererer en URL/token og hemmelighet. Send JSON med Content-Type: application/json og signere den nøyaktige rå kroppen ved hjelp av HMAC-SHA256:

X-OpsIQ-Inbound-Signature: sha256=<hex hmac>

Kart JSON stiger for kontakt e-post, hendelsesnavn og valgfri hending ID. HendelsesID er den foretrukne deduplisering nøkkelen. Godkjent aktivitet går inn i kontakt tidslinjen og kan påvirke bly scorering, segmentene, livsyklusregler og arbeidsflyten.

Avvise ugyldige signaturer før du tolker forretningsdata. Roter en hemmelighet ved å oppdatere begge sider i et kontrollert vindu; logg ikke på hemmeligheten.

Utvikler

Utgående webhook-operasjoner

Utgående webhook-administrasjon skaper signerte abonnementer, testendepunkter og overvåker asynkron levering og forsøk på helse.

Produktskjerm
Utgående webhooksSiden utgående webhook viser HTTPS-endepunkter, hendelsesabonnementer og leveringshelse samt en ettklikk på signert test.Utgående webhooksarbeidsflateENDPOINTS7SUCCESS99.2%RETTRYING4LIV ARBETSPESSONECRM-speilkontakt.* og avtale ;)SunnStøttebusschat.*SunnDatalager*ForsøkTestleveringSignert prøvelastKlar1SUBSCRIBEHTTPS URL og hendelser2AUTHENTICATEHMAC-signatur3OBSERVELeveringsskinne og retries
Siden utgående webhook viser HTTPS-endepunkter, hendelsesabonnementer og leveringshelse samt en ettklikk på signert test.

Fulle administratorer oppretter et HTTPS endepunkt, velger bestemte hendelser eller jokertegnet, lagre den hemmelige trygt og sende en test. OpsIQ signer rå nyttelast med HMAC-SHA256:

X-OpsIQ-Signature: sha256=<hex hmac>

Kontroller signaturen før deserialisering eller handling. Levering er asynkron og automatisk tilbakeført etter ca. 1Minutt, 5 minutter, 30 minutter,2timer og 12 timer. Bruk den nylige leveringsskinnen til å inspisere status, responskode og prøvetall.

Mottakeren må være idempatent fordi et asynkront system kan omlevere. Returner en 2x x respons bare etter varig akseptering.

Utvikler

Webhooks

Webhooks lar eksterne systemer varsle OpsIQ Når det skjer noe (inbound), og la OpsIQ varsle eksterne systemer når noe skjer internt (utgående).

Webhooks
Utgående webhooksDen utgående webhooks-skjermen: en sluttpunktstabell med navn, abonnerte hendelser og nylige leveringsstatuspunkter.Utgående webhooksarbeidsflateEndepunkter+ Lagre endepunktNAMNHendelserDELIVERIERSlack #salgsvarslerhttps://hooks.slack.com/…crm.deal.wonTestCRM-speilhttps://api.acme.com/hookkontakt.*, billett. skapetTestZapierhttps://hooks.zapier.com/…chat.startedTest1ENDPOINTSNavn, hendelser URL2SIGNEDHMAC + auto- forsøk på nytt3SEND TESTBekreft leveringer
Den virkelige utgående webhooks-skjermen: hvert endepunkt med sine hendelser, nylig leveringshelse og en ettklikk Send test, signerte og retried.

Utgående webhooks

Underskrivelse

Gå til innstillinger > Webhooks. Legg til et endepunkt URL Velg hendelser å motta.

Hendelser

Abonner på bestemte hendelser, eller til ["*"] for alt. Den fulle listen til installasjonen er under, og webhooks.events.list Returnerer det somJSON.

Prøv på nytt

Feil ved leveranser igjen. Etter at 15 _-feil er fullført, blir endepunktet automatisk slått av.

Underskrift

Hver levering er signert. X-OpsIQ-Signature carries v2=<hex>, og den signerte strengen er version.timestamp.delivery_id.body - ikke kroppen alene. Alltid verifisere, og alltid gjenoppbygge strengen nøyaktig. Se eksemplene nedenfor.

SSRF beskyttelse

OpsIQ vil ikke sende til privat/intern IPs (127.x 10.x 172.16.x 192.168.x 169.254.169.254).

Async-leveranse

Webhooks leveres via jobbkøen, ikke blokkering OpsIQ -operasjoner.

Stabilt arrangement ID

Hver event har en unik hendelse_id som forblir den samme på tvers av returer til deduplikasjon.

Hva kommer med hver levering

X-OpsIQ-Event

Hendelsesnavnet, for eksempel ticket.created.

X-OpsIQ-Delivery

Leverings-ID. Det forblir det samme på tvers av retries - bruk den til å ignorere en duplikat.

X-OpsIQ-Timestamp

Unix sekunder på signeringstid. Avvise noe eldre enn omtrent fem minutter

X-OpsIQ-Signature

Signaturen som v2=<hex>. Splitt på =: venstre side er versjonen, høyre siden er verdien du sammenligner.

X-OpsIQ-Signature-Version

Planen som brukes i dag v2Les den fra headeren i stedet for hard-kode det, og koden fortsetter å fungere hvis en v3 noensinne er lagt til.

⚠️
Signert streng er version.timestamp.delivery_id.body, ikke rå kroppen på egen hånd. Hashing bare kroppen er den vanligste grunnen til at en verifikasjon mislykkes - hver ekte levering blir avvist og endepunktet ser ødelagt ut.

Bekrefte levering

PHP · verifisere enOpsIQwebhook
<?php
// Read the raw body BEFORE any framework parses it — the signature covers
// the exact bytes we sent, so a re-encoded array will not match.
$raw      = file_get_contents("php://input");
$sigHeader= $_SERVER["HTTP_X_OPSIQ_SIGNATURE"] ?? "";   // "v2=<hex>"
$ts       = (string)($_SERVER["HTTP_X_OPSIQ_TIMESTAMP"] ?? "");
$delivery = (string)($_SERVER["HTTP_X_OPSIQ_DELIVERY"] ?? "");
$secret   = "your endpoint signing secret";   // shown once when you add the endpoint

// 1. Refuse a stale delivery. This is what stops a captured request being replayed.
if ($ts === "" || abs(time() - (int)$ts) > 300) {
    http_response_code(401);
    exit(json_encode(["error" => "Stale delivery"]));
}

// 2. The header names its own version: "v2=<hex>".
[$version, $received] = array_pad(explode("=", $sigHeader, 2), 2, "");

// 3. Rebuild exactly what OpsIQ signed.
$canonical = $version . "." . $ts . "." . $delivery . "." . $raw;
$expected  = hash_hmac("sha256", $canonical, $secret);

// 4. Constant-time compare, so a timing attack cannot reveal the secret.
if ($received === "" || !hash_equals($expected, $received)) {
    http_response_code(401);
    exit(json_encode(["error" => "Invalid signature"]));
}

// 5. Accept. Deliveries retry, so treat a delivery id you have already
//    processed as a success and do the work only once.
$event = json_decode($raw, true);
// ... your handling ...

http_response_code(200);
echo json_encode(["received" => true]);
Node. js · Bekreft en OpsIQ
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 });
});

Hver hendelse denne installasjonen kan sende

Generert fra den løpende bygge, så det alltid matche versjonen du er på.

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 returnerer samme liste somJSONSå din kode trenger aldri å ha det hardt.

Analyser (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.

handel (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.

Kontakt (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.

e-post (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.

betaling (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.

sikkerhet (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.

billett (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.

Hvordan tester jeg webhooks lokalt?+

Bruk ngrok til å eksponere den lokale serveren. Velg webhook- endepunktet for din ngrok URL.

Hva om enden min er midlertidig nede?+

OpsIQ returer med eksponentiell tilbaketrekking. Hvis endepunktet gjenopprettes i gjenprøve vinduet, går ingen hendelser tapt.

Utvikler

API-nøkler

API nøklers autentisering forespørsler til OpsIQ REST API. Hver nøkkel har omdekket tillatelser

API-nøkler
API-nøklerAPI -tastene: et problempanel med tilgangsnivå og omfangsbriller, ved siden av en liste over eksisterende maskerte nøkler.API-nøklerarbeidsflateSende en nøkkelTilgangLesebeskyttetBegrensetOmfangcontacts.readtickets.readevents.writeProblemnøkkelDine nøklerZapier integrasjonopq_••••4f2aTrekk tilbakeMobil appopq_••••91c7Trekk tilbakeAnalytics eksportopq_••••2db0Trekk tilbake1SCOPEDLesbare eller begrensede2PER-ACTIONVelg nøyaktige omfang3REVOCABLERoter når som helst
Den virkelige API -tastene skjerm: utstede en omfangsbasert, lesebeskyttet eller begrenset nøkkel ved å velge nøyaktig rekkevidde og trekke tilbake enhver nøkkelen når som helst.

Oppretter en API nøkkel

1
Gå til innstillinger > API Nøkkeler

Gå til API Nøkkelhåndtering.

2
Klikk på Opprett nøkkel

Gi det et beskrivende navn.

3
Velg omfang

Gi nøkkelen bare det den trenger. Områder kommer i lese og skrive par per område, så en rapportering integrasjon kan gis less og ingenting annet.

Tilgjengelige omfang

Velg det smaleste settet som gjør jobben. admin tilfredsstille alle omfangene nedenfor, så bruk det bare når du virkelig trenger bred tilgang.

crm. read / crmtwrite

Kontakter, selskaper, tilbud, aktiviteter, segmenter, utadvendte, konverteringsmuligheter og CRM-webhooks.

billetter. less / billettene. write

Liste og les billetter, samt meldinger; svar på dem. Oppdatere, åpne og kjøre store køoperasjonene.

conversations. lese/contacts

Les samtaler med livechat og meldingshistorie; send meldinger, tilordne og endre status.

kb. read / KB

Kunnskapsgrunnleggere.

chat. read / chatt. write

Lagret svarmaler.

connectors.read

Se hvilke kontakter som er installert, hva de kan gjøre og teste sine legitimasjoner.

automations.read

Se handlingene dine, utløser og deres historie.

departments.read

Departementer som er tilgjengelige for rute.

notifications.read

Varsler for en navngitt operatør.

analytics.read

Rapportere seksjoner, CSV -eksport og planlagte rapportdefinisjoner.

site_intelligence.read

Overvåkede nettsteder og deres SEO rapporter.

files.read

Signert nedlastingslenker for vedlegg.

status.write

Statussidekomponenter og hendelser.

skrivning

AI-skrivehjelpere: utkast, sammendrag, oversetter og omskriving.

admin

Alt, inkludert et lite antall sensitive handlinger som bevisst ikke kan nås av noe smalt omfang: sletter en kontakt, endrer personverninnstillinger og leser tilgangsloggen.

💡
Ring meta. aksjoner med nøkkelen din for å se nøyaktig hvilke handlinger det kan kjøre på installasjonen. Det er alltid mer pålitelig enn å jobbe fra en liste.

Tilgangsnivåer

Alle

Nøkkelen kan kalle alt det den tillater.

Lesebeskyttet

Hver skriving blir nektet, uansett omfanget sier. Det tryggeste valget for rapportering, dashboards og alt som aldri bør endre dataene.

Begrenset

Du finner de nøyaktige handlingene nøkkelen kan ringe. Alt annet blir nektet, selv innenfor et tillatt omfang.

4
Kopier nøkkelen

Vist én gang. Starter med "opq_". Oppbevar den trygt.

🚫
Del aldri API nøkler i offentlig kode, klientside JavaScript eller versjonskontroll. Bruk miljøvariabler
Utvikler

Koble til nettstedet ditt

Den OpsIQ widget er et JavaScript snutt du legger til på nettstedet ditt for sporing, AI-chatt, billettskapelse og kundeidentifikasjon.

Hvordan det fungerer
Koble til nettstedet dittEn one-line skript tag til venstre og, til høyre, en nettside med OpsIQ chat boble vises i hjørnet.<!-- paste before </body> --><script src="https://cdn.opsiq.io/w.js" data-site="ws_8a2f" async></script>
Koble til nettstedet ditt

Grunnleggende installasjon

Grunnleggende widget small
<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.

Konfigurasjonsattributter

data-site-key

Nødvendig. Din nettsidenøkkel fra tilkoblede nettsteder

data-mode

Valgfritt. "chat" (standard), "billetter", eller "begge".

data-position

Valgfritt. "nederst til høyre" (standard) eller "nederste venstre".

data-color

Valgfri. Primær farge hex kode

data-greeting

Valgfritt. Første hilsen meldingen

data-language

Valgfritt. Språk for brukergrensesnitt: « en », « es »,« fr »,» de »," pt "," ar ", etc.

data-identity-token

Valgfritt. Servergenerert signert identitetssymbol

SPA-støtte

Manuell SPA-rutesporing
// 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,
}]);

CSP-regler

CSP-regler for widget
script-src 'self' https://your-opsiq-domain.com;
connect-src 'self' https://your-opsiq-domain.com;
frame-src https://your-opsiq-domain.com;
Må widgeten bremse nettsiden min?+

Nei. Under 15 KB gzipped, laster async etter sideinnholdet !

Kan jeg tilpasse utseendet?+

Bruk datafarge for primær farge. Kontaktstøtte til CSS overstyr alternativer.

Utvikler

Widget installere oppskrifter

Plattformspesifikke installasjonsguider.

Hvordan det fungerer
Widget installere oppskrifterPlattform installer kort for WordPress, Shopify og Google Tag Manager, hver sier hvor du skal legge til widget.WPWordPressInstaller plugin, skriv innNettstedets nøkkel, spar.BestillShopifyLim inn snutten i.flower før /body.GTMTaggbehandlerCustom HTML -tagg, alle sider.
Installer oppskrifter

WordPress

Scenario:
Legg til på alle sider i a WordPress Nettsted.
Hva skal jeg gjøre:

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

Scenario:
Legg til i din Shopify butikk.
Hva skal jeg gjøre:

Online Store > Themes > Edit Code > Layout > theme.liquid. Paste before </body>. Save.

React / Next. js

Scenario:
Legg til i en React eller Next. js appen
Hva skal jeg gjøre:

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

Scenario:
Legg til i ditt WHMCS klientområde.
Hva skal jeg gjøre:

Oppsett > Generelle innstillinger > Annet> Global Footero innhold. Lim inn snutten eller rediger malfoten din. tpl

Google Tag Manager

Scenario:
Legg til via GTM.
Hva skal jeg gjøre:

Opprett egendefinerte HTML -tagge, lim inn snutt. Trigger: Alle sider. Publisher

Utvikler

Admin-widget i bakstykket ditt (en kontrakt, en hvilken som helst plattform)

Embed the OpsIQ admin assistant — admin chat, ticket inbox and AI Writing — inside YOUR OWN platform's admin panel, so your team never leaves their tools. Like visitor identity and portal SSO, this is ONE generic contract implemented in ~15 lines of your platform's server code — the same pattern Zendesk, Intercom and Discourse use for SSO. There is no per-platform plugin to wait for: any stack that can compute an HMAC can do this today.

Trinn 1 — den innebygde linjen

Fra Eksterne nettsteder→nettstedet ditt→KoderKopier lastelinjen og legg den til i adminpanelets sider (fotholder inkluderer, layoutmal eller en administrator-kun tilpassede JS boks):

En linje innebygd
<script async src="https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=SITE_KEY&identity_token=TOKEN_FROM_STEP_2"></script>

Trinn2- fortellerOpsIQsom er logget inn (server-signert)

Bare programmet vet hvilken administrator som er logget på - det vil si ikke å bli mangelfullt, det er sikkerhetsmodellen. Serveren genererer et kortlevende signert polikum fra din egen sesjon, akkurat som besøkersidentitetstokinene, underskrevet med samme nettsted webhook-hemmelighet:

PHP · Signere admin-identiteten fra sesjonen din
<?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.
Per-admin tilgang, automatisk

Every admin who logs into your platform is matched individually: OpsIQ's per-admin access gate resolves the token's username + email against one OpsIQ agent (Team page; use the agent's "match emails" list when platform emails differ) and applies THAT agent's workspace, department and inbox permissions. New staff member = add the agent in OpsIQ; no embed changes.

Roller ride langs

Uansett hvilken rollestreng plattformen sender vises påOpsIQsiden for tilskrivning; autorisasjon kommer alltid fraOpsIQEn agent, aldri fra den hevdete rollen.

Hvorfor ikke lese vår påloggingsinformasjonskapsel?

Browsers never send your admin cookie to another origin — no vendor can "just detect" your login cross-domain. Every serious product solves this the same way: your server vouches, signed. That is the whole contract.

Ingen delt modus på ditt eget nettsted

Av OpsIQ -verten er det ingen upåbehørt eller delt loggmodus: lasteren forblir skjult til et signert administratortoket kommer. Tokens=... verdien i kodelastern er en widgetnøkkel som bare identifiseres på nettstedet; den kan aldri logge noen inn.

Den authenticated flagg - plasser det på TOP-nivå

Dette flagget er serverens påstand om at et menneske virkelig er logget inn, og OpsIQ avviser noe symbol uten det. "authenticated" => true beside site_key/iat/expIkke bare i admin objekt. Nåværende OpsIQ aksepterer det i enten posisjon, men eldre utgivelser bare lese toppnivå - og feilen er vildledende: samtaleliste, historie og ulest alle autentisitetsfin mens hver chat-sving svar "Admin login required", som ser ut til å være en økt bug og er ikke. Hvis du se nøyaktig den splittelsen, sjekk dette flagget først.

Token hygiene

Logg på serveren bare, aldri i nettleserJavaScript. Hold exp kort (minutter til timer);OpsIQavviser utløpte og fremtidsbestemte polletter, og signaturen bindes til symbolet på nettstedets nøkkel.

Referansegjennomføring

DenWHMCSmodulen gjør dette automatisk fraWHMCSadministrator sesjon; Botble Hotel-kontaktens brofil gjør det fra Laravel Session (op=admin_identity). Begge er bare denne kontrakten i deres plattform dialekt - kopiere som leser nærmest stabel.

Null side ledninger (tilkoblings-deklarert sonde)

Når din OpsIQ -kontakt lagrer identitetsendpoint i sin admin_identity_probe_url innstilling, PLAIN-lasterlinjen er alle dine admin sider trenger: widgeten oppdager proben fra koblingsenheten, kaller den med nettstedet ditt nøkkel + widney token og godkjenner hver administrasjon automatisk. Siden kan fortsatt overstyre en data-identity-endpoint attributt eller window.OpsIQAdminIdentityEndpoint.

💡
Underskriftshemmeligheten er fylt ut for deg. På eksterne nettsteder, ditt område, Koder og Alternativ 3, Logg på personalet ditt, hvert eksempel inneholder allerede dette nettstedets egen hemmelighet så koden fungerer som limte: det er ingenting å kopiere eller konfigurere. Eksemplene på denne siden viser opsiq_whsec_YOUR_SITE_SECRET i sin plass. Hvert eksempel ser etter OPSIQ_SITE_SECRET (eller rammeverkets egen innstilling, som heter i sine notater) på serveren først og bruker det når den er satt, slik at du kan flytte hemmelighetene ut av filen hver gang du vil, for eksempel å rotere dem uten redigeringskode. På en annen måte kjører fila bare på tenaren din: lim aldri inn til en nettside eller nettleseren JavaScript, og aldri forplikte det til et offentlig lager fordi alle som har hemmeligheten kan logge på som noen av dine kunder eller ansatte. WHMCS og Botble trenger ikke noe av dette: WHMCS Kroken kommer med hemmelighet fylt inn, og den Botble koblingspanelet fyller den i broen.

Komplett kode, plattform etter plattform

Hvert eksempel skriver ut Admin Chat-taggen for et medlem som er logget inn, med det signerte polletten lagt til og svarer på widgetens oppdatering (?opsiq_identity_refresh=1&role=admin) med {"success":true,"identity_token":"…"} eller 401. Eksterne nettsteder, din nettside, Koder og Alternativ 3, Logg på personalet skriver ut samme kode med nettstedets nøkkel og hemmelig fylt inn.

⚠️
Admin-token er den todelte form: base64url(payload), en prikk, deretter heks HMAC-SHA256 av den base64url-teksten. Det er ikke en JWT, og et J WT blir nektet. Adminobjektet trenger id og epost og exp må være inne 24 timer.

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>`)
}

Implementere identitetsendepunkt på Laravel (hardwon-noter)

Hvis plattformen din er Laravel (Botble, Bagisto og tilpassede apper) og endepunktet ditt er en frittstående fil som starter rammen for å lese den loggede administratoren vil tre detaljer spare deg timer - hver produserte en reell produksjonsfeil før det ble lært:

Bind forespørselen før bootstrap

Tjenesteleverandørene kan løse request Laravels egen livssykkel binder den fangete forespurnningen først inne. Kernel::handle() Speil som er den ordren: $app->instance('request', Request::capture()) FØR $kernel->bootstrap()Eller du får "Target class [request] does not exist".

Session-cookies prefiks er HMAC-keyed

Moderne Laravel prefikser informasjonskapselverdier med en HMAC Beregnet med APP-tasten (CookieValuePrefix) — en slette sha1(name."v2") Kan aldri matche det. CookieValuePrefix::validate($name, $decrypted, $keys), med en strukturell tilbakefall (40Heksetegn + | i stilling40). Fortell: En økt-ID lengre enn40tegn (81= Prefiks fortsatt vedlagt) og en økt som bare laster med _token I den.

Hvor loggen bor

Authen-tempelet er login_<guard>_<sha1(guard class)> — for standardnettvakten: 'login_web_' . sha1(Illuminate\Auth\SessionGuard::class)Skann alle login_* numerisk nøkkel som en tilbakefall for tilpassede vakter.

Feilsøk som broen gjør

Send a debug=1 modus som navngir den sviktende STEP og unntak - en blind fangst-alle gjorde et levende distribusjon udiagnostisert. Botble broen (fra v1.0.7) er referanse: trinnmarkører ved kjerne/binde / bootstrap/decrypt/session/auth/db.

Laravel · komplett identitetsendepunkt (kopier, sett de to konstantene som er ferdig)
<?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]);
}

Det samme endepunktet på andre stabeler

Only the "who is logged in?" line changes — the signing block is identical everywhere. Sign on the server, never in JavaScript.

WordPress · WHMCSSymfony · vanlig PHP - bytte oppslag, hold signeren
<?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]);

Når det ikke fungerer - diagnose i denne rekkefølgen

Widget vises aldri, konsollen sier "signed admin identity token is required"

Sluttpunktet returnerte ikke identity_token. Åpne endepunktet URL direkte i den loggede admin-leseren med &debug=1 - du vil se det feilaktige trinnet. På Laravel er dette nesten alltid den forespurn-bindende eller informasjonskapsel-presentasjonselementet ovenfor.

Historie og samtaler fungerer, men hver chattur sier "Admin login required"

Den klassiske splitten. Token mangler TOP-LEVEL authenticated flagg - widgetens eget endepunkt aksepterer token, den delte verifisering bak chatstraum avviser det. Legg til "authenticated" => true beside exp.

"admin not provisioned in OpsIQ" (HTTP)401)

Tone verifisert, men dets brukernavn + e-post match no OpsIQ Agent. Legg til agenten i OpsIQ → Lag, eller legg til plattformen e-post i denne agentens matchemails liste når den er forskjellig fra deres OpsIQ e-post.

Alt403sfra nettleseren, men jobber med krølle

En CORS- forhåndsbelysning avviser et forespørselhode. Sluttpunktet må svare OPTIONS og ekko den anmodende opprinnelsen, eller bare unngå egendefinerte overskrifter - widgeten trenger kun informasjonskapsel.

Fungerte i går, mislykkes i dag

Sjekk exp: token er kortlevet av design. Skjermelementene re-probes automatisk, så dette betyr vanligvis sluttpunktet sluttet å se økt - en app nøkkel rotasjon, et session driverendring eller ei endring i informasjonskapseldomain.

💡
Admin-widgeten skjules til identitet løser seg, og hver chat/innboks / datasamtale håndheves serversiden mot den matchedeOpsIQagent uavhengig av noe siden hevder. Token låser opp UI; tillatelser kommer alltid fraOpsIQ.
Utvikler

Besøkendes identitet

Identifikasjon kobler anonyme besøkende til kjente kunder. Når identifisert, OpsIQ linker surfing historie, samtaler og billetter til kundeprofilen.

Hvordan det fungerer
Besøkendes identitetEn flyt: en bruker logger inn på nettstedet ditt, du utsteder et signert identitetssymbol og OpsIQ Forener sesjonene deres, chatten og billettene til én profil.Brukerlogger innPå nettstedet dittSignert polikumidentitet_ token (HMAC)En profilsessions+ samtaler+ billetter
Besøkendes identitet

To nivåer av identitet, og når hver er nok

Nivå1— et usignert hint

Du forteller widgeten som besøkende er med en sletteJavaScriptobjekt. Det fyller e-posten og kundens id på besøkende logg, så dashboardet viser sign in trafikk og økter bli med. Dette er en HINT: alle kan redigere det i nettleseren sin, slik atOpsIQAldri å gi ut kontodata om styrken til det.

Nivå 2 — et signert identitetssymbol

Serveren din signerer et kortlivet polikum med nettstedets webhook-hemmelighet.OpsIQverifiserer signaturen og behandler først personen som en bevist kunde. Dette er nivået som låser opp kontosvar i kunders chat-og kontaktoppslag. Bruk det til noe fremmed må ikke se.

⚠️
Nivå1er et skjermkomfort. Nivå2er autentisering. Hvis et spørsmål kun kan besvares for den virkelige kontoholderen, trenger du nivå2.
💡
Du trenger ikke å skrive nivå 2 For hånd: Fjernliggende nettsteder → nettstedet ditt → Koder → C. Signerte kunder genererer signaturkoden og oppdateringshåndteringen for PHP, WordPressLaravel, Node.js, Python og Django WHMCS Krok og Botble kontakt broen allerede signerer kunder. Identitet sier hvem kunden er; deres bestillinger eller bookinger nå samtale gjennom en forbindelse (med et brufil bare når plattformen ikke har noen API).

Nivå1— den uopplyste hinten

Velg objektet før widget- skriptet, eller ring identifisering() senere når appen din vet hvem som er logget på. Begge skjemaene leses; bruk det som passer sidene dine.

JavaScript · de to støttede skjemaene
<!-- 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.

Nivå2- det serversignerte identitetstoken

Akkurat den samme token kontrakt som admin widget, med en customer Tema i stedet for et admin 1. Signer det på serveren din og send den til widget. To detaljer bestemmer om det verifiserer, og begge er enkle å gjøre feil:

Den HMAC dekker BASE64URL-strengen, ikkeJSON

Signere $payload64Ikke $payload. Signering av råJSONproduserer et symbol som ser riktig ut og avvises hver gang med en signaturfeil.

base64url, upolert

Oversett +/ til -_ og riv av = polstring. Plain base64 skjer for å overleve i dag; Base 64url er kontrakten og det som hverOpsIQKonverter og referansekontakt utsender.

Autentisk går på TOP-nivå

Beside site_key, iat og exp. Det er din påstand om at et ekte menneske logges på, og OpsIQ nekter token uten det.

customer. id er obligatorisk

Et token som bare bærer en e-post verifiserer som signatur og blir så lydløst droppet. Send alltid et id.

Hold exp kort

Minutt til time. Token er en sesjonspåstand, ikke et trosbekreftelse å lagre.

PHP - signerer et kundeidentitetstoken (denne nøyaktige koden verifiserer)
<?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>';
🚫
Logg på serveren bare. Et symbol som er mint i nettleser JavaScript, betyr å sende nettstedets hemmelighet til alle besøkende, noe som gir noen muligheten til å personisere enhver kunde.

Den samme kontrakten, tre overflater

Kundechat på nettstedet ditt

kundeemne, passert som identity_token til widget.php. Dekker over. Valgfritt: med snutt A og en kontakt chaten bekrefter allerede kunder selv (et bestillings- eller ordrenummer med bevis, eller epostkode før bestilling). Fjernliggende nettsteder, Koder C genererer koden for automatisk gjenkjenning av kunder som allerede er logget inn på siden din.

Admin chat inne i bakstykket ditt

admin emne, passert tilopsiq/embed/admin_widget.php

Støtteportalen dype lenker

En strengere variant: samme krav pluss jti og single_use: True, and a120- andre livet, fordi token reiser i enURLog må være brukervennlig en gang. Ikke håndrull den. Innstillinger, Støtteportalen har et klart snutt for språket ditt; plattformen minterer det til deg når kontoområdet kjører på denne serveren.

Hva om en besøkende fjerner cookies?+

De blir anonyme til de er identifisert på nytt. OpsIQ koblinger den nye anonym rekorden til kundeprofilen øyeblikket et hint eller en token kommer.

Hvorfor bekrefter mitt pollett for besøksloggen, men ikke for kontospørsmål?+

Det er nivået1/ Nivå2delt. En usignert hint fyller besøksloggen og ingenting annet. Kontosvar trenger en verifisert signatur.

Utvikler

Portal-innlogging: kode for hver plattform

Send en kunde som allerede er logget på programmet direkte inn i supportportalen din, logga på uten annet passord. Denne siden forklarer hvordan avlevering fungerer, alle krav i pollen og oppsettet samt fullstendig rute for hver plattform. Innstillinger Støtte Portal skriver ut samme kode med egen portaladresse og arbeidsområdetast fylt opp.

Hvordan det fungerer

1
Kunden klikker på Støtte i app

Lenkepunktene på en liten rute på din server, for eksempel /support-portal. Never on a link som allerede inneholder et symbol: Et pollett i ei side lekker gjennom sidekilden og nettleseren historie og referansehodet.

2
Ruten sjekker hvem som er signert

Den leser kunden fra din egen sesjon. En besøkende som ikke er logget på, sendes til innloggingen først og kommer tilbake til ruten etterpå.

3
Ruten tegner et engangssymbol

En standard HS256 JWT signert med dette arbeidsområdets signeringshemmelighet, som bare serveren din har. Den utløper etter 120 sekunder og kan brukes en gang.

4
Ruten videredirigeres til portal

Til portalsiden kunden kom fra når portalen ba om en (opsiq_portal_return, akseptert bare inne i portaladressen din), ellers portalen hjem. Svaret bærer Referanse-Policy: ingen referanser og cache - kontroll : no-story

5
Portalen verifiserer og signerer kunden i

Signaturen, arbeidsområdenøkkelen og utløpsdatoen er kontrollert. Kunden finnes eller opprettes via e-post, mens de eksisterende forespørslerne matches dem.

Token, krav på grunn av kravene

site_key

Arbeidsplassnøkkelen. Et symbol laget for et annet arbeidsområde blir nektet selv når det er signert riktig.

iat/exp

Utgitt og utløpt, i sekunder. Portal token liv 120 sekunder: det må bare overleve én omdirigering.

autentisert: sant

Appen din er uttalt om at den virkelig signerte denne personen i. Nødvendig, på toppnivå.

jti + single_use: sant

En tilfeldig id og flagget. Den samme lenken kan ikke brukes to ganger.

plattform

En gratis etikett for hvor kunden kom fra (php, wordpress, whmcs...) Vist i kundens profil.

Kunde. id og kunde. email

Begge kreves. ID-en er appens egen kundeID; emailen er hvordan portalen finner kunden og passer til deres forespørsler.

kunde.navn / external_id

Valgfritt displaynavn, og id OpsIQ lagres mot plattformen din.

Oppsett

1
Kopier ruten

Innstillinger, støtteportalen og sømløs logg inn fra appen. Velg hva din app kjører på; koden under listen har portaladressen og arbeidsflatenøkkelen fylt ut med nummererte notater for den plattformen.

2
Hemmeligheten er allerede i koden

Den kopierte ruten inneholder dette arbeidsområdets signeringshemmelighet, så den fungerer som limt inn. For å holde det ute av filen satt OPSIQ_SITE_SECRET (eller rammeinnstillingene) på serveren i stedet: den verdien brukes først. Legg aldri ruten til en side, JavaScript, en mobilapp eller et offentlig lager: alle som har hemmeligheten kan logge inn som enhver kunde.

3
Koble til brukerstøtteknappen i ruten

For eksempel https://your-app.com/support-portal.

4
Gjør portalens logg på knappen din bruk appen

Portal Studio, Logg inn-side URL: angi den til samme rute. Portalen legger til opsiq_portal_return i seg selv og ruten bringer kunden tilbake til den siden, logget på.

5
Valgfritt: Logg ut overalt

Innstillinger, Support Portal, Logg ut overalt: appens loggeut URL så å signere fra portalen også underskriver kunden av din app.

6
Test

Opprette en signert testkobling på samme innstillingsside for å sjekke portalsiden alene, og deretter åpne ruten mens du logger inn i appen.

WHMCS trenger ingen kode: WHMCS krok fra Remote sites allerede signerer klienter i portalen og bringer dem tilbake til siden de var på.
💡
Underskriftshemmeligheten er fylt ut for deg. I Innstillinger, Støtteportalen, Seamless-innlogging fra appen din inneholder hvert eksempel allerede dette nettstedets egen hemmelighet så koden fungerer som limt: det er ingenting å kopiere eller konfigurere. Eksemplene på denne siden viser opsiq_whsec_YOUR_SITE_SECRET i sin plass. Hvert eksempel ser etter OPSIQ_SITE_SECRET (eller rammeverkets egen innstilling, som heter i sine notater) på serveren først og bruker det når den er satt, slik at du kan flytte hemmelighetene ut av filen hver gang du vil, for eksempel å rotere dem uten redigeringskode. På en annen måte kjører fila bare på tenaren din: lim aldri inn til en nettside eller nettleseren JavaScript, og aldri forplikte det til et offentlig lager fordi alle som har hemmeligheten kan logge på som noen av dine kunder eller ansatte. WHMCS og Botble trenger ikke noe av dette: WHMCS Kroken kommer med hemmelighet fylt inn, og den Botble koblingspanelet fyller den i broen.

Komplett ruter, plattform på plattform

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)
}

Når noe er galt

Portalen åpnes, men signert

Hemmeligheten eller arbeidsområdenøkkelen passer ikke til dette arbeidsområdet, poletten er eldre enn 120 sekunder (sjekk serverklokken) eller den samme koblingen ble åpnet to ganger. Opprett en signert testlenke: Hvis det fungerer sammenligner du tokens krav med eksemplet.

Det lander alltid på portalen hjem

Returadressen var ikke inne i portalen din, så den ble ignorert på hensikt. Sammenlign det med Portal URL x vist i Innstillinger.

Gjester får en feil i stedet for innloggingen

Bytt ut /login på ruten med din ekte innloggingsside, og sørg for at loggen returnerer til adressen den ble gitt.

Det virker bare for noen kunder

kunde. email eller customer. id er tom for dem, og begge kreves.

Utvikler

Kundechat: gjenkjenner logget på kunder

Valgfritt. De fleste nettsteder trenger ikke dette: med vanlig chatbit og en kontakt verifiserer chatten kunder selv, med et bestillings- eller ordrenummer pluss bevis for oppslag samt epostkode før en bestilling. Legg til denne når du vil ha kunden som allerede er logget inn på nettsiden din gjenkjennes automatisk, med hele kontoen sin. WHMCS Allerede gjør det gjennom sin krog. Fjernsider, nettstedet ditt, Koder og C skriver ut den samme koden med din nettsidenøkkel fylt inn.

Hvordan det fungerer

1
Din side skriver ut chat tag

For en logget inn-kunde widget URL bære &identity_token=... signert på serveren din; for en gjest er det den vanlige tag. Ingenting hemmelig er i siden: bare et symbol som utløper.

2
Chat verifiserer token

Signatur, arbeidsområdesnøkkel og utløp. Kunden er så kjent på hver chatforespørsel, og kontakten kan svare om sine egne bestillinger eller fakturaer.

3
Chatene oppdateres før timen er oppe

It calls the page it is on with ?opsiq_identity_refresh=1&role=customer. Your code answers {"success":true,"identity_token":"…"} while the customer is signed in, or 401 with {"success":false,"login_required":true} when they are not. That is why the refresh handler must run before your page prints anything.

Hvordan det skiller seg fra portalen toket

Livstid

En time (eksp = iat + 3600I stedet for 120 sekunder, fordi det rider hver chatforespørsel i stedet for en omdirigering.

Ingen jti eller single_use

Det samme token brukes for hver melding til oppdatering erstatter den.

Same alt annet

site_key, iat, exp, autentisert: sant, plattform og kunde med en nødvendig ID-og email. Same hemmelig, samme signatur

💡
Identifikasjon sier hvem kunden er. Deres bestillinger, bookinger eller fakturaer når samtalen gjennom en kontakt: én som ringer plattformens API, eller når plattformen din ikke har noe API, en kontakt pluss dens brofil (kontaktbyggeren gjør én).
💡
Underskriftshemmeligheten er fylt ut for deg. I eksterne nettsteder, ditt område, Kodene dine C inneholder hvert eksempel allerede dette områdets egen hemmelighet så koden fungerer som limt inn: det er ingenting å kopiere eller konfigurere. Eksemplen på denne siden viser opsiq_whsec_YOUR_SITE_SECRET i sin plass. Hvert eksempel ser etter OPSIQ_SITE_SECRET (eller rammeverkets egen innstilling, som heter i sine notater) på serveren først og bruker det når den er satt, slik at du kan flytte hemmelighetene ut av filen hver gang du vil, for eksempel å rotere dem uten redigeringskode. På en annen måte kjører fila bare på tenaren din: lim aldri inn til en nettside eller nettleseren JavaScript, og aldri forplikte det til et offentlig lager fordi alle som har hemmeligheten kan logge på som noen av dine kunder eller ansatte. WHMCS og Botble trenger ikke noe av dette: WHMCS Kroken kommer med hemmelighet fylt inn, og den Botble koblingspanelet fyller den i broen.

Komplett kode, plattform etter plattform

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>`)
}

Når noe er galt

Chat behandler en kunde som gjest

Merken ble trykt uten identity_token (Hemmeligheten mangler på serveren, så koden mislykkes), eller tokens arbeidsområdenøkkel eller hemmelighet stemmer ikke.

Anerkjent i begynnelsen, så gjest etter ca. en time

Oppdateringshåndteringen er ikke nådd: den må kjøres før noen utdata, på hver side chatten vises.

Den enkle chatten viser to ganger

Fjern den enkle chat tag fra malen din: denne koden skriver ut prat i seg selv.

Utvikler

Plugins og SDK

OpsIQ tilbyr SDK Pakker og plugins for felles plattform.

Hvordan det fungerer
Plugins og SDKFire pakker: PHP SDK, Node.js SDK, WordPress plugin og WHMCS modul, hver med sin installasjonskommando.PHPPHPSDKKomponist krever opsiq/sdkJSNode.jsSDKnpm i @opsiq/sdkWPWordPress tilleggsmodulEtt klikk installer og koble tilWHWHMCS modulAddon for fakturering + billett relé
Plugins & SDK-er
PHPSDK

Komponistpakke: ID-tokengenerasjon, handling API hjelpere, webhook signaturbekreftelse.

JavaScript SDK

Nettleser-side: sporing, identitet, tilpassede hendelser.

WordPress tilleggsmodul

Widget-injeksjon, identitet fra WP brukerøkter WooCommerce Sync.

WHMCS modul

Full integrering: widget, billett relé, identitet.

Shopify temautvidelse

Appen er innebygd med automatisk kundeidentitet.

PHP SDK Rask start

PHP SDK eksempel
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);
Utvikler

Undersøkelser API, hendelser og kontaktfri automatisering

Survey Studio er designet for å bruke de samme skrivne generelt API, intern executor, eventbuss og webhook-operasjoner som resten av OpsIQ. Dette lar utviklere integrere slutten til slutt uten å bygge en pakket kontakt.

⚠️
Implementasjonsstatus: den levende katalogen avslører for tiden bare platform.get.survey.config og platform.save.survey.config. Den surveys.* og feedback.* Familier under er godkjent målkontrakt og må returnere unknown_action til registrert.

Målrettede handlingsfamilier

Typer, maler og hurtig lansering

surveys.types.*, surveys.templates.* og surveys.quick_launch.* liste, forhåndsvisning og bekrefte komplette starter.

Undersøkelser og versjoner

surveys.create|get|list|update|archive|duplicate pluss ugjennomtrengelig versjon, validering og publisering av handlinger.

Utdeling og målretting

surveys.deployments.*, surveys.links.*, surveys.audiences.*, surveys.triggers.* og surveys.variables.*.

Utendørs og svar

surveys.invitations.*, surveys.campaigns.*, surveys.recipients.*, surveys.responses.*, eksport, reaksjon og analyse.

Webhooks, import og tilbakemelding

surveys.webhooks.*, surveys.imports.*, feedback.items.*, feedback.analytics.*, feedback.sources.* og feedback.analysis.*.

Kontaktfri flyt

1
Opprett og publiser gjennom General API

Bruk skrivne undersøkelser.* Handlinger med en arbeidsområde-pinned nøkkel. Skrivere erklærer tillatelse, risiko, bekreftelse, idemppotens og tørt åferd.

2
Motta forretningsarrangementet

Send en signert hendelse til et inngående webhook, for eksempel ordreavbestilling eller fullført onboarding-trinn.

3
Kart den i Handlinger og Triggers

Velg en OpsIQ Generelt API handling som å utstede en undersøkelsesinvitasjon eller forberede kampanjen, kartlegg felt fra den verifiserte utløseren nyttelast.

4
Abonner på Survey events

Lever den dokumenterte forretningssikre undersøkelsen.* livssyklus undergruppe til endepunktet ditt med signatur, filter, reprøve og logge om igjen.

Canonical event mål

Den delte katalogen vil dekke Survey/Deployment publisere tilstand, publikum og utløse beslutninger, invitasjoner, render / start/partiell/resummering/fullstendig/abandon, respons redaksjon, kampanjetilstand og levering feil. Høy volum fokus, rulling og spørsmål timing opphold i Surveys Analytics lagring med mindre eksplicit dokumenteres for fan-out.

En kobling er valgfri. Den legger til gjenbrukbar plattform oppdagelse, verifisert identitet, fakta, variabler og mottaker enumering. API pluss Handlinger og Triggers/webhooks forblir den komplette integrasjonsstien til utviklere som ikke trenger en pakket kontakt.
Utvikler

RESTAPI

Den OpsIQ REST API gjør det mulig å programmere deg til alle plattformfunksjoner.

Hvordan det fungerer
RESTAPIEn terminal som viser en POST til OpsIQ API med en Bearer-nøkkel, oppføring av åpne billetter og siden JSON Svar.$ curl -X POST https://your-domain.com/api/v1.php \-H "Authorization: Bearer opq_..."200OK{ "data": [{ "id": 4192, "ticket_number": "T-4192","subject": "Card declined", "status": "open" },... more tickets ...], "page": 1, "per_page": 50, "has_more": true }
RESTAPI

Forespørselsformat

Send nøkkelen som Authorization: Bearer opq_... eller X-OpsIQ-Key: opq_.... Bruk én autentiseringshode, ikke begge deler

API forespørselsformat
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"
}

Felles tiltak

Den API er handlingsbasert: send en action navn i kroppen. Hver registrert administrator JSON -operasjon har en stabil, utpekt handling. {"action":"meta.actions"} (ingen nøkkel nødvendig) for autoritativ, per installasjonsliste, avtale om å be om risikometadata og omfang. platform.routes.* Broen er bare for eldre integrasjon.

crm.contacts.list

Liste CRM kontakter (scope crm. read). Paramer: Q, status, kilden, tag, leading-scoret, grense.

crm.contacts.upsert

Løs-eller -skape en kontakt (cope crm. write). Paramer: epost pluss felt, tagger og notater

crm.deals.list

Liste CRM-tilbud (scope crm. read). Paramer: status, scene_id, company _ID, eier_admin_ide, pipéline_id og grensen.

crm.activities.record

Opptak om livssyklus/virksomhet for en kontakt (Scope crm. write). Paramer: e-post eller contact_id, hendelsen, verdien og valutaen.

crm.conversions.record

Opptak av konvertering (scope crm. write). Paramer: contact_id eller e-post, converting_type, verdi og valuta.

crm.events.list

Poll CRM hendelsesstrøm (Scope crm. read). Paramer: grensen

tickets.list

Liste billetter (scopebilletter. read). Paramer: side, per_page, sortering, ordre, status, prioritet, avdeling _id, tildelt_admin_ID, klient_ email, søk.

tickets.get

En billett og dens meldinger (cope biljetter. lesed). Params: count_id eller cutle_number, inkluderer _meldinger, e-post_limit.

tickets.reply

Legg et svar til en billett (scope tickets. write). Params: biljett_id eller billett_nummer, kropp, forfatter _type, forfatter_navn, intern.

tickets.update

Oppdatere en billett (scopé-billetter. write). Params: biljett_id eller ticket_number, status, prioritet, emne _ide, administrert_admin_ID

tickets.open

Åpne en støttebillett (scope billetter. write). Params: kunde_ email, customer _name, emne, organ, prioritet.

tickets.bulk

Kjør en bulk kø operasjon (scope billetter. write). Params: drift, ids.

conversations.list

Liste live-chat samtaler (scope conversations.read). Params: page, per_page, status assigned_admin_id, client_email, søk.

conversations.get

En samtale og dens meldinger (cope conversations. read). Param: chat_id eller tråd_key, inkluderer _meldingene.

conversations.messages

Sidet meldingshistorie (cope conversations. read). Param: chat_id, side, per _side, inkluderer

conversations.send

Send en melding til en samtale (scope conversations. write). Params: chat_id, beskjed, avsendar_type, internt.

conversations.update

Tilordne, omstatus eller ny tittel på en samtale (scope conversations. write). Params: chat_id, status, administrert _admin_ID, emne.

koblinger. list / . get/

Se hvilke kontakter som er installert, hva hver enkelt kan gjøre og om dens legitimasjon fungerer (cope connectors. read).

automations.actions.list

Handlingene som din Actions-bygger vil kjøre (Scope Automatisering. les).

automations.triggers.list

Hva vil brann og på hvilke betingelser (scope automatisering. les).

automations.runs.list

Utføringshistorikk for feilsøking av en integrasjon (cope automatisering. read). Param: status, action_key

departments.list

Departements kan du rute billett til (cope devisions. read).

notifications.list

Varsler for én operatør (scope notification. read). Params: admin_id(krevet), ulesd_only

analytics.export

En rapport som CSV (scope analytics.read). Param: seksjon, forhåndsinnstillinger fra til. Ring analyse.se for gyldige verdier.

page_intelligence. sites. list / . reports. lista

Overvåkede nettsteder og deres SEO rapporter (scope site_intelligence. read).

trading. products. list / . get

Din Store-katalog, sided (scope trade. read). Filtrer: aktiv, kategori, søk. .get returnerer et produkt med sine varianter.

trading. orders. list / . get

Lagre bestillinger (scope trading. lesed). Filtrer: status, payment_method, kanal, kunde- email. Hent en etter order_id eller dens ORD-referanse, med linjeelementer. Live gateway kassen håndtaket returnerer aldri.

commerce.refunds.list

Refundering av forespørsler og deres stat (scope trading. read).

commerce.quotes.create

Pris en vare for kunde (scope trade. write). Kilde store eller en kontaktsvak. Oppretter ingenting: ingen ordre, ikke betaling. Se handelsdelen.

billetter.csat. list / . get/ . metrics

Kundetilfredshet svarer som data (copé billetter. lesd). Filtrer etter vurdering, billett, agent eller periode; .metrics returnerer de samme tallene som instrumentbordet viser.

conversations.ratings.list

Chat samtaler dine besøkende vurdert, med kommentaren, hva som førte til rating og agent kreditert (scope conversations. read).

knowledge.articles.list

Side gjennom hjelpesenter-artikler (scope kb. read).

knowledge.articles.get

En hjelpesenter artikkel av id (scope kb. read). Params: article_id .

webhooks.events.list

Hver hendelse du kan abonnere på et webhook endepunkt til, med sin nyttelast. Tilgjengelig i hver plan så du kan bygge mot det før du kjøper ?

files.get

En kortvarig signert nedlastingslink for et vedlegg (Scope Files. read). Params: referanse, ttl.

security.check

Spør om en IP eller e-post er blokkert eller mistenkelig her (scope security.read). Kombinerer IP brannmur, billett spam blocklist og den cached Security AI dommen. Paramer: ip e-post.

security.report

Rapporter misbruk av systemet ditt observert (scope security.write). Opptegnet som en sikkerhetshendelse, klassifisert av Security AI umiddelbart og adminer er varsla om høyrisikoavgjørelser. Paramer: ip e-post, type, grunn. kilde

. blokist. add / . list

Administrer spam- reglene billettrørledningen håndhever (omfang security. write / security. read). Samme lagrer som billettsiden "Blokker avsender" - kontroll. Parametere: type (email, domene, ip), verdi, grunn, utløper_timer.

💡
Meta. actions er alltid autoritativt. Det returnerer alle tiltak som finnes på installasjonen din med omfanget hver enkelt trenger, så du aldri behøver å gjette eller hard-kode denne listen .

Paging, filtrering og sortering

Hver liste action bruker de samme parametrene, så du lærer dem en gang.

siden / per_page

Sidenummer som starter på 1, og sidestørrelse. Standard 50, maksimalt 200. grense og forskyvning er også akseptert hvis du ønsker dem.

sort/bestilling

Felt å sortere etter, og ascens eller dec (standard DeSC). Hver handling aksepterer et fast sett av sortering felt; alt annet ignoreres i stedet for feil.

filters

Send filtre som et objekt, eller pass et filter som en parameter på toppnivå. Ukjente filtre ignoreres.

Hva kommer tilbake

element, side, per_page, telle og has_more. Fortsett å be om sider til has _mer er falskt

Sidet, filtrert og sortert listeforespørsel
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
}

Feil

Hver feil returnerer samme form, med en stabil code du kan grene på. Ikke match på den menneskelige-lesbare error Tekst som kan bli omordnet.

Feilrespons
{
  "success": false,
  "code": "missing_scope",
  "error": "API key missing required scope. Needed one of: tickets.read, admin",
  "request_id": "req_8f2c1a9d4b7e"
}
manglende_api_key / ugyldig_api_key

Ingen nøkkel ble sendt, eller nøkkelen er feil. HTTP 401.

missing_scope

Nøkkelen er gyldig, men mangler omfanget av denne handlingens behov. HTTP 403.

read_ only_ key / action_ restricted

Nøkkelen er skrivebeskyttet, eller denne handlingen ligger ikke i dens tillatte liste. HTTP 403

unknown_action

Ingen slik handling. Ring meta. aksjoner for gjeldende liste. HTTP 400

missing_parameter / invalid_parameter

En nødvendig parameter er fraværende, eller en verdi ikke aksepteres. HTTP 400

not_found

Opptegnelsen eksisterer ikke, eller er ikke på arbeidsområdet denne nøkkelen kan se. HTTP 404

plan_feature_locked

Planen din inkluderer ikke funksjonen denne handlingen tilhører. Kroppsnavnet feature, den plan_name i kraft og upgrade_url. Forsøk vil ikke hjelpe; planen må endres. HTTP 402

license_required

Installasjonens lisens er ikke aktiv, så ingen handling vil kjøres før den blir gjenopprettet. HTTP 402

selling_paused

Handelsspesifikk: butikken har slått av, så ingenting kan siteres eller bestilles. HTTP 400

rate_limited

Timegrensen for denne nøkkelen brukes opp. HTTP 429

server_error

Noe mislyktes på vår side. Forespørselen_id identifiserer forsøket hvis du trenger å melde det fra. HTTP 500.

Sikker retries

Hvis du skriver ut ganger kan det ikke se om den lander. Send en idempotency_key Og en gjentakelse av samme samtale returnerer det opprinnelige resultatet i stedet for å gjøre arbeidet to ganger.

Idempotensiell skriving
{
  "action": "tickets.reply",
  "ticket_id": 4192,
  "body": "Thanks, that is now fixed.",
  "idempotency_key": "your-unique-id-for-this-attempt"
}
Hvor lenge det varer

En nøkkel er husket for 24 timer mot samme handling og API Nøkkelen.

Hva du får tilbake

Den opprinnelige responsen, pluss idempownen_replay: sant slik at du kan fortelle det var en respill.

Feilene forblir gjenprøvbare

Kun vellykkede skrivere blir husket. Hvis et anrop mislyktes, kan du sende det igjen med samme nøkkel kjører den på nytt som er hva du vil ha.

Lese

Leser ignorerer nøkkelen. Å gjenta en lesing er ufarlig

Test uten å endre noe

Legg til dry_run: true til enhver skriving. Nøkkelen, omfanget og parametrene dine er alle kontrollert nøyaktig som normalt, så stopper samtalen før noe opprettes eller endres.

Tørrkjøring: verifisere legitimasjoner og nyttelast trygt
{
  "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."
}
Bruk dry_run mens du bygger. Det er den raskeste måten å bekrefte en nøkkel har riktig omfang og nyttelasten din formes korrekt, uten at det opprettes testdata som skal rydde opp i bilene dine.

Prisgrenser

Per nøkkelgrense

Konfigurerbar timegrense per API nøkkel (standard) 1000 forespørsler i timen). Sett den per nøkkel under Innstillinger,API Nøkkelene.

Når overskridelse

HTTP 429 med koderate-begrenset, pluss en prøvetopptekst som forteller deg hvor mange sekunder du skal vente. Grensen tilbakestilles øverst i neste klokketid.

Vet hvor du står

Hver respons bærer X-RateLimit-limit, X-RoteLimi og X-Reading (en Unix timestamp). Se på igjen og senk deg før du løper ut i stedet for å vente.

Telling 429 fra 401

A 429 Det betyr å vente og prøve igjen. 401 betyr at nøkkelen i seg selv er feil eller utløpt, så å forsøke på nytt vil ikke hjelpe før du fikser tasten.

Forutsetningsbrått-forsvar

Repeterte mislykkede forsøk fra en IP er treklet separat. Gyldige nøkler aldri tur dette.

Beste praksis

Gå tilbake når det blir lite, og ærer Retry-Etter 429 I stedet for å prøve igjen umiddelbart.

Versjoner og stabilitet

Nåværende versjon

v1. Hver respons bærer X-OpsIQ-API-Version og X-OpsIQ-API-Status slik at du kan bekrefte hva du snakker med.

Hvordan du vil bli advart

Hvis en versjon er noensinne pensjonert, får svar standard Deprecation og Sunset-overskrifter, samt meta. aksjoner rapporterer utdaterte og solnedgang_at. Sjekk dem i overvåkningen din og du vil aldri bli overrasket.

Hva vil ikke endre

Eksisterende handlingsnavn, parametere og feilkoder. Nye handlinger og nye valgfrie felt kan legges til når som helst, så oversett ikke felt du kjenner igjen i stedet for å mislykkes på dem.

En fullstendig integrasjon, begynne å avslutte

Dette er hele sløyfen: Finn arbeid, les det, handle på den og bekrefte hva du gjorde.

Full billett arbeidsflyt over 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}
💡
Alt ovenfor fungerer på samme måte for samtaler: chatter. list, conversations. get, konversasjoner. send og contacts. update følger det identiske mønsteret, parametrene og responsformen.

Flere arbeidseksempler

Hver av disse er en fullstendig, rennende stykke i en ekte integrasjon snarere enn et fragment.

Side gjennom hver rekord, på tre språk

Regelen er den samme overalt: Fortsett å be om neste side til has_more Det er falskt.

Python · siden gjennom hver åpen billett
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 · siden gjennom hvert spor
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 · siden gjennom hver åpen billett
<?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"]));

Håndter alle feil som API kan returnere

Branch på codealdri på ordlyden av error. Denne ompakningen er hele kontrakt i én funksjon

Python · en klient som håndterer alle feilkodene riktig
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")

Svar på dårlig tilfredshet innen timen

Les de lave poengene, åpne en billett for hver og aldri handle på den samme to ganger.

Lukk løkken på ulykkelige kunder
# 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.

Siter et element og handle på kjøperens svar

Et avslag som forteller deg hva du skal samle
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 }
}
⚠️
Vis kunden totals.total nøyaktig som returnert. Mengden multipliserer ikke alltid enhetsprisen - et hotell sitere ett rom i tre netter - så en figur du beregner deg selv kan skille seg fra hva kjøpmannen faktisk vil belaste.

En webhook mottaker som er sikker å kjøre i produksjon

Kontroller, deduplisere og svar raskt. Gjør arbeidet igjen så kan det samme arrangementet komme mer enn én gang.

PHP · en produksjonsformet webhook-mottaker
<?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

Planer og rettigheter

Hver handling tilhører en produktfunksjon, og planen bestemmer hvilke funksjoner du har. Hvis din plan ikke inneholder et element, svarer actionen 402 - etter at nøkkelen er kontrollert, så en uutmerket samtale lærer ingenting om planen din og før noe opprettes, slik å et blokkeret skrive aldri halvhappens.

En planlåst handling
{
  "success": false,
  "code": "plan_feature_locked",
  "feature": "commerce",
  "plan_locked": true,
  "plan_name": "Growth",
  "upgrade_url": "https://…",
  "request_id": "req_8f2c1a9d4b7e"
}
Hvordan å fortelle det fra et tillatelsesproblem

A403betyr at tasten er for smal — gi den ut på nytt med riktig omfang, og det fungerer.402betyr at programmet ikke har funksjonen - ingen nøkkel kan låse den opp, planen må endres.

Ikke prøv på nytt402

Det er ikke forbigående. Overflate den upgrade_url For den som eier kontoen i stedet for å støtte og prøve igjen.

Admin-omfanget går ikke forbi det

Områder uttrykker hva den sentrale utstederen delegerte; planen beskriver det kontoen kjøpte. En admin-scoped nøkkel får fortsatt en 402 for et funksjon som plan mangler.

Finn ut før du sender

Den feature Hvert handlingsbehov er publisert i actionkatalogen nedenfor og meta.actionDu kan sjekke på byggetid i stedet for å oppdage det i produksjonen.

Den raskeste måten å se nøyaktig hvor en nøkkel står på meta.me. Det rapporterer den gjeldende planen, alle funksjonene som det bærer og hver handling denne nøkkelen kan ikke ringe med grunnen til hvert enkelt element.

meta. me - hva denne nøkkelen kan faktisk gjøre
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"
    }
  }
}
Call meta.me first when an integration behaves differently between two installs. It answers "why can this key not do that" in one request, without anyone opening the admin.

Kvitting en pris

commerce.quotes.create prices one item for one customer. It creates nothing — no order, no payment session, no held stock — so it is safe to call while a customer is still deciding.

Siterer et element
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"}}
kjøpmannen vinner totalt

For a connected platform, the total comes from that merchant and is never recalculated here. Quantity does not always multiply the unit price — a hotel quotes one room for three nights — so show the total you were given, not one you worked out.

Refusaler forteller deg hva som mangler

Hvis kjøperen trenger mer fra kunden, får du quote_refused med en missing liste navngitt feltene å samle inn, og kjøpmannens egen ordlyd som skal vises.

Bestilling er ikke et API samtale

A quote is indicative. Confirmation happens where the customer is — the signed card in chat, or the merchant's own checkout — never through this API. The response says so in ordering.

Når salget er satt i pause

Hvis butikken har slått av, sitere svar selling_paused I stedet for å kjøpe noe som ingen kan kjøpe.

De andre endepunktene

Nesten alt du trenger er en ting å /api/v1.phpDette er unntakene, og hva hver enkelt skal gjøre.

/api/v1/openapi.php · /api/v1/postman.php · /api/docs/

Maskinkontrakten og den menneskelige referansen. Ingen nøkkel nødvendig, så du kan utforske før du har en.

/api/ai_stream.php

Serversend hendelser for live chat-svar som de genereres. En strøm, ikke en JSON action.

/api/writing.php

Det eldre AI-skrivende endepunktet. Alt det gjør er også tilgjengelig som writing.* Handlinger på /api/v1.php, som er der nye arbeid skal gå.

/api/inbox_copilot.php

Draft, omskriv og triage for en billett i boks som er innebygd i din egen administrator.

/api/v1/si/…

Site Intelligence som en liten RESTAPI— nettsteder, krypeproblemer, søkeord og inntektsinntekt - for CI-rørledninger som ønsker å starte et krøll etter en utplassering og lese resultatet.

/api/connectors.php?slug=&token=

Der en tilkoblet plattform POST egne webhooks for deg. Token er minteret når du aktiverer kontakten.

/api/integrations/*.php

Integrasjonsmotoren: kjører og bekrefter handlinger, og inntar salgs-, identitets- eller reisearrangementer. Den bruker sin egen nøkkeltype som er utstedt underAPI& Webhook- byggmester.

💡
Disse alle adlyder de samme planreglene som handlingene. En funksjon planen din ikke inneholder svar 402 _, også her i den samme formen.

Alle tiltak, med det omfanget den trenger

Denne listen genereres fra den løpende katalogen, så det alltid passer til versjonen du er på. meta.actions returnerer samme informasjon som JSON.

2415 named actions: 852 reads, 1563 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: 582; explicit: 157; route_inferred: 1558; 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

Analyser (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

chat (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

handel (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 whether the storefront can launch

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: explicit. Generate a connector package Required fields: spec. Retry-safe with idempotency_key.

connector_builder.get

Read. Scope: connector_builder.read, admin. Contract: explicit. Load a Builder specification Required fields: slug.

connector_builder.import.curl

Write. Scope: connector_builder.write, admin. Contract: explicit. Import cURL into Connector Builder Retry-safe with idempotency_key.

connector_builder.import.openapi

Write. Scope: connector_builder.write, admin. Contract: explicit. Import OpenAPI into Connector Builder Retry-safe with idempotency_key.

connector_builder.import.postman

Write. Scope: connector_builder.write, admin. Contract: explicit. Import Postman into Connector Builder Retry-safe with idempotency_key.

connector_builder.list

Read. Scope: connector_builder.read, admin. Contract: explicit. 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: explicit. Run Builder conformance tests Required fields: slug. Retry-safe with idempotency_key.

connector_builder.update

Write. Scope: connector_builder.write, admin. Contract: explicit. Update a generated connector Required fields: slug, spec. Retry-safe with idempotency_key.

connector_builder.validate

Read. Scope: connector_builder.read, admin. Contract: explicit. 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: explicit. Start connector backfill Required fields: slug. Retry-safe with idempotency_key.

connectors.backfill.route.connectors.backfill

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Backfill

connectors.backfill.status

Read. Scope: connectors.read, admin. Contract: explicit. 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: explicit. Synchronize connector customers Required fields: slug. Retry-safe with idempotency_key.

connectors.disable

Write. Scope: connectors.write, admin. Contract: explicit. Disable a connector Required fields: slug. Retry-safe with idempotency_key.

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: explicit. Enable a connector Required fields: slug. Retry-safe with idempotency_key.

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: explicit. Read connector settings Required fields: slug.

connectors.settings.save

Write. Scope: connectors.write, admin. Contract: explicit. Save connector settings Required fields: slug, settings. Retry-safe with idempotency_key.

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.

kunder (44)

customers.analyze

Write. Scope: customers.write, journey.write, admin. Contract: explicit. Analyze a customer journey with AI Required fields: client_id. Retry-safe with idempotency_key.

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: explicit. Get a customer profile Required fields: client_id.

customers.journey

Read. Scope: customers.read, journey.read, admin. Contract: explicit. Get a complete customer journey Required fields: client_id.

customers.list

Read. Scope: customers.read, crm.read, admin. Contract: explicit. List known customers

customers.outreach.prepare

Write. Scope: customers.write, crm.write, admin. Contract: explicit. Prepare CRM outreach for a customer Required fields: client_id. Retry-safe with idempotency_key.

departments (1)

departments.list

Read. Scope: departments.read, admin. Contract: source_inferred. Departments List

e-post (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

t (48)

hr.agent.incident.close

Write. Scope: hr.write, admin. Contract: explicit. Close an agent incident — the same act that lifts the suspension it caused Required fields: incident_uuid, resolution. Retry-safe with idempotency_key.

hr.agent.step

Write. Scope: hr.write, admin. Contract: explicit. Run one agent step: gate verdict, execution and outcome reported separately Required fields: run_uuid, agent_key, tool_key, jurisdiction, purpose. Retry-safe with idempotency_key.

hr.agent.step.status

Read. Scope: hr.read, admin. Contract: explicit. 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: explicit. A human takes an agent run; no further agent steps are accepted Required fields: run_uuid. Retry-safe with idempotency_key.

hr.agent.tool.grant

Write. Scope: hr.write, admin. Contract: explicit. 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. Retry-safe with idempotency_key.

hr.agent.tools

Read. Scope: hr.read, admin. Contract: explicit. List the registered typed tools an agent may use, and open agent incidents

hr.ai.corrections

Write. Scope: hr.write, admin. Contract: explicit. Bundle recent reviewer corrections into a dataset; it is pending privacy review and trains nothing Retry-safe with idempotency_key.

hr.ai.quality.overview

Read. Scope: hr.read, admin. Contract: explicit. The AI quality board: sampled defect rate, override pressure per workflow, coaching reception

hr.booking.slots_reconcile

Write. Scope: hr.write, admin. Contract: explicit. Release booking slots whose claim never became a booked meeting Retry-safe with idempotency_key.

hr.connectors.certify

Write. Scope: hr.write, admin. Contract: explicit. 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. Retry-safe with idempotency_key.

hr.connectors.health

Read. Scope: hr.read, admin. Contract: explicit. 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: explicit. 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. Retry-safe with idempotency_key.

hr.decisions.explanation

Read. Scope: hr.read, admin. Contract: explicit. 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: explicit. Provision seatless employee access and send the invitation Required fields: person_uuid. Retry-safe with idempotency_key.

hr.employee.restore

Write. Scope: hr.write, admin. Contract: explicit. Lift an employee access suspension (written reason required) and provision again Required fields: person_uuid, reason. Retry-safe with idempotency_key.

hr.experience.metrics

Read. Scope: hr.read, admin. Contract: explicit. Measured persona experience metrics (self-service rate, decision cycle, coaching usefulness, quality) from live journeys

hr.global.readiness

Read. Scope: hr.read, admin. Contract: explicit. The whole launch picture: 15-gate leadership score, release readiness checks and jurisdiction coverage

hr.identity.facets

Read. Scope: hr.read, admin. Contract: explicit. List a person's identity facets and open conflicts Required fields: person_uuid.

hr.identity.link

Write. Scope: hr.write, admin. Contract: explicit. Link an identity facet to a person Required fields: person_uuid, facet_type, facet_key. Retry-safe with idempotency_key.

hr.interview.room.connect

Write. Scope: hr.write, admin. Contract: explicit. Connect the AI to interview media; refuses unless media really reaches the worker Required fields: media_uuid. Retry-safe with idempotency_key.

hr.interview.room.consent

Write. Scope: hr.write, admin. Contract: explicit. Record or withdraw consent for ONE interview purpose (recording, biometric_liveness, transcription) Required fields: media_uuid, purpose, state. Retry-safe with idempotency_key.

hr.interview.room.pause

Write. Scope: hr.write, admin. Contract: explicit. Pause a live interview Required fields: media_uuid. Retry-safe with idempotency_key.

hr.interview.room.provision

Write. Scope: hr.write, admin. Contract: explicit. Provision an interview room (a place to meet — NOT AI participation) Required fields: session_uuid, transport, accommodation_route. Retry-safe with idempotency_key.

hr.interview.room.state

Read. Scope: hr.read, admin. Contract: explicit. 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: explicit. A human takes the interview; the AI cannot speak in it again Required fields: media_uuid, reason. Retry-safe with idempotency_key.

hr.jurisdiction.capabilities

Read. Scope: hr.read, admin. Contract: explicit. 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: explicit. 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. Retry-safe with idempotency_key.

hr.jurisdiction.coverage

Read. Scope: hr.read, admin. Contract: explicit. Computed coverage for every market: released pack, named counsel owner, cited sources, passing tests

hr.jurisdiction.explain

Read. Scope: hr.read, admin. Contract: explicit. 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: explicit. Put a drafted policy pack into effect; refused without a named counsel owner and a cited law Required fields: release_uuid. Retry-safe with idempotency_key.

hr.learning.overview

Read. Scope: hr.read, admin. Contract: explicit. Read courses, paths and enrolments

hr.leave.overview

Read. Scope: hr.read, admin. Contract: explicit. Read leave types and requests

hr.lifecycle.lanes

Read. Scope: hr.read, admin. Contract: explicit. 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: explicit. Read HR connector accounts, conflicts and deliveries

hr.org.tree

Read. Scope: hr.read, admin. Contract: explicit. Read the organisation tree

hr.people.create

Write. Scope: hr.write, admin. Contract: explicit. Create an HR person Required fields: display_name, primary_email, worker_type. Retry-safe with idempotency_key.

hr.people.get

Read. Scope: hr.read, admin. Contract: explicit. Get one HR person Required fields: person_uuid.

hr.people.list

Read. Scope: hr.read, admin. Contract: explicit. List HR people

hr.people.update

Write. Scope: hr.write, admin. Contract: explicit. Update an HR person Required fields: person_uuid, display_name, primary_email. Retry-safe with idempotency_key.

hr.postings.list

Read. Scope: hr.read, admin. Contract: explicit. List job postings

hr.readiness.read

Read. Scope: hr.read, admin. Contract: explicit. Run the HR release readiness report

hr.release.verify

Write. Scope: hr.write, admin. Contract: explicit. Run the four HR release gates (schema, manifest, probe, readiness) Retry-safe with idempotency_key.

hr.requisitions.create

Write. Scope: hr.write, admin. Contract: explicit. Create a requisition Required fields: title, openings, justification. Retry-safe with idempotency_key.

hr.requisitions.list

Read. Scope: hr.read, admin. Contract: explicit. List requisitions

hr.thread.delete

Write. Scope: hr.write, admin. Contract: explicit. Delete a workforce conversation; refused while it is under legal hold Required fields: thread_uuid, reason. Retry-safe with idempotency_key.

hr.thread.legal_hold

Write. Scope: hr.write, admin. Contract: explicit. Place or lift a legal hold on a workforce conversation Required fields: thread_uuid, on, reason. Retry-safe with idempotency_key.

hr.thread.retention

Write. Scope: hr.write, admin. Contract: explicit. Set a conversation's retention class (standard|extended|permanent) Required fields: thread_uuid, retention_class. Retry-safe with idempotency_key.

hr.threads.retention_sweep

Write. Scope: hr.write, admin. Contract: explicit. Run the conversation retention sweep; legal holds are never swept Retry-safe with idempotency_key.

intent (6)

intent.clear

Write. Scope: intent.write, admin. Contract: declared_dynamic. Intent Clear

intent.funnel

Read. Scope: intent.read, analytics.read, admin. Contract: explicit. 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: explicit. 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

Read. Scope: kb.read, 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: explicit. Delete a lead Required fields: lead_id. Retry-safe with idempotency_key.

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: explicit. List leads

leads.stats

Read. Scope: leads.read, analytics.read, admin. Contract: explicit. 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: explicit. Update a lead Required fields: lead_id, status. Retry-safe with idempotency_key.

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

plattform (921)

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.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.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.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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Benchmarks Contribute Now

platform.hr.benchmarks.opt.in

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Benchmarks Opt In

platform.hr.benchmarks.opt.out

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Document Deletion Request

platform.hr.document.hold

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Gig Decide

platform.hr.gig.post

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Schedule

platform.hr.interview.transcript.correct

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Meeting Propose

platform.hr.meeting.reschedule

Read. Scope: platform.read, 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

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Meetings Reconcile

platform.hr.mentor.propose

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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. Hr Person Create

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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Req Transition

platform.hr.review.cycle.open

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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

Read. Scope: platform.read, 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.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: explicit. Analyze sales with AI Retry-safe with idempotency_key.

sales.chart

Write. Scope: sales.write, admin. Contract: route_inferred. Sales Chart

sales.compare

Read. Scope: sales.read, analytics.read, admin. Contract: explicit. 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: explicit. 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: explicit. 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

sikkerhet (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: explicit. Get a session journey Required fields: session_id.

sessions.list

Read. Scope: sessions.read, analytics.read, admin. Contract: explicit. 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: explicit. List Site Intelligence alerts

site_intelligence.alerts.resolve

Write. Scope: site_intelligence.write, admin. Contract: explicit. Resolve a Site Intelligence alert Required fields: alert_id. Retry-safe with idempotency_key.

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: explicit. 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: explicit. 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: explicit. List Site Intelligence crawls

site_intelligence.crawls.status

Read. Scope: site_intelligence.read, admin. Contract: explicit. Get crawl status

site_intelligence.dashboard

Read. Scope: site_intelligence.read, admin. Contract: explicit. 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: explicit. 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: explicit. 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: explicit. 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: explicit. Start a Site Intelligence analysis Retry-safe with idempotency_key.

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.

undersøkelser (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.

team (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

billetter (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: explicit. Block a visitor Required fields: visitor_id. Retry-safe with idempotency_key.

visitors.list

Read. Scope: visitors.read, analytics.read, admin. Contract: explicit. 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

skrivning (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.

Er OpenAPI og Postman tilgjengelig?+

Ja. Den genererte OpenAPI 3.0 dokumentet er på /api/v1/openapi.php, den genererte Postman-samlingen er på /api/v1/postman.php, og den menneskelige leselige utvikler docs er på /api/docs/.

Hvordan jobber jeg med mer enn ett arbeidsområde?+

Send site_ key i forespurt organ å velge et arbeidsområde. En nøkkel som er utstedt til én arbeidsflate, holder seg fastgjort på den; en nøkkelen med admin kontekst kan velge hvilket arbeidsområde det har lov til å se og blir nektet noe av det ikke er.

Hvilke handlinger kan kun leses?+

Enhver handling som er merket som lesemodus. Angi tillatelsestilstanden på nøkkelen til å skrive_ kun og hver skriving blir nektet med read_only_ key, så en rapportering integrasjon kan ikke endre noe selv ved feiltagelser.

Hvorfor ble jeg ikke funnet for noe som kan se i administratoren?+

Nøkkelen er omdøpt til et arbeidsområde. Opptegnelser i andre arbeidsplasser returnerer ikke_funnet snarere enn en tillatelsesfeil, så den API Aldri bekrefter om det finnes noe andre steder.

Utvikler

Sikkerhet API

En sikkerhetskontrakt for hver kontakt og integrasjon: spør OpsIQ Hva det vet om en IP eller avsender, og mate tilbake misbruk ditt eget system ser.

OpsIQ Forsvarer seg selv: IP brannmur blokker angripere, billett rørledning filtre spam og sikkerhets AI klassifiserer kriminelle og foreslår blokk regler. API Åpner den intelligensen til de andre systemene. En faktureringsplattform, en klientportal eller et tilpasset program kan sjekke besøkende før du stoler på det og rapportere hva som observertes slik at hele installasjonen lærer fra hver overflate.

Hva du kan gjøre

Sjekk før tillit

security. check svar med brannmurtilstanden, alle spamregel som passer til avsender og den cachede AI-dommen for IP_

Rapporter hva du så

security.report registrerer observasjonen som et sikkerhetshendelse, har Security AI klassifisering IP umiddelbart, og varsler administratorene når dommen kommer tilbake høy risiko. Gjentatt rapporterer klynge i hendelser, akkurat som angrep OpsIQ ser direkte.

Del spam-regler

security. blocklist. add og freedoms-flower. booklist lese and skrive de samme spam reglene som billetter siden bruker, så en avsender blokkert i ett system er spaltet overalt.

Rapportere misbruk fra en kontakt
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"
}

Omfang og sikkerhet

security.read

Behov for security. check og blocklist. list. Sikker å gi en rapportering integrasjon.

security.write

Behov for security. report og blocklist. add. Gi det bare til systemer du ønsker å mate regler og rapporter i.

Ingenting er stille ødelagt

En blokkert avsender lander fortsatt i spam-utsikten der billetten kan leses og restaureres.

Plattformen beskytter seg

Serverens egen IP adresser kan aldri blokkeres, blocklistes eller rapporteres gjennom dette API Derfor kan ikke en uforutsett integrasjon ta plattformen ned.

💡
Mint en nøkkel under integrasjoner, deretter API Keys og gi den bare sikkerhetsomfangene det trenger. Den fulle anmodningen kontrakt for hver handling er i meta. aksjoner og OpenAPI dokumentet.
Bruker du disse kontaktene automatisk?+

Utgående synkronisering er allerede automatisk: når du blokkerer en IP, tilkoblede plattformer blir fortalt gjennom kontakten sikkerhetssynkronisering. Sikkerhet API er den inngående halvdelen. Punkter kontakten eller tilpasset kode ved disse fire handlingene med en nøkkel som bærer sikkerhetsområderne.

Hvor bor spam-reglene?+

Ett lager. Billetter-siden Blokker avsenderkontroll, spam AI i innstillingene og dette API alle jobber mot samme blokkliste så det er akkurat ett sted å se ut.

Utvikler

Begivenheter API

Send egendefinerte hendelser fra serveren eller nettsiden til OpsIQ for analyse, eksperimenter og CRM utløsere.

Hvordan det fungerer
Begivenheter APIEt spor () kall som sender en egendefinert demo_ booked- hendelse til OpsIQ, som fôrer konverteringsmål og segmenter.OpsIQ. track("demo_booked", {verdi: 0, plan: "pro"});KonverteringsmålSegmenterUtløsere og webhooksNettleser (OpsIQ.track) eller serversiden POST /v1/events
Begivenheter API

Nettleserside-hendelser

Sporing av nettleserhendelse
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "button_clicked", {
  button: "signup",
  page: "/pricing",
  variant: "green"
}]);

Server-side hendelser

Serverside, registrere aktiviteter og konverteringer mot en kontakt gjennom handlingen API. Bruk crm.activities.record for livssyklus/virksomhet og crm.conversions.record for konverteringer. Det er ingen events.send handling; den inngående CRM hendelse mottaker bor på /v1/inbound.php?t=<token> For tredjeparter som presse hendelser i.

Aktivitet ved serversiden (handling 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"
}

Navngivningskonvensjonen

Ikke-notasjon

"order. completed" ikke "ordre fullført".

Fortid spent

"button. clicked" ikke "buttons. click".

Vær spesifikk

"pricing. plan_selected" ikke "brukerhandling".

Utvikler

Hvordan data flyter gjennom OpsIQ

Å forstå datastrømmen hjelper deg å feilsøke integrasjon og optimalisere ytelsen.

Hvordan det fungerer
Hvordan data flyterData flyter fra widget og beacon til OpsIQ kjernen (CDP, identitetsgrafen, AI-hjerne, analyse og CRM) deretter ut via webhooks og REST API.Element& BeaconOpsIQ kjernenCDP · identitetsgrafAI-hjernenAnalyser CRMWebhooks utRESTAPI
Datastrøm

Inngående datastrøm

1
Element- varsel

Den JavaScript widget sender sidevisninger, klikk og chat meldinger til /beacon.php.

2
Event-inntak

Hendelser lagret i opsiq_eventer med site_key, hendelsestype, kunde og eiendommer.

3
Session-samling

Sessionbuilder grupper sidevisning i øktene (via cron).

4
Identifikasjonsoppløsning

Når identifisert, er anonyme poster knyttet til kundeprofilen.

5
Kontaktsynkronisering

Koblinger trekk data fra eksterne plattformer og lagre i kontaktbufferen.

6
AI-kontekst

AI samler kontekst fra: besøkshistorikk, kundeprofil, kontaktdata og quick.

Utgående datastrøm

1
Eventbranner

Interne hendelsesbranner (ticket. created, chat. message, bestilling. fullended).

2
Jobbkø

Hendelsen er plassert i async-jobbkøen.

3
Webhook-avsendelse

Dispatcher tegn og sender til alle abonnerte endepunkt.

4
Prøv på nytt ved feil

Feilaktige leveranser tilbakevist med eksponentiell backoff.

Innstillinger

Innstillinger referanse

Innstillinger er kontrollsenteret for et arbeidsområde. Alt nedenfor kan brukes til arbeidsområdet du befinner deg i, slik at én konto kan kjøre flere merker med ulike identiteter, chatatferd og retensjonsregler.

Finne en innstilling

Det er rundt seks hundre individuelle kontroller i Innstillinger, fordelt på elleve faner gruppert under fire menyer. Du forventes ikke å bla etter dem.

Søkeinnstillinger (Ctrl + K)

Trykk Ctrl + K eller Cmd+K på en Mac, hvor som helst i innstillingssiden. Skriv inn enkle ord og trykk Enter for å hoppe rett til kontrollen. Søk tolerer små typarer og forstår relaterte tekster så finner schemaleggeren Cron and Privacy kontrollerne. Det viser bare innstillingene din rolle kan åpne.

Arbeidsplass og plan

General og lisens.

AI og kundestøtte

Admin AI Assistant, klientchatt OpsIQ Skrive- og støtteportal.

Data og styring

Sporing og personvern, tillatelser og sikkerhet.

System

Cron-oppsett (kun hostet) og faresone.

Sparing

Hver fane lagres på egen hånd med sin egen Save-knapp. Kundechatt og OpsIQ Skrivepinnen deres til skjermen. Lagre før du bytter faner; endringene blir ikke ført over.

Dype lenker

Den aktive fana er skrevet til sidens adresse, slik at en fane kan bli bokmerket eller sendt til en kollega.

Generelt: Bedriftsidentitet

Det viktigste kortet på siden. AI leser disse verdiene i hvert svar, rapport og daglig kort.

Forretningsnavn

Brukes i AI-rapporter, daglige briefs og kunderettet ordlyd. Match nettstedets fotnote !

Forretningsbransje

Tailors AI-analyse, blyscorer, briller og undersøkelse forhåndsinnstillinger. Velg mellom webhotell, e-handel, SaaS, eiendommer, byrået, rådgivning, helsetjenester, utdanning, økonomi eller generell virksomhet.

Systemspråk

Språket som er vist til alle som ikke har valgt seg selv. Hver agent kan overstyre det i sin profil.

Bruk nettleserspråk

Viser logg-in siden på besøkendes eget språk. Når noen velger et språket der, vinner deres valg og dette overstyrer det aldri.

Systemtidssone

Sonen hele systemet kjører i: datoer, rapporter og tidsplaner. Bruk driftstidssongen din, ikke kundene dine.

Generelt: GeoIP og sporing

GeoIP2 Databasesti

Full sti til GeoLite2-City.mmdb cPanel Plesk, DirectAdmin, Cloudways og Docker samt vanlig Linux eller Windows. Legg til GeoLite2-ASN.mmb i samme mappe for den besøkende internettleverandøren.

Geokildemodus

GeoLite2 kun, Geolite2, med en Cloudflare tilbakefall, eller Cloudflare Bare.Cloudflare modes krever at nettstedet blir proxied gjennom Cloudflare, med besøkendes plassering overskrifter aktivert for by og region detaljer.

Session Tidsavbrudd (er)

Inaktivitet før en besøkende sesjon anses som fullført. Standard 14400 Det er fire timer.

Live Oppfriskningsintervaller (s)

Hvor ofte oppdateringene av Live Feed. Standard 30 x-sekunder

Aktiv terskel (min)

Hvor lenge en besøkende teller som levende etter siste sidebelastning. Standard 2 Dette er avløpet for Live Feed, ikke sesjonslengden.

Dataoppbevaring (dager)

Sletter samlet og generert poster i denne alderen: analyse, chatt, billetter, tilbakemeldingar, transaksjoner, AI telemetri, integrasjonslogger og CRM-aktivitet. 0 holder alt for alltid. Innstillinger, forfatterinnhold og samtykkemottak blir aldri fjernet.

Når en chat slettes

Velger hvor mye av en slettet samtale som holder seg på rekorden: den fulle post, platen uten samtalen eller bare poenget. Sletting alltid skjuler chatten fra innboksen og besøkendes historie. Planlagt oppbevarings-og Glem besøkende aldri slette i det hele tatt uansett dette.

Spor bot trafikk

Teller krypere som besøkende. La være; det oppblåser gjestene telle og skjegger hver rapport.

Tilbakemeldingsundersøkelse aktivert

Viser den webside-vidde tilbakemelding widget til besøkende. Separat fra chatundersøkelser under klient Chatt, Support Flow.

Generelt: AI-funksjoner

Master bytter for hver AI-overflate. Alt standard å på og lagre per arbeidsområde.

AI Triage på billetter

Klassifiserer hver billett etter kategori, prioritet og følelser samt skriver en trådsammendrag øverst på billetten.

AI Triage sveve sammendrag

Viser triage-taggene og sammendraget i et verktøytips når en agent sveves på rad i billettlisten.

Innboks Copilot (komponer)

Legger til utkastet AI svar, Warmer, Shortere, Mer formelle og Apologetiske knappene under billettsvarboksen. Ingenting sender uten agenten.

Ask-OpsIQCopilot

Den side-bevisste flytende copilot på hver administratorside. Vet hvilken kunde, faktura eller billett er åpen.

Morgenkort

På første åpen hver dag presenterer copiloten haster billetter, forfallne svar og vente chat. søndagene produserer en uke i anmeldelsen.

Generelt: penger, merkevarearbeid

OpsIQ base valuta

Hver penge totalt i administratoren konverteres til denne valuta for skjerm. Kobling lagrer sin egen kildevaluta; angi det per kontakt.

Auto-sync FX priser

Oppdaterer priser hver sjette time fra et gratis offentlig fôr uten API nøkkel. Du kan legge til manuelle priser som overstyrer fôret. Med auto-sync av, er valutaene uten en manual rate igjen ukonvertert.

Aktivere handels- og faktureringsfunksjoner

Når det er slått på, avslører vi siden Salg og konverteringer, dashboards inntektskort og Live Intelligence Feed. Med den av, hver prisoverflate er skjult samt salgssiden forlater menyen.

Handelsforråd

Lærer OpsIQ din formulering: om du gjør fornyelser, ordet for å fornye, hva du selge og hvilke kjøpere som kalles.

Merke og logoer

To opplastinger, en for lys bakgrunn (admin sidepanel) og én til mørkt (innloggingsside). PNG, JPG eller SVG 3 MB.

Site Intelligence Agent, tillater privat SSH mål

Auto-Implement SEO agent kobler over SSH. Private, loopback og reserverte adresser blokkeres som standard som et antisSRF mål. Bare aktiver på selvværende installasjoner som må nå en lokal server.

OpsIQ Backup / Gjenopprett

Eksporterer alle innstillingene og OpsIQ-eide tabell pluss uploadede filer. Gjenopprett erstatter OpsIQ konfigurasjon og registre bare; den berører aldri kunder, fakturaer, billetter, tjenester, domene, bestillinger eller transaksjon.

⚠️
Ta en sikkerhetskopi før du bruker noe i faresonen. Sikkerhets backup bor generelt og slettehandlingene lever i farssone, så det er enkelt å nå Slett-knappen uten at den har eksportert først.
Innstillinger

Innstillinger: Sikkerhet

Beskyttelse for administratorens innlogging, dine ansattes kontoer og dataene OpsIQ samler inn. Kundeinnlogging for støtteportalen er konfigurert separat.

Innloggingsbeskyttelse

GooglereCAPTCHA

Stopper bots og kresentiell fylling på admin-innlogging. Velg v3 (usynlig, scoret) eller V2(krysseboksen), angir w3-poenggrensen for poengene til v3, samt leverer nettstedet og hemmelige tastene. Disse samme nøklene gjenbrukes av støtteportalens anmodningsskjema.

Feil ved innlogging Auto-Lockout

Blokkerer en adresse etter et antall feil i vinduet, for flere timer. Du kan tilpasse den låste siden melding og vise liten venteskjerm distraksjon.

Logg inn herding

Passordpolicy med minimum lengde, avvisning av passord som finnes i kjente brudd, per konto lås ut mot troverdige fylling, obligatorisk tofaktor for hver admin, passordet gjeninngang før farlige handlinger og nyhet-invarsler.

Enkelt pålogging (OIDC)

Personalet logger inn gjennom din identitetsleverandør. URL, klient-ID og kundehemmelighet. Autoprovision domener, én per linje oppretter brukere automatisk på første innloggingen

Enkelt pålogging (SAML 2.0)

For leverandører som snakker SAML. OpsIQ gir ACS svar URL og SP-enhets ID; du oppgir IdP enhetsID, logg inn URL, valgfri logg ut URL X.509 Signering av sertifikat. Felter for e-post og navn er bare nødvendig med ikke standard attributtnavn.

SCIM Provisioning

Katalogdrevet opprettelse, oppdatering og deaktivering av OpsIQ kontoer.OpsIQ Fordeler SCIM base URL Du genererer merket polletter her, slik at man kan trekkes tilbake uten å bryte resten.

Trusler, blokkering og samling

Utgående Egress Tillat-liste

Begrenser hvilke eksterne verter denne arbeidsområdekontakten kan ringe. Kompanjon til SSH målkontroll i allmennheten.

Trusler og auto-block

Blokkerer en besøkende når trussene deres passere terskelen din. 0 Deaktiverer den. Se siden Sikkerhetsoversikt i en uke før du velger et nummer.

Blokker sidemelding

Meldingen en blokkert besøkende ser, som vanlig tekst eller din egen tilpassede HTML blokk skjermen.

Core Web Vitals fra ekte besøkende

Mål LCP, INP og CLS fra virkelige økter.

Beslaglagt, reprøvsikker levering av arrangementer

Tilpassede hendelser kø i nettleseren og levere i partier med retries, redusere tap på dårlige mobilforbindelse.

Signert sporing Beacons

Ekte widget embeds bærer et roterende kryptografisk token så smidde sporingsdata kan avvises. Av som standard; muliggjør endringer hvordan innebygde autentisering, slik at test først.

Sikkerhetsvarsler

Av som standard. Oppdaging og blokkering kjører uansett. Dette kortet kontrollerer om du blir fortalt, og hvor mye AI hjelper til.

Aktiver sikkerhetsvarsler

Mesterbryteren for dette kortet.

Innloggingsbølgegrense

Hvor mange feilaktige logg-ins i en kort periode regne som en bølge verdt å varsle om.

IP omdømme intelligens

Legger til en trussel score for besøkende som vises i offentlige overgrepsmat.

Nettsideklokke

Oppholdstid og TLS -utløpskontroller, varsler før sertifikat forfaller.

AI sikkerhetsanalytiker og AI hendelsesbriller

Legger til en forklarende dom i mistenkelig aktivitet, og grupper relaterte angrep inn i én enkelt lesbar hendelse snarere enn en strøm av hendelser.

policy autopilot

Handlinger på egen hånd, og snu det den lærer fra en hendelse i et foreslått eller anvendt regel. La være til du har gjennomgått sine forslag og er enig med dem.

Daglig sikkerhetsfordøyelse og ukentlige holdningsrådgiver

En daglig recap på siden Sikkerhetsoversikt, og en ukentlig herding sjekkliste som viser hva som er beskyttet.

Auto-utforske stal forslag

En foreslått blokkregel du aldri handlet på utløper av seg selv i stedet for å akkumulere.

DOM- øktreplikk

Aktiver DOM-økten på nytt

Opptak besøkende økter for avspilling. Når du er ute på replay-biblioteket, blir det aldri lastet inn noe så det ikke koster å forlate den fra. Innspilinger tas i bruk og personvernmaskes, og sees på Sesjon RePlay siden under Analytics.

Prøvehastighet, max fangst

Hvilken del av sesjonene å spille inn, hvor lenge en enkelt opptak kan kjøres og hvor mange dager det er holdt.

⚠️
Session replay registrerer ekte mennesker som bruker nettstedet ditt. Hold prøvefrekvensen og oppbevaringen så lavt som vil fortsatt svare på spørsmålet, samt avsløre det i personvernerklæringen din.
Innstillinger

Innstillinger: Sporing og personvern

Hva OpsIQ kan samle, og hvor lenge hver type plate overlever.

Utelukkelser

Utelukket IPs og CIDR-område

Adresser aldri spores, en per linje, nøyaktige adresser eller CIDR-områder. Den reneste måten å holde ditt eget team ute av din analyse fordi det dekker alle på den adressen i stedet for bare logget inn administratorer.

Utelatte URL baner

Sidemønstre aldri sporet, én per linje og jokertegn med en asterisk. For eksempel /admin/* Hold hele bakkontoret ute av besøksloggen.

Dataoppbevaringspolicy

Per-subsystem auto rensing i dager. Separat fra den totale datalagring innstilling generelt og fra faresonen renser.

AI-interaksjonslogger

Troverdighets telemetri som holder korte forhåndsvisninger av spørring og respons. Standard 90 dager. Dette inneholder mest kundetekst, så forkort det først når du strammer på personvernet.

AI-brukshendelser

Per-kall token teller for kostnadsrapportering. Standard 90 dager. Tal bare, ingen meldingsinnhold.

Handlingsrevisjonsti

Handlings- og sikkerhetsloggen for manipulering. Standard 365 Hold dette lengst; det er din bevissti.

Diagnostikk

Systemhelseposter. Standard 30 Dager.

Usvarte spørsmål

Clusters av spørsmål som AI ikke kunne svare på. Standard 90 Arbeid gjennom dem på spørsmål som AI-en savnet siden før de utløper.

Voktere og eksport

Metrisk anomalivarsler

Daglig sammenligning av i går mot den nylige grunnlinjen, varsler når en metrisk beveger seg mer enn terskelen din. Standard 35 prosent. Av som standard

Lagereksport

Nattlige dumpinger av økter, besøkende, sidevisning og relaterte tabeller for din egen BI-stabel i et format som du velger, holdt i en rekke dager. Av som standard.

Innstillinger

Innstillinger: Admin AI Assistant

Den flytende assistenten din bruker inne i administrator, med live lesetilgang til klienter, fakturaer og billetter. En annen assisterende fra kundens side under kundechatt.

Aktiver OpsIQ AI-widget

Viser assistentknappen på hver admin-side. Av skjuler den for alle.

Layout og oppførsel

Hjørneposisjon, panelbredde (320 til 600 px), maks høyde (400 til 900 px), hjørne radius (0til 24), skriftstørrelse, og en frostet glass uklarhet bak panelet.

Vis hurtige chips

Ett-klikk snarveisknapper under overskriften. Den raskeste måten å for de fleste ansatte på.

Vis modellinformasjon

Viser hvilken modell som svarte og hvor lang tid det tok. Nyttig mens tuning koster, støy til daglig bruk.

Per-admin inngangsgate

Bare vis assistenten til en logget inn-administrator som brukernavn og email begge matcher et OpsIQ agent tildelt dette arbeidsområdet. Eiere alltid passere. Bruk Sjekk tilgangsknappen min før du aktiverer eller kan låse ditt eget lag ute.

AI Persona

Vis navn, overskriftsmerke og en egendefinert velkomstmelding vist når panelet åpner.

Smarte hurtighandlingschips

Rediger etiketten og den underliggende spør for hver snarvei, legg til din egen eller nullstill til standard. Merket er hva personalet ser, spørsmålene er det AI mottar.

Farger og form

Chip form (pill, rundete, firkantede), chip farger, korttema og oppstarterform (rundt, spirkle, kvadrat) med live forhåndsvisning.

Samtaleminne

Assistenten husker hver personhistorikk på tvers av nettleserøktene, opp til 120 -meldinger som er lagret i din egen database.

Innstillinger

Innstillinger: Klientchatt

Den chat widget kundene dine bruker, og det største området av Innstillinger. Seks underfaner med masterbryteren og Lagre festet til toppen av fanen.

Arbeid gjennom underfanene i rekkefølge på en ny installasjon: identitet og kopi, utseende, oppførsel, støtteflyt. Avansert er infrastruktur og kan vente

Identifikasjon og kopiering

Merkeidentifikasjon

Widget navn, taggline, AI-navnet og navnet som brukes til system eller inaktive varsler. Hvordan agentnavn vises. Agent Navnkilde bestemmer mellom ekte navn, et tilpasset namn eller en team etiketten.

Helligdag

To hilsener, en for alle besøkende og én for identifiserte gjester. Et spørsmål starter flere samtaler enn et utsagn.

Sprettopp- teaser

Den flytende meldingen før chatten åpnes med eget navn, skriftstørrelse og farger. AI kan skrive teaserene, som styrer hvor mange å generere, hvor mye du skal vise per besøk og gapet mellom dem.

Spurger og håndoff

Det fulle manuset: ber om navn og e-post, bekreftelser som krever et menneske, ingen agenter tilgjengelig, billett opprettes eller kanselleres. Rundt to dusin individuelle linjer i en sammenleggbar panel.

Status og idle-meldinger

Tre kundevisbare meldinger: Agent stenger chatten, besøkende har gått stille og agent hender tilbake til AI. Unngå intern ordlyd som løst eller trigert.

Komponist og forslag

Inngang stedholder, talk-til-a-human knappetiketten og foreslått åpningsspørsmål. Tre gode forslag avbøye flere billetter enn en side med artikler.

Launcher, Icon og Avatars

Launcher-ikon, et alternativt annet ikon når det er åpent og oppstartsstørrelser for menneskeagenten.

Utseende

Tema og glass

Temamodus, en premium fargeinnstillinger, uklarhetsintensitet og åpenhet. Pluss slår på animasjoner, skillelinjer, skjuler statusraden, gjemmer meldingsbokskortet og skjuler lukkeknappen. Start med et forhåndsvalgt antall farger samtidig.

Hovedfarger

Launcher, header, hjelpepanel, lenker, knapper og systemnotiser. Hver med start-og sluttfarge for fargeoverganger. Et standardglassalternativ ignorerer disse og holder den gjennomsiktige finishen i bruk.

Panel, bubler og chips

Rundt tretti velgere som dekker panelet, grensen, teksten, inngangsområdet og hver bobletype (visitor, AI-middel, skrivesystem) pluss forslagschips og deres svevningstilstand. Bare åpne dette for nøyaktig merke matching samt sjekke kontrasten på bubbletekst.

Form og utforming

Panelbredde og høyde, hjørneradius, skriftstørrelse, skjermposisjon, oppstarterform, boblestil samt om avatarene viser. Test bredde på en telefon.

Oppførsel

AI-svar automatisk

Master bryter for AI svar. Av betyr hver melding venter på et menneske.

Menneskelig oppfølging og naturlig dobbelteksting

En mild oppfølging når en besøkende går stille, og et valgfritt kort andre melding på måten som personen ville sende. Tunert med maksimal oppfølging per stillhet, første forsinkelse, senere multiplikator, tilstedeværelsesvindu og maksimale sekvens vindus. Kan begrenses til virketidene, og undertrykes etter enkel takk.

Skrivemaskin svar og svare tempo

Enten svar skriver ut ord etter Ord, og hvor raskt assistenten svarer på det ved å forhåndsinnstilling eller din egen minste-og maksimale forsinkelse i millisekunder.

Live oversettelse

Hver agent leser og skriver på sitt eget språk mens besøkende leser sine.

Hand tilbake til AI etter agent ledig

Minutter av agent inaktivitet før AI gjenopptar samtalen.

Åpne chatten automatisk

Sekunder før widgeten åpner seg.0aldri åpnes. Intrusiv på mobil; la være0Med mindre det er testet.

Smartere svar

Planlegger å komme for en-pass svar, tenkedybde, et valgfritt separat modell til agentsvar, viser resonnement til besøkende, tolerere feilstavinger, lang konversasjonsminnet, begrense assistenten til virksomheten din bare, priser i den besøks valuta og hvordan lenker vises. Bare snakk om bedriftene dine bør være på for nesten alle.

Kostnadsbesparende

Hopper over kunnskapssøk etter hilsener som hei og takk, og caps det lengste svaret i pollettene. Trims koster uten å endre svarkvalitet på reelle spørsmål.

Språk

Hvilke språk som widgeten støtter og hvordan den velger en for besøkende.

Kundekonto Svar

Svar fra en kundes egen konto, eventuelt oppsøkt live og valgfritt lastet kun når det er nødvendig. Lesbar i alle tilfeller; last-når-nødvendige reduserer kostnadene markant.

Refundering

Assistert refusjon forespørsler der assistenten samler detaljer og hender til en person. Det fullfører aldri selv refundering.

Samtale og widget

Fortsette tidligere samtaler, fortsette en chat på alle de tilkoblede nettstedene dine og dra det mulig vindu. Spør gjester om e-post, så gjør laget ditt et nytt prat i billett.

Widget-funksjoner

Emoji-velger, vedlegg med en valgfri pastebar modus, AI bildeforståelse, inline ikoner, mikrofonen, tale til agentknappen, besøkendes lydene, forhåndsbehandling ved siden av voice-call og sesjon isolasjon. AI bildet forstår er det som lar et gjest lime inn feilbilding og få nyttig svar.

Admin-innboks, varsler og velkomstoppsprett

Den besøkende velkommen popup, pluss agentene dine varsler: innboks lyder, desktop-varslinger, hviskelyder eller private whisker pipe og inbox meningsmålingintervall.

Støtteflyt

Menneskelig håndoff

Hvordan forespørsler til en person blir tildelt, sekunder som et agent må svare på, om det å redusere chatten tilbake til AI og om AI-en gjenopptar når tidsavbruddet utløper. Konfigurere dette før du går live eller besøkende som ber om at et menneske bare venter.

Arbeidstid

Åpningstider, tidssone og lukket timers melding. Utenfor disse timene tilbyr AI ikke et menneske. En separat tidsplan fra billettens virketid under OpsIQ Writing.

Svar når AI er ute

Det første svaret på en ny melding, svar når noen allerede er i kø og hvor lenge før du gjentar.

Frakoblet skjema

Viser et kontaktskjema i stedet for chatten.

Billettoppslag og avdelingsvarsler

AI billettbevissthet, så en besøkende siter et kupongnummer får sin reelle status og hvilke avdelinger som AI kan rute til. Et innebygd panel viser de ekte mottakerne for hver avdelingen, løst på samme måte som anmelderen løser dem, slik at du ser før kunden gjør det at ei enhet varsler ingen.

Hjelpesenter i chat widget

La besøkende bla gjennom publiserte artikler uten å forlate chatten. Du velger hvor oppføringspunktet vises, bunnlinjen etikett og ikon, og om du tilbyr en lenke til det fulle hjelpesenteret. Av som standard.

Konversasjonsvurdering

Stjernerangering utløst når en agent lukker chatten, når et avbrekk slutter eller etter en inaktivitetsperiode du angi. Velg én eller to triggere ikke alle dem.

Undersøkelse etter chat

En kort undersøkelse når besøkende avslutter chatten, med spørsmålet ditt, forsinkelsen din, timing regelen og en cap per besøk. Besøkere kan også e-post eller laste ned transkripsjonen. Ett spørsmål får svar; tre ikke gjøre det.

Post-Chat epostundersøkelse

En oppfølgingsundersøkelse via e-post etter samtalen avsluttet, valgfritt i språket som besøkende chatte på med kontroll over forsinkelser, emne, intro, spørsmål både knappetiketter og takkelinjen.

Svar på svar

Tommel opp og tommelfinger ned på hvert AI-svar, mate kvalitet dashboards.

Kontaktarkiv

Auto-arkiv etter dager, automatisk løses opp etter minutter med stillhet og slette arkiverte samtaler etter dag. En tredje plass retensjon er satt sammen General and Tracking !

Kunnskapstrening

Hva assistenten faktisk vet. Ingenting annet i klient Chat betyr så mye.

Nettsted Kunnskapsopplæring

Crawls nettstedet ditt slik at assistenten kan svare fra det. Opp til ti startkoblinger, en sidegrense, et linkdybde og ekskluderte mapper URL kan testes før full kryp. Utelukk utsjekking, konto og admin stier.

Innbyggere

Den API Nøkkel og modell som gjør sider til søkbare betydninger i stedet for søkeord.

AI kunnskapsorganisator

Ett klikk og AI leser alle FAQ-er, krøllet sidene og sortert dem i kategorier.

FAQs, Bekreftede svar

Spørsmål og svar par behandlet som den høyeste prioritetskilden, hver med en status, vekt og kategori. Søkbar importerbare fra JSON, og AI kan skrive dem fra en beskrivelse av din virksomhet. Når assistenten får noe galt, skriver du et FAQ: det utranker krypende sider så fikset er umiddelbart.

Avansert

Prestasjon og grenser

Polling av intervall, meldingsrategrense og vindu, maksimal vedleggsstørrelse, vedleggsforsøk per vindue og tillatte filtyper. Utvidelseslisten er en sikkerhetskontroll; hold den tett.

Realtime Levering

Umiddelbar melding og statuslevering i stedet for å velge, gjennom Pusher eller Firebase med et tilbakefallsmålingsintervall. Polling er bra for de fleste nettstedene.

Push-varsler

Enheten varsler for agenter gjennom Pusher Beams eller OneSignal, med en enhetsinteresse.

Nett- push (VAPID)

Nettleser push med dine egne genererte nøkler uten tredjepartsleverandør. Genert her, ikke i faresonen.

Stemme-, video- og skjermdeling

TURN-opplysninger så samtaler koble gjennom restriktive nettverk, ved hjelp av Cloudflare eller Twilio legitimasjoner eller din egen TURN URL, brukernavn og troverdighet.

Innboks arbeidsflyt

Agent arbeidsområdeinnstillinger i stedet for besøkende innstillingene: førsterespons SLA på minutter, lagret køvisningar, tastatursnarveier og kommandopaletten, in-conversation søk samt kundebilletter hos inspektøren.

Meldingskanaler

WhatsApp, SMS, Facebook Messenger, Instagram, Telegram, X direkte meldinger og LINE, hver med sin egen AI automatisk bytter, pluss en policybryter for AI-handlingene på kanaler, et svar fravik og What. App reengagement male. Hver kanal lander i samme innboks som webchatt.

En forhåndsvisning av Live Widget nederst i fanen når du redigerer. Bruk den istället for å laste nettsiden på nytt til å sjekke en endring.
Innstillinger

Innstillinger: Maler

Hver e-postOpsIQsende, og den ene designen som rammer dem alle. Rediger ordlyd av enhver melding, og skriv maler for altOpsIQikke allerede sender.

Et design, mange meldinger

Den globale e-postmal er wrapper: logoen din, hovudet, kortet, typografi og bunnteksten med et tomt midtpunkt.OpsIQSender settes inn i midten. Redigere wrapper en gang og hver e-post endrer seg sammen - billettsvarene, Butikkmottaket, passord tilbakestillingen, bestillinger påminnelser, PeopleOS brevene samt alt du skriver deg selv.

Det er ingen måte å sende en e-post ut av OpsIQ uden denne wrapper. Den brukes på det enkelte punktet hver melding går gjennom, slik at et budskap som legges til senere ikke kan gå glipp av den.

Redigerer en melding

1
Åpne innstillinger, og deretter malene

Meldinger er gruppert etter hva de er: billetter og portal, Butikk, innloggings-og kontosikkerhet, bestillinger, samtaler og varslingar, rapporter, PeopleOS brevene dine.

2
Trykk Rediger på den du vil ha

Du får emnet, en rik tekst redaktør med etHTMLse du kan bytte til live, og en forhåndsvisning av den ferdige e-posten nøyaktig som mottakeren mottar det - din wrapper inkludert.

3
Bruk variable chips

Chipsene over redaktøren er fakta som endrer seg: et billettnummer, en ordrereferanse og bestillingstid. Klikk på én for å slippe det der markøren ligger.

4
Lagre

Bare den meldingen er skrevet. La et felt tomt og det holder sin innebygde formulering; pillen på rad forteller deg hvilken tilstand det står i.

💡
A variable you do not use is removed when the email is sent, and so is the line it sits on. That is why a booking with no phone number never sends "Phone:" with nothing after it.

Skriv din egen mal

Use this for a message OpsIQ does not already send: a delivery notice, a renewal reminder, a welcome pack, a licence key. It gets everything a built-in message gets — the editor, the preview, the plan rules and your global design — and your own system sends it through the API.

1
Trykk Legg til mal

The button sits at the top of the Templates page and again beside "Your own templates".

2
Navn på det

Navnet blir referansen systemet ditt sender av, vist under feltet som du skriver - for eksempel x_custom_delivery _booked. Det kan ikke endres etterpå fordi noe vil allerede bli sendt fra det.

3
Si hva det er, og når den sendes

Disse to linjene er det du og dine kolleger leser på Malene siden et år fra nå. De er verdt tretti sekunder.

4
Liste over deler som endres

Kommaseparert for eksempel: navn, når sporing_link. Hver blir en{{variable}}Du kan slippe inn i emnet eller meldingen, og systemet fyller det på sendetid.

5
Skrive emnet og meldingen

Vanlige setninger er fine - linjebrudd blir avsnitt. Skriv kun MESSAGE; logoen, overskrift og bunntekst kommer fra den globale malen.

6
Opprett den, og så åpner du

It appears under "Your own templates" with the full editor and a live preview, the same as every built-in message.

⚠️
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.

Sende din egen mal

To innlegg på produktetAPI. Oppringeren leverer mottakeren og variablene - aldri ordlyden, så en integrasjon kan ikke sende ubemerket e-post gjennom arbeidsområdet eller stille endre det du sier til kundeene dine.

Oppgi malene dine og variablene hver tar
POST /api/v1.php
Authorization: Bearer YOUR_API_KEY

{ "action": "email.templates.list", "mine": true }
Send den
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"
  }
}
💡
Variable navn gå uten krøller i API samtale. e-post. templates. list hender dem tilbake i akkurat den formen du passerer dem inn.

Maler og din plan

En melding du ikke har tjenesten til

Stays listed with a "See plans" link and no editor — so you can see what OpsIQ would send, and what unlocks it.

Dine egne maler

Velg tjenesten en mal tilhører når du oppretter den, eller la det være på hver plan. Et arbeidsområde uten at denne tjeneste ser den oppført men kan ikke redigere eller sende den.

Logg inn, sikkerhet og varslinger

Aldri planlagt. Å være ute av stand til å fikse ordlyden i en passord-still din egen administrator mottar vil bli feil type lås.

Spørsmål

Kan jeg bare endre designet for én melding?+

Nei, og bevisst. Designet er wrapperen og det deles som holder hver e-post gjenkjennelig din. Hva er per melding er formuleringene, faktapanelet og alle knapper du legger til i meldinga.

Hva skjer med min formulering hvis jeg trykker på Tilbakestill?+

Tilbakestill vises kun på den globale malen, og det erstatter hva som er i redaktør med innebygd design. Ingenting skrives før du trykker Lagre, slik at du kan lukke dialogen for å endre din mening.

Jeg slettet en av templatene mine ved et feil.+

Removing takes two clicks for exactly that reason — the first arms it and tells you what will stop working. If it is already gone, create it again with the same name and the same reference comes back; only the wording has to be retyped.

Kan en tilkobling eller tillegg bringe sine egne maler?+

Yes. A package ships a mail_templates.json in its own directory, and its messages appear under "Developer templates" with the same editor, preview, wrapper and plan gate. Your wording edits belong to your workspace and survive the package updating.

Innstillinger

Innstillinger: OpsIQ Skriver

Billetter svarte skriftlig: automatiske svar, det innfødte billettsystemet, eskalering, arbeidstid, rute og kundevendte e-poster.

Autosvar

Vis OpsIQ Skriveknapper

Legger til knappene for skrivehjelpemidler i administratoren.

Aktiver billett auto-reply

Køyer nye billetter og svar, svarer dem etter en forsinkelse. Start med det av og gjennomgang utkast i én uke. Refunderingar, kanselleringer og tilgang endringer bør alltid nå et menneske.

Auto-reply avdelinger

Hvilke avdelinger automatisk kan svare på. Alt som ikke er oppført, blir igjen for et menneske, noe som er trygt standard.

Svar forsinkelsesskjema (minutter)

Hvor lenge vente før det automatiske svaret sender. Et øyeblikkelig svar leser som robot; noen minutter leses som et raskt team !

Max AI svar per billett etter avdeling

En per-department hette, for eksempel Billing 1 og støtte 3. Uten en lue kan en forvirret tråd sløyfe.

Svar lengde, status og identitet

Maksimal skrivetegn, billettstatus etter et svar og en eskalering, som administratorkontoen automatiske responser tilskrives. Bruk en tydelig navngitt konto slik at personale kan fortelle AI-svar fra mennesker.

Innfødte billettoperasjoner

Native billettsystem

Billettsystemet er bygget inn i OpsIQ, for installasjoner uten eksternt hjelpemiddel.

Send e-post til innfødte billetter

Gjør innkommende e-post til billetter. OpsIQ gir endepunktet URL, auth token, skriptsti og PHP binær. Alt som kan legge til det endepunktet kan opprette billetter så hold pollettene hemmelige.

Multi-turn svar og forsinkelser

Om AI fortsetter å svare mens samtalen fortsetter, og om det venter på et stille vindu så tre raske meldinger får en vurdert svar. Det rolige vinduet er den beste enkeltinnstilling for at automatiserte reaksjonene føler seg tatt i betraktning.

Offentlig støtteportal

En kundevendt side der alle kan heve og spore en billett, med et valgfritt velkomstlinje. Dens adresse er konfigurert i fanen Støtteportal.

Billettnummerformat

Hvor mange tilfeldige bokstaver vises i genererte billettnummer.

E-postkunder på eget språk

Billett e-poster følger kundespråket. Medarbeidere endrer aldri språk: varsler, avdelingsvarslinger og planlagte rapporter blir på systemspråket ditt.

Bekreftelser og bekreftelser

En fast bekreftelse på nye billetter, pluss bekreftelsesmeldinger når en billett åpnes. Når tilbakemeldingene er igjen og når det lukkes ut, vil hver med live forhåndsvisning være tilgjengelig. Det finnes også et globalt e-postmalomslag og lenken bak visningen av billetten din.

AI spam-screening

Skjermbilletter fra ukjente avsendere, og kan eventuelt flytte mistenkelig spam på egen hånd. La den automatiske bevege seg til du har sett sin vurdering.

Lukk automatiske ledige billetter

Lukker billetten etter en rekke stille dager. Fortell kunden i avslutningsmeldingen hvordan du åpner opp igjen.

Forretningstimer (SLA-kalender)

Tidssone, åpnings- og stengingstider, arbeidsdager og ferier for førstegangstidsansatte og oppløsningsterker. En separat tidsplan fra Arbeidstiden under klientchatt.

Auto-asigner nye billetter

Automatisk tildeling, eventuelt bare for agenter som er på nettet med agentkompetanse og en matchfølsomhet for ferdighetsbasert rute.

Foreslå duplikatbilletter

Spekk når kunden åpner en billett nær den de allerede har, med justerbar matchfølsomhet.

Tilfredshet etter avslutning

Sender en undersøkelse om dagen etter avsluttelsen. Resultatene vises på CSAT-siden.

Meld avdelingen på e-post

E-post til avdeling når en ny billett ankommer. Mottakere er medlemmer i den avdelingen, ikke postkasseadressen fra enheten som er de inngående adressebilletter kommer på.

Hva AI kan lese

Adgang til AI-klientdata

En masterbryter pluss individuelle lesebeskyttede tillatelser for klientens profilsummer, fakturaer og transaksjoner, kredittbalanse, produkter og tjenester, domenene, lenkede servere samt en oversikt på høyt nivå. Start med profilen sammendraget og legg til kategorier som svar trenger dem.

Escalering og kunnskap

Aktiver AI-billetters eskalering

Flytte en billett til et bedre egnet avdeling før du svarer. Du velger de tillatte departementene, sjekk forsinkelsen og kan skrive dine egne eskaleringsvarsling instruksjoner. Slå på den interne opptrappingsnotatet slik at teamet ditt ser hvorfor ein billett flyttet seg.

Kunnskapsinnstillinger

Om svarene bruker kundespråket, om de trekker på krypende lenker og FAQ-innstillinger eller om AI leser bildet. PDF vedlegg, kunnskapssvarmodusen eller importert JSON kunnskap brukes, og om kildelenker kan vises. Bruk krabbede koblinger og FAQs bør være på eller AI er gjetting.

Stopp automatisk etter menneskelig svar

Når personalet svarer, slutter AI å svare på billetten. Uten det kan AI snakke over din egen agent.

Billett og e-postinstruksjoner

Gratistekst instruksjoner forme tone og innhold for hvert svar, med et lastbart fungeret eksempel. Vær spesifik om hva AI må aldri gjøre.

Importer JSON kunnskap

Last opp eller lim inn en JSON -kunnskapsfil for skriveassistenten.

Knap Studio

En full designer for kunde-vendt knapp: skjermstil, størrelse, etiketten, ikonet, form, minste bredde, bakgrunnsstil med primær og sekundær farger, gradientvinkel, kantlinje, hjørneradius, skygge, typografi, fylling, inaktiv animasjon, sveve bevegelsen og fargene samt fokusringen pluss en egendefinert CSS box til noe kontroller ikke dekker.

Innstillinger

Innstillinger: Støtteportal

Kundesiden hvor folk reiser og sporer billetter, leser hjelpen din. Denne fanen styrer hvordan den nås og hvordan kundene logger på; det visuelle designet gjøres i Support Portal Studio.

Portal Studio eller innebygd billettportal: hvilken vil jeg ha?

Dette er to forskjellige produkter og folk blander dem hele tiden. De løser ulike problemer, og å kjøre begge sammen er normalt.

Støtte Portal Studio: et sted du sender kunder til

Studioet designer en komplett støtteside som OpsIQ verter for deg. Den har sin egen webadresse, eller ditt eget domene og bærer hele selvbetjeningsopplevelsen: hjelp artikler med søk, forespurnningsskjemaet, billetthistorikken, kundeinnloggingen og assistenten. Velg en mal som fungerer gjennom Tema, navigasjon, layout, kunnskaper, bunntekst, merkevare, billetter, assisterende skjema og CSS_-visning på skrivebordet, nettbrett og telefonstørrelser, deretter publisering.

Bruk den når Du vil ha en merkede destinasjon du kan peke alle kunder på, og du helst ikke bygge eller vedlikeholde et støtteområde inne i din egen hjemmeside.

Embedded billettportal: billetter inne i ditt eget nettsted

Den innsnevrede setter Bare billettopplevelsen på en side av din egen hjemmeside. Kunder åpne, spore og svare på forespørsler uten å noensinne forlate sidene dine, og din egen overskrift, navigasjon og design holde nøyaktig som de er. Velg layouten, utseendet og tilgangsreglene i widgetbuilderen, forhåndsvise resultatet, kopier deretter innebygd snutt til siden din.

Bruk den når du allerede har en nettside eller applikasjon med egen design, og vil at støtte skal skje i det snarere enn å gi kunden av til et annet adresse.

Den korte versjonen

Studioet bygger Et sted du sender kunder til. Den embedet bringer billetter til hvor kundene allerede er. Mange bedrifter driver begge, innlemme billett widget i sitt kontoområde for in-context anmodningene mens du holder den vert portal som full selvbetjening destinasjon med artikler og søk. De er uavhengige brytere.

Adresse og tilgang

Tilgangsmodus

Enten portalen er åpen for alle eller begrenset til logget inn kunder. Åpne portaler får flere billetter og mer spam.

Layoutvalg

Om portalen og hjelpesenteret deler én helt eller bruker to, som navigasjon og bunntekst vises på begge overflater.

Portaladresse

Adressekundene bruker. Velg et navn og OpsIQ Viser den resulterende portalen og samsvarende hjelpesenteradresser. Endre det senere bryter koblingene du allerede har sendt.

Ditt eget domene

Serverer portalen fra et domene du eide, som support. yourdomain. com.

Innbygd billettportal

Slår på den dråpe-in widget som er beskrevet ovenfor, og åpner innbyggeren der du velger layouten, utseendet og tilgangsreglene, forhåndsvis resultatet for siden din. Dette er ikke Portal Studio: Studioet designer vert portalen, dette setter billetter inne i ditt eget nettsted. Begge kan være på én gang.

Hvordan kundene logger på

Dette er kundene dine logge inn alternativer. Personalet logg-in konfigureres under Innstillinger, sikkerhet.

Logg inn metoder

Hvilke alternativer vises på logg inn-siden. Koble til og epostlogge i arbeid automatisk.

Sosialt innlogging

Kundekontoleverandører, som hver trenger en klient-ID og hemmelighet med omdirigeringsadressen gitt av OpsIQ å registrere seg hos denne leverandøren.

Enkelt pålogging (OIDC)

Kundeinnlogging gjennom en identitetsleverandør, med utsteder URL; klient-ID'er og hemmelige epostdomenelister.

Kunden SAML 2.0

Den SAML Ekvivalent. OpsIQ gir ACS svar URLog SP enhet ID; du oppgir IdP-enhetens identifikasjon, logg inn og ut URLs X.509 sertifikat og valgfrie attributtnavn.SAML på i logg-in metoder eller det vil ikke vises.

Seamless logg inn fra appen din

En signert dyp kobling så en kunde allerede logget på søknaden lander i portal uten å logge inn igjen. OpsIQ tilbyr underskriftshemmelighet, portal URL og arbeidsflatenøkkel, en komplett rute for språket ditt (PHp, Laravel WordPress, WHMCS, Node.js, Flask og Django.NET, Jernbaneverksteder, Java, Gå og på selv-verte installerer OpsIQ serveren selv), trinn-for -trinns oppsett notater og en generator for et signert testkobling. Bruk produsenten før du skriver noen kode.

Hvordan ruten fungerer

Kunden klikker på en kundelenke som peker ved ruten. Ruta finner kunden logget inn til appen (En gjest sendes til innlogging og tilbake), leser hemmelighet fra server, signerer et engangssymbol som utløper i løpet av to minutter eller viderestiller seg til portalen uten referenter og ingen lagerhode slik at pollett ikke blir cached eller lekket opp.

Portalens egen logg inn-knapp

I Portal Studio, logg på siden, slå på Bruk min nettsides innlogging og angi Påloggingsiden din URL til samme rute. Portalen legger opsiq_portal_return (siden kunden var på); ruten ærer det bare når den er inne i portalen din og bringer kundene tilbake der, logget inn.

WHMCS

Ingenting å skrive: WHMCS krok fra eksterne nettsteder allerede signerer klientene i portalen og håndterer returadressen URL til din WHMCS Kundeområdets innlogging.

Logg ut overalt

Logger ut av portalen, skriver også kunden fra søknaden.

Inntak og beskyttelse

Forespørselsskjemafelt

Hvilke strukturerte felt forespørselsskjema samler inn. Hvert ekstrafelt mister meldinger, så spør bare om hva du trenger å triage.

Spam og beskyttelse av misbruk

En honningpott og ratebegrensning beskytter alltid det offentlige skjemaet. Oppå toppen kan du blokkere engangs e-postadresser, legge til dine egne sprukkede domenene og legger en CAPTHA ved hjelp av Google reCAPTCha eller Cloudflare Turnstile. reCAPTCHA gjenbruker nøklene som allerede er angitt under Innstillinger, Sikkerhet; Turntile-tastene angis her.

Portalanalyse

En lesebeskyttet sammendrag av portalaktivitet de siste tretti dagene.

Innstillinger

Innstillinger: Tillatelser, lisens, krone og faresone

Systemgruppen, i tillegg til teamets tilgangskontroller som bestemmer hvem som kan se hvilken innstillinger-fanen.

Lagtilgang og tillatelser

Per-admin tillatelser

Hver administrator får eksplisitte tillatelser som dekker tilgang til innboksen, hvilke innstillinger deler kan redigere og avdelingene. Alle med Full Administrator-rollen har alltid alle samtykkene. Innstillinger autorisasjon bestemmer hvilken fane en person ser så gi det smaleste settet som lar dem fungere.

Lisens

Viser din nåværende lisens, hva den gir deg rett til og status.

Cron-oppsett

Selv-verte installerer kun. På OpsIQ skyen de planlagte oppgavene kjører for deg og fanen er skjult. En linje med crontab driver hver planlagt oppgave: billett autoreply, eskalering routing, utvekslingsrate oppdateringer, postkassevalg og kontakt synkronisering.

1
Kopier linjen

Fanen viser den nøyaktige kronab-linjen for serveren din med riktig PHP binær allerede valgt.

2
Legg til det i crontab

Kjør crontab -e som brukeren som kjører PHP og lim inn enkelt linje. På cPanel Bruk i stedet Cren Jobs-verktøyet.

3
Bekreft

I løpet av et minutt lyser hjerteslagsfliser opp. Bruke Kjør nå til å teste umiddelbart i stedet for ventetid.

Hjerterytmepanelet viser siste kjøring, varighet og hva som ble behandlet for både auto-reply køen og email and connector meningsmålingen. Det advarer når den siste løp kom fra manuell webknappen i stedet for en ekte server krone, og når et hjerteslag har gått utholdenhet.

Faresonen

Slett alle sporingsdata

Tørker alt OpsIQ -innsamlet eller generert. Du krysser av hva du skal inkludere og skriver inn bekreftelsesfrasen nøyaktig. Innstillinger, konfigurasjon på sidene, blokkerte adresser (kunnskapsbase, FAQ'er, oversettelser, portaldesign, handlingsdefinisjon) og samtykkekvitteringene er alle bevart.

Å rense data eldre enn

Den samme fløy som er begrenset til registre eldre enn 30, 60, 90 eller 180 dager, eller et år. For automatisk rullende retensjon bruke tilbakeholdelsesverdier generelt og sporing i stedet for å la den planlagte oppgaven gjøre det.

🚫
Eksportere en sikkerhetskopi fra Innstillinger, Generelt før du bruker noe i faresonen. Disse handlingene kan ikke angres.
Innstillinger

Håndter teamet ditt

Inviter teammedlemmer og tilordne roller for å kontrollere hvem som kan få tilgang til hva.

Lag
Team & AvdelingerLagskjermen: et bord med administratorer, kontakt- og rollemerke (Owner, Full Admin, Agent) samt avdelingene hver kan få tilgang til.Team & AvdelingerarbeidsflateTeam & Avdelinger+ Lagre administrator brukerKontactROLLERDEGARTMENTERAO[email protected]Ada OhusuEierAlleKMunit description in lists[email protected]Kojo MensahFullstendig administratorAlleRT[email protected]Rita TettehAgentFaktureringSB[email protected]AgentStøtte1TEAMInviter & administrere administrator2ROLESEier · Full Admin3SCOPEDTilgang til per-department
Den virkelige lagskjermen: hver administrator med sin kontakt, rolle og avdelinger de kan nå, agentene omfangsfulle, eiere full.

Roller

Eier

Full adgang, inkludert lisens- og faktureringssone.

Fullstendig administrator

Full adgang unntatt lisens- og faresone. Kan administrere administratorer

Agent

Begrenset til tildelte avdelinger. Billetter, chatter og analyse bare.

Inviter teammedlemmer

1
Gå til team

Naviger til team i sidepanelet.

2
Klikk på Invitasjon

Skriv inn teammedlemmets e-post.

3
Sett rolle

Velg eier, full administrator eller agent.

4
Tildeling av departementer

For agenter, velg tilgjengelige avdeling.

5
Send innlegg

De mottar en e-post med installasjonslenke.

Innstillinger

Teamets ytelse

Hvordan supportteamet ditt utfører. Tilgang er ved tillatelse, ikke etter rolle: visningsgodkjennelsen åpner siden, styringstillatelsen låser opp målene QA og kollegaen identifiserende lesere, og belønning-finansielt samtykke til det som legger til Rewards fanen. Et team leder kan gis noe av disse uten å bli en full administrator.

Teamets ytelse
Teamets ytelseTeamets ytelsesskjerm: agenter rangert etter en komposittscorelinje, CSAT og et belønningsbalanse med Pay-knappen per rad.Teamets ytelsearbeidsflateTeamets ytelseAgentPOENGCSATBALANSERTRita Tetteh4.8$42BetalSBSam Boateng4.5$28BetalKMunit description in listsKojo Mensah4.2$15BetalAOAda Ohusu4.9$51Betal1SCOREDSamlaget ytelse2CSAT & LOADVurderinger + volum3REWARDSBetalende agentsaldoer
Den virkelige team-ytelsesskjermen: hver agent scoret på volum og CSAT, med en belønning saldo kan du betale ut per rad.

Hvordan siden er organisert

Team Performance er fem faner. Hver svarer på et annet spørsmål, og de bestilles av hvor raskt det vanligvis trenger deg.

01 Kommandosenter

Live kø state, kunderesultater mot dine mål, hvordan kapasiteten ble brukt til, situasjoner som trenger en beslutning og bevisjustert per lagmat indeks.

02 Lagkamerater

Lederbrettet, anerkjennelse (de fleste forbedret og streik), søkene og opts-in kontroll for hvem som kan se rangering.

03 Kvalitet

Scorecards, registrerte evalueringer og tilfeldig korrigeret gjennomgangsavtale, recensordrift samt bevisstrid.

04 Belønninger

Token verdi, utbetalingskrav og den regulerte periodens tildeling: godkjenne et finansiert tak, se gjennom forhåndsvisningen.

05 Historie

Hvordan arbeidsområdet har flyttet over tid: trendmålinger med et diagram, og en 28-dag dekning varmekart som viser når laget faktisk fungerte. Hvert kort skjuler seg til det er nok historie for å tegne den.

Uscored er ikke null

En lagkamerat uten nok håndtert volum - eller hvis dimensjoner som bærer bevis legger til opptil mindre enn halvparten av den konfigurerte vekten - er vist som Unscored. Deres score, rang og bandet er tomme og deres inndeling er skjult. Dette vil være med vilje: å gjøre en fraværende måling som et null setter noen nedst i ei rangering for å ha en stille uke. Bevisgrenser kan konfigureres per arbeidsområde på Mål & poeng.

De to bevisgrensene gjør forskjellige jobber og det er verdt å holde dem fra hverandre. Minimum håndtert bestemmer om noen blir scoret i det hele tatt. Minste vurderinger påvirker ikke poenget: den avgjør tildelings-og belønningskrav. Så en lagkamerate kan bli fullstendig rangert, rangert og fortsatt være uegnet for denne perioden fordi altfor få kunder vurderte dem.

💡
Hvert tall er tilstrekkelig det arbeidsområdet du ser, og tidsintervallet som velges. En lagkamerat som arbeider på to separate arbeidsplasser har en uavhengig rekord i hver enkelt. To unntak verdt å vite: et nettsted GROUP er ett arbeidsområde så medlemdomene måles sammen; samt alle-sites visningen måler bevisst alt samtidig.

Effektindeksen

En sammensetning av fem dimensjoner, hver målt mot et mål du setter i stedet for mot kolleger, deretter trakk seg til midten når bevisene bak den er tynne. Merk retningen: justeringa beveger figuren mot 70, så en tynn utmerket poengsum trekkes ned og et smalt dårlig poeng blir dratt opp. En dårlig første uke på fire samtaler er heller ikke en avgjort dom. Som bevis akkumulerer den justerte figuren konvergere på rå.

Kvalitet

Kundetilfredshet fra verifisert tilbakemelding. Tilskudd av QA scorecard-resultater der de eksisterer og styres.

Responsivitet

Første responstider på P50 og p90 percentilene, mot dine mål.

Oppløsning

Oppløsningstid og en berøringsoppløyst.

SLA

Innhold mot SLA konfigurert, pluss risiko og brudd på antall.

Stewardship

Åpne og overføre priser - det arbeidet som kommer tilbake.

💡
Vektene er konfigurerbare og relative; de trenger ikke totalt 100. Manglende bevis kan bare senke indeksen, aldri heve den - de full konfigurerte vektholdene i nevneren.

Kapasitet og produktiv tid

Utnyttelse er bevisst ikke rapportert: det trenger planlagte timer som nevner, OpsIQ har ingen roter eller skiftkilde. En erstattet referanse vil være et gjett på å ha en prosenttegn. Den leser så utilgjengelig med den grunnen vedlagt.

⚠️
Rapportering bare. Oppdrag sier hvordan tiden ble brukt, aldri hvor godt det var brukt og den penger ikke, porter eller størrelser en betaling. En lagkamerat uten håndtak-tid bevis leser som utilgjengelig, aldrig som null.

Kvalitetssikring

Et scorekort er rubriske anmeldere som rangerer ekte samtaler mot. Bare en publisert versjon kan få vurdering, og å gi ut ny version omskriver aldri det som allerede ble gjort. En gjennomgang viser at én samtale ikke blir dømt til personen.

Reviewer-avtale

Rapportert som en tilfeldig riktig statistikk (Cohens og Fleiss' kappa), ikke et råavtaleprosent. To anmeldere som passerer alt er enige 100% av tiden mens de har ingen informasjon.

Reviewer drive

Enten en anmelder scores systematisk hardere eller mykere enn sine kolleger på samme samtale - en sammenligning med resten av panelet, ikke trend over tid. Det trenger et samspill som vurderes uavhengig mer end én gang.

Tvister

En lagkamerat kan formelt bestride bevis registrert om dem. Et åpent tvistblokker belønningsperiode finalisering til det er løst.

Selvrevurdering

En teamkamerat kan ikke legge inn en evaluering av seg selv.

⚠️
AI-gradede evalueringer kan ikke påvirke lønnen før en kalibrering er publisert som viser at modellen godtar de menneskelige gjennomgangerne nøye nok, målt ved kappa mot et minimum prøve. En åpen port betyr at modellen samtykker i å mennesker tett nok til å telle - det betyder aldri at modellen har riktighet.

Anerkjennelse

Ranking alene har dokumentert feilmoduser: metriske spill, utbrenthet og offentlig sjamring av hvem som er sist. Tre alternative sitter ved siden av det.

Mest forbedret

Målt mot en lagkamerats egen tidligere rekord, aldri imot kolleger med krymping så en liten nevner kan ikke kjøpe seg en seier.

Streaks

Konsekutive perioder som møter en fast, deklarert linje - gjennomsnittlig vurdering, håndtert volum, rating teller og negativ tilbakeføringsrate. Alle kan holde et streik samtidig så det skaper ingen rangering, og en kollega med en eksepsjonell måned ikke kan bryte din.

Opt-in rangering

En lagkamerat ser alltid sin egen indeks; om de ser kolleger er en arbeidsflatebeslutning. Prosentile band kan publiseres i stedet for absolutte stillinger.

💡
En streike kan ikke finansiere en utbetaling eller bryte én, og mest forbedret er ingen priskategori.

Quests

Et mål laget arbeider mot, målt på en fast erklært bar i stedet for mot hverandre - så alle kan fjerne samme søken i den samme perioden.

Omfang og kadence

Individuell eller team; one-off, repeatable og sesongbeskrivelige med eksplisitt vindus.

Kriterier

Samtaler håndtert, mottatte vurderinger, aktive dager, gjennomsnittlig rangering eller negativ tilbakemeldingsrate. Alt absolutt - ingen metrisk verdi som avhenger av hva kolleger gjorde.

Kvalitetsvakt

Nødvendig på alle søk med et volummål. Hiting nummer mens kvalitet faller under gulvet holder søket i stedet for å fullføre det, og den er vist som tilbakeholdt ikke uferdig.

Gjenta grenser

En per periode-hette, drevet av det sakteste kriteriet pluss en valgfri nedkjøling før et gjentakelse kan telle.

Teamoppdrag

Delt fremgang uten å ha gitt ut tilskrivelse per lag, så et teamsøk kan ikke bli en ledertavle.

Coaching-økter

En coaching sesjon er en rekord, ikke et chat. Det har en trener, en lagkamerat som blir coctored, en planlagt tid, enige om å snakke poeng og ett sammendrag skrevet etterpå. Ekte samtaler, billetter og QA-vurderinger festes til det som bevis, så samtalen forankres på jobb som faktisk skjedde i stedet for at et huskelig inntrykk.

Snakke poeng

Enig før sesjonen, så lagkameraten ikke går inn i en overraskelse.

Pinnet bevis

Chats, tickets and QA evaluations attached to the session. A pin stores a reference — a type and an id — not a copy, so it always points at the live record. OpsIQ does not verify the id before accepting it.

Handlingselementer

Hver med eier og forfallsdato. En gjenstand forbi datoen er vist som overdriven - en avledet tilstand, ikke et status noen må huske å sette.

Private Noter

Trenerens egen notat. Lagkameraten som coaches kan aldri lese det - ikke som agent, ikke som manager, heller enn som eier. Denne sjekken går før alle andre tillatelser og kan ikke overstyres.

Hvem kan se en økt

Treneren, lagkameraten og alle med styrets utførelsestillatelse. Ingen andre, inkludert andre lagkamerater i samme avdeling.

Revisor

Hver opprette, oppdatere, pinne og ferdigstillelse er registrert med det som endrets.

💡
Coaching er bevisst adskilt fra score og penger. En sesjon endrer ikke noens indeks, porterer ingen belønningen, og vises ikke på lederbrettet.

Belønninger og priser

Innspilt aktivitet konverteres til polletter med en kontantverdi du angir. Veien til betaling er bevisst langsom og hvert trinn registreres.

1
Sett poliksverdien

Hvor mange polletter er det lik hvor mye penger, og hva hver aktivitet er verdt.

2
Godkjenn det finansierte taket

For en lukket kalenderperiode, angir full administrator de maksimale pollettene det kan betale. Å lagre innstillingsskjemaet ikke godkjenne et budsjett og den kan ikke endre taket som allerede er godkjent.

3
Se gjennom forhåndsvisningen

Mottakere, reserver og grunnen til at alle ikke er kvalifisert. Åpen bevisstrider blokkere dette trinnet.

4
Finalis

Tildelingen registreres permanent med bevisene bak den. En periode som tildelt ingenting kan ugyldiggjøres og kjøres på nytt direkte. Den som utstedte polletter må reverseres først:OpsIQ skriver en kompenserende oppføring mot hver lommebok og aldri sletter originalen, så ledger fortsatt viser hva som skjedde og hvorfor. Bare da er perioden frigitt. Omvendelsen nektet hvis noen allerede har utbetalt mer enn beløpet som blir gjenopprettes, samt navn på hvem eller hvor mye.

⚠️
Besvaring krever verifisert kundefeedback. AI kvalitet score kan supplere den dømmende men aldri erstatte det, og en lagkamerat vist som Unscored er ikke kvalifisert. Hver bidragsyter blir cappet på 25% over sin forventede andel av perioden, så én svært høy volum måned kan ikke absorbere hele budsjetten.
💡
Kontoeieren deltar ikke i priser eller tokensbonuser, uten bryter: de autoriserer det finansierte taket og finalisere alle tildelinger. Det er ingen over dem å godkjenne hva de ville betale seg selv. Deres arbeid måles, scorees og rangeres på styret nøyaktig som andre mennesker.

Alle andre deltar som standard, teamledere og med eiere inkludert. For å forlate noen ute, åpne dem i Team & Departments og slå av Ta del i priser- og belønninger alternativet. Deres arbeid er fortsatt scoret og vist; de slutter å være en kandidat fra det punktet, og ingenting allerede fullført blir berørt.

⚠️
Ingen godkjenner penger for seg selv. Fordi de som kan delta, er også folk som kan godkende utbetalinger,OpsIQ nekter en utbetaling eller kreditt i din egen lommebok, betaler ditt eget krav og avslutter et tidsrom der du vil bli betalt. En annen full administrator eller eieren må gjøre det. Betal alle kravene hopper over dine egne samt rapportere den som hoppa over, ikke mislykkes.

Hvem kan se og gjøre det

Vis teamets ytelse

Styret, live-tilstanden og kvalitetsoversikt for arbeidsområdet.

Administrer teamytelse

Mål og vurdering, eksport, QA scorekort og evalueringer, coaching, søksoppgavene og lesningene som bærer kollegaidentifiserbare data slik som per-admin historie og prishistorie.

Vis team belønninger

Balanser, kontantverdier, kravnotater og betalingsreferanser - skilt fra ytelsesbevis fordi det er lønnstilstøtende.

Kun full administrator

Hver pengemutasjon: å betale en belønning, betale eller avvise et krav som gir tillatelse til budsjettet, finalisere, annullere eller omsette en tildeling og angi polen-til-kasse rate. Disse kan ikke delegeres ved at du gi løyve.

Bruke det ganske

Ytelsesindeksen er ledelsesbevis, ikke en automatisk arbeidsbeslutning. Åpne kildesamtalene bak et tall før du handler på det og veier sakkompleksitet, tidsplaner, forlatelse og tilgjengelighet behov. En enkelt vanskelig uke ser ingenting ut som et vedvarende mønster.

Innstillinger

Nettsteder (arbeidsplasser)

Nettsteder (arbeidsplasser) lar deg administrere flere nettsteder fra en OpsIQ -installasjon. Hver har sin egen sporing, AI, kontakter og teamtilgang.

Nettsteder
NettstederSkjermbildet for nettsteder: en liste over arbeidsområder, hver med domene- og typenavn, kontakt/statusmerke eller åpne knapp samt tilleggsside.NettstederarbeidsflateNettsteder+ Legg til nytt nettstedSshop.acme.comeCommerce · Shopify koblingAktivÅpneHhost.acme.comHosting · WHMCS connectorAktivÅpneBblog.acme.comInnhold · ingen kontaktOppsettÅpne1MULTI-SITEEtt arbeidsområde per sted2ISOLATEDData blander aldri3PER-SITEEgne innstillinger og kontakter
Skjermen for ekte nettsteder: hvert sted er sitt eget isolerte arbeidsområde (eigdomene, kobling og innstilling), lagt til og åpnet fra én liste.

Opprette et nettsted

1
Gå til Internett-nettsteder

Naviger til sammenkoblede nettsteder.

2
Legg til et nytt nettsted

Skriv inn navn, domene og beskrivelse.

3
Kopiere nettstedsnøkkelen

Hvert nettsted får en unik nøkkel (Site_xx) for widgetbit.

4
Konfigurer uavhengig

Hvert nettsted har sin egen AI, kontakter og innstillinger.

Hvor mange nettsteder kan jeg ha?+

Avhengig av lisensplanen din. Sjekk lisensens detaljer

Innstillinger

Lisens og plan

Din OpsIQ -lisenskontroller funksjoner, nettstedsgrenser og AI kredittbalanse.

Lisens
LisenssenterOpsIQ Licenssenter: Planlegg, et aktivt statusmerke, den maskerte lisensnøkkelen og en AI-kredittmåler samt en Force remote - checkknapp.LisenssenterarbeidsflateOpsIQ LisenssenterPlanBedriftStatusAktivNøkkelOPSIQ-••••-••••-2F9CAI-kreditter$68 venstreTving fjernkontroll1PLAN & STATUSAktivt, på et øyeblikk2KEYHMAC-kasjet lokalt3CREDITSAI-balanse og grenser
Det ekte lisenssenteret: din plan og aktiv status, den maskerte nøkkelen, AI-kredittbalansen samt en ettklikks kraft ombekrefte.
Lisensnøkkel

Skriv inn Innstillinger > Lisens. Validert mot OpsIQ lisensserver.

Lisensrytme/validering

OpsIQ Normalt leser dens signerte lokale lisens cache og oppdaterer validering når det kreves. Bruk Force fjernkontroll når du trenger et umiddelbart resultat; Diagnostics identifiserer DNS, HTTPS eller servertidsproblemer.

Plan

Avgjør tilgjengelighet og grenser.

Nettstedsgrense

Maksimalt antall arbeidsplasser.

AI-kreditter

Hvis du bruker Managed AI, vises kredittsaldoen din her.

Utløp

Forny før utløpet for å unngå avbrudd på tjenesten.

Hva skjer når lisensen min utløper?+

Sporing, billetter og CRM fortsetter. AI har pause til fornyelsen. Data er bevart.

Innstillinger

Profil, passord og to-faktor autentisering

Hver administrator kan opprettholde sin egen identitet, arbeidspreferanser og passord-og tofaktorautentisering.

Produktskjerm
Min profilProfilsiden skiller personopplysninger, språk/tidssone, avatar / signatur, passord og to-faktor autentisering.Min profilarbeidsflatePROFILFullstendigTIMEZONEEuropa/Aten2FAAktivertLIV ARBETSPESSONENavn og e-postPersonlig identitetRedigerSpråk og tidssoneDatoer og grensesnittRedigerAvatar og signaturSvar og team tilstedeværelseRedigerPassord og 2FAKontobeskyttelseSikker1UPDATE PROFILEidentitet og lokalitet2SECURE LOGINPassord og 2FA3SAVEBruk på denne administratoren
Profilsiden skiller personopplysninger, språk/tidssone, avatar / signatur, passord og to-faktor autentisering.

Profilinnstillinger tilhører den loggede administratoren og endrer ikke arbeidsområdenavn. Bruk et unikt passord, og aktiver tofaktorautentisering. Å bytte e-post eller autentiseringsinnstilling kan kreve ombekreftelse eller en ny innlogging.

Innstillinger

Varselinnstillinger

Varselpreferanser kontroll som operative hendelser når en adminstrator i produktet eller via e-post.

Produktskjerm
VarselinnstillingerVarselsiden gir per arrangement i app og e-postvalg pluss en nylig varslingsliste.VarselinnstillingerarbeidsflateIN-APPEMENDSelektivUNREAD4LIV ARBETSPESSONEBilletten tilordnetI app og e-postKunden svarteI-appSLA-risikoI app og e-postAI-godkjenningI app og e-post1CHOOSE EVENTSBare nyttige signaler2CHOOSE CHANNELI app eller e-post3REVIEWNylige meldinger
Varselsiden gir per arrangement i app og e-postvalg pluss en nylig varslingsliste.

Innstillinger dekker billetttildeling, kundesvarslarm, SLA-varsler og AI -godkjenningsarrangementer. Holde akutt driftssignal aktivert et sted; slå av epost nødvendigvis ikke å skru på varselet i appen.

Innstillinger

Sikkerhetsoversikt

Sikkerhetsoversikten er den første skjermen for å vurdere blokker, påloggingsangreper og trusler som gjelder sesjoner i sikkerhetsstendensene.

Produktskjerm
SikkerhetsoversiktSikkerhetsoversikt kombinerer aktuelle risikokort, a 14-dag trend, angrepsliste, hendelse feed og integritet status.SikkerhetsoversiktarbeidsflateACTIVE BLOCKS18FAILED LOGINS42HIGH THREAT3LIV ARBETSPESSONEAuto-blokkert7-dag totalt og kildeTrendSiste angripereIP, land og grunnAnmeldelseSikkerhetsbegivenheterRisiko og handlingsresultatMateHash-chain integritetTamper-inklute eventkjedeGyldig1READ HEADLINENåværende eksponering2OPEN EVIDENCEAngrepere og hendelser3HANDLINGBlokker, etterforske og eksportere
Sikkerhetsoversikt kombinerer aktuelle risikokort, a 14-dag trend, angrepsliste, hendelse feed og integritet status.

Bruk overskriftskortene for triage, og åpne deretter den relaterte revisjonen, Mislykkede innlogginger IPs eller JavaScript Feilsiden for rekordnivåarbeid. 14-dagstrend er mer nyttig enn en enkelt pigg. Høy treningsøkter bør undersøkes mot besøkende, forespørsel og autentiseringsbevis før et permanent blokk blir anvendt.

Innstillinger

Tamper-inklut revisjonslogg

Revisjonsloggen registrerer hvem som gjorde hva, når og hvor motsette seg det på hvilket risikonivå eller om det lyktes.

Produktskjerm
AktivitetsrevisjonRevisorsiden gir søkbar manipulering-inklut aktivitet med handling, aktør, risiko og resultat.AktivitetsrevisjonarbeidsflateHendelser18.2kHIGH RISK21INTEGRITYGyldigLIV ARBETSPESSONEKoble til[email protected] · ShopifySuksessAPI nøkkelen tilbakekalt[email protected] · Nøkkel 19SuksessInnstillinger endret[email protected] AISuksessTilgang nektet[email protected] · eksportBlokkert1FILTERHandling, risiko og skuespiller2INSPECTMål og resultat3EXPORTCSV eller JSON
Revisorsiden gir søkbar manipulering-inklut aktivitet med handling, aktør, risiko og resultat.

Filtrer etter handling, risiko og skuespiller; eksport CSV eller JSON for en etterforskning. Hash-kjeden hjelper til å oppdage manglende eller endret revisjonsrader, men den erstatter ikke beskyttet sikkerhetskopi og begrenset databasetilgang. Behandle auditeksport som sensitiv fordi de kan identifisere brukere, poster og sikkerhetstiltak.

Operasjoner

Diagnostikk

Diagnostics gjør delsystemkontroll til vanlige-engelske helseresultater og direkte neste handlinger.

Produktskjerm
DiagnostikkDiagnosticere gruppers helsekontroll for widget, AI-kort, billetter, integrasjoner, nettstedets intelligens, bakgrunnsoppgaver, CRM automatisering og lisensiering.DiagnostikkarbeidsflateHELSKE13WARNING2FALDET1LIV ARBETSPESSONEElementBeacon og chat endepunkterSunnBakgrunnsoppgaverCron hjerteslag sentAdvarselE-postUtgående test mislyktesFeilaKoblingerRegistrering og inntak av hendelserSunn1REFRESHKjør gjeldende kontroller2OPEN WARNINGLes bevis3FIX AND RETESTBekreft gjenoppretting
Diagnosticere gruppers helsekontroll for widget, AI-kort, billetter, integrasjoner, nettstedets intelligens, bakgrunnsoppgaver, CRM automatisering og lisensiering.

Siden kontrollerer Site Speed, rang/keyword / backlink / lokale data, AI og handlingsgateway. billetter, crawler/audits, integrasjon- eller arrangementstilgang, bakgrunnsoppgaver, CRM automatiseringer, lisensiering, widget and relatert produkttjenester som kan leses på nettstedet i stedet for å utsette rå hemmeligheter.

Etter en endring, frisk opp og bekrefter det berørte delsystemet returneres sunt. En grønn diagnostikkside er nødvendig men ikke tilstrekkelig til lansering; fullføre checklisten før utgivelse også.

Innstillinger

Sikkerhet og tilgang

OpsIQ inneholder flere sikkerhetslag for å beskytte din administrator, data og API Tilgang.

Hvordan det fungerer
Sikkerhet og tilgangEt sikkerhetsskjold ved siden av aktiverte kontroller: to-faktor, OIDC SSO, SCIM 2.0, OAuth2 PKCE IP brannmur, hastighetsgrenser og en hemmelighet hvelv.To-faktor (TOTP)OIDC SSOSCIM 2.0OAuth2 PKCECSRF + CSPIP brannmurPrisgrenserHemmeligheter hvelv
Sikkerhet

Sikkerhetsfunksjoner

Admin-autentisering

E-post/passord med valgfritt 2FA.

Logg ut

Midlertidig lås etter for mange mislykkede forsøk.

IP blokkering

Blokker IPs eller CIDR varierer fra å få tilgang til sporede nettsteder.

Trusler

- Høyttalende besøkere kan bli blokkerte.

HTTPS håndheving

Nødvendig for alle tilkoblinger. HTTP omdirigeres til httpS

HSTS-hoder

Strict-Transport-sikkerhet hindrer nedgradering angrep.

CSRF beskyttelse

Alle administratorskjemaer inkluderer CSRF-tokens.

XSS beskyttelse

Alle brukerinndata er rømt. CSP- overskrifter begrenser skriptutføringen

SSRF beskyttelse

Utgående webhooks blokkere private/intern IP adresser.

Anbefalt installasjon

1
Aktiver 2FA

For alle admin-kontoer.

2
Sterke passord

Minimum 12 -tegn, blandet.

3
Review-kontoer

Fjern tilgang til tidligere teammedlemmer.

4
Overvåking mislyktes pålogginger

Sjekk ukentlig for mistenkelige mønstre.

5
Hold deg oppdatert

Bruk oppdateringer raskt for sikkerhetspatch.

Innstillinger

Roller og tillatelser

Rollebasert tilgangskontroll lar deg kontrollere hva hvert teammedlem kan gjøre.

Roller og tillatelser
Roller og tillatelserEn rolle-for-kapbarhet matrise: Eieren har alt; Full Admin mangler fakturering og faresonen, Agent har bare omfangsbestemt billetter.Roller og tillatelserarbeidsflateSTETTINGERREKNINGFARLIGBILLETTEREierFullstendig administratorAgentscoped13 ROLESEier · Full Admin2GRANULARPer-side + per department3DEFAULT-DENYGlemte ruter blokkert
Rollematrisen på et øyeblikk: Eieren får alt, Full Admin alt annet enn fakturering og faresoner, Agent bare deres omfang billetter.

Standard roller

Eier

Alt inkludert lisens, risikosone og installasjonsadministrasjon.

Fullstendig administrator

Alt unntatt lisens og faresone. Kan administrere teamet

Agent

Svar på billetter og chatt som er tildelt avdeling, vis analyse. Ingen innstillinger eller sikkerhetstilgang

Kan jeg lage egendefinerte roller?+

Tre innbyggede roller pluss oppdrag fra avdeling gir granulær kontroll.

Innstillinger

Blokkert IPs

Administrer IP adresser som er blokkert fra å få tilgang til dine sporte nettsteder.

Blokkert IPs
Blokkert IPsDen blokkerte-IPs skjerm: en block-an IP/CIDR skjema ved siden av en blokkert adressetabell med hver oppføring, dato og grunn.Blokkert IPsarbeidsflateBlokkere en IP / CIDR203.0.113.0/24Grunn (valgfritt)BlokkerBlokkerte adresser203.0.113.9Jun 12 · brute kraftAvblokker45.12.0.0/16Jun 10 · søppelpostAvblokker102.89.6.2Jun 9 · overgrepAvblokker1BLOKKConstellation name (optional)IP eller CIDR rekkevidde2LISTHvem og når, med grunn3UNBLOCKEtt klikk
Den virkelige blokkert IPs skjerm: blokkere en enkelt IPeller et CIDR-område og administrere listen, hver med sin dato, grunn og ett klikk unblock.

Hvordan blokkere

1
Gå til sikkerhet > blokkert IPs

2
Legg til en IP eller CIDR rekkevidde

Eksempel: 203.0.113.42 eller 203.0.113.0/24

3
Legg til en grunn

Dokument hvorfor: spam, misbruk og skraping.

Vil blokkering påvirke legitime brukere?+

Hvis kunder deler et selskap IP eller VPN, som blokkerer det IP blokkerer alle på den.

Innstillinger

Mislykkede innlogginger

Alle mislykkede påloggingsforsøk til dine OpsIQ Admin.

Mislykkede innlogginger
Mislykkede innloggingerSkjermen mislykkede innlogginger: en kontotabell/IPs med feiltall, siste forsøkstidspunkt og en blokkknapp per rad.Mislykkede innloggingerarbeidsflateMislykkede innloggingsforsøkKUNKSJON/ IPFALDETSISTAction[email protected] · 41.62.10.472m sidenBlokker[email protected] · 102.89.6.2318m sidenBlokkerukjent · 45.12.9.71226m sidenBlokker[email protected] · 88.21.4.921h sidenBlokker1WATCHMislykkede innloggingsforsøk2COUNTSPer konto / IP3HANDLINGBlokker fra raden
Den virkelige feilsøkte innloggingsskjermen: hver konto/IP med sin feiltelling og siste forsøk, blokkere en brute-force kilde rett fra raden.

Hva hver oppføring viser

Dato/tid

Når forsøket skjedde.

E-post

E-postadresse brukt.

IP Adresse

Opprinnelsen til forsøket.

Land

Geografisk plassering.

Grunn

Feil passord, låst eller ikke funnet.

Advarselstegn

Mange forsøk, samme e-post

Passordgjetting. Sikre at 2FA er aktivert

Mange forsøk, ulike e-poster

Automatisk angrep. Blokker kilden IP

Uvanlige land

Hvis teamet er lokalt, vil det være sannsynlig at fremmede forsøk blir angrep.

Innstillinger

AI-sikkerhetsanalytiker

Et opt-in analytiker lag over sikkerhetssidene: dommer, hendelsesbriller, en daglig fordøyelse, et ukentslig posisjonskontroll og 0-token blokkpolicyer. Det kjører aldri i besøkendeforespurnningsstien.

Hver sikkerhetsside registrerer hva som skjedde, men lesingen av den krever fortsatt en vurdering. AI-sikkerhetsanalytikeren legger til denne vurderingen på plass, og den er bygget for å bruke nesten ingenting: Den sitter aldri i beacon- eller innloggingsbanen, deterministiske regler løser de åpenbare tilfellene uten AI-kall, dommer blir bufret, og analytikeren beste utgang er en deterministisk regel som deretter håndheves for alltid med null tokens. Innstillinger → Sikkerhet; alle standard av.

Hva det legger til

Verdict chips + Forklar

Blokkert IPs og Mislykkede innloggingsrader viser en godartet/ mistenkelig / fiendtlige chip med tillitsscore. Forklar åpner resonnementet, fakta som brukes samt ett-klikk på Block / Release handlinger. Cached 24h, så se på en ny IPDet er gratis.

Foreløpige briefs

Relaterte hendelser klynges inn i én episode (loginbølge, URL skann, automatisk blokkering sprakk) med en vanlig engelsk tidslinje og ett anbefalt neste trinn.

Daglig fordøyelse

En recap per dag: i går mot grunnlinjen din, blokkerne dine og hendelser. Stille dager sender en deterministisk all-clear ved null polletter.

Ukeholdighetskontroll

En mandag herding sjekkliste (2FA hull, låse ut terskel versus ekte angrep volum, varsler av) med en alvorlighetsgrad og innsats og nøyaktig fikse per element.

Spør om sikkerhet

En spørsmålsboks på sikkerhetsoversikten som svar fra din live-sikkerhet. Deep serverspørsmål blir levert til administratoringeniørchatten i stedet for gjettet.

Politikkforslag + autopilot

Analytikeren foreslår betongblokkregler som Approve / Avslutte kort; godkjente regler håndhever ved null pollett med en live hit-teller. Valgfri autopilot godkjenner bare de sikreste reglene automatisk.

Innstillinger

AI sikkerhetsanalytiker (sikkerhet_ai-aktivert)

Master bryter. Aktiverer dom chips, Forklar og spør Sikkerhet. Bare tvetydig IPs nå modellen, satset i ett anrop.

Foreløpige briefs (sikkerhet_ai_incidents)

Klynger hendelser inn i hendelsene og skriver hver ny historie. Kjører på eksisterende timesikkerhetskrone.

Daglig fordøyelse (sikkerhet_ai_digest)

En sikkerhetsgjenopptak per dag på klokken og Oversikt. Stille dager koster ingenting.

Ukestillingskontroll (sikkerhet_ai_postur)

Mandag herding sjekkliste på Oversikten. Checklisten er fullt deterministisk.

Autopilot (security_ai_autopirator)

La analytikeren aktivere sine tryggeste forslag uovertruffet: reversible tidsbegrensede blokker bare, enkelt IPs eller er ikke bredere enn /24, aldri delt / mobil/privat, cappet 10 per time, alltid revidert og angrelig.

💡
Hvert anrop er tagget security_ai med sin egen månedlige cap i AI Config → Cost Guardrails (standard 300k polletter). Hvis lokket blir slått, funksjonene nedgradere til å determinisere lesninger. Blokkere, låse ut og varsler aldri avhengig av dette budsjettet. Analytikeren kan ikke slette data, endre innstillinger, rør ved revisjonen Ledger eller gjøre et permanent forbud.
Operasjoner

Krone og automatisering

OpsIQ bruker én produktplanlegger til å kjøre e-postvalg, billettautomatisering, analyserullups, oppbevaring av AI køene, CRM arbeid, rapporter og kontaktjobb.

Produktskjerm
Krone og automatiseringEtt produkt cron oppføring gir hjerterytme; OpsIQ avgjør hvilke interne jobber som skal.Krone og automatiseringtjenerHJERTESLYKKConstellation name (optional)Hvert minuttRUNNERcron/all.phpHEALTHInnstillingerLIV ARBETSPESSONEUnified produktløperopsiq/cron/all.phpNødvendigBillett og e-postkøerKort planlagt arbeidAktivAnalytiske og retensjonIntern kadensPlanlagtKontaktabonnenterDeklarerte kronbegivenheterOmfanget1INSTALL ONE LINEKjør produktplanleggeren hvert minutt2CHECK CRON SETUPBekreft CLI hjerterytme3USE DIAGNOSTICSUndersøk sent eller mislykket arbeid
Ett produkt cron oppføring gir hjerterytme; OpsIQ avgjør hvilke interne jobber som skal.

Nødvendig produktkrone

Legg til denne enkeltlinjen i crontab for samme server og PHP-miljø som kjører OpsIQ:

OpsIQ produkt crontab oppføring
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1

Bytt ut /path/to/opsiq med installasjonsroten. Bruk den fulle PHP CLI-stien når verten krever en, for eksempel /usr/bin/php8.4.

Ikke bruk toppnivå /cron.php For produktarbeid. I dette lageret som løper tilhører en separat ikke-produkt tjeneste utenfor denne håndboken. OpsIQ Produktløper er opsiq/cron/all.php.

Hva den felles skemaleggeren driver

Billet og AI køer

Prosesser som skyldes automatiske replikasjoner, eskaleringer og godkjenningsarbeid i køen.

Inngående e-post

Poller konfigurerte postkasser der polling er den valgte inntaksmetoden.

Analytics og sesjoner

Samler økter og oppdatere planlagte aggregat når de er pålagt.

CRM og engasjement

Kjører score, livssyklus, arbeidsflyt, kampanje og planlagte rapporter som er aktivert.

Oppbevaring og vedlikehold

Utfører due cleanup, arkiver og utløpsarbeid.

Koblinger

Dispatches koblingskronabonnenter og polling bare for installert, aktivert og konfigurerte kontakter.

Bekreft krone

  1. Åpne Innstillinger - Cron-oppsett og bekrefte at produktløperen eksisterer.
  2. Bruk Kjør nå én gang, så bekrefte admin og polling hjerterytme oppdatering.
  3. Sjekk Diagnostikk for et sen hjerterytme, PHP CLI eller fil-sti problem.
  4. Inspeksjon /tmp/opsiq-cron.log eller loggstien du valgte når en manuell kjørefeil.

Hold kontaktens håndterere korte, idempowent og arbeidsområde-skarpe. Batch lange synkroniseringer og lagre en markør/kontrollpunkt slik at neste løp kan fortsette trygt.

🚫
Når produktet Cron stopper, tidsbaserte OpsIQ -arbeidsstopper eller blir sent selv om vanlige admin sider fortsatt kan laste.
Operasjoner

· Vertslige distribusjonsaktiviteter

En hostet OpsIQ -utføring bruker de samme produktskjermene og arbeidsflyten mens vertsoperatør administrerer serverlaget. Kommerciell registrering, planer, fakturering og kontoportal prosedyrene er utenfor denne håndboken.

Produktskjerm
Vertslig utplasseringVært driftsendringer som opprettholder infrastrukturen; det endres ikke hvordan kunder bruker OpsIQ.Vertslig utplasseringarbeidsflatePRODUCT UISameOpsIQINFRASTRUCTUREOperatørstyrtWORKSPACE DATAIsolertLIV ARBETSPESSONESøknadskjøringstidPHP, webserver og databaseAdministrertProduktkronePlanlagt av hosting operatørBekreftSikkerhetskopier og oppdateringLeverandørpolitikk og bevisAnmeldelseOpsIQ innstillingerNettsteder, AI-er og kontaktpunkterDitt team1OPERATE OPSIQ NORMALLYBruk samme produktnavigering2VERIFY SERVICE HEALTHBruk diagnostikk og statusbevis3KNOW RESPONSIBILITYSeparate produktinnstillinger fra hostingarbeid
Vært driftsendringer som opprettholder infrastrukturen; det endres ikke hvordan kunder bruker OpsIQ.

Hva hostingoperatøren vanligvis administrerer

  • Nettserver, PHP-kjøringstid og databasetjeneste TLS og lagring.
  • Den felles produktkronen og dens servernivå logger.
  • Programoppdateringer, infrastrukturovervåking og sikkerhetskopieringsprosessen definert i hostingavtalen.

For noe OpsIQ administratoren administrerer fortsatt

  • Nettsteder og widget-installasjon, AI innstillinger, kunnskapsområder, postkasser og arbeidsflyt til kundestøtte.
  • Tilgang til team, avdelinger og sikkerhetskontroller. API -nøkler, koblingselementer, automatiseringer samt innstillingene for dataoppbevaring
  • Produktverifisering gjennom diagnostikk, revisjonsloggen og kontakttestene samt reelle slutt-til-slutt kontroller.

Operasjonskontroll

Ikke anta at en kontrollert tjeneste betyr hver produktintegrasjon er sunn. Bekreft den nyeste sikkerhetskopierings- og oppbevaringspolitikken med hostingoperatøren, og bruk OpsIQ Diagnosticer etter endringer i DNS, e-post, AI leverandører, nettsider eller kontakter.

Denne delen dekker kun produktdrift. Kommersiell onboarding, abonnementer og fakturerings-og kundekontoadministrasjon forblir utenfor OpsIQ Håndbok.

Operasjoner

Selvværende OpsIQ

En selvvært OpsIQ installasjon kjører på infrastruktur du kontrollerer. Du er ansvarlig for kjøretiden, databasen TLS, produktkrone, sikkerhetskopier, oppdatering og overvåking.

Produktskjerm
SelvværtSelvværende gir infrastrukturkontroll og gjør teamet ditt ansvarlig for alle driftsavhengigheter.SelvværttjenerPHP8.4+DATABASEMySQL 5.7+SCHEDULERHvert minuttLIV ARBETSPESSONEKjøretid-utvidelserkrølle, pdo_mysql jsonNødvendigYtterligere utvidelserxml, Opensl, glidelåsNødvendigDatabase alternativMariaDB 10.3+ med InnoDBStøttetTransportHTTPS og utgående leverandør tilgangBekreft1PREPARE THE SERVERMatch løpstid krav2INSTALL AND CONFIGUREBruke en dedikert database og HTTPS3ADD PRODUCT CRONKjøre opsiq/cron/all.php
Selvværende gir infrastrukturkontroll og gjør teamet ditt ansvarlig for alle driftsavhengigheter.

Minimum programvarekontrakt

PHP

PHP 8.4 eller nyere. Nødvendige utvidelser: krøll, pdo_mysql json, xml, openssl, glidelås og gd.

Database

MySQL 5.7+ eller MariaDB 10.3+ ved hjelp av InnoDB. Opprett en dedikert database og minst priviligert applikasjonsbruker.

Nettserver

Apache eller Nginx konfigurert for OpsIQ frontkontrollør, statiske eiendeler og nødvendige omskrivinger.

HTTPS

Nødvendig for administratorøkter, widget trafikken API -nøkler, webhooks og leverandørsamtaler.

Utgående tilgang

Tillat DNS og HTTPS tilgang til AI, e-posten, kontakten og lisensendepunkter du faktisk aktiverer.

Filtilgang

Nett- og CLI-brukere må kunne lese programfiler, skrive kun til dokumenterte driftstider/lagringssteder.

Cron

Kjør OpsIQ produktplanleggeren hvert minutt med samme programkonfigurasjon og databasetilgang som webprosessen.

installasjonssekvens

  1. Last opp utgivelsen til den planlagte dokumentroten og bevare den medfølgende katalogstruktur.
  2. Opprett database- og applikasjonsbrukeren, skriv deretter inn databasen eller kanonisk URL og lisensinnstillinger.
  3. Kjør installasjons-/settstrøm og lag den første eierkontoen.
  4. Aktiver HTTPS og verifiser omdirigeringer, informasjonskapsler samt den offentlige widgeten/API stier.
  5. Legg til den felles OpsIQ produkt cron:
Selvvært produkt krone
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1
  1. Åpne innstillinger - Cron-oppsett og diagnostikk; kjør planleggeren én gang, og løse alle feilaktig avhengighet.
  2. Konfigurere sikkerhetskopiering, gjenoppretting av tester og loggbevaringsprosedyrer før du legger til produksjonsdata.

Oppdaterer trygt

  1. Les utgivelsesnotatene og sjekk de nødvendige PHP/utvidelser før du endrer filer.
  2. Sikkerhetskopier database- og program/oppsettfiler, så bevise backup kan gjenopprettes på en testplassering.
  3. Deponer de nye filene uten å slette installasjonsspesifikke konfigurasjon eller kjøretidsdata.
  4. Kjør den medfølgende migrasjonsprosessen og verifiser innlogging, widgetsporing, billetter, e-poster, AI, kontakter og krone.
  5. Hold den forrige utgivelsen og database backup tilgjengelig for det dokumenterte tilbakerullevinduet.
🚫
Lageret på toppnivå /cron.php Det er ikke OpsIQ produktplanlegger. Punktproduktautomatisering bare på opsiq/cron/all.php
⚠️
Ikke slett .schema_cache json som rutinemessig vedlikehold. Fjern det bare når produktet instruksjoner eksplisitt krever en skjema-kake gjenoppbygging.
Operasjoner

Produksjonsguide

Sjekkliste og beste praksis for drift OpsIQ i produksjon.

Produksjonsguide
ProduksjonsguideEn go-live checkliste: tilpasset domenet og SSL, AI trente, kontakter og krone, backups og retention samt teamroller.Sjekkliste for live-startarbeidsflateFør du går liveEgendefinert domene + SSLAI trener på innholdet dittKontakter testet · kronekjøringSikkerhetskopier planlagt · oppbevaring sattTeamroller tildelt og revurdert1GO-LIVESjekkliste før lansering2VERIFYDomene · SSL3CONFIDENTSkip når det er grønt
En go-live checklist så ingenting er savnet: domenet + SSL, utdannet AI, testet kontakter og krone, sikkerhetskopier og retensjon samt teamrollene.

Før du går live

HTTPS- konfigurert

SSL installert, HTTP omdirigerer og HSTS aktivert.

Cron løper

Sjekk via diagnostikksiden.

AI-testet

Chat som kunde. Kontroller nøyaktighet og tone

Skjermelement installert

På alle nettsider. Bekreft med Live Feed

Sikkerhetskopiering konfigurert

Automatisert daglig database og fil backups.

Feil ved logging

PHP-feilloggen er aktivert og overvåkes.

Teamet invitert

Alle medlemmer har kontoer med riktige roller.

Kunnskapsbase befolket

I det minste 5-10 artikler.

Daglig: Sjekk dashboard, klar billettkøen og spot-check AI samtaler.

Weekly: Review AI Insights, oppdater KB, sjekk teamets ytelser og gjennomgang sikkerhet.

Månedlig: Gjennomgang analyse trender, revisjonskontakter, oppdatering AI-trening og bekrefte backup.

Operasjoner

Sjekkliste før lansering

Kjør kildeportene og fullføre ekte produktkontroll før en utgivelse eller første produksjon lansering. En kommando som er tilgjengelig, viser ikke at den passerte i miljøet ditt.

Produktskjerm
UtgivelsesverifiseringUtgivelsesvisningen viser at portene må kjøre; den ikke pre-merking dem som passert.UtgivelsesverifiseringtjenerRUNTIMEPHP8.4SOURCE GATESKjør lokaltOUTCOMEBevisbasertLIV ARBETSPESSONENødvendige utvidelserSjekk før suitenPortPHP-syntaks feieAlle PHP-filerPortAI-utvikling og PHPUnitKjør når avhengigheter er tilstedePortStatisk og nettleserkontrollKjør når konfigurertPort1RUN THE CHECKSOpptak den faktiske utgangen2FIX EVERY REQUIRED FAILUREIkke erstatte bevis med antakelser3TEST THE PRODUCTSjekk ekte brukerreiser
Utgivelsesvisningen viser at portene må kjøre; den ikke pre-merking dem som passert.

Kilde og frigivelsesporter

Kjør arkivkontrollene fra installasjonsroten og hold deres komplett utdata med utgivelsespost.

Primær før-fly gate
php tools/preflight.php
Utvidet utgivelsesport
php tools/release_gate.php

Preflight sjekker PHP 8.4 løpstid og nødvendige utvidelser, utfører en PHP-syntakse feie, kjører AI evalueringsskip porten og full phpUnit suite. Kjører Phpstan / Node kontroller når disse verktøyene er installert. Den forlengete gaten inkluderer også røyk, reninstallering/schema samt nettleseren ende til slutt sjekker når miljøet deres konfigureres.

En hoppet sjekk er ikke et pass. Ta opp hvorfor det var utilgjengelig, installer manglende avhengighet eller kjøre den i riktig CI / stoging miljø før utgivelsen.

Produktkontroll

1. Autentisk og roller

Logg inn som hver tiltenkt rolle; verifisere tillatte og avslåtte sider/handlinger.

2Widget og sporing

Last inn et ekte nettsted i en privat nettleser; verifiser beacon trafikk, Live Feed-mating, besøkende og sesjon poster.

3. Chat og AI

Still representative spørsmål; verifiser kunnskapsgrunnlaging, sikkerhet og opptrappingshistorie.

4. Billetter

Opprett, tilordne, svare på, eskalere og steng gjennom alle aktiverte inntaksstier.

5. E-post

Test utgående levering og hver konfigurert innbunden postkasse eller webhook sti.

6 CRM og analyse

Opprett en kontrollert kontakt/deal / konvertering og verifisere dashboards, tratter, scorer og rapporter.

7. Kontakter

Kjør tilkoblingstester, en lese- og én sikker skrive/tørrkjøring samt webhook / polling bane for hver aktivert kontakt.

8. API og webhooks

Kontroller smale omfang, rentegrenser og idempotensielle retries.

9. cron

Kjør den felles produktplanleggeren og bekreft alle nødvendige hjerterytmer i Cron Setup/Diagnostics.

10. Sikkerhet

Kontroller 2FA, CSRF/sessionskontroller, revisjonsoppføringer og nøkkelangrep.

11. Sikkerhetskopiere og gjenopprette

Gjenopprette en gjeldende sikkerhetskopi til et separat testmiljø og verifisere data og konfigurasjon.

12. Observasjon og tilbakeføring

Bekreft logger/alerts, bevar forespørsel ID-nummer og bevis tilbakerulling prosedyren.

⚠️
Deploy først etter hver nødvendig gate og forretningskritisk reise har aktuelle bevis for nøyaktig frigjøringen.
Utvikler

Web Push på tredjeparts nettsteder

Nettleser push-varsling (inkludert OpsIQ Push Campaigns) trenger en tjenestearbeider som betjenes fra SAME ORIGINA til siden.OpsIQ widget laster fra din OpsIQ utplassering, slik at et tredjeparts nettsted ikke kan registrere OpsIQ's arbeidsgiver direkte. Vert en liten fil på nettstedets eget domene for å aktivere push der. kampanjer levere gjennom WORK-støttede metoder.

Hvordan det fungerer
Web pushEn OS-stil push varsling over to leveringsmetode kort: Innebygd VAPID og Pusker Beams.Din butikDin handlevogn venter · 10% Av i dagInnebygget (VAPID)Ingen tredjepartVert én filPusher- bjelkerBruk kontoen dinVær vert for arbeideren
Web push

Hvorfor dette trengs

Browsere bare la en side registrere et tjenestearbeider fra sin egen opprinnelse. Widgeten laster kryss-origin fra din OpsIQ distribusjon, så det kan ikke installere pusharbeideren på en kundeside til du er vert for arbeideren på nettstedets opprinnelse, widget stillt hopper skyve (ingen feil eller abonnement). Du har to valg nedenfor;OpsIQ Push Campaigns publiserer gjennom begge deler.

Alternativ A · Selvvært Web Push (VAPID, ingen tredjepart)

1. Last ned arbeidstakeren fra din OpsIQ utplassering: https://YOUR-OPSIQ/opsiq/opsiq-push-sw.js

2. Last den opp til din web rot så det er tilgjengelig på https://yoursite.com/opsiq-push-sw.js. Skjermelementet Auto-detekter denne banen på sidens eget opprinnelse og registrerer det, ingen snutt endring nødvendig. (Det bruker et smalt omfang så den erstatter aldri en tjenestearbeider du allerede kjører ;)

Valgfritt: Hvis du må være vert for den på en ikke-standard sti, pek widgeten ved det Før Den er bare akseptert når den samme prosessen:

Valgfritt · Bare hvis filen ikke er på webroten
<script>window.OpsIQ=window.OpsIQ||{};window.OpsIQ.pushSwUrl="/custom/opsiq-push-sw.js";</script>

3. I OpsIQ, generere VAPID-tastene (innstillinger → Client Chat AI → Avansert → Web Push). Skjermvaren ber deretter besøkende om varslingstillatelse og abonnerer dem.

Bak CDN/Cloudflare Pass på at /opsiq-push-sw.js returnerer HTTP 200 (purge cache hvis det var 404 før du lastet opp; en cache 404 vil blokkere registrering).

Alternativ B · Pusher Beams (styrt leverandør)

1. I OpsIQ innstillingene setter push-leverandøren til Pusher- bjelker og inn i dine Beams Instans-ID og Hemmelig nøkkel.

2. Vær vert for beams tjenestearbeider på nettstedets rot som /service-worker.js. Kopier https://YOUR-OPSIQ/opsiq/pusher-beams-service-worker.js, eller slå sammen denne linjen i din eksisterende rotarbeider:

Beamsarbeider, vert på https://yoursite.com/service-worker.js
importScripts("https://js.pusher.com/beams/service-worker.js");

3. Skjermelementet laster automatisk beamene. SDK og abonnerer hver besøkende til per-site interesse opsiq-site-<your-site-key>Ingen andre ledninger trengs.

Hvordan kampanjer leveres

Push Campaigns publiserer gjennom Begge deler metoder på én gang: besøkende i den selv-verte VAPID arbeider får kryptert Web Push, og gjester abonnert via pusher Beams få beamene publisering. Hver reisende er nådd gjennom det de tilmeldte seg, så du kan kjøre samme origin vapid på noen nettsteder og kryssorigin Beam på andre.

HTTPS er nødvendig for tjenestearbeidere og Web Push (lokal host er unntaket fra testing). Admin chat innboksen allerede bruker den samme Beams interessemekanisme til operatøren varsler.

Operasjoner

Feilsøking

Vanlige problemer og hvordan å fikse dem.

Generelt

Tom side+

Sjekk PHP-feillogger. Årsaker: gammelt php (nødvendig 8.4+), manglende utvidelse, DB-tilkobling mislyktes.

Dashboard viser nuller+

Sjekk: widget installert? Cron kjører? Datoområde korrekt? IP Utelukket?

AI

AI svarer ikke+

Sjekk: leverandøren konfigurert? API nøkkel gyldig (bruk Test-tilkobling)? Budsjettet utdatert? Arbeidsområde AI oppsett riktig .

AI gir feil svar+

Sjekk: kunnskapsbase oppdatert? Spør klart? Kontakt oppslag returnerer riktige data? Gjennomgang samtalen i AI-historie.

AI er langsom+

Avhengig av: leverandør API hastighet, kontekststørrelse (stor KB = mer polletter = langsommere), nettverks latens. Prøv en rasker modell.

Sporing

Widget mangler+

Sjekk: skript i sidekilde? JS feil på konsollen? CSP blokkerer? Adblocker?

Ukjent land+

GeoIP er ikke konfigurert. Bruk Cloudflare (automatisk) eller MaxMind GeoLite2-database.

Biljett

E-poster som ikke lager billetter+

Sjekk: postkasse tilkoblet? Cron kjører du? App passord endret? IMAP -innstillingene er riktige?

Auto-reply fungerer ikke+

Sjekk: aktivert? Avdeling tillatt? AI konfigurert? Cron kjører? Menneskelig svarte først?

Koblinger

Tilkobling mislyktes+

Sjekk: legitimasjon riktig? Nøkkelen utløpt. API Tilgjengelig fra serveren? Base URL Ikke sant?

Tilkoblet, men ingen data+

Sjekk: API nøkkelområde? Webhook synkronisering aktivert? Cron kjører?

Ytelse

Langsomme sider+

Sjekk: databaseytelse (SHOW PROCESSLIST), PHP-minnet (økning til 1GB), muliggjør opcache, redusere oppbevaringsperioden.

Operasjoner

Widget logger ikke besøk

Bruk denne fokuserte sjekken når widgetet lastes feil, eller Live Feed forblir tom.

Når widget logger ikke besøk, verifisere nettstedsnøkkelen, laste siden i en privat nettleser, sjekk nettleseren Network/Console-panelene for blokkerte beacon eller widgetforespurnelser, gjennomgang Innhold - Sikkerhet og annonseringsblokkere OpsIQ, og åpen diagnostikk. En synlig chat boble ikke i seg selv viser at analytics beacon ble akseptert.

Referanse

Ordliste

Definisjoner for termene som brukes i hele OpsIQ.

Handling

Noe som AI kan gjøre gjennom en kontakt eller plattform.

Agent

Et teammedlem med begrenset tilgang eller AI-agent.

BYOK

Ta med din egen nøkkel, du gir deg selv AI API -nøkkelen.

Koble til

Et plugin integrere en ekstern plattform med OpsIQ.

CSAT

Kundetilfredshet score.

Del ut

En inntektsmulighet i CRM.

Avdeling

En billettkategori for rute- og tilgangskontroll.

Eskalering

Flytte billett til en annen avdeling eller fra AI til menneske.

GeoIP

Besøkendes plassering deteksjon fra IP adresse.

Handoff

Overfører en samtale fra AI til menneske.

Identifikasjonssymbol

Signert poliks identifisere en besøkende på nettstedet.

Kunnskapsbase

Artikler som AI bruker til å svare på spørsmål.

Bly

En besøkende som viser kjøpsformål.

Lead score

0-100 tall som indikerer konverteringssannsynlighet.

Livsyklus-fasen

Hvor en kunde er: Lead, Prospect . Kunde i risikozonen Curned

Administrert AI

AI som er en del av din OpsIQ -plan.

Rørledning

Visual styret i deal-faser.

RBAC

Rollebasert tilgangskontroll.

Økt

En rekke sidevisninger innenfor et tidsgrensevindu.

Nettstedsnøkkel

Unik identifikator for en sport nettsted.

SLA

Servicenivåavtale, målrettede responstider.

Token

Enheten av AI-tekst. Grovt 4 tegn = 1 -Teen.

Stol på lag

Sikkerhetssystem som regulerer AI-autonomisitet.

Nettkroke

HTTP-tilbakekalling for hendelsesvarsling.

Element

JavaScript kode innebygd på nettstedet ditt.

Arbeidsplass

Et nettsted med egen sporing, AI, koblinger og team. Samme som "nettsted".

Referanse

Få mer hjelp

Hvis denne dokumentasjonen ikke svarer på spørsmålet ditt:

AI- administrator

Klikk "Spør OpsIQ" i admin. Har tilgang til denne dokumentasjonen og plattformdataene dine.

Støttebilletter

Inkluder: det du prøvde, hva som skjedde, hva du forventet og eventuelle feilmeldinger.

E-post

E-poststøtte med lisensnøkkelen og problembeskrivelse.

Tips for effektive støtteforespørsler

Inkluder siden

Hvilken admin-side (URL eller navn)

Ta med innstillingen

Nøyaktig å sette navn og gjeldende verdi.

Ta med feilen

Eksakt feilmelding med koder.

Ta med trinnene

Hva du gjorde, steg for skritt.

Inkluder forventet vs faktiske

Hva som skal skje mot det som skjedde.

💡
Jo mer spesifikk forespørselen din er, desto raskere blir svaret. "Det fungerer ikke" krever undersøkelse. "Klikker du på Lagre i AI-konfigurasjon gir feilkode 502" får et direkte svar.