OpsIQ Documentação

Construir, operar e Estenda OpsIQ.

Esta é a documentação completa para OpsIQ Configure o produto, execute suporte, configure IA, gerencie CRM, instale o widget, construa conectores, chame o REST API, receber webhooks, pacotes de aplicativos de mercado, e operar auto-hospedagem implementações.

Guia de clienteGuia de administração.Guia de desenvolvimentoReferência de CRMConector SDKRESTAURAÇÃO APIAuto-anfitrião
Escopo

Escopo deste manual

Tudo. OpsIQ Começar em qualquer lugar, as seções seguem a mesma ordem que a barra lateral do administrador.

Escopo
Mapa da documentaçãoO manual é organizado em torno do OpsIQ produto, seguindo a mesma ordem da barra lateral do administrador.Mapa da documentaçãoOpsIQ produtoAUDIENCEOperadoresCONSTRUÇÃODesenvolvedoresRUNAdministradores.OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOUseOpsIQTelas de produtos e fluxos de trabalhoIncluídoEstender OpsIQConectores, APIs e widgetIncluídoOperar OpsIQSegurança, cron e implantaçãoIncluídoReferênciaPacote, API e contratos webhookIncluído1CHOOSE AUDIENCEOperador ou desenvolvedor2FOLLOW THE UISeções espelho OpsIQ3USE SOURCE TRUTHO status vem da construção
O manual é organizado em torno do OpsIQ produto, seguindo a mesma ordem da barra lateral do administrador.
Guia de campo do Portal Studio

Use o guia de administrador e desenvolvedor dedicado para arquitetura do Portal, páginas, componentes, visualização, Central de Ajuda, identidade, SCIM, releases governados, extensões, migrações e certificação.

Abra o guia do Portal Studio.

O que está aqui?

Execute o produto.

Todas as telas do administrador: análise, bate-papo ao vivo, ingressos,CRM O que cada página faz, o que os números significam, e o que fazer quando eles parecem errados.

Conecte seus sistemas.

O widget do site, correios de e-mail, acesso e saída webhooks, e a biblioteca de conectores para plataformas como Shopify, WooCommerce, WHMCS, Zendesk, Stripe, Slack e Gmail.

Construa o seu próprio

O Conector Builder para conectores sem código, Ações e gatilhos se você preferir não usar conectores em tudo, e o REST API com cada ação, escopo e código de erro.

Operar

Funções e permissões, segurança, cron, diagnósticos, backups, e implantação hospedada e auto-anfitriã.

Por onde começar?

1
Se você correr OpsIQ Dia após dia

Leia as seções de tela em ordem lateral, cada uma abre com o que a página serve, para que você possa parar assim que tiver o que precisa.

2
Se você administrar

Adicione configurações, segurança, diagnósticos, Cron e produção.

3
Se você está construindo uma integração

Comece nos conectores, depois no Connector Builder, e depois no REST. API Leia-os em ordem e verá de todas as formas. OpsIQ pode falar com outro sistema.

💡
Duas coisas mudam o que você vê, Permissões escondem páginas que seu papel não pode abrir, então uma seção descrita aqui pode estar faltando na sua barra lateral, peça a um administrador para verificar seu papel e conectores carregam uma etiqueta de maturidade de Produção, Beta, Visualização ou Modelo, a construção em execução e seu manifesto de conector são a autoridade sobre qual delas você tem, não esta página.
Comece aqui.

O quê? OpsIQ faz para o seu negócio

OpsIQ Ele substitui sua análise, chat ao vivo, helpdesk, CRM, SEO toolkit, integração middleware e plataforma desenvolvedora por um único administrador unificado onde cada ferramenta compartilha o mesmo contexto do cliente. 8-12 Separados produtos SaaS, você instala OpsIQ uma vez e operar tudo de uma tela.

A plataforma
OpsIQ Plataforma unificadaUm cérebro de IA central conectado a chat ao vivo, CRM, ingressos, Inteligência do Site, promoções e análises.Conversa ao vivo.PromoçõesAI CRMIntel do siteBilhetes-Esquecimento.OpsIQAi Brain1ONE WORKSPACECada ferramenta em um administrador2SHARED BRAINUm contexto de cliente.3ANYWHERENuvem ou auto-hospedado
OpsIQ é uma plataforma com um contexto de cliente compartilhado, cada ferramenta alimenta, e é alimentado por, o mesmo cérebro IA.

Tudo. OpsIQ Faz · em detalhe

Análise de sites e inteligência de visitantes

Rastreamento de visitantes em tempo real.

Cada página carrega, clica, rola e evento de navegação é capturado em tempo real.

Diário de visitas e sessões

Histórico completo de cada visitante com dispositivo, navegador, sistema operacional, país, cidade, referência, parâmetros UTM, landing page e resolução de identidade.

Reprodução de sessão

Reproduções de tempo nas sessões de visitantes capturados, veja exatamente o que os usuários fizeram: movimentos do mouse, cliques, pergaminhos, transições de páginas e interações de formas, use-o para diagnosticar problemas com UX, entender pontos de entrega e verificar fluxos de conversão.

- Alimento ao vivo.

Veja as visualizações de página, início de conversa, submissão de formulários e sinais de intenção atualizando a cada poucos segundos.

Páginas de cima.

Páginas classificadas por visitas, tempo de engajamento, taxa de rejeição, conversões e atividade de suporte.

Geo-inteligência

Distribuição de dispositivos e navegadores, análise da fonte de tráfego, rastreamento de referências do motor de busca e insights de penetração no mercado.

Funil de intenção

Rastreie os sinais de intenção do visitante (principais visitas de página, retornos repetidos, padrões de navegação de documentação e interações de suporte) para identificar visitantes que são propensos a comprar, churn, ou precisar de ajuda.

Experiências A/B

Faça testes separados em seu site diretamente de OpsIQ... crie variantes, ajuste a alocação de tráfego, defina objetivos de conversão e meça significância estatística.

JavaScript Rastreamento de erro

Capture o lado do cliente. JavaScript Veja mensagens de erro, traços de pilha, navegadores afetados, contadores de frequência e quais páginas os ativam.

Diário de eventos

Cada evento rastreado (vistas de página, eventos personalizados, interações de chat, submissões de formulários, compras) em um registro pesquisável e filtrado com metadados completos.

Vendas e conversões

Acompanhar ordens, receitas, reembolsos, renovações de assinaturas e atribuir conversões a fontes de tráfego, campanhas e viagens de visitantes.

Chumbo

Visitantes de alta intenção identificados por padrões de comportamento, pontos baseados em visitas de página, tempo no local, frequência de retorno, interações de suporte e sinais personalizados, alimentação leva diretamente para o pipeline CRM.

Inteligência do site (SEO e análise de conteúdo)

O site rasteja.

Rastreamento automático de todo o seu site para descobrir páginas, detectar links quebrados, encontrar meta tags faltando, verificar imagem alt texto, validar canônico URLs, e mapear sua estrutura do site.

Auditoria técnica de SEO

Análise técnica abrangente: pontuação de velocidade da página, responsividade móvel, Vitais da Web Core, status do certificado SSL, cadeias de redirecionamento, detecção duplicada de conteúdo, análise de profundidade e validação estruturada de dados.

Auditoria de conteúdo

Avaliar cada página para qualidade de conteúdo, contagem de palavras, pontuação de leitura, densidade de palavras-chave, estrutura de cabeçalhos, relação de ligação interna/externa e frescura.

Busca com energia de IA

Procure semântica em todo o conteúdo do site, faça perguntas sobre seu conteúdo e obtenha respostas sintéticas com referências de página de origem.

Rastreio de classificação SERP

Monitore seus rankings de busca por palavras-chave no Google e outros motores, rastreie as mudanças de posição ao longo do tempo, compare com os concorrentes e veja quais páginas classificam para quais termos.

Pesquisa de palavras-chave

Descubra oportunidades de palavras-chave baseadas em seu conteúdo, análise de concorrente e dados de volume de busca.

Análise de backlink

Veja quais sites se conectam a você, rastreie links novos e perdidos, analise a distribuição de texto âncora e identifique oportunidades de construção de links.

Rede local de SEO

Para empresas com locais físicos, visualize sua visibilidade de busca local em uma grade geográfica, veja como seus rankings variam por localização, distância do seu negócio e intenção de pesquisa.

Perfil de Negócios do Google Sincronia:

Conecte seu perfil de negócios do Google para OpsIQ Sincronize comentários, posts, perguntas, fotos e informações de negócios.OpsIQ Responda a críticas, publique posts e monitore insights.

Relatórios agendados

Relatórios automatizados de SEO e análise gerados em sua agenda (diário, semanal, mensal) relatórios incluem mudanças de ranking, tendências de tráfego, problemas técnicos encontrados, e desempenho do conteúdo.

Suporte com IA

Conversa de clientes AI

AI responde perguntas de clientes em seu site. 24/7 usando sua base de conhecimento, dados de plataforma conectados (ordens, contas, assinaturas) e avisos de treinamento personalizados.Anthropic), GPT-4o (OpenAI), Gemini (Google) e Grok (xAI).

Assistente de IA do administrador.

Um copiloto de IA dentro do seu painel de administração que ajuda você a escrever respostas de ticket, rascunho de comunicações com o cliente, análise de tendências de suporte, pesquisa de dados de clientes em plataformas conectadas e execução de ações através do sistema de conectores.

AI conhecimento aterramento

A IA está fundamentada em seus artigos de base de conhecimento, entradas de FAQ, documentação do produto e dados de plataforma conectados, não alucina, responde de suas informações reais ou aumenta quando é incerto.

Auto-entrega para humanos

Quando a IA não consegue resolver uma pergunta, detecta frustração ou o cliente pede por um humano, automaticamente entrega para sua equipe com contexto de conversação completo.

AI treinando prompts

Escreva instruções separadas para IA voltadas para o cliente e AI voltada para o administrador.

História e auditoria da IA

Cada conversa de IA é registrada com detalhes completos de solicitação/resposta, uso de fichas, rastreamento de custos, provedor usado e versão modelo.

Intuições de IA

Análise automatizada de padrões de conversação com IA, veja perguntas comuns, taxas de resolução, frequência de transferência, satisfação do cliente por tópico e áreas onde a IA precisa de melhor treinamento.

Configuração de IA por espaço de trabalho

Cada site/espaço de trabalho conectado pode usar seu próprio fornecedor de IA, modelo, temperatura, orçamento de fichas e instruções de treinamento.

AI gerenciada e BYOK

Dois modos AI: IA gerenciada (incluída em seu plano, não API A chave é necessária, ou traga sua própria chave. OpenAI/Anthropic/Google/xAI API Ambos são de primeira classe, cada recurso funciona com qualquer modo.

Al orçamentos de fichas e controles de custos

Definir orçamentos mensais, limites de conversação e alertas de baixo equilíbrio, rastrear gastos por provedor, por espaço de trabalho e por conversação, evitar custos com tetos rígidos.

Bilhetes e serviço de ajuda

Sistema de bilhetes nativos

Serviço completo de ajuda com departamentos, prioridades (baixa/média/alta/urgente), status, rastreamento SLA, notas internas, respostas ao cliente, anexos de arquivos e conversas sem necessidade de assistência externa.

Triagem de IA e resposta automática

A IA triplica automaticamente os tickets de entrada por departamento e prioridade, habilita a resposta automática para departamentos seguros, o IA rascunha e envia uma resposta após um atraso configurável (padrão: 2 minutos) para que os humanos possam intervir primeiro.

E-mail ingestão

Ligue uma caixa de correio (Gmail, IMAP, ou fornecedor específico) para criar automaticamente tickets a partir de e-mails enviados.

Portal de ingressos incorporado.

Os clientes podem enviar ingressos, ver seu histórico, responder a tickets abertos e verificar o status, todos marcados com seu design.

Passagem fundida

Mesclar ingressos duplicados em um único tópico, os ingressos mesclados mostram na linha de assunto, todo o histórico de conversa está preservado no ingresso sobrevivente.

Volte para a IA.

Depois que um agente humano assumir o ingresso, use "Retorne à IA" para deixar a IA retornar a resposta automática nessa passagem.

Copiloto de entrada.

O co-piloto sugere respostas, resume o histórico de conversação, recomenda atribuições de prioridade/departamento e pode executar ações em plataformas conectadas.

Conversa e apoio em tempo real.

Conversar com a caixa de entrada.

Conversa de clientes em tempo real gerenciada por uma caixa de entrada unificada, veja todas as conversas ativas, identidade do cliente, histórico de conversa e sugestões de IA, vários agentes podem colaborar em uma conversa.

Regras de bate-papo proativo

Mensagens de bate-papo baseadas no comportamento do visitante: tempo na página, específico URL Exemplo: mostrar uma mensagem de ajuda depois de 60 segundos na página de preços.

Widget de bate-papo

Um widget de chat personalizado incorporado em seu site, suporta bate-papo com IA, chat com agente ao vivo, submissão de tickets, busca na base de conhecimento e identidade do visitante.

Pesquisa da CSAT

Colete avaliações de satisfação após bate-papo e interações de ingressos, projete pesquisas com suas próprias perguntas, escalas de classificação e avisos de acompanhamento.

Pesquisa de e-mail pós-conversa

Depois que um bate-papo termina, visitantes com um e-mail conhecido podem receber uma mensagem marcada com um resumo de IA do que foi tratado e um clique "Foi fácil?" Sim/Não. Uma vez por linha, links assinados para uso único, cada envio registrado, e o resultado cai na página de Feedback como seu próprio sinal ao lado das estrelas no chat.

Release de identidade.

Cada item de feedback que carrega uma pessoa mostra-lhes: nome, e-mail, um clique para a sua jornada completa do cliente e contato CRM, e um clique Email ou Al-draft respostas fundamentadas em seu histórico real.

Escrevendo "AI"

Assistente de redação de IA para compor rascunhos de e-mail, respostas de tickets, anúncios e comunicações com clientes.

Primeiro CRM da IA

Centro de Comando CRM

Uma única tela mostrando todo o seu estado de CRM: valor do pipeline, velocidade do negócio, próximas tarefas, negócios em risco, atividade do agente e recomendações de IA.

Contatos e empresas

Gerencie contatos com clientes com perfis completos: nome, e-mail, telefone, empresa, etiquetas, ciclo de vida, histórico de conversação, histórico do ticket, histórico da compra e campos personalizados.

Acordos e oleodutos

Visual Kanban, com palcos personalizáveis, arrastando negócios entre estágios, valores definidos, proprietários, rastreie datas próximas e veja o valor do pipeline em cada estágio.

AI negócio treinador

A IA analisa cada negócio e fornece treinamento: sinais de risco (se foi silencioso, o concorrente mencionou, preocupações orçamentárias), recomendações de próxima melhor ação, probabilidade de vitória, e sugestão de tempo de seguimento.

Previsão e relatórios

Previsão de receitas baseada em dados de oleoduto, taxas próximas históricas e velocidade do negócio.

Agente de Perspectiva (SDR)

Prospecção com tecnologia de inteligência que identifica potenciais clientes de seus dados de visitantes, sinais de chumbo e atividade da plataforma conectada sugere alvos de alcance, rascunhos de mensagens iniciais e qualidade de liderança.

Sequências de seguimento

Sequências automáticas de acompanhamento multi-passo: e-mail, espera, e-mails, verificação da resposta, aumento.

Ciclo de vida e retenção

Acompanhe os estágios do ciclo de vida do cliente (leader, prospect, cliente, churned) com transições automatizadas.

Agente responsável pelos dados.

Agente de IA que limpa e enriquece continuamente seus dados de CRM: deduplica contatos, preenche campos desaparecidos, valida e-mails, padroniza nomes das empresas e sinaliza registros obsoletos.

Construa meu CRM

Configuração de CRM em linguagem natural: diga à IA como é seu processo de vendas e constrói suas etapas de oleoduto, campos personalizados, modelos de negócio e regras de automação.

Controle de saúde do CRM

Auditoria automatizada da qualidade dos dados do CRM: contatos duplicados, acordos sem próximos passos, oleodutos obsoletos, informações de contato ausentes e pontuação de completude de dados.

Confiança em Dial

Controle de autonomia de três níveis para cada agente de IA CRM: piloto automático (AI atua independentemente), copiloto (AI sugere, humano aprova) e manual (AI observa apenas).

Quatro agentes de IA.

O CRM executa quatro agentes especializados em IA: Steward (qualidade de dados), SDR (prospecção), Retenção (prevenção de churn) e Analista (relatórios e insights).

Conectores e integrações

Conectores pré-construídos.

Conectores prontos para usar.Shopify, WooCommerce, BigCommerce, Magento2, PrestaShop, OpenCart, OsCommerce,WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Postmark, Reenviar, SendGrid, Mailgun,Gmail, IMAP, SlackCada conector traz ações específicas de IA, conhecimento e sincronização de dados.

Construtor de Conectores

Construir conectores personalizados para qualquer plataforma, nenhum código, AI-assisted, ou código completo. O construtor suporta REST e GraphQL APIs, OAuth fluxo de código de autorização, webhook auto-registo com Stripe e esquemas de assinatura simples, paginação (offset, página, cursor, e link-header), list/error transforma, contexto multi-ação, e embalagem mercado.

Autor de conectores assistidos por IA

O ConnectorBuilderAI ajuda a construir conectores: descrever o que você quer e sugere ações, escrever manipuladores de pedidos e mapas API respostas.

OAuth fluxo para qualquer conector.

In-app genérico.OAuth Suporte PKCE, gerenciamento de estado localizado, atualização automática do token.OAuth parâmetros e OpsIQ Lida com o fluxo.

Autocarros de capacidade (extensão em plataforma)

Os conectores não apenas adicionam ações de plataforma, eles podem alimentar recursos centrais através da capacidade "buses". Um conector declara uma capacidade (calendar, enriquecimento, escrivaninha em CRM; lista_local, rank_data em Inteligência do Site; web_analytics em Analytics; payment_provider em Pagamentos; email_sync em Mailbox; video_meeting em Comunicações) e implementa seu pequeno conjunto de métodos; OpsIQ descobre-o através de Capability Registry e o liga à UI, ao Cliente 360 Vários conectores podem oferecer a mesma capacidade sem bloqueio.

Pré-instalado vs nível de mercado

Conectores pré-instalados (conectores/) são ativos no registro fora da caixa, mantidos inclinados para apenas a referência sem chave e o provedor mais usado por capacidade (por exemplo, Google Calendar, Gmail, Google Business Profile). Conetores de mercado (conectores_mercado /) são detectáveis mas inertes até serem instalados, por exemplo, Microsoft 365 Calendário, Outlook, DocuSign, Stripe, GA4, SerpApi, Zoom. Cada ponte tem uma lista de mercado para que a UI e a IA possam alertar "instalar do marketplace" (notificar para instalação) quando uma capacidade não tiver um provedor pronto, nunca quebrado.

Mercado de conexões

Publique seus conectores para o OpsIQ Conectores de pacotes com perfil.json, conhecimento.json, taxas de fluxo de trabalho.json Marketplace suporta conectores pagos e gratuitos com faturamento multi-fonte.

Conector, assinando.

Todos os conectores são criptograficamente assinados para verificação de integridade.

SmartLookup

Define regras de busca. OpsIQ Esquema: find_country("germ") combina com a Alemanha. 88.9% Confiança.

Contratos de ação

O General.OpsIQ APIpublica todos os registros.JSONUse meta-ações para os contratos ao vivo e exatos digitados, pacotes de conectores declaram suas próprias ações através do executivo unificado.

Receitas do conector

Receitas de fluxo de trabalho pré-construídas que combinam múltiplas ações de conectores em fluxos de trabalho comuns. Exemplo: "Quando uma nova ordem vem em Shopify, criar um ticket, atualizar o CRM, e enviar uma notificação Slack."

Sincronização do conhecimento

Os conectores declaram tópicos de conhecimento que sincronizam com a base de conhecimentos da IA, artigos de ajuda específicos para plataformas, guias de configuração e etapas de solução de problemas estão automaticamente disponíveis para a IA sem entrada de conhecimento manual.

Plataforma de desenvolvimento

RESTAURAÇÃO API

Um nome.JSON API cobre cada administrador registrado.JSON Operação, comAPI Autenticação chave, isolamento de espaço de trabalho, escopos, limitação de taxa, escrita idempotente, OpenAPI, e uma coleção gerada do Postman.

Webhooks

Entrega sincronizada via fila de trabalho, retentação exponencial, proteção SSRF, e auto-desativada depois 15 Falhas consecutivas.

Assinatura do Webhook

Todos os webhook de saída estão assinados com HMAC Verifique assinaturas na sua parte de recepção para garantir autenticidade do webhook.

WILD SDK

JavaScript SDK Instale receitas para React, Vue, Next.js, WordPress, Shopify, e estático HTML.

Plugins e SDKs

SDKs do lado do servidor e plugins para frameworks comuns. WordPress plugin, WHMCS módulo, e bibliotecas de integração PHP/Node.js genéricas.

Eventos API

Introduza eventos personalizados em OpsIQ de sua infra-estrutura: compras, inscrições, uso de recursos, erros ou qualquer evento comercial.

Ativa o livro de receitas.

Construir fluxos de trabalho automatizados desencadeados por eventos: novo ticket, conversa iniciada, visitante identificado, estágio do acordo alterado ou evento personalizado.

API Construtor

Visual. API Configure endpoints, pedidos de teste, inspecione respostas e integrações de depuração sem sair. OpsIQ.

Equipe e administração

Controle de acesso baseado em papéis.

Três papéis: Proprietário (acesso completo, faturamento, zona de perigo), Administrador completo (todas as operações exceto faturamento e zona de risco) e Agente (somente departamentos designados, sem acesso a configurações).

Painel de desempenho da equipe

Dona e painel completo só para administração mostrando tempo de resolução, distribuição de carga, profundidade do manuseio, quebra de canal, análise de tendência, conformidade com SLA, CSAT por agente, taxas de reabertura, rolagem de equipe e horas mais ocupadas.

Presença do administrador e rastreamento online

Um widget em tempo real na navegação do administrador, detecção de presença baseada no batimento cardíaco.60-segundo ping, 300-Segunda extensão, auto-prune depois 120 Veja quais administradores estão ativos e em quais páginas.

Por ajuste de espaço de trabalho

Cada site conectado (espaço de trabalho) pode ter sua própria configuração de IA, configurações de conectores, departamentos de tickets, branding e regras operacionais.

Gestão multi-site

Gerencie vários sites de um só. OpsIQ Cada site tem seu próprio trecho de rastreamento, dados do visitante e configuração.

Sistema de modelos de e-mail

Modelos de e-mail dirigidos por registro para todas as comunicações automatizadas: notificações de tickets, transcrições de chat, emails de boas vindas, resets de senhas e alertas do sistema. HTML Modelos com visualização ao vivo, chips variáveis.{{customer_name}}, {{ticket_id}}), e controle global de layout.

Importação e exportação

Importar contatos, ingressos e artigos de conhecimento de CSV/JSON Exportar dados de visitantes, relatórios de análise e registros de CRM.

Segurança, conformidade e operações.

Enterprise. SSO

OIDC (OpenID Connect) single sign-on com tempo de execução total: descoberta, autorização, retorno, verificação da assinatura JWKS, informações do usuário, lista de domínios, provisionamento de JIT e guardas de status. SAML Suporte de configuração.

GDPR e conformidade de dados

Embutida.DSAR(Requisito de Acesso ao Assunto de Dados) manipulação: exportar e excluir dados do cliente em todos os sistemas.CRM Registros e registros de e-mail, políticas de gerenciamento e retenção.

IP Bloqueando e proteção contra força bruta.

Bloqueio específico. IPs O bloqueio automático após as tentativas de login configuráveis falhou.IP, horário e agente de usuário.

HSTS e cabeçalhos de segurança

Segurança de Transporte Estrito HTTP, cabeçalhos de Permissões-Política e configuração segura de cookies.

Endurecimento do gancho de teia que sai

Guarda SSRF bloqueia webhooks para particular / metadados IP A entrega da Async impede que terminais lentos bloqueiem sua aplicação. 15 Falhas consecutivas evitam desperdício de recursos em terminais mortos.

Isolação do espaço de trabalho

O isolamento restrito de dados entre espaços de trabalho, visitantes, ingressos, bate-papos, registros de CRM e conversas com IA são explorados em seu espaço de trabalho.

Gestão de ciclo de faturamento

Apoio para ciclos mensais, trimestrais, semestrales, anuais, bienais e de faturamento vitalício.

Cron e automação programada.

Sistema de cronização integrado para tarefas programadas: geração de relatórios, limpeza de dados, renovação de assinaturas, atualizações de treinamento de IA, sincronia de conectores e retries de webhook.

Políticas de retenção de dados

Configure o tempo de sessões de visitantes, transcrições de chat, histórico de conversas com IA e registros de eventos são mantidos.

Diagnósticos e saúde

Painel de saúde do sistema mostrando status cron, conectividade com banco de dados, status do provedor de IA, taxa de entrega de conectores, e uso de armazenamento.

Quem? OpsIQ é para

Lojas de comércio eletrônico.

Lojas

Deixe que a IA responda "Onde está minha ordem?" usando o Live. Shopify/WooCommerce Gerencie tickets de suporte com resposta automática da IA, execute um oleoduto para vendas por atacado e B2B lidera, atribua receita a fontes de tráfego e campanhas, monitore o abandono do carrinho com fluxos de trabalho de recuperação.

SaaS e empresas de software

SaaS

Monitore as inscrições de julgamento e a adoção com o replay da sessão, rastreie quais páginas de documentação convertem, automatize suporte com IA ancorada em seu site. API Ligue sua plataforma de faturamento (Stripe, WHMCS Use o agente do ciclo de vida da CRM para detectar e prevenir churn.

Agências e freelancers

Agência

Ofereça análises e portais de suporte aos clientes, rastreie leads em vários sites de clientes de um administrador, use o pipeline CRM para gerenciar prospects e lead de projeto, crie conectores personalizados para plataformas de clientes usando o Connector Builder, gere relatórios de SEO com inteligência do site, revenda conectores de mercado como serviços de valor agregado.

Hospedagem e infraestrutura

Hospedagem

Profundidade WHMCS integração com 80+ AI ações para busca de ordem, gestão de serviços, DNS Resposta automática a perguntas comuns de hospedagem usando artigos de base de conhecimento, engajamento na página do servidor, gerenciamento de tickets de suporte técnico com triagem de IA, uso da escada de ciclo de faturamento para mensalidade através de planos de hospedagem vitalícia.

Negócios de apoio pesado

Suporte

Defletir. 40-70% Percorrer o desempenho da equipe com tempo de resolução, conformidade com o SLA e CSAT por agente, usar a redação de IA para elaboração de respostas profissionais, monitorar tendências de apoio com insights de IA.

Equipes de marketing e SEO

Marketing

Suíte de Inteligência do Site: rastreamentos, auditorias técnicas de SEO, análise de conteúdo, rastreamento de classificação SERP, pesquisa de palavras-chave, monitoramento de backlinks e grade local de SEO.

Fundadores solo e equipes pequenas

Iniciações.

Comece com apenas rastreamento e bate-papo, grátis para adicionar, depois adicione tickets quando receber o volume de suporte, ligue o CRM quando começar a vender, conecte plataformas enquanto as adota. OpsIQ escalas de uma pessoa fazendo tudo para um 50- Equipe de operações com RBAC, departamentos e rastreamento por agente.

Enterprise e multi-marcas.

Empresarial

Enterprise. SSO OIDC para autenticação centralizada, isolamento multi-espaço de trabalho para marcas ou divisões separadas, configuração de IA por espaço de trabalho com diferentes fornecedores e modelos, desenvolvimento de conectores personalizados com distribuição de mercado, trilhas de auditoria, GDPR Ferramentas de conformidade e políticas de retenção de dados.

O quê? OpsIQ Substituta

Google Analytics + Hotjar + Plausivel

Análise completa do site com monitoramento de visitantes, replay de sessão, rankings de páginas, geo inteligência, funil de intenção, atribuição de conversão, eventos, experimentos A/B, e rastreamento de erros JS, tudo em uma plataforma.

Intercomunicador + Drift + Tidio

Conversa com clientes com conhecimento, apoio de IA multifornecedor, transferência automática para humanos, regras proativas de chat, histórico de conversação, pesquisas da CSAT e criação de tickets do chat.

Zendesk + Freshdesk + Scout de ajuda

Sistema de tickets nativos com departamentos, prioridades, SLA, triagem IA, resposta automática com atraso configurável, ingestão de e-mail, incorporação de ticket, fusão de ticket. Copiloto de entrada e retorno à capacidade de IA.

HubSpot + Pipedrive + Salesforce

Primeiro CRM com quatro agentes especializados em IA (Steward, SDR, Retention, Analyst), Controle de autonomia do Trust Dial, placa de oleoduto, treinamento de negócios, previsão, sequências, gerenciamento de ciclo de vida e configuração de CRM de linguagem natural.

Ahrefs + SEMRush + Moz

Inteligência do site com rastreamentos automatizados, auditorias técnicas de SEO, análise de conteúdo, busca de IA, rastreamento de classificação SERP, pesquisa de palavras-chave, análise backlink, rede local de SEO e relatórios agendados.

Zapier + Make + middleware personalizado

Conector SDK com 25+ conectores pré-construídos, Conector Builder (sem código/AI assistido/código completo), OAuth Fluxo, auto-registro webhook, um grande catálogo de definições de ação de conectores que se tornam executáveis apenas quando o conector relevante é instalado, habilitado, configurado e validado, SmartLookup, marketplace e pacotes assinados.

Gerente de Perfil de Negócios do Google

Conector GBP completo: gerenciamento de revisão, pós-publicação, gestão de Q&A, uploads de fotos, sincronização de informações de negócios, rastreamento de insights e respostas de avaliação com inteligência artificial, tudo de dentro OpsIQ.

Ferramentas de e-mail separadas

Modelos de e-mail com editor visual, visualização ao vivo, chips variáveis, controle global de layout e personalização por evento para todas as comunicações automatizadas.

Painel de gerenciamento de equipe

Desempenho de equipe embutido: tempo de resolução, carga de trabalho, conformidade com SLA, CSAT por agente, taxas de reabertura, horas mais ocupadas, rastreamento em tempo real e avarias por departamento.

GDPR Ferramentas de conformidade

Nativo. DSAR Lidando, apagando dados em todos os sistemas, gerenciamento de consentimentos, políticas de retenção, e trilhas de auditoria, construídas na plataforma, não trancadas.

Duas edições

- Adiantado.

OpsIQ A operação do produto é a mesma, infraestrutura, atualizações e backups são gerenciados pelo operador de hospedagem.OpsIQ Tempo de execução em vez de fluxos de marketing ou contas comerciais.

Módulo auto-hospedado

Instalar OpsIQ em seu próprio servidor para controle total de dados, marcas, atualizações e integrações. 8.4+, MySQL 5.7+ ou MariaDB 10.3+, HTTPS, e o OpsIQ Cron unificado, apoio. WHMCS Integração como módulo addon, soberania de dados.

Ordem de leitura recomendada.

1
-Começo rápido.

Siga-me. 30- Guia de instalação de minutos para rastrear, conversar e IA básica trabalhando no seu site.

2
Painel e análise

Aprenda a ler os dados do visitante, configurar o replay da sessão, identificar leads e entender padrões de tráfego.

3
Inteligência do site

Faça seu primeiro rastreamento de SEO, verifique sua saúde técnica e configure o rastreamento da SERP para suas palavras-chave.

4
Bilhetes e suporte

Configure departamentos, configure resposta automática com IA, conecte a ingestão de e-mail e treine sua IA para lidar com perguntas comuns.

5
CRM

Organize contatos, construa seu oleoduto, configure os agentes de IA, ajuste os níveis de discagem de confiança e deixe que a IA treine seus negócios.

6
Conectores e ferramentas de desenvolvimento

Conecte sua plataforma de e-commerce/billing, construa conectores personalizados, configure webhooks e integre através do REST API.

💡
Novo para OpsIQ Comece com o guia de início rápido abaixo. 30 minutos.
Comece aqui.

Começar rápido. 30 minutos.

Siga estes passos para conseguir OpsIQ No final, você terá rastreamento de visitantes, bate-papo com IA e suporte básico a tickets.

Configuração
Lista de verificação de início rápidoUma lista de verificação guiada mostrando widget instalar, conexão plataforma, treinamento de IA, convite da equipe e ir ao vivo, com um 60 Barra de progresso por cento.Comecem.setupInstale o widget OpsIQFeitoConecte uma plataforma.WHMCS, Shopify...)FeitoTreine sua IA sobre seu conteúdo.FeitoConvide sua equipe.Verifique e vá ao vivo.Configurando o progresso3 de 5 · 60%1STEP 1Instale o widget2STEP 2Conectar a IA do trem3STEP 3Convide e vá ao vivo.
O 30-caminho de minutos: instale o widget, conecte uma plataforma, treine sua IA, convide a equipe e depois vá ao vivo.

O 30-Equipamento de minutos

1
Ative sua licença.

Digite sua chave de licença no administrador OpsIQ. Vá para Configurações, insira a chave de habilitação fornecida para esta instalação e clique em Ativar.

2
Defina sua identidade de negócio.

Vá para Configurações e preencha seu nome de empresa, indústria, fuso horário, moeda padrão e horas de suporte.

3
Escolha um fornecedor de IA.

Vá para a configuração da IA e selecione seu provedor.Anthropic), GPT-4o (OpenAI), Gemini (Google), ou Grok (xAI). API A chave se usar sua própria chave, ou usar IA gerenciada se estiver disponível em seu plano.

4
Instale o widget de rastreamento

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
Conecte sua plataforma.

Se você usar Shopify, WooCommerce, WHMCS, ou outra plataforma suportada, vá até Conectores, encontre sua plataforma, insira credenciais e clique em Test Connection.

6
Convide sua equipe.

Os agentes só podem acessar departamentos que você os designou.

O caminho mais rápido possível (5 minutos)

Passo 1: Instalar widget

Copie o trecho dos Sites Conectados e cole no seu site, isso te dá rastreamento imediatamente.

Passo 2Ativar IA

Vá para a configuração da IA, escolha um provedor, digite sua chave e salve.

Feito.

Agora você tem o rastreamento de visitantes e a conversa da IA.CRM, e conectores depois.

Dia. 2Fazê-lo útil

Adicione o conhecimento.

Vá para a Base de Conhecimento e adicione 5-10 A IA usa isso para responder aos clientes com precisão.

Criar departamentos

Vá para Tickets e crie pelo menos 2 Departamentos (por exemplo, "Vendas" e "Apoio").

Escreva seu alerta de IA.

Vá para o treinamento de IA e escreva um pedido de IA do cliente que descreve suas regras de negócios, tom e escalada.

Teste uma conversa.

Abra seu site em um navegador privado e converse com a IA como cliente, verifique se as respostas são precisas e o tom está certo.

Semana 1: Construir suas operações

Conectar e-mail

Prepare uma caixa de correio (Gmail, IMAP, ou um conector de provedor) assim os e-mails do cliente automaticamente criam ingressos.

Prepare a resposta automática.

Habilite a resposta automática de tickets para departamentos seguros. 2- para que os humanos possam intervir primeiro.

Análise de revisão

Veja a contagem de visitantes, taxa de rejeição, páginas de cima e vendas se o rastreamento estiver conectado.

Comece seu CRM.

Abra o CRM de IA e deixe OpsIQ Importar contatos de suas plataformas conectadas.

Mês 1Otimizar

Reveja a história da IA.

Procure respostas erradas, perguntas perdidas e oportunidades de adicionar conhecimento.

Adicione regras proativas.

Criar uma regra: se um visitante está na página de preços para 60+ segundos, mostre uma mensagem perguntando se precisam de ajuda.

Construa um conector.

Se você usar uma plataforma que não tenha um conector embutido, use o Conector Builder para criar uma.

Prepare os hooks.

Conectar OpsIQ para suas ferramentas internas usando webhooks de saída para eventos de ticket, bate-papo e vendas.

Posso pular a IA e usar o rastreamento?+

Sim, o fornecedor de IA é opcional. OpsIQ Você pode ativar a IA mais tarde quando estiver pronto.

Posso pular conectores e adicioná-los depois?+

Os conectores enriquecem a IA com dados específicos da plataforma, mas... OpsIQ Comece com rastreamento e bate-papo, depois conecte plataformas quando necessário.

E se eu ainda não tiver um site?+

Você ainda pode usar OpsIQ para tickets, CRM e colaboração de equipe.

Como sei se o widget está instalado corretamente?+

Visite seu site em um navegador privado/incógnito. OpsIQ Você deveria ver sua visita aparecer dentro de uma sala. 15 Se não, verifique:1É o trecho colado corretamente, (2) é a chave do site correta, (3) são bloqueadores de publicidade ou cabeçalhos CSP bloqueando o script.

Comece aqui.

Mapa completo do produto

OpsIQ É um administrador de operador, um widget do site, uma camada de suporte de IA, um sistema de tickets/helpdesk, um CRM completo com quatro agentes de IA... uma suíte de Inteligência do Site, uma plataforma de conectores com mercado e uma superfície de desenvolvedor.

Operadora de administração

Painel, alimentação ao vivo, registro de visitantes, sessões, replay de sessão, páginas superiores, geo inteligência, funil intenção, log de eventos, experimentos A/B, rastreamento de erros JS, vendas e conversões, leads, CRM AI (centro de comando, contatos, empresas, ofertas, conselho de pipeline, coaching de negócios, previsão, prospecção, sequências, ciclo de vida, administrador de dados, Construir meu CRM, CRM config, CRM saúde, CRM API), tickets, chat inbox, regras proativas, pesquisas CSAT, rascunhos de email, caixas de correio, configuração IA, treinamento de IA, histórico de IAs, insights de IA. base de conhecimento, conectores, Connector Builder, marketplace, sites conectados, gerenciamento de equipe, desempenho da equipe, configurações, diagnósticos e licença.

Superfícies voltadas para o cliente

Site de rastreamento widget (analytics beacon + chat + ticket incorpor + pesquisa base de conhecimento), cliente bate-papo IA, portal de submissão de tickets, manipulação de fichas de identidade do visitante, uploads de arquivos, widget de pesquisa CSAT, e centro de ajuda voltado para o cliente.

Primeiro CRM da IA

Centro de comando, contatos, empresas, acordos, placa de oleoduto com arrastar e soltar, coaching de acordo com IA (sinais de risco, próxima melhor ação, probabilidade de vitória), previsão de receita, agente prospector (SDR), sequências de acompanhamento automatizadas, ciclo de vida e gerenciamento de retenção, agente responsável por dados (dedup, enriquecer, validar), Construir meu CRM (configuração da linguagem natural), configuração do CRM, verificação de saúde CRM, discagem confiável (Autopilot/Copilot /Manual por agente), quatro agentes especializados (Steward, SDR, Retention, Analyst) e CRM API com webhooks.

Suíte de Inteligência do Site

Site automatizado rasteja, auditoria técnica SEO (velocidade, celular, Vitais da Web Core, SSL, redirecionamentos, dados estruturados), auditoria de conteúdo (contagem de palavras, legibilidade, densidade de palavra-chave, estrutura de cabeçalho), pesquisa semântica com IA, rastreamento de classificação SERP entre motores, pesquisa de palavras-chave com pontuação de oportunidade, análise de backlink e monitoramento, visualização local da rede SEO, sincronização do perfil de negócios do Google (reviews, posts, Q&A, fotos, insights), relatórios agendados (diário/semanal/mensal) e white-label PDF Produção para agências.

AI e automação

Claude, GPT-4o, Gemini, Grok), administrador assistente de IA, conhecimento AI aterramento, auto-handoff com configurável reversão, por espaço de trabalho configuração de IA , gerenciado IA e BYOK Modos, orçamentos de fichas e controles de custos, histórico de IA trilha de auditoria, análise de insights de IA, triagem de IA de ticket, auto-resposta do bilhete com atraso, escrevendo IA (prompt separado), e co-piloto da caixa de entrada administrador.

Conectores e integrações

25+ conectores pré-construídos (Shopify, WooCommerce, BigCommerce, Magento2, PrestaShop, OpenCart, OsCommerce, WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Postmark, Reenviar, SendGrid, Mailgun, Gmail, IMAP, Slack, Google Business Profile), Conector Builder (sem código/AI-assistido/código completo), genérico OAuth Fluxo com PKCE, mercado de conectores com distribuição paga, assinatura e verificação de conector, combinação fuzzy SmartLookup, um grande catálogo de definições de ação HTTP cuja disponibilidade depende da instalação do conector, habilitação, configuração e validação, sincronização de conhecimento e receitas de fluxo de trabalho.

Plataforma de desenvolvimento

RESTAURAÇÃOAPI(visitantes, eventos, ingressos, contatos, configurações, conectores), OpenAPI spec,API Gestão de chaves, webhooks encadernados (sincronia, auto-desativação), EventosAPI para ingestão de eventos personalizados, widget SDKcom resolução de identidade, gatilhos livro de receitas, contratos de ação, conector SDK, embalagem de mercado, servidor-side SDKs (PHP, Node.js), WordPress plugin, e WHMCS Módulo.

Configurações e operações

Identidade comercial, configuração de IA por espaço de trabalho, configurações de rastreamento, segurança (HSTS, Permissões-Política, IP Bloqueamento, proteção contra força bruta), RBAC (Proprietário/Admin/Agente Total), gerenciamento de equipe e convites, painel de desempenho da equipe, monitoramento de presença do administrador, sistema de modelos de email (inscritor, editor visual, chips variáveis), designer de pesquisa, conhecimento de domínio, configuração de incorporação de tickets, branding, políticas de retenção de dados, gerenciamento de ciclo de faturamento (mês após a vida), normalização monetária, importação/exportação, diagnósticos, automação de Cron e zona de perigo.

Segurança e conformidade.

Enterprise. SSO (OIDC com verificação JWKS, provisionamento JIT) SAML configuração, GDPR/DSAR manipulação (exportação e exclusão em todos os sistemas), apagamento de dados por contato, gerenciamento de consentimentos, isolamento do espaço de trabalho (escopeamento restrito da camada de consulta), trilhas de auditoria, falha no rastreamento de login, IP Bloqueio, proteção SSRF da web e políticas de retenção de dados.

Ponte do provedor.

A IA gerenciada proximou OpsIQ provedor URL, Ligação do provedor de Inteligência do Site, validação de licença, relatórios de saúde, PDF renderização, e exportações de dados, todos encaminhados através do terminal de provedor configurado, não fornecedor direto API Chamadas do seu servidor.

Cada página de administração

Painel de controle

Núcleo

Centro de Comando Diário: visão geral do tráfego, contagem de visitantes ao vivo, resumo de vendas, profundidade da fila de suporte, alertas de atividade de IA e atalhos de ação rápida.

- Alimento ao vivo.

-Esquecimento.

stream de visitantes em tempo real: visualizações de página, início de conversa, submissão de formulários e sinais de intenção atualizando a cada segundo com filtros de país, dispositivo e referência.

Diário de visitas

-Esquecimento.

Registros completos de visitas: dispositivo, navegador, SO, país, cidade, referência, params UTM, landing page, identidade e histórico completo de visualização de páginas.

Sessões

-Esquecimento.

Visão agrupada: fluxo de página, tempo na página, profundidade do rolagem, caminho de conversão e página de saída para cada sessão de visitantes.

Reprodução de sessão

-Esquecimento.

Reproduções de eventos capturados: movimento do mouse, cliques, pergaminhos, transições de páginas e interações de forma para o diagnóstico de UX.

Páginas de cima.

-Esquecimento.

Ranking de desempenho da página: visitas, tempo de engajamento, taxa de rejeição, conversões, interações de suporte e direção de tendência.

Geo-inteligência

-Esquecimento.

Relatórios geográficos: quebra de país/cidade com mapas, distribuição de dispositivos, compartilhamento de navegadores, fontes de tráfego e penetração no mercado.

Funil de intenção

-Esquecimento.

Rastreamento de intenção comportamental: preços, frequência de retorno, navegação por documentos, interações de suporte e sinais personalizados com probabilidade de conversão.

Diário de eventos

-Esquecimento.

Histórico de eventos pesquisáveis: visualizações de página, eventos personalizados, chats, compras, submissão de formulários com metadados completos e filtragem.

Experiências A/B

-Esquecimento.

Testes divididos: criar variantes, alocar tráfego, definir objetivos, medir significado e declarar vencedores, todos de dentro OpsIQ.

Erros JS

-Esquecimento.

Captura de erro da Frontend: mensagens, traços de pilha, navegadores afetados, frequência, páginas afetadas e rastreamento de tendências.

Vendas

Vendas

Painel de receitas: pedidos, renovações, reembolsos, atribuição por fonte, desempenho da campanha, comparação do período e análise de tendência.

Chumbo

Vendas

Gestão principal: pontuação, atribuição de fonte, status de CRM, detalhes de contato, sinais comportamentais e roteamento de tubulação.

AI CRM

CRM

Cheio.CRM Centro de comando, contatos, empresas, acordos, oleodutos, treinamento, previsão, prospecção, sequências, ciclo de vida, administrador de dados e saúde.

Bilhetes

Suporte

Suporte de entrada: departamentos, prioridades, rastreamento SLA, triagem de IA, resposta automática, notas internas, anexos de arquivos, fusão e gerenciamento de status.

Conversar com a caixa de entrada.

Suporte

Conversas ao vivo: IA e conversa humana, entrega, colaboração, histórico de conversação, identidade do cliente, e coleção CSAT.

Rascunhos de e-mail

Suporte

Gerenciamento de e-mail: entrada de correio para tickets, composição de resposta assistida por IA, seleção de modelos e configuração da caixa postal.

Configuração da IA

IA

Configuração do provedor: selecione Claude/GPT-4o/Gemini Grok, entre. API Chave ou habilitar IA gerenciada, modelo, temperatura e orçamentos de fichas por espaço de trabalho.

AI treinamento

IA

Autora imediata: avisos voltados para o cliente e para o administrador, regras de escalada, diretrizes de tom, tópicos proibidos e configuração de limites.

AI história

IA

Auditoria de conversação: registros completos de pedido/resposta, uso de fichas, custo por conversa, provedor, versão do modelo e resultado da resolução.

Intuições de IA

IA

Análise de padrões: perguntas comuns, taxas de resolução, frequência de transferência, satisfação por tópico e identificação de gap de treinamento.

Base de conhecimento

IA

Conteúdo de treinamento de IA: artigos, entradas de FAQ, documentos de produtos, conhecimento de conectores e entradas personalizadas.

Conectores

Integrações

Centro de integração: conectores instalados, estado de saúde, inventário de ação, gerenciamento de credenciais, navegador de mercado e Connector Builder.

Sites conectados

Configurações

Gerenciamento de site: rastreamento de trechos, chave de site, configuração de widgets, configurações de domínio e isolamento por local de trabalho.

Equipe

Configurações

Gestão de usuários: convidar membros, atribuir papéis (Proprietário/Admin./Agente completo), definir o acesso do departamento e gerenciar permissões.

Desempenho em equipe

Configurações

Metricas de operações: tempo de resolução, carga de trabalho, conformidade com o SLA, CSAT por agente, taxas de reabertura, horas mais ocupadas e análise de tendência.

Configurações

Configurações

Configuração: identidade de negócios, instalação de IA, rastreamento, segurança, marca, retenção, modelos de e-mail, faturamento, importação/exportação, diagnósticos e zona de perigo.

Licença

Configurações

Gerenciamento de planos: status da licença, características do plano, métricas de uso, data de renovação e opções de atualização/downgrade.

Comece aqui.

Guiado a bordo

A jornada de integração transforma uma nova instalação em um trabalho. OpsIQ espaço de trabalho e pode ser deixado e retomado sem perder o progresso.

Tela de produto
A bordo.A bordo mostra cada área de configuração, seu estado atual e a próxima ação a ser completada.A bordo.Espaço de trabalhoPROGRESS60%COMPLETED6PróximoWidgetOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOLicençaValidar a licença do produtoFeito.AI provedorSelecione provedor e chave de testeFeito.MarcaIdentidade de negócios e tomFeito.SiteAdicione site e instale widgetPróxima1COMPLETE BASICSLicença, marca, IA2CONNECT DATALocal e conector3VERIFY LAUNCHEquipe, e-mail, cheques
A bordo mostra cada área de configuração, seu estado atual e a próxima ação a ser completada.

Sequência recomendada

  1. Licença: Valide a licença e confirme que o espaço de trabalho está ativo.
  2. AI provedor: Escolha o provedor/modelo, insira credenciais e execute o teste de conexão.
  3. Identidade comercial: definir o nome, indústria, descrição, tom de cliente e detalhes da marca usados pelo widget e IA.
  4. Conector: habilitar pelo menos uma plataforma externa quando OpsIQ precisa de pedidos, clientes, tickets, e-mail ou outro contexto da plataforma.
  5. Site e widget: Criar o local/espaço de trabalho, copiar a chave do site e verificar uma visita privada-browser em Live Feed.
  6. Equipe e roteamento: Convide administradores/agentes, crie departamentos, defina o encaminhamento de e-mails e confirme as preferências de notificação.
  7. - Cheques ao vivo: Teste de bate-papo, um ticket, sincronia de conectores, cron, e-mail de saída, webhooks e cabeçalhos de segurança.

A viagem armazena a conclusão por espaço de trabalho, retornar ao Onboarding deve mostrar passos completos em vez de forçar um reinício.

Comece aqui.

Navegação e permissões da administração

O OpsIQ Este mapa explica onde cada área operacional vive e porque uma página pode não ser visível para cada administrador.

Tela de produto
OpsIQ navegaçãoOs grupos da barra lateral. OpsIQ por área de trabalho, links individuais aparecem apenas quando o papel atual pode usá-los.OpsIQ navegaçãoEspaço de trabalhoGROUPS8PÁGINASPermissão baseada.SEARCHDisponívelOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOSuporteBilhetes, e-mail, CSAT, conhecimentoAbra.CRMContatos, oleodutos, acordos, prospecçãoAbra.AutomatizaçãoFluxos de trabalho, regras, objetivosAbra.Segurança e PrivacidadeVisão geral, auditoria, consentimento, bloqueiosAdmin.1PICK A GROUPCombinar a barra lateral2CHECK ROLEEscondida significa restrita3USE PAGE HELPAbra a seção correspondente.
Os grupos da barra lateral. OpsIQ por área de trabalho, links individuais aparecem apenas quando o papel atual pode usá-los.
Suporte

Bilhetes, a plataforma de email da equipe, CSAT, a Central de Ajuda e o Chatbot flui.

CRM

As superfícies de vendas diárias: CRM Home, Centro de Comando, contatos, oleoduto, previsão, ciclo de vida, prospecção, segmentos, leaderboard, aprovações de acordo, data steward, ferramentas de crescimento e o fluxo de atividade.

Automatização

Fluxos de trabalho orientados para eventos, regras do ciclo de vida e metas de conversão.

Marketing

Expansão, mensagens proativas, anúncios, Estúdio de Promoção, Estúdio Pesquisa, campanhas de impulso e visitas guiadas.

-Esquecimento.

Reporte as superfícies primeiro - Analytics Hub, Insights de IA, vendas, clientes, leads, funils, testes A/B, replay de sessão, painéis personalizados e relatórios agendados - com os registros de visitantes brutos, sessões, páginas, geografia e eventos em uma sub-seção de dados crus.

Páginas autônomas

Inteligência do site, desempenho da equipe e feedback sentam-se fora dos grupos como entradas diretas.

Integrações

Conectores, ações e gatilhos, caixas de correio, rascunhos, configurações de email, terminais de entrada, webhooks de saída e chaves API.

Segurança e Privacidade

Visão geral da segurança, privacidade e conformidade, consentimento de cookies, atividade de auditoria, logins fracassados, bloqueados IPs e JavaScript Erros.

Configurações

Noções básicas do espaço de trabalho (geral, equipe, sites, idiomas), então sub-seções que se colapsam: AI Brain (instruções, configuração, avaliação, história), CRM Setup (construtor, campos personalizados, pontuação de chumbo, saúde), Data & Health (diagnóstico, exportação) e Geting Begined (onboarding, help).

Páginas que um papel não pode abrir estão escondidas na barra lateral. Atualização Etiquete e abra uma tela de atualização no aplicativo.

Esconder um link lateral não é o limite de segurança, toda ação protegida deve passar por sua permissão e verificação do espaço de trabalho.

-Esquecimento.

- Centro de análise.

O centro de análise traz suporte, bate-papo, IA, visitante e agente reportando em um local de trabalho filtrado com resultados exportáveis.

Tela de produto
- Centro de análise.O Hub do Analytics mostra um intervalo de datas, cartões métricos e guias para suporte, bate-papo, IA, visitante e agente.- Centro de análise.Espaço de trabalhoCITKETS184AI RESOLVE63%CSAT4.7OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOSuporteCriado, fechado, pendente, SLATab.ConversarAL/humano resultados e lidar com o tempoTab.IAConfiança, feedback, uso de fichas.Tab.Agente.Volume, velocidade e satisfaçãoTab.1CHOOSE DATESPredefinido ou personalizado2CHANGE TABApoio ao Agente.3EXPORTBaixe CSV
O Hub do Analytics mostra um intervalo de datas, cartões métricos e guias para suporte, bate-papo, IA, visitante e agente.

Filtros e controles.

  • Use um ajuste ou um costume de/para Alcance, então refresque para reconstruir cada carta e gráfico para o mesmo período.
  • Exportação CSV Exporta a visão analítica ativa ao invés de uma imagem.
  • A varredura do espaço de trabalho é automática, mudar os locais muda o conjunto de dados.

O que cada tabulação mede

  • Apoio: tickets criados/fechados/pendentes, primeira resposta, resolução, resoluções de primeiro contato, SLA e detalhamentos de prioridade/departamento/status.
  • Conversar: As sessões começaram, resoluções de IA, escaladas, abandono, tempo de manuseio, mensagens por sessão, e IA/humana/todos os CSAT.
  • AI: confiança média, baixa taxa de confiança, precisão da triagem, feedback, desvio do conhecimento, uso de token/cache, e os itens que precisam ser revisados.
  • Visitante: Tendências de tráfego e engajamento para o período selecionado.
  • -Agente: carga de trabalho per-agente, velocidade, fechamento e medidas de satisfação.

Use o Centro de Análise para revisão entre equipes, use as páginas dedicadas Visitantes, Bilhetes, CSAT, História da IA e Desempenho em Equipe quando precisar de investigação.

-Esquecimento.

O Painel

O Dashboard é seu centro de comando diário, mostra tráfego, vendas, carga de suporte, atividade de IA e indicadores de conversão em uma visão.

Painel de controle
Painel de visão geralA tela de visão geral liderada por OpsIQ Painel de inteligência IA (com resumo diário, alertas inteligentes, previsão), peças de widget KPI e um widget de tráfego de sete dias, além de um controle de layout reset.Visão geralEspaço de trabalhoOPSIQ INTELIGÊNCIAEscolha uma análise e OpsIQ escreve.Um resumo diário.Alertas inteligentes.PrevisãoRedefinir o layoutVISITAS HOJE2,481+12%RECEITAS$8.2k+5%ABERTAS AS VITAS143 SLATráfego por último. 7 dias1AI-FIRSTOpsIQ Painel de Inteligência.2WIDGETS- O que você está fazendo?3SeuReset layout a qualquer hora
A verdadeira tela de visão geral: OpsIQ Painel de inteligência em cima (escolha uma análise e ela escreve) acima dos widgets KPI você se organiza.

Cartas de bordo explicadas.

Visitantes ao vivo

O número de pessoas no seu site agora. 15 Um visitante é "ativo" se carregar uma página dentro do limite ativo (padrão: 90 segundos).

Visitantes únicos.

Quantas pessoas diferentes visitaram seu site na faixa de datas selecionada. OpsIQ identifica visitantes por uma combinação de impressão digital do navegador, cookies e identidade autenticada (se disponível).

Novo vs retorno

Os visitantes que retornam já foram vistos antes, uma alta proporção de retorno significa que seu conteúdo traz as pessoas de volta, uma taxa muito baixa de retorno pode significar que você não está mantendo o interesse.

Taxa de salto

A porcentagem de visitantes que saíram após ver apenas uma página, uma taxa de rejeição acima de 70% nas landing pages geralmente significa que a página não está atendendo as expectativas dos visitantes, conteúdo errado, carga lenta ou má experiência móvel.

Tempo médio na página

Quanto tempo os visitantes gastam em cada página, em média. 10"Segmentos" nas páginas de conteúdo sugerem que o conteúdo não está se envolvendo.

Ameaças bloqueadas.

IPendereços que OpsIQ Identificou-se como potencialmente malicioso com base em ameaças, tentativas brutas de força ou blocos manuais. IPs Lista.

Vendas hoje / esta semana / este mês

Receita de fontes de vendas conectadas (Shopify, WooCommerce, StripeSe as vendas mostrarem zero, verifique se o conector da plataforma está conectado e sincronizado.

Gráfico de tendências

Um gráfico mostrando a contagem de visitantes ao longo da faixa de datas selecionada.

Fontes de topo.

De onde seus visitantes vêm: direto, Google, redes sociais, campanhas de e-mail, sites de referência.

Navegadores de topo.

Chrome, Safari, Firefox, Edge e outros. CSS ou JavaScript Problema de compatibilidade.

Mapa de calor por hora

Uma grade mostrando atividade de visitante por hora do dia e dia da semana.

Visitantes recentes

Os últimos visitantes com país, página, dispositivo e fonte... úteis para verificações rápidas durante as campanhas.

Usando o filtro de data

Clique no seletor de data na parte superior direita do Painel. Predefinições: Hoje, Ontem, Último 7 dias, Últimos 30 Todos os cartões e gráficos do painel são atualizados quando você altera o intervalo. O intervalo de datas está no seu fuso horário configurado (definido em Configurações).

- Sim.

Investigação de picos de velocidade.

Cenário:
Sua taxa de rejeição saltou de 45% para 78% O que aconteceu?
O que fazer:

Cheque: (1) Vá para o Top Pages e ordene por taxa de rejeição. (2) Uma campanha enviou tráfego para a página errada? (3) O site quebrou no celular? (4) Cheque o contador de ameaças e os detalhes dos visitantes para achar padrões suspeitos.

Zero visitantes no painel de controle.

Cenário:
O painel mostra 0 Visitantes ao vivo, mesmo que seu site esteja recebendo tráfego.
O que fazer:

Cheque: (1) Veja o código fonte do seu site e procure pelo OpsIQ Roteiro. (2) Compare a chave do site com a chave dos sites conectados. (3) Um CDN ou um cache servindo uma página sem o roteiro? (4) Um bloqueador de anúncios ou cabeçalho CSP bloqueando o script?

Lendo o mapa de calor horário

Cenário:
Seu mapa de calor mostra atividade intensa entre 10h e 2h nos dias de semana, mas nada nos fins de semana.
O que fazer:

Este é um padrão de tráfego B2B, seus visitantes estão trabalhando profissionais navegando durante o horário comercial: (1) Agende pessoal de apoio para o horário de trabalho. (2) Envie campanhas de e-mail terça-feira de manhã. (3) As janelas de manutenção do fim de semana estão seguras. (4) Considere oferecer conversa ao vivo apenas durante o horário de pico.

O trânsito está vindo de uma fonte desconhecida.

Cenário:
Você vê um súbito pico de 500 Visitantes em uma hora de uma referência desconhecida.
O que fazer:

Vá até os Visitantes e filtre pela janela de tempo: (1) Veja a duração da sessão, páginas vistas e diversidade de navegadores. (2) Se for real, em que página eles estão pousando? (3) Verifique o remetente URLAlguém pode ter ligado a você de Reddit, Hacker News ou um blog popular. (4) Se for tráfego de bots, verifique ameaças e considere bloquear o IP Alcance.

Por que meu visitante conta diferente de Google Analytics?+

OpsIQ Ele usa impressões digitais do navegador e cookies, enquanto GA usa um modelo de cookie diferente. 10-20% A variância está normal.

Posso colocar o painel em outra ferramenta?+

O painel foi projetado para o OpsIQ Para relatórios externos, use o REST. API para puxar dados de análise e exibi-lo em seu próprio painel ou ferramenta BI.

O que significa o contador de ameaças?+

Conta. IP endereços que OpsIQ Ele marcou ou bloqueou com base na pontuação de ameaça, logins falhando repetidos, ou blocos manuais.

-Esquecimento.

Diário de visitas

O registro de visitas mostra cada visita aos sites rastreados, cada linha é uma página carregada por um visitante, para investigar o comportamento individual do visitante, encontrar tráfego na campanha e diagnosticar problemas de rastreamento.

Diário de visitas
Diário de visitasUma mesa de visitantes com uma barra de filtro (data, busca)IP/email/cidade, fonte, dispositivo) e colunas para IP E-mail, localização, fonte, dispositivo e tempo, com uma linha de ameaça marcada.Diário de visitasyoursite.com7 diasProcure. IP, e-mail, cidade...Fonte▾Dispositivo▾IP/ EMAILLOCALIZAÇÃOFONTEDISCURSOQUANDO[email protected]EUA · Nova YorkgoogleÁrea de trabalho2m41.62.10.4Reino Unido · LondresdirectMóvel6m[email protected]DE · BerlimUTM: AdsMóvel14m203.0.113.9NG · Rio de JaneiroreferralÁrea de trabalhothreat1–25 de 3,402Sessão →1FILTERData · busca · fonte · dispositivo2REAL COLUMNSIP/email · localização · dispositivo · ameaça3DRILL INAbra a sessão completa.
O verdadeiro registro de visitantes: filtrar por data, busca e dispositivo, então ler todas as visitas por IP_/email, localização, fonte, dispositivo e hora, ameaças marcadas em vermelho.

O que cada linha mostra

IP endereço

O visitante.IP Endereço anônimo se...IP A anonimização está ativada em Configurações.IP.

País e cidade

Detectado a partir do endereço IP usando dados GeoIP. Requer banco de dados MaxMind GeoLite2 ou cabeçalhos geo Cloudflare. Mostra "Desconhecido" se GeoIP não estiver configurado.

Página URL

A página que o visitante carregou.URLLongo. URLs estão truncados na vista da mesa.

- Remetente.

"Direta" significa nenhum referenciador (marcas, digitados URLs_, alguns links de aplicativos).

Dispositivo e navegador

O tipo de dispositivo do visitante (desktop, celular, tablet) e navegador (Chrome, Safari, Firefox, etc.).

Data e hora

Quando a página foi carregada, no seu fuso horário configurado.

Identidade do cliente

Se o visitante for identificado (via identidade ou login), seu nome ou e-mail aparecerá, caso contrário será anônimo.

Filtros

Data de intervalo

Filtrar as visitas a um período de tempo específico. 7 dias.

Busca

Procurem por IP Endereço, página URL, referência, país ou e-mail do cliente.

Fonte

Filtro por fonte de tráfego: direto, orgânico, social, referência, pago, e-mail.

Dispositivo

Filtrar por Desktop, Mobile ou Tablet.

Só para novos

Mostre apenas visitantes da primeira vez que nunca foram vistos antes.

- Sim.

Encontre visitantes de uma campanha específica.

Cenário:
Você lançou uma campanha do Google Ads com o parâmetro UTM utm_source=google&utm/medium=cpc&utn_campaign=verão-venda.
O que fazer:

No Diário de Visitantes, use o campo de busca e digite "verão-venda".URLs e página.URLs Você também pode filtrar por Source = Pago para reduzir ainda mais.

Encontre um cliente que relatou um problema.

Cenário:
Um cliente disse que sua página de checkout foi quebrada ontem por volta das 15h. Como você acha a sessão deles?
O que fazer:

Procure pelo endereço de e-mail no registro dos visitantes, se eles foram logados, sua identidade aparecerá, definirá o intervalo de data para ontem, procure visitas para as páginas de checkout por volta das 15h. JavaScript Erros.

Detecte um batedor de loop ou raspador.

Cenário:
Você percebe um IP endereço tem 500+ visitas em uma hora, todos para a mesma página.
O que fazer:

Este é provavelmente um robô, raspador ou script quebrado IPChecando: (1) Todas as visitas são iguais? (2) O usuário é um robô conhecido? (3) A sessão dura sempre 0 Se confirmado como um robô, vá para a segurança e bloqueie o IP.

Registro de visitantes vs Sessões vs Live Feed

Diário de visitas

Uma linha por página, melhor para investigar páginas específicas, achar tráfego de fontes específicas, diagnosticar problemas de rastreamento.

Sessões

Uma linha por sessão de visita, melhor para entender o fluxo do usuário, medir a duração da sessão, identificar os caminhos de conversão.

- Alimento ao vivo.

Atividade em tempo real, mostra visitantes no seu site, melhor para: monitorar campanhas em andamento, detectar visitantes de alta intensidade, assistir oportunidades de apoio.

Por que vejo minhas visitas no diário?+

OpsIQ Para excluir o seu próprio tráfego, adicione o seu IPEndereço para os excluídos. IPs Lista em Configurações > Rastreamento.

Por que um visitante mostra o país desconhecido?+

GeoIP requer ou Cloudflare geo headers (automático se usando Cloudflare) ou um arquivo de banco de dados MaxMind GeoLite2.

Quanto tempo os dados do visitante são mantidos?+

Os dados dos visitantes são mantidos para o período de retenção configurado em Configurações (padrão: 90 dias).

-Esquecimento.

Sessões

Sessões agrupam várias visualizações de páginas da mesma pessoa em uma única jornada, enquanto o Diário de Visitantes mostra cada página, as Sessions mostram como as pessoas passam pelo seu site de pouso para saída.

Sessões
SessõesA mesa de Registro da Sessão com IP, país, dispositivo, fonte, duração e colunas de páginas, e uma linha de ameaça sinalizada.Sessõesyoursite.comPaís (NG)Registro de sessãoIP_ (S)PAÍSDISCURSOFONTEDURAÇÃOPÁGINAS41.62.10.4Reino UnidoÁrea de trabalhogoogle3m. 12s6102.89.6.2NGMóveldirect1m. 05s388.21.4.9DEÁrea de trabalhoUTM: Ads7m. 48s11203.0.113.9EUAMóvelreferralOm 42s21SESSION LOGViagens agrupadas2COLUMNSPaís, dispositivo, fonte, duração.3THREATSessões arriscadas marcadas
O verdadeiro Diário de Sessão: cada viagem de visitante como uma linha (IP, país, dispositivo, fonte, duração e páginas) com sessões arriscadas marcadas em vermelho.

Como as sessões funcionam

Uma sessão começa quando um visitante carrega sua primeira página e continua navegando para mais páginas, uma sessão termina quando o visitante está inativo para o período de tempo limite da sessão (padrão: 30 A mesma pessoa retornando após o intervalo cria uma nova sessão.

O que cada sessão mostra

Primeira página

A página de destino, onde o visitante entrou no seu site, diz qual conteúdo está atraindo as pessoas.

Última página

Se a página de saída é frequentemente a página dos preços, os visitantes podem estar comparando você com os concorrentes.

Contagem de páginas

Quantas páginas o visitante viu nesta sessão, mais páginas geralmente significa mais engajamento, mas também pode significar que o visitante está perdido.

Duração

Sessões com 0 segundos são saltos (visão de página única, sem mais interação).

Fonte

A fonte de tráfego para esta sessão (direto, Google, social, referência, etc.).

País

Detectado país do visitante. IP Endereço.

Salto

Se o visitante saiu depois de ver apenas uma página.

Conversão

Se o visitante completou um evento de conversão (compra, inscrição, submissão de formulário) durante esta sessão.

Filtros

Busca

Procurem por IP, e-mail, página URL, ou referência dentro de sessões.

Tipo

Filtrar por visitantes novos (primeira sessão) ou retornando visitantes.

Fonte

Filtrar pela fonte de tráfego.

País

Filtrar por país para ver sessões de uma região específica.

Ameaças/Foram lançadas

Filtrar para mostrar apenas sessões perdidas ou marcadas como ameaças.

- Sim.

Perfil de um cliente de alto valor

Cenário:
Um cliente fez uma compra grande, você quer entender a viagem antes de comprar.
O que fazer:

Procurem por seus e-mails em Sessões: (1) Quantas vezes eles visitaram antes de comprar? (2) Que páginas eles viram? (3) Eles usaram bate-papo ou abriram uma passagem? (4) Qual foi o tempo total desde a primeira visita para comprar?

Detecte login de um novo local.

Cenário:
Um cliente geralmente faz login da Nigéria, mas você vê uma sessão da Rússia.
O que fazer:

Procure o e-mail do cliente em Sessões, compare o país das sessões recentes, se uma sessão aparecer de repente de um país incomum, pode ser viagem legítima ou uma conta comprometida.1Houve uma tentativa de login falhada antes do sucesso?2O que é isso? IP Marque para revisão se suspeitar.

Qual é a diferença entre uma sessão e um visitante?+

Uma sessão é uma visita dessa pessoa, o mesmo visitante pode ter muitas sessões ao longo do tempo, as sessões expiram após o período de espera.

Como vai? OpsIQ Identificar os visitantes que retornam?+

OpsIQ Se um visitante limpar seus cookies e não estiver logado, eles aparecerão como um novo visitante.

-Esquecimento.

- Alimento ao vivo.

O Live Feed mostra os visitantes no seu site em tempo real. 15 Use-o durante campanhas, lançamentos de produtos e períodos de suporte ocupados para ver o que está acontecendo agora.

- Alimento ao vivo.
- Alimento ao vivo.Um fluxo de atividade em tempo real mostrando uma contagem de visitantes online ao vivo e um feed de ações recentes por país.- Alimento ao vivo.yoursite.com37Visitantes online agoraAtividade viva.AgoraUS · visualização /pricing2sReino Unido começou uma conversa5sDE · adicionado ao carrinho9sCA · Inscrição completa1RIGHT NOWVeja quem está no local.2AUTO-REFRESHAtualiza tudo. 15s3ATOPule em uma conversa ao vivo
Veja quem está em seu site neste segundo e o que eles estão fazendo, refrescante automaticamente cada 15 segundos.

Como funciona

O Live Feed pesquisa seu servidor no intervalo de atualização configurado.

Configurações

Intervalo de atualização

Quantas vezes as atualizações ao vivo. 15"Segunda-feira"5-10s Dê atualizações mais rápidas, mas use mais recursos do servidor.30-60s) são mais fáceis no servidor, mas menos em tempo real.

Limiar ativo

Quanto tempo um visitante é considerado "ativo" após sua última página. 90 Se um visitante carrega uma página e então lê para 2 minutos sem clicar, eles desaparecem da transmissão ao vivo após o limiar.

Botão de pausa

Clique em Pausa para parar de atualizar automaticamente, útil quando quiser ler detalhes sem atualização da lista.

- Sim.

Veja uma pista quente durante uma campanha.

Cenário:
Um visitante acabou de ver sua página inicial, depois apresenta, depois cobra preços, e agora está na página de checkout.
O que fazer:

Isso é comportamento de alta intensidade: (1) Clique no visitante para ver sua sessão. (2) Se começarem uma conversa, a IA terá seu contexto completo de viagem. (3) Se eles saírem sem comprar, se tornarão uma pista na página dos líderes. (4) Considere criar uma regra proativa para mostrar uma mensagem de bate-papo quando os visitantes chegarem ao checkout.

Muitos visitantes do mesmo. IP

Cenário:
Você vê? 20 Visitantes do mesmo IP Endereço, tudo em páginas diferentes.
O que fazer:

Isso poderia ser...: (1) Verifique se as visitas parecem com humanos de verdade (páginas diferentes, duração razoável da sessão). (2) Um robô ou raspador, verifique se as sessões são curtas0-1 segundos) ou batendo páginas sistematicamente. (3) Se você está fazendo testes automatizados, exclua o IP de rastreamento.

Por que a transmissão ao vivo mostra 0 Visitantes quando meu site tem tráfego?+

Cheque: (1) O script do widget está instalado no seu site? (2) A chave do site está correta? (3) O limiar ativo já passou? (4) Visitantes usando bloqueadores agressivos que bloqueiam o roteiro de rastreamento?

Posso filtrar o sinal vivo por país ou dispositivo?+

O feed ao vivo mostra todos os visitantes ativos para as visualizações filtradas, use as páginas de Registro ou Sessões com suas opções de filtro.

-Esquecimento.

Páginas de cima.

Páginas de Top mostra quais páginas do seu site têm mais tráfego, classificam páginas por visitas, engajamento, conversões e atividades de suporte, usam para identificar seu melhor conteúdo, encontrar páginas com desempenho inferior e descobrir páginas que geram perguntas de suporte.

Páginas de cima.
Páginas de cima.Uma lista das páginas mais visitadas com barras de visitas horizontais e conta.Páginas de cima.yoursite.comPáginas mais visitadas/pricing3,402/2,910/docs1,740/blog/seo-guide980/signup6401RANKEDPáginas mais visitadas2SIGNALSVisitas e conversões3FINDPáginas que dirigem bilhetes
Suas páginas são classificadas por tráfego e engajamento, para que possa identificar conteúdo superior e páginas que geram suporte.

O que cada página mostra

Página URL

O total URL Páginas semelhantes (por exemplo, variantes de produto) são agrupadas se o agrupamento for ativado.

Vistas

Número total de vezes que esta página foi carregada na faixa de datas selecionada.

Visitantes únicos.

Quantas pessoas diferentes viram esta página (uma pessoa vendo a mesma página duas vezes conta como 1 original).

Taxa de salto

Percentagem de visitantes que saíram do seu site depois de verem apenas esta página, alta rejeição nas landing pages = problema, alta rebatida em "obrigado" páginas = normal.

Tempo médio

Quanto tempo os visitantes gastam nesta página em média, muito curto, não lendo, muito longo numa página de formulário, confusão.

Começa a conversa.

Quantas conversas de chat começaram nesta página, e conversas de alto nível começam em uma página de produto significa que a descrição do produto pode não ser clara.

Bilhetes de apoio.

Quantas passagens de suporte foram criadas por visitantes que estavam nesta página, alta contagem de ingressos = potencial problema de UX ou conteúdo.

- Sim.

Encontre páginas que dirijam perguntas de apoio.

Cenário:
Sua equipe de apoio continua recebendo perguntas sobre o transporte.
O que fazer:

Ordenar as páginas de cima por "Ingressos de suporte" ou "Começa o bate-papo" descendo, procure por produtos ou páginas de envio com altas contagens, a página com mais perguntas de apoio provavelmente tem informações obscuras, corrija o conteúdo da página e monitore se as questões de suporte diminuem.

Encontre páginas com alta taxa de saída

Cenário:
Você quer saber onde as pessoas saem mais frequentemente do seu site.
O que fazer:

Separem-se por taxa de rejeição, ignorem páginas que são pontos de saída naturais, foquem-se em páginas que devem manter os visitantes envolvidos: páginas de produto, preços, recursos, estes precisam de melhores chamadas para ação ou conteúdo mais claro.

Por que uma página mostra 0 Visões mesmo sabendo que tem tráfego?+

Cheque: (1) O widget de rastreamento está instalado nessa página específica? (2) A página está excluída no rastreamento? (3) Um CDN está servindo uma versão em cache sem o roteiro de rastreamento?

-Esquecimento.

Geo-inteligência

Geo Inteligência mostra de onde seus visitantes vêm por país, cidade, dispositivo e fonte.

Geo.
Geo-inteligênciaUm mapa de locais de visitantes ao lado de um ranking por bar.Geo-inteligênciayoursite.comVisitantes por localizaçãoEUAReino UnidoDECANG1MARKETSPaís, cidade, dispositivo2PLANLíngua e regiões3WATCHEspreitando o tráfego.
De onde seus visitantes vêm (de país, cidade e dispositivo) para o tamanho dos mercados e detectar tráfego incomum.

O que você vê

Topo dos países, tabela de barras.

Os países de topo classificados por número de visitantes, cliquem em um país para detalhar os dados da cidade.

Donut de campo

Deslocamento visual do tráfego por país, para cobrir percentuais.

Mesa de campo completa

Todos os países com visitantes no período selecionado, mostrando contagem de visitantes, contagem de sessões, taxa de rejeição e taxa de conversão.

Cidade perfurada

Clique em um país para ver quais cidades dentro desse país têm mais visitantes.

Como a detecção GeoIP funciona

OpsIQ Detecta a localização do visitante de duas maneiras:1) Cloudflare Se o seu site está por trás CloudflareDetecção de país é automática e precisa2) MaxMind GeoLite2 Descarregue o banco de dados e configure o caminho em Configurações GeoLite2-Base de dados da cidade, não só o banco de dados do país.

VPN e tráfego proxy

Visitantes usando VPNs aparecerão da localização do servidor VPN, não sua verdadeira localização. OpsIQ Se você vê padrões de país incomuns, considere que 10-20% Os visitantes podem estar usando VPNs.

- Sim.

Tráfego de país inesperado

Cenário:
Você dirige um negócio só dos EUA, mas... 30% O tráfego é da Índia.
O que fazer:

Cheque: (1) Veja a duração da sessão e as páginas vistas, sessões muito curtas com alto salto = provavelmente bots. (2) Estão te encontrando no Google? (3) Se o tráfego for genuíno e comprometido, considere adicionar preços ou conteúdo específicos da Índia.

Decidindo sobre suporte de linguagem

Cenário:
Quer saber se deve traduzir seu site para espanhol.
O que fazer:

Se os países de língua espanhola (Espanha, México, Colômbia, Argentina, etc.) juntos representam mais do que 10% Também cheque: visitantes desses países se convertem em taxas similares ao seu mercado primário?

Planejamento de turnos de apoio regional

Cenário:
Você precisa decidir horas de apoio para diferentes fusos horários.
O que fazer:

Use o mapa de calor horário (no painel) combinado com a Geo Inteligência. 40% Seu tráfego é da Europa e 35% O mapa térmico mostra exatamente quando cada região é mais ativa.

País com visitas, mas sem ordens.

Cenário:
Alemanha mostra 500 Visitantes este mês, mas nenhuma venda.
O que fazer:

Investigar: (1) Talvez seu preço não seja competitivo para esse mercado. (2) Você envia para a Alemanha? (3) O seu check-out está disponível em euros? (4) Esses visitantes são de uma única fonte que pode ser tráfego de baixa intensidade?

Por que um visitante mostra o país desconhecido?+

GeoIP não está configurado, ou configura Cloudflare (que adiciona cabeçalhos geo automaticamente) ou baixa o banco de dados MaxMind GeoLite2 e define o caminho do arquivo em Configurações > GeoIP Path.

Posso bloquear o tráfego de países específicos?+

OpsIQ Use seu servidor web ou Cloudflare Regras de firewall para bloqueio nacional.OpsIQ Foca na visibilidade, não no controle de acesso ao nível da rede.

-Esquecimento.

Funil de intenção

O Funil Intentário classifica as sessões de visitantes pelo que parecem estar tentando fazer: navegar, pesquisar, comparar, comprar, obter apoio ou sair para entender o equilíbrio de intenções em seu site e identificar onde os visitantes saem.

Funil de intenção
Funil de intençãoUm funil de Browse para Pesquisa para Comparar a compra com contagens, além de apoio e deixar chips.Funil de intençãoyoursite.comNavegar. 8,200Pesquisa · 4,100Compare ·1,650Compre · 520Suporte 6%Saindo. 11%1CLASSIFYO que os visitantes querem2STAGESNavegue para comprar3FIXEncontre a entrega.
Sessões classificadas por intenção (aspiração, pesquisa, comparação, compra) para que você possa ver exatamente onde as pessoas saem.

Categorias de intenção

Navegando

Visitantes olhando casualmente, sessões curtas, poucas páginas, nenhum objetivo específico detectado.

Pesquisando

Visitantes lendo páginas de produto/feature, documentos ou conteúdo do blog.

Comparando

Visitantes vendo preços, comparação de planos ou tabelas de recursos.

Comprando

Visitantes em páginas de checkout, carrinho ou inscrição.

Busca de apoio.

Visitantes em páginas de ajuda, contatos ou bate-papo.

Pulando

Visitantes que saíram depois de uma página.

Como ler o funil

Interpretando seu funil

Cenário:
1,000 Os visitantes viam o preço. 270 Abriu o bate-papo. 92 começou o checkout. 64 Pago. 18 Ingressos de suporte abertos.
O que fazer:

A página de preços é forte o suficiente para criar intenção. 27% Os ingressos de apoio após o checkout podem indicar ativação ou confusão no pagamento.1Assegure-se de que o bate-papo da IA responda bem às perguntas sobre preços.2) Investigar o 18 Bilhetes de apoio pós-checkout para problemas comuns.

Filtros de tempo

Por exemplo, compare a semana de sexta-feira negra com uma semana normal, você deve ver um pico na intenção "Comprar" e possivelmente em "Procurar apoio" se suas promoções criarem confusão.

Como vai? OpsIQ Classificar intenção?+

OpsIQ Olhe para a página. URLs Páginas de preços sinalizam intenção de comparação, páginas de check-out sinalizam a intenção de compra, as páginas de ajuda/contato indicam intenção de apoio, a classificação é baseada em heurística, não orientada por inteligência artificial.

Posso personalizar as categorias de intenção?+

As categorias são baseadas em padrões comuns de comportamento na web, a classificação personalizada está no roteiro.

-Esquecimento.

Funis, retenção e caminhos

Construa viagens personalizadas de página ou evento, meça a retenção de coorte e descubra os caminhos que os visitantes mais frequentemente tomam através de um site.

Tela de produto
FunisUm funil personalizado exibe cada página / evento, os visitantes restantes e a porcentagem de conversão.FunisEspaço de trabalhoSTEPS4CONVERSION28.4%WINDOW72hOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHO-Preços vistos.1,420 visitantes100%Plano selecionado780 visitantes54.9%O checkout começou.530 visitantes37.3%Ordem concluída.403 visitantes28.4%1DEFINEEscolha 2–8 Passos2MEDIDADefinir janela de conversão3MELHORAREncontre a maior gota
Um funil personalizado exibe cada página / evento, os visitantes restantes e a porcentagem de conversão.

Funis

Criar um funil com o nome 2 para 8 Passos de página ou evento, ajuste a janela de conversão em horas, o visitante conta apenas quando os passos ordenados ocorrem dentro dessa janela, use a gota entre os passos para escolher onde inspecionar replay, erros, velocidade da página ou mensagens.

Retenção.

Retenção agrupa visitantes em coortes semanais e mostra quantos retornam. 6, 8 ou 12 Mantenha a definição de coorte estável ao comparar lançamentos ou campanhas.

Caminhos

Os caminhos listam as sequências de páginas mais comuns. 2 para 5 Use-o para encontrar desvios inesperados, saídas comuns e conteúdo que repetidamente precede a conversão.

Funils personalizados são definições analíticas, não automações, para reagir a um passo finalizado, criar uma meta de conversão, segmento, gatilho ou fluxo de trabalho.

-Esquecimento.

Reprodução de sessão

Replay de sessão permite assistir uma linha do tempo do que um visitante fez em seu site: quais elementos eles clicaram, como eles rolaram, onde eles pairaram, e o que eles digitaram (com campos sensíveis mascarados). Use-o para diagnosticar problemas de UX, verificar relatórios de bugs e entender a confusão do cliente.

Reprodução de sessão
Reprodução de sessãoUm replay player mostrando uma página com um cursor, um painel de informações de sessão e um limpador de linha do tempo.Reprodução de sessãoyoursite.comCompre agora.SESSÃODuração 3m 12s14 EstalidosEcrã dos EUAChrome. 1241WATCHClique, role, digite2MASKEDCampos sensíveis escondidos3DIAGNOSEVerifique os relatórios de erros.
Reproduza exatamente o que um visitante fez: cliques, pergaminhos, digitação (campos sensíveis mascarados), em um limpador de linha do tempo.

Encontrando a sessão certa

Na página Sessões, procure sessões com problemas relatados, páginas altas sem conversão ou sessões de clientes que arquivaram tickets de suporte.

Que replay mostra

Linha do tempo

Uma barra horizontal mostrando eventos ao longo do tempo, clique em qualquer lugar na linha do tempo para pular para esse momento.

Navegação de página

Cada carga de página aparece como um segmento na linha do tempo.

Cliques

Os eventos de clique são mostrados como pontos na linha do tempo e como destaques na reconstrução da página.

Rolagem

Profundidade de rolagem é rastreada para que você possa ver o quão longe está a leitura do visitante.

Interação de forma

O foco e a digitação dos eventos são gravados, entrada de texto em senha e campos sensíveis é mascarado por padrão.

Privacidade e mascaramento

Sessões reproduzem campos de formulários sensíveis por padrão.opsiq Você pode configurar regras adicionais de mascaramento em Configurações > Rastreio.

Diagnosticando uma verificação quebrada.

Cenário:
Um cliente diz: "Eu tentei comprar, mas o botão não fez nada."
O que fazer:

Ache a sessão deles na página de Sessões (pesquisa por e-mail): (1) Eles clicaram no botão direito? (2) Fiz um... JavaScript (Verifique a página de erros JS para esse tempo.) (3) A página recarregou ou mostrou uma mensagem de erro? (4) A repetição mostra exatamente o que aconteceu.

Quanto armazenamento o replay de sessão usa?+

Para sites de alto tráfego, considere um período de retenção mais curto (por exemplo, 30 dias) para gerenciar o armazenamento.

Os visitantes podem recusar o replay?+

Se "Respeito Não Rastrear" estiver habilitado em Configurações, visitantes com cabeçalhos DNT não serão gravados.

-Esquecimento.

Diário de eventos

O Diário de Eventos mostra todos os eventos que OpsIQ Use-o para depurar integrações, verificar entrega webhook e entender a sequência de ações.

Diário de eventos
Diário de eventosUm registro de eventos cronológicos com crachás de tipo colorido: pageview, chat, venda, webhook e personalizado.Diário de eventosyoursite.compageviewEUA · /pricing12:04:01chat.startUK · widget aberto12:04:09Venda$49.00 Ordem!104212:05:22Webhookpayment.succeeded12:05:23customdemo_booked12:06:101EVERYTHINGCada evento gravado2DEBUGVerifique a entrega do webhook.3ORDERVeja a sequência exata.
Uma linha de tudo. OpsIQ Registros (pages, chats, vendas, webhooks, eventos personalizados) para depuração e auditoria.

Eventos embutidos (automático)

⚠️
Estes são events-log Nomes... O quê?OpsIQOs registros na linha do tempo dos visitantes para análise, depuração e auditoria. O que é isso? Se você está construindo um receptor de webhook, use a lista na seção Webhooks ou ligue para o seu site. webhooks.events.listSubscrever um nome desta mesa não vai entregar nada.

Cada linha mostra o nome que você enviar E o nome canônicoOpsIQ Lojas Ambos estão gravados: o nome cru que você enviou, e o canônico que ele mapeia, então um relatório escrito contra a taxonomia canônica continua trabalhando qualquer que seja o nome usado por um rastreador.

pageview page.viewed

Uma página rastreada carrega.URL, título, referência e horário. page_view e view são aceitos como a mesma coisa.

chat_open support.chat_opened

Um visitante abre o widget de bate-papo.

chat_send support.chat_message_sent

Um visitante envia uma mensagem de chat. support.chat_message_received.

ticket_open support.ticket_created

Um ticket de suporte é criado. ticket_create é aceito como a mesma coisa; respostas e encerramentos são armazenados como support.ticket_replied e support.ticket_closed.

form_submit form.submitted

Um formulário rastreado é enviado. submit é aceito como a mesma coisa.

purchase commerce.purchase_completed

Uma compra completa. purchase_successE os nomes falsos da venda. order.completed, sale.completed, payment.completed e invoice.paid, são todos aceitos de uma plataforma conectada.

Checkout commerce.checkout_started

O checkout começa. cart_view, checkout_view, checkout_intent, checkout_abandon, add_to_cart.

login_success identity.signed_in

Um visitante assina. login_failed, guardado como identity.login_failed; um bloqueio é login_lockout_created.

Inscrição conversion.signup

Um visitante completa uma inscrição. lead, guardado como conversion.lead.

js_error error.js

AJavaScriptErro é capturado em uma página rastreada.

💡
Um nome de evento que você envia que não é um desses nomes falsos ainda está gravado na íntegra, nada é deixado cair, simplesmente não tem mapeamento canônico, então não vai rolar para os relatórios baseados em taxonomia.

Eventos personalizados

Você pode enviar eventos personalizados de seu site ou servidor para OpsIQ. Eventos personalizados são úteis para rastrear ações específicas para o seu negócio: cliques de botão, uso de recursos, reprodução de vídeo, downloads, etc.

JavaScript · evento personalizado do navegador
// Send a custom event from the browser
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "plan_selected", {
  plan: "pro",
  billing: "annual",
  value: 99
}]);
PHP · grave uma atividade de contato do seu servidor
// 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);

Filtrando eventos.

Tipo de evento

Filtrar por nomes de eventos específicos: pageview, chat. started, ticket. created, etc.

Data de intervalo

Mostre eventos de um período específico.

Busca

Pesquisa dados de eventos por palavra-chave (URL, e-mail, valores de propriedade do evento).

Quanto tempo os eventos são mantidos?+

Os eventos seguem a política de retenção definida nas configurações. 90 Eventos de alto valor (compras, eventos de segurança) podem ser configurados com retenção mais longa.

Posso usar eventos em experimentos A/B?+

Quando se cria um experimento, escolhe-se um evento de conversão, qualquer evento embutido ou personalizado pode ser usado como objetivo de conversão.

-Esquecimento.

Experiências A/B

Experimentos permitem testar duas versões de uma página ou característica e medir qual delas é melhor. OpsIQ Rastreia impressões, conversões e significância estatística.

Experiências A/B
Experiências A/BDuas cartas variantes comparando taxas de conversão, com um distintivo vencedor e significado na variante principal.Experiências A/Byoursite.comVariante A4.2%conversão · 1,020 VistasVariante BVencedor6.8%conversão · 1,005 Vistas+62% elevador · 96% significativo1ENSAIODuas variantes, cara a cara.2MEDIDAConversões e significado3DECIDEMDeclare um vencedor.
Executar duas variantes, ver conversões e significância estatística, e declarar o vencedor.

Como as experiências funcionam

1
Crie uma experiência.

Dê um nome, defina sua métrica primária (evento de conversão) e configure as variantes (controle e teste).

2
Corra.

OpsIQ Não mude o experimento enquanto ele está em execução.

3
Leia os resultados.

Depois que dados suficientes forem coletados, verifique o nível de confiança. 95% Confiança significa que você pode ser. 95% certifique-se de que a diferença é real, não chance aleatória.

- Está tudo bem.

Rascunho

Ainda pode editar variantes e métricas.

Correndo

Ativamente atribuindo visitantes a variantes.

Concluído.

Atingiu significância estatística ou foi parado manualmente.

Arquivado

Os resultados foram revistos e o experimento não é mais necessário na lista ativa.

Boas práticas.

Defina sua métrica antes do lançamento.

Escolha uma métrica depois de ver os resultados, introduz viés.

Excluir o tráfego interno.

Adicione a sua equipe. IP Endereços para a lista de exclusão, então visitas não distorcem os resultados.

Corra o suficiente.

Não pare uma experiência depois. 100 Você precisa de centenas ou milhares de visitantes por variante para obter resultados confiáveis.

Teste uma mudança de cada vez.

Se você mudar a manchete e a cor do botão, não saberá qual mudança causou a melhora.

Grave sua decisão.

Depois que o experimento terminar, note qual variante ganhou e por que escolheu implementá-lo.

Quantos visitantes preciso para um experimento válido?+

Depende da taxa de conversão e do tamanho do efeito que você quer detectar. 500 visitantes por variante para um 20% Para efeitos menores, você precisa de milhares.

Posso fazer vários experimentos ao mesmo tempo?+

Sim, mas tenha cuidado, se duas experiências afetam a mesma página, seus resultados podem interagir, é mais seguro executar experimentos em páginas ou recursos diferentes simultaneamente.

-Esquecimento.

JavaScript Erros

JavaScript Erros coletam erros do lado do cliente dos visitantes do seu site. API Use para achar e consertar bugs que afetam clientes de verdade.

Erros JS
JavaScript ErrosUma lista de erros capturados com pontos de gravidade, arquivo fonte, navegador e ocorrência conta.JavaScript Errosyoursite.comErros recentes.TipoErro: não se pode ler x de indefinidoCheque-out.42 · Cromo×214404 Carregando. /assets/app.cssíndice · Safari×88Não pego (em promessa) NetworkErrorapi.Js:17 · Firefox×51Aviso de desprecação: descarregar o evento.Vendedor. JS · Edge×331CAPTUREErros no lado do cliente.2IMPACTConta & navegadores3FIXEsqueçe insetos de verdade.
Visitantes reais atingindo a superfície de código quebrada aqui (mensagem, fonte, navegador e quantas vezes) para que você possa corrigir o que importa.

O que cada erro mostra

Mensagem de erro

O texto de erro JavaScript (por exemplo, "TypeError: não pode ler propriedades indefinidas").

Página URL

Em que página o erro ocorreu.

Navegador e dispositivo

Que tipo de navegador e dispositivo viu o erro.

Rastreamento de pilha

Clique para expandir o rastreamento completo.

Primeiro visto.

Quando esse erro apareceu pela primeira vez.

Última vez vista

Quando esse erro ocorreu recentemente.

Contagem

Quantas vezes esse erro foi registrado.

Sessões afetadas

Quantas sessões de visitantes diferentes experimentaram esse erro.

Priorizando erros.

Nem todos. JavaScript Erros precisam de atenção imediata.1) erros em páginas críticas (checkout, inscrição, login), (2) erros com altas contagens de sessões, (3) erros que apareceram recentemente (possível regressão de uma mudança de código), (4Erros no seu próprio código (não scripts de terceiros).

Consertando um botão de checkout quebrado.

Cenário:
A página de Erros JS mostra "TypeError: Não é possível ler propriedades indefinidas (lendo envio)" em /checkout, afetando 45 sessões esta semana.
O que fazer:

Isso significa 45 Os clientes de verdade não puderam completar o check-out: (1) Abra a página na mesma combinação navegador/dispositivo. (2) Abra o console do navegador e reproduza o erro. (3) Cheque o rastro da pilha para encontrar a linha exata de código. (4) Conserte o bug, implante e monitore a contagem de erros indo para zero.

Faz. OpsIQ Capturar erros de scripts de terceiros?+

Sim. OpsIQ Captura tudo. JavaScript Erros na página, incluindo erros de scripts analíticos, widgets de bate-papo e scripts de anúncios. URL no rastreamento da pilha para focar em seu próprio código.

Como posso excluir erros inofensivos conhecidos?+

Você não pode suprimir erros específicos em OpsIQ, mas você pode filtrar a lista por página URL Corrija ou ignore erros das extensões do navegador (eles muitas vezes mostram como erros de fontes desconhecidas).

Vendas

Vendas e conversões

O rastreamento de vendas conecta sua loja ou plataforma de faturamento a OpsIQ para que você possa ver o rendimento ao lado do comportamento do visitante.

Vendas
VendasA tela de vendas: um total de receitas com controle do período de tempo integral, uma busca e uma tabela de compras recentes (data, cliente, plataforma, quantidade, fonte).Vendasyoursite.comRECEITAS$42,180+18%O tempo todo.▾Procure o e-mail, IP, identificação da ordem...Compras recentesDATACLIENTEPLATAFORMAMONTANTEFONTEJun. 3[email protected]Shopify$49googleJun. 3[email protected]WooCommerce$129directJun. 2[email protected]Stripe$480anúncios1RECEITASOrdens e renovações2RECENT PURCHASESData · cliente · quantidade3ATTRIBUTEDPara a fonte de tráfego
A tela de vendas real, receita acima, então Compras recentes (data, cliente, plataforma, quantidade), cada um atribuído à sua fonte de tráfego.

Painel de vendas

As vendas de hoje

Releases com cada novo evento de pedidos da sua plataforma conectada.

Esta semana / este mês / total

Reembolsos são subtraídos desses totais.

Gráfico de tendências

Gráfico de linhas mostrando receita diária sobre a faixa de datas selecionada.

Fontes de conversão máximas

As fontes de tráfego levam à maioria das compras, compradores diretos geralmente marcavam seu site.

Compras recentes.

Os últimos pedidos com email, quantidade, moeda e itens comprados.

Compras não confirmadas (viagem ao cliente)

Quando o rastreador vê um visitante chegar a uma confirmação de compra no navegador, mas nenhuma plataforma conectada relatou que venda ainda, a jornada do cliente mostra uma linha Compra (não confirmada) com um crachá âmbar.

Reconciliação

Todos os sinais de pagamento que a plataforma envia podem abrir a venda, e o Contrato de Conector 2.3 re-lerá a própria lista de vendas completadas em um horário (padrão por hora por espaço de trabalho) para que um webhook a plataforma nunca entregue não possa perder uma venda.

Guias de configuração da plataforma

Shopify

Vá para os conectores.Shopify Crie um aplicativo personalizado em seu Shopify Os objetivos do projeto são: ler_ordens, ler_clientes, produtos de leitura. API Acesso token. OpsIQ, insira seu domínio de loja (por exemplo, your-store.myshopify.com Se tiver sucesso, habilite a sincronização do webhook para notificações em tempo real.

WooCommerce

Vá para os conectores.WooCommerce Na sua WordPress admin, vá para WooCommerce> Configurações > Avançados > Descansar API Criar uma chave com permissão de leitura e escrita, copiar a chave do consumidor e o segredo do consumidor. OpsIQ, entre em seu site URL Clique em Test Connection.

BigCommerce

Em seu administrador do Big Commerce, vá para configurações avançadas.API Crie um V2/V3 API Conta com leitura para pedidos, clientes e produtos.API Por favor, entre. OpsIQ e teste.

Magento. 2

Vá para Conectores > Magento. API Ative a integração e copie o token de acesso. OpsIQ com sua base Magento URL.

PrestaShop

Vá para Conectores > PrestaShop. Em seu administrador PrestaShop, vá para Parâmetros Avançados > Webservice. Habilite o serviço web e crie uma nova chave. Conceda acesso a pedidos, clientes e produtos. OpsIQ com sua loja URL.

OpenCart

Vá para Conectores > OpenCart. Gerar API Credenciais do seu painel de administração OpenCart.API URL, nome de usuário e chave em OpsIQ O conector usa o REST do OpenCart.API para pedidos e dados de clientes.

osCommerce

Configure o acesso ao banco de dados.API A integração com os Commerce requer acesso direto ao banco de dados ou um costume.API Módulo.

Stripe

Vá para os conectores > Stripe.API A chave do painel das listras.API A chave precisa de acesso a clientes, cobranças, faturas e assinaturas. OpsIQ Configure o ponto final do webhook para eventos em tempo real.

Personalizado / outras plataformas

Use o descanso.API Envie o pedido.Eventos completos com email, quantidade, moeda e itens do cliente.API Seção para o formato de carga.

Entendendo seu funil de vendas

Fontes de conversão máximas

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.

Reembolsos

As ordens são monitoradas separadamente, reduzem os totais de receita líquida, se as taxas de reembolso forem altas de uma fonte específica, o tráfego pode ser de baixa qualidade.

Manuseio de moeda.

OpsIQ As empresas de multimoedas veem a receita em cada moeda, relatórios normalizados usam a taxa de câmbio configurada.

- Sim.

100 visitantes, zero vendas

Cenário:
Sua página de preços fica 100 Visitantes por dia, mas sem conversões.
O que fazer:

Investigar: (1) Veja como eles interagem com a tabela de preços. (2) Verifique Top Pages para a taxa de rejeição da página de preços e tempo-na-página. (3) Que perguntas eles fazem? (4) Compare sua página de preços com os concorrentes. (5) Tente uma experiência A/B com diferentes layouts de preços.

Atribuição para uma campanha de marketing

Cenário:
Você enviou uma campanha de e-mail com etiquetas UTM.
O que fazer:

Procure o parâmetro UTM da campanha: (1) Quantos visitantes vieram do e-mail. (2) Quantos se converteram em vendas. (3) Receita total atribuída à campanha. (4) Compare com o mesmo período antes da campanha.

Por que as vendas mostram zero, mesmo que minha loja tenha pedidos?+

Cheque: (1) O conector da plataforma está conectado e saudável? (2) Se usar pesquisas, o trabalho do Cron está funcionando? (3) O conector tem o direito API - Para miras? ShopifyVocê precisa read_orders.

Como vai? OpsIQ Atribuir uma venda a um visitante?+

Quando uma ordem vem através do conector, OpsIQ corresponde ao e-mail do cliente para um visitante conhecido.

Posso adicionar vendas manualmente?+

Você pode enviar eventos de vendas através do REST API O formato do evento está documentado nos Eventos.API Seção.

Comércio

Construir, lançar e operar a loja nativa

A loja éOpsIQLoja nativa de produtos, páginas, livros, painéis promocionais, cheques, contas de clientes e vendas assistidas por IA no chat do cliente e canais sociais suportados.

Comece no Marketing.→Loja.

1
Escolha o espaço de trabalho

Os produtos, configurações, páginas, pedidos e análises estão isolados para esse espaço de trabalho.

2
Activar comércio eletrônico e loja

Geral Settings → Ecommerce é a autoridade pai.

3
Publicar produtos completos

Definir tipo de produto, preço, moeda, inventário, variantes/opções, mídia e realização.

4
Configure o pagamento e a realização

Os bens físicos precisam de zonas de entrega ou coleta, os bens digitais precisam de arquivos protegidos ou códigos.

5
- Sim.

Conserte cada bloqueador e revise cada aviso, então complete uma ordem da loja pública.

Sobre e conteúdo político

Novas e atualizadas lojas recebem texto inicial para Sobre nós., Termos e condições, Privacidade, e Reembolsos e devoluções. Quando os campos estão vazios, a cópia existente do comerciante nunca é substituída.

  • Substitua cada [Add …] - Não, não. TEMPLATO DE INÍCIO Aviso antes do lançamento.
  • Use o nome legal, rota de contato, promessas de cumprimento, regras de retorno, práticas de dados, períodos de retenção e mercados servidos.
  • O que você serve é orientação operacional, não aconselhamento legal.

Design, páginas e promoções

Tema e desenho de página

Escolha um tema de cor e composição, depois afinar tipografia, preenchimentos/gradientes, formas, largura, movimento, paira e luz/composição escura.

Sobre, Contato, Mostra-Caixa/Lookbook e Conta

Construir cada página de blocos reordenáveis, cada bloco tem variantes de design premium, manter blocos de reivindicação como estatísticas, equipe, prêmios ou citações até que seu conteúdo seja verdadeiro.

Páginas personalizadas

Definir título, slug, herói, SEO e blocos ordenados; pré-visualização enquanto rascunho, em seguida, publicar.

Popups promocionais e painéis laterais

Escolha o design premium, centro/esquerda/direita/baixo, carga/atraso/exit/clique gatilho, pano de fundo, movimento, largura, cupom e comportamento uma vez por visitador.

Menus e rodapé

Link para páginas, produtos, coleções, políticas, ações de conta/ajuda/carto, modais ao vivo ou seguros externosURLsItens de cabeçalho suportam um nível suspenso/mega-menu.

Conversa de clientes e ordens sociais

Ativar a venda de bate-papo do cliente, então escolha onde os clientes podem comprar.

WhatsApp, Mensageiro,Instagram, TelegramO e-mail ainda é coletado para recibos, o pedido de conexão mantém seu contrato universal assinado e total autoritativo de mercadores, a configuração do Storefront não altera esse contrato.

Analisando a Inteligência da Loja

Reveja visitantes únicos, visualizações de produtos, adições de carrinhos, checkout starts/abandons/completions, conversão, ordens confirmadas, receita por moeda, aquisição, dispositivos, países/cidades, produtos de topo, recuperação e avisos de qualidade de dados.

Geral.OpsIQ API

Use uma chave portadora com commerce.read; analytics.read A chave tem autoridade.

"Digitado em frente à loja"
{ "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 recebe de volta a configuração em segurança pública,URLA lista de páginas retorna páginas personalizadas e modais premium.

Final pré-lançamento drive-through

  1. Desktop e telefone: casa, busca, produto/variante, carrinho, validação de checkout, conta, rastreamento, downloads, Sobre, Contato, políticas, lookbook, páginas, menus e todas as promoções ao vivo.
  2. Complete um pagamento e verifique o status da ordem, recibo, estoque e cumprimento.
  3. Coloque um pedido de bate-papo e uma ordem de provedor e sandbox em cada canal social habilitado.
  4. Confirme que esses eventos aparecem sob a superfície correta e moeda na Inteligência de Loja.
⚠️
O texto da política de iniciação torna uma loja não vazia, mas não faz a cópia legal revisada.
Vendas

Chumbo

Os líderes são visitantes ou clientes que mostram intenção de compra ou apoio.OpsIQDetecta automaticamente leads com base no comportamento: preços de visitas de página, revisitas, interações de bate-papo, checkout e alto engajamento.CRM Oleoduto.

Chumbo
ChumboA tela de leads: uma tabela pesquisável com IP/email, localização, dispositivo, fonte e colunas de tempo-no-site, e fonte superior e país.Chumboyoursite.comProcure. IP, cidade, país...Fonte principal: Google · Top country: EUAIP/ EMAILLOCALIZAÇÃODISCURSOFONTETEMPO41.62.10.4Reino Unido · LondresMóvelgoogle4m. 12s[email protected]EUA · Nova YorkÁrea de trabalhodirect7m. 02s[email protected]DE · BerlimMóvelUTM: Ads5m. 40s203.0.113.9CA · São FranciscoÁrea de trabalhogoogle3m. 28s1DETECTEDVisitantes de alta-intenção2TOPFontes e países líderes3ENRICHEDIP, localização, dispositivo, tempo
A verdadeira tela de leads, visitantes de alta intensidade como uma tabela pesquisável (IP/email, localização, dispositivo, fonte, tempo no local) com fontes e países de topo.

O que faz uma pista

Visitas de página de preços

Visitantes que veem seus preços ou sua página de planos estão considerando ativamente uma compra.

Visitas de retorno.

Visitantes que voltam várias vezes estão noivos, mas ainda não se converteram.

Interações de bate-papo

Visitantes que começam uma conversa estão procurando ajuda, seja pré-compra ou pós-compreenda.

Começa a saída.

Visitantes que chegam à página de checkout mas não completam a compra.

-Presenta de formulário.

Visitantes que enviam um formulário de contato, pedido de demonstração ou formulário de inscrição.

-Engajamento de página alta.

Visitantes que veem muitas páginas com longa duração de sessão estão pesquisando profundamente.

Painel de detalhes do chumbo.

Clique em qualquer pista para ver o perfil completo deles:

Identidade

Nome, e-mail, empresa se conhecida. IP e localização.

Sessões

Todas as sessões desta liderança com fluxo de página, duração e fonte.

Páginas vistas

Cada página que visitaram, encomendada por regência.

Fonte

Como eles te encontraram: orgânico, pago, social, encaminhamento, direto.

Marcador principal

A0-100 pontuação baseada na intensidade do comportamento, recensão e intenção de página.

Situação da CRM

Se essa pista foi adicionada ao CRM como contato ou acordo.

Dica de vendas.

AI-gerado sugestão sobre o que fazer em seguida (por exemplo, "Preços visitados 3 vezes · considerar proativo alcance").

- Emblema de chumbo de alto valor.

Lidera com uma pontuação acima. 80 Essas são suas melhores perspectivas, priorize-as para divulgação, bate-papo proativo ou entrada no gasoduto CRM.

- Sim.

Trabalhando em uma pista quente

Cenário:
Um líder viu sua página de preços. 3 Tempos em 2 dias, começou uma conversa perguntando sobre planos empresariais, mas não comprou.
O que fazer:

Esta é uma pista de alta intensidade: (1) Cheque os detalhes da empresa e informações de papéis. (2) Reveja a transcrição do bate-papo para necessidades e objeções específicas. (3) Crie um acordo no CRM com as informações recolhidas. (4) Atribua uma tarefa de acompanhamento para um membro da equipe de vendas. (5) Se eles voltarem à página de preços, a regra proativa do bate-papo pode desencadear uma mensagem personalizada.

Convertendo anônimos leva a contatos CRM

Cenário:
Você tem. 50 Leads anônimos com notas altas, mas sem endereços de e-mail.
O que fazer:

Opções: (1) Criar uma regra proativa que oferece um desconto ou transferência de recursos em troca de e-mail em páginas de alta intenção. (2) Use o widget de bate-papo para pedir e-mail quando visitantes anônimos começarem uma conversa. (3) Adicione um símbolo de identidade às suas páginas de login/assinatura para que os visitantes que retornam sejam identificados automaticamente.

Como é calculado o resultado principal?+

O escore considera: regência de visitas (recentemente = maior), frequência de visitas, páginas vistas (pricing/checkout = mais alto), duração da sessão (mais longo = maior) e interações de chat (engajado = maior).

Posso personalizar as regras de pontuação?+

Na Configuração CRM, você pode adicionar regras de pontuação que aumentam a pontuação com base em palavras-chave específicas, eventos, fontes ou padrões de página.

CRM

Seu CRM começa aqui.

OpsIQzarpa um Al-First CRM Cada ação da IA é fonte, explicável, reversível e controlada.

AI CRM
Visão geral do CRM da IAUm mostrador de confiança definido para co-piloto ao lado de quatro placas de agente da IA:AI CRMEspaço de trabalhoConfiança em DialManualCopiloto.Piloto automáticoQuanto a IA faz sozinha?DS.- Garçom.Dedupe, enriquece,Validar dadosDSEProspector.Encontrem a pontuaçãoNovos negóciosRTRetenção.Churn de ponto,Atrair renovaçõesANAnalistaPrevisão &explicar números1AI-FIRSTQuatro agentes especializados.2YOU DECIDEAutonomia do Dial de Confiança3TRUSTEDFonte & reversível
Um CRM de IA-primeiro executado por quatro agentes especializados, e um discagem confiável que decide quanto eles fazem sozinhos.

Visão geral das páginas do CRM

AI CRM (Centro de Comando)

Comece aqui.

Sua tela inicial diária: pulso de receita, o que a IA encontrou, o quê fez, fila de aprovação, próximos movimentos, saúde do agente e ROI.

Contatos

Núcleo

Pessoas e empresas em seu CRM Procure, filtre, marque e gerencie perfis.

Pipeline

Núcleo

Placa visual com etapas de arrastar e largar, probabilidade de vitória e treinamento em IA.

Previsões e Relatórios

Núcleo

Previsão de placa: comprometida, provável, melhor caso, com intervalos de confiança e rastreamento de precisão.

Ciclo de vida

Núcleo

Onde cada cliente está: ativo, em risco, pronto para expansão, renovação devido, ou agitação.

Construa meu CRM

Configuração

Descreva sua configuração de CRM em inglês. OpsIQ Gera um plano reversível e o aplica na aprovação.

CRM Saúde

Operações

Página de auto-cheque: esquema, agentes, rotas, ações da IA e dados ao vivo contam.

Como? OpsIQ te mantém seguro.

Pergunte antes de atuar.

As propostas de IA vão para a fila de aprovação, você aprova, edita ou rejeita cada uma delas.

Nunca sobreponha

Quando a IA sugere uma mudança, mostra o valor atual e o valor proposto.

Tudo é reversível.

Cada ação da IA é gravada no diário, você pode desfazer qualquer mudança com um clique.

Explicado

Cada recomendação de IA mostra seu raciocínio e as fontes de dados que usou.

- Novinho em folha?

1
Abra o CRM da IA

Clique em CRM de IA na navegação esquerda.

2
Verifique a saúde do CRM.

Abra o CRM Health para verificar o esquema, agentes e rotas estão prontos.

3
Importar contatos

Se um conector estiver ativo (Shopify, WHMCS, etc.), contatos são importados automaticamente. CSV ou criar manualmente.

4
Crie um oleoduto.

Vá para Pipeline e crie seu primeiro oleoduto com etapas (por exemplo, chumbo, qualificado, proposta, negociação, ganho, perdido).

5
Adicione seu primeiro negócio.

Faça um acordo com um contato, ajuste a quantidade e o palco, e deixe o treinador de negócios guiá-lo.

Preciso usar o CRM?+

Não, o CRM é opcional. OpsIQ Funciona perfeitamente como uma plataforma de rastreamento + suporte + IA sem o CRM.

O CRM pode funcionar sem conectores?+

Sim, você pode criar contatos e ofertas manualmente, os conectores enriquecem o CRM com dados de plataforma (ordens, assinaturas, ingressos), mas não são necessários.

O que é a Camada de Confiança?+

A IA atua automaticamente em operações reversíveis de baixo risco.

CRM

A tela inicial do CRM da IA

O Centro de Comando é seu briefing diário, abra todas as manhãs para ver o que aconteceu, o que precisa de atenção e o que fazer a seguir.

Centro de Comando
Centro de Comando CRMO CRM casa com previsão/taxa de vitória/pipeline alterna, um KPI ponderado-previsão, e uma fila proposta IA com aprovação e dispensa em cada linha.Centro de Comando CRMEspaço de trabalhoPrevisãoTaxa de vitóriaPipelinePREVISÃO · NESSE P$74k87%Propostas de IA · aprovar filaFaça um acordo, Acme 24k.De uma conversa com o compradorAprovarDemitirMova Nimbus → PropostaResposta positiva detectada.AprovarDemitirTarefa de registro: acompanhamento PicoNenhuma atividade em 7 diasAprovarDemitir1TOGGLEPrevisão · Taxa de vitória · Pipeline2AI PROPOSESAcordos, etapas, tarefas.3YOU DECIDEAprovar ou demitir
O verdadeiro Centro de Comando: mude entre Previsão, Taxa de Vitória e Pipeline, e trabalhe na fila proposta da IA, aprove ou descarte os acordos, movimentos de palco e tarefas que sugere.

O que o Centro de Comando mostra

Os números de hoje

Valor pipeline, acordos ganhos/perdidos, novos leads, negócios ativos e tendência de receita, uma imagem do seu estado atual.

O quê? OpsIQ encontrado.

Insights descobertos por IA: negócios parados, contas de risco, novas oportunidades, problemas de qualidade de dados e sinais de mercado.

O que OpsIQ fez

Ações que a IA tomou (em piloto automático) ou propôs (em co-piloto): avanços de fase, atualizações de pontuação, enriquecimento de contato e criação de tarefas.

Precisa de aprovação.

A fila de propostas de IA esperando sua decisão, cada uma mostra a ação proposta, raciocínio e evidência, aprovando, editando ou rejeitando.

Próximos movimentos

Lista Al-Rank do 10 As coisas mais importantes para fazer hoje: seguir um negócio quente, verificar uma conta em risco, pesquisar uma nova pista, etc.

Situação do ajudante

Captura, Data Steward, Inteligência de acordo, treinador de negócios, SDR, Retenção.

Resultados

ROI Tracking: acordos influenciados por IA, tempo salvo, precisão de previsões e comparação com trabalho manual de CRM.

Manhã briefing fluxo de trabalho

1
Leia os números de hoje.

Verifique a tendência de saúde e renda do gasoduto.

2
Limpem a fila de aprovação.

Reveja cada proposta de IA, aprove ações seguras, edite onde for necessário, rejeite sugestões ruins.

3
Verifique o quê? OpsIQ encontrado.

Há novas oportunidades?

4
Trabalhe na próxima lista de movimentos.

A IA classificou-os por urgência e potencial impacto.

Alcançando depois do tempo livre

Cenário:
Você ficou fora por uma semana.
O que fazer:

Abra o Centro de Comando e verifique:1) "O quê?OpsIQ mostra todas as ações da IA durante sua ausência.2"Precisa de aprovação" mostra propostas esperando por sua revisão.3) "O quê?OpsIQ"encontrado" destaca itens urgentes.4Ajuste o intervalo de data do painel para seu período de ausência para ver a tendência.

CRM

Contatos, empresas e negócios

O CRM organiza suas relações comerciais em quatro objetos: Contatos (pessoas), Empresas (organizações), Deals (oportunidades de lucro) e Tarefas (ações de seguimento).

Objetos de CRM
Objetos de CRMUm registro de contato ligado a objetos da Companhia, Negócio e Tarefa em um gráfico conectado.Objetos de CRMEspaço de trabalhoContatopessoa · e-mail · telefoneCompanhiaaccountsCombinado.Oportunidade de receitaTarefaAção de acompanhamento1OBJECTSContatos, empresas, acordos.2LINKEDUm gráfico conectado.3TASKSSeguimentos ligados
Quatro objetos principais (contatos, empresas, negócios e tarefas) ligados em um gráfico de cliente conectado.

Contatos

O que é um contato?

Uma pessoa em seu CRM, pode ser um cliente, uma perspectiva, um parceiro ou uma liderança, contatos têm um e-mail, nome, empresa, etiquetas, ciclo de vida e pontuação.

Encontrar contatos.

Use a barra de busca para encontrar pelo nome, e-mail, empresa ou etiquetas, filtros: fase do ciclo de vida, pontuação, fonte, país, última data de atividade, proprietário atribuído.

Perfil de contato.

Clique em um contato para ver seu perfil completo: informações pessoais, empresa, negócios, atividades, ingressos, chats, visitas ao site, pontuação principal e insights de IA.

Pontuação de calor

A0-100 pontuação calculada a partir de sinais de comportamento: visitas ao site, engajamento por e-mail, interações de bate-papo, histórico de compra e regência.

Empresas.

... mais bilhetes...
Contato-empresa ligando

Contatos são ligados a empresas por domínio de e-mail ou tarefa manual.

Acordos

O que é um acordo?

Os acordos têm um título, quantidade, pipeline, palco, probabilidade de ganhar, data próxima, proprietário designado e contatos associados.

- É provável que ganhe.

Uma porcentagem de chance de ganhar o acordo, definida manualmente ou calculada pela IA com base em seus dados históricos de vitória, impulsiona a previsão ponderada.

Deem saúde

Verde, âmbar em risco ou vermelho, baseado na atividade de retração, duração do estágio e sinais de engajamento.

Tarefas

O que é uma tarefa?

As tarefas têm um título, data de vencimento, prioridade, tipo (chamada, e-mail, reunião, outra) e contato/acordo conectado.

Tarefas geradas por IA

A IA cria tarefas automaticamente quando detecta algo que precisa de atenção: seguir um acordo parado, responder a uma conta em risco, pesquisar uma nova pista.

Encontrando pistas quentes

Cenário:
Você quer ver todos os contatos de alto nível no Reino Unido que não foram contatados recentemente.
O que fazer:

Vá para Contatos, Filtre por: 80, País = Reino Unido, Última atividade > 7 Essas são suas pistas mais negligenciadas, priorizam o alcance.

Criando um acordo de um contato.

Cenário:
Um contato acabou de expressar interesse em seu plano empresarial durante uma conversa.
O que fazer:

Abra o perfil de contato, clique em "Criar acordo". Digite o título do acordo (por exemplo, "Acme Corp - Enterprise Plan"), quantidade, pipeline e palco (por ex., "Qualificado").

CRM

O oleoduto (seu conselho de negócios)

O Pipeline é um quadro visual onde as ofertas passam por estágios da esquerda para a direita, arrastam e soltam cartas para acordos avançados, cada carta mostra o valor do acordo, probabilidade de vitória e estado de saúde.

Pipeline
Oleoduto CRMA tela de oleoduto com dados abertos, valores abertos, previsões ponderadas e estatísticas de acordos atribuídos, um botão de novo acordo, uma fila de aprovação de IA, e a placa de chumbo/qualificado/lança.PipelineEspaço de trabalhoNegócios abertos.23Valor aberto$128k.Previsão ponderada$74kAcordos atribuídos12+ Novo acordoAprovar fila2 para reverLÍDERVolt Inc.$4k.Luz$6k.QUARTONimbus.$30 mil.Pico9 mil dólares.VENCIDOÓrbita$48k1LIVE STATSValor aberto e previsão ponderada2AI QUEUEAprovar acordos propostos.3BOARDArrastar acordos por palco
A verdadeira tela de oleoduto: estatísticas ao vivo (valor aberto, previsão ponderada), uma fila de IA Aprovar para acordos propostos, e a placa de arrastar e soltar.

Usando o tabuleiro de oleodutos

1
Veja seus negócios.

Cada cabeçalho de coluna mostra o valor total das ofertas nessa fase.

2
Arraste para avançar

Arraste uma carta para a próxima etapa, a probabilidade de vitória e conte com a atualização instantaneamente, se o movimento falhar (erro de validação), a carta volta à posição original.

3
Verifique os crachás do cartão.

Emblema verde = saudável (atividade recente, na pista).

4
Clique para detalhes.

Clique em um cartão para abrir o painel de detalhes do acordo com contatos, atividades, breves ações do treinador.

A fila de aprovação

As propostas de IA aparecem na fila de aprovação no topo da página do oleoduto, e cada proposta mostra o que a IA quer fazer, por quê e as evidências.

Aprovar

A ação passa pela Camada de Confiança e está registrada no diário.

Editar

Por exemplo, mude a fase sugerida ou ajuste o valor.

Rejeitar

A IA aprende com rejeições para fazer sugestões melhores no futuro.

- É uma probabilidade de vitória explicada.

A probabilidade de ganhar pode ser definida manualmente ou calculada pela IA. $10,000 Negócio em: 30% A probabilidade contribui. $3,000 à previsão "provável".

Fazendo um acordo com Won

Cenário:
Um cliente assinou o contrato e pagou.
O que fazer:

Arraste a carta de acordo para o palco "Won". OpsIQ Will: (1) Marque o acordo como fechado. (2) Atualize a previsão. (3) Adicione uma atividade de "Won" na linha do tempo. (4) Se configurado, acionar um evento webhook (crm.deal.won). (5) Atualize o ciclo de vida do contato para "Cliente"

- Avistar negócios furados.

Cenário:
Você quer encontrar acordos que estão no mesmo estágio há muito tempo.
O que fazer:

Procure por crachás vermelhos na placa de oleoduto, que não têm atividade há mais tempo do que o limite configurado para apodrecer (configurado em CRM) e clique em cada acordo bloqueado para ver a recomendação do treinador de negócios para reativação.

Posso ter vários oleodutos?+

Sim, vá para a Configuração CRM > Pipelines para criar oleodutos adicionais.

O que acontece quando eu arrastar um acordo para "Perdido"?+

O acordo está marcado como fechado-perdido, você será solicitado por uma razão de perda.CRM.

CRM

-Deal Coaching.

O treinador analisa cada acordo e dá um resumo com estado de saúde, sinais de risco, pessoas-chave, uma lista de qualificação, preparação para reuniões e sugere as próximas ações.

Trato de treinador.
Trato de treinador.Um cartão de acordo com sinais de risco detectados por IA com fontes de evidência, ao lado de uma recomendação de IA e um botão de rascunho de e-mail.Trato de treinador.Espaço de trabalhoAcme Corp ·$24,000Fase: Proposta · 60% VencerSINAIS DE RISCONenhuma resposta em 10 diasO campeão ficou quieto.Concorrente mencionado em bate-papoFontes: bilhete #482 # Conversar 6/12 · E-mail threadAI recomendaRe-engajar o econômicocomprador com uma recapitulação ROIe um 7- Plano de encerramento do dia.Redija o e-mail.1SIGNALSPor que um acordo pode escorregar2SOURCEDCada alegação cita evidências.3ACÇÃOUm clique no próximo passo.
O treinador indica por que um acordo pode escorregar (cada sinal cita sua fonte) e dá-lhe o próximo passo a fazer.

O que o treinador lhe diz

Explicação de saúde

Sinais específicos: dias em estágio, última data de contato, frequência de atividade, menção de concorrentes, padrões de objeção.

Sinais

Cada sinal se conecta à sua fonte (transcrição de bate-papo, ticket, email, atividade).

Campeão e mapa de bloqueio

Quem está ajudando o negócio (campeão) e quem está resistindo (bloqueador), baseado na análise de interação e papéis de contato.

Lista de qualificação

MEDDICC ou BANT checklist (configurado) mostrando quais critérios de qualificação são cumpridos e que estão faltando.

Reunião de preparação

Antes de uma reunião marcada, o treinador gera um breve: agenda, pontos chave a cobrir, perguntas a fazer, riscos para resolver e materiais para preparar.

Responda e ligue para os planos.

Sugeriu próxima mensagem ou roteiro de chamada baseado no estado atual do acordo e interações recentes.

Linha do tempo da evidência

Cada reclamação que o treinador faz links para uma fonte: um número de ingresso, a transcrição do chat, data da atividade ou visita ao site.

Como usar o treinador

1
Leia o resumo.

Abra qualquer acordo e role para a seção de treinador de negócios.

2
Fechar lacunas de qualificação

Se "Comprador Econômico" estiver faltando, planejem identificar e envolver o detentor do orçamento.

3
Aja com sugestões.

O treinador sugere ações concretas, clique para criar uma tarefa, redigir um e-mail ou marcar uma reunião, todas encaminhadas através da fila de aprovação.

Preparando-se para uma grande reunião

Cenário:
Você tem uma reunião com uma perspectiva amanhã sobre um $50,000 Fechado.
O que fazer:

Abra o acordo e leia a seção de Preparação da Reunião: (1) Palavras-chave baseadas em interações recentes. (2) Objeções que levantaram na conversa semana passada. (3) Concorrente que eles mencionaram em uma passagem de apoio. (4) Perguntas para fazer sobre a linha do tempo. (5) Use este resumo para preparar uma agenda focada e baseada em evidências.

Entendendo por que um acordo está em risco

Cenário:
O oleoduto mostra um distintivo vermelho em um acordo que você achou que estava indo bem.
O que fazer:

Pode-se dizer: "Este acordo está em fase de Proposta para 22 dias (limiar: 14 O último contato foi 11 O contato principal abriu um ticket de suporte sobre questões de migração de dados. 5 dias atrás (bilhete #T-892 Agora você sabe exatamente o que consertar.

CRM

Previsão e relatórios

Previsão de placa com uma faixa defensável, mudança de nível de acordo e rastreamento de precisão para que você possa provar e explicar seus números.

Previsão
PrevisãoUm número de previsão trimestral com bandas Commit, Best-Case e Pipeline e uma nota de precisão.PrevisãoEspaço de trabalhoPREVISÃO · NESTE QUARTO$312k87% para o golComprometer-se.Melhor caso.PipelineAl ponderado por saúde e história de negócio · precisão rastreada ao longo do tempo1CATEGORIASCompromete-te a canalizar.2AI-WEIGHTEDPor negócio de saúde3PROVABLEA precisão foi rastreada.
Compromete, no melhor dos casos e oleoduto de uma olhada, com inteligência artificial por acordo de saúde, com precisão rastreada para que você possa defendê-lo.

Categorias de previsão

Comprometido

Negociações com 80% ou maior probabilidade de ganhar. Estas são as suas vitórias mais prováveis, e deve ser a sua receita mínima esperada.

Provavelmente, com a ponderação de IA.

Todas as ofertas abertas ponderadas pela probabilidade de vitória calculada por IA.

Melhor caso.

Todos os acordos abertos com valor total, esta é a receita máxima possível se tudo correr perfeitamente (que raramente acontece).

Intervalo de confiança

Um. 80% A banda de probabilidade mostrando o alcance realístico. $45,000 e $72,000 Este quarto."

O que mudou e por quê?

A previsão inclui a atribuição de mudança semanal. $15,000 O relatório explica exatamente quais acordos causaram a mudança: "O acordo A caiu para o próximo trimestre"$8,000 O acordo B perdeu.$5,000), O negócio C reduzido em valor ($2,000)."

Rastreio de precisão

Previsões MAPE

Erro percentual absoluto, o quão longe as suas previsões foram historicamente 15% significa que suas previsões são tipicamente internas 15% de resultados reais.

Calibração de probabilidade ganha

A pontuação de Brier mede como as probabilidades de vitória batem com os resultados reais 70% Probabilidade de realmente ganhar 70% da época, a calibração é boa.

Fotos semanais

OpsIQ Com o tempo, você pode ver como sua precisão de previsão melhora.

Rolos e avisos

Conversão por estágio

Quantos acordos passam de cada estágio para o próximo. 80% Passe de Qualificado para Proposta, mas apenas 20% Vá de Proposta para Negociação, suas propostas podem precisar de trabalho.

Por fonte, taxa de vitória

Investir mais em fontes de alto lucro.

Per-proprietário performance

Como cada membro da equipe de vendas está se apresentando: acordos ganhos, valor do oleoduto, tamanho médio do negócio, taxa de vitória.

Avisos

Arrombamento (probabilidades pouco realistas), excesso de comprometimento (realisticamente alto) e compromisso em risco (provabilidade alta mostrando sinais de baiagem).

Entendendo uma queda de previsão

Cenário:
Sua previsão trimestral caiu de $180,000 para $155,000 Desde a semana passada.
O que fazer:

Abra a página Previsão e veja "O que mudou." O relatório mostra:$15,000) mudou-se para Lost, competidor escolhido.$8,000 Novo acordo com Gamma LLC.$3,000 A mudança líquida é...$20,000 + $3,000 = -$17,000, explicando a queda de $180K para $163K (com os restantes $8K explicados por ajustes de probabilidade em outros negócios).

CRM

Encontrar novos negócios

O Agente de Perspectiva ajuda a encontrar e pesquisar clientes em potencial, descrever seu cliente ideal, adicionar empresas-alvo, e deixar a IA pesquisar, marcar e desenhar o primeiro contato.

Perspectiva
PerspectivaUma lista de empresas em potencial encontradas por IA com notas, pontuações e um botão de divulgação cada.PerspectivaEspaço de trabalhoPerspectivas encontradas pelo agente da SDRNorthwind Ltd.SaaS · 50 equipe · contratação de apoio88Rascunho de alcanceCobalto MfgManufatura · 200 pessoal74Rascunho de alcanceMesa Retail em São PauloECommerce · 30 pessoal69Rascunho de alcanceVega Health em PortugalCuidados de saúde. 80 pessoal63Rascunho de alcance1FINDFontes de IA miram em contas.2EscoreAjustar e tentar classificar3DRAFTPrimeiro toque escrito para você.
O agente da SDR encontra empresas-alvo, as marca em forma e faz o primeiro contato para sua avaliação.

Uma vez armação

1
Descreva seu cliente ideal.

Vá para CRM Descreva seu perfil de cliente ideal (ICP): indústrias-alvo, tamanhos de empresas, títulos de emprego, foco geográfico, termos de combinação de produtos e pontuação mínima.50-500funcionários dos EUA/Reino Unido, vendendo ferramentas de desenvolvimento, com um vice-presidente de vendas ou chefe de crescimento como o contato principal."

2
Adicione empresas-alvo.

Digite domínios da empresa ou nomes que queira pesquisar, e também pode deixar a IA sugerir empresas baseadas em seu PIC.

3
Reveja os resultados da pesquisa.

A IA enriquece cada empresa com dados disponíveis: tamanho, indústria, tecnologia, notícias recentes e pontuação adequada com explicação.

4
Aprovar a divulgação

Para empresas bem adaptadas, a IA redige uma mensagem personalizada de primeiro toque.

Ajustar a pontuação

Cada perspectiva ganha um0-100 pontuação de ajuste baseada em cinco fatores:

ICP se encaixa

Como a empresa combina com o seu perfil de cliente ideal (indústria, tamanho, localização).

Sinais de urgência.

Há evidências de que precisam do seu produto agora?

Proxy de orçamento

Tamanho da empresa, estágio de financiamento e indicadores de receita sugerem disponibilidade orçamentária.

Produto igual.

Como seu produto é relevante para o negócio deles baseado na indústria e tecnologia.

Suporte adequado.

Se você pode efetivamente servir este cliente (tempo, linguagem, complexidade).

Pesquisando uma empresa-alvo

Cenário:
Você quer avaliar se acme.com vale a pena ser perseguido.
O que fazer:

Adicionar acme.com A IA retorna: 78/100 Razões: B2B SaaS, 120 Os empregados, americanos, recentemente contrataram um vice-presidente de vendas (sinal de urgência), usa o concorrente X (companheiro produto). [email protected] (VP das vendas) Opener redigido refere-se a sua recente contratação e preços visitas de página.

CRM

Sequências de seguimento automáticas

Sequências automatizam o acompanhamento de várias etapas: uma mistura de e-mails, espera, tarefa, chamada e passos webhook que são executados automaticamente após aprovar o envio inicial.

Sequências
Sequências de seguimentoUm fluxo de sequência horizontal: e-mail, espera três dias, e-mails, depois uma tarefa, com detecção de resposta.Sequências de seguimentoEspaço de trabalhoDepois de aprovar o primeiro envio →E-mailIntroduçãoEspere.3 diasE-mailSeguimentoTarefaChamada.Passos podem ser e-mail, espera, tarefa ou webhook.1AUTOMATESeguimento multi-passo2STEPSE-mail: espere, tarefa:3YOU APPROVEO primeiro envio está fechado.
Seguimento automático de várias etapas (e-mail, espera, e-mail e tarefa) que você aprova primeiro e uma resposta para automaticamente.

Como as sequências funcionam

1
Crie uma sequência.

Defina os passos: e-mail, espere 3 dias, e-mails, aguarde 5 dias, tarefa (chamar se não houver resposta), e- mail.

2
Inscreva-se em contatos.

A IA pode também propor inscrição de resultados de prospecção.

3
Execução automática

Se um contato responder em qualquer ponto, a sequência pausa automaticamente.

4
Resultados da trilha

Veja taxas abertas, taxas de resposta, taxas e cancelamentos por passo.

Responda compreensão.

Quando um contato responde, a IA classifica a resposta:

Positivo.

Sequências pausas, tarefa criada para acompanhamento.

Protesto.

Sequência pausas, tarefa criada com detalhes de objeção.

Desobscreva

Quer parar de receber mensagens, o contato é suprimido permanentemente.

Agora não.

Sequência pausas, tarefa de dormir criada.

Pessoa errada.

Sequência parada, contato marcado para revisão.

Suporte

Uma pergunta de apoio, não uma resposta de vendas.

Proteções anti-spam

Manuseamento de Opt-out

Os pedidos de cancelamento são honrados imediatamente e o contato é suprimido de todas as sequências futuras.

Mandar diariamente o boné.

Limite diário de nível de trabalho (padrão: 1,000 e-mails) Previne que a massa envia filtros de spam.

Limite por contato.

Máximo. 1 Mensagem por contato por dia, evita pessoas individuais.

Manuseamento de capsula

Passos que excedem a tampa diária são adiadas para o dia seguinte.

O que acontece se um contato abrir uma passagem de suporte durante uma sequência?+

A sequência se detém automaticamente, o suporte tem prioridade sobre a extensão, e pode ser retomada manualmente após resolvermos o problema.

Posso fazer o teste A/B?+

Não diretamente dentro de sequências, mas você pode criar duas sequências com mensagens diferentes e comparar seus resultados.

CRM

Ferramentas de Crescimento

Uma página sob CRM que detém o motor de crescimento: receita recorrente (MRR/ARR), catálogo de produtos, formulários de captura de chumbo, links de reserva e roteamento de chumbo.

O que vive na página

Receita recorrente

Receita

As assinaturas são agrupadas de pagamentos por plataforma, o ciclo de faturamento é inferido das lacunas de pagamento, e uma assinatura caduca quando um pagamento está atrasado.1.5Os clientes se ligam a CRM Contatos automaticamente quando o livro carrega seu e-mail.

Catálogo de produtos

Catálogo

Uma fonte de verdade para o que você vende, citações pegam o nome e o preço do catálogo, e as citações aceitas são feitas em receita por produto, os produtos nunca apagam.

Formas de captura de chumbo

Captura

Cada formulário recebe uma página hospedada mais um código de incorporação iframe para o seu próprio site.

Links de reserva

Agendamento

Uma reserva cria o encontro, envia um e-mail para a perspectiva uma confirmação e notifica o organizador.

Roteamento de chumbo

Roteamento

As regras do território são executadas primeiro, depois as regras de campo (compatível com um campo como país ou fonte), então o robê em todo seu grupo de representantes. Ele encaminha CONTATOS E DEALS da mesma forma, qualquer que seja o status do acordo: um negócio ganho ainda precisa de um proprietário para atribuição de comissão, responsabilidade e acompanhamento da conta, e no modo de visibilidade do proprietário ou equipe um registro não propriedade é invisível para todos, exceto para um gerente.

Crie seu primeiro formulário.

1
Ferramentas de Crescimento Aberto

Vá para CRM, depois ferramentas de crescimento, e então a seção de captura de chumbo.

2
Diga e escolha campos.

Digite um nome e uma lista de campos separados por vírgulas, por exemplo, nome, e-mail, telefone, mensagem.

3
Compartilhar ou incorporar

Copie o link hospedado para compartilhá-lo em qualquer lugar, ou copie o código de incorporação e cole-o em qualquer página do seu site.

4
Veja os leads chegarem.

Cada submissão é um contato CRM com um formulário. Atividade submetida, notificação do proprietário e roteamento automático.

💡
Páginas de captura pública usam o endereço do seu espaço de trabalho, espaços de trabalho em nuvem usam seu subdomínio designado.opsiq.help), então o link sempre resolve os dados certos.

Proteções incorporadas.

Os robôs vêem sucesso, você não vê nada.

Um campo escondido de honeypot silenciosamente descarta submissões de robôs.

Taxa limitada

Dez submissões por hora. IP Endereço entre formulários e reservas.

O consentimento permanece honesto.

Enviar um formulário não dá consentimento de marketing, só uma caixa de verificação explícita.

Sem reserva dupla.

Uma vaga é revalidada contra uma nova verificação de disponibilidade no momento da reserva.

De onde vem os dados de receita recorrentes?+

Use o mesmo livro comercial que usa na página de vendas, alimentado por conectores de faturamento, use a sincronização do faturamento depois de conectar uma nova plataforma.

Posso usar os formulários sem um site?+

Todo formulário tem uma página hospedada no seu próprio endereço que trabalha independente, com ou sem JavaScript.

CRM

Ensaiando o Hub (SMS e WhatsApp)

Conectar os provedores de SMS e WhatsApp que você usa, marcar um como padrão, e escolher qualquer um deles quando enviar um contato.CRM antes que qualquer portal seja contatado.

Prepare-se.

1
Active o conector.

Na página de conexões, abra o Centro de Mensagens (SMS e WhatsApp) e ative-o.

2
Adicione um provedor.

Na mesma gaveta, ou em ferramentas de crescimento CRM, escolha um portal da lista suspensa (Twilio, Vonage, Termii, Meta WhatsApp Cloud, Infobip e muito mais), cole suas credenciais API e conecte-se.

3
-Ligue o gancho.

Cada entrada do provedor mostra seu próprio webhook. URL Colocá-lo no relatório de entrega do gateway e nas configurações de mensagem para obter o status da entrega e respostas de volta para OpsIQ.

4
Envie de um contato.

Abra um contato e use o botão SMS ou WhatsApp. Se mais de um provedor suporta o canal, um seletor permite que você escolha; caso contrário, o padrão é usado.

O consentimento vem primeiro.

Só consentiu.

Não é consentimento desconhecido, um envio recusa-se a menos que o consentimento SMS seja explicitamente concedido.

Não-contato sempre vence

Uma bandeira sem contato bloqueia todos os canais, não importa o que seja.

Supressão honrada.

Contatos na lista de supressão nunca são enviados.

Recusas nomeiam sua razão

Um envio bloqueado diz exatamente o porquê, para que possa consertar os dados em vez de adivinhar.

Para desenvolvedores: o contrato webhook

URL forma

https://your-address/opsiq/cron/messaging_webhook.php?sk=SITE_KEY&e=ENTRY_ID&t=TOKEN. A ficha de entrada é cunhada quando o provedor está conectado e nunca gira na edição.

Formatos entendidos

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

Efeitos

As mensagens de entrada batem com o contato pelo número de telefone dentro da área de trabalho, aterrissam como uma mensagem.

Modo de falha

Respostas erradas ou perdidas. 403 Cargas desconhecidas são contadas e ignoradas, nunca fatais, então um portal mal configurado não pode quebrar o objetivo.

Quais são os portais suportados?+

Twilio, Vonage, Plivo, MessageBird, Sinch, Infobip, Telnyx, ClickSend, Termii, Africa's Talking, BulkSMS, Textlocal, Meta WhatsApp Cloud, 360dialog, SMSAPI, Gupshup, Kaleyra, D7 Networks, Hubtel, e um webhook HTTPS personalizado para qualquer outra coisa.

As credenciais estão seguras?+

As credenciais são armazenadas criptografadas nas configurações do conector e nunca são ressoadas para o navegador.

A IA pode enviar mensagens?+

Sim, através de ações registradas que exigem confirmação e executar o mesmo portão de consentimento.

CRM

Mantendo e crescendo clientes

Cada conta ganha uma pontuação de risco, uma pontuação em saúde, uma nota de expansão e um livro de sucesso recomendado.

Ciclo de vida
Placa de bicicletaUma placa de ciclo de vida do cliente (A bordo, ativo, em risco, renovação) com barras de saúde em cada cartão de conta.Ciclo de vidaEspaço de trabalhoAbordagemAcme.Saúde 40AtivoGlobex.Saúde 88Initech.Saúde 76AT-RISKSoylent.Saúde 28RENOVAÇÃOUmbra.renova em 12dExpansão + 8 mil dólares1STAGESA bordo da renovação2SCOREDSaúde e expansão3PLAYBOOKRecomendado próximo passo
Os clientes passam por uma abordagem ativa, em risco e renovação, cada um com a sua saúde e expansão.

O quadro de ciclo de vida

Mapa do palco

Placa visual mostrando onde cada conta está: chumbo, perspectiva, oportunidade, cliente, expansão, renovação, risco, churned.

Contabilidade de risco

Cada conta marcada com alto risco de churn, cada mostra o melhor motorista (spin de suporte, inatividade, falha no pagamento) e um jogo de salvamento recomendado.

Oportunidades de expansão

Contas que mostram sinais de disponibilidade para comprar mais: alta utilização, pedidos de recursos, perguntas de planos.

Renovações devidas

Contas com datas de renovação próximas, ordenadas pelo nível de risco e valor da receita.

Como? OpsIQ Detecta risco de churn.

O risco de churn é calculado a partir de múltiplos sinais fundidos:

Sinais de CRM

Saúde, inatividade, perdas recentes, comprometimento em declínio.

Sinais de apoio.

Contagem de bilhetes aberta, picos de volume de ingressos, sentimentos negativos, escaladas.

Engajamento de produtos

Freqüência de login, uso de recursos, visitas de página, API Chamadas.

Sinais de faturamento

Pagamentos fracassados, faturas atrasadas, pedidos de redução, visitas a páginas de cancelamento.

-Jogos.

Salve o jogo

Para contas de risco: falar proativamente, resolver a preocupação, oferecer apoio, aumentar se necessário.

Jogo de renovação

Para as próximas renovações: confirmar satisfação, revisão de uso, valor presente, oferecer incentivo se apropriado.

Jogo de expansão

Para contas prontas para crescer, apresentar opções de atualização, compartilhar histórias de sucesso, demonstrar ROI.

Jogo de adoção

Para subutilizar contas: oferecer treinamento, compartilhar melhores práticas, habilitar recursos que não estão usando.

A ver o que acontece antes de acontecer.

Cenário:
Um cliente que normalmente faz login diariamente não tem sessão iniciada para 2 semanas, e eles abriram 3 Bilhetes de apoio este mês.
O que fazer:

A placa do ciclo de vida sinaliza esta conta como "A risco" com motoristas: inatividade (14 dias desde o último login) e pico de apoio (3x A primeira intervenção pode salvar a conta.

CRM

Mantendo seus dados limpos.

O agente da Data Steward automaticamente encontra e corrige problemas de qualidade de dados: duplicatas, campos desaparecidos, inconsistências e registros obsoletos.

Administrador de dados
Administrador de dadosUma lista de problemas de qualidade de dados (duplicar, faltar, ficar velho, formato), cada um com um clique corrigir ação.Administrador de dadosEspaço de trabalhoDados emitem o agente encontrado.Duplicar[email protected] e [email protected]MesclarDesaparecido.12 Contatos não têm companhia.Enrique.Antigo38 Tratos intocados para 90+ diasRevisãoFormatoNúmeros de telefone dentro 4 FormatosConserte tudo.1CATCHESDupes, lacunas, estagnação2EXPLAINSPor que ele marcou cada3FIXESEm sua aprovação
O agente da equipe mantém seu CRM limpo, encontrando duplicatas, lacunas, registros antigos e formatos ruins, fixando na aprovação.

O que ele pega

Duplicar contatos

Vários registros para a mesma pessoa (por exemplo, [email protected] e [email protected] O mordomo propõe fundi-los.

Dados desaparecidos.

Contatos sem e-mail, negócios sem quantias, empresas sem domínios... sugere preenchimento de fontes disponíveis.

Registros não ligados

Propõe links baseados em domínio e contexto de email.

Inconsistências

Um acordo em "Won" com 20% Provavelmente, um contato marcado "Cliente" sem acordos, uma empresa com indústria desigualizada.

Estágios errados.

Tratos que estiveram na mesma fase por muito tempo ou contatos cuja etapa do ciclo de vida não corresponde à sua atividade.

Como usar

1
Abra a lista de mordomos.

Vá para CRM e encontre a seção Data Steward (ou abra-a da CRM Health).

2
Aprovar correções seguras

Os itens verdes são seguros, duplicatas claras, dados obviamente perdidos, e os aprovam em massa.

3
Revise o resto.

Amber precisa de seu julgamento, possíveis duplicatas com pequenas diferenças, mudanças de palco propostas, ligação entre empresas.

Limpando contatos duplicados.

Cenário:
O mordomo encontrou "John Smith ([email protected]) e "J. Smith ([email protected]": mesmo e-mail, diferentes nomes de exibição.
O que fazer:

O administrador propõe a fusão: manter o registro com mais atividade, fundir os negócios e atividades do outro registro, rever a proposta, ajustar o nome da exibição sobrevivente se necessário e aprovar.

CRM

Construa meu CRM

Construir meu CRM permite descrever sua configuração em inglês. OpsIQ Gera um plano reversível validado e o aplica na aprovação.

Construa meu CRM
Construa meu CRMUma descrição de linguagem natural à esquerda produzindo um plano de CRM gerado de estágios, campos e segmentos à direita.Construa meu CRMEspaço de trabalhoDescreva seus negócios.Somos uma agência de web design.Vendendo retentores mensais eProjetos únicos para pequenosNegócios.Construa meu CRMPlano geradoEstágios: Líder → RetentorTipos de negócio: retentor, projetoCampo: valor mensalSegmentos: SMB, agênciaSequência: a bordoAprovar e aplicar1DESCRIBEInglês puro em2AI PLANSEstágios, campos, segmentos3APPROVEAplicado sem codificação.
Descreva seus negócios em inglês simples; OpsIQ Esboça todo o CRM (estágios, campos, segmentos) e aplica-o na aprovação.

Como funciona

1
Descreva o que você quer

Escreva uma descrição inglesa da sua configuração de CRM, como: "Criar um oleoduto de renovação com etapas, próximas, contatadas, negociadas, renovadas, perdidas, a pontuação aumenta quando veem os preços duas vezes."

2
Revise o plano.

OpsIQ mostra uma prévia do que ele vai criar: pipeline, estágios, probabilidades de palco, regras de pontuação, regras do ciclo de vida.

3
Aplicar

Cada mudança é gravada como um pacote que você pode desfazer em um clique.

4
Volte se necessário.

Se algo não estiver certo, clique em Desfazer para reverter o pacote inteiro.CRM retorna ao seu estado anterior.

O que você pode construir

Pipelines e palcos

Criar pipelines com estágios personalizados, probabilidades padrão e limiares de apodrecimento.

Regras de pontuação

Melhorar as pontuações de liderança baseado no comportamento: "Mais alto quando veem preços", "mais baixo quando visitam a página de carreiras".

Regras de ciclo de vida

Avança automaticamente as etapas do ciclo de vida: "Mova-se para SQL quando eles pedem uma demonstração," "Move-se ao cliente quando o negócio é ganho."

Campos personalizados

Adicione campos aos contatos, acordos ou empresas: texto, número, data, seleção, caixa de seleção, URL, e-mail.

Lista de qualificação

Defina a lista de MEDDICC ou BANT contra as notas do treinador.

Montando um oleoduto de renovação

Cenário:
Você gerencia assinaturas SaaS e precisa de um oleoduto para renovações.
O que fazer:

Tipo: "Criar um oleoduto de renovação. 90 Dias Fora (10%), 60 Dias Fora (25%), contatado (40%), Negociando (60%), Renovado (100%), Churned (0% Defina o limite de decomposição para 14 dias."OpsIQ O oleoduto aparece na sua página do Pipeline imediatamente.

E se eu descrever algo que não é possível?+

Se você pedir algo fora de suas capacidades (por exemplo, "Integrar-se com meu costume API"), ele rejeitará o pedido e explicará o que pode fazer em vez disso.

Posso desfazer as mudanças?+

Cada ação de construção do meu CRM é capturada como um pacote reversível.

CRM

Preparando seu CRM do seu jeito.

Configuração manual de CRM para equipes que preferem clicar sobre digitar, todas as configurações que Build My CRM pode criar também estão disponíveis como campos tradicionais de formulário.

Pipelines e palcos

Criar, renomear, reordenar e excluir pipelines e estágios. Definir probabilidade de vitória padrão por estágio.

Campos personalizados

Adicione campos para acordos, contatos ou empresas. URL Campos personalizados aparecem no perfil do objeto e em filtros.

Lista de qualificação

Defina a lista de verificação que o treinador usa para avaliar acordos, escolha MEDDICC, BANT ou um conjunto personalizado de critérios, cada item pode ser marcado como necessário ou opcional.

Regras de estágio do ciclo de vida

Defina transições automáticas de estágio: quando um contato encontra uma condição (visita preços, submete um formulário, faz uma compra), seu ciclo de vida avança automaticamente.

Regras de pontuação de chumbo

Aumentar ou reduzir as pontuações de chumbo baseado no comportamento.15 Pontos, "Papel Branco Transferido"10 Pontos, "Página de carreiras visitadas"5A contagem mínima pode ser definida (por exemplo, "deve ver o preço pelo menos 2 Tempos ".

Vistas salvas

Crie combinações filter+sort para contatos, acordos ou empresas, compartilhe visualizações com sua equipe, defina uma visão padrão por tipo de objeto.

Adicionando uma regra de pontuação principal

Cenário:
Você quer contatos que vejam sua página de preços duas vezes ou mais para obter uma pontuação maior.
O que fazer:

Vá para a configuração CRM > Regras de pontuação principal. Clique em Adicionar regra. URL contém = "/pricing", Contagem mínima =2, Aumento de pontuação = +20 Da próxima vez que o marcador correr, contatos correspondentes a essa regra terão +20 Para a sua pontuação principal.

CRM

CRM Exame de saúde

CRM Health é uma página auto-diagnóstico que verifica se seu CRM está configurado corretamente e funcionando sem problemas.

Checagem de saúde.
CRM, exame de saúde.Um placar de saúde soa em 92 ao lado de uma lista de verificação da configuração de passagem e aviso.CRM, exame de saúde.Espaço de trabalho92SAUDÁVELEstágios de tubulação configurados.Conector ligado & importaçãoAgentes de IA habilitados.!Sem sequência de seguimento ativa.!12 Contatos faltando companhia1AUDITORIAVerifique sua configuração.2FLAGSO que está faltando?3EscoreUm número total.
Uma auditoria de CRM de uma página: uma pontuação geral na saúde, mais uma lista do que está certo e o que ainda precisa de atenção.

O que ele verifica

Esquema

Se uma migração foi perdida, a CRM Health vai marcar.

Agentes de IA

Todos os agentes de CRM (Capture, Data Steward, Deal Intelligence, etc.) estão registrados e saudáveis.

Rotas

CRM APIrotas e terminais AJAX estão registrados e chamados.

AI ações

O catálogo de ação do CRM está registrado no Registro de Ação, se as ações estão faltando, o CRM Health se cura re-registrando-as.

Dados ao vivo contam.

Contatos, empresas, negócios, tarefas, atividades e eventos úteis para verificar importações e captura de dados em curso.

Depois da verificação de configuração

Após a primeira instalação de CRM, abra o CRM Health e verifique se todos os controles são verdes.

Quantas vezes devo checar a saúde do CRM?+

Verifique após a configuração inicial, depois de grandes atualizações, e sempre que o comportamento do CRM parece errado.

CRM

Conexões CRM para desenvolvedores

O CRM expõe um total REST público. API e os ganchos de saída para caber em qualquer pilha sem exportação manual.

API Endpoints

Autenticação

API Tecla (Autorização: portadora opq_...) com escopo crm.read ou crM.write. /api/v1.php com ação e chave de página.

Contatos

CRM. contacts. list (pesquisa + filtro), cRM. Contacts, detalhes (por ID), crm. contactos, upert (criação ou atualização), crma. contactantes, salvar.

Acordos

CRM. deals. list, cRM. deals, detail, crm. dealls. criar, cmm. dealings. atualizar, crma. dealas. avançar (todos através da Camada de Confiança).

Atividades

CRM. Activities. list (linha de tempo para um contato/acordo), cRM. activities. registro (log uma nova atividade).

Eventos

Crm. events. list (alimentação de mudança durável com cursor since_id), crm-event. catalog (tipos de eventos disponíveis na lista).

Faça um acordo 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
}

Eventos de webhook

opsiq.contact.upsert

Este é o evento de contato para se inscrever, não há nenhum evento criado separado.

contact.lifecycle_changed

Despedido quando um contato se move para uma fase diferente do ciclo de vida.

contact.status_changed

Disparado quando o contato muda.

contact.conversion

Disparado quando uma conversão é gravada contra um contato.

contact.tag_added

Despedido quando uma etiqueta é adicionada a um contato.

contact.erased

Despedido quando um contato é apagado para um pedido de privacidade.

crm.deal.created

Despedido quando um acordo é criado.

crm.deal.stage_changed

Despedido quando um acordo muda para outro estágio.

crm.deal.won

Despedido quando um acordo é fechado como ganho.

crm.deal.lost

Despedido quando um acordo é fechado como perdido.

crm.company.created

Despedido quando uma empresa é criada.

crm.task.created

Despedido quando uma nova tarefa é criada (manual ou gerado por IA).

email.replied

Despedido quando um contato responde a um email de divulgação.

email.bounced

Despedido quando um e-mail de divulgação se rebela.

💡
Chamada. webhooks.events.list A lista completa também aparece na seção Webhooks.

Todos os eventos da Webhook são assinados pelo HMAC e re-tentados em fracasso. URL Em Configurações > Webhooks, ou enquete crm.events.list com since_id para uma alimentação de mudança durável.

Sincronizando contatos CRM para o Google Sheets

Cenário:
Você quer que cada novo contato CRM apareça em uma planilha do Google para sua equipe de marketing.
O que fazer:

Configure um assinante webhook para opsiq. contact. upert. Aponte-o para um aplicativo Web do Google Apps Script ou um Webhook Zapier URL... a carga inclui o nome de contato, e-mail, empresa, pontuação principal e fonte.

CRM

Segmentos

Segmentos economizam filtros de contato reutilizáveis para visualização de CRM, divulgação, promoções e outras ferramentas conscientes do público.

Tela de produto
SegmentosO editor do Segmento combina as condições, mostra a contagem de partidas ao vivo e permite que o operador escolha um filtro ao vivo ou instantâneo.SegmentosEspaço de trabalhoMODELOVivaLOGICTodosMATCHES1,248OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOEstágio do clienteÉ igual ao cliente ativo.RegraÚltima atividade.dentro 30 diasRegraPaísigual ao Reino UnidoRegraAlta intenção.marcar pelo menos 70Regra1CHOOSE MODEVivo ou instantâneo2ADD RULESTODOS OU ALGUMA3REUSECampanhas e CRM
O editor do Segmento combina as condições, mostra a contagem de partidas ao vivo e permite que o operador escolha um filtro ao vivo ou instantâneo.

A Segmento ao vivo Recalcula a partir dos dados atuais sempre que é usado. Esquema preso Congela a lista de membros, o que é útil quando uma audiência não deve mudar após aprovação.

Escolha Todos quando cada condição deve corresponder ou Any Segmentos de sistema podem ser visíveis, mas protegidos da edição normal.

CRM

Marcação de chumbo

Regras de pontuação transformam o comportamento e os sinais de perfil em uma pontuação consistente que as vendas e automação podem usar.

Tela de produto
Marcação de chumboA pontuação do chumbo mostra regras ativas, a janela de rolamento e a mudança positiva ou negativa de pontuação cada regra se aplica.Marcação de chumboEspaço de trabalhoREGRAS12SCORED8,412HOT LEADS286OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOAtividade de preços3+ visitas em 14 dias+20Comprando palavra-chavecontém migração ou empreendimento+15-Apoie o risco.Queixar-se em 30 dias-10Fonte confiável.- Sócia de referência.+121DESCRIBE RULEUse o inglês simples.2REVIEW FIELDSSinal, janela, pontos.3RESCOREAplique-se ao espaço de trabalho.
A pontuação do chumbo mostra regras ativas, a janela de rolamento e a mudança positiva ou negativa de pontuação cada regra se aplica.

O construtor de regras da IA pode transformar uma instrução em inglês numa regra estruturada, e todas as regras devem ser revistas antes da ativação: confirmar a atividade ou palavra-chave, contagem mínima, janela de rolamento e mudança de pontuação.

Regras positivas e negativas podem coexistir. Remarcar espaço de trabalho Após mudanças de regras materiais, os contatos existentes são avaliados sob o novo modelo.

CRM

LEADERboard de vendas

A tabela de classificação compara representantes usando a obtenção de quotas, ganhos receita, comissão e oleoduto aberto para o mês selecionado.

Tela de produto
LEADERboard de vendasA tabela mensal classifica os representantes de vendas enquanto mantém a receita ganha, comissão e o oleoduto aberto visível.LEADERboard de vendasEspaço de trabalhoPERIODJulhoTEAM QUOTA82%VENCIDO£184kOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOAmina.104% Cota... 62 mil libras ganhas.1oBen.88% Cota # 51k ganhou2oRita.76% Cota - £43k ganhou3oAbrir o gasoduto.£312k em toda a equipeRevisão1CHOOSE MONTHCompare um período2CHECK QUOTAAtraição por representante3COACHUse o contexto do gasoduto.
A tabela mensal classifica os representantes de vendas enquanto mantém a receita ganha, comissão e o oleoduto aberto visível.

A obtenção de quotas só é significativa quando cada representante tem uma quota atual e negócios têm o proprietário, a quantia, a moeda e o status próximo.

CRM

Aprovações de acordo

As aprovações exigem a assinatura do gerente antes que acordos de alto valor possam ser marcados.

Tela de produto
Aprovações de acordoA política de aprovação define dois limiares de valor e a fila mostra decisões pendentes, aprovadas e rejeitadas.Aprovações de acordoEspaço de trabalhoPOLICYActivadoWAITING6OLDEST3hOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHONível. 1Acordos de £10,000Gerente.Nível. 2Acordos de £50,000SeniorRenovação da empresa£72,000 · solicitado por BenPendenteProjeto de migração£18,500 · solicitado por RitaAprovado.1SET THRESHOLDS0 desativa uma camada2REQUESTRep apresenta o acordo.3DECIDEMAprovar ou rejeitar
A política de aprovação define dois limiares de valor e a fila mostra decisões pendentes, aprovadas e rejeitadas.

Active a política e defina o nível. 1 e Nível 2 Um limiar de 0 Quando um não-gerente tenta ganhar um acordo em ou acima do limite, OpsIQ cria um pedido de aprovação em vez de mudar silenciosamente o palco.

Gerentes e administradores não são bloqueados pela política, toda decisão deve manter o solicitante, o aprovador, o tempo e a razão da auditoria.

CRM

Regras de ciclo de vida

Regras de ciclo de vida automaticamente movem contatos entre estágios quando seus dados atuais correspondem a uma condição salva.

Tela de produto
Regras de ciclo de vidaRegras do ciclo de vida são avaliadas por prioridade, a primeira regra correspondente muda o estágio de contato.Regras de ciclo de vidaEspaço de trabalhoAtivo7RUNSNoitePRIORITYO mais alto primeiro.OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOLider → Qualificadopontuação ≥ 60 e atividade recentePrioridade 100Qualificado → ClienteO evento de compra existe.Prioridade 90Cliente → ArriscandoNenhuma atividade para 60 diasPrioridade 70Em risco → ClienteNova compra ou resposta.Prioridade 601PICK STAGESDe e para2DEFINE FILTEREstilo Segmento JSON3ORDER RULESO primeiro jogo vence.
Regras do ciclo de vida são avaliadas por prioridade, a primeira regra correspondente muda o estágio de contato.

Cada regra tem uma fonte, estágio de destino, bandeira ativa, prioridade e filtro de segmento.

As regras devem ser compreensíveis mutuamente, evite duas regras ativas que podem mover o mesmo contato em direções opostas durante a mesma corrida, teste o filtro contra um segmento antes de ativá-lo.

CRM

Fluxo de atividade CRM

O fluxo de atividade no espaço de trabalho combina clientes e eventos operacionais para que as equipes possam investigar o que aconteceu sem abrir cada módulo.

Tela de produto
Actividade de CRMO fluxo de atividade inter deixa bate-papo, ticket, e-mail, webhook, eventos de conversão e anomalia com filtros e paginação.Actividade de CRMEspaço de trabalhoAcontecimentos2,804CUSTOMERS1,126ANOMALIES14OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOConversa resolvida.[email protected]· AIAgora.O bilhete respondeu:T-1048 · Faturação4mEvento Inboundsubscription.upgraded12m.ConversãoOrdem #7788 · £14919m.1FILTEREvento e cliente2OPEN CONTEXTPule para o registro.3PAGE RESULTSMantenha as investigações limitadas.
O fluxo de atividade inter deixa bate-papo, ticket, e-mail, webhook, eventos de conversão e anomalia com filtros e paginação.

Filtrar por tipo de evento, data, contato ou estado do cliente (incluindo clientes pagantes), o feed é um modelo lido de atividade gravada, não substitui o ticket fonte, conversa, acordo ou registro de conectores, abra o registro vinculado antes de tomar uma ação sensível.

CRM

Fluxos de trabalho

Fluxos de trabalho respondem a um evento e executam uma série ordenada de ações, incluindo passos atrasados retomados por Cron.

Tela de produto
Fluxos de trabalhoUma execução de fluxo de trabalho mostra seu gatilho, ações completas, atraso de espera e próximo passo.Fluxos de trabalhoEspaço de trabalhoAtivo9RUNNING42FALHA1OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOGatilhocontact.createdComecem.Passo 1Envie e-mail de boas vindasFeito.AtrasoEspere. 2 diasEsperando.Passo 2Criar tarefas de vendas.Próxima1CHOOSE TRIGGERO evento começa a correr.2ORDER STEPSAções e atrasos3MONITORRetomar através de cron
Uma execução de fluxo de trabalho mostra seu gatilho, ações completas, atraso de espera e próximo passo.

Criar um fluxo de trabalho escolhendo o gatilho, adicionando passos em ordem e habilitando-o.

Os modelos de partida incluem boas-vindas após a inscrição, pós-compra, agradecimento e confirmação demo, clonar um modelo, substituir seus destinatários/conteúdo, depois testar com um registro controlado antes da ativação ampla.

Um re-tentar não deve enviar pedidos duplicados de mudança de dinheiro ou criar registros duplicados.

Suporte

Bilhetes

Os ingressos são o seu canal de suporte formal, eles têm departamentos, prioridades, alvos do SLA, anexos, notas internas e conversas completas. OpsIQ admin, formulário de ingresso/embed, ingestão de e-mail, escalada do chat, conector, ou API.

Bilhetes
Detalhe do bilheteUm bilhete com meta-barra lateral (prioridade, departamento, SLA, status), o tópico de conversa, e AI rascunho e ações de reembolso.BilheteEspaço de trabalhoT-12345PrioridadeAlto.DepartamentoContagemSLA3h 12m à esquerda.SituaçãoAbra.Fui cobrado duas vezes pelo meuAssinatura em junho 3.IAConfirmado o duplicado.Cobrar, reembolsar o processamento.AI rascunho de respostaReembolso1THREADEDConversa completa + notas2SLA & ROUTINGPrioridade, Dept, Temporizadores3AI DRAFTResposta escrita para você
Cada bilhete tem sua prioridade, departamento, temporizador SLA e linha completa, e a IA pode redigir a resposta para você.

Como um bilhete flui

1
O bilhete chegou.

Um cliente envia uma mensagem por e-mail, aumento de chat, incorporação de tickets ou o administrador cria um.12345).

2
Triagem

A IA lê o assunto e corpo, atribui prioridade (Baixo/Normal/Alto/Urgente), sugere um departamento, e detecta sentimento.

3
Responda.

Um agente abre o ticket, lê o contexto (perfil do cliente, dados da plataforma de conectores, tickets anteriores) e escreve uma resposta.

4
Feche.

Quando o problema é resolvido, o agente fecha o ticket, o cliente é notificado, se o cliente responder depois de fechar, o ticket reabre automaticamente.

Por-bilhete ações

Mude de departamento.

Mova o bilhete para um departamento diferente (por exemplo, de General para Billing). Útil quando o roteamento inicial estava errado.

Atribuir ao agente

O agente designado vê o bilhete na visão de "Meus ingressos".

Adicione nota interna.

Escreva uma nota visível apenas para o pessoal, use para: investigação, reembolsos, contexto de engenharia, compromissos anteriores, notas internas nunca aparecem aos clientes.

Mesclar as passagens.

Todas as mensagens dos dois ingressos estão preservadas no bilhete que sobreviveu.

Resposta enlatada

Inserir um modelo de resposta pré-escrito. {{customer_name}} e {{ticket_id}} são automaticamente substituídos.

AI reescrever

Deixe o IA melhorar sua resposta, ajustar tom, encurtar/comprir, corrigir gramática ou traduzir.

Mude de prioridade.

A prioridade afeta os tempores de SLA e ordem.

Mudar de status

Definir como Aberto, Pendente, Aguardando o cliente, Resolvido ou Fechado.

Trabalhou como exemplo: lidar com um cliente infeliz.

E-mail do cliente: "Eu fui cobrado duas vezes para minha assinatura"

Cenário:
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.
O que fazer:

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.

Departamentos

Criar departamentos em Configurações > Bilhetes > Departamentos.

Respostas enlatadas

Criar modelos de resposta reutilizáveis em Configurações > Ingressos > Respostas Enlatadas.

Exemplo de modelo de resposta enlatada
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}}

Passagens de fusão

Quando um cliente envia a mesma pergunta várias vezes (via e-mail e bate-papo, ou dois e-mails separados), você pode mesclar as duplicatas. Vá para o ticket, clique em Mesclar, selecione o outro ticket para mesclar. O ticket sobrevivente recebe todas as mensagens de ambos os tickets.

Plataformas conectadas seguem a fusão. Quando os ingressos também estão em uma plataforma conectada (WHMCS, ZendeskO portal do cliente SaaS, a mesclagem também acontece lá: a plataforma funde suas cópias, então o ticket que você mantém mostra a primeira mensagem e respostas do ticket da fusão WHMCS) funde o OpsIQ Os ingressos são da mesma forma.

Prioridade e SLA

Baixo.

Perguntas não urgentes, pedidos de recursos, retorno geral. 24 Horas.

Normal.

Perguntas padrão de apoio. 8 Horas.

Alto.

Impacto no negócio do cliente. 4 Horas.

Urgente.

Serviço desligado, incidente de segurança, perda de dados, erro de faturamento. 1 Hora.

Os cronômetros SLA começam quando o ticket é criado e pausam quando o status é "Esperando no Cliente". Se o alvo do SLA for perdido, o ticket será destacado e opcionalmente aumentado.

Os clientes podem ver notas internas?+

Notas internas são estritamente de funcionários, não aparecem no portal de tickets do cliente, notificações por e-mail ou qualquer superfície voltada para o cliente.

O que acontece quando uma passagem fechada é respondida?+

O ticket automaticamente reabre e retorna para a fila ativa.

Posso trancar um bilhete para evitar mais respostas?+

Use a opção Lock Thread para impedir que clientes e IA adicionem novas respostas, úteis para disputas resolvidas ou investigações fechadas.

Suporte

SLA, fluxo de status e qualidade

A sala de controle para como sua operação de suporte se comporta: políticas SLA com escadas de escalada, calendários de horário de negócios, um fluxo de status forçado, configurações CSAT e os interruptores de recursos empresariais.

Políticas de SLA

Cada novo ticket recebe uma primeira resposta e um prazo de resolução da política ativa mais específica: departamento + prioridade bate o departamento, supera a prioridade, vence o padrão.

Escadas de escada

Instead of one breach action, a policy can define up to six steps: for example warn the assignee at 75% of the window, alert managers at 100%, reassign to a named agent at 150%. Each step fires exactly once per ticket.

Horários e calendários

Com o horário de trabalho, os relógios SLA só queimam durante o tempo de trabalho... então uma passagem aberta sexta à noite não é violada até sábado.

Fluxo de status

Uma matriz que restringe as mudanças de status que os administradores podem fazer, com um pré-definido do Zendesk.

Aprovações

Os agentes pedem a assinatura de um bilhete (reembolsos por cima de um limite, exceções políticas), um aprovador ou qualquer administrador decide com uma nota, os solicitantes nunca podem aprovar seu próprio pedido, enquanto as aprovações não forem apresentadas como uma bandeira na caixa de entrada.

Relações de ingressos.

Link tickets como relacionados, duplicados, pais/filhos ou bloqueio; respostas divididas para um novo ticket vinculado (o inverso da fusão, sem enviar e-mail ao cliente); siga tickets para notificações no aplicativo, e opcionalmente endereços de e-mails CC seguidores em respostas enviadas.

Caixa de entrada ao vivo e colisões

Com a caixa de entrada ativada em tempo real, novos tickets e respostas aparecem para os agentes em segundos através do fluxo de notificação existente.

"Al-saware roteamento"

Regras de roteamento podem combinar com sinais de triagem IA: prioridade, categoria, sentimento e risco de escalada, além de valores de campo personalizados digitados do formulário de solicitação do portal.

💡
Cada empresa desliga, ligando um no Service Studio → Qualidade e Automação é o opt-in; deixando-os desligados mantém comportamento idêntico antes da atualização.
Por que um cliente pode reabrir um bilhete fechado quando minha matriz proíbe fechar →?+

A matriz só governa ações ADMIN, respostas de clientes, e-mails e automação são deliberadamente isentas para que uma política rigorosa nunca possa bloquear os clientes ou quebrar o gasoduto.

Escadas de SLA substituem a ação da velha violação?+

Políticas salvas com uma única ação de violação continuam funcionando sem alterações, uma escada substitui a única ação apenas em políticas onde você define passos.

Suporte

Auto-replicação e escalada de ingressos

A resposta automática permite que a IA responda automaticamente aos novos tickets, e a Escalation muda os tickets para um departamento diferente quando a IA detecta necessidades especializadas, ambas as características funcionam em tickets nativos e tickets criados por email.

Resposta automática
Resposta automática de ticketUm fluxo: novo bilhete, um atraso de dois minutos, resposta IA do conhecimento e contexto, então enviado ou salvo como um rascunho.Resposta automáticaEspaço de trabalhoQuando um novo bilhete chegaNovo bilhete.Qualquer fonteAtraso2 minAI responde.KB + contextoEnviadoou rascunhoSe um humano responder durante o atraso, a resposta automática é cancelada.1DELAYOs humanos têm a primeira chance.2AI REPLIESDo contexto KB +3OR ESCALATERota por intenção
Novos ingressos recebem um pequeno atraso (para que os humanos possam pular dentro), então uma IA responde de seu conhecimento, enviado ou na fila como um rascunho.

Como a resposta automática funciona

1
O bilhete aparece.

Um novo ticket é criado a partir de qualquer fonte (email, chat, portal, API).

2
Resposta de agenda

OpsIQ espera pelo atraso configurado (padrão: 2 Isso dá aos agentes humanos a chance de responderem primeiro.

3
Primeira resposta ganha

Se um agente humano responder durante o atraso, a resposta automática é cancelada.

4
Gerar e enviar

A IA lê o ticket, verifica a base de conhecimento, o contexto do conector e o histórico do cliente, então escreve uma resposta.

Como a escalada funciona

1
Configurar departamentos

Set quais departamentos podem receber escaladas (por exemplo, Billing pode ser aumentado do General, Technical pode ser aumentada do General).

2
Aplique o bilhete.

Antes de responder automaticamente, a IA classifica a intenção do bilhete: faturamento, técnica, reembolso, abuso, etc.

3
Mova se necessário

Se a intenção de passar for igual a um departamento de escalada, o bilhete é movido.

4
Gerar em nova voz

A resposta é gerada usando o conhecimento do departamento de destino e treinamento em IA.

Referência de configurações

Auto-reação ativada

Ligar para permitir a resposta automática da IA.

Departamentos permitidos

Comece com departamentos de baixo risco (General, Vendas) antes de permitir faturamento.

Atraso

Quanto tempo para esperar até que a IA responda (em segundos). 120 segundos (2Ajustado para0para respostas instantâneas.

Atraso de horário

Opcionalmente, atrasei diferentes horas de trabalho vs. horas extras.

Pare na resposta de administrador.

Se um agente humano responder primeiro, cancele a resposta automática.

Escalação habilitada

Habilitar roteamento automático do departamento baseado na intenção de ingresso.

Departamentos de escalada

Para quais departamentos os ingressos podem ser aumentados.

Situação de escalada

Que status definir quando se aumenta (por exemplo, aberto, pendente).

Nota de escalada

Se adicionar uma nota interna explicando a razão da escalada.

Bilhetes criados por e-mail

Os ingressos criados a partir de e-mail (através de pesquisas de correio ou entrega com tubo MX) seguem as mesmas regras de auto-resposta e escalada.

A IA responderá automaticamente às perguntas de cobrança?+

Só se você permitir a resposta automática para o departamento de Billing.

E se a IA der uma resposta errada?+

Se um cliente responder dizendo que a resposta estava errada, um agente humano deve intervir.

Posso rever as respostas antes de serem enviadas?+

Sim, defina o modo de entrega como "Draft" em vez de "Enviar Automaticamente".

Suporte

Portal de ingressos incorporado.

O portal de tickets permite adicionar uma interface de gerenciamento de ticket em qualquer site, os clientes podem ver seus tickets, criar novos e responder, tudo sem entrar no administrador OpsIQ.

Como funciona
Portal de ingressos incorporado.Um portal de suporte embutido em um site mostrando a um cliente seus próprios ingressos e um botão de bilhete novo.yoursite.com/supportCentro de apoio.Novo bilhete.Suas passagens#1042 · Pergunta de reembolsoAbra.#1038 · Ajuda de configuraçãoResolvido#1031 · Cópia da faturaPendente1EMBEDAdicione a qualquer site.2SELF-SERVEOs clientes vêem suas passagens.3NO LOGINIdentidade segura.
Portal de ingressos incorporado.

Três sabores de incorporação

Incorporação em linha

O portal leva a largura total do contêiner.

- Um widget flutuante.

Mostra um botão flutuante que abre o portal de tickets em um painel, similar a um widget de bate-papo.

Autenticado

Os clientes só veem os ingressos.

Instalação

Incorporação de ingressos e bate-papo
<!-- 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.

Geração de símbolos de identidade

Para o modo autenticado, seu servidor assina um token de curta duração com o segredo do site OpsIQ O segredo nunca entra em uma página.

PHP · gerar token de identidade
<?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, gerar símbolo de identidade
// 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 });
}

Características de widget

Lista de ingressos

Uma lista de buscas com o status filtrado, e um "esperando" destaca os ingressos que a equipe respondeu.

Conversa fiada.

Visão completa de conversação com texto rico, anexos e horários.

Rascunho de auto- economia

As respostas dos clientes são salvas automaticamente, então não perdem o trabalho se forem embora.

-Enquete ao vivo.

O widget pesquisa novas respostas a cada 12 segundos.

Resolva/ reabra

Os clientes podem resolver ou reabrir seus próprios ingressos com um clique.

Notas internas de funcionários nunca são mostradas aos clientes na entrada.
Suporte

Conversar com a caixa de entrada.

A caixa de entrada do Chat é onde sua equipe gerencia conversas ao vivo com clientes, mostra bate-papo ativo, conversas atribuídas, conversas manipuladas por IA e histórico arquivado.

Conversar com a caixa de entrada.
Conversar com a caixa de entrada.Uma caixa de entrada para o agente de três painéis: lista de conversação, a conversa ao vivo com um chip de inteligência artificial e um painel de contexto visitante/CRM.Conversar com a caixa de entrada.Espaço de trabalhoJD.Jane.Onde está a minha ordem?MOMensah.Pergunta de cobrançaRTRita.AI manuseouOnde está o meu pedido?Enviado hoje · UPSAI rascunho prontoResponda...VISITANTES- Jane Doe.EUA · Cromo3 Ordens passadasLTV $480CRMEstágio: Cliente1UNIFIEDCada bate-papo ao vivo2CONTEXTVisitante + painel CRM3AI ASSISTRascunho e reescrita
Uma caixa de entrada para cada bate-papo ao vivo, lista de conversação, o tópico com AI rascunho no toque, e total visitante + contexto CRM.

Gerenciando conversas.

Conversas ativas.

Conversas em andamento, ponto verde = cliente digitando ou recentemente ativo.

- AI-handled.

Conversas onde a IA está respondendo, pode assumir a qualquer momento clicando em "Junte-se".

Atribuído a mim

Conversas especificamente atribuídas a você.

Esperando.

Conversas onde o cliente espera uma resposta.

Arquivo

Conversas concluídas, pesquisadas por palavra-chave, data e cliente.

Passagem de IA para humano

Quando você assumir uma conversa da IA, siga estas três regras:

1
Saudações, pessoalmente.

"Oi, aqui é Sarah da equipe de apoio."

2
Contexto de referência

Mostrar que leu a conversa. "Posso ver que perguntou sobre o seu status de pedido."

3
Ajustar as expectativas

Diga ao cliente o que acontece depois. "Estou investigando isso agora e terei uma resposta para você em alguns minutos."

Ligando a IA/desligando por conversa

Quando a IA está ligada, a IA gera respostas, quando desligada, só agentes humanos podem responder, e ela lembra do contexto da conversa mesmo quando desligadas e de volta.

Modo de afastamento / fora de horas

Configure o horário de trabalho em Configurações: (1) Continue respondendo aos clientes, (2) Mostre uma mensagem "afastada" e crie um ticket para acompanhamento, ou (3) Desativar o chat e mostrar o formulário do ticket, escolher o comportamento que se encaixa no seu modelo de suporte.

Manejando conversas difíceis.

1
Fique calmo.

Não se compara com a intensidade emocional do cliente, reconheça sua frustração sem ser defensiva.

2
Recolha fatos

Antes de responder, reúna as informações relevantes: detalhes do pedido, status da conta, ingressos anteriores.

3
Escale cedo.

Se a situação envolve reembolsos, ameaças legais, abuso ou segurança, se torna membro sênior do time em vez de tentar lidar com isso sozinho.

Posso ter uma conversa de equipe (agente para agente)?+

Use notas internas para se comunicar com outros agentes, mas essas notas nunca são visíveis para o cliente.

O que acontece quando eu fechar uma conversa?+

Se o cliente enviar uma nova mensagem depois, uma nova conversa será criada.

Suporte

Canais de mensagens

Conecte WhatsApp, Facebook Messenger, Instagram DM, Telegram e LINE para que as mensagens que os clientes já enviam você cheguem na mesma caixa de entrada do seu chat no site, respondido pelo mesmo assistente de IA.

Cada canal se comporta de forma idêntica uma vez conectado: uma mensagem do cliente torna-se uma conversa na caixa de entrada do Chat, seu assistente de IA atende usando o mesmo conhecimento e instruções que seu chat no site, e qualquer agente pode assumir.

O que é a conexão?

Facebook Messenger.Instagram

Abra os conectores → Facebook Messenger & Instagram DM, clique em Connect, entre com a conta do Facebook que gerencia sua página e escolha a Página. O Instagram vem com ela quando sua página tem uma conta profissional do Instagram vinculada.

WhatsApp

Um clique onde seu provedor oferece: abra o conector do Hub de Mensagens e use o Connect WhatsApp, depois siga a inscrição guiada da Meta para pegar ou criar seu número de negócios do WhatSApp.20Gateways.

Telegrama

Mensagem @BotPai no Telegram, envie/newbot,Escolha um nome e um nome de usuário terminando em "bot", e cole o símbolo que ele lhe dá no conector do Telegram.OpsIQRegistra o webhook para você.

LINHA

Criar uma mensagem API Canal na Developers.line.biz, colar o segredo do canal e token de acesso, em seguida, copiar o webhook URL mostrado em OpsIQ Para a linha e desliga suas próprias respostas automáticas.

SMS

Adicione um provedor (Twilio, Vonage, Termii e outros) no Centro de Mensagens com suas credenciais e número do remetente.

Cada conector mostra suas próprias instruções passo a passo dentro da gaveta, incluindo exatamente o que copiar e onde.

Ligando um canal

Ligar um canal não o inicia. Configurações → Conversa do Cliente → Avançado → Mensagens de CanaisCada canal tem seu próprio interruptor de resposta automática, então você pode pilotar em um antes de abrir o resto.

1
Conecte o canal.

Em Conectores, usando as instruções na gaveta do conector.

2
Teste a conexão.

Faz uma ligação para o provedor e diz o que há de errado se algo estiver.

3
Activar canais de mensagens

Configurações → Client Chat → Avançado. Ligue o interruptor mestre, depois o canal.

4
Envie uma mensagem para si mesmo.

De outra conta, envie mensagem para sua página, número ou bot, deve aparecer na caixa de entrada do Chat em segundos e receber uma resposta da IA.

Responda janelas.

Plataformas de mensagens limitam quanto tempo um negócio pode responder depois que um cliente escreve.OpsIQmostra o tempo restante em cada conversa e aplica a regra para você.

WhatsApp

24Depois disso, você só pode enviar um modelo aprovado, que você configura na mesma guia avançada.

Mensageiro e Instagram

24horas para respostas normais, agentes podem responder até7dias depois, sob a mesada de agente humano da Meta.

Telegrama, linha, SMS

Sem janela de plataforma.

⚠️
Se uma resposta falhar porque a janela fechou, a conversa mostra o porquê.OpsIQLimite.

Perguntas comuns

Os clientes vêem que uma IA respondeu?+

Só se você contar a eles, a resposta vem da sua página, número ou bot exatamente como uma resposta humana.

Um agente pode assumir a conversa no meio?+

Abra a conversa na caixa de entrada do Chat e clique em "Junte-se", a IA para, você digita, e o cliente vê uma linha contínua no lado deles.

E se eu desconectar um canal?+

O histórico da mensagem é mantido, novas mensagens simplesmente param de chegar e a plataforma é mandada parar de enviá-las.

Dois espaços de trabalho podem usar a mesma página do Facebook?+

Não, uma página pertence a um espaço de trabalho de cada vez, conectando-o em outro lugar, e o primeiro local de trabalho para de receber mensagens, então desconecte deliberadamente ao invés de se reconectar em outro lado.

Suporte

Conversas de verdade.

Esses exemplos mostram como uma IA de cliente bem treinada deve lidar com cenários comuns, usá-los para testar seu treinamento e identificar lacunas.

10 Exemplos de conversação

1Retorno de clientes perguntando sobre o pedido

Cenário:
Oi, eu fiz um pedido.3Há dias e ainda não recebemos nenhuma notificação de envio.5523.
O que fazer:

A IA deveria: (1) Procure ordem #ORD-5523 através do conector. (2) Informe o status atual e informações de rastreamento, se disponíveis. (3) Se a ordem for adiada, reconheça o atraso e forneça uma linha do tempo estimada. (4) Não invente um status de transporte se o conector não tiver.

2Perspectiva perguntando sobre preços

Cenário:
Quanto custa o seu plano Pro?
O que fazer:

A IA deveria: (1) Resposta da base de conhecimento com preços atuais. (2) Explique a diferença entre faturamento mensal e anual. (3) Se a resposta não está na base de conhecimento, diga e ofereça-se para conectá-los com vendas. (4) Não invente preços que não estão na base de conhecimento.

3Cliente irritado exigindo reembolso.

Cenário:
Seu produto não funciona e quero meu dinheiro de volta agora.
O que fazer:

A IA deveria: (1) Reconheça a frustração calmamente. (2) Peça o número do pedido ou e-mail da conta. (3) Explique o processo de reembolso. (4) Criar um ticket de suporte ou aumentar para um agente humano. (5) Não prometa um reembolso, que requer aprovação humana.

4Caso duplo de billing edge

Cenário:
Meu banco mostra duas acusações. $29.99.
O que fazer:

A IA deveria: (1) -Reconheça a preocupação. (2) Recolha os detalhes relevantes (e-mail, datas das acusações). (3) Explique que questões de faturamento requerem revisão humana. (4) Criar um bilhete do departamento de faturamento com os detalhes. (5) Defina prioridade para alta.

5Cliente multilingue.

Cenário:
Bonjour, je voudrais savoir si vous livrez na França?
O que fazer:

A IA deveria: (1) Responda na linguagem do cliente se essa língua for suportada. (2) Responda à pergunta sobre a entrega para a França da base de conhecimento. (3) Se o idioma não for suportado, responda no idioma padrão e mencione quais idiomas estão disponíveis.

6Conversa pós-hora

Cenário:
Preciso de ajuda com minha conta.
O que fazer:

A IA deveria: (1Se configurado para IA após horas, responda e ajude.2Se depois do expediente criar ingressos, diga: "Nossa equipe está offline, eu criei uma passagem de suporte para você e alguém vai acompanhar durante o horário comercial."3) Fornecer o número do bilhete.

7Comprador de comparação pré-compra

Cenário:
Como seu produto se compara com o [Competidor X]?
O que fazer:

A IA deveria: (1) Descreva os pontos fortes do seu produto. (2) Não fale mal do competidor. (3) Se houver uma página de comparação na base de conhecimento, ligue-se a ela. (4) Se o cliente perguntar sobre as características que você não tem, seja honesto.

8O cliente quer uma recomendação.

Cenário:
Eu dirijo uma pequena loja online com cerca de 100 Que plano é certo para mim?
O que fazer:

A IA deveria: (1) Faça perguntas esclarecedoras se necessário (por exemplo, quais as características mais importantes). (2) Recomende um plano baseado na base de conhecimento. (3) Explique por que esse plano se encaixa nas necessidades deles. (4) Mencione que eles podem começar com um plano menor e atualizar mais tarde.

9Cliente tentando obter um desconto não autorizado

Cenário:
Eu vi online que você dá 50% Posso ter um?
O que fazer:

A IA deveria: (1) Explicar educadamente as promoções atuais se existirem. (2) Não crie ou prometa descontos que não estão na base de conhecimento. (3) Se o cliente persistir, ofereça-se para conectá-los com a equipe de vendas.

10 O cliente precisa de ajuda com um recurso.

Cenário:
Como exporto meus dados?
O que fazer:

A IA deveria: (1) Fornecer instruções passo a passo da base de conhecimento. (2) Inclua a localização exata da página e do botão. (3) Se o recurso requer um plano específico, mencione isso. (4) Se o recurso não existe, seja honesto e sugira alternativas.

Suporte

Roteamento de bate-papo e escalada

Quando uma conversa ao vivo precisa de uma pessoa real, a IA responde duas perguntas: qual time é o dono dessa conversa e quem deve ser informado.

Escolhendo quais departamentos a IA pode usar

Os departamentos movidos para a direita são os únicos que a IA pode encaminhar ou abrir ingressos, tudo o que restar à esquerda é invisível, mesmo que o departamento exista e esteja com pessoal, comecem estreitando e adicionando departamentos como você os atende.

💡
Se nenhum departamento estiver habilitado, OpsIQ Trate isso como uma rede de segurança, não uma escolha de configuração.

Quem recebe a escalada

Essa é a parte que a maioria das pessoas espera configurar e não precisa OpsIQ Você gerencia essa lista uma vez, na página da Equipe e Departamentos, e ambos a escalada de ingressos e o aumento de bate-papo seguem.

Membros da equipe de departamento

Cada administrador ativo do departamento recebe sua própria cópia, contas suspensas e deficientes são ignoradas.

Administrador primário

Usado quando nenhum membro da equipe está ligado, então uma escalada ainda alcança alguém.

Ninguém se apega

O painel de roteamento marca o departamento em vermelho e a IA não diz ao visitante que um humano foi notificado.

⚠️
O endereço de e-mail do departamento é deliberadamente nunca usado como destinatário, esse endereço é a caixa postal de entrada do departamento, o correio que chega é comparado com os bilhetes abertos, uma escalada enviada lá seria usada como novo bilhete em vez de chegar a uma pessoa.

O departamento de captura de todos.

Exatamente um departamento carrega a marca de "pegar tudo", recebe conversas que a IA não pode confiar no lugar, e é um último recurso em vez do caminho normal.

1
Os sinais claros vencem.

A redação de faturamento vai para um departamento de cobrança, hospedagem e formulação de erro para uma técnica, comprando texto para vendas.

2
O classificador de IA tenta a seguir.

Se palavras-chave são inconclusivas, o modelo lê a conversa e escolhe dos departamentos habilitados.

3
Então o pega-tudo

Só quando os dois não aparecem, o departamento de captura recebe a conversa.

4
O guarda de vendas.

Se a catch-all é um departamento de vendas e o visitante não mostrou sinal de compra, OpsIQ em vez disso, procura um apoio ou departamento técnico, então perguntas comuns de suporte não se acumulam nas vendas.

O que o visitante é dito

Se o e-mail de escalada for enviado, a IA diz ao visitante que a equipe foi notificada, se não puder sair, a AI diz algo honesto e convida-os a deixar a mensagem na conversa, não alegará que um humano foi alertado quando nenhum e-mails foi enviado.

O painel diz "Ninguém para notificar" de um departamento.+

Abra a equipe e os departamentos, anexe pelo menos um administrador ativo, depois recarregue a página de configurações.

As escaladas de bate-papo podem ir para outro lugar além do time?+

Um endereço personalizado previamente guardado para um departamento ainda substitui a lista de equipes, novas configurações devem anexar pessoas ao departamento, então há um único lugar para manter.

Por que minha pegada foi ignorada?+

Verifique se é um departamento de vendas. OpsIQ rotas para um departamento de suporte ou técnico de propósito.

Suporte

E-mail caixas de correio e rascunhos

OpsIQ Ele também fornece respostas com desenho de IA para revisão humana.

E-mail
E-mail para o bilhete.Um. IMAP Caixa de correio da esquerda alimentando e-mails recebidos em um ticket com uma resposta na direita.E-mailEspaço de trabalho[email protected] · IMAPPedido de reembolso.[email protected]Não é possível entrar[email protected]Cópia da fatura[email protected]Bilhete #1042Do e-mail · BillingEu gostaria de um reembolso para oCarga duplicada...AI rascunhoReveja e envie resposta.1INGESTIMAP Encaminhando2TO TICKETSRodopiado automaticamente.3AI DRAFTSRespostas para revisão
Mande um e-mail. IMAP (ou encaminhamento), transforme cada um em uma passagem roscada, e deixe a IA redigir a resposta para revisão.

Conectando uma caixa de correio

Protocolo

IMAP (a maioria dos fornecedores), Gmail API (Google Workspace), ou Microsoft Graph (Outlook 365).

- É preciso.

Host, porto, criptografia (SSL/TLS), nome de usuário, senha ou senha do aplicativo, pasta (normalmente INBOX).

Mapeamento do Departamento

Mapeie a caixa postal para um departamento de ingressos. [email protected] Criar ingressos no departamento de "Apoio".

Configuração do Gmail (passo a passo)

1
Activar 2- Verificação de passos

Vá para a conta do Google > Segurança > 2-Passar a verificação e habilitá-lo.

2
Criar uma senha do aplicativo

Vá para o Google Conta > Segurança > Senhas do aplicativo. Selecione "E-mail" e "Outros (OpsIQ"Copiar o 16- Senha de caráter.

3
Entre em OpsIQ

Vá para o e-mail > Caixas de correio > Adicionar. imap.gmail.com, porto: 993, encriptação: SSL, nome de usuário: [email protected], senha: a senha do aplicativo.

4
Teste

Clique em conexão de teste. OpsIQ Começaremos a fazer pesquisas para novos e-mails no intervalo configurado.

Outlook 365configuração

1
Cheque. IMAP está habilitado

EmOutlookconfigurações > Mail > Sincronize e-mail, certifique-seIMAPestá habilitado.

2
Use senha do aplicativo ou autorização moderna.

Se o MFA estiver ativado, crie uma senha de aplicativo.

3
Entre em OpsIQ

Host: outlook.office365.com, porto: 993, encriptação: SSL, nome de usuário: [email protected].

cPanel Configuração do e-mail

1
Encontre as configurações de IMAP

Em cPanel > E-mail contas, clique em sua conta de e-mail para IMAP ajustes.

2
Entre em OpsIQ

Host: geralmente mail.yourdomain.com ou seu servidor hostname, porto: 993 (SSL) ou 143 (STARTTLS), nome de usuário: endereço completo de e-mail.

AI e-mail rascunhos

Quando a resposta automática é definida como modo "Draft", o IA gera rascunhos de respostas que aparecem na fila dos Drafts.

Revisão

Leia o rascunho e verifique se há precisão.

Editar

Modifique o texto, tom ou conteúdo antes de enviar.

Enviar

Aprove o rascunho e envie como resposta por e-mail.

Descarte.

Apague o rascunho se não for apropriado.

Enviar automaticamente

Se a confiança é alta o suficiente e o envio automático estiver ativado, os rascunhos são enviados automaticamente após um atraso configurável.

Por que e-mails não são convertidos em ingressos?+

Cheque: (1) Procure por status verde no e-mail > Caixas de correio. (2) A pesquisa por e-mail requer cron. (3) O e-mail está sendo filtrado ou movido para outra pasta além do INBOX?

Posso usar várias caixas de correio?+

Cada caixa de correio pode ser mapeada para um departamento diferente. [email protected] Vai para o Apoio, [email protected] Vai para Billing.

Suporte

Satisfação do cliente (CSAT)

A CSAT mede a satisfação com o ingresso e o bate-papo, revela respostas infelizes e compara IA e resultados humanos.

Tela de produto
Satisfação do clienteA página da CSAT combina cartões de pontuação, acompanhamento do detractor, comentários, quebras de departamento e agente, e feedback de bate-papo.Satisfação do clienteEspaço de trabalhoRESPOSTAS386AVERAGE4.6POSITIVE91%OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOSeguimento do detractor12 Respostas avaliadas.1–2RevisãoPesquisa de ingressos.Enviado 24h Depois de fecharAutomático.Retorno do bate-papoAI 4.5 · Humano 4.7Comparar- Vista de agente.Pontuação e contagem de respostasTreinador.1WATCH AVERAGEUse tendência, não uma pontuação.2FOLLOW DETRACTORSLeia o comentário.3COMPARE FAIRLYAI e humano
A página da CSAT combina cartões de pontuação, acompanhamento do detractor, comentários, quebras de departamento e agente, e feedback de bate-papo.

As pesquisas de ingressos são programadas após o encerramento (normalmente 24 Uma resposta positiva é uma pontuação de4ou 5Use a fila de detratores para marcar 1 ou2e leia o bilhete/conversa antes de contatar o cliente.

O feedback do chat é relatado separadamente para conversas resolvidas por IA e manuseadas por humanos, tamanhos de amostra baixos não devem ser usados para classificar agentes ou modelos.

Suporte

Equipe, transmissões de e-mail.

A página da Plataforma de Email permite que um operador autorizado envie uma mensagem única para todos os agentes ativos, agentes selecionados ou um departamento e reveja o histórico.

Tela de produto
Plataforma de e-mailO compositor de e-mail mostra o público, assunto, mensagem e histórico de entrega.Plataforma de e-mailEspaço de trabalhoRECIPIENTES12DELIVERED11FALHA1OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOAudiênciaTodos os agentes ativos.SelecionadoAssuntoJulho apoio rotaPronto.MensagemAgenda e notas de escaladaPronto.HistóriaTransmissões anteriores e resultadoVista1CHOOSE PEOPLETodos, selecionados ou equipe.2WRITE CLEARLYAssunto e mensagem3REVIEW HISTORYConfirmar resultado
O compositor de e-mail mostra o público, assunto, mensagem e histórico de entrega.

Esta página é para mensagens operacionais internas, não marketing de clientes, escolha o menor público correto, nomes e endereços de visualização, então envie.

Suporte

Caixas de correio, entrega e e-mail

Configurar como OpsIQ envia e-mails, transforma mensagens em tickets e prova que o domínio de envio está pronto.

Tela de produto
E-mail de configuraçãoAs configurações de e-mail combinam roteamento, identidade, ingestão da caixa postal, cheques de entregabilidade e e-mails de teste.E-mail de configuraçãoEspaço de trabalhoCONTÍNUOSMTPMAILBOXES3DOMÍNIOPasso.OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOConector preferidoSMTP Conector de provedoresConfiguradoDa identidade.Support <[email protected]>Pronto.IMAP Caixa de correio.[email protected]· INBOX- Poluindo.EntregabilidadeServiços de SPF · DKIMPasso.1CHOOSE OUTBOUNDConector ou SMTP2CONNECT INBOXIMAP Ou cachimbo3ENSAIOEnvie e verifique.
As configurações de e-mail combinam roteamento, identidade, ingestão da caixa postal, cheques de entregabilidade e e-mails de teste.

E-mail de saída

Administradores podem escolher o conector de e-mail preferido. OpsIQ Regressa à configuração. SMTP Defina o nome/endereço, envie um teste e verifique o endereço. 24- métricas de sucesso/fracasso.

Caixas de correio

Um. IMAP caixa de correio precisa de um nome, endereço de e-mail, departamento de destino, host, porto, modo de segurança, nome de usuário, senha, pasta, estado de pesquisa e escolha certificado-validação. - Pesquisa agora. para verificar a ingestão antes de esperar por Cron.

Tubulação instantânea

Um servidor remoto pode postar a mensagem bruta no terminal de entrada protegido usando seu token.

Entregabilidade

O controle SPF/DKIM/DMARC é uma evidência consultiva para o domínio configurado.

Suporte

Suporte Portal Studio

Suporte ao Portal Studio projeta e publica a experiência de suporte voltado para o cliente sem precisar de ativos externos de imagem.

Tela de produto
Suporte Portal StudioPortal Studio mostra uma visualização sensível ao lado do tema, navegação, conhecimento, ticket, assistente, formulário, rodapé e controles CSS.Suporte Portal StudioEspaço de trabalhoTEMPLATEModerno.ANTERIORÁrea de trabalhoESTADORascunhoOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOTemaCores de marca e tipografiaEditarNavegaçãoConhecimento, ingressos, assistente.EditarFormulário de passagemCampos, roteamento e cópiaEditarPublicarValidar e fazer viverRevisão1CHOOSE TEMPLATEComece da estrutura.2PREVIEW SIZESDesktop para celular3PUBLISH SAFELYReveja e solte.
Portal Studio mostra uma visualização sensível ao lado do tema, navegação, conhecimento, ticket, assistente, formulário, rodapé e controles CSS.

Use o modelo como ponto de partida, então configure tema, layout, navegação, pesquisa de conhecimento, formulário de ticket, assistente, rodapé, marca, comportamento do ticket, configuração personalizada CSS e geral.

Suporte

Ganhos de conhecimento

A fila de conhecimento coleta perguntas aos clientes que a IA não poderia responder com confiança para que a equipe pudesse melhorar a cobertura.

Tela de produto
Ganhos de conhecimentoA fila de espera está falhada ou perguntas de baixa confiança e rastreia se a equipe os resolveu.Ganhos de conhecimentoEspaço de trabalhoOPEN GAPS28REPEATED9RESOLVED116OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOLimites migratóriosPerguntado 14 TemposAlto.Suporte de fim de semanaPerguntado 8 TemposMédio.Reembolso timingPerguntado 6 TemposMédio.API regiãoPerguntado 3 TemposBaixo.1REVIEW QUESTIONVeja o contexto da conversa.2CHOOSE FIXArtigo ou prompt3RESOLVEVerifique a próxima resposta.
A fila de espera está falhada ou perguntas de baixa confiança e rastreia se a equipe os resolveu.

Abra uma lacuna para ler a pergunta original e conversar próximo, então escolha o correto: atualizar um artigo existente, criar um novo artigo de conhecimento, adicionar um fato comercial, dados corretos do conector ou mudar instruções de escalada.

Suporte

Administração da página de status

A página de administração do status comunica saúde e incidentes usando componentes, estados atuais e atualizações.

Tela de produto
Administração de statusA administração de status lista componentes e incidentes para que os operadores possam publicar informações claras e com o tempo.Administração de statusEspaço de trabalhoOVERALLOperacionalCOMPONENTES7INCIDENTS1OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOSiteOperacionalVerde.APIDesempenho degradadoVeja.E-mail ingestãoOperacionalVerde.Incidente atualAPI Investigação de latênciaAbra.1UPDATE COMPONENTEscolha o estado de clareza.2POST INCIDENTAtualizações com data marcada.3RESOLVEFeche com resumo.
A administração de status lista componentes e incidentes para que os operadores possam publicar informações claras e com o tempo.

Quando um incidente afetar os clientes, publique um aviso inicial, adicione atualizações com o tempo marcado como fatos mudam e feche com um resumo conciso de resolução. OpsIQ e registros do servidor.

IA

Prepare seu IA.

AI Configuration é onde você escolhe seu fornecedor de IA, modelo e controle de custos. OpsIQ Claude.Anthropic), GPT-4o (OpenAI), Gemini Você pode usar o seu próprio API Chave (BYOK) ou AI gerenciada se disponível em seu plano.

Prepare a IA.
Configuração da IAUm painel de configurações de IA: um Managed-AI / BYOK provedor, um seletor de modelos e um medidor mensal de orçamento.Configuração da IAEspaço de trabalhoConfiguração da IAFornecedorAI GerenciadoSua chave.BYOK)ModeloClaude · balanceadaOrçamento mensal de IA62%1TWO MODESAI gerenciada ou BYOK2PICK A MODELVelocidade vs profundidade3BUDGETSToken caps e controle de custos
Escolha IA gerenciada ou sua própria chave, escolha um modelo para velocidade vs profundidade, e limite mensal de gastos com um orçamento simbólico.

Escolhendo um provedor

Claude.Anthropic)

Forte raciocínio, cuidado com os fatos, bom em seguir instruções complexas.4-20250514, Claude...3.5 Melhor para: conversas de apoio, perguntas técnicas, análise detalhada.

GPT-4o (OpenAI)

Modelos: gpt-4o, gpt4o-mini, melhor para respostas rápidas, escrita criativa, perguntas de conhecimento amplo.

Gemini (Google)

Bom em perguntas factuais, suporte multi-linguagem.gemini-2.0-Flash,gemini-1.5 Melhor para apoio multi-linguagem, buscas factuais.

Azul escuro (xAI)

Respostas rápidas e concisas.3O melhor para respostas rápidas, tom casual.

BYOK vs AI Gerenciado

BYOK (Traga sua própria chave)

Você fornece o seu próprio API Você paga o provedor diretamente, controle total sobre a seleção e uso do modelo.

AI Gerenciado

AI é fornecida como parte de seu OpsIQ - Plano. API Uso é medido com o saldo de crédito da IA do seu plano.

Montagem passo a passo

1
Vá para a configuração da IA.

Na administração de OpsIQ, navegue até configurações > AI Configuração.

2
Selecione o provedor

Escolha seu fornecedor de IA na lista.

3
Entre. API chave

Se estiver usando BYOK, entre no seu API Para a IA gerenciada, isso é feito automaticamente.

4
Escolha o modelo.

Modelos menores são mais rápidos e mais baratos, modelos maiores dão respostas de melhor qualidade.

5
Ligação de teste

Clique em "Teste conexão" para verificar o API A chave e o modelo estão funcionando.

6
Salve

Clique em Salvar para ativar sua configuração de IA.

Controle de custos

Orçamento mensal

Quando o orçamento é alcançado, a IA apresenta graciosamente degradar (respostas mais curtas, sem resposta automática) ao invés de parar completamente.

Limite de fichas por conversação

Máximas fichas por conversa, evita que conversas fugitivas consumam créditos excessivos.

Alerta de equilíbrio baixo.

Quando o seu saldo de crédito da IA cair abaixo do limite (padrão: 50,000 tokens), um aviso aparece no administrador.

Configuração por espaço de trabalho

A configuração de IA é por espaço de trabalho. Se você gerenciar vários sites, cada espaço de trabalhos pode usar um provedor, modelo e orçamento diferentes. O espaço de obra herda padrões globais a menos que sobreponha. Para configurar por espaço: mude para o espaço de serviço, então vá para a configuração de inteligência artificial e salve as configurações lá.

Estou ficando. API Chaves

Anthropic (Claude)

Vá para console.anthropic.com > API Chaves > Criar chave. Copie a chave começando com "sk-ant-".

OpenAI (GPT)

Vá para platform.openai.com > API Chaves > Criar uma nova chave secreta.

Google (Gemini)

Vá para aistudio.google.com # Get API Chave, crie uma chave para o seu projeto, copie a chave.

XAI (Grok)

Vá para console.x.ai > API Crie e copie sua chave.

Testando sua configuração de IA.

Cenário:
Depois de entrar em seu API Você deveria ver um sinal verde e uma resposta da IA.
O que fazer:

Se o teste falhar: (1) Verifique isso API A chave está correta (sem espaços extras). (2) Verifique se sua conta está com o provedor. (3) Verifique se o nome do modelo é válido. (4) Se usar IA gerenciada, verifique se sua licença está ativa.

Qual provedor é o melhor?+

Claude é excelente para conversas de apoio, GPT-4o é rápido e versátil. Gemini Tente cada um deles e veja qual produz os melhores resultados para o seu caso específico de uso.

Posso trocar de provedor depois?+

Sim, mude o provedor e API O histórico de conversação existente está preservado, a IA usará o novo provedor para conversas futuras.

O que acontece quando eu ficar sem créditos?+

A IA degrada-se graciosamente: respostas se tornam mais curtas, pausas de resposta automática, e o administrador mostra um aviso de baixo equilíbrio.CRM Continue trabalhando sem IA.

IA

Conversa de clientes mais inteligente e barato

Um conjunto de controles que tornam o seu cliente mais inteligente (razão para a conta do cliente como um agente humano) ou mais barato (ele envia menos IA, ou respostas em menos etapas).

Respostas mais inteligentes (modo agente)

Um chatbot normal responde uma pergunta de um olhar. Modo agente. O assistente pode fazer várias verificações de conta somente para leitura em uma única vez e cruzar as referências, por exemplo: "Eu tenho ingressos abertos, e meu saldo é suficiente para minha próxima renovação?" é respondido em uma resposta com a matemática feita.

Modo agente.

Até algumas buscas por turno, cruzadas antes de responder.WHMCS, Shopify, Stripe, Zendesk, etc.) Off = o comportamento de hoje em busca única, inalterado.

Pensar em profundidade para respostas de agentes

Como é difícil o modelo de razões em curvas complexas (low/medium/high) começar no Low; a maioria das perguntas de suporte são bem tratadas lá.

Agente modelo.

Pins um modelo mais forte apenas para agentes complexos gira, então o chat diário fica em um modelo leve, barato e só as curvas duras pagam por profundidade.

Planeje adiante - respostas de um passo (beta)

Um pequeno passo de planejamento decide quais buscas devem ser feitas e se a base de conhecimento é necessária, então responde em uma chamada principal ao invés de vários passos.

Conversa e compreensão

Memória de longa conversação (beta)

Mantém um resumo curto das mensagens antigas (nomes, números de ticket/fatura, quantidades, decisões) para que o assistente permaneça consistente em conversas muito longas sem reenviar toda a transcrição.

Tolerância Typo

Lê pequenos erros de digitação ("meu ticketts abertos", "invocações não pagas") como as palavras pretendidas para que a informação certa seja encontrada em vez de perdida.

Contexto da conta em linha reta

Só liga o instantâneo da conta do cliente quando a pergunta é sobre sua conta (equilíbrio, faturas, bilhetes, serviços), pulando em questões gerais, corta custos sem perda de qualidade, o assistente ainda pode buscar a conta ao vivo quando uma curva precisar.

Poupança de custos

Pular a busca do conhecimento para saudações (beta)

"Oi", "obrigado" e "ok" não desencadeiam uma pesquisa na base de conhecimento, essas respostas nunca usam.

Resposta mais longa permitida (tokens)

O comprimento da resposta é a parte mais cara de uma chamada, então um boné sensível 500 Só diminui seu limite global, nunca o eleva.

Em Set-up seu IA

Profundidade de pensamento (cliente e conversa administrativa)

Mantenha o cliente conversando no mínimo/baixa para velocidade, reserve configurações mais altas para análise e o co-piloto administrativo.

Modelo Per-AI (por trabalho)

Cada superfície de IA (conversa ao vivo, rascunhos de tickets, resumos, análise, co-piloto administrativo, promoções, Inteligência do Site e muito mais) pode ser executada em seu próprio modelo, luz onde a velocidade importa, forte onde a qualidade importa, em branco sobre uma superfície = predefinição para o trabalho.

Controles de custos de chat administrativo

O copiloto administrativo pode manter uma memória de trabalho limitada e carregar apenas as ferramentas que uma pergunta precisa (ferramentas limpas) em vez de cada ferramenta a cada volta.

No trem, seu IA

Comprimir instruções.

O botão Comprimir reescreve uma fenda para dizer a mesma coisa em menos palavras, recusa a reescrita se ela cairia qualquer regra ou {variable}, e relata o que protegeu, então nunca muda silenciosamente de significado.

"O que já está no cérebro" (i')

Mostra o que OpsIQ Já sabe sobre seus negócios por slot, então você pode excluir qualquer coisa que estava repetindo em suas próprias instruções.

💡
Para um curto bate-papo de suporte, a entrada (instruções + dados da conta + histórico, enviados cada turno) normalmente custa mais do que a resposta curta, cache e contexto magro ajudam mais lá.
Isso muda como a conversa já responde?+

Não, todo controle está desligado por padrão e independente, ligar um só adiciona seu comportamento, desligar retorna o bate-papo exatamente como funcionou antes.

Que ordem devo ligá-los?+

Então, se você tem uma plataforma conectada, habilite o modo agente, então planeje a memória de longa conversa, depois contemple o contexto, salte-KB para cumprimentos e um boné de resposta, comprima suas instruções, assista algumas conversas reais após cada mudança.

O kit de administração: busca na web, livros de execução, missões, transferência de arquivos

O bate-papo da IA do administrador é um engenheiro de trabalho, não apenas uma caixa de perguntas, pode pesquisar correções na web, manter uma biblioteca dos seus procedimentos operacionais, patrulhar seus servidores em uma agenda e mover arquivos, a maioria disso é impulsionado por pedir isso em chat, a única coisa que você configura primeiro é qual provedor de pesquisa na web que usa, na configuração da sua página de IA.

Pesquisa na Web

Construído em

O agente procura documentos, mensagens de erro e informações atuais enquanto funciona.

Runbooks

Em bate-papo

O agente escreve uma após um trabalho complicado e segue-a da próxima vez, então o know-how sobrevive ao fim do bate-papo.

Missões

Agendado.

Patrulhas agendadas só de leitura. "Toda manhã, verifique o espaço em disco e os registros de erros e me diga."

Transferência de arquivos

Em bate-papo

Peça um arquivo de registro e consiga um link privado para download, ou tenha um arquivo copiado de um servidor conectado para outro. 5 MB.

Agente administrativo busca na web (em configurar sua IA)

Provedor de pesquisa.

O padrão é o Google, sem chave, livre, funciona em cada instalação. Serper.dev Normalmente retornam melhores resultados, mas cada um precisa de um API Se um provedor chaveado falhar por alguma razão (chave ruim, cota usada, problemas de rede), essa busca volta automaticamente para o Google, então a pesquisa nunca vai escurecer.

Procure. API chave

A chave para o provedor escolhido, só necessária para Brave, Tavily ou Serper.

Runbooks

Quando o agente acabar de trabalhar num trabalho que você vai querer fazer da mesma forma novamente, diga "salve isso como um livro chamado limpeza noturna".

💡
Um livro de execução é orientação, não um passe livre... quando o agente segue um, cada passo que muda um servidor ainda passa pelo seu modo de permissão atual e mostra os cartões de aprovação... um livro de corrida nunca pode ignorar uma aprovação.

Missões

Uma missão é um trabalho recorrente que o agente executa por conta própria, de hora em hora ou semanalmente, em dia determinado, as missões são somente leituras por projeto, eles podem ler servidores, dados e a web, mas nunca podem mudar nada, eles investigam e reportam, quando uma missão termina, os resultados chegam como uma notificação no seu sino administrativo, diga "corrir a patrulha da manhã agora" para disparar um sob demanda, ou peça ao agente para listar, pausar ou remover missões.

⚠️
As missões fogem. OpsIQ Um "run it now" do bate-papo funciona mesmo entre cron roda na maioria dos servidores.

Movendo arquivos

Peça um arquivo ("me consiga o registro de erros do servidor da web") e o agente o executa e responde com um link particular de download. 5 MB Para qualquer coisa maior, peça ao agente para comprimi-lo ou aparar no servidor primeiro.

O agente também pode copiar um único arquivo entre dois servidores conectados, novamente até 5 MB. A gravação no destino é tratada como qualquer outra alteração que ele faz: no modo de pedido você recebe um cartão de aprovação primeiro, o arquivo existente está com backup e a cópia é reversível.

IA

Treine seu IA

AI Training é onde você ensina. OpsIQ Você escreve prompts que definem personalidade, limites, conhecimento e regras de escalada.

Trem AI
Treine seu IAUm editor de instruções de IA com guias do Cliente/Admin e tom simples, sempre e nunca regras.Treine seu IAEspaço de trabalhoCliente AIAdmin. Al.ToneladasAmigável, conciso, nunca insistente.Sempre.Oferecer uma entrega humana para disputas de cobrança.Nunca.Prometa um reembolso sem checar a conta.1TWO MANUALSCliente e administrador AI2PLAIN ENGLISHTone, sempre, nunca3GROUNDEDAlém de sua base de conhecimento
Treine a IA como um novo contrato, Customer and Admin manuals escritos em inglês simples (tone, sempre, nunca), fundamentado em seu KB.

Duas áreas de treinamento.

Cliente Al prompt

Controla como a IA fala com seus clientes no chat widget.

Admin Al Prompt

Controla como a IA ajuda sua equipe de administração no painel do operador, isto lida com consultas internas e execução de ação.

Escrevendo um grande cliente de IA prompt

Seu cliente deve cobrir essas áreas.

1
Identidade

Dê um nome, papel e personalidade a ela, exemplo: "Você é Luna, uma amiga e experiente assistente de suporte ao cliente da Acme Store."

2
Tom e estilo

"Seja profissional, mas quente, use linguagem simples, evite jargões, mantenha as respostas concisas, não se preocupe.2-3 parágrafos max)."

3
Limites do conhecimento

O que ele deveria saber e não saber? Exemplo: "Você sabe sobre nossos produtos, preços, transporte e política de retorno.

4
Regras de escalada

Quando deve ser entregue a um humano?

5
Coisas para nunca fazer

"Nunca prometa reembolsos, nunca compartilhe fórmulas internas de preços, nunca invente características do produto que não existem, nunca dê conselhos médicos, legais ou financeiros."

Exemplo de alertas

Exemplo cliente AI prompt · loja online
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
Exemplo cliente AI prompt · empresa de hospedagem
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

Refinando seu alerta com o tempo

1
Lançar com o básico

Comece com identidade, tom e limites-chave.

2
Revisão do AI History semanalmente

Leia conversas onde a IA deu respostas erradas ou subótimas.

3
Atualize o alerta.

Se a IA continuar prometendo reembolso, adicione "Nunca prometa um reembolso, diga que vai aumentar para a equipe de cobrança."

4
Adicione o conhecimento.

Se a IA não pode responder uma pergunta, adicione a resposta à Base de Conhecimento em vez de tentar encaixar tudo no prompt.

⚠️
Mantenha o seu alerta sob 2,000 Palavras, prompts muito longos podem confundir a IA e aumentar os custos das fichas, colocar informações detalhadas na Base de Conhecimento em vez disso.
Qual é a diferença entre o prompt e a base de conhecimento?+

A base de conhecimento fornece informações factuais (detalhes do produto, preços, políticas), a IA lê ambas, mas o comportamento das formas rápidas enquanto o KB fornece respostas.

Posso ter diferentes alertas para departamentos diferentes?+

Se você precisa de comportamento diferente para diferentes departamentos, use a base de conhecimento para fornecer informações específicas e mencionar o contexto do departamento em seu alerta.

IA

AI história

A IA History mostra todas as conversas que a IA teve com clientes e administradores, usa para auditar o desempenho da IA, encontrar respostas erradas e identificar lacunas de treinamento.

AI história
AI históriaUm registro de IA gira com crachás tipo, a pergunta e resposta, tempo de resposta e resultado.AI históriaEspaço de trabalhoCada vez que a IA vira, gravadoConversarOnde está o meu pedido?A: enviado hoje, UPS rastreamento...0.9sRespondedo.BilheteRedação de resposta para T-12345Reembolso de reconhecimento redigida1.4sdraftedadministradorResumir os ingressos desta semana12_-linha resumo retornado2.1sFeito.ConversarCancele meu plano.Entregue a um humano.0.7sescalated1EVERY TURNProntidão, resposta, ação2SEARCHABLEFiltro & exportação3OWNER-ONLYTrilha de auditoria completa.
Cada vez que a IA vira (chat, ticket rascunho, ação administrativa) registrado com o prompt exato, resposta, duração e resultado.

O que cada conversa mostra

Data e hora

Quando a conversa aconteceu.

Identidade do cliente

Nome e e-mail, se conhecido, caso contrário, IP e país.

Canal

Widget de bate-papo, auto-resposta do ticket, rascunho de e-mail ou IA administradora.

Mensagens

Transcrição completa da conversa: mensagens de clientes e respostas de IA.

Uso de token

O uso de alto sinal pode indicar que a IA está dando respostas muito claras ou que a conversa foi em círculos.

Ações tomadas

Qualquer ação que a IA executou durante a conversa (procuraram ordem, criaram o bilhete, etc.).

Avaliação

Se a CSAT estiver ativada, o cliente terá uma avaliação de satisfação para esta conversa.

Encontrar problemas.

Busca por palavra-chave

Procure por tópicos específicos para ver como a IA lida com eles.

Filtrar por classificação

Mostre apenas conversas de baixa audiência para focar em clientes insatisfeitos.

Filtrar por canal

Mostre apenas as respostas automáticas para auditar respostas automatizadas separadamente do bate-papo.

Ordenar por uso de fichas

Conversas de alto nível podem indicar problemas: a IA divagando, andando em círculos, ou não respondendo à pergunta.

Rotina de auditoria semanal

1
Verifique conversas de baixa audiência.

Foi uma lacuna de conhecimento, um problema de tom ou uma resposta errada?

2
Verifique conversas de alto nível.

A IA se repetiu, não entendeu a pergunta?

3
Atualize o treinamento.

Para lacunas de conhecimento, adicione artigos à Base de Conhecimento, para problemas de comportamento, atualize o alerta de IA, para respostas erradas recorrentes, adicione regras explícitas de correção.

Encontrar lacunas de conhecimento

Cenário:
Você procura o histórico de IA para "instalação" e encontra 15 Conversas onde a IA disse: "Não tenho instruções específicas de instalação para este produto."
O que fazer:

Isso significa que sua base de conhecimento está faltando guias de instalação, criar artigos de base de conhecimentos para as etapas de instalação de cada produto, depois de adicioná-los, testar fazendo perguntas sobre a instalação da IA.

IA

Intuições de IA

A IA Insights analisa automaticamente padrões de conversação e revela descobertas acionáveis: perguntas comuns, tendências de satisfação, lacunas de conhecimento e padrões de escalada.

Intuições de IA
Insights Al (Intelligence Hub)O Centro de Inteligência: um resumo da IA de hoje, alertas inteligentes, uma ferramenta Score-a-Lead / Analyse-a Page, e um 14- Mapa de padrões de trânsito.Intuições de IAEspaço de trabalhoO BRIEF DE HOJETrânsito subindo. 12%; 3 Leads quentes;2Os negócios precisam de acompanhamento.Alertas Inteligentes.Erros de checkout aumentaram.Subir em /pricingNova pista quente dos EUAReceita antes da semana passada.Marcar um Lider / Analisar uma páginaIP ou URL…Corra.14- Padrão de Trânsito Dia1O BRIEF DE HOJEAI escreve o resumo da manhã.2SMART ALERTSAnomalias surgiram.3ON DEMANDMarque um lead · Analise uma página
O verdadeiro Centro de Inteligência: um resumo escrito por IA hoje, alertas inteligentes para anomalias, pontuação sob demanda e análise de página, e o 14- padrão de trânsito do dia.

Que insights mostram

Perguntas principais.

As perguntas mais frequentes, se "Como faço para redefinir minha senha?" é #1Sua base de conhecimento precisa de um guia proeminente.

Tendências de satisfação

As notas da CSAT ao longo do tempo, a satisfação com as IA está melhorando ou diminuindo, gotas repentinas podem indicar uma mudança na base de conhecimento que quebrou algo.

Taxa de resolução

Que porcentagem de conversas a IA resolve sem intervenção humana? 70% Está bom 50% Significa que a IA precisa de mais treinamento.

Razões de escalada

Por que conversas são transmitidas aos humanos, motivos comuns: cliente pediu humano, IA não poderia responder, assunto sensível, problema de faturamento.

Ganhos de conhecimento

Tópicos onde a IA diz "não sei" ou dá respostas de baixa confiança.

Comprimento médio de conversação

Quantas mensagens por conversação.10+mensagens) pode indicar que a IA não está entendendo a pergunta.

Usando insights para melhorar

Cenário:
Al Insights mostra que 23% As escalações são "O cliente perguntou sobre garantia" e a IA não pôde responder.
O que fazer:

Esta é uma clara lacuna de conhecimento: (1) Escreva um artigo de garantia abrangente na Base de Conhecimento cobrindo todos os termos de garantia, processo de reivindicação e exclusões. (2) Atualize o alerta de IA para referenciar informações de garantia. (3) Monitore a IA Insights semana que vem para ver se as escalas de garantia diminuem.

IA

Livro de jogadas da Admin. Al

O administrador Al (Pergunte OpsIQ Ajuda sua equipe a gerenciar.OpsIQ Você pode pedir para procurar dados, explicar recursos, resumir tickets e executar ações na plataforma.

Admin. Al.
Livro de jogadas da Admin. AlO Pedido...OpsIQ Caixa de comando com uma placa de ação proposta por IA mostrando parâmetros e confirmar/cancelar.Pergunte. OpsIQEspaço de trabalhoPergunte. OpsIQSuspenda o serviço por conta atrasada.4821IAAção proposta: suspender o serviçoConta: #4821 (Overdue $120)Plataforma: WHMCS · reversível · auditadoConfirmarCancelar1ASK ANYTHINGComandos simples em inglês.2PROPOSE FIRSTAção mostrada antes de correr3YOU CONFIRMEscopo e auditoria
Diga ao administrador o que quer em inglês, propõe a ação exata (escoberto, reversível, auditado) e espera sua confirmação.

O que a AI pode fazer

Procure os dados.

Pergunte: "Mostre-me todos os ingressos de [email protected]"ou "Qual é o status da ordem #ORD-5523?"

Resuma

Pergunte: "Sumarize o último 10"Quais são as principais questões de apoio esta semana?"

Explique as características.

Pergunte: "Como faço para fazer uma resposta automática?" ou "O que significa a taxa de rejeição?"

Executar ações

Pergunte: "Criar uma passagem para [email protected] sobre faturamento ou "Close ticket T-12345"

Consultas na plataforma

Pergunte: "Quantos visitantes recebemos ontem?" ou "Qual é a nossa receita este mês?"

Conversas de exemplo.

Procurando um cliente

Cenário:
O administrador pergunta: "Encontrar cliente [email protected] e me mostre sua atividade recente.
O que fazer:

A IA procura o cliente em todas as fontes de dados conectadas, sessões de visitantes, ingressos, conversas de bate-papo, pedidos e contatos CRM, retorna um resumo da atividade recente com links para cada item.

Recebendo um resumo diário

Cenário:
O administrador pergunta: "O que aconteceu hoje?"
O que fazer:

A IA resume: "Hoje você tinha 245 Visitantes (para cima) 12%), 8Novos ingressos.3 resolvido por AI),2Novas ordens totalizando $198, e1"Conversar sobre um atraso no transporte."

Executando uma ação

Cenário:
O administrador pergunta: "Mude o bilhete T-5523 Prioridade para Urgente"
O que fazer:

A IA confirma: "Vou mudar o bilhete T...5523 Isso afetará o temporizador do SLA.

💡
O administrador só executa ações que estão registradas no Registro de Ação. OpsIQ.
IA

Cenários de IA do cliente

Esta seção cobre cenários comuns de IA voltados para o cliente com comportamento e dicas de treinamento esperados.

Cliente AI
Cenários de IA do clienteUma biblioteca de perguntas de clientes emparelhada com o comportamento esperado da IA e uma etiqueta para cada resultado.Cenários de IA do clienteEspaço de trabalhoBiblioteca de cenários, comportamento esperado de IA."Onde está minha ordem?"Procure a ordem através do conector, dê rastreamentoResolva"Eu quero um reembolso"Nunca prometa que vai dar a mão a um humano.Demissão"O serviço está em baixo?"Verifique o status, informe o estado atual.Situação"Cancelar minha conta"Confirme a intenção, então dirija-se a um humano.Confirmar1SCENARIOSPerguntas comuns2EXPECTEDComo a IA deve responder3ENSAIOEncontrem lacunas de treinamento.
Uma biblioteca de perguntas reais sobre clientes e exatamente como a IA deve lidar com cada um, para testar seu treinamento e encontrar lacunas.

Biblioteca de cenários

-Pedido de status da ordem.

Cenário:
Cliente: "Onde está o meu pedido"12345?"
O que fazer:

Comportamento esperado de IA: (1) Procure a ordem através do conector da plataforma. (2) Informe o estado atual (processamento, envio, entrega). (3) Inclua o número de rastreamento, se disponível. (4) Se a ordem for adiada, reconheça e forneça uma linha do tempo estimada. (5) Nunca invente informações de rastreamento.

Pedido de reset da senha

Cenário:
Cliente: "Esqueci minha senha e não posso entrar"
O que fazer:

Comportamento esperado de IA: (1) Dê a senha para repor os passos da base de conhecimento. (2) Inclua o link de reset ou a página. (3) Mencione que o e-mail pode demorar alguns minutos. (4) Sugiro checar a pasta de spam. (5) Se o cliente ainda não pode reiniciar, aumente para um humano.

Pedido de recurso.

Cenário:
Cliente: "Pode adicionar o modo escuro ao aplicativo móvel?"
O que fazer:

Comportamento esperado de IA: (1) Agradeça a eles pela sugestão. (2) Explique como as solicitações de recursos são tratadas (logizadas, revisadas, priorizadas). (3) Não prometa que o recurso será construído. (4) Se uma característica similar existe, mencione.

Briga de faturamento

Cenário:
Cliente: "Eu fui cobrado, mas meu serviço não está funcionando"
O que fazer:

Comportamento esperado de IA: (1) Reconheça a frustração. (2) Verifique o status do serviço se possível. (3) Escale para o departamento de cobrança com todos os detalhes. (4) Não prometa um reembolso. (5) Defina a prioridade do bilhete para alta.

Pergunta fora do tópico

Cenário:
Cliente: "Como está o tempo em Londres hoje?"
O que fazer:

O comportamento esperado da IA:1"Sou sua assistente de apoio e posso ajudar com perguntas sobre nossos produtos e serviços, para informações meteorológicas, tente um serviço meteorológico."2Pergunte se eles têm uma pergunta de produto.

Como faço para testar o comportamento do cliente?+

Abra seu site em um navegador privado e incógnito, converse com a IA como cliente, tente perguntas comuns, casos de borda e cenários contraditórios, verifique se a IA segue suas regras e usa o conteúdo da base de conhecimento corretamente.

IA

Base de conhecimento da IA

A Base de Conhecimento é uma biblioteca de artigos que a IA usa para responder perguntas, quando um cliente pergunta algo, a IA pesquisa a base de conhecimento por artigos relevantes e os usa para gerar uma resposta precisa e fundamentada.

Base de conhecimento
Base de conhecimentoFontes se alimentam de uma loja de conhecimento, e depois uma IA gerando uma resposta fundamentada.Base de conhecimentoEspaço de trabalhoFontesGatilho no siteAjuda artigosPerguntas frequentesDocs importados.ConhecimentoSemântico + palavra chaveIAResposta fundamentadacom uma fonte citada."Reembolsos levam"3–5Dias úteis."1INGESTRasteje, FAQ, importe2RETRIEVESemântico + palavra chave3GROUNDEDRespostas de seu conteúdo
Rasteje seu site e importe documentos para a base de conhecimento, a IA recupera as peças e respostas certas, fundamentadas e citadas.

Como funciona

1
O cliente faz uma pergunta.

"Qual é a sua política de retorno?"

2
AI procura na base de conhecimento

OpsIQ encontra o artigo "Política de Retorno" combinando palavras-chave e significado semântico.

3
AI gera uma resposta.

A IA lê o artigo e escreve uma resposta em linguagem natural baseada no conteúdo do artigo.

4
O cliente tem uma resposta precisa.

A resposta está baseada na sua política, não nos dados gerais de treinamento da IA.

Criando bons artigos.

Um tópico por artigo

Escreva um artigo separado para cada tópico: política de retorno, taxas de envio, configuração da conta, reset de senha.

Escreva como uma FAQ

Comece com a pergunta que os clientes fazem, e depois dê a resposta.

Seja específico.

"Retornos devem ser iniciados dentro 30 Os dias de entrega são melhores do que "temos uma política de retorno".

Inclua casos de borda.

E os retornos internacionais, os produtos digitais, os itens comprados à venda, as exceções?

Mantenha-o atual.

Reveja artigos trimestralmente, apague informações desatualizadas, atualize preços, políticas e procedimentos quando mudarem.

Artigos iniciais que você deveria escrever.

Envio e entrega

Custos de envio, prazos de entrega, rastreamento, transporte internacional e atrasos de manuseio.

Retornos e reembolsos

Janela de retorno, condições, processo, linha do tempo e exceções.

Gestão de contas

Reinicia senha, troca de e-mail, exclusão da conta e exportação de dados.

Preços e faturamento

Planeje descrições, ciclo de faturamento, métodos de pagamento, faturas e moeda.

Guias de produtos

Instruções passo a passo com imagens.

Solução de problemas

Problemas e soluções comuns, mensagens de erro e suas correções.

Informação de contato

Horário de trabalho, canais de suporte, tempos de resposta e caminhos de escalada.

Legal e cumprimento

Sumário da política de privacidade, termos do resumo do serviço, GDPR Pedidos de dados.

Conhecimento do conector

Cada conector pode contribuir com o conhecimento da IA. Quando um conector é ativado, seus artigos de conhecimento incorporados (catálogo de produtos, perguntas comuns, solução de problemas específicos da plataforma) estão automaticamente disponíveis para a IA. Você pode alternar o conhecimento do conector dentro ou fora por conector nas configurações do conector.

Orçamento do token

A base de conhecimento tem um teto de token configurável (padrão: 32,000 tokens) que controla quanto contexto de conhecimento é enviado para a IA por conversação.

Quantos artigos eu devo ter?+

Comece com5-10 A maioria das empresas precisa de mais informações sobre o que você quer fazer. 20-50 Artigos para cobertura abrangente.

Posso importar artigos de outro sistema?+

Atualmente, os artigos são criados manualmente em OpsIQ. Você pode copiar e colar conteúdo de FAQs existentes, centros de ajuda ou documentos.

Em que formato devem estar os artigos?+

O texto simples funciona melhor. HTML Escreva como explicaria a um cliente.

IA

Avaliação de IA e Torre de Vigilância

A avaliação transforma as perguntas críticas do cliente em testes repetitivos para qualidade de resposta, citações, escalada e segurança de ação.

Tela de produto
Avaliação de IAAI Evaluation lista casos de teste dourados, comportamentos necessários, resultados recentes e corridas programadas da Torre de Vigia.Avaliação de IAEspaço de trabalhoSETS6CASES84PASS RATE96%OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOPolítica de navegaçãoCitação necessária.Passo.Pedido de reembolso.Confirmação humana necessária.Passo.Não suportada.Ação ProibidaPasso.Pergunta sobre migraçãoEspera-se que a fonte esteja desaparecida.Falhar.1CREATE CASESEntrada dourada e regras2RUN SAFELYCorrida ou avaliação ao vivo3WATCHAgenda diária ou semanal
AI Evaluation lista casos de teste dourados, comportamentos necessários, resultados recentes e corridas programadas da Torre de Vigia.

Administradores completos podem criar conjuntos de avaliação com etiquetas de fonte rápidas, necessárias citações, regras de confirmação humana, expectativas de escalada e ações proibidas.

Torre de Vigilância Reveja falhas ao lado do provedor/modelo, versão rápida, versão de conhecimento, ações propostas e custo antes de mudar o comportamento da produção.

IA

Línguas e tradução

Linguagens gerenciam texto voltado para o cliente traduzido e o comportamento usado quando OpsIQ segue a linguagem de um cliente.

Tela de produto
LínguasA página Linguagens mostra a língua de origem, línguas traduzidas, rascunho/estado vivo e comportamento da linguagem do cliente.LínguasEspaço de trabalhoFONTEInglêsLANGUAGES4VIDA3OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOFrancêsInterface e conteúdoVivaAlemãoInterface e conteúdoVivaEspanholTradução do rascunhoRascunhoSiga o cliente.Responda em linguagem detectada.Adiante1SET SOURCELíngua original do operador2ADD LANGUAGETraduza em segundo plano.3PUBLISHRascunho ou vivo
A página Linguagens mostra a língua de origem, línguas traduzidas, rascunho/estado vivo e comportamento da linguagem do cliente.

OpsIQ traduz texto voltado para o cliente com operador. Definir a linguagem de origem corretamente antes de criar traduções, adicionar línguas-alvo, em seguida, revisar rascunhos antes de publicar. “Siga idioma do cliente” controla a linguagem da resposta; tradução da interface widget controla seus botões, etiquetas e texto do sistema.

Não se confie na tradução automática para o texto legal, de reembolso, segurança ou segurança sem revisão humana.

Cada lugar que contém sua própria redação é listado com a contagem de mensagens: mensagem de bate-papo do cliente, promoções, mensagen proativa, fluxos de bate papo, visitas guiadas, anúncios, bolhas e teasers. Pesquisas e formuláriosA superfície da pesquisa cobre cada pesquisa publicada completamente: título, cada pergunta, cada opção de resposta, botões, bem-vindo e obrigado copiar, página cromo e páginas de resultados. Chaves estão ligadas à identificação da questão e o valor da opção, então reordenar perguntas ou opções nunca perde uma tradução, e reformular uma mensagem traduz apenas essa mensagem.

O e-mail do post-chat segue o idioma que o visitante realmente conversou, desde que o idioma seja um que você oferece aqui, caso contrário ele usa seu sistema de linguagem.

Bilhete e mensagens do portal (A AI auto-replica não precisa de nada disso, já responde na língua do cliente.) E-mail clientes em sua própria língua Ativado OpsIQ Escrevendo, o e-mail do ticket resolve a língua do destinatário nesta ordem: a linguagem que eles escolheram no portal ou Centro de Ajuda (tratado para o ticket), o local em seu registro de contato, então o idioma em que eles escreveram, detectado localmente por alcance de script e palavras de marcador, sem chamada externa. HTML E-mail voltado para o pessoal (notificações, alertas de departamento, relatórios de analistas, relatórios agendados, a digest semanal) sempre usa a linguagem do sistema.

PeopleOS RH

PeopleOS: o sistema operacional de força de trabalho governado

Execute o ciclo de vida dos funcionários da requisição para fora do navio com auto-serviço móvel, fluxos de trabalho comprovados, integrações digitadas e controle humano sobre decisões sensíveis.

Mapa interativo do sistema
Centro de comando do ciclo de vida dos PessoasOSUm painel tridimensional do PeopleOS ligando recrutamento, empregados, folha de pagamento, aprendizado e IA governada.Centro de comando do PovoOSEVIDÊNCIA AO VIVOPESSOAS248Abra as cordas.12CONTROLE GATES15 / 15CICLE DE VIDARecrutamentoContratarCrescerRecompensaTransiçãoUM RECORDIdentidade + evidência de empregoCONTROLE HUMANOApelação, correção, tomada de posseProve-o.Resultado e liberar evidências.
O PeopleOS mantém o ciclo de vida, controles e provas em um registro governado.

Administradores.

Operar

Gerencie pessoas, organização, recrutamento, a bordo, documentos, licença, reconciliação de folha de pagamento, benefícios, desempenho, aprendizagem, relações de funcionários, análise e governança.

Funcionários e gerentes

Auto-serviço

Use um portal móvel para registros privados, pedidos, documentos, a bordo, tempo, explicações de pagamento, aprendizagem, informações da empresa e direitos.

Desenvolvedores

Estenda

Use a curadoria. hr.* Ações e revisadas platform.hr.* O índice gerado no PeopleOSAPIA seção lista cada um com seu escopo.

⚠️
O sistema externo certificado mantém essas responsabilidades, um cheque técnico verde nunca cria aprovação legal ou evidência de provedor.

Conseguindo o RH do PeopleOS

O RH do PeopleOS está incluído no plano Enterprise, em todos os outros planos pagos é um complemento: Conta.→Complementos e fichasOs níveis diferem em quantas pessoas e quanto recrutamento, entrevista e atividade de IA eles carregam. Página de preçosO que o módulo faz, superfície por superfície, está na Página de produto do PeopleOS HR.

Quem pode adicionar isso?

Um plano gratuito não pode adicioná-lo, e um plano pago que ainda está dentro de seu próprio plano de julgamento tem que esperar até o fim do julgamento.

O teste gratuito

O julgamento é na posição que você escolhe, quando termina sem uma compra o direito é removido e nada é cobrado, nada é excluído, os registros estão lá novamente no momento em que o complemento é adicionado.

Quando não é de propriedade

O RH do PeopleOS não aparece na barra lateral, a paleta de comandos, configurações ou a ajuda no aplicativo.

Chegando a um nível de cobertura

Quando um limite de nível é alcançado, a página oferece o próximo nível.

Auto-hospedagem instala

O direito viaja na licença.OpsIQA conta e a instalação o pegam na próxima licença.

Armação da primeira semana.

Tudo abaixo é uma tela real, nada aqui precisa de um desenvolvedor.

1
Ligue o módulo.

Abra. Povos.→HR HomeA placa começa com o interruptor principal, PeopleOS RHAtivar um botão é uma confirmação de dois cliques, desligar um é um clique, a IA muda abaixo dele, desenhar ajuda, triagem de aplicativos, assistentes autônomos, entrevistas com IA, envio automático de oferta, verificação de identidade, fique desligado até que você decida.

2
Deixe o Copiloto de Configuração fazer a configuração.

Abra. Povos → Setup Co-piloto E diga o que quiser em linguagem simples: uma política de licença com seus dias e avisos, os feriados públicos para um país, uma categoria de caso com sua SLA, um limite de despesas, um modelo de onboard, um pulso mensal.

3
Diga o nome do portal dos empregados.

Abra. Povos.→Linha de frente.→Design de login.Em uma instalação auto-hospedada o portal vive em /hr/<address>; Endereço do portal Na nuvem, o portal está em uma área de 3 km. /hr No seu hospedeiro de trabalho e não precisa de endereço.

4
Publicar seu site de carreiras

Abra. Povos.→RecrutandoCada postagem que publica de uma requisição aprovada aparece na página de carreiras públicas, o link Abra a página de carreiras públicas. no topo da Recrutamento mostra exatamente o que um candidato vê.

5
Registre um quiosque para dispositivos compartilhados.

Abra. Povos.→Linha de frente.→Kiosks. e escolher Registre um quiosque.O símbolo do dispositivo é mostrado uma vez; abra a página do quiosque no tablet ou PC (é /kiosk As pessoas registram com o e-mail de trabalho e PIN, ou com o código do crachá curto do portal.

6
Decida o que os empregados podem fazer por si mesmos.

Abra. Configurações → HRCada auto-serviço de energia (registros, pedidos, documentos, licença, explicações de pagamento e assim por diante) é definido para cada empregado, gerentes apenas, ou uma equipe e as equipes sob ele.

7
Adicione as pessoas e dê-lhes acesso.

Adiante Povos.→Pessoas. O convite sai da mesma tela e a integração começa na jornada que você montou.

O ciclo de vida

Planeje e recrute.

Criar requisições aprovadas, publicar trabalhos, receber pedidos através de webhooks seguros de re-query, revisões estrutura, entrevistas agendadas, decisões de registro, ofertas de edição e contratar.

Junte-se e providencie

Construir provas de viagens a bordo, coletar a versão correta do documento, pedir equipamentos, conceder modelos de acesso aprovados e fornecer acesso sem assentos portais.

Trabalhar e crescer

Operar licença, horários, pagar explicações, benefícios, despesas, objetivos, feedback, comentários, aprendizagem, habilidades, oportunidades internas, sucessão e análise de força de trabalho.

Apoiar e proteger

Fornecer suporte privado ao RH, casos de relações entre empregados, porções legais, pedidos de dados, correção, explicação, recurso e revisão humana independente.

Mude e saia.

Use mudanças de emprego, revogue acesso, recupere equipamentos, concilie fornecedores externos, aplique retenção e preserve as evidências necessárias.

Acesso e identidade.

Uma pessoa canônica possui registros de emprego e facetas de identidade externas verificadas.APIcamada de escopos em cima das permissões da rota e nunca ignorá-los.

Adicione um novo trabalhador.

Cenário:
Criar a pessoa, atribuir emprego e gerente, fornecer acesso ao portal, então abrir a jornada de bordo.
O que fazer:

Use corrida a seco e indemnidade paraAPIConfirme que a pessoa tem um e-mail válido e uma relação de trabalho antes de enviar acesso.

Resolva uma identidade duplicada.

Cenário:
Dois sistemas externos identificam o mesmo trabalhador de forma diferente.
O que fazer:

Não conecte os registros apenas porque dois valores de e-mail mutáveis coincidem.

PeopleOS RH

Fluxos de trabalho do RH e o Portal dos Funcionários

Como cada área principal do PeopleOS é operada e o que os funcionários veem depois de entrar.

Pessoas e organização

Manter a pessoa canônica, emprego, tipo de trabalhador, gerente, equipe, localização, habilidades, documentos e estrutura organizacional efetivamente datada.

Recrutando e oferecendo

Passar da requisição aprovada para postagem, aplicação, evidência estruturada, entrevista, decisão, oferta e aluguel com alojamento e rotas de apelação.

A bordo e documentos

Atribuir passos específicos de proprietário ordenados, coletar, revisar, assinar, expirar, manter e excluir documentos com versão e acessar evidências.

Tempo, licença e agendamento.

Defina tipos de licença apoiada por políticas, balanços, pedidos, aprovações, feriados, disponibilidade, eventos de calendário e reconciliação.

Pagar, benefícios e despesas

Explique os eventos de pagamento, mão aprovada para os trabalhadores para a folha de pagamento. Concilie exceções, gerencie benefícios e recomende reembolsos.

Desempenho e crescimento

Operar objetivos, check-ins, feedback, avaliações, calibração, aprendizagem, habilidades, mentoramento, oportunidades internas e sucessão.

Serviço de RH e relações

Dar apoio privado aos funcionários enquanto mantém queixas, disciplina, denunciante e provas de caso seladas em limites de permissão dedicados.

Análise e planejamento

Use medidas de força de trabalho, planos de contagem, referências e métricas de experiência derivadas de registros, nunca inferindo resultados perdidos como sucesso.

Mapa do Portal dos Funcionários

Visão geral

Precisa de sua atenção, mudanças desde a última visita, pedidos abertos, próximos eventos, progresso e anúncios.

Perfil e registros

Emprego, registro verificado, documentos, permissões, pedidos de privacidade e pedidos de correção.

Suporte e tarefas do RH

Conversas privadas, pedidos, ações que precisam de funcionários e tarefas da empresa mostradas separadamente.

Seus primeiros dias

Evidências apoiadas na linha do tempo com o proprietário, devido estado, conclusão e trabalho bloqueado.

Tempo e partir

Saldos, pedidos de licença, disponibilidade, horários e consequências do calendário.

Habilidades e crescimento

Aprendizagem, habilidade, provas, objetivos, feedback, orientação e oportunidades internas.

Meu pagamento, explicou

Compensação em linguagem simples e informações de reconciliação da folha de pagamento que o empregado pode ver.

Companhia

Diretório e organigrama limitados a informações que os colegas escolheram ou política permite compartilhar.

Direitos e decisões

Explicações, apelações, consentimento, correção, acesso e pedidos de exclusão.

💡
O cartão de conta continua acessível, navegação e conteúdo rodam independentemente em telas largas, e sobreposições de navegação móvel ao invés de empurrar ou cobrir a página.

Sequência de operação segura.

1
Configure as regras e permissões.

Definir jurisdição, papéis, vias de aprovação, retenção, consentimento e controles de recursos antes de carregar registros ao vivo.

2
Conecte os fornecedores externos.

Instale o pacote assinado apropriado, digite credenciais de menos privilégios e passe os testes de conexão e conformidade.

3
Correr em areia ou sombra

Exercite fluxos de trabalho completos com dados determinísticos e compare as evidências esperadas antes de permitir a execução do provedor real.

4
Liberação sob duplo controle.

Um outro revisor autorizado examina provedor, segurança, privacidade, legal, justiça e evidência de acessibilidade.

PeopleOS RH

IA, justiça, vídeo e controle legal.

O PeopleOS trata a automação como uma ferramenta governada: permissão política, tentativa de execução, resultado do provedor e prova são fatos separados.

AI e controle de agentes

Cada agente usa ferramentas registradas com um propósito, jurisdição, classe de risco e autonomia máxima.

Justeza

Defina coortes, regras de amostra mínimas, métricas, identidade do avaliador e uma avaliação legalmente liberada.

Explicações e apelos

Construa explicações de decisões e evidências políticas seladas, envie apelos a um humano independente e guarde provas finais.

Competências

Liberar políticas nacionais só se aplica a um proprietário legal responsável, fontes legais citadas e testes de aprovação.

AI Act da UE

Manter o inventário do sistema, classe de risco, avaliação de impacto dos direitos fundamentais, avisos, supervisores, medição e evidência.

Limite de exibição de vídeo

Providência não é participação.

hr.interview.room.provision cria um local de encontro. hr.interview.room.connect Pode provar que a mídia chegou ao trabalhador.

Consentimento específico do propósito.

Gravar, transcrição e vida biométrica são escolhas separadas.

Sem análise de aparência.

O contrato de vídeo não tem campo ou método para emoção, atenção, atratividade, raça, deficiência ou inferência da aparência.

Rotas humanas e de texto

Um revisor pode assumir permanentemente para a sessão, e uma rota de acomodação de texto permanece disponível.

Retenção e exclusão.

O conector informa transporte criptografado, política de retenção ativa e referências de mídia do provedor, e deve apoiar a exclusão verificável.

Espaço criado, IA ausente

Cenário:
Um quarto Zoom.URLExiste, mas a ponte da mídia não entregou áudio/vídeo para o trabalhador da entrevista.
O que fazer:

Mostre a reunião como provisionada e participação de IA falsa.

A ligação diz que passou um cheque.

Cenário:
Um relatório assinado de verificação do histórico da webhook.
O que fazer:

Grave a chamada como uma dica, consulte o provedor, só a resposta autenticada pode atualizar a verificação.

🚫
Uma avaliação técnica de acessibilidade pode ser registrada pelo avaliador, mas o certificado da WCAG requer uma pessoa separada, prova do fornecedor, liberação legal e evidências de justiça também exigem seus verdadeiros proprietários.
PeopleOS RH

Povos.APIe desenvolvimento de conectores

Use o General.APIpara operações RH governadas e contratos de conectores digitados para sistemas externos autoritários.

Geral.APIFontes da verdade

EnviarJSONpara POST /api/v1.phpDescubra a superfície de corrida através meta.actions, OpenAPI em /api/v1/openapi.phpE o carteiro na /api/v1/postman.phpO índice gerado abaixo carrega a contagem exata de curadoria hr.* Ações e revisadas platform.hr.* Operações nesta construção, então nada nesta página é digitado à mão.

Listar pessoas
curl -sS https://your-opsiq.example/api/v1.php \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"action":"hr.people.list","page":1,"per_page":50}'
"Dry-run" uma escrita.
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}'

Uso hr.read Ou hr.write A rota do administrador de alvo ainda verifica sua própria permissão, os registros exigem uma chave de indemnidade estável, as escritas de alto risco requerem confirmação, as falhas transitórias com a mesma chave e o estado de recuperação da consulta após um tempo incerto.

Cada ação de hr.* curadoria

48 curated hr.* actions (22 reads, 26 writes) and 484 reviewed platform.hr.* operations, out of 2418 named actions in this build. Generated from the action registry, the same source as meta.actions, OpenAPI and Postman.

Pessoas, organização e identidade (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.

Requisições e postagens (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.

Saia, aprenda e o mercado de conectores (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.

Certificação de conexão e saúde (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.

Salas de entrevista (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.

Agentes e ciclo de vida (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.

Jurisdição (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.

Decisões e recursos (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.

Qualidade da IA (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.

Conversas e retenção da força de trabalho (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.

Prontos e liberados. (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).

Aulas de conexão

Recrutamento

hr_job_board, hr_background_check, hr_identity_verification, hr_assessment e hr_tax_right_to_work.

Contratação e a bordo

hr_esignature, hr_calendar, hr_video e hr_equipment_it.

Operações da força de trabalho

hr_payroll, hr_benefits, hr_learning, hr_expense_payment, hr_directory e hr_data_warehouse.

Comunicação

hr_messaging O contrato não contém nenhum método de leitura de mensagens.

Endpoints do portal de provedores

PORTA DO PROVADOR DE PESSOAS1.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

O portal requer HTTPS, bloqueia alvos inseguros/privados, pinos validados.DNSresultados, não segue redirecionamentos, limita o tamanho da resposta, requerJSON, carrega indemnidade determinística, e suporta o tempo marcado HMAC Os webhooks são sempre dicas seguidas de re-consulta do provedor.

Portas de hook da web em aproximação.

Três portas públicas recebem chamadas de provedores: POST /opsiq/ajax_api.php?ajax=hr_connector_webhook (campos) connector_class, connector_key, topic), ?ajax=hr_esign_webhook (connector_key, offer_uuid, provider_ref) e ?ajax=hr_check_webhook (check_uuidCada um verifica o corpo através do conector certificado, queima a entrega para que uma repetição morra e registra apenas uma re-perguntação pendente, a resposta do próprio provedor muda o registro. webhooks.events.list é a autoridade e nomes nenhum na hr - Então, faça uma pesquisa. hr.* lê ou usa hr.connectors.health.

Referências detalhadas

Manual completo do PeopleOS

Leia doc/contracts/PEOPLEOS_HR.md em uma instalação auto-hospedada para cada operador, API, conector, webhook e regra de liberação.

Contrato de desenvolvedor da Gateway

O pacote Marketplace contém README.md, DEVELOPER.md, connector_contract.json, hr_profile.json e um manifesto de arquivo assinado.

PeopleOS RH

Teste e preparação para a produção

A disponibilidade do pacote, certificação de provedor, aprovação legal, avaliação da equidade e comprovação de acessibilidade são deliberadamente separadas.

1
Validar código e contratos

Executar sintaxe PHP, HR PHPUnit, route/APIParidade, OpenAPI/Carteiro cheques, manifesto do pacote eJSONValidação de esquema.

2
Exercite fluxos de trabalho completos.

Recrutamento de testes, revisão de IA, entrevista/vídeo, a bordo, assinaturas, licença, folha de pagamento, portal, notificações, modais e caminhos de falha do conector.

3
Teste de interface sensível e acessível.

Dirija layouts de desktop, tablet e telefone; teclado, foco, etiquetas, contraste, reflow, dicas, diálogos, rolagem de notificação e navegação independente.

4
Recolha provas externas.

Use viagens e exclusão de provedores reais, liberação de políticas legais, dados representativos de justiça e um certificado humano independente da WCAG.

5
Liberação sob duplo controle.

Um revisor diferente do submisso aprova o conector e libera evidências.

O que cada resultado significa

Pacote assinado.

Os arquivos não mudaram desde a assinatura do pacote autorizado, e não prova que uma conta de terceiros funcione.

A caixa de areia passou.

Comportamento determinístico e transições estaduais se conformam, não prova um provedor de verdade, termo de residência ou exclusão.

Conector de produção certificado

Uma conta específica passou as cinco obrigações de provedor sob duplo controle.

Relatório técnico da WCAG

Evidência automatizada e avaliada existe para superfícies nomeadas.

Lançar pronto.

Todos os portões necessários são verdes ao mesmo tempo e nenhuma evidência foi expirada, revogada, desaparecida ou contrariada pela saúde viva.

⚠️
Nunca crie um registro legal, justo, de provedor ou de testemunho independente apenas para limpar o portão.
Por que um conector está instalado mas ainda não está disponível?+

A instalação prova a presença do pacote, habilite-o, salve credenciais de menos privilégios, passe no teste de conexão e conceda o escopo de produção da conta PeopleOS usando evidências genuínas e um revisor diferente.

Por que um webhook não mudou o registro?+

A chamada pode ser válida, mas apenas uma dica... verifique a caixa de entrada do webhook, o status do provedor e o resultado da reconciliação.

Onde está o RH legível por máquina?API?+

Chame meta-ações e filtrar para hr. e plataforma /api/v1/openapi.php e /api/v1/postman.php. Eles são gerados a partir do mesmo registro de tempo de execução.

Suporte

Centro de ajuda

Os clientes podem ler e pesquisar em sua própria página pública, e dentro do widget de chat, para que eles possam encontrar respostas por conta própria antes de abrirem uma conversa.

Onde seus clientes o vêem.

Sua própria página pública

Um local limpo e pesquisável de ajuda em /help.phpOs clientes navegam por categoria, pesquisam e abrem qualquer artigo, você pode dar seu próprio nome e estilo.

Dentro do widget de bate-papo

Um link de ajuda no widget do chat para que os clientes possam pesquisar seus artigos sem deixar o chat.

Ligue-o.

1
Abra a página da Central de Ajuda.

Vá para Config, then Help Center Em seu administrador e ligar Habilitar Centro de Ajuda Pública.

2
Dê-lhe um nome e uma olhada

Defina o nome da Central de Ajuda, que aparece no cabeçalho e na guia do navegador, e escolha um estilo visual.

3
Publicar alguns artigos

Nada aparece até publicar artigos, a próxima parte cobre como.

Publicar artigos para a Central de Ajuda

Artigos ao vivo em sua base de conhecimento, um artigo aparece na Central de Ajuda quando é publicado e marcado público.

Publicar um artigo

Abra o artigo, marque que foi publicado e ligue a opção para mostrá-lo na Central de Ajuda.

Publique tudo de uma vez

Use o Publicar tudo botão para carregar todo o seu conjunto publicado para a Central de Ajuda em um clique, em vez de fazê-los um de cada vez.

Transforme FAQs em artigos.

Já tem perguntas frequentes? Publique tudo para ajudar para transformá-los em artigos de ajuda para que eles se sentam ao lado de tudo mais.

Importar uma base de conhecimento existente

Mudando de outra mesa de ajuda? Importar KB O botão na guia Artigos traz uma base de conhecimento existente para você.

Colar a URL

Se ele reconhece a plataforma (por exemplo, Zendesk) ela lê a árvore de categorias exata daquela plataforma. Caso contrário, rasteja o site e reconstrui a estrutura das páginas, importando apenas os artigos reais e pulando as páginas de login, preços e contatos.

Escolha um aplicativo conectado.

Se uma plataforma já está conectada a este espaço de trabalho e possui uma base de conhecimento, ela aparece em um dropdown sob Importar de um aplicativo conectadoSelecione e importe, não precisa de URL ou senha.

Envie um CSV

Não há site ao vivo para apontar? title, category, e body -Columns. Parent / Child na coluna de categoria para construir categorias aninhadas.

Qualquer maneira que você escolher, você tem um Previsão primeiroOs artigos que encontrou, agrupados por categoria, cada um com uma caixa de seleção para que você possa largar tudo o que não quiser. Desfazer Toda a importação em um clique, ou Re-sincronia a URL ou a importação de aplicativos conectados mais tarde para trazer novos e alterados artigos.

💡
Desenvolvedores: qualquer conector pode anunciar sua base de conhecimento para esta gota abaixo declarando um kb_capabilities Bloqueie em sua settings.json (tipo kb_source, com um adapter e um base_templateVeja a seção Conectores e a referência de conexão plataforma.

Organize com AI

Um centro de ajuda arrumado é fácil de procurar e mais fácil de pesquisar. Organize com AI Em um clique, ele lê seus artigos publicados, os classifica em categorias sensatas e adiciona etiquetas, cria uma categoria quando precisa de uma, reutiliza uma categoria que já se encaixa e ignora tudo o que você já organizou, para que possa executá-la novamente quando adicionar novos artigos. Deixe que a IA organize em subcategorias. Em configurações da Central de Ajuda e também pode arquivar artigos sob aninhado Parent / Child Categorias, que é útil logo após importar uma base de conhecimento que tinha sub-seções.

💡
Categorias dão aos clientes uma maneira de navegar, e etiquetas afiam a busca na página pública e no widget.

A Central de Ajuda dentro do seu widget de bate-papo

Você pode mostrar a Central de Ajuda dentro do widget de bate-papo para que as pessoas procurem respostas antes de enviarem mensagem.

No cabeçalho

Um pequeno ícone de ajuda no topo do widget.

No fundo

Um link de texto sob a caixa de mensagem, por exemplo "Procurar centro de ajuda".

Em ambos os lugares.

Mostre no cabeçalho e no fundo para maior visibilidade.

O link de ajuda tem seu próprio controle de cor sob as configurações de aparência do widget. Nenhum. para combinar com a cor do lançador, ou escolher um Sólido cor ou um GradienteToda a experiência de ajuda segue o tema do widget, então sempre parece parte da sua marca.

Coloque seu centro de ajuda no seu próprio endereço web.

Fora da caixa, seu centro de ajuda já tem um endereço limpo e compartilhável. /help/your-help-centerVocê pode ir um passo mais longe e servi-lo sob seu domínio próprio, assim os clientes e motores de busca vê-lo como parte de sua marca, por exemplo yourdomain.com/help Ou help.yourdomain.comTudo continua trabalhando em seu domínio: links, imagens, buscas e audiências de artigos.

Sob o seu site principal.

Em Config, depois Centro de AjudaAbra o Incorporar Veja e encontre "Mostre seu centro de ajuda em seu próprio endereço web".Cloudflare Cada opção tem um bloco pronto para ser colado em seu site. Guia de configuração botão ao lado com os passos exatos.

Em um subdomínio

Preferir help.yourdomain.comO mesmo painel tem uma opção de subdomínio. Cloudflare Um subdomínio é a rota mais confiável, e lhe dá um endereço limpo sem nada depois.

💡
Usando Cloudflare Ele só passa o seu trabalhador em um endereço que é aproximado Cloudflare O seu domínio principal muitas vezes aponta diretamente para o seu site, então uma regra colocada no domínio principal pode silenciosamente não fazer nada. help.yourdomain.comO guia de configuração te leva até o primeiro. DNS registro e a rota.
Bom para você.SEO Uma vez que seu centro de ajuda esteja em seu próprio domínio, os motores de busca indexam seus artigos sob sua marca.
💡
Usando o link de ajuda no banheiro também? Onde a ligação vai para Seu próprio domínio de ajuda central Então, esses links de artigos abrem no seu domínio também, não no endereço OpsIQ.

Veja como todo o seu centro de ajuda está indo.

Além dos votos de um único artigo, a Central de Ajuda tem seus próprios AnáliseLigue-o nas configurações da Central de Ajuda e ele registra silenciosamente como as pessoas usam sua ajuda: os artigos mais vistos, o que eles procuram, e pesquisas que voltaram vazias (uma lista pronta para escrever), trabalhando no país visitante e dispositivo por conta própria, então não precisa do widget de chat instalado para relatar. Os dois. coloca sua ajuda em cena, a página pública e a ajuda in-widget, bem como combinada, para que você possa ver o quanto cada uma é realmente usada.

💡
O Analytics fica desligado até você ligar, e você pode ter visita. IP Nada é gravado antes de você optar por entrar.

Escolha o que aparece em cada parte da página.

Cada seção da Central de Ajuda (as categorias na página inicial, os artigos populares, a lista de artigos em uma página de categoria e muito mais) tem sua própria regra simples. Todos itens, a Número de ajuste, o ÚltimoOu apenas aqueles que você recurso Quando uma regra fecha uma lista, os clientes ainda recebem um link "Mostre tudo", então nada está realmente fora de alcance.

Você também decide como os votos úteis são: ocultos, uma proporção amigável como "12 de 14 Uma configuração de votos mínimos para um artigo novo mostrando algo estranho.0Fora.0".

Veja quais artigos estão funcionando.

Cada artigo mostra uma Isso foi útil? Cada sim ou não é contado por artigo, então você pode ver de relance quais artigos respondem bem às perguntas e quais precisam ser reescritos.

Texto e rótulos

Você pode mudar os títulos e rótulos da Central de Ajuda para combinar sua voz, deixar qualquer campo em branco e ele cai de volta a um padrão razoável, então você só editar a redação que você realmente quer mudar.

A Central de Ajuda compartilha uma biblioteca com sua IA.

Perguntas comuns

Preciso escrever conteúdo separado para a Central de Ajuda?+

Não, é construída a partir dos mesmos artigos de base de conhecimento que a IA já usa, publica um artigo uma vez e pode servir aos dois.

Posso manter alguns artigos internos?+

Sim, só os artigos que publica e marca o público aparecem na Central de Ajuda, qualquer coisa não publicada fica fora disso.

Os clientes ainda conseguirão alcançar uma pessoa?+

O link de ajuda do widget fica a um passo de começar uma conversa, então o auto-servir nunca prende ninguém.

Crescimento e SEO

Inteligência do site (Suite SEO)

Inteligência do site éOpsIQEstá embutido.SEO Rasteja seu site como um motor de busca, rastreia onde você classifica, pesquisa palavras-chave, relógios backlinks e concorrentes, verifica sua presença no mapa local, verifica a velocidade da página, e transforma tudo em relatórios prontos para o cliente, com um analista de IA que explica o que corrigir e pode redigir as correções.

Inteligência do site
Painel de Inteligência do SiteUm painel de SEO mostrando uma pontuação no site, rastreio de palavras-chave e tendência de tráfego.Inteligência do siteyoursite.com86SITE SAÚDE3 Questões críticasRastreamento de linha de palavras-chaveAi helpdesk#3-Conversa ao vivo.#7CRM para agências.#12Clicks orgânicos1RASTREAREncontra problemas técnicos.2TRACKRanks, palavras-chave, backlinks3ANÁLISE DE AIExplica e corrige os rascunhos.
A visão geral da Inteligência do Site: uma pontuação de saúde no site, do último rastreamento, rank keyword ao vivo, uma tendência orgânica-cliques, e o loop de três passos: rastejar, rastrear, deixar a IA redigir as correções.

Obtendo Inteligência do Site

O site de inteligência é parte dos planos que o carregam, e um plano que não funciona, funciona exatamente como o PeopleOS HR: Conta.→Complementos e fichasUm plano gratuito, ou um plano pago ainda dentro de seu próprio plano de teste, não pode adicioná-lo até que seja propriedade da suíte esteja escondida da barra lateral e um link direto ofereça o complemento, quando uma camada for atingida, a página oferece a próxima camada, quando um julgamento termina sem comprar, o direito é removido e nada é cobrado. Página de preços.

Corra um rastejo. Comece aqui.

Um rastejo é OpsIQ Visitando suas páginas como um motor de busca, para encontrar problemas técnicos: links quebrados, títulos faltando, conteúdo fino, páginas lentas, problemas de indexação.

1
Comecem a rastejar.

Na visão geral, clique para começar um rastreamento. OpsIQ Faz fila e trabalha em suas páginas ao fundo, um indicador de status mostra progresso.

2
Leia os relatórios.

Quando terminar, abra os números e a lista de páginas.

3
Deixe o IA ajudar.

O analista de IA produz um resumo simples do que está errado e por que isso importa, e pode gerar correções sugeridas que você reveja antes de se candidatar.

Que site a Inteligência rastreia

Rastejando e saúde local

Analisa suas páginas por problemas técnicos de SEO e lista todas as páginas com seus problemas.

Rastreamento de patente.

Adicione as palavras-chave que você gosta; OpsIQ Verifica onde seu site está e rastreia o movimento ao longo do tempo.

Pesquisa de palavras-chave

Descubra novas ideias de palavras-chave para o alvo, com a palavra-chave treinador da IA para ajudar a priorizar.

Links de volta

Veja quem liga a você, refresque a lista e renuncie aos links que não quer associados ao seu site.

Concorrentes

Adicione domínios de concorrentes e compare sua visibilidade com a deles, com uma análise do concorrente de IA.

Grade local

Analisem a visibilidade local através de uma grade geográfica para ver onde você aparece no mapa, e ferramentas do perfil de negócios do Google.

Velocidade da página

Faça verificações de velocidade para consertar páginas lentas que ferem rankings e conversões.

"Conteúdo de IA"

Gere resumos de conteúdo e rascunhos voltados para as palavras-chave que você está mirando.

Relatórios

Construa relatórios imprimíveis, prontos para clientes de tudo acima.

Conecte o Google para obter dados precisos.

Dois conectores do Google transformam estimativas em números reais:

Google Search Console

Busca

Puxe as perguntas exatas, cliques e impressões Relatórios do Google para seu site, mapeie sua propriedade e oportunidades de classificação da superfície diretamente dos dados do próprio Google.

Google Analytics 4

Tráfego

Traga seus dados de tráfego e engajamento junto com seus dados do SEO, então os relatórios mostram visibilidade e comportamento juntos.

Atualizações agendadas e relatórios de etiqueta branca

Você não tem que correr tudo à mão, as atualizações programadas são re-run crawls, cheques de classificação, verificação de palavras-chave, atualização de backlinks, varreduras locais e geração de relatórios em uma cadência (diária ou semanal dependendo do plano e volume). OpsIQ Cron, veja a seção de Cron e automação, relatórios gerados exportam como documentos imprimíveis prontos para o cliente: agências enviam a cada cliente uma atualização regular do SEO, e porque os dados de cada domínio são separados, cada cliente só vê seus próprios.

Alguns recursos da Inteligência do Site chamam provedores de dados externos e IA através OpsIQ Eles trabalham fora da caixa quando a suíte está habilitada para o seu plano.OpsIQ Cron está rodando (ver Cron e automação).
Preciso adicionar algo ao meu site para rastreamento de SEO?+

Rastejando, rank tracking, pesquisa de palavras-chave e backlinks funcionam sem tocar em seu site para tráfego e dados exatos de busca, conecte o Google Search Console e GA4.

Posso rastrear mais de um domínio?+

Adicione cada domínio separadamente, seus rastreios, rankings e relatórios ficam totalmente isolados um do outro.

Com que frequência devo rastejar?+

Semanal é o bastante para a maioria dos sites, rastejar sob demanda após uma grande mudança de conteúdo ou estrutura, definir um horário para que você nunca esqueça.

Crescimento e SEO

Auto-Implementação (Agente SEO)

Auto-Implemento é a parte da Inteligência do Site que aplica as correções que o rastreador e analista de IA recomendam, em vez de apenas aconselhar você. O agente trabalha estritamente a partir do que a Inteligência do site já encontrou (que nunca pode inventar uma mudança) e caminha cada correção através do mesmo loop seguro: uma pré-visualização de corrida a seco, sua aprovação por passo, a escrita ao vivo, um instantâneo automático, e um re-crawl que prova que a contagem de questões abertas caiu. É uma característica Managed-AI-only; aparece como a ação Auto-Implemento (rocket) dentro da seção de Inteligência do Local, e está desligado até que você ligue.

Auto-Implementação
Auto-Implementar agente SEOUm fluxo mostrando correções recomendadas de SEO movendo-se através da pré-visualização, aprovação e uma escrita ao vivo, com um comprovativo re-crawl.Auto-Implementaçãoyoursite.comConsertos recomendadosAdd missing <title>aprovadoConserte robôs.aprovadoEnvie o mapa do site.xmlRevisãoPREVISÃO DE DRY-RUN (DIFF)+ <title>AI Helpdesk - OpsIQ</title>+ <meta name=description ...>- <title>Home</title>AprovarSkip.Prove-o - RE-CRAWLProblemas em aberto. 124-Snapshot salvo.1ANTERIORDiferença de cada correção.2APROVAR E ESCRITASSH ou hospedado API3Provem, rollbackRe-crawl + instantâneo
Como uma sessão corre: o agente lista as correções de Inteligência do Site já recomendadas, mostra um diff seco de cada um, aplica os que você aprova mais SSH ou um anfitrião. API, fotos antes de cada escrita, e recriar para provar que a contagem em aberto caiu.

O que pode mudar

O agente só aplica correções que a Inteligência do Site (ou o analista de IA) já recomendou para esse domínio.

Configuração do servidor

Sitemap.xml, robots. txt, e redirecionar, regras canônicas e cabeçalho em . htaccess (Apache / LiteSpeed) ou na configuração nginx.

Redirecionar correntes

Recolher uma corrente de redirecionamento multi-hop para um único salto direto para a final. URL, dentro do mesmo bloco gerenciado .htaccess, então velocidade e valor da ligação parar de vazar através do salto extra.

Page <head>

Títulos de página ausentes ou fracos, meta-descrições, etiquetas canônicas e blocos estruturados de dados (squema).

WordPress SEO

Yoast, Rank Math e SEOPress títulos e meta, e imagem alt texto, aplicado através WP-CLI no caminho SSH ou o REST API no caminho hospedado.

WordPress dados estruturados

Adiciona JSON-LD (squema) a páginas que estão faltando. No caminho SSH um pequeno ajudante gerenciado (um plugin de uso obrigatório) imprime a marcação para que funcione com ou sem um plugin SEO; no caminho hospedado seu plugin SEO carrega-o.

Ligações internas

Adiciona uma ligação interna relevante dentro da existência. WordPress Um link por página, nunca dentro de um cabeçalho, um link existente ou um shortcode, e sempre aprovado por você primeiro.

Conteúdo de páginas finas reescritas

Todos os projetos são revisados e aprovados por você antes de qualquer coisa publicar, e o conteúdo antigo é mantido para que possa ser restaurado.

Cache de página (WordPress)

Liga o cache de página W3 Total Cache quando o rastreamento encontra problemas de velocidade e que plugin é instalado, então páginas servem mais rápido.

Shopify SEO

Produto e coleção SEO títulos & descrições, página e blog-artigo SEO, mais 301 redireciona, através da Shopify Admin. API.

Webflow SEO

Por página SEO Título e meta descrição através do Webflow Dados API V2.

Prepare as correções automaticamente (duas opções de rastreamento)

O painel de configuração do Site para um domínio (settings) tem duas opções que decidem quanto o agente faz filas para você antes do tempo.

Auto-preparar IA conserta depois de cada rastejar

Cada rastejo também escreve o conteúdo de correção de concreto (títulos, meta descrições, texto alt, esquema, redirecionamentos) para o que encontrou, então as correções estão prontas para revisar e aplicar o momento em que o rasteje termina em vez de ser gerado mais tarde sob demanda.

Conteúdo de IA reescreverá

O agente pode redigir conteúdo de substituição para páginas finas, nada é publicado por si só, cada rascunho aparece como uma mudança que você revisou lado a lado e aprovou ou rejeitou, o conteúdo anterior é mantido, então ele é reversível, e está limitado a algumas páginas por passe.

💡
Cada mudança ainda passa pela mesma aprovação, instantâneo e retrocedendo como qualquer outro remédio, então ligá-los nunca coloca nada ao vivo por si só.

Duas maneiras que ele conecta

SSH / SFTP caminho

Auto-gerenciado

Para sites em seu próprio servidor, o agente se conecta. SSH/SFTP usando credenciais que você armazena, edita a configuração do servidor e arquivos de página diretamente, e executa WP-CLI para WordPress Melhor quando você tem acesso de shell e quer controle total dos arquivos.

Hospedado...API caminho (não SSH)

Sem concha.

Para plataformas que não permitem SSH, o agente trabalha inteiramente através de um oficial API Conector, WordPress (REST + senhas de aplicação), Webflow (Dados API V2) e Shopify (Admin API Nada está instalado no hospedeiro.

💡
Wix e Squarespace não têm SEO-escrita pública API, então nessas plataformas o Auto-Implemento é executado em modo consultivo: mostra a mudança exata para fazer (o título preciso, meta ou configuração) para você aplicar à mão.

Ligue os conectores.

O agente chega a cada plataforma através de um conector:

Construído em

Shopify e WordPress Conectores de nave com OpsIQ, apenas habilitá-los sob conectores e adicionar a loja / site credenciais.

Do Mercado

Webflow_, Wix e Squarespace instalar de Conectores → Marketplace, em seguida, conectar da mesma forma.

Como uma sessão funciona

1
Escolha as correções.

Abra o Auto-Implemento (rocket) da seção de Inteligência do Site, lista os problemas que a Inteligência do site já descobriu que pode corrigir neste domínio.

2
Visualize cada mudança.

Para cada correção o agente mostra uma diferença de corrida (exatamente o que ele vai escrever) antes de qualquer coisa tocar no local ao vivo.

3
Aprove passo a passo

Você aprova (ou ignora) cada mudança individualmente, nada é aplicado sem sua autorização explícita nesse passo.

4
Escreve, depois instantâneos.

Na aprovação, o agente faz a mudança ao vivo SSH Ou o anfitrião. API E salva uma foto primeiro, para que qualquer mudança possa ser revertida.

5
Prove, viva

Quando se aplica cada mudança, o agente verifica imediatamente essa página exata e mostra um veredito "consertado ao vivo" por etapa, então você vê cada correção pousar na página ao vivo como acontece.

Segurança e faturamento

Só SEO.

O agente só pode fazer o que a Inteligência do Site recomendou para esse domínio, não pode fazer alterações arbitrárias no seu site ou servidor.

Aprovação por passo

Cada escrita é exibida como uma diferença e aplicada apenas depois de aprovar esse passo específico.

Snapshot e retroceder

Uma foto é salva antes de cada escrita, então qualquer mudança pode ser revertida.

Viva por passo à prova.

Cada página mudada é re-verificada no momento em que for escrita e recebe um veredito ao vivo, então uma correção é confirmada contra a página ao vivo imediatamente, não só na recriação final.

O conteúdo nunca é publicado automaticamente.

Links internos e reescrita de conteúdo de páginas finas são de maior impacto, então eles sempre são mostrados para você aprovação e nunca são aplicados automaticamente, seja qual for o modo que você executar.

Apenas a IA gerenciada.

Auto-Implemento é executado na IA gerenciada; ele é bloqueado quando um espaço de trabalho está usando o seu próprio (BYOK) chaves.

Contagem

AI tokens Bill normalmente como você usá-los, mais uma taxa por uso plana por sessão de Auto-Implemento, ambos extraídos do mesmo crédito Gerenciado-AI.

Auto-Implemento está desligado por padrão. Habilite na página de configuração da IA (Cartão de Auto-Implemento) e certifique-se que o conector para sua plataforma esteja conectado primeiro.
Isso muda alguma coisa sem perguntar?+

Cada mudança é visualizada como uma diferença de corrida e aplicada apenas depois que você aprovar esse passo exato.

Eu preciso? SSH Acesso?+

Não, não. WordPress, Shopify ou Webflow Eles trabalham através de seu oficial APIs Sem acesso a conchas. SSH é apenas um dos dois caminhos, usado quando você quer que o agente para editar configuração do servidor e arquivos diretamente em seu próprio servidor.

Como sei que funcionou?+

Depois de aplicar as correções aprovadas o agente re-rawls o site e mostra a contagem de questões abertas antes e depois, para que você possa confirmar que as correções reduziram os problemas.

Será que vai reescrever ou publicar conteúdo de página por conta própria?+

Não, o conteúdo da IA está desligado até que você os ligue nas opções de rastreamento, eles são limitados a algumas páginas finas por passe, e todo rascunho é mostrado para aprovação lado a lado antes de qualquer coisa ser publicada.

Posso usar com minhas chaves de IA?+

Não, o auto-implemento é apenas gerenciado e está bloqueado. BYOK Ele cobra fichas de IA normalmente mais uma taxa fixa por uso por sessão, do mesmo crédito Managed-AI.

Crescimento e engajamento

Estúdio de Pesquisas

O estúdio de pesquisas é o espaço de trabalho para criar pesquisas editáveis que podem ser entregues como uma página independente rica, widget do site ou inline embed.

⚠️
Limite atual contra alvo: A experiência de criação e pré-visualização premium, Connector Builder survey O estúdio de pesquisas ainda precisa da arquitetura independente de multi-implantação, porta de identidade assinada, fiação variável e alvo, fluxo de transmissão do CRM e digitação. surveys.* API.

Faça uma pesquisa.

1
Escolha como as pessoas vão aceitar.

O assistente atual oferece página e link Standalone, widget do site e incorporação em linha.CRM E-mail, ligações privadas e implantações QR como escolhas de primeira classe.

2
Escolha o propósito.

Escolha NPS, CSAT, CES, feedback do produto, pós-compra, cancelamento, onboarding, site, evento, webinar, suporte, chumbo / demonstração, julgamento, testemunho, pesquisa, funcionário, ingestão ou feedback geral.

3
Use um modelo completo ou comece em branco.

O catálogo atual tem entradas editáveis prontas agrupadas por propósito.

4
Personalize ou reveja rapidamente.

A revisão rápida abre o mesmo rascunho na verificação final da visão do cliente, nada publica ou envia automaticamente.

Escolhas de entrega e comportamento presente.

Página e link autônomos

Uma página de marca responsiva com sua própria URL Use convites privados e expire quando cada destinatário precisar de um link controlado.

Widget do site

O canal legado migrado pode usar página, geografia, dispositivo, visitante, data, amostra, arrefecimento, visita e regras de cota, ainda é apoiado pela ponte ativa-vigida do legado enquanto a arquitetura de implantação é construída.

Incorporação em linha

Uma pesquisa sensível colocada dentro de uma página, portal, produto ou centro de ajuda.

E-mail

Hoje o estúdio pode gerar convites. HTML Enviar de ponta a ponta de contatos/segmentos CRM, com consentimento, supressão, agendamento, retentação e correlação de resposta, é o alvo aprovado de integração CRM Outreach.

Design e visualização da empresa.

As páginas de pesquisa têm temas e famílias de layout de página, controles responsivos, cópia de boas-vindas e completação assinadas, e uma prévia do rascunho assinado.

💡
O estúdio de pesquisa é independente do estúdio de promoção, o direcionamento em tempo de execução, identidade, ativos, renderização e análise deve ser propriedade da pesquisa, o conteúdo da promoção pode ser reutilizado apenas através de uma cópia/importação explícita que cria dados separados da pesquisa e as edições posteriores da promoção não devem ter efeito.

O produto completo.

implantações independentes.

Viva

Uma pesquisa pode ter páginas, widgets, incorporação, e-mails de CRM, links privados e implantações QR, cada uma com seu próprio estado, design, audiência e análise.

Esforço e campanhas de CRM

Viva

Construa uma audiência verificada de segmentos CRM e conectores com capacidade para pesquisa, congele-a em uma versão imutável, faça um convite assinado cada, e envie através do conector de email fixo com a prova de entrega por convite.

Kit de campo e validação.

Viva

Sliders, escolha de imagem, upload de arquivos, assinatura, endereço, telefone, cabeçalhos e texto rico, com comprimento min/max, e-mail /URL Predefinições do número, texto de erro personalizado e prefil por pergunta URL Parâmetros.

Lógica, fórmulas, resultados

Viva

E/ou grupos de condição, regras de filial, um motor de fórmula segura sobre respostas, e bandas de pontuação que carregam sua própria página de resultado: um teste marcado cai em seu veredicto.

Linguagem, quiosque, prefil

Viva

Um visitante listando apenas idiomas com traduções reais, modo quiosque para tablets compartilhados (alvos maiores, auto-redefinição, sem redirecionamento), um construtor de links pré-preenchimento, e texto de segurança editável.

Teste A/B

Viva

Publicar uma versão desafiante em qualquer implantação com uma divisão de tráfego, os visitantes são atribuídos com firmeza, as respostas são carimbadas com a versão realmente servida, e a tabela de comparação mostra respostas, conclusão e pontuação média por versão.

Digerir semanalmente

Viva

Um e-mail semanal com o último 7 dias de pesquisa KPIs, as pesquisas mais movimentadas, o pulso de Feedback e a última reunião da IA, enviados através do conector de saída preso.

Governação

Viva

Listas de acesso por pesquisa restringem quem pode editar, publicar ou excluir uma pesquisa.

Plataforma de desenvolvimento

Viva

Contrato de conexão 2.2, pesquisas digitadas. * e feedback.* ações sobre api V1, levantamento canônico. * eventos, webhooks assinados duráveis com formatos de relé Slack e Google Sheets, e uma resposta PDF Exportar.

Crescimento e engajamento

Análise de Inquérito e Feedback são produtos diferentes.

O feedback explica o que os clientes disseram em todas as fontes permitidas e o que o negócio deveria fazer sobre isso.

Análise de Inquéritos

Ele mede a elegibilidade, exposição, comportamento de gatilho, inícios, conclusão, abandono, atrito de perguntas e ramificações, tempo, resultados de implantação/campanha/versão e confiabilidade do tempo de execução.

Visão geral e caixa de entrada

Uma permissão para respostas completas, feedback de widget legado, chat e ticket CSAT, retorno de resposta de ticket, avaliações de respostas de clientes, votos úteis de base de conhecimento e fontes externas/custom aprovadas.

Análise de Feedback

Analisa o significado do cliente: tendências métricas originais, tópicos/temas, sentimento, emoção, intenção, urgência, pedidos, reclamações, elogios, viagens/produto/serviço/equipa segmentos, detratores e resultados fechados.

Propriedade dos dados.

As respostas da pesquisa continuam autoritárias no armazenamento da Pesquisa, o feedback armazena uma referência de fonte reconstruível e sinais derivados, então cargas permitidas evidências sob demanda.

⚠️
A página de Feedback atual ainda tem um navegador de resposta Survey e uma caixa de entrada legada separada, e seus totais de IA ainda não usam o modelo de fonte normalizado completo.

NPS, CSAT, CES, estrelas, polegares e ajuda sempre devem manter seu método original, escala, amostra, janela de data e denominador.

Crescimento e SEO

Promoção Studio

O Promotion Studio transforma seu site em um motor de conversão, pop-ups de design, banners, slide-ins, barras de top/bottom, tomadas de tela inteira, blocos inline e até redirecionamentos baseados no país, então mostre a mensagem certa para o visitante certo no momento certo. OpsIQ Você projeta e economiza campanhas a qualquer momento, eles só mostram quando você as publica e o estúdio está ligado para seu espaço de trabalho.

Promoção Studio
Promoção Studio designerUm designer de campanha visual com uma paleta de blocos, um pop-up na tela, e um painel de mira.Estúdio de Promoção - DesignerBLOCOSxBem-vindo. {first_name}!Ganhe 15% de desconto em sua primeira compraSAVE15Reclame meu cupom.ALVOPaísEUA, CAGatilhoSaída-intençãoA/B dividido50 / 50Publicar1PROJETOArrastar blocos para a tela2ALVOPaís, página, público3MEDIDAVencedor A/B + Insight IA
O designer visual: uma paleta de blocos à esquerda, sua campanha sobre a tela (aqui um cupom personalizado pop-up usando um {first_name} E o painel de alvo + publica à direita.

O quadro geral

Campanha

O quê?

Uma promoção: um pop-up, banner, bar, slide-in, tela cheia, bloco inline ou geo-redirect.

Design e versões

Como

Você constrói o visual no editor, cada salva cria uma nova versão, para que você possa sempre voltar atrás.

Alvo

Quem?

Quem vê: país, página, dispositivo, fonte de tráfego, retorno vs novo, agenda, e (com um conector) seus clientes logados.

Gatilhos

Quando

Quando aparece: instantaneamente, no atraso, no rolagem, na entrada de saída, quando inativo, em um clique, após páginas N, ou da atividade chat / ticket.

-Esquecimento.

Resultados

Impressões ao vivo, cliques, conversões, um funil de entrega, divisão de país/página/dispositivo, vencedores do A/B e uma visão da IA.

Lançar sua primeira promoção em 5 Passos

1
Comece de um modelo ou em branco.

Abra o estúdio de promoção e clique em Nova campanha, ou escolha um projeto pronto da galeria de modelos.

2
Desenhe-o.

Arraste-se em blocos, cabeçalhos, texto, botões, imagens, crachás, estatísticas, contagem regressiva, formulários, cupons, vídeos, avaliações, rodas de giro, cores de estilo, gradientes e efeitos 3D com os controles deslizantes.

3
Personalize-o.

Digite fichas como {first_name}, {country} ou {company} No show-time eles se tornam os valores reais do visitante.

4
Alvo e gatilho

Escolha quem vê (país, página, dispositivo, público) e quando dispara (atraso, rolagem, entrada de saída).

5
Verifique, e depois publique.

Clique em Verificar para uma rápida pré-lançamento, depois Publicar.

Bloqueios que você pode construir

Conteúdo

Núcleo

Cabeçalho, parágrafo, lista, citação, imagem, ícone, distintivo, estatísticas, divisor e espaçador, os blocos de construção de qualquer mensagem.

Chamada à ação.

Núcleo

Botões com ações reais: abrir um link, começar uma conversa, criar um ticket, copiar um cupom ou pular para uma página.

Urgência e captura

Prémio

Contagem regressiva, formulários (e-mail / telefone / texto), cupom revela e vídeo incorpora.

Gamificado e feedback

Prémio

Rodas girando para ganhar, raspadinhas,NPS/ audiências de estrelas e funis multi-passo.

Layout & efeitos

Prémio

Colunas, barras de progresso, social, provas sociais, sim/não, dois passos, testes, e efeitos 3D, inclinação, brilho, paralaxe, vidramorfismo.

Fichas de personalização

Digite qualquer um desses em cabeçalhos, parágrafos, botões, crachás, estatísticas, listas ou citações.

Tokens disponíveis
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)

Referência de alvo

País e localização

Mostrar apenas em países escolhidos, cidades ou fusos horários via GeoIP.

Páginas. URLs

Limitar a certas páginas usando igual/com início/contém/regex, e excluir páginas também.

Dispositivo

Desktop, tablet ou celular, por exemplo, uma barra fina no celular, um modal na área de trabalho.

Tipo visitante.

Novo, retornando, conhecido (em seu CRM) ou anônimo; segmentos de CRM, estágio do ciclo de vida, pontuação principal ou linguagem do navegador.

Fonte de trânsito

Por UTM (utm_source, utm/campaign) ou site de referência, por exemplo, apenas visitantes de um anúncio específico.

Agendar e frequência

Datas de início/fim, janelas do dia e quantas vezes uma pessoa pode vê-lo (por sessão, por dia, depois que fecham/cliquem/convertam).

A/B divisão de tráfego

Mostre a uma porcentagem de visitantes e execute variantes cara-a-cabeça; a mesma pessoa sempre vê a mesma variante.

Audiências (logged-in)

Com um conector ativado, alvo por estado de conta ao vivo, por exemplo, clientes com faturas não pagas, ou assinantes ativos.

Gatilhos

Escolha como a promoção aparece: imediatamente, após um atraso, na profundidade de rolagem, na entrada de saída, quando inativo, em um clique de um elemento, depois de uma série de páginas vistas, no formulário-abandono, ou da atividade chat / ticket. window.OpsIQPromo.fire('event').

Alvos registrados em clientes (conectores)

Isso é o que faz OpsIQ Promoções especiais: conectar uma plataforma como WHMCS (ou qualquer conector que suporte o público) e o estúdio pode direcionar visitantes por seu estado de conta ao vivo.

1
Ativar um conector de audiência

Sob os conectores, habilitar um que expõe fatos do público (WHMCS Os clientes são reconhecidos com segurança quando conectados a essa plataforma, OpsIQ Nunca confie em um e-mail digitado.

2
Adicione uma regra de audiência

Na campanha de Segmentação > Audiência, requeira login e adicione regras como faturas não pagas >= 1, a assinatura é passado-dever, ou crédito de conta > 0.

3
Personalize-se com seus dados.

Use fichas como {first_name} ou {balance_due} Um lembrete de "você tem uma fatura atrasada" escreve-se.

Se o conector não pode confirmar um fato, a promoção simplesmente não aparece, então uma oferta de faturamento nunca chega à pessoa errada.

O comércio conectado (a superpotência do estúdio)

Cartões de produto da sua loja.

Dados ao vivo.

Um bloco de produto puxa itens reais (nome, preço, preço de venda, imagem, link) diretamente de WHMCS, WooCommerce, Shopify ou o seu OpsIQ Marque "Mantenha-se fresco" e o cartão atualiza seu preço da plataforma a cada hora enquanto é publicado.

Cupões providos de lojas.

Cupons

Um bloco de cupons pode criar o código de desconto real na sua loja no momento em que você publicar, então o código que um visitante revela sempre funciona no checkout.

Receita da verdade de ordem.

Atribuição

As ordens reais de suas plataformas são comparadas às campanhas a cada hora (por código de cupom usado ou pelo e-mail da líder) então a receita que você vê é de vendas reais, não estimativas.

Provas sociais reais.

Confiança

O coração à prova de segurança social pode liderar com ordens recentes genuínas. 2h Só o primeiro nome e item, nunca e-mails ou quantias.

Experimentos e viagens

Variantes A/B e ganhador automático

Dividir tráfego entre variantes de design, deixar o estúdio promover o vencedor estatístico automaticamente, ou o tráfego manual para o bandido otimizador que muda os visitantes para o que converte como evidência vem em.

Agüentem a elevação.

Reserve uma parte de visitantes que não veem nada, para provar que a campanha causa o elevador.

Variantes de segmentos

Conteúdo diferente por público na campanha SAME (visitantes de celular, carrinhos grandes, clientes retornando), cada segmento tem sua própria versão.

Experimentos de gatilho

Variantes também podem testar quando aparecem: imediata vs retardada vs de entrada, medida cabeça-a-cabeça.

Viagens (correntes)

Alvo pelo que alguém fez com outra campanha ("viu a campanha A mas não se converteu") para construir sequências de promoção multi-passos.

Teasers.

Uma pequena visita pode reabrir após fechar a campanha, então um pop-up fechado nunca se foi para sempre.

Sabe o que aconteceu?

Clique em mapa térmico.

Designer

No designer, alternar o mapa térmico para pintar visitantes reais clica em cada bloco do seu projeto.

Degrau funil

Funis

Campanhas multi-passo mostram exatamente onde as pessoas saem, tela por tela.

Compare campanhas.

Estúdio

Coloque até quatro campanhas lado a lado (impressões, cliques, conversões), melhor valor destacado.

História semanal e digerir

IA

Todas as segundas-feiras, um digerir cai em suas notificações.📖O botão da história semanal escreve um resumo simples com os próximos passos sempre que quiser.

Trabalhando confortavelmente

AI co-piloto e ideias

Converse com o copiloto de design para editar a tela ("faça a manchete urgente, adicione uma contagem regressiva"), obtenha ideias de campanha de seus próprios dados de tráfego, traduza uma campanha por país ou corrija automaticamente uma pontuação baixa.

Importação do kit de marca

Um comando lê seu site e propõe suas cores e fontes reais, salvar e cada picador leva com eles.

Funil multi-tela

Os blocos de passos ficam verdadeiros por edição na tela: guias para cada tela, adicionar ou reordenar telas, e a pré-visualização segue adiante.

Versões e presenças nomeadas

Diga as versões importantes ("candidato à vitória"), restaure qualquer uma delas, e veja um aviso quando um colega de equipe está editando a mesma campanha.

Disparador e réguas

Veja o desktop, tablet e móvel lado a lado em uma vista, alternando réguas de pixel para posicionamento preciso.

Página hospedada e canais

Cada campanha também pode ser uma página de hospedagem independente para bios e códigos QR, uma sequência de gotejamento de e-mails para leads capturados, ou um rascunho de push na web com um clique.

Segurança empresarial

Publicar janelas de congelamento (períodos de troca-congelamento), um interruptor de emergência pausa-tudo, aprovações, pista de auditoria e versão rollback.

Preciso adicionar código ao meu site?+

Promoções são entregues pela mesma pessoa. OpsIQ Elemento que você já instalou.

Visitantes verão o mesmo pop-up vez após vez?+

Não, definir as frequências (por sessão/dia ou parar depois que alguém fecha, clica ou converte).

Quem pode publicar?+

Publicar, pausar, arquivar e voltar são limitados a donos de espaço de trabalho e administradores completos.

Crescimento e SEO

Promoção Designer de Produto

Promotion Designer é um editor de bloco sensível para construir, revisar, versionar e publicar uma experiência de campanha.

Tela de produto
Promoção Designer de ProdutoO designer combina uma tela ao vivo, pré-visualizações de dispositivos, blocos, variáveis de personalização, comentários e histórico de versões.Promoção Designer de ProdutoEspaço de trabalhoVIEWPORTÁrea de trabalhoVERSÃOv12ESTADORascunhoOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOBloqueio de herói.Headline, mídia e CTAEditarBloqueio de ofertaDesconto e prazoEditarPersonalizaçãoVariáveis de contato e campanhaPronto.-O que está fazendo?Comentários e validaçãoRevisão1BUILD BLOCKSEditar layout ao vivo2ANTERIORDesktop, tablet, celular3PUBLISHVersão de lançamento
O designer combina uma tela ao vivo, pré-visualizações de dispositivos, blocos, variáveis de personalização, comentários e histórico de versões.

Use blocos para compor a experiência, visualizar cada viewport suportado e inserir variáveis de personalização aprovadas.

Crescimento e SEO

Modelos de promoção

Modelos fornecem uma galeria de busca, categorizada para campanhas do Promotion Studio.

Tela de produto
Modelos de promoçãoA galeria filtra layouts premium e aplica cores de marca quando um modelo se torna um rascunho.Modelos de promoçãoEspaço de trabalhoCATEGORIAConversãoRESULTS24BRANDAplicadoOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOOferta de saídaModal com urgência e CTAVisualizaçãoNova visita bem-vinda.Banner e lista de benefíciosVisualizaçãoLançamento do produtoHerói, prova e contagem regressiva.VisualizaçãoPedido de feedbackPrompt de pesquisa compactaVisualização1FILTERCategoria e busca2ANTERIORInspecione o projeto completo.3USECrie um rascunho marcado.
A galeria filtra layouts premium e aplica cores de marca quando um modelo se torna um rascunho.

Buscar ou filtrar por categoria, carregar resultados adicionais, visualizar a experiência completa, e então escolher Use o modeloA nova campanha continua sendo um rascunho e pode ser alterada no Promotion Designer antes da publicação.

Crescimento e SEO

Análise da promoção

Análises de promoção conectam impressões e cliques a conversões, contexto do público, resultados de ação de conectores e aprendizado de campanha.

Tela de produto
Análise da promoçãoAnálises de promoção mostram desempenho, audiência e falhas de gatilho, leva exportação e resultados de ação de conectores.Análise da promoçãoEspaço de trabalhoIMPRESSIONS42.8kCTR6.4%CONVERSIONS814OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOPaísReino Unido · 31%DestruiçãoPágina/pricing · 22%DestruiçãoGatilhoIntenção de saída. 44%DestruiçãoAção do conectorCupom criado · 97% sucessoResultado1MEDIDAImpressões à conversão2SLICEPágina, país, dispositivo3LEARNAplique o insight
Análises de promoção mostram desempenho, audiência e falhas de gatilho, leva exportação e resultados de ação de conectores.

A análise e os resumos de aprendizagem devem ser tratados como hipóteses para validar, não como prova automática.

Crescimento e SEO

Anúncios

Anúncios publicam uma mensagem na área de notificação do widget com o objetivo opcional, agenda e chamada para ação.

Tela de produto
AnúnciosO editor de anúncios inclui conteúdo, CTA, audiência, segmento, regra da página, datas ativas e estilo visual.AnúnciosEspaço de trabalhoAtivo3AUDIENCESegmentoREGIMEJul. 22–29OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOTítuloManutenção planejada.Pronto.ConteúdoMensagem de marcaçãoPronto.CTALeia a atualização.OpcionalRegraPáginas de preços · clientes ativosAlvo1WRITETítulo e Marcação2ALVOAudiência, segmento, página3REGIMEJanela ativa
O editor de anúncios inclui conteúdo, CTA, audiência, segmento, regra da página, datas ativas e estilo visual.

Escolha todos os visitantes, visitantes ou novos visitantes, opcionalmente estreitar o público com um segmento de contato e regra de página, definir ativas/ativas para datas e uma bandeira ativa, estilo Premium predefinições e cores mudar apresentação mas não substituir conteúdo claro.

Crescimento e SEO

Push campanhas

As campanhas enviam notificações para visitantes após saírem do site.

Tela de produto
Push campanhasO compositor mostra alcance, conteúdo, mídia, ações, regras de destino e o estado da programação.Push campanhasEspaço de trabalhoSUBSCRIBERS8,214SENTIMOS31.6kCLICK RATE5.8%OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOTítuloSeu carrinho está esperando.Pronto.CorpoVolte hoje para entrega gratuita.Pronto.CTA-Abra o carrinho.Pronto.AgendarEnvie agora ou agendado.Rascunho1PREPARE PUSHTítulo, corpo, ícone2ALVOAudiência, segmento, página3SENDAgora, agenda ou rascunho
O compositor mostra alcance, conteúdo, mídia, ações, regras de destino e o estado da programação.

Configure as teclas de Web Push primeiro nas configurações de Webpush, uma campanha pode incluir título, corpo, ícone, imagem de herói, distintivo, CTA e até dois botões de ação, uma notificação persistente permanece até que o visitante interaja.

Segmento opcional de contato e regra de página, guarde um rascunho, programe ou envie imediatamente, use a assinatura e clique em métricas para julgar o alcance, HTTPS e um trabalhador corretamente hospedado são necessários em sites integrados de terceiros, veja Web Push em sites de terceiros.

Crescimento e SEO

Mensagens proativas

As mensagens proativas chegam automaticamente no momento em que o comportamento de um visitante coincide com uma regra, antes que eles perguntem. OpsIQ Já está no seu site.

Proativo.
Mensagens proativasUm compositor proativo em três partes: escolha uma ação (chat, banner, tour, push, email), adicione condições e defina um resfriamento de frequência.Mensagens ProativasEspaço de trabalho1 · AçãoMensagem de bate-papoBandeiraTourEmpurre.E-mail2 · Condiçõespage = /pricingHora na página > 20sVoltando3 · FreqüênciaUma vez por sessão.Situação1ACÇÃOConversa, banner, e-mail, empurrar...2CONDITIONSPágina, tempo, pontuação, retorno3FREQUENCIAResfriamento por visitante
Cada regra proativa é três escolhas: o que acontece (chat, banner, tour, push, email, webhook), quando (condições), e quantas vezes (refrigeração).

As três partes de uma regra

1
O que deve acontecer (ação)

Mostrar uma bolha de bate-papo ou banner on-page, iniciar um tour guiado, enviar um push web ou e-mail, atribuir a um departamento, ou disparar um webhook. {{visitor_name}} e {{page_title}} tornar-se valores reais.

2
Quando deve disparar (condições)

Estreita quem aciona: página/URL, tempo na página, profundidade de rolagem, pontuação do lead, retorno vs novo, ocioso.

3
Quantas vezes

Defina uma refrigeração para que a mesma pessoa não seja incomodada, por exemplo, uma vez por sessão ou uma vez ao dia.

⚠️
O espaço de trabalho alterna "Execute as regras do tempo/idle por hora" permite que ações do lado do servidor (email, push, webhook, atribua) disparem em um cronograma para contatos conhecidos que não estão atualmente na página, assim você pode "enviar leads quentes inativos" automaticamente. Ele precisa do OpsIQ cron rodando. Deixe-o desligado se você só quiser empurrãozinhos ao vivo.
Vai atirar para todos?+

Adicione pelo menos uma condição (página, placar, retorno...) para atingir os visitantes certos.

Como isso se relaciona com fluxos e excursões?+

Eles trabalham juntos: uma regra proativa pode iniciar um Tour guiado, e um Fluxo de Chatbot pode ser desencadeado por uma regra pró-ativa.

Crescimento e SEO

O Chatbot flui.

Chatbot Fluxs é um conjunto de passos conectados: você faz uma pergunta, o visitante escolhe uma opção, e o fluxo os envia para baixo do ramo correspondente.

Como funciona
O Chatbot flui.Uma tela de fluxo: um nó de saudação se ramifica em três botões de opção, cada um levando a um próximo passo, olhando para a ordem, ou entregando para um humano.SaudaçõesComo posso ajudar?Siga minha ordem.Pergunta de cobrançaFale com um humano.Procurem ordem.→ Agente humanoTriggers: Saudações!
O Chatbot flui.

Fluxo vs a IA · quando usar qual

Use um fluxo.

Quando o caminho é previsível e você quer que seja idêntico toda vez: marcar passos, um assistente retorna, um escolhidor de "qual plano?", coletando um e-mail antes da entrega.

Use a IA.

Quando as perguntas são abertas, "isso funciona com minha configuração?"... o cliente bate papo responde pelo seu conhecimento treinado... um fluxo pode passar para a IA (ou um humano) em qualquer etapa.

Gatilhos

Saudações

É a mensagem de abertura quando um visitante abre o bate-papo.

Palavra-chave

Corre quando o visitante digita uma palavra que você lista (por exemplo, reembolso, preços, cancelamento).

Depois dos detalhes, depois do atraso.

Começa quando os detalhes de contato são compartilhados, ou uma hora marcada para a conversa.

No chat final / Proactive

Corre quando o bate-papo termina (por exemplo, uma classificação), ou é iniciado por uma regra de mensagem proativa.

Construa um em quatro passos

1
Crie o fluxo

Clique em Novo Fluxo, nomeie, escolha um tipo de gatilho (e palavras-chave se palavra chave), salve.

2
Abra a tela.

O construtor visual onde você adiciona passos (mensagens, perguntas com botões, ramos) e as conecta.

3
Adicione ramos e uma entrega

Para cada escolha, desenhe um galho para o próximo passo... e acabe com os caminhos resolvendo, entregando à IA ou transferindo-se para um humano.

4
Activar

Clique em Activar, o fluxo vai ao vivo no seu widget imediatamente, desativar a qualquer momento sem perder o design.

Fluxos substituem a IA?+

Eles correm lado a lado, usam fluxos para caminhos previsíveis e IA para perguntas abertas, um fluxo pode sempre passar para qualquer um.

Crescimento e SEO

Visitas guiadas

Tours guiados são passos a passo que apontam em partes da sua página com bolhas de fala e um holofote, guiando um visitante através de onboarding ou uma nova característica.

Como funciona
Visitas guiadasUma página fraca com um toque de holofote em torno de um botão Add-deal e uma bolha de fala temática leitura Passo 1 de 4 com um botão Próximo.+ Adicionar acordoPASSO 1 OF 4Crie seu primeiro negócio.Clique aqui para adicionar um acordo ao seu oleoduto.Próximo →
Visitas guiadas

Como se constrói um passeio

Passos

Cada passo tem um elemento e mostra uma bolha com seu texto, acrescentando quantas paradas precisarem e ordenando.

Predefinições e tema

Comece de uma pré-definição ou projete sua própria bolha (cor, gradientes, holofotes) com uma prévia ao vivo à direita.

Gatilho

Opcionalmente, ligue uma regra proativa para que a turnê comece automaticamente quando essa regra for disparada (por exemplo, a primeira visita de um visitante retornando ao painel).

Active alternância

Uma turnê só pode ser feita enquanto Active estiver marcada.

Construa um em quatro passos

1
Nova turnê

Clique em Nova Visita Guiada, nomeie e ligue opcionalmente uma regra proativa para que comece automaticamente.

2
Adicione os passos.

Adicione cada parada, escolha o elemento que aponta e escreva o texto bolha.

3
Desenhe-o.

Escolha uma predefinição ou faça o estilo da bolha.

4
Ativar

A turnê pode ser executada, por conta própria, ou iniciada por uma regra de mensagem proativa.

Como começam as excursões?+

No gatilho deles, ou através de uma regra da mensagem proativa "Viagem Guiada", então você decide quais visitantes vêem qual turnê e quando.

Crescimento e SEO

Metas de conversão

Os objetivos de conversão transformam uma atividade com a qual você se importa (um evento webhook, uma mensagem de bate-papo, uma resolução de tickets) em uma conversão gravada com atribuição total. OpsIQ registra uma conversão contra o contato e a liga às campanhas, segmentos e fontes que levaram até lá.

Como funciona
Metas de conversãoUm fluxo de metas: um evento webhook bem sucedido torna-se uma conversão gravada "compra" no valor de $49, atribuída à sua fonte e campanha, com chips predefinidos de início rápido acima.-Começo rápido.StripecomprarDemo reservadoInscrição da newsletterpayment.succeeded- O que está fazendo?Conversão"Comprar" · $49Atribuído- A campanha.
Metas de conversão

Defina um gol em três passos.

1
Escolha a atividade do gatilho.

Escolha o tipo de atividade que conta como conversão, ou use uma predefinição de início rápido, compra Stripe, reserva de demonstração, inscrição de newsletter ou assinatura iniciada.

2
Diga o nome e defina um valor.

Dê à conversão um nome (compra, demo_booked, inscrição) e opcionalmente um valor fixo e uma janela de atribuição.

3
Salve

A partir de então, sempre que a atividade dispara, OpsIQ registra uma conversão contra o contato com a atribuição aos toques anteriores.

Os objetivos já estão conectados em hooks de acesso: qualquer gol cujo gatilho corresponda a um evento inbound tipo dispara automaticamente no momento que o evento chegar.Stripe, Calendly ou qualquer sistema que possa POSTJSON.
O que pode ser uma conversão?+

Qualquer atividade gravada: um evento de webhook (pagamento. sucedeu), uma captura de e-mail, uma resolução de tickets, qualquer coisa na linha do tempo de contato.

-Esquecimento.

Painéis personalizados

Os painéis personalizados permitem construir sua própria visão das métricas que importam, em vez de confiar apenas na Visão Geral padrão.

Painéis personalizados
Painéis personalizadosUm construtor de painéis com KPI e gráficos de azulejos, uma zona de queda arrojada, e um botão Add-widget.Painéis personalizadosEspaço de trabalhoMeu painel.+ Adicionar widgetVISITORES2,481RECEITAS$8.2kTRÁFEGOArraste um widget aqui.TOP PAGAMENTOS/pricing/docs/signup1ADD WIDGETSEscolha métricas e gráficos.2ARRANGEArraste e redimensione3PARTICIPAÇÃOCom sua equipe
Construa seu próprio tabuleiro: adicione KPI, gráfico e widgets de lista, arraste e redimensione-os no layout que você quer, então compartilhe com a equipe.

Construa um em três passos.

1
Adicionar widgets

Clique em Adicionar Widget e escolha a métrica ou gráfico que você quer rastrear.

2
Organize o layout.

Arraste os widgets para reposicionar e arraste suas bordas para o redimensionamento.

3
Salvar & compartilhar

Salve o painel e compartilhe com sua equipe para que todos vejam os mesmos números.

Mantenha quadros separados para trabalhos separados (um quadro diário de olhar com contagens ao vivo, e um conselho mensal de revisão com gráficos de tendência) para que cada um permaneça focado.
Crescimento e SEO

Campanhas de divulgação

O alcance é... OpsIQ É...1:1E o motor de e-mail em massa: compor uma mensagem personalizada ou executar uma campanha para um segmento CRM, com detecção de resposta, controle de tempo de envio, rastreamento aberto/clique, um pixel de rastreamento e cancelamento de um clique.

Antecedentes
Campanhas de divulgaçãoA tela de divulgação com guias Compositor/Campanhas/Templates/Replies e uma tabela de campanha mostrando envio, taxa aberta e taxa de resposta.AntecedentesEspaço de trabalhoCampanhasCompositorModelosRespostasCAMPANHASENTIMOSABERTORESPOSTASBoletim de junho1,20048%7%Acompanhamento do julgamento34062%14%Vingança de volta82039%5%Responder detecção auto-para as sequências. Um clique para cancelar a assinatura em cada envio.11:1 & BULKCompor ou campanha2TRACKEDAbre, clica, responde3COMPLIANTDescribe-se embutida
O motor de extensão: enviar1:1Ou executar campanhas para um segmento, rastrear aberturas e respostas, e manter conformidade com o inbuilt-in cancelamento de assinatura e detecção de resposta.

As quatro abas

Compositor

Escreva um personalizado.1:1E-mail com {tokens} do contato e CRM.

Campanhas

Envie para um segmento de CRM, programado ou agora, com caps e controle de tempo de envio.

Modelos

Modelos de mensagens reutilizáveis para repetidas tentativas.

Respostas

Responder à detecção registra respostas e para automaticamente os acompanhamentos de quem respondeu.

Como uma campanha corre

1
Escolha uma plateia

Escolha um segmento de CRM (ou faça upload de uma lista).

2
Compor

Escreva a mensagem com fichas de personalização, antevisão contra um contato real.

3
Agendar & enviar

Um registro de pixels de rastreamento abre, cliques e respostas são atribuídos.

A divulgação é aprovada e a supressão foi encerrada, inclui um clique para cancelar cada envio e segue CAN-SPAM/ CASL.
-Esquecimento.

Relatórios agendados

Relatórios agendados enviam uma métrica escolhida para os destinatários escolhidos em um horário (diário, semanal ou mensal) como um rótulo branco e imprimível. PDF Coloque-o uma vez e o relatório cai em caixas de entrada automaticamente através do OpsIQ Cron.

Relatórios agendados
Relatórios agendadosA tela de relatórios agendados: uma tabela de relatórios com sua programação, destinatários e última vez enviada, além de um botão de relatório salvo.Relatórios agendadosEspaço de trabalhoRelatórios agendados+ Economize relatórioRELATÓRIOREGIMERECIPIENTESÚLTIMO ENVIOTráfego semanalMon. 9:00[email protected]2D atrásRelatório do cliente SEOMensal[email protected]Jun. 1Resumo de vendasDiariamente[email protected]todayEntregue como um rótulo branco. PDF através da OpsIQ Cron.1AUTOMATEDDiariamente · semanal · mensal2LABEL BRANCOPDF para clientes3RECIPIENTESEnviado no horário.
Defina um relatório uma vez (set métrico, alcance, programação, destinatários) e OpsIQ E-mails um rótulo branco PDF automaticamente em sua cadência.

Faça um relatório.

1
Escolha o que enviar.

Escolha o conjunto métrico (tráfego, SEO, vendas, suporte...) e um intervalo de datas.

2
Definir agenda & destinatários

Diariamente, semanal ou mensal, em um momento que você escolher, para um ou mais destinatários de e-mail.

3
Salve

O relatório gera e envia e-mails, sem passo manual.

💡
Relatórios agendados passam pelo OpsIQ Cron, se um relatório não chegar, confirme que o Cron está funcionando (ver Cron e automação).
Privacidade

Privacidade e conformidade

A página de Privacidade e Compliance é o único lugar para mostrar a um auditor que você lida com dados pessoais responsavelmente: o livro de registro de consentimento, o registro de acesso do administrador, sua residência de dados e política de retenção, e um pronto para imprimir DPA, em uma visão tabulada.

Privacidade e conformidade
Privacidade e conformidadeA tela de Privacidade e Compliance: guias para o registro de consentimento, log de acesso, residência e DPA, com uma tabela de permissões e cancelamentos por canal.Privacidade e conformidadeEspaço de trabalhoLivro de ConsentimentosDiário de acessoResidênciaDPACONTATOCANALACÇÃODATA[email protected]E-mailConcedido.Jun. 12[email protected]pushRevogadoJun. 10[email protected]marketingConcedido.Jun. 9Provas de todos os consentimentos e revogação, por canal.1CONSENT LEDGERProva de cada bolsa2ACCESS LOGQuem tocou nos dados?3DPAModelo para impressão
Uma tela pronta para auditor: um registro de consentimentos pesquisáveis (grands/revokes by canal), um registro do acesso de quem tocou dados, residência / configurações de retenção, e uma impressão DPA.

As quatro abas

Livro de Consentimentos

Um registro pesquisável de cada concessão de consentimento e revogação, por contato, canal (e-mail, push, SMS, in-widget), ação, fonte e data.

Diário de acesso

Quem na sua equipe viu, editou, exportou, apagou ou enviou os dados de um contato, com o administrador, contato, ação, razão declarada e IP. Exatamente o que um regulador pede.

Residência e retenção

Declare onde os dados deste espaço de trabalho vivem, defina quantos dias as linhas de atividade são mantidas (0 = para sempre), e grave seu controlador de dados e DPO.

DPA modelo

Uma adenda para processamento de dados que preenche seu controle, endereço, DPO, residência e retenção. PDF.

Privacidade e conformidade se juntam com o estúdio de consentimento da Cookie (que coleta o consentimento) e a página Exportar (que produz a cópia de dados para uma DSAR) Veja também Cron e automação para a limpeza noturna.
Conectores

Conecte suas plataformas.

Ligação de conectores OpsIQ Para plataformas externas: lojas de comércio eletrônico, sistemas de faturamento, processadores de pagamento, provedores de e-mail e customizados APIs Uma vez conectado, a IA pode procurar por pedidos, dados de clientes, assinaturas e muito mais, e tomar ações com sua aprovação.

Como funciona
Conectores hubOpsIQ Núcleo conectado a WHMCS, Shopify, Stripe, WooCommerce, SendGrid e Google Business Profile, cada um mostrando um status conectado.WHMCSShopifyStripeWooCommerceSendGridGoogle BPOpsIQCORE1PLUG IN25+ conectores pré-construídos2AI CONTEXTDados reais da plataforma.3ACTIONSJá chega de sua aprovação.
Conectores

Navios comOpsIQ

Estes estão presentes no momento em que você instalar e só precisa de suas credenciais.

WHMCS

Contagem

Alojamento de clientes, serviços, ingressos, faturas, domínios, servidores.

Shopify

Comércio eletrônico

Comércio eletrônico: pedidos, clientes, produtos, inventário, pagamentos, webhooks.

WooCommerce

Comércio eletrônico

WordPress e-commerce: pedidos, clientes, produtos, cupons, transporte.

WordPress

CMS

Conteúdo e usuários em umWordPressSite.

Quadrado

Pagamentos

Pagamentos e ponto de venda: pedidos, clientes, catálogo.

osCommerce

Comércio eletrônico

E-commerce legado: pedidos, clientes, produtos.

BotbleHotel.

Ponte.

Um hotel Botble CMS através da assinaturaOpsIQA implementação de referência para uma plataforma semAPI.

Zendesk

Suporte

Helpdesk: ingressos, usuários, organizações, comentários.

Perfil de Negócios do Google

Marketing

Negócios locais: revisões, posts, perguntas e respostas, insights. OAuth.

Calendário Google

Produtividade

Calendários e eventos.OAuth.

GmaileIMAP

E-mail

Caixas de correio: entrada e saída, sincronização do livro de endereços.

SendGrid

E-mail

Entrega de e-mail: envie e-mails e gerencie modelos.

- O que é isso?

E-mail

Entrega de e-mail: envie e-mails via Mailgun.

Slack, Telegrama, LINHA, X DM

Mensagens

Mensagens para conversas de entrada e saída.

Meta-canais.

Mensagens

Facebook Messenger, Instagram DM e WhatsApp.

Inteligência do Site (GA4, Consola de busca)

-Esquecimento.

Análise e busca de dados para o SEO Suíte.

Enriquecimento do site e CRM Importação

CRM

Enriquecimento da empresa e importação de clientes.

Disponível no mercado

Instale um dos conectores, Marketplace e é copiado para a pasta de conectores ao vivo, depois disso se comporta exatamente como os acima.

Stripe

Mercado

Pagamentos: encargos, clientes, faturas, assinaturas, pagamentos, disputas.

BigCommerce

Mercado

E-commerce: pedidos, clientes, produtos, categorias, marcas.

Magento. 2

Mercado

Comércio eletrônico: pedidos, clientes, produtos, categorias, inventário.

PrestaShop

Mercado

Comércio eletrônico: pedidos, clientes, produtos, regras de carrinhos, transportadores.

OpenCart

Mercado

E-commerce: pedidos, clientes, produtos, categorias.

Amazon SES, Postmark, Reenviar

Mercado

Entrega de e-mail transacional.

Jira, Linear

Mercado

Problema e rastreamento de projetos.

Zoom, Microsoft Calendar, Outlook Correio

Mercado

Reuniões, calendários e correspondência.

DocuSign, Apollo, SerpApi,Google Analytics

Mercado

Assinatura, prospecção, pesquisa e análise de dados.

Webflow, Wix, Squarespace

Mercado

Plataformas de sites.

💡
A lista de conexões se move como pacotes são publicados.

Instalando um conector.

1
Vá para os conectores.

Navegue para os conectores na barra lateral do administrador.

2
Encontre o conector.

Procure na lista ou procure, os conectores estão agrupados por categoria.

3
Activar

Clique no conector e alterne Activar.

4
Digite credenciais.

Preencha os campos obrigatórios: API Chave, URL Cada conector tem requisitos específicos documentados em seu painel de configurações.

5
Ligação de teste

Um resultado verde significa que o conector pode chegar à plataforma externa.

6
Configurando recursos.

Escolha quais recursos habilitar: sincronização de conhecimento, sincronia de webhook, ações de IA.

Que conectores lhe dão

Contexto de IA

A IA pode procurar dados de clientes, pedidos, assinaturas e mais através do conector.

Contexto de IA (autores do conector)

O ContextProvider do seu conector alimenta o ticket-AI um resumo da conta somente de leitura do proprietário do ticket. customer_id Quando conhecido, caso contrário, na passagem auto-replica, onde a bandeira ctx customer_trust_email É verdade, olhe a conta customer_email Plataformas remotas expõem um /context/customer-by-email Endpoint e o conector chamam de "O" é o que faz a IA citar um equilíbrio real em vez de dizer "por favor, faça login." Honrar as teclas da classe de dados do operador.customer_sections, customer_allow_creditE ficar estritamente só para leitura, nunca emite segredos.

Diretório de clientes (autores do conector)

O seu conector IdentityProvider alimenta três buscas universais de ingressos: lookupCustomerById() (cartão de cliente), lookupCustomerServices() (mesa produto/serviço) e listCustomers($query,$limit)"Pesquisa cliente ou digite email" escolhendo o formulário nativo Compose-New-Ticket. {id, external_id, name, email, company, phone, platform, platform_label}. Regra remota: Se seus clientes vivem em outro banco de dados ou serviço, pegue-os sobre sua plataforma.API dentro destes métodos, nunca leia as tabelas do outro sistema diretamente (no OpsIQ DB, eles são placeholders vazios, por isso uma leitura local devolve um coletor vazio.API URL; manter uma leitura local apenas como um recuo do mesmo-DB.

Bilhetes por e-mail, detecção e roteamento (autores do conector)

Quando o e-mail se torna um bilhete nativo, OpsIQ Detecta o remetente chamando lookupCustomerById(0, ['email'=>$sender]) em cada conector, a primeira partida "depende" do cliente e sua platform A bala está estampada no ticket.created evento como _pipe_owner_platform (vazio = convidado).WHMCS- O e-mail do cliente abre uma passagem.WHMCS (WHMCS Numerando, espelhado como um), enquanto um remetente desconhecido permanece um convidado nativo. Se seu conector espelhar bilhetes nativos em sua própria plataforma, seu ticket.created O encarregado deve se por aqui. if (array_key_exists('_pipe_owner_platform',$payload) && $payload['_pipe_owner_platform'] !== '<your-slug>') return;A chave está ausente nas passagens não-pipeadas, então aqueles espelhos como antes.→Ingressos abertos via e-mail (Anyone / Customers only / Off).

Ações

A IA pode executar ações através do conector: criar tickets, atualizar pedidos, cancelar assinaturas, tudo com sua aprovação através da Camada de Confiança.

Conhecimento

Conectores contribuem com artigos de conhecimento específicos para a IA. Shopify Conector adiciona solução de problemas no comércio eletrônico; WHMCS Conector adiciona conhecimento de hospedagem.

Importação de base de conhecimento (autores do conector)

Se sua plataforma abriga uma base de conhecimento, declare um kb_capabilities Bloquear. settings.json (tipo kb_sourceE seu conector aparece no editor da Central de Ajuda. Importar KB → Importar de um aplicativo conectado É declarativo, nenhum método para implementar: nome de um built-in adapter (zendesk Para a Central de Ajuda da Árvore exata. API, ou crawl para qualquer site KB) e um base_template Como por exemplo https://{subdomain}.zendesk.com, que OpsIQ As credenciais nunca saem do servidor, o navegador só envia a bala de conector. opsiq_kb_<platform>_manifest() Adaptador e referência pelo nome. connectors/PLATFORM_CONNECTORS.md §5.

Webhooks

Alguns conectores registram webhooks com a plataforma externa para notificações de eventos em tempo real (novos pedidos, atualizações de tickets, etc.).

Rastreamento de vendas

Conectores de comércio eletrônico alimentam dados de receita no painel de vendas para atribuição e análise.

💡
Cada espaço de trabalho pode ter conectores diferentes habilitados com credenciais diferentes.WHMCS O espaço de trabalho usa o WHMCS Conector; a Shopify O espaço de trabalho usa o Shopify Conector.
Posso usar vários conectores de uma vez?+

Sim, você pode ter.Shopifypara ordens eStripeA IA mescla dados de todos os conectores habilitados.

E se minha plataforma não estiver listada?+

Use o Conector Builder para criar um conector personalizado para qualquer plataforma com um REST API ou verifique no Marketplace por conectores construídos pela comunidade.

Conectores funcionam com auto-anfitriões. OpsIQ?+

Conectores funcionam de forma idêntica em edições de nuvem e auto-anfitriões.

Conectores

Contrato de vendas e faturamento

Cada conector comercial usa o mesmo contrato de evento neutro. WHMCS é a implementação de referência, mas SaaS Bridge, lojas, provedores de pagamento, conectores de mercado e pacotes Connector Builder devem obedecer às mesmas regras.

O que cada conector comercial deve publicar

Um livro de contabilidade autoritário.

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.

Identidade de fonte estável

A plataforma é a bala do registro de conectores, como whmcs, shopify Ou opsiq_saas. "traffic_source" contém atribuição de aquisição verificada quando fornecida; caso contrário, use a mesma lesma que o retorno. OpsIQ resolve o nome do conector amigável na UI.

Idempotência

Event_id deve ser determinístico, mapeie pelo menos um order_ref imutável, fatura_ref ou subscription_ref para que webhook retries e backfills atualizem o mesmo evento em vez de criar vendas duplicadas.

Hora da fonte

Ocorrem os pagamentos ou o tempo econômico de eventos reportados pela plataforma fonte.

Dinheiro e FX

Se a configuração do conector habilitar a conversão OpsIQ FX, o relatório converte para a moeda de reporte da área de trabalho; caso contrário, relatórios preservam a moeda da loja ou da plataforma de faturamento.

Ciclo de vida baseado em evidências

Uma compra repetida pelo mesmo cliente não é automaticamente uma renovação.

Limite de vendas

Apenas receitas de vendas e conversões pagas positivas, novas, renovações ou legitimamente desconhecidas pertencem a vendas e reembolsos são reportados por reembolso e análise de lucro líquido crédito conta, carteira top-ups, token top- ups e Add Funds permanecem eventos de faturamento e nunca contam como vendas, converções, volume de pedidos ou receita de vendas.

CRM permanece separada.

As transações de CRM representam a atividade do gasoduto e do negócio, não são vendas em plataforma comercial, a menos que uma plataforma conectada emitesse o pedido ou fatura paga através deste contrato.

Cada sinal de pagamento abre a linha.

Quando a plataforma envia várias confirmações de um pagamento (fatura paga, ordem paga, transação adicionada, pagamento concluído) qualquer um deles pode abrir a linha do livro assim que a plataforma confirmar o pagamento da venda; a impressão digital da venda colapsa os irmãos em uma fila.

Reconciliação programada (Contrato) 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.

Projeções derivadas

Conversões e resumos de painéis são projeções de compatibilidade reconstruídas do livro de registros.

Limite da plataforma remota.

Um conector remoto lê sua plataforma através do API configurado autenticado. Nunca deve depender de tabelas de banco de dados do mesmo servidor. O domínio autenticado exato site_key é fornecido pelo ConnectorRegistry e deve ser aplicado a cada registro escrito e backfill.

Exemplo de evento pago canônico

Evento de comércio normalizado
{
  "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"
}

Mapeamento do Conector Builder

Quando as vendas e faturamento estão habilitadas no Connector Builder, quantidade do mapa, moeda, status de origem e data da fonte, além de pelo menos uma ordem, fatura ou assinatura referência. API O SalesIngest gerado passa todas as fileiras pelo mesmo normalizador de registro comercial usado pelos conectores embutidos e do mercado.

⚠️
Créditos e Add Funds são intencionalmente retidos para faturamento, equilíbrio de clientes e análise de registros, excluindo-os das vendas não os exclui, só impede que inflacionem o desempenho comercial.

O ciclo de vida decide o que se torna um negócio de CRM.

lifecycle_type Não é uma etiqueta de análise.OpsIQ lê para decidir se uma venda entra no oleoduto CRM, então todo conector de vendas está tomando uma decisão sobre o oleoma se ele pretende ou não.

novo

Abre um negócio fechado (novo negócio).

renovação, atualização

Não há acordo de negócios, renovações se convertem em uma curva de probabilidade diferente e misturando-as corrompe ambas as previsões.

reembolso, crédito

Dinheiro devolvido a um cliente não é uma vitória.

Omitido / desconhecido

A venda é registrada, mas nunca chega ao oleoduto.

Uma venda, uma linha de registros: identidade é a venda, não o evento.

Não combinem. event_id e se insira. event_id is platform:eventName:externalIdUma plataforma que anuncia um pagamento duas vezes, como a de uma empresa. invoice.paid e novamente como payment.completed - Menta dois ids e aterra o mesmo dinheiro duas vezes, sem nada para colidir e nada para avisar.

💡
Encontrados na instalação de referência: seis faturas com três linhas de registro cada, de três caminhos de código usando três esquemas diferentes.0.00Então, nenhum total parecia errado, e qualquer processo posterior que restabelecesse valores reais teria contado um pagamento três vezes.

O núcleo calcula a identidade comercial da venda.sale_fingerprint), combina com uma linha existente sobre ele, preserva o original event_id Em atualização, e filtros para colunas reais:

A única forma de escrever o livro de vendas
\OpsIQ\Commerce\CommerceEventContract::upsertSaleRow('opsiq_sales_events', $row);
Mesma venda, muitos eventos

Fatura. paga, pagamento. completa e venda. concluída por uma fatura compartilhe uma impressão digital e atualize uma linha.

Reembolsos ficam separados.

O dinheiro saindo é um fato diferente do dinheiro entrando, o reembolso de uma fatura mantém sua própria identidade, então nunca pode sobrescrever o pagamento que reverte.

Sem referências, sem impressões digitais.

Uma fila sem ordem, fatura, assinatura ou referência de serviço não tem nenhuma impressão digital, então duas linhas não relacionadas nunca colidem só porque ambas estão faltando uma identificação.

Precedência de referência

Facture_ref, então order_ref... depois subscription_ref., e depois service_ref: mais forte primeiro, então uma venda mantém uma identidade estável.

O livro é só para apêndices. Nunca reescreva uma venda.

Um reembolso, um cancelamento ou uma correção é um Entrada nova datadaNunca mude a linha que ela corrige, reescrever um pagamento em um reembolso parece arrumado e quebra três coisas ao mesmo tempo:

Destrui a receita bruta.

Vendas brutas e taxa de reembolso deixam de ser separáveis. E a taxa de restituição é a métrica que existe para informar.

Ele registra a inversão no período errado.

Um reembolso de março de uma venda em janeiro deve reduzir Março.

Quebra a trilha de auditoria.

As correções são contraentradas, que é como a contabilidade de dupla entrada funciona há cinco séculos.

Então um conector relata a inversão em vez de aplicá-la: retorno refunded_at e refund_amount O que é isso, o que é um problema?

💡
O mesmo princípio se aplica aos valores, não "reparar" um valor armazenado no valor atual da plataforma, uma fatura liquidada do crédito de conta legalmente registrada 0 no momento do pagamento, e o dinheiro já estava registrado quando o cliente recarregava.

O contrato de classificação

OpsIQ decide o ciclo de vida. Uma vez, in \OpsIQ\Commerce\SaleLifecycleClassifierUm conector declara apenas qual de sua própria plataforma palavras significam o que, implementando \OpsIQ\Connectors\SalesLifecycleConnectorInterface::salesLifecycleVocabulary()Não re-implemente o raciocínio.

Declare vocabulário, delegue a decisão
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,
]);
💡
A precedência é fixa e compartilhada: explícita, então reembolsada/cancelada, depois de crédito, depois atualização, então is_order, então recorrente, em seguida, aquisição, então desconhecida.

Declare todo o vocabulário da plataforma.

Este é o fracasso que mais custa e parece menos errado.WHMCS Conector compatível. ['hosting','addon','domain'] - uma lista que parece completa.WHMCS não emite um nu Domain Tipo para linhas de domínio reais; emite DomainRegister, DomainRenew, DomainTransfer, PromoHosting, PromoDomain, DomainAddon* e UpgradeTodos eles passaram da lista para unknown: 1,288 faturas, três anos, sem erro e sem linha de registro.

Cada novo cliente importa seu histórico através de um backfill conectorEntão, um bug de classificação não afeta um espaço de trabalho, afeta cada espaço de trabalhos que sempre se conecta através desse conector, no momento em que eles olham pela primeira vez para o seu gasoduto. prefixo Então um irmão que ninguém viu ainda classifica com seus parentes em vez de desaparecer.

💡
Um conector de vendas saudável classifica quase tudo, um fluxo constante de desconhecidos é quase nunca dados que você não tem, é um vocabulário que o conector nunca aprendeu a ler.

Reparando a história importada

Todos os enviadosOpsIQConector de vendas implementa isso. — 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() Usando o que o registro já tem. tools/crm_backfill_sales_lifecycle.php então repara o histórico importado do seu conector sem código por conexão: seco, rodando por padrão, se recupera e verifica a contagem da linha antes de escrever, reversível através de um livro de desfazer, e nunca escreve uma leitura falhada como resposta.

💡
Se seu conector não puder reler registros passados, um conector só para webhook não pode, não roube o método, um toco que retorna desconhecido é pior do que nenhuma implementação, um backfill reescreveria boas linhas como não classificadas e relataria sucesso.
💡
Referências detalhadas de pacotes permanecem disponíveis em conectores/CONNECTOR_EVENTS. md e conectores /PLATFORM_CONNECORS. mD em distribuições de fonte auto-hospedadas.
Conectores

Contrato de evento de viagem

A Journey Intelligence aceita um envelope de eventos neutros da plataforma do navegador, conectores embutidos, SaaS Bridge, pacotes de mercado e saída do Connector Builder.

Isolamento e limite de confiança

Chave exata de domínio dos pares

Um conector deve pegar essa chave do ConnectorRegistry ou seu ponto final autenticado, nunca de um corpo não confiável.

Identidade indemprotegida

Event_id é necessário para conectores e deve ser determinístico para o mesmo evento nativo.

Nome canônico nativo mais nome canônico

Preservar o nome de origem para evidências e solução de problemas, então mapeá-lo para evento evenction_name_canonical.

A evidência do servidor ganha.

A observação do navegador pode iniciar ou inferir uma jornada.

Privacidade

Envie apenas identificadores e campos necessários para a jornada declarada, respeite as configurações de consentimento, mascaramento e retenção, nunca coloque credenciais, dados de cartão, segredos de autenticação ou órgãos de mensagens particulares em propriedades.

Envelope canônico

Envelope de eventos da viagem
{
  "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"}
}

Taxonomia canônica

Famílias apoiadas incluem eventos de página de noivado/CTA, registro de conta, login, MFA e reset de senha, estágios de liderança e forma, produto, carrinho, checkout, pagamento, compra, assinatura, renovação e reembolso, impressões e conversões de promoções, eventos de ajuda, chat e ticket, eventos em segurança e eventos personalizados. account.signup.succeeded, account.login.succeeded, lead.form.succeeded, commerce.payment.succeeded, commerce.purchase.completed, commerce.subscription.renewed e commerce.refund.completed.

Inferência, confirmação e abandono do navegador

O widget pode funcionar sem um conector observando a estrutura da página, formando ações, os resultados do DOM e o registro de viagem do visitante.

Atribuição e receita

A atribuição prefere um símbolo de correlação assinado válido, então uma viagem exata, tentativa, sessão ou referência comercial, depois o gráfico de identidade consentido, e finalmente uma combinação comportamental limitada. 1A Inteligência do Site atribuiu receita a este livro, créditos, recargas de carteiras, top-ups de fichas e Add Funds nunca compram conversões.

⚠️
Modelo de atribuição, janelas de retrovisores, manuseio direto do tráfego, confiança mínima, tempo limite de abandono e definições de funil são políticas de UI.

Manifesto de conexão e Construtor

Declaração de viagem do conector
{
  "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"
    }
  }]
}

O Conector Builder valida o mapeamento e gera o mesmo adaptador neutro de plataforma usado por pacotes de primeira parte. 100 através do endpoint de integração autenticado gerado.

💡
O livro de comércio continua sendo a fonte financeira da verdade, e a ponte comercial-a-journey publica resultados confirmados pelo servidor e reconcilia atribuição após o aumento do registro idempotente existente, então um pagamento nunca se torna duas vendas.
Conectores

Como as ações da IA funcionam

Cada conector declara um conjunto de ações: coisas que a IA pode fazer através da plataforma externa.

AI ações
Como as ações da IA funcionamUma solicitação de cliente mapeada para um cartão de ação do tipo delete, e uma lista de verificação: permissão verificada, você confirma, API chamado.Como as ações da IA funcionamEspaço de trabalho"Cancelar minha assinatura"clienteIAcancel_subscriptiondeleteConfirmar necessário.Params: Subscription_id (do contexto)TIPOS DE ACÇÃOreadescreverdeletePermissão & função verificadaVocê confirma a ação.API - resultado reportado1DECLAREDCada conector lista ações.2GATEDPermissão + confirme.3THEN RUNAPI Chamada, resultado de volta.
Um pedido se torna uma ação declarada (datilografada leitura/escrita/delete) que é verificada, confirmada, então executada e reportada.

O ciclo de vida da ação

1
O cliente pede algo.

"Cancelar minha assinatura." A IA identifica que isso requer a ação de "cancelar-assinatura".

2
AI verifica permissões

Esta ação é permitida?

3
AI reúne parâmetros

A IA procura no contexto do cliente ou pergunta ao cliente.

4
Confirmação.

Para ações destrutivas ou de alto impacto, a IA pede confirmação antes de executar.

5
Execução

A ação chama a plataforma externa. API.

6
Resultado

A IA reporta o resultado ao cliente.

Tipos de ação.

Leia as ações.

Procure dados sem mudar nada, exemplos: list_orders, get_cliente, seguro, nenhuma confirmação necessária.

Escreva ações.

Criar ou modificar dados.

Apagar ações

Remova dados, por exemplo: cancelamento de inscrição, sempre requer confirmação.

Ações HTTP

Declarado em ações.json, genérico API Chamadas definidas declarativamente.

Marcas de capacidade

Campo opcional de "capacidade" em ações.json, uma etiqueta de classe neutra para conectores (por exemplo, "bilhetes" para leitura/busca de tickets, "ticket_create" para abrir um bilhete).OpsIQ Ganhe toda a classe uniformemente em todos os conectores, o bilhete sai da IA quando o operador desliga o AI Ticket Awareness, e a criação de ingressos está reservada para OpsIQ O próprio compositor, para que a ferramenta de criação de um conector não possa duplicar, declare-o e seu conector se conforme.OpsIQ O Connector Builder o expõe como um dropdown por ação.

-Codifique as ações.

Implementado em PHP na classe de conectores, controle total sobre a lógica.

Definição de ação do exemplo
{
  "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" }
    }
  }
}
Conectores

Construa um conector.

O Conector Builder permite criar um conector completo para qualquer plataforma com um REST API. Sem codificação necessária para conectores básicos.

Construa um conector.
Construtor de ConectoresUm formulário de conector sem código: nome, tipo de autenticação, base URL, um mapeamento de ação, um teste de passagem e um botão de publicação.Construtor de ConectoresEspaço de trabalhoConstrutor de ConectoresNomeMinha plataformaAuth.OAuth 2.0 (PKCE)Base. URLhttps://api.example.com/v2Ação.GET/customers → lista_clientesO teste passou.Conector de pacote1NO-CODENome, autorização, base. URL2ANY APIChave, Carregador, Básico, HMAC, OAuth3PUBLISHInto /connectors/<slug>/
Aponte o construtor para qualquer descanso. API Ative, base. URL E ações, testá-lo e publicar um conector funcionando.

Prestador completo. API cobertura

Cada geração API Conector pode expor Nativo separado.API Leia e native.API Ações curadas continuam sendo preferidas, ações nativas cobrem terminais de provedores adicionados mais tarde. JSON, forma, XML, corpos crus e múltiplos, paginação limitada,API Cabeçalhos de versão e indempotência, mantendo credenciais dentro das configurações do conector.

⚠️
Pacotes de mercado são originados de /marketplace_connectors bem como empacotados. /connectors. Aumentar a versão do pacote, regenerar o contrato e documentação, executar testes de conformidade, em seguida, re-assinar e publicar a nova versão Marketplace.

Assistente do construtor de conectores.

O mago tem seis passos, mostrados como guias em cima. Economize o rascunho. No rodapé, mantém seu trabalho em qualquer momento.

1
Identidade e perfil

Nome, lesma, descrição e ícone, então escolha um perfil de contrato: padrão API, comércio, Helpdesk, caixa de correio, inteligência do site, ponte SaaS, plataforma PHP local, ou Plataforma com não.API Quando a plataforma não serve nada calável e OpsIQ tem que instalar uma ponte.

2
Auth.

Escolha o padrão de autenticação que a plataforma usa e preencha seus campos.

3
Teste

Entre. API base URL e um ponto final de verificação, em seguida, executar um teste de conexão ao vivo usando as credenciais de passo 2Faça isso antes de definir qualquer ação, se a autorização ou a base URL Está errado, cada ação que você escreve depois falharia pela mesma razão e você estaria depurando a coisa errada.

4
Ações

Defina cada operação: nome, método HTTP, caminho final, parâmetros, mapeamento de campo de resposta e as configurações de confiabilidade descritas abaixo. API a partir deste passo.

5
Gatilhos

Mapear os eventos webhook que sua plataforma envia OpsIQ eventos, para que as coisas que acontecem em sua plataforma podem começar a trabalhar em OpsIQ.

6
Revisão, contrato de empresa e publicar

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>/.

⚠️
Publicar não funciona a suíte de conformidade, só valida o formulário do assistente e emite avisos que não bloqueiam, a suíte completa, arquivos de capacidade, o contrato de identidade e a verificação de ponte-aperta, corre quando você pressiona Dry-run e novamente na hora da instalação, pressione Dry Run antes de embarcar, toda vez.

Que publicação faz que o formulário não mostra a você

Cinco comportamentos do gerador surpreendem as pessoas, nenhum é um inseto, todos eles vão custar uma tarde se você encontrá-los por acidente.

Uma pergunta decide a passagem:API?

Atenda de uma vez.1escolhendo o modo de acesso aos dados (ou a "Plataforma semAPI"Perfil).APIO modo declara native_api and emits the <slug>_api_call passthrough. Bridge mode declares platform_bridge Em vez disso, e STRIPS native_api Mesmo que um antigo espectro o carregasse, então o manifesto, a classe gerada e os médicos especialistas não podem discordar. ai_brain_aware é adicionado de qualquer forma.

SILÊNCIO significa "tem umAPI"

O Construtor segue sua resposta, não funciona para si mesmo, e o padrão quando nada é dito éAPIEntão, não...APIA plataforma deve dizer isso. Escolha a "Plataforma semAPI"Perfil, definir o acesso de dados para ponte, ou tique-taque 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.

O teste de conexão é padrão para GET /ping

Se deixar o caminho de verificação vazio, o Construtor escreve: /ping no conector gerado e no perfil.jsonQuase nenhuma plataforma real serve essa rota, então a conexão de teste falha com HTTP.404Para um conector de ponte, aponte-o para o seu próprio ponto final de diagnóstico, prova que toda a cadeia em uma única chamada: a ponte é implantada, a chave corresponde, e a ponte pode chegar ao banco de dados.

Republicar ainda substitui suas músicas.

Tudo o resto gerado ainda faz: editar ContextProvider. php ou qualquer outro arquivo emitido e a próxima publicação substitui-o. A única exceção protegida é o arquivo bridge, o assistente só sobrepõe uma ponte carregando seu próprio marcador, então um escrito à mão fica sozinho.

Republicando arquivos deletados

Desmarcar uma capacidade e a próxima publicação remove seu arquivo de provedores, editando manualmente para qualquer arquivo gerado, ContextProvider.php acima de tudo, são substituídos sem aviso prévio, copiando personalizações primeiro ou tomando posse do pacote apagando.opsiq- Construtor.json(depois do qual o mago não vai mais administrar isso).

O status de lançamento é sempre pré-visualização.

Um pacote destinado a enviar como produção deve ter mudado de estado à mão em configurações.json- e essa edição quebra a assinatura, então re-assina depois.

A assinatura prova integridade, não origem.

Os pacotes do construtor são assinados com a própria chave simétrica desta instalação, que detecta adulteração, não prova quem escreveu o pacote e qualquer instalação segurando a mesma chave pode produzir a mesma assinatura, tratar um pacote assinado localmente como auto-assinado.

As colisões só são verificadas em uma árvore.

A editora recusa uma lesma que já existe./connectors/.Ele não olha para/marketplace_connectors/,Então um pacote de primeira-parte com a mesma lesma pode acabar na sombra.

💡
Um arquivo de conhecimento descrevendo sua plataforma é gerado a partir do nome, descrição, tipo de autenticação e ações que você definiu, e é carregado na IA quando o conector está ativado.

Definindo uma ação (passo) 4)

Cada ação tem as seguintes configurações, somente os quatro primeiros são necessários, o controle de resto quem pode executá-la e com que cuidado.

Chave de ação e etiqueta

A chave é o que a IA chama, a etiqueta é o quê um humano lê, chaves são espaçadas automaticamente com seu conector, então dois conectores podem ter uma "lista de pedidos" sem colidir.

Método HTTP

Vá, Post, coloque, patch ou delete.

URL caminho

Dirigido para a base. URL Use. {name} para os placeholders, por exemplo /opportunities/{id}/stage

Parâmetros

Para cada parâmetro você também escolhe onde ele vai: Corpo, caminho, Consulta Ou cabeçalhoUm parâmetro de caminho preenche um {placeholder}; um parâmetro de consulta é anexado ao URL.

Mapeamento de resposta

Diga qual campo no JSON Isso é o que permite que a IA leia os dados da sua plataforma em vez de adivinhar.

Quem pode usá-lo?

Suas ações de cliente são executadas apenas para o cliente assinado, e os campos de identidade estão bloqueados automaticamente para que um cliente não possa perguntar sobre outro.

Requer confirmação.

Um humano deve aprovar antes que a ação corra.

Destruidor.

Marca a ação como deletando ou mudando de estado.

Permissão necessária.

O administrador deve manter esta permissão para que a IA execute a ação em seu nome; administradores completos sempre passam. Escolha entre gerencia_integrações, gerencia_geral, gerencia-se_billing, gerencial_venda_bridge, gerenciando_conhecimento, gerenciar_aparência, gerenciador_comportamento, gerenciam_permissões, gerenciamos_perizona, responde_to_chats, escalona_to/ticket, send_agent_email, ou nenhum, significando qualquer administrador autenticado.

Descrição / dica de IA

Diz à IA quando deve agir, por exemplo, "Use isso quando o administrador pede para mudar um estágio de acordo".

Capacidade

A tag opcional da classe, ou tickets (leitura de ticket ou pesquisa) ou ticket_create (abre um ticket), a etiqueta permite que OpsIQ gate toda a classe ao mesmo tempo, por exemplo, ocultando tickets quando uma operadora desliga o conhecimento do ticket IA.

Liste caminho

Opcionais para os terminais que devolvem uma lista, o caminho pontilhado para o array, por exemplo dados ou itens de dados.

Caminho do erro

Um campo corporal cuja presença significa que a chamada falhou, por exemplo error. message, útil para APIs que retorna HTTP 200 em falha.

Corra.

Cada ação pode ser executada contra os vivos. API a partir deste passo, para que você possa corrigir um caminho errado ou nome de campo antes de qualquer outra pessoa usá-lo.

⚠️
Qualquer ação usando POST, PUT, PATCH ou DELETE começa exigindo a permissão de gerenciamento_integrações e Uma nova ação de escrita falha ao invés de deixar a IA mudar seus dados sem supervisão.
💡
Para ser chamado do bate-papo, uma ação deve ser somente leitura: deixe ambos requer confirmação e Destrutivo desencaminhado.

Recebendo webhooks (passo) 5)

O passo dos gatilhos te dá um gancho de rede. URL Para registrar com sua plataforma, e verificar todos os pedidos que chegam nela.

Cabeçalho da assinatura

O cabeçalho da sua plataforma sinaliza com, por exemplo X-Hub-Assinatura...256.

Algoritmo de assinatura

HMAC-SHA1, HMAc-SHAD256 ou HMA CAVH-512.

Esquema de assinatura

Simples, um feitiço simples ou base64 digerir, ou estilo Stripe, o formato t=...,v1=... usado por Strike e várias plataformas que copiaram.

Prefixo de assinatura

Algumas plataformas prefixam o digest, por exemplo, sha256=.

Mapeamentos de eventos

Mapear cada evento que sua plataforma enviar para o OpsIQ Evento que deve aumentar.

Auto-registrando o webhook

Se sua plataforma tem um API para gerenciar seus próprios webhooks, você não tem que registrar o URL Abra à mão. Registre-se automaticamente este webhook em activar e aponte para duas das ações que definiu em passo. 4:

Ação de criação de webhook

Chamado quando um administrador habilita o conector, você dá o nome do parâmetro que carrega o URL, opcionalmente aquele que carrega a lista de eventos e o caminho na resposta que mantém o novo ID do webhook.

Ação de exclusão do webhook

Chamado quando o conector está desativado, usando o ID capturado acima, então desativar o conector também impede que sua plataforma envie para um ponto final morto.

Capacidades que você pode ligar

Os perfis e capacidades são definidos pelo Contrato de Conector 2.2. As capacidades geradas e declarativas são emitidas diretamente; as capacidades empresariais geram uma EnterpriseExtension.php andaimes com fiação de ciclo de vida em tempo de corrida.

Ações

Operações que a IA pode executar em sua plataforma: listar pedidos, encontrar um cliente, emitir um reembolso.

Gatilhos

Receba webhooks de sua plataforma e transformá-los em OpsIQ eventos.

Bilhetes de IA

A IA Triage e a resposta Copilot em tickets que permanecem na sua plataforma, escolha o ponto final que devolve um ticket com suas respostas e mapeie os campos, OpsIQ lê o tópico através dele.

Caixa de correio e contatos.

Mostrar o correio de um cliente em sua linha do tempo, enviar de um acordo, e sincronizar seu livro de endereços no OpsIQ CRM.

Importação de clientes

Página através de sua lista de clientes e importar cada um como um contato OpsIQ. Isto é o que o botão Importar corre.

Contexto

Coloque dados ao vivo da sua plataforma em cada conversa de IA.

Identidade

Descubra qual de seus clientes é um visitante, e mostre seu perfil e compras em uma passagem.

Vendas e faturamento

Feed revenue eventos e MRR números para o OpsIQ Painéis.

Ingressos

Transforme bilhetes e e-mails que sua plataforma entrega por webhook OpsIQ Linhas de apoio.

Respostas de saída

Post OpsIQ A equipe responde de volta para a plataforma onde o fio se originou.

Sincronizar usuários

Importe suas contas de funcionários para OpsIQ Usuários da administração.

Sincronizar departamentos

Importe seus departamentos de apoio para OpsIQ.

Promo alvo e alimentação de produto

Deixe o Promotion Studio focar em fatos que você conhece sobre uma pessoa, e renderizar seus produtos reais dentro de uma promoção.

Provedor de estúdio de pesquisa

Expor dados verificados pelo servidor, variáveis escapadas e páginas de destinatários do CRM limitadas através de um SurveyProvider. php dedicado.

Nativo. IP Bloqueando.

Quando? OpsIQ Bloqueia um IP, ligue para o bloco da sua plataforma. API Então o bloco é forçado lá também.

Eventos de segurança

Receber bloqueado.IP sinais de ameaça de OpsIQ.

Conhecimento da plataforma para a IA

Cada conector que você constrói naves é uma breve referência descrevendo o que sua plataforma é e o que suas ações fazem. OpsIQ A IA do administrador lê sempre que seu conector está ativado, então entende sua plataforma ao invés de ver uma lista de nomes de ação.

API Passagem

Seu conector sempre recebe uma chamada de propósito geral para que a IA possa alcançar um ponto final para o qual não definiu uma ação digitada.

Contrato de conexão canônica 2.2 Referência

Versão do contrato: 2.4 · 57 capabilities · 8 profiles.

Perfis de conexão

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.

Capacidades canônicas

Ações

Universal actions. Capability version: 1.0. Mode: generated. Runtime methods: registerActions. Package files: actions.json.

gatilhos

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.

contexto

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.

Identidade

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.

faturando

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.

Comércio

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.

local

Local search/location data. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

Seo.

SEO data and actions. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

site_intelligence

Site Intelligence provider. Capability version: 1.0. Mode: declarative. Runtime methods: siteIntelligenceProviders. Interfaces: OpsIQ\Connectors\SiteIntelligenceConnectorInterface.

Análise

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.

⚠️
As especificações do construtor continuam sendo a fonte autorizada, e as regras de negócios específicas da plataforma nos pontos de extensão gerados, o ciclo de vida do pacote, filas, trabalhadores, migrações e testes de conformidade permanecem gerenciados pelo Construtor.

Configurações de confiabilidade em cada ação.

Retrocede

Quantas vezes tentar uma chamada falhada, com um recuo que dobra cada tentativa, apenas os erros de tempo, 429s e 5xx são repetidos, um 4xx é culpa do seu pedido e repeti-lo queimaria o limite de taxa.

Limite de taxa

Um teto por minuto para esta ação, então um gatilho ocupado não pode martelar sua plataforma. 0 sem limite.

Tempo.

Quanto tempo esperar sua plataforma antes de desistir.

Confirmação.

Exigir que um humano aprove antes que a ação corra, e use-a para qualquer coisa destrutiva.

Tipos de autenticação

Passo 2 Escolha o que combina com o da sua plataforma. API documentação, o gerador emite o cliente HTTP certo para ele.

API chave no cabeçalho

Uma chave estática enviada como um cabeçalho fixo, por exemplo X-API Você dá o nome do cabeçalho e a etiqueta que o formulário de administração deve mostrar.API Espera que a chave seja um parâmetro de consulta, em vez disso, use cabeçalhos personalizados ou um conector de código completo.

Token do portador

Token sent as Authorization: Bearer <token>. Common for modern APIs.

Auth básica

Nome de usuário e senha, base64 codificado no cabeçalho da autorização.

HMAC-assinado

Uma chave pública mais um segredo, com o corpo de solicitação assinado.

OAuth 2.0 (Carteiras de cliente)

Você dá ao token URL e um escopo opcional, o administrador fornece uma identificação de cliente e segredo, use isso quando sua plataforma emite credenciais para uma aplicação ao invés de para uma pessoa.

OAuth 2.0 (botão de conexão)

O fluxo de autorização com PKCE, para Stripe, Shopify, Slack e QuickBooks-estilo aplicativos.URL, o símbolo URL Depois de publicar, o administrador clica em conectar no conector, autoriza na sua plataforma e... OpsIQ Armazena o token de atualização e as fichas de acesso de menta sob demanda. URI Para se registrar em seu OAuth O aplicativo é mostrado na página de configurações do conector.

Cabeçalhos personalizados

Uma forma livre. JSON Mapa de cabeçalho para qualquer coisa que os padrões acima não cobrem, por exemplo {"X-API-Chave:"{api_key}"," X-Tenant:"{tenant_id} Cada placeholder se torna um campo no formulário de administração.

💡
PKCE se aplica apenas ao fluxo de botões de conexão, o fluxo cliente-credencial não tem redirecionamento e nenhum passo do usuário, então PKEC não se aplica a ele.

Estilos de paginação

Deslocamento

Usa parâmetros de deslocamento e limite.100&Limit=50.

Página

Exemplo: ?page=3Tradução e Sincronia:50.

Cursor

Usa um cursor da resposta anterior.

Cabeçalho da ligação

Usa o cabeçalho de resposta do Link com rel="próximo".

Avançado: código PHP personalizado

Não declara uma classe chamadaOpsIQOs nomes dos métodos abaixo são os que o Connector Interface requer, pegar um errado é fatal, não um aviso.

Connector. php: o contrato real, mínimo e executável
<?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.

Bilhetes de espelho para o sistema de bilhetes nativos

Quando sua plataforma possui um ticket, espelhe-o em OpsIQ do seu conector usando o auxiliar de ingesta de ticket que seu conector herda (criar para um novo ticket, adicionar resposta para acompanhamentos). subscribers() método, ticket.created, ticket.replied, ticket.updated, ticket.deletedResposta automática, escalada, SLA e CSAT todos se conectam aos mesmos eventos, então você os herda sem código extra.

Se você lidar com isso ticket.deletedVocê também lida com Fusões. Um bilhete fundido é deletado. merged_into e não é enviado para um conector que declara ticket_mergeA fusão chega uma vez como ticket.merged Em vez disso, para que você possa se fundir em sua plataforma ao invés de fechar o ticket da fusão lá. Capacidade de mesclagem de tickets (Contrato 2.4).

Diga quem escreveu a mensagem de abertura.

Um bilhete é sempre para O cliente, mas a mensagem de abertura pode ser escrita por pessoalCada helpdesk apoia isso, então é parte do universal. ticket.created contrato em vez de algo que cada conector resolve em particular.

author_type

Omita-o e o cliente é assumido.

author_id

A identificação da equipe quando autor_type=admin.

author_name

Agente ou departamento, nome do monitor.

author_email

Uma mensagem da equipe sob o e-mail do cliente é um relatório e erro de auditoria.

Isso não é cosméticos. Os consumidores lêem author_type Uma abertura escrita pela equipe como client deixa a resposta automática elegível para responder uma mensagem que seu próprio agente escreveu, e faz o eco de sua plataforma dessa abertura parecer uma nova mensagem do cliente, que então chega como uma duplicata e vira o bilhete para Respondedo.Mapeie o sinal da sua plataforma para ele no conector. Normalizador de eventosNunca nos consumidores.

Bloqueio centralizado.

Quando um agente bloqueia um remetente, isso se aplica através de Cada Canal imediatamente (e-mail, chat, portal, widget e cada conector gêmeo) porque o bloco é forçado centralmente, antes que qualquer conector veja a mensagem.

A metade opcional é EncaminhadoDiga a sua plataforma que um cliente foi bloqueado aqui, implementá-lo apenas se sua plataforma pode expressar algo equivalente.

-Capacidades.

A bandeira é uma reivindicação, a interface é a garantia.

blockSender($b)

Recebe o t ip o (e-mail domínio)ip), valor, razão, administrador, expira em, site_key.

unblockSender($b)

A mesma carga, revertida, deve ser indempotente, desbloquear algo nunca bloqueado é uma falha, não um erro.

isSenderBlocked($b)

Para reconciliação, a deriva é relatada em vez de descoberta por um cliente.

Valores de resultado

Certo.

Inclua remoto quando tiver uma identificação que valha a pena gravar.

noop

Já está no estado requerido.

unsupported

Sua plataforma não tem um conceito equivalente.

Falhou.

Você poderia ter feito isso e deu errado, incluindo detalhes, ele aterrissou na trilha de auditoria.

Declínio é uma resposta correta. Muitas plataformas não têm o conceito de "bloquear este remetente" e oferecer apenas suspensão de conta, que pára de faturar, logins e serviços em vez de apenas apoiar o correio. unsupported E deixe-o em paz.

A redução também cobre o caso onde a plataforma Pode Faça isso, mas não vai deixar. APIUma alavanca que existe apenas na interface de administração da plataforma é uma alavanca que seu conector não tem.

Exemplo trabalhado · Zendesk (a implementação de referência)

Leia connectors/zendesk/connector.php alongside this. It is short, and every branch below is a decision you will face too.

E-mail → ok

Coloque. /api/v2/users/{id} As novas solicitações do usuário final suspenso são desviadas para tickets suspensos em vez de abrir um, genuinamente a mesma ideia que bloquear um remetente, e ele pára sem faturamento porque os usuários finais do Zendesk não têm nenhum.

Domínio → sem suporte

ZendeskPODE suspender um domínio inteiro, mas só através da suspensão: palavra-chave na área de texto da lista do Centro de Administração, e nãoAPIA característica existe, a alavanca não.

ip → sem suporte

Sem nível de ingresso. IP Bloqueio existe.

Endereço desconhecido → noop

O Zendesk não pode pré-suspender um endereço que nunca viu, nada a fazer não é um fracasso e o quarteirão local ainda para o ingresso.

Agente ou administrador → sem suporte

Um endereço de um funcionário que chega a uma lista de bloqueio é mais provável ser um erro do que uma instrução, verifique o papel antes de agir.

O contrato não pode impedir que você mapeie um bloco em algo destrutivo, então cada conector tem que decidir por si mesmo o que ele recusará. detail Um operador pode ler, é melhor que obedecer.

Reporte honestamente. Observe como poucas dessas filas são okEste é o resultado correto, não uma lacuna: um bloco de domínio ainda funciona (é forçado no núcleo no momento em que está escrito); simplesmente não pode ser espelhado para fora. ok Por algo que você não fez, diria a um operador que o bloco chegou à sua plataforma quando nunca saiu. OpsIQ.

Regras

O quarteirão local sempre vence.

Está escrito antes de você ser chamado e ficar em qualquer lugar que você retornar.

Nunca jogue

Um lançamento é tratado como não suportado e gravado.

Seja indemponente.

O mesmo bloco pode ser anunciado mais de uma vez.

Volte rápido.

O ventilador está sincronizado com o clique do operador, em fila de trabalho lento ao invés de manter o pedido aberto.

Não ligue de volta.

Nunca volte a bloquear OpsIQ O registro ignora o conector de origem, mas um segundo salto faria um loop.

Cada anúncio está escrito para opsiq_block_registry_log (operação, tipo, valor, razão, administrador, origem, projétil de conector, resultado, detalhe e timestamp) para que um operador possa ver um bloco chegar da sua plataforma em vez de de um agente, e o que cada conector fez sobre isso.

Empurre os anexos corretamente.

Mão e attachments Array para criar()/addReply(). Cada item carrega o arquivo em uma de três formas:

content_b64

Base64 dos bytes do arquivo RAW, use para arquivos atrás da autenticação (a maioria dos casos de entrada). OpsIQ Decodifica e reapresenta o arquivo para você, a forma mais portátil.

url_ / fonte_url

Um https público URL (por exemplo, um conteúdo do Zendesk_url). Deve ser https; passa uma verificação SSRF / allowlist antes de ser armazenado.

stored_path

Uma referência de arquivo armazenada que você já escreveu (o que o compositor nativo produz).

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 Apenas nomes de arquivos (não bytes), então o padrão confiável de entrada é: leia os bytes onde seu código já funciona (dentro da plataforma, ou da carga útil do webhook), base64-los, e enviá-los como content_b64 no evento.

Saída (OpsIQ → sua plataforma). Quando um agente prende um arquivo, o ticket.replied A carga de carga dá-lhe os arquivos da resposta como stored_path itens sob o OpsIQ Leia-os e empurre no formato da sua plataforma, e verifique os documentos da plataforma. WHMCS Quer. base64_encode(json_encode([[name,data]])) (JSON, não serialize); Zendesk envia bytes brutos para /uploads.json Para um símbolo, então se define comment.uploads; Gmailenvia um RFC multi-parte/misto.822A base de mensagens 64url-codificada em raw; Amazon SES inbound attachments need the S3 receive action (the SNS path caps at 150 KB).

Plataformas remotas: API + webhook, nunca mais outras mesas de aplicativos

Se sua plataforma é um Aplicativo ou banco de dados separados (um SaaS hospedado, um remoto WHMCS, um DB diferente no mesmo servidor), Nunca escreva suas tabelas diretamente.Uma base de dados cruzada, que é ativa e silenciosamente falha as linhas reais. Encaminhado = chamar o REST assinado da plataforma API A caminho. = a plataforma POSTs um webhook assinado, seu handleWebhook() Verifica e dispara o fósforo. ticket.* Para parar um loop de espelho, marque o que você empurra com um marcador de origem (por exemplo. mirror_origin:'opsiq'A plataforma ecoa no gancho e seu contato de entrada ignora seus próprios ecos. OpsIQEvents::isMirroredEvent() no topo de cada encarregado.

Status do espelho, prioridade e departamento

Uma resposta move o status automaticamente, e Agente. Responder → answered, a cliente Responder → customer_replyPara mudanças explícitas, ticket.updated e ler payload['changes'] (por exemplo. {status:'closed'}).

Estado: OpsIQ O conjunto canônico é... open, customer_reply, answered, in_progress, pending, closedMantenha um pequeno mapa de duas vias para o vocabulário da sua plataforma, e certifique-se que sua coluna realmente aceite os valores que você escreve (uma coluna que é ENUM Faltando um valor é silenciosamente deixado para vazio por alguns bancos de dados). Departamento: O que é? OpsIQ A identidade do departamento não tem sentido do seu lado. Nunca envie.Envie o descritor (name, email e slugE resolver contra seus próprios departamentos por e-mail → nome → lesma, então "Departamento de Billing" pousa em Seu Departamento de cobranças em vez de GeralAtire em ambos. ticket.escalated e um department_id Mudança em ticket.updated.

💡
Status / prioridade / assunto / departamento / delete espelhamento é fechado por conexão de comutadores (espelho_status_changes, espelho_priority_chapes, mirror_subject_chages, espelhos_departamento_chaves, espelho _deletes) ler através do compartilhado OpsIQ Conectores, MirrorOptions helper, incorpore esse bloco em suas configurações.json e cada conector de bilhete-espelho lê as teclas idênticas.

Ligue um bilhete para um produto / serviço

Se o cliente escolheu um produto específico ao abrir o ticket, carimbe uma dica para que o agente veja um cartão de serviço focado (com um clique "ver outros produtos" modal para o resto).

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

Um código de serviço, por exemplo. WHMCS S396 (serviço396) / D11 (domínio11). OpsIQ Decompõe a letra opcional + ID e combina com sua lista de serviços, com um guarda tipo para que um código de domínio nunca corresponda a um produto do mesmo id. Expor um ref correspondente em cada serviço para uma correspondência exata.

related_domain

Um nome de domínio, combinado como uma sub-corrente contra o detalhe/domínio de cada serviço.

💡
Construir a lista de anexos uma vez, na forma acima, e OpsIQ Lida com o resto: hospedado. URLs Você nunca precisa escrever o processamento de arquivos por plataforma.
⚠️
As teclas de ação são letras minúsculas, dígitos e sublinhados.3para80personagens e também permite pontos; a loja de ação aceita2para100A adição de uma ação não cria nenhuma rota AJAX, então não há nada para regenerar, salvar o conector e está sincronizado.

Deixe que o IA construa para você.

Não precisa preencher os seis passos à mão, descreva o conector em suas próprias palavras e a IA do OpsIQ_ redige toda a especificação, passa pelo mesmo validador que o assistente usa, e mostra o plano antes de tudo ser escrito no disco.

No mago

Abra. Conectores→+ Adicionar conector→Construir conectorNo passo.1Você vai ver. ✨Construa para mim.Digite para que o conector é - a plataforma, o que OpsIQ deve ler e o que deve escrever, e quem usa - adicionar o API O assistente preenche cada passo do rascunho, e você revê e edita exatamente como se tivesse digitado 6 O mesmo painel aparece como ✨Refinar com AI, então você pode pedir uma mudança ("também leia faturas") em vez de editar campos.

Perguntando.OpsIQ

Abra o Pergunte. OpsIQ Nunca precisa nomear uma ação ou saber que o mago existe.

1
Peça-o.

Por exemplo: "Construa um conector para Trello, deve listar minhas placas e listas, ler cartões e criar um cartão em uma placa.APIO co-piloto responde em uma frase e mostra Rascunhe este conector. Sua mensagem é o resumo, então coloque a plataforma, as leituras e os escritos nela.

2
Confirme o rascunho.

O co-piloto redige a especificação, valida e responde com o plano: o que o conector faz, as ações que ele irá expor (escritas marcadas), os pressupostos que fez, e as perguntas que você ainda tem que responder - geralmente quais credenciais para fornecer.24Horas.

3
Diga "construir"

O co-piloto mostra uma Construir 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
Digite credenciais e habilite

O novo conector é publicado mas não está habilitado, e não guarda segredos.APITecla ou token, pressione Teste, então ActivarAté que você faça, não faz nada.

💡
As duas cartas precisam do seu clique, o rascunho não escreve nada, a etapa de construção é marcada como destrutiva e sempre pergunta, a IA não pode publicar um conector, habilitar ou inserir uma credencial por conta própria.

O que a IA é e não pode fazer

O validador é o muro.

Uma especificação redigida passa exatamente pela mesma validate() que o botão Publish do assistente usa.

Não escreve credenciais.

O rascunho nomeia o padrão de autenticação e os campos de configuração, nunca inventa uma chave, um símbolo ou segredo.

Responde com perguntas, não adivinha.

Tudo que não poderia saber, sua identificação de conta, qual região, que de dois pontos finais seu plano expõe, volta como uma pergunta sobre o plano em vez de uma suposição silenciosa.

Um ponto final inventado falha em voz alta.

A IA é dita para nunca inventar caminhos, mas nenhum modelo é perfeito.

O pacote é comum.

O que produz é um pacote normal do Construtor: mesmo arquivo gerado, mesmo contrato, mesma assinatura, editável no assistente, deletável da página Conectores.

Seu modelo faz a elaboração

A qualidade segue o modelo que você configurou em Configurações → AI. Um modelo pequeno e barato desenha um conector correto, mas simples e faz mais perguntas; um modelo mais forte recebe mais dos terminais certo pela primeira vez.

⚠️
Se as ações do Connector Builder estão faltando, um plano que não inclui elas ou um papel sem o qual a equipe de controle está sendo capaz de executar ações. manage_connectors - O co-piloto diz isso em vez de oferecer um cartão que falharia quando clicado.
Conectores

Vender através do chat: o mapa comercial

Um conector que pode vender, uma plataforma de loja, um sistema de reserva, um portal de pagamento, declara qual das suas próprias operações responde.OpsIQDeclare-o e o conector aparece em Configurações.→Conversa do Cliente→Vender através do bate-papo automaticamente, parar de declarar e desaparecer.

O arquivo: commerce_roles.json

A declaração vive em seu próprio arquivo na raiz do pacote - A presença do arquivo é a reivindicaçãoNão pode viver em connector_contract.jsonEsse arquivo é regenerado pelas ferramentas de embalagem e seu esquema rejeita chaves desconhecidas, então um bloco acolchoado à mão falharia na validação e seria substituído.

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

As regras, e por que cada uma existe

Papel é um vocabulário fechado.

OpsIQUm papel que não é declarado não existe, declarar é o contrato inteiro.

A operação deve ser uma de suas ações.

Toda operação mapeada deve existir em seu actions.jsonUm erro de digitação declara uma capacidade que não pode ser executada, e aparece para um cliente como "Posso verificar isso para você" seguido por nada.

Um papel lido nunca aponta para uma operação destrutiva.

Leia os papéis (catalog, disponibilidade, cotação, busca de pedidos) devem mapear para operações que não mudam nada em sua plataforma.

Um papel de escrita nunca mapeia uma operação genérica de gravação.

Mapeamento order_create para uma mesa crua... record.create, db.insert, recordCreateUma linha escrita diretamente ignora os preços da sua plataforma, o bloqueio de ações e a confirmação do correio, produzindo uma ordem em que seu próprio sistema não acredita totalmente.

Um papel de escrita declara uma operação de recuperação

O tempo mais perigoso é depois que sua plataforma já criou a ordem, sem uma busca de recuperação as únicas opções são tentar novamente cegar ou perdê-la.

Funções de pagamento voltadas para o provedor têm três obrigações extras.

Um pacote que fale diretamente com um provedor de pagamento também deve declarar payment_profile (moedas, países, métodos e Ambiente - um ambiente não declarado é como uma integração teste leva um pagamento ao vivo), webhook_verify (O verdadeiro esquema de assinatura do provedor, uma combinação secreta genérica é recusada) e event_map Um conector mercante que só implementa o sistema de comunicação. record_payment Recebe já provas de pagamento canônico verificados, não deve fingir ser o portal.

Declare como os clientes podem pedir de uma loja conectada.

Um conector mercante e um conector de porta de pagamento são contratos diferentes. Compra de clientes em loja conectada.A escolha está embalada dentro do sistema assinado. commerce_roles.jsonRemovendo um papel ou desativando/desinstalando o conector, portanto invalida uma proposta anterior em vez de deixar a autoridade para trás.

catalog_only

Mapas catalog_search Ou catalog_get. OpsIQCada pacote permanece neste verdadeiro padrão até que suas próprias ações de citação e compra/venda passem pelo contrato mais profundo e certificação Marketplace, nunca inferem suporte transacional a partir de um nome de plataforma.

platform_checkout

Também mapas. quote e platform_checkoutA ação mercante, não.OpsIQNúcleo... retorna. checkout_url, checkout_reference e a citação canônica URL Deve ser HTTPS, seu nome de host deve corresponder customer_ordering.checkout_hosts ou o hospedeiro HTTPS derivado de checkout_host_setting, e a citação pode viver para não mais do que15Um permalink produto, carrinho montado localmenteURLOu voltar.URLNão é uma capacidade de check-out emitida por um comerciante.

direct_order

Também mapas. quote, order_create e order_get, com order_create.recoveryO núcleo atualiza a citação imediatamente antes da execução, fornece a chave de indemnidade, e pede a operação de recuperação após cada resultado desconhecido antes de qualquer repetição. payment_flow=opsiq_gateway, deve também mapear record_payment com uma operação autoritária de recuperação/releitura. OpsIQ Verifica ativamente a transação de gateway, o valor da correspondência, moeda, mercante e referência de ordem, escreve a referência do provedor uma vez, em seguida, lê a fatura/pedido de volta mark_invoice_paid A ação de criação deve invocar a lógica de preços, ações e pedidos da plataforma; o banco de dados bruto é recusado.

Verificação de identidade, e o que o operador pode mudar

Quando?OpsIQTem o pagamento, um cliente de bate-papo deve chegar email_otp Antes que uma ordem seja criada...OpsIQe-mails a6Isso não é algo que um conector opta por fora, é a garantia de que o núcleo de execução exige order_create.

A única exceção, e quem a controla

Um operador pode aceitar um endereço não verificado apenas quando seu conector declarar fulfilment_presence: customer_presentUm hóspede do hotel deve chegar, então um endereço errado erra o recibo e o quarto ainda está lá. remote_delivery - Enviado, provido, baixado e verificação é necessária o que o operador definir, porque o valor deixa na força desse endereço sozinho. minimum_assurance Ou reversibility: irreversible Também remove a capacidade do operador de pular.

Quanto tempo dura o código?

Trinta minutos por padrão, configurável pelo operador.5minutos para24O cliente vê uma contagem regressiva em tempo real. - O próprio. Um código expirado diz isso claramente e oferece um novo em vez de relatar um código inválido, um cliente digitando um código correto, mas antigo, não cometeu nenhum erro, e dizendo que eles os enviam pelo mesmo ciclo.

O que o cliente deve fornecer: campos de clientes

Nome e e-mail são sempre necessários e são coletados primeiro. address, phone e company as required Ou optional O assistente pede para eles na conversa antes de citar, e OpsIQ se recusa a fazer uma ordem que não tem um campo necessário.

Quando a conta é criada: Conta_Tim

at_order (Por omissão) permite que a ordem de escrever criar uma conta compradora primeira vez. before_quote Quando sua plataforma de preços por conta...WHMCSimpostos pelo próprio perfil do cliente e citações na moeda do cliente - eOpsIQcria a conta através de seu customer_create A ação assim que os campos necessários forem conhecidos, então pede a cotação para essa conta, então o cartão de confirmação carrega o total que você realmente irá faturar. account_flow: connector_signup.

O assistente busca, não lê: client_tools

Com o programa Create, a assistente nunca lê um catálogo colado. commerce_catalog_search (uma consulta vazia é uma visão geral das famílias de produtos; resultados além do limite são listados pelo nome), commerce_catalog_get para um item na íntegra, e commerce_quoteUma ferramenta por verbo, seu conector como parâmetro, então uma loja com seis conectores recebe três ferramentas ao invés de dezoito. client_tools Restringe o padrão; ausente significa cada mapeado, e um catalog_only A confirmação nunca é uma ferramenta: o botão do cartão na web, exatamente como a sua voz. CONFIRM Comando em um canal, e nada que um modelo diz gasta dinheiro.

O que seus itens de catálogo devem carregar

id, name, um cliente seguro summary, a category ou família de produtos (é assim que a palavra do cliente encontra um item cujo nome é um código), currency, unit_amount_minor, available, e input_schema Buscar as palavras do cliente contra nome, família, ciclo e resumo.

Recusar com uma razão para o cliente agir.

Retorne. {"success":false,"error":"…","missing":["domain"],"retryable":true} Uma recusa que nomeia missing Ou retryable Chega ao cliente verbatim, uma falha nua permanece genérica então nada vaza interna.

Moeda Geo e parada de emergência

Quando o operador liga a moeda Geo (Conversa de cliente → Comportamento), o cliente lê preços em sua própria moeda em cada superfície — texto de bate-papo, cartão web, cartão de texto do canal e moeda de abertura da loja — usando a própria loja FX da plataforma. Seu preço nunca é substituído: o cartão mostra a figura do visitante ao lado do total da loja, e os processos de gateway exatamente a quantidade que ele exibe. Pausar todas as vendas (Configurações→Comércio) é o interruptor de desligar: catálogo, citações e buscas permanecem abertos; propondo e confirmando parada em cada canal.

Quando vender através do bate-papo não se comporta.

O comerciante não pôde ser alcançado.

O selo do pacote está quebrado, um arquivo foi editado após assinar, republicar o pacote, uma cópia instalada do mercado nunca é editada, atualizá-la do painel de mercado.

A encomenda está pausada para esta loja agora.

O botão de matar está ligado.→Comércio.→Pausar todas as vendas.

A encomenda ainda não está disponível neste canal.

O canal não está marcado onde os clientes podem comprar.

O assistente descreve um item mas nenhum cartão aparece.

Cada chamada é registrada como [opsiq][commerce][client_tool] com a razão: um item errado id, um campo que o item não declara, um domínio tomado, ou a própria recusa do comerciante.

O assistente disse que não pode ver os produtos.

Cada widget do site pertence a um espaço de trabalho, e o conector da loja deve ser ativado lá.

Uma resposta enlatada em vez de uma resposta.

"Me diga um pouco mais sobre o que você precisa" significa que o provedor de IA se chamou falhou, AI History mostra o erro exato sob aquela curva, e as ferramentas nunca foram alcançadas.

Uma edição de conector não aparece no chat.

O trabalhador recicla em um minuto, mas uma conversa reproduz sua última carta.

Um visitante nigeriano vê dólares embora a moeda geo esteja ligada.

Verifique se o geo--IPbanco de dados está configurado (Conversa do Cliente)→Geo) e que a moeda do visitante tem uma taxa de FX, sem taxaOpsIQmostra o preço da loja em vez de um número errado.

Seu total é a única figura que move dinheiro.

Uma citação carrega unit_amount_minor, quantity e total_amount_minorE é tentador tratar o terceiro como derivado dos dois primeiros.

quantity O seu multiplicador pode ser algo que o cliente escolheu, uma sala, uma licença, uma política.OpsIQUm hotel cita um quarto por três noites como quantidade.1, unidade105,000, total315,000. OpsIQUnidade multiplicada por quantidade para preço um cartão de confirmação, mostrou um convidado105,000e então carregou o315,000Concordar com uma figura e ser acusado de outra é a pior coisa que este contrato pode fazer.

A regra

total_amount_minor é a única figuraOpsIQmostra, sinais, acusações e reconcilia-se contra. unit_amount_minor Se seu total não é exatamente o que você quer cobrado, sua citação está errada.OpsIQNão vai corrigi-lo, porque um total que foi útilmente ajustado é aquele que você nunca concordou em honrar.

O que isso significa para sua ação de citação

Se sua linha não se reconciliar, unidades vezes um número inteiro nunca é igual ao seu total.OpsIQTrata a coisa toda como uma linha ao seu preço real em vez de inventar um colapso que se reconcilia com nada.

Seis respostas que fazem este contrato caber em qualquer indústria.

A declaração acima começou como uma declaração de loja: compre uma coisa, pague agora, é sua, você pode cancelar. cada um desses quatro é uma suposição que alguns negócios reais não compartilham. um banco movimentando dinheiro não pode desfazer isso. uma seguradora não pode dizer "confirmado" até que um sub-escritor tenha olhado. um comerciante fatura depois, uma clínica cobra alguém que não é o paciente. sem nenhuma maneira de dizer assim, esses negócios ou representam seu próprio processo para seus próprios clientes ou não podem se conectar em tudo.

Então um conector transacional responde mais seis perguntas. Cada um se desfaz da leitura rigorosa. - dizendo que nada é sempre seguro e nunca permissivo, porque dizer nada é o que um autor faz quando não considerou a questão.

transaction_kind

purchase, booking, subscription, bill_payment, transfer, application, top_up, renewalChamar uma transferência bancária de "ordem" faz o assistente parecer que não entende o negócio pelo qual fala, e nenhuma quantidade de encanamento correto se recupera disso. purchase.

decision_mode

immediate Ou deferredEscolha deferred para qualquer coisa que vai para a subscrição, avaliação de crédito, referências, admissões ou um comitê.OpsIQEntão diz: Apresentado ao invés de... Confirmado.Contar a alguém que seu pedido é confirmado enquanto está com um humano é a coisa mais prejudicial que um assistente de chat pode fazer para um negócio regulamentado, e é o comportamento padrão de cada fluxo em forma de varejo. immediate.

payment_timing

on_confirmation, deposit_then_balance, invoice_later Ou no_paymentIsso decide se OpsIQ abre uma página de pagamento De jeito nenhum., então não pode ser inferida de payment_flow - que diz Quem? Pega o dinheiro, aqui diz se e quandoTrabalhe na fatura depois, e aplicações que não custam nada para enviar, termine na confirmação em vez de chegar a uma lista de gateways vazia ou errada.

reversibility

reversible Ou irreversibleA coisa mais importante que um conector financeiro diz, uma sala pode ser liberada e uma encomenda pode voltar, uma transferência completa não pode, não há desfazer, o dinheiro está no outro lado, e o único remédio é pedir a um estranho para devolvê-la. irreversible forças automáticas cancellation_flow para none e proíbe qualquer operador de pular a verificação de identidade, O que mais esta declaração dizDois campos discordando não é um estado a ser resolvido em tempo de execução pelo que for lido primeiro. reversible.

cancellation_flow

none, platform_only Ou connector_cancelOs papéis de cancelamento já existiam sem regras sobre quem poderia alcançá-los, e os dois palpites errados falham em direções opostas: adivinhar aberto e uma mensagem de bate-papo cancela uma reserva paga sem taxa cotada; adivinhar fechado e um cliente que quer cancelar é mandado para o telefone. connector_cancel Além disso, requer cancellation_quote e order_cancel com uma recuperação...OpsIQNunca cancela antes de dizer o que custa. none.

fulfilment_presence

customer_present Ou remote_deliveryUm hóspede do hotel deve chegar, então um endereço errado direciona o recibo e o quarto ainda está lá, uma encomenda postada, um servidor provido ou um link de download deixa a força desse endereço sozinho. É isso que torna a configuração de "check-e-mail" disponível para o operador., e é declarado por você em vez de escolhido por eles - assim o raciocínio de um hotel nunca pode ser herdado por um conector que envia mercadorias. remote_delivery.

minimum_assurance e disclosure (opcional)

minimum_assurance Que você exime Mais Provas de identidade OpsIQ Um banco que exige uma transferência está exercendo o contrato, e também remove a capacidade de um operador de pular a verificação do seu conector, porque a decisão de risco de um comerciante é superior à conveniência do operador. disclosure é a frase mostrada. Antes O botão de confirmação, por uma taxa, uma taxa ou um direito de resfriamento que você deve apresentar; sem ele, negócios regulamentados contrabandeiam a redação necessária para um nome de produto.

notify_flow

platform_automatic, platform_triggered Ou noneQuando?OpsIQO que quer que normalmente os e-mails nunca disparam, gravando o pagamento marca a ordem paga, não obriga nenhuma plataforma a contar a ninguém. platform_triggered requer o order_notify papel com uma recuperação, eOpsIQSó pergunta depois que o pagamento de volta prova que o dinheiro está gravado. none faz oOpsIQPorque, caso contrário, um cliente pagante não ouve nada. none.

O mesmo contrato, nove negócios não relacionados.

Cada um deles é o contrato respondendo honestamente para uma indústria diferente, comOpsIQNão sei nada sobre nenhum deles.

Um contrato, nove indústrias.
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
Evento pago fornecido para plataformas

Depois que um pagamento nativo da Storefront é verificado e comprometido, OpsIQ emite payment.completed com order_id, payment_id/provider_ref, gateway, exato amount_minor, ISO currency, cliente, itens de linha, canal e paid_atUm conector mercante deve persistir que as evidências através record_payment e releia, um conector de checkout do hospedado consome seu próprio evento pago autorizado e não deve receber uma cópia da escrita de pagamento.

AI é um proponente, não uma fonte de autoridade.

O modelo pode selecionar um produto declarado e quantidade, mas não pode escolher o nome da operação, fazer uma verificação URL ou criar estado comerciante a partir de texto.

Os clientes sociais mantêm o mesmo fluxo sem um e-mail.

WhatsApp, Mensageiro,Instagram, TelegramA proposta é assinada na conta do canal e a confirmação ainda passa pela mesma cotação, estoque, idempotência, controles de pagamento e recuperação.

O histórico de pedidos segue um link de identidade exato, nunca adivinha um e-mail.

Ordens nativas são indexadas por uma identidade de canal opaca, então a IA pode responder "onde está minha ordem?" sem pedir um e-mail ou número de pedido. Para o histórico da loja conectada, ligue a identidade do canal para o espaço de trabalho CRM/registro de cliente e implemente procura autoritária cliente/ordem no conector.

Faça a carga universal: campos digitados e uma identidade de servidor

O núcleo não contémWHMCS, hotel, SaaS, loja, banco, produto, rota ou ramo de fornecedores. parameters Um conector de reserva pode declarar datas e convidados, um conector de faturamento pode declarar um ciclo, um futuro conector empresarial pode declarar seus próprios campos seguros.OpsIQsanitiza controles primitivos e envia os valores coletados apenas para a ação do conector mapeado.

Ação de citação digitada
{
  "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"}]}
  ]
}

Por clients_only, set customer_ordering.identity_parameter Este campo nunca é mostrado para um cliente e qualquer valor fornecido por um chamador é removido; OpsIQ injeta apenas o ID de um conector verificado. Checkout do hóspede deixa-o vazio. Um email digitado é a prova para uma procura declarada, não um login e não autoridade de compra.

Domínios agrupados: No entanto, o símbolo de identidade deve ser assinado para o site do membro exato que incorpora o widget, usando o segredo webhook desse membro.OpsIQNunca substitua a chave do site membro pela chave principal e nunca copie o segredo primário para um site membro.

Envelopes canônicos o conector deve retornar.

Catálogo
{
  "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"}
  }]}
}
Citação
{
  "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"
  }
}

A resposta de verificação da plataforma repete a citação canônica válida e adiciona um HTTPS checkout_urlO núcleo atualiza a citação na confirmação e compara as moedas, a seleção total e estável exatamente o conector traduz sua resposta à plataforma nesses envelopes, o núcleo nunca traduz campos de fornecedores ou constrói o comerciante.URL.

Faça um gateway construído pelo operador disponível na loja nativa e converse.

A capacidade de pagamento sozinha não coloca um portal na frente dos clientes. Gateway de pagamento da loja nativa Ele adiciona um contrato explícito, a criação de mapas e o levantamento ativo do pagamento, e permite que os domínios de verificação hospedados pelo provedor.

Contrato de porta de entrada na Native Store
{
  "commerce": {
    "roles": {
      "checkout_create": { "operation": "acme_checkout_create", "transport": "http",
                           "recovery": "acme_payment_status" },
      "payment_status":  { "operation": "acme_payment_status", "transport": "http" },
      "payment_profile": { "operation": "acme_payment_profile", "transport": "http" },
      "webhook_verify":  { "operation": "acme_webhook_verify", "transport": "http" },
      "event_map":       { "operation": "acme_event_map", "transport": "http" },
      "payment_refund":  { "operation": "acme_refund", "transport": "http",
                           "recovery": "acme_refund_status" }
    },
    "storefront_gateway": {
      "enabled": true, "version": 1, "label": "Acme Pay",
      "checkout_hosts": ["checkout.acmepay.com", "*.acmepay.com"]
    }
  }
}
Saída canônica de checkout

Os mapas de ação do checkout. checkout_url E, quando o provedor tem um, session_idO... URL Deve ser HTTPS, não conter credenciais, e combinar com um hospedeiro autorizado.

Saída de status canônico

A ação de status executa um novo provedor.APIProcurem e mapeiem paid como um booleano de verdade, amount_minor como um inteiro, currency como um código ISO de três letras, e provider_refUm retorno.URL, string de consulta, carga útil do cliente, ou instruções "confirmadas" fornecidas por conectores nunca é verdade de pagamento.

Contrato opcional de reembolso

Se o portal apoiar os reembolsos, mapa payment_refund A criação de reembolsos retorna estritamente accepted e completed Booleans plus provider_refA recuperação faz uma busca e retorna statusSem ambas as ações,OpsIQNão anuncia reembolsos de conectores.

Quem confirma a ordem

O conector nunca escreve um status de ordem OpsIQ. OpsIQ compara a quantia e moeda retornada exatamente e registra a referência do provedor; somente então o núcleo realiza a transição verificada pelo fornecedor.

No Connector Builder, tiquetaque Comércio, mapeie os papéis e configure qualquer um Compra de clientes em loja conectada., Gateway de pagamento da loja nativaO mago valida a declaração e escreve: commerce_roles.jsonA publicação ainda usa o processo normal de revisão e assinatura do Marketplace, este contrato nunca ignora a verificação de pacotes ou torna um conector não ininstalável. php tools/verify_commerce_contracts.php.
💡
Transporte é http para um controle remoto.APIou bridge para uma operação chamada em uma ponte implantada (ver o NO-APIOs papéis são diagnósticos de transporte, o tempo de execução só precisa do transporte indicado para que possa versionar uma ponte.
Conectores

Vender através do bate-papo sem um conector: Ações e gatilhos

Se a sua plataforma é sua própria, um escritório personalizado, um sistema interno API, um conector para o qual ninguém envia um sistema, você pode alcançar a mesma máquina de venda com as duas ferramentas que você já usa para integrar qualquer outra coisa: ações personalizadas (seus terminais HTTP, definidos na página Actions) e gatilhos (event webhooks).

Como se encaixam

Você constrói uma ação personalizada por papel comercial. Cada um é um simples ponto de partida HTTPS do seu lado, definido sob AI & Automation → Ações com o seuURLA partir desse momento, sua loja aparece em bate-papo exatamente como uma porta de conexão: Seu A ação de citação, o cartão de confirmação renderiza, o cliente verifica seu e-mail, as chamadas do kernel de pedidos Seu Ordem ação com uma chave de indemnidade, OpsIQ recebe pagamento através dos gateways do espaço de trabalho, Seu Nada sobre a experiência do cliente diz "costumo".

A declaração

Guarde isso.JSONcomo o espaço de trabalho commerce_custom_integration (Configurações→configurações avançadas, ou através das configurações RESTAPIÉ a mesma forma de um pacote. commerce_roles.json Nodo comercial, com action Nomeando seus IDs de ação personalizados:

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

Finalmente, adicione custom_commerce para os conectores habilitados para vender sob Configurações→Conversa do Cliente→A admissão é novamente verificada. Cada Requisita, e se recusa com motivos nomeados em vez de esconder silenciosamente sua loja: um papel que seu modo requer que mapeie para nada, uma função de escrita sem ação de recuperação (§15.7 - uma escrita cujo resultado não pode ser re-perguntado é recusado), uma ação que foi apagada ou desabilitada desde que você salvou.

O que cada ação deve fazer

Devolva o envelope de conectores.

Responda. {"success": true, "data": { ... }} - ou {"success": false, "error": "a sentence a customer may read"}Sua ação é... caminho de sucesso da resposta Deve apontar para o envelope.

Citação: o total, em unidades menores.

Retorne. quote_id, product_name, quantity, unit_amount_minor, total_amount_minor, currency, selection, selection_summary, expires_atTudo no "seu total é a única figura que move dinheiro" acima aplica-se literalmente: impostos, taxas e multiplicadores vão para o seu total, porque o seu todo é o que é assinado, mostrado e cobrado.

Ordem criar: honrar a chave de indemnidade

Você recebe. idempotency_key, o assinado total_minor e currency, o verificado customer_emailE seus próprios parâmetros de citação, guarde a chave com o pedido, se você já criou uma ordem para ela, devolva essa ordem em vez de uma segunda. reference Sua plataforma reconhece.

Recuperação: resposta sobre uma escrita

order_by_key recebe a chave de indemnidade e respostas. {"found": true, "order": {...}} Ou {"found": false}. encontrado:falso é uma promessa -OpsIQUma fonte de status ou uma lista de pedidos recentes não é uma resposta sobre um texto.

Record pagamento: seu próprio caminho de liquidação

Recebe o ID da transação de gateway como a chave de indempotência mais sua referência de ordem, depois que OpsIQ tem ativamente verificado a quantidade e a moeda com o gategate. platform_notified: true Se sua plataforma enviar e-mails ao próprio cliente.

As entradas do cartão vêm dos seus parâmetros de ação.

Qualquer parâmetro que você declarar em sua ação QUOTE (além do parâmetro identidade) que a IA não tenha coletado é renderizado no cartão de confirmação como uma entrada o cliente preenche-se — um domínio, uma data, um assento.

Gatilhos: ouvir suas próprias vendas

Dois eventos disparam no ônibus de eventos compartilhados, então seus webhooks e automações ouvem cada venda de bate-papo onde quer que seja executado:

commerce.order.created

No momento em que a ordem cair no lado mercante, antes do pagamento - referência, conector (ou custom_commerce), quantidade, moeda, e-mail do cliente, id de linha.

commerce.payment.confirmed

Exatamente uma vez por ordem, quando o portal verifica ativamente o pagamento... ele faz a mesma reclamação que previne recibos duplicados, então não pode disparar seu webhook.

Quando se formar em um conector

A integração personalizada é a configuração do espaço de trabalho: serve à sua loja, no seu espaço de trabalhos. No momento em que você quiser distribuir a integração — outros espaços de trabalho, o mercado, versionamento, assinatura, instalação paga — empacote as mesmas ações e a mesma declaração como um conector.

Conectores

Conectar uma plataforma que não temAPI(o padrão da ponte)

Muitas plataformas reais não enviam nenhum descanso.APIUm hotel CMS, um sistema de faturamento antigo, uma ferramenta interna sob medida.OpsIQConector para um: o conector envia um único arquivo PHP que o operador deixa em seu próprio webroot público, e esse arquivo éAPIEsta página é o padrão completo, com as regras que tornam seguro correr e a razão por trás de cada regra.

A forma dela

Um conector normal chama de outra pessoaAPINada mais muda, as mesmas ações, os mesmos provedores de contexto, o mesmo contrato de identidade, a mesma disposição do pacote.

1
Você escreve um arquivo PHP

It lives in your package at bridge/opsiq-<platform>-bridge.php. It talks to the platform's database directly, or boots the platform's framework, or both. It answers JSON.

2
O operador copia em sua webroot

Ao lado do próprio index. php da plataforma, nenhum código de plataforma é modificado, nenhum plugin é instalado, nada para manter em todas as atualizações da plataforma.

3
O painel de conectores entrega o arquivo.

Sua configuração. json declara webhook_help. snippet_template. A página de conectores o torna um arquivo copiável com suas configurações ao vivo já substituídas, então não há nada para editar à mão.

4
OpsIQ Chama-o de servidor para servidor

Seu Client.php envia pedidos GET com a chave compartilhada em um X-Opsiq- Cabeçalho da Ponte-Chave.URLA configuração é a raiz do site da plataforma.

O Conector Builder pode gerar isso agora.API" perfil (ou definir o acesso de dados à ponte) e emite o arquivo da ponte, o trecho do painel correspondente e as ações digitadas que lêem e escrevem através dele - para uma aplicação Laravel lendo seu Env,WordPressO modo ponte corrige a autenticação para oOpsIQProtocolo de ponte: o conector gera com segurança api_key Quando habilitado, envia-o como X-Opsiq-Bridge-KeyE liga esse mesmo valor guardado em OPSIQ_BRIDGE_KEY Uma ponte escrita à mão está a salvo do mago, ela só substitui um arquivo de ponte carregando seu próprio marcador.
💡
Tudo nesta página é mostrado em PHP contra MySQLO padrão em si é o diagnóstico da linguagem e do motor: veja "A ponte em outras línguas e outros bancos de dados" para o portal em Node, Python, Go, Ruby, .NET e Java, a consulta de introspecção PostgreSQL, SQL Servidor, SQLite e Oráculo, e MongoDB Equivalente, junto com a restrição de embalagem que decide como uma ponte não-PHP atinge o operador.

O modelo de segurança, e por que cada regra está lá

Este arquivo está numa rede pública atrás de uma chave compartilhada, que um único fato leva todas as regras abaixo, não relaxe nenhum deles para simplificar sua ponte.

O chamador nunca forneceSQL

Não uma cláusula WHERE, nem um fragmento de ordem por, não um parâmetro de consulta bruto "apenas desta vez", o chamador nomeia uma tabela, uma coluna e um valor, seu arquivo constrói a instrução, no momento em que um chamador pode contribuir SQL texto, uma chave compartilhada torna-se execução arbitrária do banco de dados.

Nomes de tabelas e colunas são validados contra informações_schema

Os identificadores não podem ser ligados como parâmetros, então eles têm que ser verificados em vez disso.

Cada valor é um parâmetro limitado.

Identificadores validados mais valores ligados é o par que faz a superfície total e a superfície de injeção zero.

As leituras são universais, as escritas estão na lista de permissão.

Esta é a regra que as pessoas mais querem pular.

Colunas secretas são redigidas em leitura e recusadas em escrita.

Combinar com a coluna Nome: senha, lembre-se, segredo, api_key, chave particular, sal, token. Substitua o valor por um placeholder na saída.

Os excluídos são uma única linha, pela chave primária.

Uma remoção em massa é como um banco de dados morre, se alguém realmente precisa de um, pode fazê-lo na plataforma.

As leituras estão em cima da linha.

Uma consulta não pode ser jogada no banco de dados através de uma mensagem.

Falhar fechado até que a chave esteja definida

Uma ponte não configurada responde.403Uma ponte que é útil antes de ser configurada é uma ponte que foi útil para um estranho.

Comparação constante de chaves, chave em um cabeçalho.

A chave vai em X-Opsiq-Bridge-Key, não a string de consulta, então ele fica fora dos registros de acesso, logs proxy e cabeçalhos de referência.

SÓ COMEÇAR

Um método, uma forma, nada para contrabandear em um corpo OpsIQ é o único que liga.

Lê universal, escreve "permitido" e por quê.

Esta é a regra que se discute, então aqui está o raciocínio completo. O assistente deve ser capaz de ver toda a plataforma: é isso que torna útil, e uma leitura não pode destruir nada. Escreve são diferentes. Este arquivo fica em uma raiz pública atrás de UMA chave compartilhada. Se essa chave vaza, uma superfície de escrita irrestrita faz o vazamento equivalente ao controle total do banco de dados — um novo usuário administrativo, uma tabela de reservas vazia. Uma lista de permissões significa que uma chave com vazamento ainda não consegue alcançar uma tabela que o operador nunca ativou.

⚠️
OOpsIQO administrador clicando em Permitir uma ação destrutiva é um controle sobre o assistente, não é um controlo sobre quem tem a chave da ponte, são duas ameaças diferentes, e a lista de permissão é a resposta para a segunda.
O botão de frente para o operador, da ponte Botble.
/* ── WRITE ALLOW-LIST — which tables the assistant may CHANGE here.
 *
 * READS are unrestricted: the assistant can see every table in the platform.
 * WRITES are limited to this list, because this file sits in a PUBLIC webroot
 * behind ONE shared key — an allow-list means that even a leaked key cannot
 * reach a table you never enabled (no new admin users, no emptied bookings).
 *
 * Comma-separated table names. Add tables as you need them — e.g. append
 * ',pages,posts' to let the assistant edit site content. Set it to '*' to
 * allow every table, deliberately. Empty falls back to the hotel defaults. ── */
const OPSIQ_WRITE_TABLES = 'ht_bookings,ht_booking_rooms,ht_booking_addresses,ht_rooms,ht_room_types,ht_customers,customers';

Dois detalhes na verificação abaixo são fáceis de errar, o nome da tabela já chega RESOLVED, carregando o prefixo da mesa da instalação, enquanto um operador escreve a lista de permissões sem prefixos porque é isso que eles naturalmente digitariam, compare ambas as formas ou uma instalação com prefixão silenciosamente não permite nada e cada gravação quebra, e a recusa deve se explicar, porque a pessoa que lê-la é administradora em uma janela de bate-papo, não um desenvolvedor com um traço de pilha.

A verificação da lista de permissão, verbatim de marketplace_connectors/botble/bridge/opsiq-Ponte-botble.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);
};

O portão, no máximo.

Quatro verificações, nesta ordem, antes que algo toque em dados.

Os quatro portais estão em ordem.
<?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. */

Validando identificadores contra informações_schema

Essa é a peça que faz "o assistente pode chegar a qualquer mesa" de imprudente para seguro, resolve o nome da mesa do chamador contra o esquema real, tolera um prefixo de mesa faltando ou extra, e retorna nulo para qualquer outra coisa, tudo a jusante então funciona com um nome que existe comprovadamente.

Validação do identificador e redação, verbatim da ponte Botble.
/** Real tables in THIS database — the allow-list, straight from the DB. */
$allTables = static function () use ($pdo, $db): array {
    static $cache = null;
    if ($cache !== null) return $cache;
    $st = $pdo->prepare('SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ? ORDER BY TABLE_NAME');
    $st->execute([$db]);
    return $cache = array_map('strval', $st->fetchAll(PDO::FETCH_COLUMN));
};

/** Resolve a caller-supplied table name to a REAL one, or null. */
$resolveTable = static function (string $name) use ($allTables, $prefix): ?string {
    $name = trim($name);
    if ($name === '' || !preg_match('/^[A-Za-z0-9_]+$/', $name)) return null;
    $tables = $allTables();
    foreach ($tables as $t) if (strcasecmp($t, $name) === 0) return $t;
    /* Tolerate a missing or extra table prefix. */
    foreach ($tables as $t) {
        if (strcasecmp($t, $prefix . $name) === 0) return $t;
        if ($prefix !== '' && strcasecmp($prefix . $t, $name) === 0) return $t;
    }
    return null;
};

/** Column introspection: table => [column => true]. Cached per request. */
function opsiq_bridge_columns(PDO $pdo, string $db, string $table): array
{
    static $cache = [];
    if (isset($cache[$table])) return $cache[$table];
    $stmt = $pdo->prepare('SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?');
    $stmt->execute([$db, $table]);
    $cols = [];
    foreach ($stmt->fetchAll(PDO::FETCH_COLUMN) as $c) $cols[strtolower((string)$c)] = true;
    return $cache[$table] = $cols;
}

/** Columns whose VALUES must never leave the platform. */
$secretCol = static function (string $c): bool {
    return (bool)preg_match('/(^|_)(password|remember_token|secret|api_key|private_key|salt|token)($|_)/i', $c);
};
/** Columns a write may never touch — auth material. */
$writeBanned = static function (string $c): bool {
    return (bool)preg_match('/(^|_)(password|remember_token)($|_)/i', $c);
};
/** Strip secret values from a row before it leaves the server. */
$redact = static function (array $row) use ($secretCol): array {
    foreach ($row as $k => $v) if ($secretCol((string)$k)) $row[$k] = '[redacted]';
    return $row;
};

Uma operação de leitura e uma obra completa.

Note o que está ligado e o que é validado. A coluna de filtro é verificada com a lista real de colunas e então interpolada como um identificador; seu valor está vinculado. O limite está apertado. As linhas são redigitadas na saída. A atualização recusa a chave primária e qualquer coluna de autenticação, e selos atualizados_at quando a tabela tem uma.

Leia qualquer tabela. Identificadores validados, valores limite, linhas com tampa
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,
    ]]);
}
Escreva uma linha - lista de permissão tabela, recusa colunas de autenticação, única linha por chave primária
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)),
    ]]);
}

Sobrevivendo às diferenças de esquema

As versões da plataforma diferem, as colunas se movem, são renomeadas ou ausentes, uma ponte que assume que um esquema funciona em uma instalação, inscreva e adapte-se, selecione apenas as colunas que existem aqui, tolere o prefixo da tabela e tente as grafias plausíveis de uma referência.

Tolerância ao esquema, da ponte Botble.
/* Only ever select columns that exist on THIS install. */
$pick = static function (array $cols, array $wanted, string $alias = 'b'): string {
    $out = [];
    foreach ($wanted as $c) if (isset($cols[$c])) $out[] = "`$alias`.`$c`";
    return $out ? implode(', ', $out) : "`$alias`.*";
};

/* References vary: stored with or without a leading "#", with or without an
 * operator-configured alpha prefix, or only as a numeric id. Try every
 * plausible form — the PROOF match is what actually gates disclosure, so
 * tolerant matching here is safe. */
$refCandidates = [$ref, '#' . $ref];
$digitsOnly = preg_replace('/\D+/', '', $ref);
if ($digitsOnly !== '' && $digitsOnly !== $ref) {
    $refCandidates[] = $digitsOnly;
    $refCandidates[] = '#' . $digitsOnly;
}
$refCandidates = array_values(array_unique($refCandidates));
💡
Dê à sua ponte uma op=diag que relate apenas a ESTRUTURA, quais tabelas resolveram, quais colunas a tabela principal tem, e a forma da mais nova referência com cada dígito mascarado.

Erros uniformes, e a armadilha de enumeração

Uma forma para tudo.

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.

Não-encontrado e sem-competição deve ser idêntico

Em uma superfície de busca, uma referência que não existe e uma referência cuja prova não corresponde deve produzir a mesma resposta.

Nunca vaze a razão para um visitante.

A ponte pode ser precisa comOpsIQO que alcança um visitante é decidido porOpsIQ, em uma recusa fixa.

O arquivo copiável no painel de conectores

O operador nunca abre seu repositório.OpsIQEssa cópia vem de configurações.json, e deve ser o mesmo programa que Bridge/*.php.

ajustes.json- a entrada do painel para um conector de ponte
{
  "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.

Encadernação sobrevive à regeneração

A ferramenta de sincronização reconstrói a cópia do painel da ponte enviada e então restaura o sistema. OPSIQ_BRIDGE_KEY = {{setting:api_key}} Sem ele, uma atualização pode copiar fielmente o arquivo de pacote sem chave e remover silenciosamente a chave placeholder do operador.

Outros placeholders são substitutos servidor-lado

Independentemente disso,{webhook_url}, {webhook_path}, {webhook_secret}, {site_key}, {base_url}e{slug}são preenchidos antes que o painel veja o trecho.

Webhook_help pode ser um objeto ou uma lista

Uma lista dá vários trechos em um painel, por exemplo, um arquivo de ponte e um gancho separado.

🚫
O arquivo da ponte e a cópia do painel são duas cópias de um programa, e eles vão se desviar — uma ponte foi atualizada e sua cópia do quadro não foi, então qualquer um que reinstalou e copiou do painel instalou a antiga ponte e perdeu silenciosamente cada nova capacidade.
Mantenha as duas cópias idênticas.
# 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.

O que a ponte deveria expor

As operações formadas e uma superfície de dados universal, juntas... as formas retornam respostas arrumadas e feitas para as perguntas que as pessoas fazem... as universais cobrem tudo o mais para que o assistente nunca fique preso.

- Sim.

As estatísticas, a lista de objetos principais com filtros, um objeto com suas linhas relacionadas, o catálogo do que é vendido, a busca pelo cliente com histórico, dão à IA uma boa resposta em uma chamada ao invés de cinco.

"Escritas em forma"

As duas ou três mudanças de estado que importam, definir status, cancelar.

Comércio datilografado

Para uma plataforma vendível expor catálogos, citações, operações de checkout/order e de comprovação de pagamento, em seguida, mapeá-los em commerce_roles.json com transport: bridgeNunca mapeie um papel de escrita comercial para o registro universal.

Descoberta universal

As tabelas (com contagem de linhas) e descrever (colunas, tipos, chave primária, além de bandeiras legíveis e graváveis por coluna).

Leitura universal e escrita

Cada um deles validado como mostrado acima.

Identidade, antes do portão da chave.

As sondas de identidade são chamadas pelo BROWSER do ADMIN, mesmo tipo de origem, então não podem enviar um cabeçalho personalizado.

Diagnósticos

op=diag, structure only, masked.

Mapa de papéis do comércio da ponte
{
  "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"
    }
  }
}
💡
O papel canônico controla a sequência e a autoridade, a operação da ponte mantém a carga útil da plataforma WHMCS A ponte deve invocar os serviços de negócios da plataforma, então estoque, impostos, faturas, e-mails de confirmação e ganchos são todos executados.
⚠️
record_payment Aceitar apenas as evidências verificadas pelo servidor: ordem exata, quantidade, moeda ISO, referência do provedor, data e chave de indemnidade verificada.APIUm resultado desconhecido deve ser recuperado antes de qualquer repetição.
💡
Se sua plataforma só responde a perguntas, envie uma ponte sem registros e toda a classe de risco de escrita desaparece.

Lista de verificação antes de enviar uma ponte

A ponte recusa tudo sem chave.

Renomeie a constante para esvaziar e confirme todas as respostas.403.

Uma chave errada é recusada em tempo constante.

E a chave só lê do cabeçalho.

Um nome de mesa inventado é recusado.

E um nome de mesa com prefixo errado ainda resolve.

Uma coluna de senhas nunca aparece em uma leitura.

E uma escrita que diz que um nome é recusado com uma explicação.

Uma carta para uma mesa fora da lista de permissão é recusada.

Com a mensagem que diz ao operador como ampliá-la.

O trecho do painel combina com o arquivo da ponte.

O php tools/sync_connector_bridge_snippets. php relata isso em passo.

Reinstalar o conector não é suficiente.

Se o seu pacote enviar um arquivo de ponte, um operador atualizando o conector também deve reposicionar esse arquivo em sua webroot.

Conectores

Acionando o próprio quadro da plataforma de uma ponte.

Uma ponte que só lê pode falar SQLUma ponte que cria as coisas na plataforma (uma ordem, uma reserva, uma fatura paga) deve passar pela própria camada de aplicação da plataforma, e iniciar essa camada sem cabeça é onde cada falha sutil neste padrão vive.

Uma linha no banco de dados não é uma ordem.

Insetos crus criam um registro de sombras.

A linha aparece, o administrador a lista e ainda não é um registro que a plataforma acredita ter criado: sem número de referência nativo, sem ganchos de modelo, sem eventos, sem fatura, sem e-mail do cliente, sem link funcional voltado para o cliente.

Nunca reimplemente a numeração da plataforma.

Duas amostras de um formato de referência fazem parecer fácil de reproduzir, e reproduzi-lo é a mesma sombra escrever um nível para baixo: o dia em que a plataforma muda seu esquema, cada um de seus registros está errado e nada avisa você.

Colunas da plataforma mantêm significados de plataforma

Antes de guardar algo seu em uma coluna de plataforma, encontre todos os leitores transaction_id A ligação do cliente por e-mail "veja a sua reserva" resolve através de um digest de indemnidade armazenado lá silenciosamente quebrou todos os links dos convidados idempotency_keyA restrição recusa o gêmeo concorrente, e a busca pela recuperação lê a mesma tabela que a criação escreveu: MySQL DDL compromete uma transação aberta implicitamente.

Eventos, ouvintes e a armadilha de duplo e-mail

Leia a fonte do serviço antes de enviar seus eventos.

Se o serviço de plataforma que você chama já envia o evento, enviando-o você mesmo envia dois emails de confirmação e gera duas faturas, se nada estiver ouvindo, despacho não envia nenhum erro, reflita o método, corte suas linhas de origem e leia o que ele realmente faz, um palpite baseado em nome e até mesmo um regex sobre o corpo, ambos entenderam isso errado antes da fonte resolver.

GetListeners () esconde a verdade; getRawListenders (() diz isso

Laravel envolve ouvintes em encerramentos, então getListeners() reporta [email protected] para tudo.

Se a Fila não significa "corrida mais tarde"

Com fila=sincronia (o padrão em muitas instalações de produção) um ouvinte na fila roda INLINE em sua solicitação de ponte URL Verifique a configuração ('queue.default') antes de raciocinar sobre onde qualquer coisa corre, e procure em empregosfailed_jobs Antes de assumir que um trabalhador estava envolvido.

Guardas voltam com o próprio estado da plataforma.

O sinal que não pode derivar é o próprio estado de registro da plataforma (apenas chamada enquanto o registro ainda está pendente), não uma bandeira paralela "enviada" sua que possa discordar.

A bota sem cabeça não é a bota da web

Registre o que a web registra.

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 EVERYURLRoot, não só o roteador

O pedido capturou pontos em seu script de ponte, então rote(), url() e ativo () gerar site.comPúblicoopsiqUm link de cliente através de um JSON Endpoint. forceRootUrl (configuração('app.url')) Conserta o gerador, o disco de armazenamento tem sua própria raiz, então o logotipo e-mail permanece quebrado até filesystems.disks.public.url é definido também (ele resolve lazily, então definir no arranque funciona, e somente quando vazio ou script-relativo: CDN de um operador URL Não é seu para substituir).

Compromete-te antes de entregares.

Os serviços da plataforma leram sua própria conexão e não viram sua transação aberta, chamada antes de commit, um serviço pós-pagamento não encontra pagamento completo, deixa o registro sem pagamento e ainda dispara seus eventos, então o cliente é enviado por e-mail sobre um registro que a plataforma acha que não foi pago.

Regras de honestidade

Sem sombra, sem recuos.

Se o caminho nativo é inalcançável, recuse-se com um erro retalizável antes que qualquer dinheiro se mova needs_attention: O dinheiro é real, o estado é honestamente "pago, ainda não processado".

Relate fatos, não sua declaração.

"O serviço correu" e "o cliente foi informado" são fatos diferentes: a integração de referência enviou um email completo com cada campo em branco enquanto o flag-run disse verdadeiro. Devolva-os separadamente (processamento concluído, tentativa de notificação), mantenha uma chamada por chamada platform_notified que força a confirmação do retorno OpsIQ sempre que a plataforma não processar, e nunca reclame entrega: uma caixa de entrada não é observável de um servidor.

Meça, então escreva.

Cinco teorias sobre um e-mail vazio morreram contra as medições antes da fonte solucioná-lo.

Conectores

A ponte em outras línguas e outros bancos de dados

O padrão da ponte não é um padrão PHP.OpsIQchamadas é um ponto de encontro HTTP, então o arquivo pode ser Node, Python, Go, Ruby, .NET ou Java, e a loja por trás dele pode ser qualquerSQLmotor ouMongoDBO que é em forma de PHP é o oleoduto de embalagem, e essa restrição decide como sua ponte chega ao operador.

O que o conector realmente requer

Nada diz uma língua.

Transporte

HTTPS, um pedido de obtenção por chamada, sem corpo, sem outro método.

Autenticação

Um segredo compartilhado no X-Opsiq-Bridge-Key Não é um parâmetro de consulta, nem um cookie, nem autenticação básica.

Parâmetros

- Fio de perguntas. op Nomeia a superfície, do Nomeia a operação, o resto são os argumentos da operação.

Resposta

JSON. {"success":true,"data":{...}} Ou {"success":false,"error":"snake_case_reason"}Aplicação tipo conteúdo.jsonE nada de cachê.

Códigos de status

200 sobre o sucesso. 403 chave não configurada ou errada, 404 não encontrado, 405 Método errado, 400 Má discussão, 501 Sem apoio neste esquema.

Isso é tudo.

Sem estrutura, sem tempo de execução, não.OpsIQSe pode servir isso, pode ser uma ponte.

Entrega: o que pode viver em ponte /, eo que não deve

O pacote assinado cobre uma lista fixa de extensões de arquivos, e um arquivo fora dessa lista é deixado fora do ZIP.26Agosto2026Um arquivo em bridge/ que o empacotador cairia é uma falha de conformidade, então o pacote se recusa a passar em vez de instalar sem nenhuma ponte nele.

Como uma ponte / pasta é tratada na hora de construir
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 e JavaScript — totalmente suportados

O arquivo envia no ZIP assinado, e o verificador de trechos mantém sua cópia do painel como idêntica a ele, seja qual for dos dois, o cheque de deriva lê todos os arquivos em bridge/, não apenas os PHP, então uma ponte atualizada com uma cópia de painel falha na construção em qualquer idioma.

Tudo o resto, entregue apenas através do painel.

O trecho do painel é texto simples sem nenhuma idéia de qual idioma ele possui, então funciona para qualquer pilha. Coloque o programa inteiro em webhook_help. snippet_template, nomeie o arquivo em nome do arquivo e não deixe uma cópia em bridge/ — a conformidade irá recusar o pacote ao invés de enviá-lo vazio.

Se você realmente precisa de outra linguagem no pacote

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.

💡
Diga o nome do arquivo. webhook_help.snippet_filename É assim que o verificador sabe a qual ponte pertence uma cópia do painel, sem ela, um emparelhamento ambíguo é relatado como um aviso de conformidade e que o trecho fica fora de controle.
⚠️
O ponto da verificação de deriva é que um arquivo de ponte e sua cópia do painel são duas cópias de um programa e irá divergir. php tools/sync_connector_bridge_snippets.php --applyEntão, assine o pacote.

O portão, em seis línguas.

A única armadilha real é a comparação, e é uma armadilha diferente em cada idioma.

⚠️
Compare o SHA-256É correto em todas as línguas, e evita o fato de que vários comparadores de tempo constante jogam ou vazam em um erro de comprimento.500em vez de um403.
Node. js - o portão
// 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, o portão.
# 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)
Vá, Ruby, . NET e Java - a mesma comparação
// 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)));
}

Validando identificadores em cada motor de banco de dados.

A propriedade de segurança não muda: uma tabela ou coluna nome da chamada fornecida deve ser verificada contra o esquema real antes que seja interpolado, e cada valor deve ser um parâmetro vinculado.

MySQLeMariaDB

Mesas: SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?Colunas: o mesmo contra information_schema.COLUMNS com AND TABLE_NAME = ?Citação com contra-pontos, dobrando qualquer contra-passo dentro. LIMIT n OFFSET m.

PostgreSQL

Mesma visão de informações, nomes minúsculas, WHERE table_schema = $1 (geralmente publicCitação com aspas duplas, dobrando qualquer citação dupla dentro. LIMIT n OFFSET mObserve a regra dobrável: um identificador não citado é dobrado para minúsculas, então compare case-insensível quando você resolver um nome.

SQL Servidor

As mesmas visões da INFORMATION_SCHEMA, citações com parênteses, dobrando qualquer suporte de fechamento dentro. ORDER BY [id] DESC OFFSET @o ROWS FETCH NEXT @n ROWS ONLY.

SQLite

Mesas: SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'Colunas: SELECT name FROM pragma_table_info(?) - Use essa forma de tabela, porque os nus PRAGMA table_info(x) A declaração não pode tomar um parâmetro encadernado e convidando a interpolação de cordas há exatamente o buraco que você está tentando fechar. LIMIT n OFFSET m.

Oráculo

Mesas: SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = :owner; colunas de ALL_TAB_COLUMNSCitação com aspas duplas, e lembre-se de um identificador não citado dobra para o caso UPPER, o oposto de PostgreSQL. OFFSET :o ROWS FETCH NEXT :n ROWS ONLY 12c e depois.

MongoDB

Não.SQLEntão, sem interpolação identificadora e sem parâmetros ligados, uma disciplina diferente para o mesmo objetivo.

A consulta de introspecção por 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;
💡
Resolva, então use o nome RESOLVED... nunca passe a soletrar do ouvinte para a consulta mesmo depois de verificar... olhe o nome real na lista que você leu do esquema e interpole isso.

MongoDBAs mesmas regras, semSQL

Não há nenhuma linha de pesquisa para injetar, então as pessoas assumem que não há nada a guardar.JSONDireto para dentro. find() Vamos enviar um chamado. {"$ne": null} Ou {"$gt": ""} Onde você esperava um valor, e selecionar silenciosamente cada documento.

MongoDB — Colecção, filtro escalar, projeção como redação
// 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();
Nomes de coleção vêm da listaColeções

Resolva a ortografia do chamador e use o nome resolvido.

Forçar cada filtro a um escalar

Um documento onde se espera um valor é o equivalente NoSQL de uma citação perdida.

Projeção é a regra da redação.

Excluir campos em forma de segredo na projeção para que eles nunca deixem o servidor, ao invés de excluí-los do resultado depois.

Apaga o documento de "single-document by"

Nunca delete muitos, e nunca um filtro que o chamador influenciou.

Escreve: "Permite-se a lista".

O mesmo raciocínio queSQLNomeie as coleções que uma escrita pode tocar, e recuse o resto com uma explicação.

O ponto final de identidade em outras línguas

A sonda de identidade é a outra metade de uma ponte, e é HTTP também.HMAC- SHA256 essa corda, junte-se a um ponto.

Não escreva isso manualmente do zero. Configurações, o Portal de Suporte carrega uma rota pronta por idioma para o portal (toque de um tempo e dois minutos). Sites remotos, seu site, Códigos, C. Reconhecer clientes conectados automaticamente carrega a versão de chat por idioma (token de uma hora mais o manipulador de atualização).
O que mudar quando você reutilizá-lo

Esses trechos mentam um símbolo de entrega PORTAL, que é deliberadamente mais rigoroso: carrega jti e uso único: verdade e vive sobre120segundos porque ele viaja em umURLUma ponte ou um símbolo de identidade não carrega nenhum desses e usa uma exp mais longa, minutos a horas.

O que continua igual

O site, o iat, a exp e um nível superior autenticado, verdadeiro, mais um administrador ou cliente com identidade e nome de usuário ou email.

Ambas as formas de token verificam

Uma JWT de três partes assinou que o HS256 funciona, assim como a base de duas partes 64url mais hex HMAC Use o que as bibliotecas da sua língua fazem natural, uma biblioteca JWT é geralmente o caminho mais curto fora do PHP.

Nunca mete no navegador.

Assinar o lado cliente significa enviar o site secreto para cada visitante.

Escolhendo, honestamente

A plataforma é PHP.

Escreva a ponte em PHP, ela é enviada no pacote, é checada por deriva e pode iniciar o próprio framework da plataforma para ler uma sessão ao vivo para a sonda de identidade.

A plataforma é Node.

Um JSs bridge ships, assina e é verificado exatamente como um PHP.

A plataforma é Python, Ruby, Go, . NET ou Java

Entregue através do trecho do painel e diga isso no corpo do painel; não deixe o arquivo na ponte, onde a conformidade irá recusar o pacote.

Não pode executar um processo no host da plataforma.

Então o padrão da ponte não é a ferramenta certa, uma ponte existe para alcançar uma plataforma de dentro do seu próprio hospedeiro.APIConector contra qualquer superfície que ele expuse.

⚠️
Uma sonda de identidade tem que ler a sessão de login da plataforma, o que geralmente significa correr dentro do próprio processo da plataforma ou pelo menos em seu host com acesso à sua loja de sessões uma ponte escrita em um idioma diferente da plataforma pode servir dados confortavelmente e ainda pode lutar para responder op=admin_identity.
Conectores

Dê ao assistente as duas metades: ações e contexto.

As ações deixam a IA fazer coisas, as seções de contexto deixam que ela saiba as coisas, e a maioria das perguntas que um administrador faz são respondidas por contexto, nunca por uma ação, um conector com ações perfeitas e nenhum provedor de contexto irá relatar sinceramente que não pode ver nada.

As duas metades

Ações - como a IA faz as coisas

Declarado em ações.jsonO modelo escolhe um, preenche seus parâmetros, eOpsIQAções são para verbos: cancelar esta reserva, abrir o ticket, mudar esse status.

Seções de contexto, como a IA sabe das coisas.

Reunido por um ContextProvider antes do modelo correr. "Quantas encomendas este mês", "quem são meus novos clientes", "o que vendemos" tudo resolve através de uma pesquisa contextual, e nunca toca em uma ação.

⚠️
Sintoma de um provedor desaparecido: o assistente responde "Nenhum conector habilitado forneceu esta seção de contexto" enquanto o conector é instalado, ativado e passando seu teste de conexão.

O vocabulário universal da seção

OpsIQO seu trabalho é decidir o que cada um significa em sua plataforma e respondê-lo.

Ordens / pendentes

Qualquer que seja a transação na sua plataforma: ordens, reservas, reservas... empregos, remessas.

Clientes

A lista de clientes.

products

O que a plataforma vende: produtos, quartos, planos, serviços.

faturando

Receita e somas em forma de dinheiro, mais contas por estado.

tickets, serviços, domínios, servidores, atividade

Não force um mapeamento, uma seção sem resposta é melhor que uma errada.

Qualquer outra coisa que sua plataforma tenha

Um provedor que declara seções ['licenças', 'envios'] tem aqueles fundidos na lista de permissão do universal, então buscas específicas da plataforma ficam disponíveis sem mudanças no núcleo.

O erro que custa um dia

O tipo de registro verifica, então uma classe que apenas olha para o lado certo é ignorada sem erros em qualquer lugar.

ContextProvider. php — o contrato, do pacote de referência Botble
use OpsIQ\Platform\ContextProviderInterface;

/* MUST implement ContextProviderInterface: ContextRegistry::collectAll()
 * type-checks it, so a provider that merely LOOKS right is skipped and every
 * section answers "No enabled connector supplied this context section" — the
 * exact symptom, with no error anywhere. */
final class ContextProvider implements ContextProviderInterface
{
    public function slug(): string  { return 'yourplatform_context'; }
    public function label(): string { return 'Your Platform (orders, customers, products)'; }
    public function priority(): int { return 30; }   // lower renders earlier

    /** ADMIN only. The guest surface has its own provider and its own rules. */
    public function surfaces(): array { return ['admin']; }

    /** The universal section names this connector can answer. */
    public function sections(): array
    {
        return ['orders', 'pending_orders', 'clients', 'products', 'billing'];
    }

    public function isAvailable(): bool
    {
        try {
            $s = \OpsIQ\Connectors\ConnectorRegistry::getSettings('yourplatform') ?: [];
            return trim((string)($s['base_url'] ?? '')) !== '' && trim((string)($s['api_key'] ?? '')) !== '';
        } catch (\Throwable $e) {
            return false;
        }
    }

    public function build(array $ctx): string
    {
        $section = strtolower(trim((string)($ctx['section'] ?? '')));
        $limit   = max(3, min(50, (int)($ctx['limit'] ?? 20)));
        $query   = trim((string)($ctx['query'] ?? ''));
        try {
            switch ($section) {
                case 'orders':
                case 'pending_orders': return $this->orders($limit, $query, $section === 'pending_orders');
                case 'clients':        return $this->customers($limit, $query);
                case 'products':       return $this->products($limit);
                case 'billing':        return $this->billing();
            }
        } catch (\Throwable $e) {
            return '';   // a provider must NEVER break prompt assembly
        }
        return '';
    }
}
Registre-o do conector.

Implemente ContextConnectorInterface e devolva seus provedores do ContextualProviders(). A classe de conector também pode implementar Contexte ProviderInterface diretamente e ser registrada como ela mesma.

Devolva o texto simples, não JSON

Escreva para um leitor: um cabeçalho, depois uma linha por linha.

Retorne '' em vez de atirar

Um provedor que joga é registrado e ignorado, mas devolver '' é o contrato.

O Construtor não pode escrever seções () para você.

O ContextProvider. php gerado envia seções(): array { retornar [];} e o assistente não tem campo para isso. Preencha-o à mão - e lembre-se que republicando do mago RELAÇA o arquivo.

⚠️
Uma página não é um total, um provedor que lista vinte linhas sem dizer, então o assistente responde confiantemente:20Quando a plataforma se mantiver,669Uma conta barata e uma linha explícita: "Total no arquivo:669(Esta lista mostra o mais novo20"É a solução, e uma contagem confiantemente errada é pior do que nenhuma conta.
Um bloco de seção que não pode ser contado errado.
$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);

Diga suas ações, então.OpsIQpode dizer leituras de textos

OpsIQSe a pessoa não puder reconhecer, é tratada como escrita e exige um cartão de aprovação.

1
É destrutivo ou exige confirmação ganha

Se um estiver pronto, a ação sempre precisa de aprovação.

2
Uma palavra escrita em qualquer lugar na identidade faz dela uma escrita

adicionar, criar, abrir, atualizar, editar, modificar, modificar , excluir, remover, destruir, cancelar, reembolsar, suspender, encerrar, ativar, aprovar, rejeitar, enviar, marcar, repor, capturar, anular, fechar, reabrir, atribuir, revogar, conceder, definir, alternar, habilitar, desativar, emitir, aplicar, cobrar, pagar, provisão, renovar, atualizar e mesclar, mover, transferir, aumentar, bandeira, registrar, sincronizar, empurrar, importar, executar, disparar, iniciar, parar, reiniciar e mais alguns.

3
Então uma palavra lida faz uma leitura

get, list, search, find, view, show, fetch, count, lookup, descreva, leia, exporte, preview, teste, ping, status, resumo, detalhe, recente, histórico, cheque, log, estatísticas, métricas, visão geral, receita, discriminação, relatório, análise, equilíbrio, uso, quota, instantâneo, insights, alimentação, rascunho, triagem, classificação, sugestão.

4
Então o método HTTP decide

OBTE, CABEÇA E OPÇÕES são leituras.

5
Caso contrário, é um texto.

Não reconhecido significa aprovação necessária.

⚠️
Escreva palavras são verificadas ANTES de ler palavras, então um nome misto como get_and_sync_orders é classificado como um WRITE. Escolha um verbo, coloque-o em primeiro lugar, e mantenha limpo: list_ordems, get_cliente, search_bookings, cancel_book, set_orde_status.

Só declare nativa se a plataforma realmente tiver uma.

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.

O construtor decide isso da sua resposta de acesso aos dados.

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.

Pacotes escritos à mão ainda devem acertar.

Se você está escrevendo o manifesto você mesmo, declare exatamente um de nativa_api ou plataforma_bridge. Conformance trata plataforma_ponte como a escotilha de fuga que um conector de ponte é esperado ter, e o Construtor recusa uma especificação que reivindica plataforma_ ponte em umAPIConector.

Mantenha a referência.

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.

Ensine o cérebro administrativo sobre sua plataforma.

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

Escreva para um colega competente que nunca viu a plataforma.

ai_api_reference.md

Para um conector de ponte, este é o seu vocabulário e os parâmetros deles, não uma tabela de objetivos REST.

Orçamento

Aproximadamente.6,000caracteres mantidos por conector, e sobre24,000Personagens para todo o bloco em todos os conectores habilitados... sobre o cap de conexão, seu arquivo é truncado, seja conciso antes que o truncador esteja.

Precisão paga

Esses arquivos são a diferença entre o assistente usando suas ferramentas universais de mesa e respondendo da seção errada porque nada disse que essas ferramentas existiam.

💡
Ambos os arquivos devem estar no pacote INSTALADO, não apenas na árvore de origem, são arquivos comuns, então estão cobertos pela assinatura e enviados no ZIP, o que também significa editar um após assinar quebra o selo.
Conectores

Identidade através de um conector: administrador, cliente, portal

O trabalho do conector é transformar "quem está conectado na plataforma" em um símbolo assinado.OpsIQpode verificar, e então apresentar o sujeito verificado emOpsIQO conector nunca autentica ninguém.

As três superfícies, um sinalizador

Admin. Sua equipe, dentro de sua infraestrutura.

O widget carrega dentro do painel de administração da plataforma e cada membro da equipe é igual ao seu.OpsIQAgente, passe pela página de administração.

Cliente, um cliente assinado, em bate-papo com o cliente.

Isso é o que permite que um cliente logado obtenha sua conta inteira em vez de uma busca anônima: cada pedido, detalhe completo e qualquer ação de autoatendimento que você permitir.

Portal, uma ligação profunda no portal de suporte.

As mesmas reivindicações mais jti e single_use, com um120-segunda vida, porque o símbolo viaja em umURLNão role com a mão, o Portal de Suporte carrega um trecho pronto por idioma, e a plataforma conta para você quando a área da conta é executada neste servidor.

O contrato de carga

Nada aqui é opcional, qualquer que seja o exemplo parcial que possa sugerir.

site_key

O nível superior deve ser igual à chave do local da solicitação, ou o símbolo é recusado.

- Não, não.

Exp deve ser no futuro e depois de iat, um símbolo mais do que um minuto no futuro é recusado.

autenticado: verdadeiro

O nível superior, além da exp.

plataforma

Um projétil curto que nomeia a origem, recomendado e permite que o provedor de identidade do conector diga suas próprias fichas de outra plataforma.

administrador ou cliente

Um objeto que nomeie o sujeito deve ter um id não vazio, e um nome de usuário ou um e-mail, o portão de acesso por administrador combina com eles.

Minta, verbatim da ponte Botble
$payload = [
    'site_key'      => $cfgSiteKey,
    'iat'           => time(),
    'exp'           => time() + 6 * 3600,
    'authenticated' => true,
    'platform'      => 'yourplatform',
    /* 'admin' or 'customer' — OpsIQ stamps the matching session identity
     * from whichever key is present. */
    $opsiqSubject   => $subjectPayload,
];
$payload64     = rtrim(strtr(base64_encode(json_encode($payload, JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
$identityToken = $payload64 . '.' . hash_hmac('sha256', $payload64, $cfgSecret);

Os dois verificadores, e a falha que eles causam

OpsIQSabendo que isso te poupa uma tarde, porque o sintoma não se parece com a causa.

O widget de administração tem seu próprio verificador.

opsiqA lista de conversas, o histórico e tudo não lido passam por isso, então eles autenticam bem.

O verificador compartilhado é mais rigoroso.

opsiqInclui/cliente/identidade_token_verify.php senta atrás do fluxo de bate-papo e o núcleo AJAXAPIPrecisou historicamente da bandeira no nível TOP.

O sintoma

Cada bate-papo responde "Acender o login do administrador" e é exatamente como um bug de sessão, mas não é: falta a bandeira de topo.

O que o núcleo atual faz

Agora aceita a bandeira no nível superior, ou dentro do assunto, então o contrato é uniforme, os núcleos mais velhos só lêem o nível superior.

Qualquer arquivo no seu pacote que menta fichas de identidade é estaticamente digitalizado contra o contrato, e uma carga útil a plataforma recusaria falhas na conformidade com o arquivo exato e linha.

Clientes assinados em bate-papo de clientes.

O núcleo deve carimbar o cliente verificado, e seu conector deve apresentá-lo.

1
Sua ponte ou ponto final menta um símbolo de cliente

Se a sua plataforma der sinal para os clientes em um guarda diferente dos administradores, leia o guarda que você quer e nunca se afaste dos assuntos.

2
O núcleo verifica e sela.

Em um símbolo válido, o núcleo carimba o sujeito verificado na sessão.

3
Sua identidade, Provider apresenta-o.

DetectarCustomer() retorna a forma OpsIQ. Deve implementar OpsIQ\Platform\IdentityProviderInterface, ou o registro silenciosamente pula-lo - a mesma armadilha que o provedor de contexto.

4
Suas ações com o cliente aceitam um cliente.

E...OpsIQO modelo não pode fornecê-lo.

IdentityProvider.php - leia a identidade comprovada, apresente-a emOpsIQA forma do corpo.
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;
    }
}

Ações de cliente: duas fechaduras, ambas necessárias.

O modelo nunca deve escolher os dados que lê.OpsIQUma fechadura está longe de um vazamento, duas fechaduras são um contrato.

Bloqueio.1 — OpsIQSobrepõe os parâmetros de identidade

Antes de uma ação cliente-chat correr, OpsIQ substitui cada parâmetro em forma de identidade com a identidade do visitante VERIFIED: client_id, clientid, user_id , userrid, customer_id.

Bloquear 2 - Sua plataforma re-escopa cada consulta

Pegue a identidade que lhe foi dada e adicione-a à cláusula de onde cada leitura e cada escrita nessa superfície.

Diga seus parâmetros, então tranque.1pode encontrá-los.

Chame de cliente, não de cliente ou árbitro.OpsIQNão reconhece é um parâmetro que não pode bloquear.

⚠️
Dê ao cliente assinado suas próprias operações, separadas das do administrador, mesmo quando o SQL parece similar.

Fiação de página zero: a sonda declarada pelo conector.

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.

ajustes.json- o ajuste da sonda.
{
  "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."
}
A sonda é chamada pelo navegador.

A autenticação é a sessão da plataforma, coloque na porta da sua chave de ponte, mantenha longe dos dados de registro e não devolva nada para um visitante que saiu.

Ela responde a uma forma fixa.

{"success":true,"authenticated":true,"admin":{...},"identity_token":"..."} — and {"success":false,"authenticated":false,"error":"..."} when nobody is signed in.

Nenhum segredo de longa data na fonte da página.

Só o sinal assinado, que expira.

As implementações completas para Laravel,WordPress, WHMCSSymfony e PHP simples, além dos detalhes de Laravel difíceis e da ordem de solução de problemas, estão na página do widget de administração.

Conectores

Editor: editar a pasta não é publicar

A maneira mais comum de perder uma tarde é editar um conector sob conexão de mercado, reinstalá-lo e não encontrar nada mudado.

Por que a edição não fez nada

marketplace_connectors/<slug>/ is the SOURCE

É onde você trabalha, nada instala.

O catálogo tem um ZIP assinado.

Uma instalação baixa o ZIP, verifica a assinatura e desfaz as malas até que você reconstrua o Zip, cada instalação fica recebendo o pacote antigo.

O Conector Builder publica em outro lugar.

It writes into /connectors/<slug>/ on this install. That is a local connector, not a marketplace release. The two paths do not overlap.

A sequência de lançamento

1
Bata a versão em dois arquivos.

ajustes.jsone contrato de conexão.jsonA conformidade os compara e falha se a lesma, a versão ou o conjunto de capacidades discordarem.

2
Re-sincronize o trecho da ponte

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
Re-assinalizar cada pacote

A assinatura cobre o arquivo hashes, então qualquer edição invalida-o. Assine por último, depois que cada arquivo for final.

4
Exportar a chave de assinatura, então semente

A Semeadora assina cada pacote enquanto constrói o ZIP, e ele corre em um contexto onde a chave não pode ser lida de configurações - então deve vir do ambiente.

5
Reaplicar o arquivo da ponte, se você enviar um

Reinstalar o conector atualiza o pacote, não toca na cópia que está no webroot do operador, diga-lhes, no painel e no changelog.

A liberação inteira, em ordem
# 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
⚠️
Por que a exportação não é opcional: o sinalizador procura a chave em OPSIQ_CONNECTOR_SIGNING_KEY primeiro e a configuração connector_signing_key segundo.O semeador roda no bootstrap SaaS e ferramentas/sign_connector.php não inicia nada, então em ambas as configurações o leitor não existe — sem variável de ambiente não há nenhuma chave, e você recebe "Nenhuma chave de assinatura disponível" ou cada pacote relatado como sign_failed OpsIQ e pode encontrar a chave por conta própria.

O que realmente navios

Só arquivos que a assinatura cobre.

O ZIP é construído a partir da própria lista de arquivos do assinante, então um arquivo perdido sentado na sua pasta não é enviado.

Extensões cobertas.

php,json, js,css, md, txt,html, sh, svg, png, jpg, jpeg, gif, webp, ico, yml, yaml - recursivamente, incluindo ponte / e testes /. assinatura.jsonEle mesmo está excluído dos hashes e então adicionado ao ZIP para que as instalações possam verificar.

Qualquer outra coisa é relatada como não embalada.

O semeador nomeia todos os arquivos que deixou para trás.

Editar qualquer arquivo coberto quebra o selo.

Incluindo um arquivo Markdown.

Arquivos necessários em um pacote distribuível.

connector.php

Devo retornar uma instância de ConnectorInterface.

settings.json

Manifesto: lesma, nome, versão, manifesto, compatibilidade, capacidades, connection_contract_version, configurações.

connector_contract.json

Seu contrato legível por máquina, sua versão e seu conjunto de capacidades devem ser idênticos às configurações.json.

LEIA-ME. MD, DEVELOPER. MD, MUDANÇA. Md

Todos os três são verificados quanto à existência e tamanho mínimo.

Um arquivo por capacidade declarada.

Cada capacidade nomeia o arquivo que espera: ContextProvider. php para contexto, IdentityProvideer. phP para identidade, GuestLookupProvideR. phpara guest_lookup, e assim por diante - a menos que o conector implemente a capacidade inline.

Nada que pareça uma credencial.

A conformidade verifica os três arquivos Markdown por valores em forma de segredo e chaves privadas, e falha em um sucesso.

Verifique antes de enviar.

A suíte completa de conformidade é a mesma que uma instalação funciona, verifica o manifesto contra o contrato canônico, que as capacidades de execução e manifestação concordam, que cada capacidade declarada tem seu arquivo e seus métodos, o contrato de identidade em cada arquivo de cunhagem, o jogo ponte-snippet, a higiene lista de convidados, a unicidade de ação e segurança de confirmação, e a assinatura do pacote.

Corra todos os quatro antes de cada lançamento.
# 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
💡
Uma falha é esperada e não é um problema, a assinatura do pacote informa um aviso enquanto você ainda está editando, ele limpa o momento em que você se re-assina, e todas as outras falhas são reais.
Conectores

Pacote de conexão e referência do ciclo de vida

Este é o contrato de nível fonte para construir um conector que OpsIQ pode descobrir, configurar, validar, ativar, executar, testar, assinar e distribuir.

Referência do desenvolvedor
Pacote de conexão.Um pacote de conectores tem uma implementação necessária e se manifesta, com ações opcionais, receitas, conhecimento, ativos e metadados de assinatura.Pacote de conexão.developerMANIFESTv1CICLE DE VIDA-Conseguido.ESPAÇO DE TRABALHOEscondido.OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOconnector.phpClasse de conexão / fábricaObrigatóriosettings.jsonManifeste e configure o esquema.Obrigatórioactions.jsonDefinição de açãoOpcionalsignature.jsonMetais de assinatura do pacoteSoltem1DECLAREManifesto e capacidades2IMPLEMENTCiclo de vida e fornecedores3VALIDADOSTeste, sinal, pacote.
Um pacote de conectores tem uma implementação necessária e se manifesta, com ações opcionais, receitas, conhecimento, ativos e metadados de assinatura.

Pacote mínimo.

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

Contrato manifesto

settings.json usa versão manifesta 1O validador espera uma lesma, nome, versão, expressão, compatibilidade, descrição e capacidades. opsiq_min e opsiq_maxO status de liberação é um dos Produção, beta, Previsão Ou modeloOs pacotes legados podem ser normalizados com avisos, mas um novo pacote deve passar sem avisos.

Interface de conectores do núcleo

  • Identidade e configuração: slug(), name(), description(), capabilities(), settingsSchema(), testConnection().
  • Ciclo de vida: onEnable() e onDisable()A desativação deve ser não destrutiva, a purga de dados é uma operação deliberada separada.
  • Entrada / sincronização: handleWebhook(), poll(), backfill()A pesquisa trata de um trabalho incremental, o histórico das importações deve ser seguro para repetir.
  • Apoio: pushReply() onde a plataforma aceita respostas.
  • Ações: registerActions() Fornece contratos de ação executáveis.
  • Segurança: securityCapabilities(), syncBlockedIp(), removeBlockedIp(), testSecuritySync().

A base abstrata também oferece opcionais backfill, listagem de clientes, descoberta/criação de contas por e-mail, assinantes, detecção de administradores/clientes, provedores de faturamento/contexto/identidade, extração de respostas, retentando chamadas HTTP, JSON Acesso ao caminho, classificação confusa e ajudantes de paginação.

Capacidades e autenticação

Nomes de capacidade suportados incluem ações, gatilhos, contexto, identidade, vendas, faturamento, entrada_bilhete, saída_reply, sync_users, sincronia_departamentos, segurança_eventos, cliente_importação, segurança/nativo_bloco, promo_audiência, prom_feed, email_mailbox, nativa_api, ai_brain_aware e ai-tickets. API chave, portador, básico, HMAC,OAuth 2Credenciais do cliente,OAuth 2Código de autorização e modelos de autenticação personalizados.

Ciclo de vida do registro

  1. Discovery carrega o pacote e valida seu manifesto.
  2. A configuração é armazenada por espaço de trabalho, segredos são criptografados.
  3. Teste de conexão prova credenciais sem habilitar o conector.
  4. Activar chamadas onEnable()Sincroniza as definições de ação e pode iniciar o preenchimento inicial.
  5. Execução de pesquisa/webhook/subscritor sempre carrega contexto de espaço de trabalho.
  6. Desativar chamadas onDisable() e para a atividade sem excluir dados importados.
  7. Expurgar é uma operação explícita.

Regras de correção

  • Use a chave de espaço de trabalho/site em cada leitura, escrita, chave cache, chave de desduplicação e busca webhook.
  • Faça backfill, ingestão de webhook e ações de escrita idempotent.
  • Para sistemas remotos, usem seus API Nunca presuma que suas tabelas de banco de dados existem no OpsIQ Conexão.
  • Nunca exponha segredos, vestígios de provedores ou a existência de outro espaço de trabalho.
  • Declare apenas capacidades que o pacote realmente implementa. actions.json O catálogo não torna uma ação utilizável até que o conector seja instalado, habilitado, configurado e sua conexão seja válida.

Testando e soltando.

Execute o lint PHP, validation manifesto, testes de conexão, testes do esquema de ação, testes da assinatura/replay webhook, testes no espaço de trabalho, testes retrorrepeat, testes com conexão desabilitada e testes de falha/reteste. Um pacote de mercado deve ser assinado e verificado, incluir a configuração/permissões/documentação do webhooc e indicar seu verdadeiro status de liberação.

Conectores

Receitas do conector

Receitas passo a passo para configurações de conectores comuns.

Receitas
Receita do conectorA Shopify configurar a receita como uma lista de verificação: criar aplicativo, conceder escopos, colar token e teste, ativar webhooks, colocar uma ordem de teste.Receita do conectorShopifyReceita · Shopify com ganchos de teiaCriar um aplicativo personalizado em Shopify administradorAbrangendo os recursos: leituras, clientes...Pasta de domínio + token, clique em TestActivar sincronização Webhook (ordens auto-registro)Coloque uma ordem de teste → aparece nas vendas em 30s1STEP BY STEPCopiando receitas de pasta2REAL PLATFORMSShopify · WHMCS Stripe! Strike!3VERIFYA ordem de teste aparece em 30s
Cada receita é uma lista de verificação que você segue de cima a baixo, aqui, Shopify com hooks de ordem em tempo real, verificados por uma ordem de teste.

Receita: Shopify com webhooks em tempo real

Cenário:
Gol: Conectar Shopify com sincronia de ordem automática e GDPR Compliance.
O que fazer:

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.

Receita: WHMCS integração

Cenário:
Gol: Conectar WHMCS Então a IA pode procurar clientes, serviços, ingressos e faturas.
O que fazer:

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.

Receita:StripePagamentos

Cenário:
Trace pagamentos de Stripe e deixe que a IA pesquise transações.
O que fazer:

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.

Receita: Perfil de Negócios do Google

Cenário:
Objetivo: Conecte GBP para gerenciamento de revisão, postagens e insights.
O que fazer:

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.

Conectores

Estenda a inteligência de CRM e Site

OpsIQOs subsistemas estão abertos para extensão.CRM ou Inteligência do Site sem alterações paraOpsIQnúcleo, através do registro de capacidade da plataforma (\OpsIQDeclare a capacidade, implemente seu pequeno conjunto de métodos, envie o conector.OpsIQdescobre-o e liga-o à UI, ao Cliente.360A linha do tempo e os avisos de instalação.

Estenda CRM e SI
Capacidades da plataformaUm conector nos ônibus de alimentação esquerda (CRM, Inteligência do Site, Análise) descoberto pelo Registro de Capacidade.Capacidades da plataformaEspaço de trabalhoSeu conector.declara capacidades.CRMcalendário · enriquecimento · esign · pagamentos · caixa de correioInteligência do siteListando dados de classificação-Esquecimento.Analíticas da web: relatório e ingestãoCapabilityRegistrydescobre e liga a linha do tempo UI +1DECLARECapacidades, não edições do núcleo.2PLUG INCRM · SI · ônibus de análise3AUTO-WIREDUI, linha do tempo, alertas
Um conector declara capacidades (calendário, enriquecimento, dados de classificação, análise...) eOpsIQAuto-liga-los em CRM e Inteligência do Site, sem mudanças no núcleo.

Declare capacidades.

Declarativo.json)

Adicione um. <domain>_capabilities Array, melhor para conectores sem código/mercado. crm, site_intelligence.

Em código (connector. php)

Implementar crmCapabilities() / siCapabilities() retornando os mesmos descritores.

Declare um provedor de calendário CRM (settings.json)

Cenário:
Objetivo: fazer um conector de calendário aparecer no painel de reunião de agendamento do CRM.
O que fazer:

"crm_capabilities": [ { "type": "calendar", "label": "Calendar (Acme)", "actions": ["createEvent","listEvents","freeBusy"], "requires_auth": true } ]

Declare um provedor de Inteligência do Site.json)

Cenário:
Objetivo: enviar dados de lista local para a Inteligência do Site.
O que fazer:

"site_intelligence_capabilities": [ { "type": "local_listing", "actions": ["listLocations","listReviews","getInsights"], "requires_auth": true } ]

Autocarros de capacidade e sua superfície do método

CRM / calendário

createEvent($settings,$params) →{sucesso, evento_id, html_link, meet_link}; listEvents; freeBusyDirigido por \OpsIQ"CRM" Calendar Bridge.

-Crm/enriquecimento.

enrich($settings,$params) →Dirigido por...OpsIQ\CRM\EnrichmentBridge (também é executado automaticamente na empresa criar quando um provedor está conectado).

CRM / ESCREVER

sendForSignature($settings,$params) →Bem-sucedido, envelope, sinal de retorno.OpsIQ"CRM\EsignBridge".

Site_inteligência/lista local

listLocations, listReviews, getInsightsNaves através do conector de Perfil de Negócio Google.

SITENGENCE / ranque_data

keywordRanks($settings,$params) →Dirigido por...OpsIQPonte de dados Rank. Naves, conector SerpApi.

Analíticas/televisão

report($settings,$params) (sincronia/exportação) + ingest($settings,$events) (importação) conduzido por \OpsIQ Analíticos, Ponte de Análise. Google Analytics Conector (GA4). API Análises estão abertas para conectores como CRM + Site Intelligence (domínio analytics / analytics_capabilities).

Pagamentos / pagamento_fornecedor

listPayments, customerPayments, createPaymentLinkDirigido por \OpsIQMostrar os pagamentos de um cliente na linha do tempo do CRM + enviar um link de pagamento em um acordo.StripeConector de pagamentos. payments / payments_capabilities.

caixa de correio / e-mail _sync

listMessages + sendMessageDirigido por \OpsIQ"Caixa de e-mail" "Bridge", um cliente que usa os e-mails do cliente.360Timeline + envie e-mail de um acordo.Gmail+ Outlook / Microsoft365Conectores, domínio. mailbox / mailbox_capabilities.

Compartilhado. OAuth App + um redirecionamento

Todos os conectores do Google compartilham um aplicativo via \OpsIQ\OAuth\SharedGoogleApp. google_oauth_client_id/_secret Uma vez e calendário, análise, perfil de negócios + Gmail todos funcionam (os campos "(opcional)" por conexão são substituídos). URI, <site>/connectors.php?oauth=callback Porque o Google expõe não API para adicionar redirecionamento de URIs a um aplicativo; OpsIQ Recupera o conector do sinal. OAuth state Nonce, registre esse single. URI Uma vez e cada conector do Google (presente + futuro) autoriza sem mais configurações de console. SharedGoogleApp::resolve(...)De redirect_uri de sua oauthParams()Os conectores da Microsoft fazem o mesmo via \OpsIQ\OAuth\SharedMicrosoftApp (microsoft_oauth_*).

Os botões de importação estão ligados.

O Importar (recuperação histórica) e Importar clientes. Os botões mostram apenas para conectores que realmente os implementam, detectados pela reflexão, então não há nenhuma bandeira a declarar. backfill() Ou backfillChunk() Para ganhar o botão Importar; sobrepor listCustomers() (Retorno de email, nome próprio, páginas) para ganhar clientes Importação. AbstractConnector Não, o botão fica escondido, então a UI nunca oferece uma importação que um conector não possa executar.

Al através de ônibus

O agente de CRM propõe e marca reuniões fora de sinais de acordo (\OpsIQ\CRM\MeetingProposer → CalendarBridge), e auto-enriquece novas contas, o "AI opera o ciclo de CRM", executado em ônibus conectores.

Procura de ingressos para clientes.fetchTicket())

Duas camadas, sem mudanças no núcleo.

Quando um visitante faz referência a um número de ingresso na conversa do cliente ("Qual é o status do T-000123?"), OpsIQ Resolve em dois níveis. Tier1 lê o compartilhado OpsIQ Loja de ingressos, cada conector com inbound_ticket Os ingressos sincronizados funcionam para todos os conectores com código zero por conexão. Tier2 É um retorno ao vivo para ingressos antigos que nunca foram espelhados: core chama de OPTIONAL fetchTicket() Em cada conector habilitado que o implementa. duck-typed (descoberto por method_exists(), como contextProviders()/audienceCatalog()), assim que o assinado ConnectorInterface é intocado e conectores que não precisam (fontes de email/chat que criam tickets nativamente) simplesmente omitem.

⚠️
A propriedade é obrigatória e sua obrigação. fetchTicket() recebe a identidade de visitante VERIFIED em $ctx (client_id + client_emailResolva o cliente da plataforma a partir dessa identidade e consulte somente os ingressos do cliente, então verifique novamente a propriedade no registro de detalhes. null em qualquer erro, falta ou erro, nunca os dados de outro cliente. null Degrada graciosamente "não consegui encontrar o bilhete".
Connector. php, o contrato de fetchTicket () (referência: conectores/whmcs e conectores /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
    }
}

Como a plataforma usa

Descoberta

CapabilityRegistry::providers($domain,$type) Lista fornecedores com status instalado/ habilitado/pronto (baseado em arquivos; DB apenas para a bandeira ativada).

Seleção

CapabilityRegistry::active($domain,$type) As pontes chamam isso em vez de balas de codificação.

Notifique-a-instalar

Onde uma funcionalidade precisa de uma capacidade que ainda não está conectada, a UI mostra um clique para conectar/instalar o prompt, nunca um controle morto.

Guia completo.

Veja. connectors/PLATFORM_CONNECTORS.md (CRM + Inteligência do Site) e connectors/CRM_CONNECTORS.md no pacote.

Conectores

Procuras e reembolsos de autoatendimento do cliente (construir seu conector para o bate-papo do cliente)

Os clientes podem perguntar ao cliente sobre a sua própria conta ("meu saldo", "meus pedidos", "apoiei meu bilhete") e, se o negócio permitir, pedir reembolsos. OpsIQ A IA chama suas buscas como ferramentas nativas (não pode inventar uma), a identidade está bloqueada do lado do servidor para o cliente verificado, e os resultados são automaticamente cortados para a IA.

Declare uma procura de clientes.

Em seu actions.jsonUma ação somente leitura torna-se acessível ao cliente com todos os três: "scope":"client", "requires_confirmation":false, "is_destructive":falseUse "scope":"both" O vocabulário completo é que o mesmo olhar também deve ser chamado pela sua equipe na IA Admin. admin, client, both e system (system Não alcança nenhuma IA...APIQualquer outra coisa é rejeitada, a validação do pacote falha e a ação não se instala. writing O assistente de redação é servido ao admin Ação definida.

A regra de identidade (obrigatório)

Nomeie seu parâmetro de identidade do conjunto padrão. client_id, clientid, customer_id, user_id, userid, account_idTravado nesse id como uma corda: client_identifier, customer_identifier, account_identifierTravado no e-mail verificado: email, client_email, customer_email, user_email. OpsIQ A IA nunca vê ou escolhe a identidade.

O que deve ficar apenas administrador

Qualquer coisa não examinada por essa identidade:order_id/ticket_id Eles são vazamentos de clientes em qualquer plataforma. "scope":"admin".

Formação de resultados (chaves para responder)

Os resultados da pesquisa são estruturalmente aparados antes de atingirem a IA: chaves em forma secretas são derrubadas, cordas longas e listas são tapadas, campos em branco são podados, e um mapa plano mais largo do que o boné mantém seu Primeiro, as chaves que carregam respostas., dinheiro (credit, balance, amount, total, due, paid), identidade (email, *name, phone, company), estado (status, active, expir*, renew*), datas, plano/produto/domínio/serviço/assinatura/pedido/fatura/título campos, moeda, conta e stats/summary/totalsGuia prático: nomeie seus campos com esse vocabulário padrão e devolva os campos que respondem à pergunta do cliente ao invés de um bruto100Um campo chamado fora do vocabulário compete pelos assentos sobrando e pode ser aparado de cargas muito largas.

Reembolsos · o que seu conector fornece

Duas operações brutas, sem políticas:1Uma verificação de pagamento filtrada por identidade e uma referência de transação. API Deve E os filtros), por exemplo. whmcs_get_transactions; (2) um reembolso executar ação (scope:"admin", requires_confirmation:true, is_destructive:true, nunca exposto ao cliente), por exemplo. whmcs_refund_orderO negócio escolhe as duas chaves em Configurações.→Conversa de clientes;OpsIQVerifica o lado do servidor de pagamento, aplica a caixa de política do negócio (capa de montagem, janela de idade, limite mensal), problemas dentro da caixa, e registra um ticket de revisão para tudo mais.

Construtor sem código

O editor de ação do Connector Builder tem os mesmos controles: definir "Quem pode usá-lo" para clientes com sessão, deixar as caixas de seleção desativadas e usar um nome padrão de parâmetro de identidade.

Implementação de referência

O "Auto-serviço ao Cliente" entra em connectors/whmcs/actions.json, woocommerce/actions.json, oscommerce/actions.json- O contrato completo. connectors/README.md §8.1–8.2 e ConnectorInterface::registerActions().

Conectores

Procura de hóspedes - deixe os visitantes rastrear uma reserva, envio ou ordem sem se inscrever (convidado)

Hotéis, correios e muitas plataformas comerciais servem clientes que têm uma referência mas sem login: um hóspede com confirmação de reserva, um destinatário com número de rastreamento. guest_lookup Capacitação (Connector Contract, modo: gerado) permite que seu conector sirva aqueles visitantes no chat do cliente AI - nãoOpsIQSeu conector declara o que prova direito e quais campos são visíveis.OpsIQForça os interruptores, o acelerador e o uniforme negam.

O modelo de confiança

Referência + prova, nunca identidade

O visitante fornece a referência de registro (conforme o regex que você declara) mais a prova que você escolhe — normalmente o e-mail no registro. Sua ação de busca recupera o registro SERVER-SIDE por referência; OpsIQ provedor gerado compara a prova com o registro FETCHED. A entrada do visitante nunca é confiável, e nenhuma identidade verificada é criada: o jogo dá ao visitante direito aos campos autorizados desse registro, nada mais.

Negação uniforme (sem oráculo de enumeração)

A IA é explicitamente instruída a nunca confirmar se existe uma referência e nunca inventar detalhes de registro.IPAntes que seu conector seja consultado.

Opte-in duplo, ambos padrão desligado

Nada serve os hóspedes até que o negócio permita ambos os interruptores: o controle de espaço de trabalho em Configurações→Segurança.→"Pesquisas de registro de clientes em bate-papo com cliente" (permissão e sempre confirmadas por senha, mesmo quando o reforço opcional está desligado), e seu conector próprio guest_lookup_enabled Instalar ou habilitar um conector sozinho nunca abre a superfície do hóspede.

A superfície dedicada de convidados

O provedor gerado registra no guest superfície do contexto, estruturalmente separada de admin e customerO CTX que recebe carrega a mensagem de chat, o id do tópico e o email pré-consultado (inverificado) do visitante como um candidato à prova - sem campos de identidade.

Declarando no Construtor

1
Defina a ação de busca.

No passo Ações, adicione uma ação somente leitura que devolve um registro por sua referência (por exemplo. GET /bookings/{booking_number}) e mapear seus campos de resposta com nomes falsos: status, chegada, partida, tipo de quarto, cliente_email...

2
Tique "Pesquisas de convidados"

Na etapa de capacidade, habilitar guest_lookupUm painel dedicado aparece: escolha a ação de busca, nomeie o parâmetro de referência, dê o padrão de referência (um corpo regex como \bBK-[0-9]{4,10}\b), nomeie o registro ("reserva"), e escolha a prova - e-mail no registro (recomendado) ou nenhum (referência apenas para status somente de rastreamento de correio).

3
Allowlist os campos visíveis

O construtor recusa campos em forma de PII (e-mail, telefone, endereço, pagamento...) na lista de permissões e a suíte de conformidade da porta de lançamento re-checa a mesma regra antes de publicar, então uma especificação escrita à mão não pode entrar escondida.

4
Publicar e ativar

O Construtor emite GuestLookupProvider.php - a implementação canônica endurecida, idêntica para cada pacote gerado - e acrescenta o guest_lookup_enabled O negócio arma os dois interruptores e o bate-papo IA começa a oferecer a busca quando um visitante pergunta sobre seu tipo de registro.

Regras contratuais

Apenas campos em forma de status

Pense "o que um mensageiro imprimiria na página de rastreamento público": status, datas, categoria de quarto ou serviço, conta.

A IA responde apenas do bloco.

O provedor gerado termina sua saída com uma instrução para responder apenas dos campos listados e para oferecer um ticket para qualquer outra coisa.

Seguimentos continuam trabalhando.

O provedor re-deriva a referência das mensagens recentes do visitante na mesma conversa, então "e quando é o check-out?" funciona sem re-tipagem da referência.

Pacotes de autoria manual

Um pacote de mercado pode enviar o seu próprio GuestLookupProvider.php implementing ContextProviderInterface com surfaces(): ['guest']Siga o contrato do modelo gerado exatamente - buscar por referência, prova-companheiro servidor-lado, uniforme negar, allowlist-somente saída - e declarar guest_lookup in capabilitiesA conformidade verifica a superfície do hóspede e escaneia a lista de permissão para PII.

💡
As buscas de clientes são apenas contexto para o chat AI. Eles nunca executam ações, nunca criam identidades, e nunca desbloqueiam o caminho de ação do cliente auto-serviço acima - esse caminho ainda requer um cliente com a plataforma verificada como registrado.
Conectores

Público de promoção segmentando (promoção)

Qualquer conector (pré-instalado, mercado, ou um que você construir) se junta implementando dois pequenos métodos. OpsIQ Seu conector aparece como uma plataforma na guia de alvo do estúdio com sua própria lista de fatos, e vários conectores podem ser ativados lado a lado.

Público de promoção
Público de promoção segmentandoUma identidade verificada passou para um público de conexão que chama de Flags produzindo fatos que dirigem uma regra de alvo, com uma nota fechada.Público de promoção segmentandoEspaço de trabalhoEntraram no sistema.Identidade verificada-Audiência, Flags.Seu conector.FATOSunpaid_invoices = 2REGULARFaturas não pagas 1Campanha mostraFalha fechada: cliente desconhecido ou qualquer erro → a campanha permanece escondida.1TWO METHODSPúblicoCatálogo + Bandeiras2LIVE STATENão pago, pendente, status3FAIL-SAFENunca aparece para pessoa errada.
Seu conector responde os fatos ao vivo para o visitante conectado, o estúdio tem alvos neles e falha em fechar para que uma oferta de faturamento nunca chegue à pessoa errada.

Como funciona

1
Declare seus fatos.

Implemente o públicoCatalog () em sua classe de conectores, devolve uma etiqueta e a lista de chaves que sua plataforma pode responder, cada chave aparece no estúdio sob seu nome.

2
Responda para um cliente.

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
Feito.

A guia Promotion Studio Targeting tem uma seção de "Cliente e faturamento" listando sua plataforma; administradores constroem regras como "faturas não pagas >= 1", cada fato também se torna uma variável de personalização como {unpaid_invoices}.

Connector. php, o contrato de promoção completa
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'],
    ];
}

Regras contratuais

Anuncie a capacidade.

Adicionar 'promo_audience' Para o seu conector. capabilities() A pré-instalada é uma das mais importantes fontes de energia do mundo, que é a rede de distribuição e o mercado. connectors/whmcs Conector é a implementação completa de referência.

Nome da chave

Caso de cobra minúscula, 2-60 Tipos: número, texto, bool.

A identidade é verificada.

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.

Falhar fechado. Sempre

EM QUALQUER Erro (API Uma regra cujo fato está faltando não faz a campanha aparecer, uma popup direcionada para faturar nunca deve chegar à pessoa errada. OpsIQ Faz isso no jogo de regras também.

Desempenho

Os visitantes anônimos custam zero chamadas. 1-2 API Chamadas; OpsIQ Memoiza dentro do pedido.

Operadores fornecidos de graça.

Os administradores combinam suas chaves com =, !, >, >=, <, <=, contém, está definido, está vazio, você só fornece valores.

Tokens de personalização

Cada fato duplica como uma variável na cópia da campanha: {unpaid_invoices}, {client_status}, mais os built-ins {first_name} e {client_email} Os valores são higienizados antes de renderizar.

Conectores de mercado sem código.

Fatos automáticos

Declarativo (JSON- Apenas) conectores de mercado obter promo_audiência gratuitamente: se seu conector declara clientes/usuários, faturas, pedidos ou recursos de assinaturas, OpsIQ deriva status de cliente, faturas não pagas, valor devido, pedidos pendentes, subscrições ativas e status de assinatura das ações de busca existentes.

Catálogo personalizado (settings).json)

Adicione um objeto de capacidade para o público... {"label": "Minha Plataforma", "chaves": [{"chave":"carros abertos", "label", "Cartas abertas", "tipo": número}}}, para controlar exatamente quais fatos (e rótulos) aparecem no estúdio.

Testando seu provedor.

1
Active o conector.

A plataforma deve aparecer em "Cliente & faturamento (conectores)".

2
Construir uma regra

Sua plataforma, uma chave · 1 e definir "Logged-in clients only".

3
Verifique as duas direções.

Entrar na sua plataforma como um cliente que corresponde à regra (o popup deve mostrar) e como alguém que não (o Popup deve ficar escondido).

Dispare uma campanha do seu próprio código (acionador personalizado)

Por quê?

Além dos gatilhos embutidos (atraso, rolagem, entrada de saída, inatividade, clique, páginas-vistas, chat / atividade ticket), você pode disparar uma campanha de qualquer lugar em seu site ou conector front-end, após um passo de sucesso checkout, quando um carrinho é abandonado, quando o seu SPA muda rota, etc.

Como

Coloque o gatilho da campanha para Personalizado. com um nome de evento (por exemplo: checkout_failed- Então chame o gancho global da sua página:

Seu site / conector 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');
💡
A campanha ainda tem que passar por todas as regras (geo, audiência, consentimento, bonés) antes de mostrar.
O guia completo de como usar (designing, blocos, análise, A/B, publicação) vive na Central de Ajuda in-app sob Acionar → Estúdio de PromoçãoA capacidade aqui é descoberta automaticamente de qualquer conector ENABLED em conectores/ ou conectores de mercado/. Não há nada para registrar.
Conectores

Capacitação do conector de pesquisa (Contrato) 2.2)

O survey A capacidade permite que qualquer plataforma forneça adaptadores de identidade verificada, fatos do público, variáveis seguras e candidatos ao Survey Studio. promo_audience e não dá uma propriedade de conectores de pesquisas, respostas, análise ou entrega de email.

💡
A criação está completa e utilizável hoje, contrato de conexão 2.2, SurveyConnectorInterface, o painel dedicado do Construtor, gerado SurveyProvider.phpO consumo ainda não está ligado. SurveyConnectorRegistry É implementado e testado, mas nenhum Survey Runtime o chama ainda, então a saúde do provedor não aparece na interface de administração e nenhum pacote de conector publicado declara a capacidade.CRM A materialização e os primeiros mapeamentos de provedores enviados permanecem fases separadas, contra este contrato agora, esperem que o tempo de execução comece a consumi-lo em um lançamento posterior.

Responsabilidades do provedor

Catálogo de audiências e fatos

Fatos canônicos e valores de resolução são definidos apenas para um assunto verificado pelo servidor, que inclui ordem_conta, última_ordem_status, contagem_orden, cliente_criado_at, conta_subscrição, contagem/condição_de_condição e contagem_de-fatura.

Catálogo variável e valores

Anunciar cliente, conta, ordem, assinatura e variáveis de suporte com tipo, sensibilidade e contexto permitido.

Chamada de beneficiário

Opcionalmente enumeramos candidatos para CRM com IDs externos estáveis, páginas delimitadas, cursores determinísticos e metadados relacionados ao consentimento.

Identidade

Aceitar identidade apenas do portal de identidade após assinatura, validade, propósito, conector e verificação de espaço de trabalho.

Saúde na corrida

O registro do ScruftConnector foi projetado para relatar provedores compatíveis, bloqueados e indisponível sem expor configurações, caminhos, identidades brutas ou mensagens de exceção, e um provedor bloqueado nunca pode ser invocado.

Regras fechadas por falhas

Chaves não declaradas, tipos errados, valores grandes, descompassos de assunto, tempo limite de conexão e identidades desconhecidas são rejeitadas, uma regra de alvo que precisa de um fato indisponível não bate, páginas de destinatários são cobertas e auditadas, valores sensíveis nunca aparecem em pré-visualização pública ou registros.

Portão de liberação do construtor

Contrato 2.2 Envia a entrada de registro, interface, painel de mapeamento de levantamentos, gerado SurveyProvider.phpCommerce, helpdesk, ponte SaaS e perfis PHP locais incluem: padrão API O portal estático rejeita um provedor de pesquisas que chama de espaço de nome, mesa ou capacidade da promoção.

💡
A cópia da Promoção é apenas importação, o Construtor pode traduzir mapas compatíveis de promoção uma vez, salvar uma cópia completa do Survey e registrar a procedência.
Conectores

Resposta capacidade de feedback (Contrato 2.2)

O reply_feedback A capacidade reflete as próprias audiências de uma plataforma.OpsIQ Uma estrela que um cliente dá uma resposta pessoal dentro WHMCS A área do cliente está na mesma resposta no OpsIQ A linha de administração, com o mesmo chip, crédito do agente, entrada na página de Feedback e computação da equipe e desempenho como uma classificação dada em um OpsIQ Um depósito, um chip, um oleoduto, o conector só se traduz.

O único que escreve o caminho

Há exatamente dois caminhos de entrada e uma verdade. OpsIQ Os ingressos da plataforma passam pelo conector, e o núcleo aterra todos os eventos através de ReplyFeedback::recordMirrored()As mesmas colunas, regra apenas de funcionários, semânticas de um por resposta, selo de espaço de trabalho e Voz do Cliente indexando o portal usa.

Conformou-se (quatro arquivos, em seguida, re-assinar)

1
connector_contract.json

Adicione a entrada de recursos. Reply_feedback: versão 1.0, o ReplyFeedbackConnectorInterface, métodos de respostaFeedboxCatalog e pullRepleyFeed back, implica inbound_ticket.

2
settings.json

Adicione resposta_feedback à lista de recursos.

3
spec.json

Declare resposta.

4
Aula de corrida

Implemente a interface, list reply_feedback em capacity() e então re-assine o pacote.

Responsabilidades do provedor

Catálogo

Declare modos, escala de classificação da própria plataforma (core normaliza para o nativo 1-5O catálogo deve concordar com a especificação.json.

Puxe a tradução.

ReplyFeedback retorna eventos canônicos: plataforma de identificação do ticket, id de resposta da plataforma, classificação, reação/comentário opcional, tempo de envio e um evento estável.

Idempotência

Event_id é estável por feedback SATE, então um evento repetido é um no-op e uma classificação alterada substitui (últimos vitórias, como o portal).

Disciplina do cursor

Páginas são delimitadas e determinísticas, um cursor que não avança termina a corrida.

Segurança da sonda

Sem configuração, devolva uma página vazia em vez de jogar.

Resolução fechada por falhas.

O núcleo resolve cada evento para uma resposta local pelo marcador espelho o espelho já selos (<slug>:<ticket>:reply:<reply>Um evento que não pode ser resolvido é abandonado, nunca adivinhado, feedback só se aplica às respostas da equipe, e crédito do agente sempre vem do autor existente da resposta. inbound_ticket Ou ticket_mirror.

Trabalhou como exemplo: WHMCS

WHMCS Lojas cliente-área por resposta audiência estrela em tblticketreplies.ratingO... WHMCS Conector declara o modo de votação com 1-5 escala, naves a ticket_reply_ratings Retransmissão no seu arquivo de ponte, e traduz cada linha em um evento cuja identidade corresponde ao whmcs:<ticket>:reply:<reply> Depois de atualizar o conector, copie o arquivo da ponte para o servidor WHMCS para que o novo comando exista lá.

💡
Contrato de desenvolvedor completo com a interface, formas de eventos, regras de normalização e a lista de verificação de conformidade: doc/contracts/TICKET_REPLY_FEEDBACK_CAPABILITY.md na OpsIQ Aceitação: taxar uma resposta dentro da plataforma, esperar pela votação por hora, e a mesma resposta em OpsIQ mostra o chip, a página de Feedback lista, e um evento repetido não muda nada.
Conectores

Capacidade de mesclagem de tickets (Contrato 2.4)

O ticket_merge A capacidade faz um ticket se fundir em OpsIQ uma mesclagem em cada plataforma de ticket conectada.

Por que existe

Uma fusão OpsIQ Move todas as mensagens dos tickets fundidos para o ticket guardado e remove os tickets mesclados 2.4 Um conector só ouvido ticket.deleted para cada passagem fundida. WHMCS Fechei o bilhete e fiquei com ele WHMCS O ticket nunca recebeu o que o cliente escreveu pela primeira vez: o assunto mostrou [MERGED] e o conteúdo estava faltando.

O que o núcleo envia

- Não, não.

ticket_id, ticket_number, assunto e external_ref do bilhete da KEPT; native_table (opsiq_tickets); site_keyFontes, os ingressos fundidos mais antigos primeiro, cada um com ticket_id, ticket_number, assunto, external_ref, client_name, client_email, created_at e mensagens [{ {reply_id, author_type, author_name, created_at, corpo}]; merged_by; merged_atMensagens são a conversa visível do cliente, capturada antes da mudança, notas internas nunca foram incluídas.

- Não, não.

Ainda dispara, agora com merged_into {ticket_id, ticket_number, external_refO núcleo não o entrega a um conector que declara ticket_merge; outros consumidores podem distinguir uma fusão de um delete.

Anzóis de saída

Um ponto final do SaaS, assinado para o ticket. deletado, também recebe ticket. merged, então uma integração construída antes de 2.4 ouvir a fusão.

O que seu conector faz

Declarar

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.

Mesclar nativamente quando puder

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.

Caso contrário, adicione uma nota privada.

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.

Relatar o que não se fundiu

Todas as cópias que você não pôde mesclar vão em unmerged, e o núcleo aplica seu manuseio normal de delete (fechar ou excluir com mirror_deletesO modo de retorno não é suportado somente quando a plataforma não tem mesclagem e nenhuma nota privada.

Honrar suas mudanças

As mesmas configurações que o portão que seu outro portão espelha.

Mergulhando que começam na sua plataforma.

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.

Implementação de envio

WHMCS

MergeTicket (ticketid = ticket mantido, mergeticketids = tickets fundidos) quando ambos estão em WHMCSO gancho TicketMerge do revezamento funde o anel OpsIQ Quando a equipe se juntar WHMCS.

Zendesk

POST /api/v2/tickets/{id}/merge.json com comentários privados da Fusão (até cinco tickets por chamada), mais a transcrição como um comentário privado sobre o bilhete guardado, porque Zendesk Fecha os ingressos da fusão sem mover seus comentários.

OpsIQ Ponte SaaS

POST /v1/tickets/{id}/merge com source_ids, que move as respostas do portal e anexos; uma resposta interna carrega a transcrição de ingressos que nunca estiveram no portal. A /manage Merge funde o OpsIQ Entendido.

Construtor de Conectores

ticket_merge é derivado, nunca marcado: um pacote gerado declara quando ele liga o ticket da plataforma que cria (um ticket. criado assinante com link ticket on), manipula ticket. deleted, ou declara ticket_mirror. No passo Tickets, abaixo Merges., escolha a ação de mesclagem da plataforma (mapa merge.target_remote_id, e fundir.source_remote_ids ou fundir.source_remote_id) e uma ação de nota privada (mapa note.remote_id A mesclagem gerada Tickets () usa ambos, sem nenhum dos dois, o Construtor avisa que as mensagens de um ticket fundido não chegarão à plataforma.

💡
Contrato completo: doc/contracts/CONNECTOR_CONTRACT.md, seção Ticket se funde OpsIQ A primeira mensagem do bilhete da fusão está lá.
Conectores

Mercado de conexões

O Marketplace permite descobrir, instalar e publicar conectores construídos pela comunidade.

Mercado
Mercado de conexõesUma rede de cartões de conexão comunitária com categorias, botões de instalação e audiências de estrelas.Mercado de conexõesEspaço de trabalhoBuscar conectores...Calendly.AgendamentoInstalar★ 4.8HubSpotCRMInstalar★ 4.6-Correio de Correio.E-mailInstalar★ 4.7QuickBooksContabilidadeInstalar★ 4.5Twilio.SMSInstalar★ 4.9NoçãoDoutores.Instalar★ 4.41DISCOVERConectores comunitários2INSTALLUm clique3PUBLISHAssine e envie o seu.
Navegue em conectores comunitários, instale em um clique, ou assine e publique seus próprios níveis de mercado, pré-instalados e pesquisáveis.

Encontrar e instalar conectores

1
Navegar

Procurem por nome, categoria ou plataforma.

2
Revisão

Verifique a descrição, ações apoiadas e audiência.

3
Instalar

O pacote de conectores baixa e instala em marketplace_connectors/.

4
Configurar

Active em Conectores, digite API Credenciais e teste.

Publicando um conector

1
Construir e testar

Use o Connector Builder, verifique se todas as ações funcionam.

2
Pacote

Gerar perfil.json, ações.json, conhecimento.json, e arquivos PHP.

3
Assine.

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
Submeter

Envie o fluxo de submissão para revisão.

Dois níveis de conectores.

Conectores/- o que realmente funciona

Tudo aqui está ao vivo: os conectores que enviam com OpsIQ, qualquer coisa instalada do mercado, e tudo o que o Connector Builder publica nesta instalação.

- Onde os pacotes são de autoria

A fonte de publicação para pacotes de mercado de primeira parte não é uma raiz descoberta, nada aqui é ao vivo até que seja empacotado, assinado, semeado no catálogo e instalado, em que uma cópia pousa em conectores /.

💡
Olhe em ambos os lugares, um pacote que você criou sob o marketplace_connectors/ não é a cópia que executa, instalando cópias em conectores/, e somente essa cópia é descoberta em tempo de execução.Stripe, BigCommerce, Magento2, PrestaShop, OpenCart, Amazon SES, Postmark e Reenviar são todos pacotes de mercado: instalar um antes de esperar encontrá-lo em Conectores.
Desenvolvimento

API e construtor webhook

O API e Webhook Builder permite que você crie customizado API Endpoints e ouvintes de webhook dentro OpsIQ sem escrever PHP bruto.

API Construtor
API e construtor webhookUm construtor escolhe um tipo de gatilho (inbound webhook, agenda, evento, manual) que se alimenta em uma ação configurável.API Construtor de webhookEspaço de trabalhoGASTOS- O que está fazendo?Agenda (Cron)OpsIQ eventoManualAção.Mapa dos campos de chegada →criar ticket / notifique / chame APIEconomize o ponto final.1FACTORES DE DESCATEWebhook · agenda · evento · manual2NO RAW PHPConstruído na UI3ACÇÃOMapear campos, então correr
Construir terminais sem PHP bruto: escolher um gatilho (inbound webhook, agenda, evento ou manual), em seguida, mapear campos para uma ação.

Gatilhos

Evento

Corra quando algo acontecer. OpsIQ, ou quando um sistema externo posta um evento correspondente para o seu webhook URL Digite o nome do evento, por exemplo ticket.criado.

Agendar

Use um dos eventos de intervalo embutidos como o nome do evento: cron. minutos, cron-hora ou cron, diariamente.

Frase

Corra quando um administrador pedir a IA em linguagem simples, adicione a frase que deve corresponder, por exemplo, encontre o cliente.

- O que está fazendo?

Um sistema externo envia um HTTP POST para o seu OpsIQ Webhook URL Qualquer gatilho ouvindo o incêndio.

Só o executo às vezes: condições.

Um gatilho de evento pode carregar condições, então só funciona quando os dados chegam, sem condições que ele executa toda vez que o evento dispara.

Campo

Use um ponto para os valores aninhados, por exemplo customer. email.

Combinar tudo ou qualquer coisa

Escolha se cada regra deve ser igual, ou apenas uma delas.

Testes de texto.

A combinação ignora capitais.

Testes de números.

Números escritos como texto ainda se comparam corretamente.

Testes de presença

está presente, está faltando, está vazio, não está vazio.

Só chame o engenheiro de plantão para passagens urgentes.

Cenário:
Ingresso de evento. criado, com uma regra: prioridade igual a urgente.
O que fazer:

A ação é feita por ingressos urgentes e não é necessária para tudo o resto.

💡
Se deixar as regras em branco, o gatilho é executado em todos os eventos correspondentes, que são o mesmo comportamento que antes das condições existiam.

Ações

Enviem o webhook

Envie HTTP POST para um exterior URL com uma carga personalizada.

Criar ticket

Crie um ticket de suporte com departamento, assunto e mensagem específicos.

Envie e-mail

Envie um e-mail com um modelo personalizado.

Atualizar registro

Atualizar um cliente, passagem ou registro de CRM.

Acione o conector.

Execute uma ação registrada de um conector habilitado com sua permissão e regras de confirmação.

Corra. OpsIQ Geral. API Ação!

Procure o catálogo completo chamado Geral API _. Campos, escopos, permissões, confirmação, indemnidade e suporte de corrida a seco vêm do contrato de ação ao vivo; o fluxo de trabalho executa dentro de seu espaço de trabalho salvo e contexto administrador.

Enviar pedido de provedor-nativo API

Use um conector nativo.API Leia ou confirmei Nativo.API Escreva a ação quando o terminal do provedor não tem nenhuma ação com curadoria.

O construtor Actions & Triggers, /api/v1.php, OpenAPI e Postman usam o mesmo ActionContract Registry, então uma ação selecionável não pode sair da documentação de execução.
Desenvolvimento

Ativa o livro de receitas.

Pronto para usar receitas de ação para automações comuns.

Como funciona
Ativa o livro de receitas.Um fluxo de receita: um tempo livre.Slack.uptime.downMonitore o webhookSe eu forfilterCriar um bilhete urgente.Notifique Slack #ops
Ativa o livro de receitas.

Auto-criar bilhete de monitoramento

Cenário:
O sistema de monitoramento envia o POST quando o servidor cai.
O que fazer:

Trigger: Inbound webhook Condition: payload.status = "down" Action: Create ticket · Dept: Technical, Subject: "Server {{payload.hostname}} down", Priority: Urgent

SlackNotificação sobre grandes ordens.

Cenário:
SlackMensagem toda vez que um cliente faz uma encomenda$100.
O que fazer:

Trigger: Event (order.completed) Condition: order.amount > 100 Action: Send webhook to Slack incoming webhook URL with order details

E-mail semanal de digerir

Cenário:
E-mail sumário para a gerência toda segunda às 9h.
O que fazer:

Trigger: Schedule (Monday 09:00) Action: Send email with last week's stats pulled from the REST API

Escadadas de multas velhas

Cenário:
Se um bilhete não tem resposta para 24 horas, atribuir para a liderança da equipe.
O que fazer:

Trigger: Schedule (every hour) Condition: ticket.status = "Open" AND ticket.last_reply_age > 86400 Action: Assign to team-lead, add internal note

Desenvolvimento

Construindo sua primeira ação.

Este passeio cria uma simples ação de conector do zero.

Construindo ações.
Construindo uma açãoUm formulário de definição de ação: nome, ordem, um pedido GET para /orders/{id}, um parâmetro de identificação digitada, e uma passagem 200 Teste.Nova ação.Espaço de trabalhoNova ação.Nomelookup_orderPedidoGET/orders/{id}Parâmetrosid · cadeia de caracteres200 · Ordem encontrada1DEFINENome, método, ponto final2PARAMSEntradas digitadas3ENSAIOViva 200 resultado
Diga, defina o método e o ponto final, declare os parâmetros digitados, e teste-os em direto. 200.

Dois tipos de ação.

Antes de começar, decida qual deles você precisa.

Chame um externo. API

A ação envia um pedido HTTP para sua plataforma. OpsIQ Precisa se aproximar e fazer algo do seu lado.

Faça uma ação de conector.

A ação é algo que um conector instalado já fornece, escolha isso quando o trabalho já estiver disponível e você só quer acionar.

A segunda opção é como reutilizar tudo que seus conectores já podem fazer sem construir nada disso de novo: ler um tópico de ticket, procurar um cliente, importar contatos, e assim por diante.
1
Planeje a ação.

Procure um produto pelo nome, preço de retorno, estoque e descrição.

2
Defina em ações.json

Adicione a definição de ação:

Ações.json- a verdadeira forma manifesta
{
  "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" }
      ]
    }
  ]
}
⚠️
Três coisas que fazem uma ação não se registrarem. Action_id é REQUIRIDA e deve ser 2 para 100 caracteres de letras minúsculas, dígitos e sublinhados — uma entrada sem uma é rejeitada diretamente. O manifesto é um objeto com uma LISTA "ações", não um mapa chaveado pelo nome da ação. E mapeamento de resposta é "retorno" com caminhos DOTTED (data. id), não JSONPath ($. data,id) — não há "resposta_mapping", "método", "endpoint" ou "params" em qualquer lugar no registro.
3
Teste com corrida a seco.

Na etapa de revisão do Conector Builder, pressione Dry Run, ele executa a verificação completa de conformidade com seu pacote e, quando você fornece credenciais, faz um teste real de conexão.

4
Verifique o uso de IA.

Pergunte ao administrador: "Procurar produto Widget Pro." A IA deve encontrar e executar a ação.

⚠️
Adicionando uma ação às ações.jsonNão cria uma rota AJAX, então não há nada para regenerar.OpsIQQuando o conector está ativado ou suas configurações são salvas: re-salve o conector e a nova ação aparece. tools/gen_route_registry.php cobre o despacho do administrador AJAX e não tem relação com as ações do conector.
Desenvolvimento

Eventos de aproximação

Endpoints de entrada aceito assinado. JSON de outro sistema e transformá-lo em atividade de contato desduplicada que pode alimentar linhas de tempo, pontuação e fluxos de trabalho.

Tela de produto
Endpoints de entradaCada fonte de entrada tem sua própria URL, secreto, mapeamento e resultado de atividade recente.Endpoints de entradaEspaço de trabalhoFONTES5ACCEPTED12.4kREJECTED18OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOPlataforma de faturamentoeventos de assinaturaSaudável.App do produtoInscrição e eventos de usoSaudável.ID do eventoprovider_event_idDedupe.AssinaturaX-OpsIQ-Inbound-SignatureHMAC1CREATE SOURCEURL e secreto.2MAP PAYLOADE-mail, evento e identificação.3VERIFYHMAC, então ingere.
Cada fonte de entrada tem sua própria URL, secreto, mapeamento e resultado de atividade recente.

Crie uma fonte por sistema de envio. OpsIQ gera um URL- Token e segredo. JSON com Content-Type: application/json E assinar o corpo cru exato usando HMAC-SHA256:

X-OpsIQ-Inbound-Signature: sha256=<hex hmac>

Mapa JSON O ID do evento é a chave de desduplicação preferida. atividade aceita entra na linha do tempo de contato e pode afetar a pontuação, segmentos, regras de ciclo de vida e fluxos de trabalho.

Rejeite assinaturas inválidas antes de analisar dados comerciais, gire um segredo atualizando os dois lados dentro de uma janela controlada, não registre o segredo.

Desenvolvimento

Operações de saída da webhook

A administração de ganchos de saída cria assinaturas assinadas, testes e controles assíncronos de entrega e saúde.

Tela de produto
Anzóis de saídaA página de saída da web lista os pontos de encontro do HTTPS, assinaturas de eventos, saúde da entrega e um teste assinado com um clique.Anzóis de saídaEspaço de trabalhoENDPOINTS7SUCCESS99.2%RETIRANDO4OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOEspelho de CRMContato.* e acordo.*Saudável.- O ônibus de apoio.- Bilhete. - E bate-papo.Saudável.Depósito de dados.*Tentando novamenteEntrega de testes.Carga de amostra assinada.Pronto.1SUBSCRIBEHTTPS URL e eventos2AUTHENTICATEAssinatura HMAC3OBSERVEEntrega de trilhos e retries
A página de saída da web lista os pontos de encontro do HTTPS, assinaturas de eventos, saúde da entrega e um teste assinado com um clique.

Administradores completos criam um ponto de encontro HTTPS, escolhem eventos específicos ou o wildcard, armazenam o segredo com segurança e enviam um teste. OpsIQ Assina a carga crua com HMAC-SHA256:

X-OpsIQ-Signature: sha256=<hex hmac>

A entrega é assíncrona e automaticamente tentada após aproximadamente 3 horas de duração. 1Um minuto, 5 minutos, 30 minutos,2horas e... 12 horas.Use o trilho de entrega recente para inspecionar status, código de resposta e tentativa de contagem.

Seu receptor deve ser indempotente porque qualquer sistema assíncrono pode redistribuir.

Desenvolvimento

Webhooks

Webhooks deixar sistemas externos notificar OpsIQ Quando algo acontece (inbound), e deixe OpsIQ Notificar sistemas externos quando algo acontece internamente (excluído).

Webhooks
Anzóis de saídaA tela de saída dos hooks: uma tabela de terminais com nome, eventos assinados, pontos recentes de status de entrega e um botão de Send-Test.Anzóis de saídaEspaço de trabalhoPontos finais+ Salvar o ponto finalNOMEAcontecimentosENTREGASSlack #sales-alerts - Ajudahttps://hooks.slack.com/…crm.deal.won, ordemTesteEspelho de CRMhttps://api.acme.com/hookContato.*, bilhete. criadoTesteZapier.https://hooks.zapier.com/…chat.startedTeste1ENDPOINTSNome, eventos, URL2SIGNEDHMAC + auto-retirada3SEND TESTVerifique as entregas.
A verdadeira tela de saída: cada ponto final com seus eventos, saúde recente da entrega, e um clique para enviar o teste, assinado e repetido.

Anzóis de saída

Subscrição

Vá para Configurações > Webhooks. Adicione um ponto final URL e selecionar eventos para receber.

Eventos

Assine eventos específicos, ou ["*"] A lista completa para sua instalação está abaixo, e webhooks.events.list Retorne-o comoJSON.

Retentar

Entregas falhadas tentam novamente com recuo exponencial. 15 Falhas consecutivas, o ponto final é desativado automaticamente.

Assinando

Todas as entregas estão assinadas. X-OpsIQ-Signature carries v2=<hex>E a corda assinada é version.timestamp.delivery_id.body Sempre verifique, e sempre reconstrua a corda exatamente.

Proteção SSRF

OpsIQ Não enviaremos para privado/interno. IPs (127.X, 10.X, 172.16.X, 192.168.X, 169.254.169.254).

Entrega Assincronizada

Os hooks são entregues através da fila de trabalho, não bloqueando. OpsIQ Operações.

ID de evento estável

Cada evento tem um evento único que permanece o mesmo em todas as tentativas de desduplicação.

O que chega com cada entrega

X-OpsIQ-Event

O nome do evento, por exemplo. ticket.created.

X-OpsIQ-Delivery

A identificação da entrega, fica igual em todas as repetições, use-a para ignorar uma duplicata.

X-OpsIQ-Timestamp

Rejeite qualquer coisa mais velha que 5 minutos.

X-OpsIQ-Signature

A assinatura como v2=<hex>Dividam-se na =O lado esquerdo é a versão, o lado direito é o valor que você compara.

X-OpsIQ-Signature-Version

O esquema em uso, atualmente v2Leia do cabeçalho em vez de codificar, e seu código continua funcionando se um v3 for adicionado.

⚠️
A corda assinada é version.timestamp.delivery_id.bodySó o corpo é a única razão mais comum para uma verificação falhar.

Verificando uma entrega

PHP · verificar umOpsIQWebhook.
<?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 · verificar umOpsIQWebhook
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 });
});

Cada evento que esta instalação pode enviar

Gerado pela construção em execução, sempre combina com a versão que você está.

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 retorna esta mesma lista como JSON, para que seu código nunca tenha que codificá-lo.

Análise (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.

Comércio (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.

Contato (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-mail (2)

email.bounced

Fired by OpsIQ.

email.replied

Fired by OpsIQ.

feedback (13)

feedback.analysis.completed

Fired when a Voice-of-Customer analysis run completes. Payload: analysis_run_id (required), workspace_key, sample_count, model_version.

feedback.detractor.detected

Fired when a newly indexed response meets its metric-specific detractor rule. Payload: feedback_item_id (required), workspace_key, source_kind, metric_kind, classification.

feedback.follow_up.completed

Fired when a Feedback follow-up is completed. Payload: feedback_item_id (required), workspace_key, actor_admin_id, outcome_code.

feedback.item.assigned

Fired when Feedback ownership changes. Payload: feedback_item_id (required), workspace_key, assignee_admin_id, team_id, actor_admin_id.

feedback.item.indexed

Fired when a source record is added to or refreshed in the canonical Feedback index. Payload: feedback_item_id (required), source_kind, source_id, workspace_key, metric_kind, classification.

feedback.item.redacted

Fired when source deletion or redaction removes Feedback content from the index. Payload: feedback_item_id (required), workspace_key, source_kind.

feedback.item.status_changed

Fired when the Feedback workflow state changes. Payload: feedback_item_id (required), workspace_key, state, actor_admin_id.

feedback.item.tagged

Fired when a tag is added to or removed from Feedback. Payload: feedback_item_id (required), workspace_key, tag, operation.

feedback.item.updated

Fired when a canonical Feedback item changes. Payload: feedback_item_id (required), workspace_key, change.

feedback.source.failed

Fired when a Feedback source replay or incremental index operation fails. Payload: workspace_key, source_kind (required), error_code, checkpoint.

feedback.source.lagging

Fired when a Feedback source checkpoint is behind its expected freshness window. Payload: workspace_key, source_kind (required), lag_seconds, last_success_at.

feedback.theme.detected

Fired when a canonical topic or theme signal is attached to Feedback. Payload: feedback_item_id (required), workspace_key, theme_key, confidence.

feedback.urgent.detected

Fired when an urgent Feedback signal is detected. Payload: feedback_item_id (required), workspace_key, source_kind, signal_key.

invoice (3)

invoice.created

Fired when an invoice is generated. Payload: invoice_id (required), customer_id, customer_email, amount, currency, due_date, items.

invoice.overdue

Fired when an invoice passes its due date unpaid. Payload: invoice_id (required), customer_id, customer_email, amount, currency, days_overdue.

invoice.paid

Fired when an invoice is paid in full. Payload: invoice_id (required), customer_id, customer_email, amount, currency, paid_at.

order (1)

order.created

Fired when a new order is placed. Payload: order_id (required), customer_id, customer_email, amount, currency, items, status, source.

Pagamento (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.

Segurança (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.

Bilhete (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.

Como faço para testar webhooks localmente?+

Use o Ngrok para expor seu servidor local. URL.

E se meu ponto final estiver temporariamente para baixo?+

OpsIQ Se seu ponto final se recuperar dentro da janela de repetição, nenhum evento será perdido.

Desenvolvimento

Chaves de API

API Chaves autenticam pedidos para o OpsIQ RESTAURAÇÃO API Cada chave tem permissão.

Chaves de API
Chaves de APIO API Tela de chaves: um painel de problemas com chips de nível de acesso e escopo, ao lado de uma lista de chaves mascaradas existentes com botões de revogação.Chaves de APIEspaço de trabalhoEmita uma chave.AcessoLeia somenteRestringidoEscopocontacts.readtickets.readevents.writeChave de ediçãoSuas chaves.Integração Zapieropq_••••4f2aRevogarAplicativo móvelopq_••••91c7RevogarExportação de análiseopq_••••2db0Revogar1SCOPEDApenas leitura ou restrição2PER-ACTIONEscolham exatamente os escopos.3REVOCABLERodar a qualquer hora
O verdadeiro. API Tecla de chaves: emitir uma chave escopo, somente leitura ou restrita escolhendo escopos exatos, e revogar qualquer chave a qualquer momento.

Criando um API chave

1
Vá para Configurações > API Chaves

Navegar para API Gestão de chaves.

2
Clique em Criar chave

Dê-lhe um nome descritivo.

3
Selecione os escopos.

Os escopos vêm em leitura e escrevem pares por área, para que uma integração de relatórios possa ser concedida.

-Amigo disponível.

Escolha o mais estreito que faz o trabalho. admin satisfaz todos os escopos abaixo, então use-os apenas quando você realmente precisar de acesso amplo.

CRM. read / cRM. write

Contatos, empresas, negócios, atividades, segmentos, divulgação, conversões, ciclo de vida e webhooks CRM.

tickets. read / tickets. write - Como fazer?

Listar e ler os tickets e suas mensagens; responder, atualizar, abrir e executar operações de fila.

Conversas. Leia / conversa.

Leia conversas ao vivo e histórico de mensagens, envie mensagens, atribua e mude o status.

KB. read / KB, write

Entradas da base de conhecimento.

chat. read/pat. write

Templates de resposta salvos.

connectors.read

Veja quais conectores são instalados, o que podem fazer e teste suas credenciais.

automations.read

Veja suas ações, gatilhos e o histórico deles.

departments.read

Departamentos disponíveis para encaminhamento.

notifications.read

Notificações para uma operadora.

analytics.read

Seções de relatórios, CSV Exportações e definições de relatórios programados.

site_intelligence.read

Monitorados sites e seus relatórios de SEO.

files.read

Links assinados para download de anexos.

status.write

Componentes de página de status e incidentes.

Escrevendo

AI escrevendo ajudantes: rascunho, resumo, tradução, reescrita, composição, análise.

administrador

Tudo, incluindo um pequeno número de ações sensíveis que não são acessíveis por qualquer escopo restrito: apagar um contato, mudar configurações de privacidade e ler o registro de acesso.

💡
Ligue para meta-ações com sua chave para ver quais ações pode executar em sua instalação.

Níveis de acesso

Todos.

A chave pode chamar de qualquer coisa que seus escopos permitam.

Leia somente

Cada escrita é recusada, seja qual for o escopo, a escolha mais segura para reportar, painéis e qualquer coisa que nunca deveria mudar de dados.

Restringido

Você lista as ações exatas que a chave pode chamar, qualquer outra coisa é recusada, mesmo dentro de um escopo permitido.

4
Copia a chave.

Mostrado uma vez, começa com "opq_".

🚫
Nunca compartilhe. API chaves em código público, lado cliente. JavaScript Use variáveis de ambiente.
Desenvolvimento

Conecte seu site.

O OpsIQ widget é um JavaScript Um trecho que você adiciona ao seu site para rastrear, conversar com IA, criar ingressos e identificar o cliente.

Como funciona
Conecte seu site.Uma tag de script na esquerda e, à direita, uma página com o OpsIQ Bubble de bate-papo aparecendo no canto.<!-- paste before </body> --><script src="https://cdn.opsiq.io/w.js" data-site="ws_8a2f" async></script>
Conecte seu site.

Instalação básica.

Excerto básico do widget
<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.

Atributos de configuração

data-site-key

Sua chave do site dos Sites Conectados.

data-mode

Opcional. "Conversa" (padrão), "bilhetes", ou "ambos".

data-position

Opcional. "Baise-direita" (padrão) ou "Baixo-esquerda".

data-color

Código de cor primária do feitiço.

data-greeting

Mensagem inicial de saudação.

data-language

Língua de UI: "en", "es", "fr", "de", "pt", "ar", etc.

data-identity-token

Opcional, símbolo de identidade assinado pelo servidor.

Suporte SPA

Rastreamento manual de rota SPA
// Manually notify OpsIQ of a route change (for custom routers)
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["pageview", {
  url: window.location.href,
  title: document.title,
}]);

Regras do CSP

Regras CSP para widget
script-src 'self' https://your-opsiq-domain.com;
connect-src 'self' https://your-opsiq-domain.com;
frame-src https://your-opsiq-domain.com;
O widget atrasa meu site?+

Não, debaixo. 15 KB Gzipped, carrega assincronia após conteúdo da página.

Posso personalizar a aparência?+

Use a cor dos dados para a cor primária. CSS Opções de substituição.

Desenvolvimento

Widget instalar receitas

Guias de instalação específicos da plataforma.

Como funciona
Widget instalar receitasPlataforma instalar cartões para WordPress, Shopify e Google Tag Manager, cada dizendo onde adicionar o widget.WPWordPressInstale o plugin, digiteA chave do seu site, salve.LojaShopifyColar o trecho emTema. Líquido antes /body.GTMGerente de etiquetasPersonalizado. HTML Tag, todas as páginas.
Instalar receitas

WordPress

Cenário:
Adicionar a todas as páginas de um WordPress Site.
O que fazer:

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

Cenário:
Acrescente ao seu Shopify Loja.
O que fazer:

Online Store > Themes > Edit Code > Layout > theme.liquid. Paste before </body>. Save.

Reagir / Próximo. Js

Cenário:
Adicione um aplicativo React ou Next. Js.
O que fazer:

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

Cenário:
Acrescente ao seu WHMCS Área do cliente.
O que fazer:

Configuração > Configurações gerais > Outro > Conteúdo Global de Rodapé. Colar o trecho.

Google Tag Manager

Cenário:
Adicione via GTM.
O que fazer:

Criar Personalizado HTML Todas as páginas, publique.

Desenvolvimento

Elemento de administração em sua infraestrutura (um contrato, qualquer plataforma)

Incorpore o OpsIQ Assistente de administração, bate-papo administrativo, caixa de entrada e escrita de IA, dentro do painel de administração da sua própria plataforma, para que sua equipe nunca deixe suas ferramentas SSO Este é um contrato genérico implementado em15 linhas do código de servidor da sua plataforma - o mesmo padrão Zendesk, Intercom e uso do discurso para SSO Não há nenhum plugin por plataforma para esperar: qualquer pilha que possa computar um HMAC pode fazer isso hoje.

Passo 1 - a linha de incorporação

De Sites Remotos→Seu site.→Códigos, copie a linha do carregador e adicione-a às páginas do seu painel de administração (footer include, layout template, ou uma caixa de administrador só personalizado-JS):

A incorporação de uma linha
<script async src="https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=SITE_KEY&identity_token=TOKEN_FROM_STEP_2"></script>

Passo2- Diga.OpsIQque está logado (servidor-assinado)

Seu servidor gera um símbolo assinado de curta duração da sua sessão, exatamente como o símbolo de identidade do visitante, assinado com o mesmo site webhook secreto:

PHP · assina a identidade do administrador da sua sessão
<?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.
Acesso por administração, automaticamente.

Cada administrador que entra em sua plataforma é compatível individualmente:OpsIQO portal de acesso por administrador resolve o nome do token + e-mail contra um.OpsIQAgente (página da equipe; use a lista de "e-mails de correspondência" do agente quando os e-mails da plataforma diferem) e aplique as permissões de trabalho, departamento e caixa de entrada do agente.OpsIQNão há mudanças de incorporação.

Roles andam junto

Qualquer papel que sua plataforma enviar é mostrado noOpsIQO lado da atribuição, a autorização sempre vem doOpsIQRegistro de agente, nunca do papel declarado.

Por que não ler nosso cookie de login?

Navegadores nunca enviam seu cookie para outra origem, nenhum fornecedor pode "detectar" seu domínio cruzado de login, todo produto sério resolve isso da mesma forma: seu servidor garante, assinado.

Sem modo compartilhado em seu próprio site.

Fora da... OpsIQ o carregador fica escondido até que um token de administrador assinado chegue.

O authenticated Bandeira, coloque-a no nível TOP.

Esta bandeira é a afirmação do seu servidor de que um humano está realmente logado, e OpsIQ recusa qualquer token sem ele. "authenticated" => true beside site_key/iat/exp, NÃO só dentro do admin objeto OpsIQ aceita em qualquer posição, mas versões mais antigas só lêem o nível superior - e o fracasso é enganoso: lista de conversas, histórico e não lido tudo autenticar bem enquanto cada bate-papo vira respostas "O login do administrador é necessário"Se você vê exatamente essa divisão, verifique esta bandeira primeiro.

Higiene do token

Assine apenas no servidor, nunca no navegador.JavaScriptMantenha exp curto (minutos a horas);OpsIQRejeita fichas expiradas e futuras, e a assinatura liga o token à chave do seu site.

Implementação de referência

OWHMCSO módulo faz isso automaticamente a partir doWHMCSSessão de administração, o arquivo de ponte do Botble Hotel faz isso da sessão Laravel (op=admin_identity), ambos são apenas este contrato no dialeto da plataforma deles.

Fiação de página zero (probe declarada pelo conector)

Quando o seuOpsIQConector armazena seu ponto final de identidade em seu admin_identity_probe_url A página ainda pode ser substituída com um código de acesso. data-identity-endpoint atributo ou window.OpsIQAdminIdentityEndpoint.

💡
O segredo de assinatura está preenchido para você. Em Sites Remotos, seu site, códigos, opção 3, entre em sua equipe, cada exemplo já contém o próprio segredo deste site, então o código funciona como colado: não há nada para copiar ou configurar. opsiq_whsec_YOUR_SITE_SECRET Cada exemplo procura por OPSIQ_SITE_SECRET (ou a própria configuração do seu framework, nomeada em suas notas) no servidor primeiro e usa isso quando está definido, para que você possa mover o segredo para fora do arquivo sempre que quiser, por exemplo, rotacioná-lo sem editar código JavaScriptE nunca o entregue a um repositório público, porque qualquer pessoa que tenha o segredo pode assinar como qualquer cliente ou funcionário. WHMCS e Botble Não precisa de nada disso: WHMCS Gancho chega com o segredo preenchido, eo Botble O painel de conectores o preenche na ponte.

Código completo, plataforma por plataforma.

Cada exemplo imprime a tag de bate-papo administrativo apenas para um membro da equipe, com o símbolo assinado adicionado, e responde ao recreativo do widget (?opsiq_identity_refresh=1&role=admin) com {"success":true,"identity_token":"…"} ou 401Sites remotos, seu site, códigos, opção 3, assine em sua equipe imprime o mesmo código com a chave do seu site e secreto preenchido.

⚠️
The admin token is the two-part form: base64url(payload), a dot, then the hex HMAC-SHA256 of that base64url text. It is not a JWT, and a JWT is refused. The admin object needs id and email, and exp must be within 24 hours.

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>`)
}

Implementação do objetivo de identidade em Laravel (notas difíceis de ganhar)

Se sua plataforma é Laravel (Botble, Bagisto, aplicativos personalizados) e seu ponto final é um arquivo independente que inicia o framework para ler o administrador logado, três específicos vão economizar horas - cada um produziu uma falha de produção real antes de ser aprendido:

Amarre o pedido antes de iniciar

Seus prestadores de serviços podem resolver request O próprio ciclo de vida de Laravel liga o pedido capturado logo dentro. Kernel::handle() - Mirror essa ordem: $app->instance('request', Request::capture()) ANTES $kernel->bootstrap(), ou você começa "A classe do alvo não existe".

O prefixo de sessão-cookie é HMAC-keyed

Prefixos Laravel modernos valores de cookie com um HMAC Computado com a chave APP (CookieValuePrefix- Uma planície. sha1(name."v2") Não pode combiná-lo. CookieValuePrefix::validate($name, $decrypted, $keys), com um retrocesso estrutural (40Hex chars + | na posição40Diga: uma sessão de identificação maior que40Chars (81= prefixo ainda anexado) e uma sessão que carrega apenas com _token - Não, não.

Onde o login mora

O selo de autorização é login_<guard>_<sha1(guard class)> - para o guarda padrão: 'login_web_' . sha1(Illuminate\Auth\SessionGuard::class)Analisar qualquer login_* Chave numérica como um retorno para guardas personalizados.

Depurar como a ponte faz

Navio a debug=1 A ponte Botble (de v1.0.7_) é a referência: marcadores de passo no kernel/bind/bootstrap/decrypt/session/auth/db.

Laravel, ponto final de identidade completo.
<?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]);
}

O mesmo ponto final em outras pilhas.

Apenas as mudanças de linha "quem está logado?", o bloco de assinatura é idêntico em todo lugar.JavaScript.

WordPress · WHMCSSymfony - PHP simples - troque o olhar, mantenha o sinal
<?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]);

Quando não funciona, diagnostica nesta ordem.

O elemento nunca aparece, o console diz "O símbolo de identidade do administrador é necessário"

Seu ponto final voltou não. identity_tokenAbra o ponto final.URLdiretamente no navegador de administração com &debug=1 Em Laravel, este é quase sempre o item de ligação ou prefixo de biscoitos acima.

História e conversas funcionam, mas cada bate-papo diz: "O login do administrador é necessário"

A divisão clássica. authenticated O próprio parâmetro do widget aceita o token, o verificador compartilhado por trás do fluxo de bate-papo recusa. "authenticated" => true beside exp.

"administrado não provido emOpsIQ" (HTTP401)

O token foi verificado, mas seu nome de usuário + e-mail não corresponde.OpsIQAgente, adicione o agente.OpsIQ →Equipe, ou adicione o e-mail da plataforma na lista de correspondências do agente quando difere dos seusOpsIQE-mail.

Tudo.403sdo navegador, mas trabalha com cacho.

Um pré-voo do CORS está rejeitando um dos seus cabeçalhos de pedido. OPTIONS e ecoam a origem solicitante, ou simplesmente evitem cabeçalhos personalizados. O widget só precisa do cookie.

Trabalhou ontem, falhou hoje.

Cheque. expO widget re-sonda automaticamente, então isso geralmente significa que o ponto final parou de ver a sessão - uma rotação da chave do aplicativo, uma mudança no driver de sessão, ou uma mudança de domínio de cookies.

💡
O widget de administração fica escondido até que a identidade se resolva, e cada bate-papo/caixa de entrada/chamada de dados é forçada ao lado do servidor contra o correspondente.OpsIQO símbolo destranca a UI, as permissões sempre vêm deOpsIQ.
Desenvolvimento

Identidade do visitante

Identidade conecta visitantes anônimos a clientes conhecidos. OpsIQ Links histórico de navegação, bate-papos e ingressos para o perfil do cliente.

Como funciona
Identidade do visitanteUm fluxo: um usuário faz login em seu site, você emite uma ficha de identidade assinada, e OpsIQ unifica suas sessões, conversas e tickets em um perfil.O usuário entra.em seu siteSinal assinadotoken_de_identidade (HMAC)Um perfil.sessions+ bate-papos+ ingressos
Identidade do visitante

Dois níveis de identidade, e quando cada um é suficiente

Nível 1 — uma dica sem sinal

Você diz ao widget quem é o visitante com uma planícieJavaScriptEle preenche o e-mail e a identidade do cliente no registro de visitantes, então seu painel mostra tráfego e sessões se juntam.OpsIQNunca libera dados de conta sobre a força disso.

Nível.2- um símbolo de identidade assinado.

Seu servidor assina um token de curta duração com o segredo do Webhook.OpsIQEste é o nível que desbloqueia as respostas da conta no bate-papo do cliente e buscas de conectores.

⚠️
Nível.1é uma conveniência de exibição.2Se uma pergunta só pode ser respondida para o titular da conta real, você precisa de nível.2.
💡
Você não tem que escrever Level 2 À mão: Sites Remotos → Seu site → Códigos → C. Clientes assinados geram o código de assinatura e o gerenciador de atualização para PHP, WordPress, Laravel, Node.jsPython, Django, .NET, Rails, Java e Go WHMCS Gancho e o Botble A identidade diz quem é o cliente; suas ordens ou reservas chegam ao bate-papo através de um conector (com um arquivo bridge somente quando a plataforma não tem API).

Nível 1 — a dica não assinada

Defina o objeto ANTES do script widget, ou ligue para o IDident() mais tarde quando seu aplicativo souber quem está conectado.

JavaScript· os dois formulários suportados
<!-- 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.

Nível 2 — O símbolo de identidade assinado pelo servidor

Exatamente o mesmo contrato que o widget de administração, com um customer sujeito em vez de um admin Dois detalhes decidem se verifica, e ambos são fáceis de errar.

O HMAC cobre a corda BASE64URL, não oJSON

Assine. $payload64Não, não. $payloadAssinando o cruJSONproduz um símbolo que parece certo e é rejeitado toda vez com uma assinatura descompasso.

Base64url, desacolchoada.

Traduzir +/ para -_ e tirar a = A base 64 sobrevive hoje, a Base 64url é o contrato.OpsIQVerificador e conector de referência emitem.

Autenticação vai ao nível TOP

Ao lado site_key, iat e expÉ sua afirmação que um humano de verdade está conectado, eOpsIQrecusa o símbolo sem ele.

cliente. id é obrigatório.

Um token que carrega apenas um e-mail verifica como uma assinatura e é então silenciosamente deixado cair.

Mantenha a exp curta.

O símbolo é uma afirmação de sessão, não um crédito para guardar.

PHP - assine um token de identidade do cliente (este código exato verifica)
<?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>';
🚫
Assine apenas no servidor, um símbolo cunhado no navegador.JavaScriptsignifica enviar o site secreto para cada visitante, que dá a qualquer um a capacidade de se passar por qualquer cliente.

O mesmo contrato, três superfícies.

Conversa de clientes em seu site.

assunto do cliente, passado como identity_token Opcional: com um trecho A e um conector, o bate-papo já verifica os próprios clientes (um número de reserva ou pedido com prova, ou um código enviado por e-mail antes de uma ordem). Sites remotos, códigos, C gera o código para reconhecimento automático dos clientes já conectados em seu site.

Conversa de administrador dentro da sua infraestrutura

Assunto de administração, passado para opsiq/embed/admin_widget. php. Mesma assinatura, chave de assunto diferente.

Suporte ao portal de links profundos.

Uma variante mais rigorosa: as mesmas reivindicações mais jti e single_use: true, and a120-segunda vida, porque o símbolo viaja em umURLO Portal de Suporte tem um trecho pronto para o seu idioma, e a plataforma menta-o para você quando sua área de conta é executada neste servidor.

E se um visitante limpar os biscoitos?+

Ficam anônimos até serem identificados novamente.OpsIQliga o novo registro anônimo ao perfil do cliente no momento em que uma dica ou um símbolo chega.

Por que meu cartão confirma o registro de visitas, mas não as perguntas de contas?+

Esse é o Nível.1- Level2Uma dica não assinada preenche o registro de visitas e nada mais.

Desenvolvimento

Portal: código para cada plataforma

Envie um cliente que já tenha assinado o seu aplicativo diretamente para o portal de suporte, assinado sem segunda senha, esta página explica como funciona a transferência, cada reclamação no token, a configuração e uma rota completa para cada plataforma, configurações, o Portal de Suporte imprime o mesmo código com seu próprio endereço do portal e chave de espaço de trabalho preenchida.

Como funciona

1
O cliente clica em Suporte em seu aplicativo

O link aponta para uma rota pequena no seu servidor, por exemplo /support-portal. Nunca em um link que já contém um token: um toke em uma página vaza através da fonte de página, histórico do navegador e o cabeçalho Referer.

2
A rota verifica quem está assinado.

Um visitante que não está conectado é enviado para o seu login primeiro e volta para a rota depois.

3
A rota assina um símbolo único.

Um HS256 padrão da JWT assinado com o segredo de assinatura deste espaço de trabalho, que só seu servidor mantém 120 segundos e pode ser usado uma vez.

4
A rota redireciona para o portal.

Na página do portal, o cliente veio de quando o portal pediu um (opsiq_portal_return, aceito apenas dentro do seu endereço do portal), caso contrário, a casa do portal.

5
O portal verifica e assina o cliente.

A assinatura, a chave de espaço de trabalho, a expiração e o id único são verificados.

O símbolo, a reivindicação por reivindicação

site_key

Uma ficha feita para outro espaço de trabalho é recusada mesmo quando está assinada corretamente.

Iat / exp.

Emitido e expirado, em segundos 120 segundos: só tem que sobreviver a um redirecionamento.

autenticado: verdadeiro

O seu aplicativo disse que ele realmente assinou com essa pessoa.

JTI + single_use: Verdade

Uma identificação aleatória e uma bandeira única, o mesmo link não pode ser usado duas vezes.

plataforma

Uma etiqueta grátis para de onde o cliente veio (php, wordpress, whmcsMostrado no perfil do cliente.

cliente. id e cliente. email

A identidade é do seu próprio cliente, o e-mail é como o portal encontra o cliente e corresponde aos pedidos.

Cliente. Nome / external_id

Nome opcional da exibição, e a identificação OpsIQ Lojas contra sua plataforma.

Configuração

1
Copia a rota.

Escolha o que seu aplicativo executa, o código abaixo da lista tem seu endereço do portal e a chave de espaço de trabalho preenchida, com notas numeradas para essa plataforma.

2
O segredo já está no código.

A rota copiada contém o segredo de assinatura desta área de trabalho, então funciona como colado. Para mantê-lo fora do arquivo, definir OPSIQ_SITE_SECRET (ou configuração da sua estrutura) no servidor em vez disso: esse valor é usado primeiro. Nunca coloque a rota em uma página, JavaScript, um aplicativo móvel ou um repositório público: qualquer pessoa que tenha o segredo pode entrar como qualquer cliente.

3
Ligue seu botão de suporte à rota.

Por exemplo https://your-app.com/support-portal.

4
Faça o botão de login do portal usar seu aplicativo.

Portal Studio, página de entrada, use o login do meu site, sua página de login URL: O portal acrescenta: opsiq_portal_return Por si só e a rota traz o cliente de volta para aquela página, assinado.

5
Opcional: assinar em todos os lugares.

Configurações, Portal de Suporte, assine em todos os lugares: URLEntão, sair do portal também assina o cliente fora do seu aplicativo.

6
Teste

Gere um link de teste assinado na mesma página de configurações para verificar o portal sozinho, e então abra sua rota enquanto entra no seu aplicativo.

WHMCS Não precisa de nenhum código: WHMCS Gancho de Sites Remotos já assina clientes no portal e os traz de volta para a página em que estavam.
💡
O segredo de assinatura está preenchido para você. Em Configurações, Portal de Suporte, Inscrição sem costura do seu aplicativo, cada exemplo já contém o segredo deste site, então o código funciona como colado: não há nada para copiar ou configurar. opsiq_whsec_YOUR_SITE_SECRET Cada exemplo procura por OPSIQ_SITE_SECRET (ou a própria configuração do seu framework, nomeada em suas notas) no servidor primeiro e usa isso quando está definido, para que você possa mover o segredo para fora do arquivo sempre que quiser, por exemplo, rotacioná-lo sem editar código JavaScriptE nunca o entregue a um repositório público, porque qualquer pessoa que tenha o segredo pode assinar como qualquer cliente ou funcionário. WHMCS e Botble Não precisa de nada disso: WHMCS Gancho chega com o segredo preenchido, eo Botble O painel de conectores o preenche na ponte.

Rotas completas, plataforma por plataforma.

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)
}

Quando algo está errado

O portal abre, mas saiu.

A chave secreta ou espaço de trabalho não corresponde a esta área de trabalho, o token é mais antigo que 120 segundos (verifique o relógio do servidor), ou o mesmo link foi aberto duas vezes. Gere um link assinado para teste: se isso funcionar, compare as reivindicações do seu token com o exemplo.

Sempre cai no portal de casa.

O endereço de retorno não estava no seu endereço do portal, então foi ignorado de propósito URL mostrado em Configurações.

Os hóspedes têm um erro em vez de seu login.

Substitua /login na rota com sua página de login real, e certifique-se de que seu login retorne ao endereço que foi dado.

Funciona apenas para alguns clientes.

O cliente está vazio para eles, ambos são necessários.

Desenvolvimento

Conversa com o cliente: reconhecer clientes conectados

A maioria dos sites não precisa disso, com o trecho de bate-papo simples e um conector, o chat verifica os clientes em si, com uma reserva ou número de pedido mais prova para buscas e um código enviado por e-mail antes de um pedido. WHMCS Sites remotos, seu site, códigos, C imprime o mesmo código com a chave do site preenchida.

Como funciona

1
Sua página imprime a tag de bate-papo.

Para um cliente assinado, o widget URL Carregar e...identity_tokenAssinado no seu servidor, para um convidado é a etiqueta simples, nada secreto está na página, apenas um símbolo que expira.

2
O bate-papo verifica o token.

O cliente é conhecido em cada pedido de bate-papo, e seu conector pode responder sobre suas próprias ordens, reservas ou faturas.

3
O bate-papo se refresca antes que a hora acabe

Chama a página que está na?opsiq_identity_refresh=1Seu código responde:identity_token":" ..."} enquanto o cliente é assinado, ou 401 com {"sucesso": falso,login_requiredÉ por isso que o técnico de atualização deve ser executado antes que sua página imprima algo.

Como difere do portal

Vida

Uma hora (exp = iat + 3600) em vez de 120 segundos, porque ele faz cada pedido de bate-papo em vez de um redirecionamento.

Sem jti ou single_use

O mesmo é usado para cada mensagem até que a atualização o substitua.

Mesma coisa toda.

site_key, iat, exp, autenticado: verdadeiro, plataforma, e cliente com um ID e e-mail necessários.

💡
A identidade diz quem é o cliente, suas ordens, reservas ou faturas chegam ao bate-papo através de um conector que chama a sua plataforma de API, ou, quando sua plataforma não tem API, um conector mais seu arquivo de ponte (o construtor de conectores faz um).
💡
O segredo de assinatura está preenchido para você. Em Sites Remotos, seu site, códigos, C, cada exemplo já contém o próprio segredo deste site, então o código funciona como colado: não há nada para copiar ou configurar. opsiq_whsec_YOUR_SITE_SECRET Cada exemplo procura por OPSIQ_SITE_SECRET (ou a própria configuração do seu framework, nomeada em suas notas) no servidor primeiro e usa isso quando está definido, para que você possa mover o segredo para fora do arquivo sempre que quiser, por exemplo, rotacioná-lo sem editar código JavaScriptE nunca o entregue a um repositório público, porque qualquer pessoa que tenha o segredo pode assinar como qualquer cliente ou funcionário. WHMCS e Botble Não precisa de nada disso: WHMCS Gancho chega com o segredo preenchido, eo Botble O painel de conectores o preenche na ponte.

Código completo, plataforma por plataforma.

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>`)
}

Quando algo está errado

O chat trata um cliente conectado como convidado.

A etiqueta foi impressa sem identity_token (o segredo está faltando no servidor, então o código falha fechado), ou a chave de espaço de trabalho do token ou segredo não coincide.

Reconhecida no início, depois uma convidada após cerca de uma hora.

O gerenciador de atualização não é alcançado: ele deve ser executado antes de qualquer saída, em cada página que o bate-papo aparece.

O chat simples mostra duas vezes

Remova a tag simples do seu modelo: este código imprime o chat em si.

Desenvolvimento

Plugins e SDKs

OpsIQ Providências SDK Pacotes e plugins para plataformas comuns.

Como funciona
Plugins e SDKsQuatro pacotes: PHP SDK Node.js SDK, WordPress plugin e WHMCS Módulo, cada um com seu comando de instalação.PHPPHP SDKO compositor precisa. opsiq/sdkJSNode.jsSDKNpm i @opsiq/sdkWPWordPress pluginUm clique para instalar e conectarWHWHMCS móduloAddon para cobrança + passagem retransmissão
Plugins e SDKs
PHP SDK

Pacote de composição: geração de símbolos de identidade, ação API helpers, verificação de assinatura webhook.

JavaScript SDK

Lado do navegador: rastreamento, identidade, eventos personalizados, controle de bate-papo.

WordPress plugin

Injecção de elementos, identidade das sessões de usuários da WP, WooCommerce Sincronização.

WHMCS módulo

Integração completa: widget, passagem de identidade, IA do administrador.

Shopify extensão do tema

Aplicativo incorporado com identidade automática de cliente.

PHP SDK Começar rápido

PHP SDK exemplo
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);
Desenvolvimento

Pesquisa. API, eventos e automação sem conectores

Survey Studio foi projetado para usar o mesmo tipo Geral API, executor interno, barramento de eventos e operações webhook como o resto de OpsIQ. Isso permite que os desenvolvedores se integrem fim a fim sem construir um conector empacotado.

⚠️
Situação de implementação: o catálogo ao vivo atualmente expõe apenas platform.get.survey.config e platform.save.survey.configO surveys.* e feedback.* Famílias abaixo estão no contrato de alvo aprovado e devem retornar. unknown_action até o registro.

Famílias de ação alvo

Tipos, modelos e lançamento rápido

surveys.types.*, surveys.templates.* e surveys.quick_launch.* Lista, pré-visualização, instanciar e validar entradas completas.

Pesquisas e versões

surveys.create|get|list|update|archive|duplicate mais versão imutável, validação e publicação de ações.

Implantações e alvos

surveys.deployments.*, surveys.links.*, surveys.audiences.*, surveys.triggers.* e surveys.variables.*.

Esforço e respostas

surveys.invitations.*, surveys.campaigns.*, surveys.recipients.*, surveys.responses.*Exportações, redação e análise.

Webhooks, importação e feedback

surveys.webhooks.*, surveys.imports.*, feedback.items.*, feedback.analytics.*, feedback.sources.* e feedback.analysis.*.

Fluxo livre de conectores

1
Crie e publique através do General. API

Escreve declara permissão, risco, confirmação, indemnidade e comportamento de corrida a seco.

2
Receba seu evento de negócios.

Envie um evento assinado para um webhook, por exemplo, cancelamento de pedido ou completada etapa de integração.

3
Mapeie em Ações e Gatilhos

Escolha um. OpsIQ Geral. API Ações como emitir um convite de pesquisa ou preparar uma campanha, e mapear campos da carga do gatilho verificado.

4
Subscreva-se nos eventos da pesquisa.

Entregue o registro documentado de segurança comercial. Subconjunto do ciclo de vida para seu ponto final com assinatura, filtro, retentar, registrar e repetir autorizado.

Alvo de evento canônico

O catálogo compartilhado cobrirá pesquisa/deployment publicará estado, público e desencadear decisões, convites, render/start/parcial/resume/completo/abandono, resposta de redação, estado da campanha e falhas de entrega.

Um conector é opcional, acrescenta descoberta de plataforma reutilizável, identidade verificada, fatos, variáveis e enumeração do destinatário. API mais Ações e gatilhos / webhooks continua a ser o caminho de integração completa para desenvolvedores que não precisam de um conector empacotado.
Desenvolvimento

RESTAURAÇÃO API

O OpsIQ RESTAURAÇÃO API permite acessar programaticamente todos os recursos da plataforma.

Como funciona
RESTAURAÇÃO APIUm terminal mostrando um POST para o OpsIQ API com a chave do portador, listando ingressos abertos, e o paged JSON Resposta.$ curl -X POST https://your-domain.com/api/v1.php \-H "Authorization: Bearer opq_..."200 Está bem.{ "data": [{ "id": 4192, "ticket_number": "T-4192","subject": "Card declined", "status": "open" },... more tickets ...], "page": 1, "per_page": 50, "has_more": true }
RESTAURAÇÃO API

Pedido de formato

Envie a chave como Authorization: Bearer opq_... Ou X-OpsIQ-Key: opq_...Use um cabeçalho de autenticação, não ambos.

API formatação de solicitação
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"
}

Ações comuns

O API É baseado em ação: envie um action Todos os administradores registrados JSON A operação tem uma ação estável. {"action":"meta.actions"} (sem chave necessária) para a autoritária, por instalação lista, contrato de solicitação, metadados de risco e escopo. platform.routes.* A ponte permanece apenas para integrações mais antigas.

crm.contacts.list

Listar contatos CRM (CPM. read).

crm.contacts.upsert

Resolver ou criar um contato (CPM. Escrita de telescópio).

crm.deals.list

Listar acordos de CRM (scope crm. read).

crm.activities.record

Gravar um ciclo de vida/atividade comercial para um contato (CPM. Write).

crm.conversions.record

Params: contato ou e-mail, tipo de conversão, valor, moeda.

crm.events.list

Procure o fluxo de eventos CRM (CORM. read).

tickets.list

Params: página, per_page, ordenação, ordem, status, prioridade, departamento_id, atributed_admin_id. cliente_email, busca.

tickets.get

Um ticket e suas mensagens (bilhetes de escopo. leia).

tickets.reply

Postar uma resposta para um ticket (bilhetes de escopo. escrita).

tickets.update

Atualizar um ticket (bilhetes de escopo. escrita).

tickets.open

Params: cliente_email, nome do cliente, assunto, corpo, prioridade.

tickets.bulk

Faça uma operação de filas em massa (comissões. escritas).

conversations.list

Listar conversas ao vivo (conversas de escopo. leia).

conversations.get

Uma conversa e suas mensagens (conversas de escopo. leia).

conversations.messages

"Antecedentes de mensagens" (conversas de escopo. leia).

conversations.send

Enviar uma mensagem para uma conversação (conversas de escopo. escritas).

conversations.update

Atribuir, re-estatuir ou re-titular uma conversação (conversas de escopo. escritas).

Conectores. Lista.

Veja quais conectores são instalados, o que cada um pode fazer, e se suas credenciais funcionam (conectores de telescópio. leia).

automations.actions.list

As ações que seu construtor de Ações executará (commações de telescópios. lead).

automations.triggers.list

O que vai disparar e em quais condições (automações de telescópios.

automations.runs.list

Histórico de execução para depuração de uma integração (automações de escopo. lead).

departments.list

Departamentos que você pode encaminhar uma passagem para (departamentos de telescópio. leu).

notifications.list

Notificações para um operador (notificações de escopo. leia).

analytics.export

Uma seção de relatório como CSV (análise do escopo. leia).

Site_intelligence. sites. list/. relatórios. list

Sites monitorados e seus relatórios de SEO (scope site_intelligence. read).

Comércio, produtos, lista.

Seu catálogo da loja, paged (comércio de telescópio. lead). .get retorna um produto com suas variantes.

Comércio. Ordens. Lista.

Filtrar: status, método de pagamento, canal, e-mail do cliente. order_id O cabo de saída do portal ao vivo nunca é retornado.

commerce.refunds.list

Pedidos de reembolso e seu estado (comércio. lede).

commerce.quotes.create

Preço um item para um cliente (comércio de telescópio. escrita). store Não cria nada, nenhum pedido, nem pagamento.

Bilhetes.csat.list /.get /.metrics

Respostas de satisfação do cliente como dados (bilhetes. lead). .metrics retorna os mesmos números que o painel mostra.

conversations.ratings.list

Conversas de bate-papo, seus visitantes avaliaram, com o comentário, o que levou a classificação e o agente creditado (conversas de microscópio. leia).

knowledge.articles.list

Passe por seus artigos da Central de Ajuda (Chope KB. read).

knowledge.articles.get

Um artigo da Central de Ajuda por id (scope kb. read).

webhooks.events.list

Cada evento que você pode assinar um terminal webhook com sua carga disponível em cada plano, para que você possa construir contra ele antes de comprar.

files.get

Um link assinado de curta duração para um anexo (arquivos de escopo. lede).

security.check

Pergunte se um...IP ou o e-mail está bloqueado ou suspeito aqui (Segurança do telescópio.IP firewall, a lista de spam e o veredito secreto da IA de segurança. ip, e-mail.

security.report

Relatório de abuso do seu sistema observado (Segurança de Escopo. ip, e-mail, gentileza, razão, fonte.

- Segurança. Lista de bloqueios.

Gerencie as regras de spam que o pipeline obriga (segurança do escopo.escrita / segurança.leia).ip), valor, razão, expira horas.

💡
Meta-actions é sempre autoritária, devolve todas as ações disponíveis na instalação com o escopo que cada uma precisa, então você nunca tem que adivinhar ou codificar esta lista.

Chamando, filtrando e separando

Cada ação de lista usa os mesmos parâmetros, então você aprende uma vez.

Página / Per_page

Número da página começando em 1, e tamanho da página. 50, máximo 200 Limite e compensação também são aceitos se você preferir.

ordenar / encomendar

Cada ação aceita um conjunto fixo de campos de sorte, qualquer outra coisa é ignorada em vez de erro.

filters

Envie filtros como um objeto, ou passe um filtro como um parâmetro de nível superior.

O que volta

Itens, página, conta, total e hasmore.

Página, filtrado, pedido de lista ordenada
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
}

Erros

Cada falha retorna a mesma forma, com um estábulo code Não combinem com o legível para humanos. error texto, que pode ser reformulado.

Resposta de erro.
{
  "success": false,
  "code": "missing_scope",
  "error": "API key missing required scope. Needed one of: tickets.read, admin",
  "request_id": "req_8f2c1a9d4b7e"
}
Faltando a chave, inválido api_key

Nenhuma chave foi enviada, ou a chave está errada ou expirada. 401.

missing_scope

A chave é válida, mas não tem o escopo que esta ação precisa. 403.

Tradução:

A chave é somente leitura, ou esta ação não está em sua lista de permissão. 403.

unknown_action

Chame meta-ações para a lista atual. 400.

Parâmetro ausente / parâmetro inválido

Um parâmetro necessário está ausente, ou um valor não é aceito. 400.

not_found

O registro não existe, ou não está no espaço de trabalho que esta chave pode ver. 404.

plan_feature_locked

Seu plano não inclui o recurso a que esta ação pertence. feature, o plan_name em vigor e upgrade_urlTentar de novo não vai ajudar, o plano tem que mudar.402.

license_required

A licença da instalação não está ativa, então nenhuma ação será executada até que seja restaurada.402.

selling_paused

Comércio específico: a loja está vendendo desligado, então nada pode ser citado ou encomendado.400.

rate_limited

O limite de hora para esta chave é usado. 429.

server_error

Algo falhou do nosso lado. 500.

Retiradas seguras

Se um tempo de escrita for revelado, não se sabe se ele pousou. idempotency_key E uma repetição da mesma chamada retorna o resultado original em vez de fazer o trabalho duas vezes.

Escreve com idempotência
{
  "action": "tickets.reply",
  "ticket_id": 4192,
  "body": "Thanks, that is now fixed.",
  "idempotency_key": "your-unique-id-for-this-attempt"
}
Quanto tempo dura?

Uma chave é lembrada por 24 horas contra a mesma ação e API Chave.

O que você tem de volta

A resposta original, mais idempotent_replay: verdade para que você possa dizer que foi uma repetição.

Falhas continuam sendo retrítulos.

Se uma ligação falhar, enviá-la de novo com a mesma chave, é o que você quer.

Leia.

As leituras ignoram a chave, repetir uma leitura é inofensivo.

Teste sem mudar nada.

Adicionar dry_run: true Suas chaves, escopos e parâmetros são verificados exatamente como normal, então a chamada para antes de qualquer coisa ser criada ou alterada.

Corrida: verifique credenciais e carga segura.
{
  "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."
}
É a maneira mais rápida de confirmar que uma chave tem o escopo certo e sua carga é moldada corretamente, sem criar dados de teste que você precisa limpar.

Limites de taxa

Limite de por-chave

Um limite de hora configurável por API Chave (padrão) 1000 Coloque-o por chave em configurações,API Chaves.

Quando excedido

HTTP 429 O limite é reiniciado no início da próxima hora do relógio.

Sabendo onde você está

Cada resposta carrega limite-limite de frequência X, limite-retenção X e limite-resposta X (um timestamp Unix).

Contando 429 De 401

A 429 significa esperar e tentar novamente. 401 Significa que a chave está errada ou expirada, então tentar de novo não ajudará até consertar a chave.

Guarda de força bruta pré-auth

Repetidas tentativas falhadas de uma.IPChaves válidas nunca tropeçam nisso.

Melhor prática.

Afaste-se quando o resto descer, e honre Retry-Depois de um 429 em vez de tentar novamente imediatamente.

Versões e estabilidade

Versão atual

V1. Cada resposta leva X...OpsIQ-API-Versão e X...OpsIQ-API Status para que possa confirmar o que está falando.

Como você será avisado

Se uma versão for aposentada, as respostas ganham os cabeçalhos padrão de Deprecação e Sunset, e meta-ações reportam o que está sendo ultrapassado e o que é pôr do sol.

O que não vai mudar

Novos campos opcionais podem ser adicionados a qualquer momento, então ignore os campos que não reconhece ao invés de falhar neles.

Uma completa integração, do começo ao fim.

Este é o ciclo todo: encontrar trabalho, lê-lo, agir sobre ele, e confirmar o que você fez.

Fluxo de trabalho completo sobre o 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}
💡
Tudo acima funciona da mesma forma para conversas: conversations. list, conversations. get, conversation. send e conversations, atualizar seguem o mesmo padrão, parâmetros e resposta de forma.

Mais exemplos trabalhados

Cada um deles é uma peça completa e executável de uma integração real, ao invés de um fragmento.

Página através de cada registro, em três línguas

A regra é a mesma em todos os lugares: continue pedindo pela próxima página até has_more Nunca adivinhe um total.

Python · página através de cada ticket aberto
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... page em cada pista.
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 · página através de cada ticket aberto
<?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"]));

Lidar com cada falha doAPIPode voltar.

- Branch. codeNunca na frase de errorEste envelope é o contrato inteiro em uma função.

Python · um cliente que lida com todos os códigos de erro corretamente
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")

Responda uma pontuação ruim em uma hora.

Leia as notas baixas, abra um bilhete para cada um, e nunca aja no mesmo duas vezes.

Feche o ciclo sobre clientes infelizes.
# 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.

Citar um item e agir sobre a resposta do comerciante

Uma recusa que lhe diz o que recolher.
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 }
}
⚠️
Mostre ao cliente. totals.total A quantidade nem sempre multiplica o preço unitário, um hotel cita um quarto por três noites, então uma figura que você calcula pode ser diferente do que o comerciante vai cobrar.

Um receptor de webhook que é seguro para funcionar na produção.

Verifique, desduplique, responda rapidamente, depois faça o trabalho.

PHP · um receptor de webhook em forma de produção
<?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

Planos e direitos

Cada ação pertence a uma característica do produto, e seu plano decide quais características você tem. 402 - Depois que sua chave for checada, então um chamado não autenticado não aprende nada sobre seu plano, e antes de tudo ser criado, então uma escrita bloqueada nunca acontece.

Uma ação com plano bloqueado.
{
  "success": false,
  "code": "plan_feature_locked",
  "feature": "commerce",
  "plan_locked": true,
  "plan_name": "Growth",
  "upgrade_url": "https://…",
  "request_id": "req_8f2c1a9d4b7e"
}
Como dizer isso, além de um problema de permissão

A403significa que a chave é muito estreita, reemiti-la com o escopo certo e funciona.402significa que a CONTA não tem o recurso. Nenhuma chave pode destravá-lo, o plano tem que mudar.

Não tente novamente.402

Não é transitório, supere o upgrade_url Para quem quer que seja o dono da conta em vez de recuar e tentar novamente.

O escopo administrativo não o ignora.

Os escopos expressam o que o emissor de chaves delegou, o plano expressa o que a conta comprou, uma chave com um escopo administrativo ainda recebe um 402 para uma característica que o plano não tem.

Descubra antes de embarcar.

O feature Cada ação precisa ser publicada no diretório de ações abaixo e em meta.actionEntão você pode verificar na hora de construir, em vez de descobrir na produção.

A maneira mais rápida de ver exatamente onde uma chave está meta.meRelata o plano em vigor, cada recurso que carrega, e cada ação que esta chave não pode chamar com a razão para cada um.

Meta. me - o que esta chave pode realmente fazer
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"
    }
  }
}
Me ligue primeiro quando uma integração se comporta de forma diferente entre duas instalações, ela responde "por que essa chave não pode fazer isso" em um pedido, sem ninguém abrir o administrador.

Citando um preço

commerce.quotes.create Não cria nada, nenhuma ordem, nenhuma sessão de pagamento, nenhum estoque, então é seguro ligar enquanto um cliente ainda está decidindo.

Cite um item.
POST /api/v1.php
Authorization: Bearer opq_your_api_key

# Your own Store
{"action":"commerce.quotes.create","source":"store","item_id":"12","quantity":2}

# A connected merchant platform, priced for a known customer
{"action":"commerce.quotes.create","source":"whmcs","item_id":"47",
 "fields":{"domain":"example.ng"},
 "customer":{"connector_customer_id":"1042"}}
O mercador total vence.

Para uma plataforma conectada, o total vem daquele comerciante e nunca é recalculado aqui.

Recusas dizem o que está faltando.

Se o comerciante precisar mais do cliente, você recebe quote_refused com um missing Listando os campos para coletar, e as palavras do próprio comerciante para mostrar.

Ordenar não é umAPIChamar

A confirmação acontece onde o cliente está, o cartão assinado em bate-papo ou o próprio cheque do comerciante, nunca através deste API. ordering.

Quando a venda é pausada

Se a loja tiver vendido desligada, citando respostas. selling_paused ao invés de precificar algo que ninguém pode comprar.

Os outros terminais

Quase tudo que você precisa é de um POST para /api/v1.phpEstas são as exceções, e para que cada um serve.

/api/v1/openapi.php · /api/v1/postman.php · /api/docs/

O contrato da máquina e a referência humana, nenhuma chave necessária, então você pode explorar antes de ter um.

/api/ai_stream.php

Um fluxo, não uma ação JSON.

/api/writing.php

Tudo que faz também está disponível como um grande sucesso. writing.* Ações sobre/api/v1.php,Que é para onde deve ir o novo trabalho.

/api/inbox_copilot.php

Rascunho, reescrita e triagem para uma caixa de entrada incorporada em seu próprio administrador.

/api/v1/si/…

Inteligência local como um pequeno REST API - sites, rastreios, questões, palavras-chave, receita - para pipelines CI que querem começar um crawl após uma implantação e ler o resultado.

/api/connectors.php?slug=&token=

Quando uma plataforma conectada coloca seus próprios ganchos na internet para você, o símbolo é cunhado quando você habilita o conector.

/api/integrations/*.php

O motor de integração: executar e confirmar ações, e ingerir vendas, identidade e eventos de viagem, ele usa seu próprio tipo de chave, emitido sob API & Webhook construtor.

💡
Todos eles obedecem às mesmas regras do plano que as ações.402Aqui também, na mesma forma.

Cada ação, com o escopo que precisa

Essa lista é gerada a partir do catálogo em execução, então sempre corresponde à versão que você está. meta.actions retorna a mesma informação que JSON.

2418 named actions: 804 reads, 1614 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: 584; explicit: 157; route_inferred: 1559; 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

Análise (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

Conversar (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

Comércio (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.

Clientes (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-mail (2)

email.template.send

Write. Scope: email.write, admin. Contract: source_inferred. Send one governed workspace email template Required fields: template, to. Retry-safe with idempotency_key.

email.templates.list

Read. Scope: email.read, admin. Contract: source_inferred. List email templates available to this workspace

engagement (163)

engagement.ab.autowinner

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ab Autowinner

engagement.ab.bandit

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ab Bandit

engagement.address.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Address Get

engagement.address.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Address Save

engagement.ai.agent

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Agent

engagement.ai.analyze

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Analyze

engagement.ai.compile.profile

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Compile Profile

engagement.ai.copy

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Copy

engagement.ai.critique

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Critique

engagement.ai.decide

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Decide

engagement.ai.design

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Design

engagement.ai.edit

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Edit

engagement.ai.generate

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Generate

engagement.ai.ideas

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Ideas

engagement.ai.image

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Image

engagement.ai.image.edit

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Image Edit

engagement.ai.localize

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Localize

engagement.ai.logo

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Logo

engagement.ai.media.jobs

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Media Jobs

engagement.ai.narrative

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Narrative

engagement.ai.responsive

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Responsive

engagement.ai.variants

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Variants

engagement.ai.video.start

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Video Start

engagement.ai.video.status

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Video Status

engagement.approval.decide

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Approval Decide

engagement.approval.request

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Approval Request

engagement.approvals.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Approvals List

engagement.asset.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Asset Delete

engagement.asset.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Asset Upload

engagement.assets.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Assets List

engagement.audience.materialize

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Audience Materialize

engagement.audience.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Audience Save

engagement.audience.test

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Audience Test

engagement.audit.export

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Audit Export

engagement.autoresponder.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Autoresponder Get

engagement.autoresponder.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Autoresponder Save

engagement.bank.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Delete

engagement.bank.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Bank List

engagement.bank.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Save

engagement.bank.used

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Used

engagement.blackouts.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Blackouts Get

engagement.blackouts.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Blackouts Save

engagement.brand.kit.bootstrap

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Brand Kit Bootstrap

engagement.brand.kit.font.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Brand Kit Font Upload

engagement.brand.kit.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Brand Kit Get

engagement.brand.kit.get.route.survey.brand.kit.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Brand Kit Get

engagement.brand.kit.save

Write. Scope: engagement.write, admin. Contract: declared_dynamic. Promo Brand Kit Save

engagement.brand.kit.save.route.survey.brand.kit.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Brand Kit Save

engagement.campaign.archive

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Archive

engagement.campaign.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Delete

engagement.campaign.duplicate

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Duplicate

engagement.campaign.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Get

engagement.campaign.launch

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Campaign Launch

engagement.campaign.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign List

engagement.campaign.pause

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Pause

engagement.campaign.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Preview

engagement.campaign.publish

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Publish

engagement.campaign.rollback

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Rollback

engagement.campaign.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Save

engagement.campaign.save.route.survey.campaign.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Campaign Save

engagement.campaign.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Toggle

engagement.campaign.versions

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Versions

engagement.comment.add

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Comment Add

engagement.comments.add

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Add

engagement.comments.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Delete

engagement.comments.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Comments List

engagement.comments.list.route.survey.comments.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Comments List

engagement.comments.resolve

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Resolve

engagement.connectors.catalog

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Connectors Catalog

engagement.coupon.providers

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Coupon Providers

engagement.coupons.clear

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Coupons Clear

engagement.coupons.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Coupons Stats

engagement.coupons.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Coupons Upload

engagement.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Delete

engagement.delete.route.tour.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Delete

engagement.delivery.analytics

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Delivery Analytics

engagement.delivery.dashboard

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Delivery Dashboard

engagement.deployment.ab.promote

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Ab Promote

engagement.deployment.ab.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Ab Save

engagement.deployment.publish

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Publish

engagement.deployment.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Save

engagement.deployment.status

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Status

engagement.detail

Read. Scope: engagement.read, admin. Contract: route_inferred. Campaign Detail

engagement.digest.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Digest Save

engagement.feed.catalog

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Feed Catalog

engagement.feed.items

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Feed Items

engagement.geo.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Geo Preview

engagement.idle.cron.set

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Idle Cron Set

engagement.import.create

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Import Create

engagement.import.replay

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Import Replay

engagement.leads.export

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Leads Export

engagement.leads.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Leads List

engagement.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Announcements List

engagement.list.route.tours.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Tours List

engagement.module.set.ai.live

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Ai Live

engagement.module.set.custom.html

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Custom Html

engagement.module.set.enabled

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Enabled

engagement.module.status

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Module Status

engagement.onsite.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Onsite Preview

engagement.pause.all

Write. Scope: engagement.write, admin. Contract: declared_dynamic. Promo Pause All

engagement.presence

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Presence

engagement.preview.share

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Preview Share

engagement.push.draft

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Push Draft

engagement.recipients.issue

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Recipients Issue

engagement.recipients.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Recipients List

engagement.recipients.revoke

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Recipients Revoke

engagement.response.detail

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Response Detail

engagement.responses.browse

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Responses Browse

engagement.rule.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Delete

engagement.rule.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Save

engagement.rule.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Proactive Rule Stats

engagement.rule.test

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Rule Test

engagement.rule.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Toggle

engagement.rules.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Proactive Rules List

engagement.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Save

engagement.save.route.tour.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Save

engagement.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Stats

engagement.stats.route.tour.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Tour Stats

engagement.studio.a11y

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio A11y

engagement.studio.ai.generate

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Generate

engagement.studio.ai.insights

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Insights

engagement.studio.ai.target

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Target

engagement.studio.archive

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Archive

engagement.studio.assets

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Studio Assets

engagement.studio.create

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Create

engagement.studio.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Delete

engagement.studio.duplicate

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Duplicate

engagement.studio.event

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Studio Event

engagement.studio.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Get

engagement.studio.governance

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Governance

engagement.studio.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Studio List

engagement.studio.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Preview

engagement.studio.preview.link

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Preview Link

engagement.studio.publish

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Publish

engagement.studio.rename

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Rename

engagement.studio.revert

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Revert

engagement.studio.save.draft

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Save Draft

engagement.studio.save.targeting

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Save Targeting

engagement.studio.set.active

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Set Active

engagement.studio.set.status

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Set Status

engagement.studio.template.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Template Delete

engagement.studio.template.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Template Save

engagement.studio.tpl.preview

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Tpl Preview

engagement.studio.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Upload

engagement.studio.webhook

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Webhook

engagement.targeting.simulate

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Targeting Simulate

engagement.template.apply

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Template Apply

engagement.template.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Template List

engagement.template.save.custom

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Template Save Custom

engagement.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Toggle

engagement.toggle.route.tour.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Toggle

engagement.trigger.set.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Trigger Set Save

engagement.variant.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Delete

engagement.variant.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Variant List

engagement.variant.promote

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Promote

engagement.variant.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Save

engagement.version.compare

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Version Compare

engagement.version.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Version Get

engagement.version.label

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Version Label

engagement.webhook.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Delete

engagement.webhook.replay

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Replay

engagement.webhook.run

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Run

engagement.webhook.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Save

feedback (8)

feedback.analytics

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Analytics

feedback.detractors

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Detractors

feedback.get

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Get

feedback.ingest

Write. Scope: feedback.write, admin. Contract: explicit. Ingest a feedback record or external review

feedback.list

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback List

feedback.overview

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Overview

feedback.sources.list

Read. Scope: feedback.read, admin. Contract: explicit. List Voice of Customer feedback sources

feedback.update

Write. Scope: feedback.write, admin. Contract: source_inferred. Feedback Update Retry-safe with idempotency_key.

files (1)

files.get

Read. Scope: files.read, admin. Contract: source_inferred. Files Get

hr (48)

hr.agent.incident.close

Write. Scope: hr.write, admin. Contract: 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

Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Ids

knowledge.articles.list

Read. Scope: kb.read, admin. Contract: route_inferred. Help Articles List

knowledge.articles.set.public.all

Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Set Public All

knowledge.categories.ai.merge

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Categories Ai Merge

knowledge.categories.bulk.delete

Write. Scope: kb.write, admin. Contract: route_inferred. Help Categories Bulk Delete

knowledge.categories.list

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Categories List

knowledge.categories.merge.dupes

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Categories Merge Dupes

knowledge.category.delete

Write. Scope: kb.write, admin. Contract: route_inferred. Help Category Delete

knowledge.category.get

Read. Scope: kb.read, admin. Contract: route_inferred. Help Category Get

knowledge.category.save

Write. Scope: kb.write, admin. Contract: route_inferred. Help Category Save

knowledge.center.article.image.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Article Image Upload

knowledge.center.favicon.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Favicon Upload

knowledge.center.hero.dark.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Hero Dark Upload

knowledge.center.hero.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Hero Upload

knowledge.center.logo.dark.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Logo Dark Upload

knowledge.center.logo.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Logo Upload

knowledge.center.og.image.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Og Image Upload

knowledge.center.settings.get

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Center Settings Get

knowledge.center.settings.save

Write. Scope: kb.write, admin. Contract: route_inferred. Help Center Settings Save

knowledge.center.subhero.dark.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Subhero Dark Upload

knowledge.center.subhero.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Subhero Upload

knowledge.center.translate.estimate

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Translate Estimate

knowledge.center.translate.run

Write. Scope: kb.write, admin. Contract: route_inferred. Help Center Translate Run

knowledge.center.translate.status

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Center Translate Status

knowledge.center.translate.stop

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Translate Stop

knowledge.center.widget.hero.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Widget Hero Upload

knowledge.center.widget.icon.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Widget Icon Upload

knowledge.comments.deliver.notifications

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Comments Deliver Notifications

knowledge.comments.moderate

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Comments Moderate

knowledge.comments.moderation.list

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Comments Moderation List

knowledge.import.batches

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Batches

knowledge.import.connectors

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Import Connectors

knowledge.import.csv.preview

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Import Csv Preview

knowledge.import.preview

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Preview

knowledge.import.resync

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Resync

knowledge.import.run

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Run

knowledge.import.undo

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Undo

knowledge.insights.generate

Write. Scope: kb.write, admin. Contract: route_inferred. Help Insights Generate

knowledge.insights.get

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Insights Get

knowledge.mark.reviewed

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Mark Reviewed

knowledge.missed.dismiss

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Dismiss

knowledge.missed.draft.article

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Draft Article

knowledge.missed.list

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Missed List

knowledge.missed.mark.published

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Mark Published

knowledge.missed.refresh

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Missed Refresh

knowledge.organize.descriptions

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Organize Descriptions

knowledge.organize.status

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Organize Status

knowledge.organize.step

Write. Scope: kb.write, admin. Contract: route_inferred. Help Organize Step

knowledge.publish

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Publish

knowledge.reformat.revert

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Reformat Revert

knowledge.reformat.status

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Reformat Status

knowledge.reformat.step

Write. Scope: kb.write, admin. Contract: route_inferred. Help Reformat Step

knowledge.review.queue

Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Review Queue

knowledge.search.gaps

Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Search Gaps

knowledge.set.featured

Write. Scope: kb.write, admin. Contract: route_inferred. Help Set Featured

knowledge.set.visibility

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Set Visibility

knowledge.subdomain.allocate

Write. Scope: kb.write, admin. Contract: route_inferred. Help Subdomain Allocate

knowledge.subdomain.check

Read. Scope: kb.read, admin. Contract: route_inferred. Help Subdomain Check

knowledge.subdomain.release

Write. Scope: kb.write, admin. Contract: route_inferred. Help Subdomain Release

knowledge.taxonomy.organize

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Taxonomy Organize

knowledge.taxonomy.status

Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Taxonomy Status

knowledge.taxonomy.step

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Taxonomy Step

knowledge.widget.categories

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Widget Categories

knowledge.widget.publish

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Widget Publish

knowledge.widget.targets

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Widget Targets

leads (6)

leads.delete

Write. Scope: leads.write, crm.write, admin. Contract: 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

plataforma (924)

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.commerce.wallet.topup.refund

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Wallet Topup Refund

platform.commerce.wallet.topups.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Wallet Topups List

platform.complete.todo.item

Write. Scope: platform.write, admin. Contract: route_inferred. Complete Todo Item

platform.consent.log.list

Read. Scope: platform.read, admin. Contract: route_inferred. Consent Log List

platform.countries

Read. Scope: platform.read, admin. Contract: declared_dynamic. Countries

platform.country.detail

Read. Scope: platform.read, admin. Contract: route_inferred. Country Detail

platform.custom.code.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Approve

platform.custom.code.disable

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Disable

platform.custom.code.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Reject

platform.custom.code.rollback

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Rollback

platform.custom.code.status

Read. Scope: platform.read, admin. Contract: route_inferred. Custom Code Status

platform.delete.todo.item

Write. Scope: platform.write, admin. Contract: route_inferred. Delete Todo Item

platform.devices

Read. Scope: platform.read, admin. Contract: declared_dynamic. Devices

platform.diag.check.resolutions

Read. Scope: platform.read, admin. Contract: declared_dynamic. Diag Check Resolutions

platform.diag.dismiss

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Dismiss

platform.diag.event.taxonomy

Read. Scope: platform.read, admin. Contract: declared_dynamic. Diag Event Taxonomy

platform.diag.identity.restitch

Write. Scope: admin. Contract: declared_dynamic. Diag Identity Restitch

platform.diag.recheck

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Recheck

platform.diag.recheck.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Diag Recheck All

platform.diag.report

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Report

platform.diag.unmute

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Unmute

platform.dismiss.credit.alert

Write. Scope: admin. Contract: route_inferred. Dismiss Credit Alert

platform.domain.knowledge.ai.generate

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Ai Generate

platform.domain.knowledge.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Delete

platform.domain.knowledge.list

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge List

platform.domain.knowledge.save

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Save

platform.domain.knowledge.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Toggle

platform.domain.verify.add

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Add

platform.domain.verify.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Domain Verify List

platform.domain.verify.recheck

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Recheck

platform.domain.verify.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Remove

platform.dynamic.action.dispatch

Write. Scope: platform.write, admin. Contract: route_inferred. Dynamic Action Dispatch

platform.events.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Events Clear All

platform.events.list

Read. Scope: platform.read, admin. Contract: route_inferred. Events List

platform.experiment.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Experiment Delete

platform.experiment.results

Read. Scope: platform.read, admin. Contract: route_inferred. Experiment Results

platform.experiment.save

Write. Scope: platform.write, admin. Contract: route_inferred. Experiment Save

platform.experiments.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Experiments Clear All

platform.experiments.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Experiments List

platform.failed.logins.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins Clear All

platform.failed.logins.clear.history

Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins Clear History

platform.failed.logins.journey

Write. Scope: platform.write, admin. Contract: route_inferred. Failed Logins Journey

platform.failed.logins.list

Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins List

platform.failed.logins.unblock

Write. Scope: platform.write, admin. Contract: route_inferred. Failed Logins Unblock

platform.feedback.analysis.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Analysis Get

platform.feedback.analysis.run

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Analysis Run

platform.feedback.analytics.all

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics All

platform.feedback.analytics.detractors

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Detractors

platform.feedback.analytics.metrics

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Metrics

platform.feedback.analytics.overview

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Overview

platform.feedback.analytics.segments

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Segments

platform.feedback.analytics.sentiment

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Sentiment

platform.feedback.analytics.themes

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Themes

platform.feedback.analytics.trends

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Trends

platform.feedback.assignees.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Assignees List

platform.feedback.event.outbox.drain

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Event Outbox Drain

platform.feedback.exports.create

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Exports Create

platform.feedback.exports.get

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Exports Get

platform.feedback.external.review.ingest

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback External Review Ingest

platform.feedback.ingest.create

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Ingest Create

platform.feedback.items.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Assign

platform.feedback.items.evidence

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items Evidence

platform.feedback.items.follow.up.complete

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Follow Up Complete

platform.feedback.items.follow.up.set

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Follow Up Set Required fields: bool.

platform.feedback.items.get

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items Get

platform.feedback.items.list

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items List

platform.feedback.items.mark.read

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Mark Read

platform.feedback.items.notes.add

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Notes Add

platform.feedback.items.set.priority

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Set Priority

platform.feedback.items.set.status

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Set Status

platform.feedback.items.tags.add

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Tags Add

platform.feedback.items.tags.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Tags Remove

platform.feedback.list

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback List

platform.feedback.reconciliation

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reconciliation

platform.feedback.reports.delete

Write. Scope: platform.write, admin. Contract: declared_dynamic. Feedback Reports Delete

platform.feedback.reports.email

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports Email

platform.feedback.reports.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports Get

platform.feedback.reports.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports List

platform.feedback.satisfaction.advice.last

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Advice Last

platform.feedback.satisfaction.advise

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Advise

platform.feedback.satisfaction.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Overview

platform.feedback.sources.health

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Sources Health

platform.feedback.sources.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Sources List

platform.feedback.sources.rebuild

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Sources Rebuild

platform.feedback.sources.replay

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Sources Replay

platform.feedback.stats

Write. Scope: platform.write, admin. Contract: declared_dynamic. Feedback Stats

platform.fx.refresh.now

Write. Scope: platform.write, admin. Contract: declared_dynamic. Fx Refresh Now

platform.geoip.autodetect

Read. Scope: platform.read, admin. Contract: declared_dynamic. Geoip Autodetect

platform.get.admin.chat.history

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Admin Chat History

platform.get.ai.snapshot

Write. Scope: platform.write, admin. Contract: route_inferred. Get Ai Snapshot

platform.get.campaign.groups

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Campaign Groups

platform.get.client.chat.knowledge.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Get Client Chat Knowledge Overview

platform.get.kb.categories

Read. Scope: platform.read, admin. Contract: route_inferred. Get Kb Categories

platform.get.live.health.snapshot

Read. Scope: platform.read, admin. Contract: route_inferred. Get Live Health Snapshot

platform.get.pwa.chat.prefs

Write. Scope: platform.write, admin. Contract: declared_dynamic. Get Pwa Chat Prefs

platform.get.servers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Servers

platform.get.survey.config

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Survey Config

platform.get.ticket.options

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Ticket Options

platform.get.ticket.thread

Read. Scope: platform.read, admin. Contract: route_inferred. Get Ticket Thread

platform.get.todo.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Todo List

platform.get.widget.advanced

Read. Scope: platform.read, admin. Contract: route_inferred. Get Widget Advanced

platform.governance.summary

Read. Scope: platform.read, admin. Contract: route_inferred. Governance Summary

platform.groups.create

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Create

platform.groups.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Delete

platform.groups.list

Write. Scope: platform.write, admin. Contract: route_inferred. Groups List

platform.groups.rename

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Rename

platform.groups.set.primary

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Set Primary

platform.hc.preview.mint

Read. Scope: platform.read, admin. Contract: route_inferred. Hc Preview Mint

platform.hc.template.apply

Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Apply

platform.hc.template.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Delete

platform.hc.template.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Hc Template Preview

platform.hc.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Save

platform.hc.templates.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Templates List

platform.hc.translation.review.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Translation Review Get

platform.hc.translation.review.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Translation Review List

platform.hc.translation.review.revert

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hc Translation Review Revert

platform.hc.translation.review.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hc Translation Review Save

platform.heatmap

Read. Scope: platform.read, admin. Contract: route_inferred. Heatmap

platform.hr.access.grant.manual

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Grant Manual

platform.hr.access.policy.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Access Policy List

platform.hr.access.policy.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Policy Set

platform.hr.access.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Request

platform.hr.access.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Revoke

platform.hr.accommodation.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Accommodation List

platform.hr.accommodation.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Accommodation Resolve

platform.hr.agent.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Assign

platform.hr.agent.compensation.retry

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Compensation Retry

platform.hr.agent.compensation.sweep

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Agent Compensation Sweep

platform.hr.agent.compensations

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Agent Compensations

platform.hr.agent.incident.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Incident Close

platform.hr.agent.register

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Register

platform.hr.agent.step

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Step

platform.hr.agent.step.status

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Agent Step Status

platform.hr.agent.tool.auth

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Tool Auth

platform.hr.agent.tool.grant

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Tool Grant

platform.hr.agent.tools

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Agent Tools

platform.hr.ai.act.build

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Ai Act Build

platform.hr.ai.act.export

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Act Export

platform.hr.ai.act.fria.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Fria Record

platform.hr.ai.act.notice.publish

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Notice Publish

platform.hr.ai.act.overseer.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Overseer Assign

platform.hr.ai.act.overseer.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Overseer Revoke

platform.hr.ai.act.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Act Overview

platform.hr.ai.metering.export

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Ai Metering Export

platform.hr.ai.metering.overview

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Ai Metering Overview

platform.hr.ai.metering.settings.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Metering Settings Save

platform.hr.ai.status

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Status

platform.hr.analytics.ask

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Analytics Ask

platform.hr.analytics.snapshot

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Analytics Snapshot

platform.hr.app.move

Write. Scope: platform.write, admin. Contract: route_inferred. Hr App Move

platform.hr.appeal.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Appeal List

platform.hr.appeal.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Appeal Resolve

platform.hr.application.history

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Application History

platform.hr.application.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Application List

platform.hr.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Assign

platform.hr.auto.offer.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Auto Offer Run

platform.hr.autonomy.lane.demote

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Demote

platform.hr.autonomy.lane.install

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Autonomy Lane Install

platform.hr.autonomy.lane.promote

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Promote

platform.hr.autonomy.lane.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Autonomy Lane Review

platform.hr.autonomy.lane.shadow

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Shadow

platform.hr.autonomy.lanes

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Autonomy Lanes

platform.hr.autonomy.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Autonomy Overview

platform.hr.availability.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Availability Save

platform.hr.band.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Band Approve

platform.hr.band.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Band List

platform.hr.band.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Band Save

platform.hr.benchmarks.contribute.now

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Benchmarks Contribute Now

platform.hr.benchmarks.opt.in

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benchmarks Opt In

platform.hr.benchmarks.opt.out

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Benchmarks Opt Out

platform.hr.benchmarks.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Benchmarks Overview

platform.hr.benefit.enroll

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benefit Enroll

platform.hr.benefit.plan.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benefit Plan Save

platform.hr.bias.audit.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Bias Audit List

platform.hr.bias.audit.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Bias Audit Run

platform.hr.booking.link.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Booking Link Save

platform.hr.booking.slots.reconcile

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Booking Slots Reconcile

platform.hr.breaker.reset

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Breaker Reset

platform.hr.broadcast.audience.options

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Broadcast Audience Options

platform.hr.broadcast.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Broadcast List

platform.hr.broadcast.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Broadcast Preview

platform.hr.broadcast.send

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Broadcast Send

platform.hr.budget.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Budget Set

platform.hr.calibration.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Close

platform.hr.calibration.move

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Move

platform.hr.calibration.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Open

platform.hr.capabilities.get

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Capabilities Get

platform.hr.capability.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Capability Set

platform.hr.capability.trail

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Capability Trail

platform.hr.cards.refresh

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Cards Refresh

platform.hr.case.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Assign

platform.hr.case.attachment.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Attachment Add

platform.hr.case.attachment.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Attachment List

platform.hr.case.categories

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Case Categories

platform.hr.case.event.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Event Add

platform.hr.case.get

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Get

platform.hr.case.grant.access

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Grant Access

platform.hr.case.intake.mailbox

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Intake Mailbox

platform.hr.case.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Case List

platform.hr.case.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Open

platform.hr.case.route

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Route

platform.hr.case.thread

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Thread

platform.hr.case.tighten

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Tighten

platform.hr.certification.define

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Certification Define

platform.hr.certification.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Certification List

platform.hr.certification.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Certification Record

platform.hr.certification.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Certification State

platform.hr.certification.types

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Certification Types

platform.hr.check.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Check List

platform.hr.check.manual.result

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Manual Result

platform.hr.check.order

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Order

platform.hr.check.requery

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Requery

platform.hr.check.void

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Void

platform.hr.checkin.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Checkin Record

platform.hr.coach.feedback

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Coach Feedback

platform.hr.coach.me

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Coach Me

platform.hr.coach.receive

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Coach Receive

platform.hr.comp.change.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Comp Change Approve

platform.hr.comp.change.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Comp Change Request

platform.hr.compliance.build

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Compliance Build

platform.hr.compliance.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Compliance List

platform.hr.connector.cert.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Cert Revoke

platform.hr.connector.cert.submissions

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Connector Cert Submissions

platform.hr.connector.cert.submit

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Cert Submit

platform.hr.connector.certify

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Certify

platform.hr.connector.health

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Connector Health

platform.hr.connector.options

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Connector Options

platform.hr.connector.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Revoke

platform.hr.contract.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Contract List

platform.hr.copilot.apply

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Copilot Apply

platform.hr.copilot.plan

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Copilot Plan

platform.hr.copilot.recipes

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Copilot Recipes

platform.hr.copilot.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Copilot Reject

platform.hr.correction.dataset.build

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Correction Dataset Build

platform.hr.correction.datasets

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Correction Datasets

platform.hr.correction.privacy.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Correction Privacy Review

platform.hr.course.enroll

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Enroll

platform.hr.course.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Save

platform.hr.course.skills.tag

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Skills Tag

platform.hr.decision.appeal.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal Assign

platform.hr.decision.appeal.file

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal File

platform.hr.decision.appeal.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal Resolve

platform.hr.decision.appeals.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Decision Appeals List

platform.hr.decision.explanation

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Decision Explanation

platform.hr.decisions.recent

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Decisions Recent

platform.hr.directory.visibility.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Directory Visibility Get

platform.hr.directory.visibility.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Directory Visibility Set

platform.hr.discipline.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Discipline Decide

platform.hr.discipline.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Discipline Propose

platform.hr.document.access.log

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Document Access Log

platform.hr.document.deletion.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Deletion Request

platform.hr.document.hold

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Hold

platform.hr.document.intake

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Intake

platform.hr.document.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Document List

platform.hr.document.requirement.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Requirement Add

platform.hr.document.requirement.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Requirement Remove

platform.hr.document.review.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Review Approve

platform.hr.document.reviews

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Document Reviews

platform.hr.dsr.list

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Dsr List

platform.hr.dsr.transition

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Dsr Transition

platform.hr.email.intake.log

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Email Intake Log

platform.hr.employee.access.events

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Employee Access Events

platform.hr.employee.provision

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Provision

platform.hr.employee.restore

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Restore

platform.hr.employee.suspend

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Suspend

platform.hr.employment.activate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employment Activate

platform.hr.employment.end

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employment End

platform.hr.enterprise.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Enterprise Approve

platform.hr.equipment.delivered

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Delivered

platform.hr.equipment.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Request

platform.hr.equipment.returned

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Returned

platform.hr.escrow.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Escrow Resolve

platform.hr.evidence.a11y.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence A11y Record

platform.hr.evidence.attest

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Attest

platform.hr.evidence.dr.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Dr Record

platform.hr.evidence.ledgers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Evidence Ledgers

platform.hr.evidence.load.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Load Record

platform.hr.evidence.owner.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Owner Assign

platform.hr.expense.confirm

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Confirm

platform.hr.expense.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Decide

platform.hr.expense.handoff

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Handoff

platform.hr.expense.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Expense Overview

platform.hr.expense.policy.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Policy Save

platform.hr.experience.metrics

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Experience Metrics

platform.hr.expiry.run

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Expiry Run

platform.hr.fairness.cohort.define

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Fairness Cohort Define

platform.hr.fairness.cohorts

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Fairness Cohorts

platform.hr.fairness.evaluate

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Fairness Evaluate

platform.hr.faq.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Delete

platform.hr.faq.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Draft

platform.hr.faq.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Faq List

platform.hr.faq.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Save

platform.hr.faq.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq State

platform.hr.feedback.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Feedback List

platform.hr.feedback.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Feedback Record

platform.hr.flag.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Flag Set

platform.hr.flags.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Flags Get

platform.hr.frontline.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Frontline Overview

platform.hr.gig.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Gig Decide

platform.hr.gig.post

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Gig Post

platform.hr.global.readiness

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Global Readiness

platform.hr.goal.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Create

platform.hr.goal.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Draft

platform.hr.goal.update

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Update

platform.hr.grievance.file

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Grievance File

platform.hr.grievance.outcome

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Grievance Outcome

platform.hr.headcount.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Headcount Approve

platform.hr.headcount.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Headcount Draft

platform.hr.headcount.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Headcount List

platform.hr.hire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Hire

platform.hr.hiring.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Hiring Decide

platform.hr.holiday.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Holiday Save

platform.hr.identity.admin.options

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity Admin Options

platform.hr.identity.conflict.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Conflict Resolve

platform.hr.identity.coverage.plan

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity Coverage Plan

platform.hr.identity.facets

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Identity Facets

platform.hr.identity.history

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity History

platform.hr.identity.link

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Link

platform.hr.identity.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Revoke

platform.hr.identity.verification.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Verification Record

platform.hr.incident.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Incident List

platform.hr.incident.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Incident Open

platform.hr.incident.step

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Incident Step

platform.hr.interview.recording.start

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Recording Start

platform.hr.interview.recording.upload

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Recording Upload

platform.hr.interview.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Review

platform.hr.interview.room.answer

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Answer

platform.hr.interview.room.ask

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Ask

platform.hr.interview.room.connect

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Connect

platform.hr.interview.room.consent

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Consent

platform.hr.interview.room.end

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room End

platform.hr.interview.room.leave

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Leave

platform.hr.interview.room.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Interview Room List

platform.hr.interview.room.observe

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Observe

platform.hr.interview.room.pause

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Pause

platform.hr.interview.room.provision

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Provision

platform.hr.interview.room.reconnect

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Reconnect

platform.hr.interview.room.resume

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Resume

platform.hr.interview.room.state

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room State

platform.hr.interview.room.takeover

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Takeover

platform.hr.interview.schedule

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Schedule

platform.hr.interview.transcript.correct

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Transcript Correct

platform.hr.investigation.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Close

platform.hr.investigation.finding

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Finding

platform.hr.investigation.hold

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Hold

platform.hr.investigation.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Open

platform.hr.investigation.triage

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Investigation Triage

platform.hr.iplan.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iplan Approve

platform.hr.iplan.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iplan Create

platform.hr.iplan.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Iplan List

platform.hr.iscore.human

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iscore Human

platform.hr.iscore.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iscore Run

platform.hr.isession.attach.meeting

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Attach Meeting

platform.hr.isession.control

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Control

platform.hr.isession.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Isession List

platform.hr.isession.liveness

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Isession Liveness

platform.hr.isession.schedule

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Schedule

platform.hr.job.arch.analyse

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Job Arch Analyse

platform.hr.job.arch.apply

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Apply

platform.hr.job.arch.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Approve

platform.hr.job.arch.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Job Arch Overview

platform.hr.job.arch.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Propose

platform.hr.job.arch.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Reject

platform.hr.job.family.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Family Save

platform.hr.job.level.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Level Save

platform.hr.job.profile.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Profile Save

platform.hr.job.version.draft.ai

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Draft Ai

platform.hr.job.version.publish

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Publish

platform.hr.job.version.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Save

platform.hr.job.versions

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Job Versions

platform.hr.jurisdiction.capabilities

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Capabilities

platform.hr.jurisdiction.case.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Case Run

platform.hr.jurisdiction.case.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Case Save

platform.hr.jurisdiction.change.assess

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Assess

platform.hr.jurisdiction.change.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Close

platform.hr.jurisdiction.change.raise

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Raise

platform.hr.jurisdiction.coverage

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Jurisdiction Coverage

platform.hr.jurisdiction.explain

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Explain

platform.hr.jurisdiction.overlay.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Overlay List

platform.hr.jurisdiction.overlay.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Overlay Save

platform.hr.jurisdiction.pack.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Draft

platform.hr.jurisdiction.pack.release

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Release

platform.hr.jurisdiction.pack.withdraw

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Withdraw

platform.hr.jurisdiction.release.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Jurisdiction Release List

platform.hr.jurisdiction.rule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Rule Save

platform.hr.jurisdiction.source.declare

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Source Declare

platform.hr.jurisdiction.transfer.declare

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Transfer Declare

platform.hr.kill.flip

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kill Flip

platform.hr.kill.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kill Toggle

platform.hr.kiosk.register

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kiosk Register

platform.hr.kiosk.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kiosk Revoke

platform.hr.knowledge.pack.install

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Knowledge Pack Install

platform.hr.knowledge.pack.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Knowledge Pack Remove

platform.hr.knowledge.packs

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Knowledge Packs

platform.hr.leadership.score

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Leadership Score

platform.hr.learning.assign.mandatory

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Learning Assign Mandatory

platform.hr.learning.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Learning Overview

platform.hr.leave.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Decide

platform.hr.leave.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Leave Overview

platform.hr.leave.policy.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Policy Save

platform.hr.leave.type.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Type Save

platform.hr.letter.issue

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Letter Issue

platform.hr.letter.kinds

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Letter Kinds

platform.hr.letter.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Letter Preview

platform.hr.listening.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Close

platform.hr.listening.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Listening Overview

platform.hr.listening.run.due

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Listening Run Due

platform.hr.listening.schedule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Schedule Save

platform.hr.listening.schedule.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Schedule State

platform.hr.loop.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Approve

platform.hr.loop.correct

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Correct

platform.hr.loop.evaluate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Evaluate

platform.hr.loop.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Loop Overview

platform.hr.loop.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Propose

platform.hr.loop.release

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Release

platform.hr.loop.rollback

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Rollback

platform.hr.loop.snapshot

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Snapshot

platform.hr.marketplace.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Marketplace Overview

platform.hr.meeting.book

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Book

platform.hr.meeting.cancel

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Cancel

platform.hr.meeting.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Propose

platform.hr.meeting.reschedule

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Reschedule

platform.hr.meetings.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Meetings Overview

platform.hr.meetings.reconcile

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Meetings Reconcile

platform.hr.mentor.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Mentor Propose

platform.hr.module.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Module Toggle

platform.hr.new.hire.checkin.state

Read. Scope: platform.read, admin. Contract: route_inferred. Hr New Hire Checkin State

platform.hr.offer.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Approve

platform.hr.offer.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Draft

platform.hr.offer.esign.confirm

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Esign Confirm

platform.hr.offer.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Offer List

platform.hr.offer.send

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Send

platform.hr.offer.withdraw

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Withdraw

platform.hr.onboarding.checkins.book

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Onboarding Checkins Book

platform.hr.onboarding.draft.tasks

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Draft Tasks

platform.hr.onboarding.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Onboarding Overview

platform.hr.onboarding.plan.buddy

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Buddy

platform.hr.onboarding.plan.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Close

platform.hr.onboarding.plan.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Create

platform.hr.onboarding.task.block

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Block

platform.hr.onboarding.task.done

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Done

platform.hr.onboarding.task.skip

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Onboarding Task Skip

platform.hr.onboarding.task.unblock

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Unblock

platform.hr.onboarding.task.verify

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Verify

platform.hr.onboarding.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Template Save

platform.hr.one.on.one.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr One On One List

platform.hr.one.on.one.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr One On One Record

platform.hr.opportunity.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Opportunity Decide

platform.hr.opportunity.post

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Opportunity Post

platform.hr.org.chart

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Chart

platform.hr.org.legal.entities

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Legal Entities

platform.hr.org.legal.entity.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Legal Entity Create

platform.hr.org.location.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Location Create

platform.hr.org.locations

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Locations

platform.hr.org.map.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Org Map Overview

platform.hr.org.map.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Map Remove

platform.hr.org.map.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Map Save

platform.hr.org.tree

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Tree

platform.hr.org.unit.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Unit Create

platform.hr.org.unit.move

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Org Unit Move

platform.hr.override.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Override Record

platform.hr.overtime.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Overtime Decide

platform.hr.path.enroll

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Path Enroll

platform.hr.path.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Path Save

platform.hr.pay.equity.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Pay Equity Overview

platform.hr.pay.gap.evaluate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pay Gap Evaluate

platform.hr.payroll.import

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payroll Import

platform.hr.payroll.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Payroll Overview

platform.hr.payroll.provider.exceptions

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Payroll Provider Exceptions

platform.hr.payroll.reconcile

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payroll Reconcile

platform.hr.payslips.issue

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payslips Issue

platform.hr.people.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr People List

platform.hr.perf.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Perf Overview

platform.hr.person.create

Write. Scope: platform.write, admin. Contract: route_inferred. 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

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Reports To

platform.hr.position.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position State

platform.hr.position.vacate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Vacate

platform.hr.posting.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Close

platform.hr.posting.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Create

platform.hr.posting.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Posting List

platform.hr.posting.publish

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Publish

platform.hr.probation.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Probation Open

platform.hr.probation.review

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Probation Review

platform.hr.profile.address.format

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Profile Address Format

platform.hr.profile.address.write

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Address Write

platform.hr.profile.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Decide

platform.hr.profile.ownership.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Profile Ownership Get

platform.hr.profile.ownership.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Ownership Set

platform.hr.profile.pending

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Profile Pending

platform.hr.profile.photo.clear

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Photo Clear

platform.hr.profile.photo.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Photo Set

platform.hr.profile.reveal

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Reveal

platform.hr.profile.section.end

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Section End

platform.hr.profile.section.write

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Section Write

platform.hr.profile.sections

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Profile Sections

platform.hr.pulse.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Close

platform.hr.pulse.issue

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Issue

platform.hr.pulse.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Pulse List

platform.hr.pulse.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Open

platform.hr.pulse.results

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Pulse Results

platform.hr.quality.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Quality Overview

platform.hr.quality.sample.draw

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Quality Sample Draw

platform.hr.quality.samples

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Quality Samples

platform.hr.quality.verdict

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Quality Verdict

platform.hr.queue.agent.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Agent Add

platform.hr.queue.agent.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Agent Remove

platform.hr.queue.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Save

platform.hr.readiness.report

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Readiness Report

platform.hr.recognise

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Recognise

platform.hr.relations.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Relations Overview

platform.hr.release.gates

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Release Gates

platform.hr.release.verify

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Release Verify

platform.hr.req.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Create

platform.hr.req.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Req List

platform.hr.req.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Reject

platform.hr.req.transition

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Transition

platform.hr.review.cycle.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Cycle Open

platform.hr.review.include

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Include

platform.hr.review.respond

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Respond

platform.hr.review.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Template Save

platform.hr.rubric.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Rubric Approve

platform.hr.rubric.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Rubric Create

platform.hr.rubric.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Rubric List

platform.hr.run.replay

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Replay

platform.hr.run.start

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Start

platform.hr.run.step

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Step

platform.hr.run.takeover

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Takeover

platform.hr.scenario.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Scenario Run

platform.hr.schedule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Schedule Save

platform.hr.screening.correct

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Correct

platform.hr.screening.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Screening List

platform.hr.screening.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Screening Review

platform.hr.screening.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Run

platform.hr.screening.verify

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Verify

platform.hr.security.assurance.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Security Assurance Record

platform.hr.service.item.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Service Item Save

platform.hr.servicedesk.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Servicedesk Overview

platform.hr.shadow.compare

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shadow Compare

platform.hr.shift.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shift Add

platform.hr.shift.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shift Assign

platform.hr.signature.cancel

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Signature Cancel

platform.hr.signature.confirm

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Signature Confirm

platform.hr.signature.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Signature List

platform.hr.signature.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Signature Request

platform.hr.signin.design.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Signin Design Get

platform.hr.signin.design.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Signin Design Save

platform.hr.skill.challenge.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Skill Challenge Resolve

platform.hr.skills.infer.sweep

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Skills Infer Sweep

platform.hr.skills.infer.text

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Skills Infer Text

platform.hr.skills.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Skills Overview

platform.hr.skills.taxonomy.adopt

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Skills Taxonomy Adopt

platform.hr.status

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Status

platform.hr.succession.nominate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Succession Nominate

platform.hr.succession.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Succession Open

platform.hr.succession.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Succession Overview

platform.hr.swap.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Swap Approve

platform.hr.swap.decline

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Swap Decline

platform.hr.sync.conflict.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Sync Conflict Resolve

platform.hr.talent.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Talent Overview

platform.hr.thread.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Delete

platform.hr.thread.dm

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Dm

platform.hr.thread.legal.hold

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Legal Hold

platform.hr.thread.outreach

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Outreach

platform.hr.thread.post

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Post

platform.hr.thread.read

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Thread Read

platform.hr.thread.retention

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Retention

platform.hr.thread.search

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Thread Search

platform.hr.threads.inbox

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Threads Inbox

platform.hr.threads.retention.sweep

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Threads Retention Sweep

platform.hr.time.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Time Decide

platform.hr.time.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Time Overview

platform.hr.title.history

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Title History

platform.hr.title.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Title Record

platform.hr.training.requirement.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Training Requirement Save

platform.hr.truth.register

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Truth Register

platform.hr.turnover.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Turnover Run

platform.hr.verifier.verdict

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Verifier Verdict

platform.hr.wb.grant

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Grant

platform.hr.wb.identity

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Identity

platform.hr.wb.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Wb List

platform.hr.wb.read

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Read

platform.hr.wb.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb State

platform.hr.workforce.dashboard

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Workforce Dashboard

platform.inbound.activity.feed

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Activity Feed

platform.inbound.endpoints.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Delete

platform.inbound.endpoints.list

Write. Scope: admin. Contract: route_inferred. Inbound Endpoints List

platform.inbound.endpoints.save

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Save

platform.inbound.endpoints.test

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Test

platform.interrupted

Read. Scope: platform.read, admin. Contract: declared_dynamic. Interrupted

platform.ip.classify

Read. Scope: platform.read, admin. Contract: route_inferred. Ip Classify

platform.js.errors.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Js Errors Clear All

platform.js.errors.list

Read. Scope: platform.read, admin. Contract: route_inferred. Js Errors List

platform.js.issue.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Js Issue Assign

platform.js.issue.update

Write. Scope: platform.write, admin. Contract: route_inferred. Js Issue Update

platform.js.sourcemap.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Js Sourcemap Delete

platform.js.sourcemap.upload

Write. Scope: platform.write, admin. Contract: route_inferred. Js Sourcemap Upload

platform.js.sourcemaps.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Js Sourcemaps List

platform.leads

Read. Scope: platform.read, admin. Contract: route_inferred. Leads

platform.license.delete

Write. Scope: admin. Contract: declared_dynamic. License Delete

platform.license.diagnostics

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Diagnostics

platform.license.force.check

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Force Check

platform.license.preflight

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Preflight

platform.license.save

Write. Scope: admin. Contract: route_inferred. License Save

platform.license.status

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Status

platform.license.verify.now

Write. Scope: platform.write, admin. Contract: declared_dynamic. License Verify Now

platform.lifecycle.evaluate

Read. Scope: platform.read, admin. Contract: route_inferred. Lifecycle Evaluate

platform.lifecycle.rule.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Lifecycle Rule Delete

platform.lifecycle.rule.list

Read. Scope: platform.read, admin. Contract: route_inferred. Lifecycle Rule List

platform.lifecycle.rule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Lifecycle Rule Save

platform.list.assignable.sites

Read. Scope: platform.read, admin. Contract: declared_dynamic. List Assignable Sites

platform.list.network.issues

Read. Scope: platform.read, admin. Contract: declared_dynamic. List Network Issues

platform.lookup.client.full

Read. Scope: platform.read, admin. Contract: route_inferred. Lookup Client Full

platform.mark.feedback.read

Write. Scope: platform.write, admin. Contract: route_inferred. Mark Feedback Read

platform.marketplace.local.install

Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Local Install

platform.marketplace.local.uninstall

Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Local Uninstall

platform.marketplace.session.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Marketplace Session Get

platform.marketplace.session.set

Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Session Set

platform.media.ready

Read. Scope: platform.read, admin. Contract: route_inferred. Media Ready

platform.message.contact.locale

Write. Scope: platform.write, admin. Contract: route_inferred. Message Contact Locale

platform.message.outbound.convert

Write. Scope: platform.write, admin. Contract: route_inferred. Message Outbound Convert

platform.message.translate

Write. Scope: platform.write, admin. Contract: route_inferred. Message Translate

platform.message.translation.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Message Translation Delete

platform.message.translation.save

Write. Scope: platform.write, admin. Contract: route_inferred. Message Translation Save

platform.meta.channels.disconnect

Write. Scope: platform.write, admin. Contract: declared_dynamic. Meta Channels Disconnect

platform.meta.channels.switch.page

Write. Scope: platform.write, admin. Contract: route_inferred. Meta Channels Switch Page

platform.observe

Read. Scope: platform.read, admin. Contract: declared_dynamic. Observe

platform.onboarding.action

Read. Scope: platform.read, admin. Contract: declared_dynamic. Onboarding Action

platform.onboarding.readiness

Read. Scope: platform.read, admin. Contract: declared_dynamic. Onboarding Readiness

platform.open.network.issue

Read. Scope: platform.read, admin. Contract: declared_dynamic. Open Network Issue

platform.open.ticket

Read. Scope: platform.read, admin. Contract: route_inferred. Open Ticket

platform.operator.text.translate

Write. Scope: platform.write, admin. Contract: route_inferred. Operator Text Translate

platform.opsiq.backup.export

Read. Scope: platform.read, admin. Contract: declared_dynamic. Download a full backup in one request (retired)

platform.opsiq.backup.import

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Import

platform.opsiq.backup.import.start

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Import Start

platform.opsiq.backup.job.start

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Job Start

platform.opsiq.backup.job.status

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Job Status

platform.outreach.campaign.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Delete

platform.outreach.campaign.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Campaign List

platform.outreach.campaign.save

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Save

platform.outreach.campaign.send

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Send

platform.outreach.compose.send

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Compose Send

platform.outreach.draft.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Draft Delete

platform.outreach.draft.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Draft List

platform.outreach.draft.save

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Draft Save

platform.outreach.messages.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Messages Delete

platform.outreach.replies.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Replies List

platform.outreach.reply.ai

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Ai

platform.outreach.reply.mark

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Mark

platform.outreach.reply.pref

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Pref

platform.outreach.reply.send

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Send

platform.outreach.reply.thread

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Thread

platform.outreach.send.detail

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Send Detail

platform.outreach.send.retry

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Send Retry

platform.outreach.sends.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Sends List

platform.outreach.template.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Template Delete

platform.outreach.template.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Template List

platform.outreach.template.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Template Preview

platform.outreach.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Template Save

platform.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Overview

platform.overview.hub.view

Read. Scope: platform.read, admin. Contract: route_inferred. Overview Hub View

platform.overview.intelligence.graph

Read. Scope: platform.read, admin. Contract: declared_dynamic. Overview Intelligence Graph

platform.pages

Read. Scope: platform.read, admin. Contract: route_inferred. Pages

platform.paths.data

Read. Scope: platform.read, admin. Contract: route_inferred. Paths Data

platform.pause

Read. Scope: platform.read, admin. Contract: declared_dynamic. Pause

platform.profile.change.password

Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Change Password

platform.profile.get

Read. Scope: platform.read, admin. Contract: route_inferred. Profile Get

platform.profile.reward.claim

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Reward Claim

platform.profile.reward.claim.cancel

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Reward Claim Cancel

platform.profile.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Save

platform.profile.session.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Session Revoke

platform.profile.sessions.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Profile Sessions List

platform.profile.sessions.revoke.others

Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Sessions Revoke Others

platform.profile.team.dispute.file

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Team Dispute File

platform.purge

Write. Scope: admin. Contract: route_inferred. Purge

platform.purge.all

Write. Scope: admin. Contract: route_inferred. Purge All

platform.realtime

Read. Scope: platform.read, admin. Contract: route_inferred. Realtime

platform.realtime.test

Write. Scope: platform.write, admin. Contract: route_inferred. Realtime Test

platform.resume

Read. Scope: platform.read, admin. Contract: declared_dynamic. Resume

platform.retention.data

Read. Scope: platform.read, admin. Contract: route_inferred. Retention Data

platform.routes.list

Read. Scope: admin. Contract: source_inferred. List every registered OpsIQ operation

platform.routes.read

Read. Scope: admin. Contract: explicit. Execute a registered read operation Required fields: route.

platform.routes.write

Write. Scope: admin. Contract: explicit. Execute a registered write operation Required fields: route, idempotency_key. Retry-safe with idempotency_key.

platform.run.ai.analysis

Write. Scope: platform.write, admin. Contract: route_inferred. Run Ai Analysis

platform.save.admin.chat.history

Write. Scope: platform.write, admin. Contract: route_inferred. Save Admin Chat History

platform.save.pwa.chat.prefs

Write. Scope: platform.write, admin. Contract: declared_dynamic. Save Pwa Chat Prefs

platform.save.survey.config

Write. Scope: platform.write, admin. Contract: route_inferred. Save Survey Config

platform.save.widget.advanced

Write. Scope: platform.write, admin. Contract: declared_dynamic. Save Widget Advanced

platform.scim.token.issue

Read. Scope: platform.read, admin. Contract: route_inferred. Scim Token Issue

platform.scim.token.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Scim Token List

platform.scim.token.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Scim Token Revoke

platform.segment.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Delete

platform.segment.list

Read. Scope: platform.read, admin. Contract: route_inferred. Segment List

platform.segment.members

Read. Scope: platform.read, admin. Contract: route_inferred. Segment Members

platform.segment.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Segment Preview

platform.segment.save

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Save

platform.segment.suggestion.accept

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Suggestion Accept

platform.segment.suggestion.dismiss

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Suggestion Dismiss

platform.segment.suggestion.list

Read. Scope: platform.read, admin. Contract: route_inferred. Segment Suggestion List

platform.send.campaign

Write. Scope: platform.write, admin. Contract: route_inferred. Send Campaign

platform.send.client.email

Write. Scope: platform.write, admin. Contract: route_inferred. Send Client Email

platform.send.ticket.reply

Write. Scope: platform.write, admin. Contract: route_inferred. Send Ticket Reply

platform.service.studio.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Service Studio Get

platform.set.active.site

Write. Scope: platform.write, admin. Contract: route_inferred. Set Active Site

platform.silence

Read. Scope: platform.read, admin. Contract: declared_dynamic. Silence

platform.site.set.group

Write. Scope: platform.write, admin. Contract: route_inferred. Site Set Group

platform.sites.add

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Add

platform.sites.edit

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Edit

platform.sites.list

Write. Scope: platform.write, admin. Contract: route_inferred. Sites List

platform.sites.picker

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Picker

platform.sites.regenerate.secret

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Regenerate Secret

platform.sites.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Remove

platform.stats

Read. Scope: platform.read, admin. Contract: declared_dynamic. Stats

platform.stepup.verify

Write. Scope: platform.write, admin. Contract: declared_dynamic. Stepup Verify

platform.submit.agent.ai.feedback

Write. Scope: platform.write, admin. Contract: route_inferred. Submit Agent Ai Feedback

platform.submit.triage.feedback

Write. Scope: platform.write, admin. Contract: route_inferred. Submit Triage Feedback

platform.takeover

Read. Scope: platform.read, admin. Contract: declared_dynamic. Takeover

platform.terminate

Read. Scope: platform.read, admin. Contract: route_inferred. Terminate

platform.test.geoip

Read. Scope: platform.read, admin. Contract: route_inferred. Test Geoip

platform.top.pages

Read. Scope: platform.read, admin. Contract: route_inferred. Top Pages

platform.train.client.chat.knowledge

Write. Scope: platform.write, admin. Contract: route_inferred. Train Client Chat Knowledge

platform.triggers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Triggers

platform.trust.evidence.report

Write. Scope: platform.write, admin. Contract: declared_dynamic. Trust Evidence Report

platform.turn.pool.add

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Add

platform.turn.pool.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Turn Pool List

platform.turn.pool.pick.test

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Pick Test

platform.turn.pool.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Remove

platform.turn.pool.update

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Update

platform.update.lead.status

Write. Scope: platform.write, admin. Contract: route_inferred. Update Lead Status

platform.wa.embedded.signup.exchange

Write. Scope: platform.write, admin. Contract: route_inferred. Wa Embedded Signup Exchange

platform.warehouse.export.run

Read. Scope: platform.read, admin. Contract: declared_dynamic. Warehouse Export Run

platform.warehouse.exports.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Warehouse Exports List

platform.webhook.deliveries.list

Read. Scope: platform.read, admin. Contract: route_inferred. Webhook Deliveries List

platform.webhook.endpoint.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Delete

platform.webhook.endpoint.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Webhook Endpoint List

platform.webhook.endpoint.save

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Save

platform.webhook.endpoint.test

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Test

platform.webhook.redeliver

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Redeliver

platform.weekly.digest.view

Read. Scope: platform.read, admin. Contract: route_inferred. Weekly Digest View

platform.whmcs.op.dispatch

Read. Scope: platform.read, admin. Contract: declared_dynamic. Whmcs Op Dispatch

platform.workspace.custom.domain.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Workspace Custom Domain Remove

platform.workspace.custom.domain.set

Write. Scope: platform.write, admin. Contract: route_inferred. Workspace Custom Domain Set

platform.writing.json.knowledge.clear

Write. Scope: platform.write, admin. Contract: declared_dynamic. Writing Json Knowledge Clear

platform.writing.json.knowledge.count

Read. Scope: platform.read, admin. Contract: declared_dynamic. Writing Json Knowledge Count

platform.writing.json.knowledge.import

Write. Scope: platform.write, admin. Contract: route_inferred. Writing Json Knowledge Import

portal_studio (169)

portal_studio.accessibility.evidence.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Accessibility Evidence Save

portal_studio.add

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain Add

portal_studio.allocate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Subdomain Allocate

portal_studio.analytics.breakdown

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Analytics Breakdown

portal_studio.analytics.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Analytics Load

portal_studio.apply.kit

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Apply Kit

portal_studio.apply.theme

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Apply Theme

portal_studio.approval

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Approval

portal_studio.approve

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Approve

portal_studio.ask

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Ask

portal_studio.audience.delete

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Audience Delete

portal_studio.audience.explain

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience Explain

portal_studio.audience.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience List

portal_studio.audience.preview

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience Preview

portal_studio.audience.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Audience Save

portal_studio.brand.generate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Brand Generate

portal_studio.brand.import

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Brand Import

portal_studio.cancel.schedule

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Design Cancel Schedule

portal_studio.certify

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Certify

portal_studio.check

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Host Check

portal_studio.check.route.portal.subdomain.check

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Subdomain Check

portal_studio.comment.add

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Comment Add

portal_studio.comment.resolve

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Comment Resolve

portal_studio.component.package.inspect

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Component Package Inspect

portal_studio.component.package.install

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Component Package Install

portal_studio.component.validate

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Component Validate

portal_studio.config

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Handoff Config

portal_studio.data.resolve

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Data Resolve

portal_studio.delete.theme

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Delete Theme

portal_studio.developer.contract

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Developer Contract

portal_studio.discovery.preview

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Discovery Preview

portal_studio.discovery.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Discovery Save

portal_studio.document.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Load

portal_studio.document.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Save

portal_studio.experiment.control

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Experiment Control

portal_studio.experiment.results

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Experiment Results

portal_studio.experiment.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Experiment Save

portal_studio.experiments.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Experiments List

portal_studio.form.archive

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Form Archive

portal_studio.form.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Form Catalog

portal_studio.form.create

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Create

portal_studio.form.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Delete

portal_studio.form.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Duplicate

portal_studio.form.evaluate

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Form Evaluate

portal_studio.form.group.apply

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Apply

portal_studio.form.group.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Delete

portal_studio.form.group.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Save

portal_studio.form.publish

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Publish

portal_studio.form.restore

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Form Restore

portal_studio.form.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Save

portal_studio.form.template

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Template

portal_studio.form.test

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Form Test

portal_studio.form.version.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Version Restore

portal_studio.history

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design History

portal_studio.identity.discover

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Identity Discover

portal_studio.identity.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Identity Load

portal_studio.identity.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Identity Save

portal_studio.integration.activate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Activate

portal_studio.integration.install

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Install

portal_studio.integration.kill.switch

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Kill Switch

portal_studio.integration.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Integration List

portal_studio.integration.policy

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Integration Policy

portal_studio.integration.policy.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Integration Policy Save

portal_studio.integration.preflight

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Preflight

portal_studio.integration.revise

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Revise

portal_studio.integration.rollback

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Rollback

portal_studio.integration.transition

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Transition

portal_studio.journey.archive

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Archive

portal_studio.journey.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Journey Catalog

portal_studio.journey.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Delete

portal_studio.journey.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Duplicate

portal_studio.journey.evaluate

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Journey Evaluate

portal_studio.journey.instantiate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Instantiate

portal_studio.journey.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Restore

portal_studio.journey.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Save

portal_studio.kb.category.delete

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Category Delete

portal_studio.kb.category.reorder

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Category Reorder

portal_studio.kb.category.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Kb Category Save

portal_studio.kb.governance

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Governance

portal_studio.kb.governance.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Kb Governance Save

portal_studio.kb.languages

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Languages

portal_studio.kb.languages.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Languages Save

portal_studio.kb.parity

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Parity

portal_studio.kb.search.tuning

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Search Tuning

portal_studio.kb.search.tuning.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Search Tuning Save

portal_studio.kb.tree

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Tree

portal_studio.knowledge.summary

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Knowledge Summary

portal_studio.list

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain List

portal_studio.load

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Analytics Load

portal_studio.load.route.portal.design.load

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Design Load

portal_studio.load.route.portal.form.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Form Load

portal_studio.lock

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Lock

portal_studio.migration.apply

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Apply

portal_studio.migration.approve

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Approve

portal_studio.migration.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Migration List

portal_studio.migration.reconcile

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Reconcile

portal_studio.migration.report

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Migration Report

portal_studio.migration.rollback

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Rollback

portal_studio.migration.rollout

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Rollout

portal_studio.migration.start

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Start

portal_studio.node.add

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Add

portal_studio.node.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Delete

portal_studio.node.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Duplicate

portal_studio.node.move

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Move

portal_studio.node.update

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Update

portal_studio.operations.control

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Operations Control

portal_studio.operations.feed

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Operations Feed

portal_studio.operations.record

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Operations Record

portal_studio.operations.summary

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Operations Summary

portal_studio.org.context

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Context

portal_studio.org.member.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Org Member Save

portal_studio.org.members

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Members

portal_studio.org.requests

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Requests

portal_studio.page.archive

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Archive

portal_studio.page.create

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Create

portal_studio.page.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Delete

portal_studio.page.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Duplicate

portal_studio.page.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Restore

portal_studio.page.update

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Update

portal_studio.parity.accept

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Accept

portal_studio.parity.capture

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Capture

portal_studio.parity.compare

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Compare

portal_studio.parity.create

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Create

portal_studio.parity.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Parity List

portal_studio.personalization.delete

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Personalization Delete

portal_studio.personalization.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Personalization List

portal_studio.personalization.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Personalization Save

portal_studio.presence

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Presence

portal_studio.preview

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Preview

portal_studio.preview.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Preview Catalog

portal_studio.publish

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Publish

portal_studio.quality

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Quality

portal_studio.redirect.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Redirect Delete

portal_studio.redirect.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Redirect Save

portal_studio.release.diff

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Release Diff

portal_studio.release.evidence

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Release Evidence

portal_studio.release.history

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Release History

portal_studio.release.publish

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Publish

portal_studio.release.rollback

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Rollback

portal_studio.release.schedule

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Schedule

portal_studio.remove

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain Remove

portal_studio.request.changes

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Request Changes

portal_studio.restore.field

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Restore Field

portal_studio.restore.published

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Restore Published

portal_studio.revert

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Design Revert

portal_studio.review

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Review

portal_studio.review.link

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Review Link

portal_studio.rollback

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Rollback

portal_studio.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Save

portal_studio.save.route.portal.form.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Form Save

portal_studio.save.theme

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Save Theme

portal_studio.saved.section.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Delete

portal_studio.saved.section.instantiate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Instantiate

portal_studio.saved.section.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Save

portal_studio.schedule

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Schedule

portal_studio.schedule.cancel

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Schedule Cancel

portal_studio.scim.config

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Scim Config

portal_studio.service.archive

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Archive

portal_studio.service.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Service Catalog

portal_studio.service.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Duplicate

portal_studio.service.reorder

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Reorder

portal_studio.service.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Restore

portal_studio.service.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Save

portal_studio.service.template

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Template

portal_studio.sign.in.flow.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Sign In Flow Save

portal_studio.signin.methods

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Signin Methods

portal_studio.test.link

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Handoff Test Link

portal_studio.unlock

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Unlock

portal_studio.upload

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Image Upload

sales (14)

sales.ai.insight

Write. Scope: sales.write, admin. Contract: route_inferred. Sales Ai Insight

sales.analyze

Write. Scope: sales.write, analytics.write, admin. Contract: 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

Segurança (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

Situação (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.

pesquisas (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.

Equipe (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

Bilhetes (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

-Anzóis de teia. (1)

webhooks.events.list

Read. Scope: webhooks.read, crm.read, admin. Contract: explicit. List outbound webhook events and their payloads

Escrevendo (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.

OpenAPI e Carteiro estão disponíveis?+

O OpenAPI gerado. 3.0 O documento está em... /api/v1/openapi.php, A coleção gerada do Postman está em /api/v1/postman.php, E os médicos de desenvolvimento legíveis por humanos estão em /api/docs/.

Como faço para trabalhar com mais de um espaço de trabalho?+

Envie a chave de site no corpo de solicitação para escolher uma área de trabalho, uma chave emitida para um espaço de trabalho permanece presa a ela, uma tecla com contexto administrativo pode selecionar qualquer espaço de serviço que seja permitido ver e é recusada para qualquer outro.

Que ações podem uma chave só de leitura?+

Qualquer ação marcada como leitura, defina o modo de permissão na chave para ler_somente e cada escrita é recusada com read_snoonly_key, então uma integração de relatórios não pode mudar nada mesmo por engano.

Por que não fui encontrado por algo que posso ver na administração?+

Os registros em outras áreas de trabalho não retornam mais do que um erro de permissão, então a equipe de segurança da empresa está pronta para trabalhar API Nunca confirma se algo existe em outro lugar.

Desenvolvimento

Segurança. API

Um contrato de segurança para cada conector e integração: OpsIQ O que ele sabe sobre um IP Ou remetente, e alimentar de volta o abuso que seu próprio sistema vê.

OpsIQ Já se defende: IP O firewall bloqueia atacantes, o pipeline filtra spam, e a IA de segurança classifica os infratores e propõe regras de bloqueio. API Uma plataforma de faturamento, um portal cliente ou um aplicativo personalizado pode checar um visitante antes de confiar nele, e relatar o que ele observou para que toda a instalação aprenda com cada superfície.

O que você pode fazer

Verifique antes de confiar

Cheque as respostas com o estado do firewall, qualquer regra de spam que corresponda ao remetente, e o veredito secreto da IA para o IP Uma chamada, uma opinião consolidada.

Relate o que viu.

Segurança. relatório registra a observação como um evento de segurança, tem o AI de segurança classificar o IP E alerta os administradores quando o veredito voltar de alto risco. OpsIQ Vê diretamente.

Compartilhar regras de spam

Segurança. Lista de bloqueios. Add e segurança. Listas de bloqueio. Lista ler e escrever as mesmas regras de spam que a página de tickets usa, então um remetente bloqueado em um sistema é bloqueado em todos os lugares.

Reportando abuso de um conector
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"
}

Escopo e segurança

security.read

Preciso de segurança, verificação e segurança, lista de bloqueios, seguro para dar uma integração.

security.write

Preciso de segurança, relatório e segurança. Blocklist.

Nada é silenciosamente destruído.

Um remetente da lista de bloqueios ainda pousa na vista do Spam onde o bilhete pode ser lido e restaurado.

A plataforma se protege.

O servidor é seu. IP Endereços nunca podem ser bloqueados, bloqueados ou reportados através disso. API Então uma integração mal configurada não pode derrubar a plataforma.

💡
Minta uma chave em Integrações, depois API Chaves, e dê-lhe apenas o escopo de segurança que precisa.
Meus conectores existentes usam isso automaticamente?+

A sincronização de saída já é automática. IP As plataformas conectadas são ditas através da sincronização de segurança do conector. API Aponte seu conector ou código personalizado nessas quatro ações com uma chave carregando os escopos de segurança.

Onde as regras de spam vivem?+

A página de ingressos Bloqueia o controle do remetente, a IA de spam nas configurações, e isso... API Todos trabalham contra a mesma lista de bloqueios, então há exatamente um lugar para procurar.

Desenvolvimento

Eventos API

Envie eventos personalizados do seu servidor ou site para OpsIQ para análise, experimentos, gatilhos de CRM e condições de webhook.

Como funciona
Eventos APIUma chamada track() enviando um evento personalizado demo_booked para OpsIQ, que alimenta metas de conversão, segmentos e gatilhos.OpsIQ Trick ("demo_booked",valor: 0, plano: "pro"});Metas de conversãoSegmentosAtivadores e webhooksNavegador (OpsIQ.track) ou servidor-side POST /v1/events
Eventos API

Eventos do lado do navegador

Rastreamento de eventos do navegador
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "button_clicked", {
  button: "signup",
  page: "/pricing",
  variant: "green"
}]);

Eventos do lado do servidor

Servidor, gravar atividades e conversões contra um contato através da ação. API Use. crm.activities.record para o ciclo de vida/atividade empresarial e crm.conversions.record Para conversões. events.send O receptor de eventos CRM está em /v1/inbound.php?t=<token> para sistemas de terceiros que empurram eventos.

Atividade do lado do servidor (ação 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"
}

Convenção de Nomeação

Notação de pontos

"Ordem. Completa" não "Ora Completa".

Passado.

"botão. clique" não "boto. clica".

Seja específico.

"Pricing. plan_selection" não "user_action".

Desenvolvimento

Como os dados fluem OpsIQ

Entender o fluxo de dados ajuda a depurar integrações e otimizar o desempenho.

Como funciona
Como os dados fluemOs dados fluem do widget e sinalizador para OpsIQ núcleo (CDP, gráfico de identidade, cérebro IA, análise, CRM) então para fora através de webhooks e do REST API.Widget& farolOpsIQ núcleoCDP · gráfico de identidadeCérebro de IAAnálise · CRMWebhooks para foraRESTAURAÇÃO API
Fluxo de dados

Fluxo de dados de entrada

1
O farol do elemento.

O JavaScript widget envia visualizações de página, cliques e mensagens de bate-papo para /beacon.php.

2
Ingestão de eventos

Eventos armazenados em eventos com chave de site, tipo de evento, cliente e propriedades.

3
Reunião de sessão

Construtor de sessões agrupa as visualizações em sessões (via cron).

4
Resolução de identidade.

Quando identificado, registros anônimos estão ligados ao perfil do cliente.

5
Sincronização do conector

Conectores pegam dados de plataformas externas e armazenam no cache do conector.

6
Contexto de IA

A IA reúne contexto de: histórico de visitantes, perfil do cliente, dados de conectores, KB e prompt.

Fluxo de dados de saída

1
Fogos de eventos

Eventos internos disparam (ticket. criado, chat. mensagem, ordem. completado).

2
Fila de trabalho

Evento colocado na fila de trabalhos assincronizados.

3
Webhook despacho

O expedidor assina e envia para todos os terminais subscritos.

4
Tente novamente o fracasso.

Entregas falhadas tentaram com retrocesso exponencial.

Configurações

Referência de configurações

Tudo abaixo é explorado para o espaço de trabalho em que você está, então uma conta pode executar várias marcas com identidades diferentes, comportamento de bate-papo e regras de retenção.

Encontrando um cenário

Há cerca de 600 controles individuais em Configurações, espalhados por onze guias agrupados sob quatro menus.

Configurações de pesquisa (Ctrl + K)

Pressione Ctrl + K, ou Cmd + K em um Mac, em qualquer lugar da página de configurações. Digite palavras simples e pressione Enter para pular direto para o controle.

Espaço de trabalho e plano

Geral e Licença.

IA e Suporte ao Cliente

Assistente de IA, bate-papo com cliente, OpsIQ Escrita e Portal de Suporte.

Dados e Governança

Rastreamento e privacidade, Permissões e Segurança.

Sistema

Cron Setup (somente apresentado) e Zona de Perigo.

Salvando

Cada guia salva por conta própria com seu próprio botão de salvar. OpsIQ Escrevendo, coloque a deles na tela, salve antes de trocar as abas, as mudanças não são feitas.

Ligações profundas

A guia ativa está escrita no endereço da página, então uma aba pode ser marcada ou enviada para um colega.

Identidade de Negócios

A IA lê esses valores em cada resposta, relatório e resumo diário.

Nome do negócio

Usado em relatórios de IA, resumos diários e redação voltada para o cliente.

Indústria de Negócios

Análise de IA alfaiates, pontuação no chumbo, resumos e predefinições de pesquisa.

Língua do sistema

A linguagem mostrada para quem não escolheu a sua, cada agente pode sobrepor-se ao seu perfil.

Use o idioma do navegador.

Quando alguém escolhe um idioma, a escolha deles ganha e isso nunca o substitui.

Sistema de fuso horário

A zona em que o sistema funciona é: datas, relatórios, horários e a cron de fundo.

GeoIP e Rastreamento

Caminho do Banco de Dados GeoIP2

Caminho completo para GeoLite2-City. mmdb. detecta automaticamente na primeira carga através de cPanel, Plesk, DirectAdmin, Cloudways, Docker e Linux simples ou Windows.

Modo de Fonte Geo

GeoLite2 somente, Geo Lite2 com um Cloudflare Recuar, ou...Cloudflare Apenas.Cloudflare Os modos exigem que o local seja aproximado.Cloudflare, com os cabeçalhos de localização dos visitantes habilitados para detalhes da cidade e região.

Tempo limite de sessão (s)

A inatividade antes de uma sessão de visitantes é considerada terminada. 14400, que são quatro horas.

Intervalo de atualização ao vivo (s)

Com que frequência o Live Feed se atualiza. 30 segundos.

Limiar Ativo (min)

Quanto tempo um visitante conta como vivo depois de sua última página carga. 2 Aqui é a entrega do Live Feed, não a duração da sessão.

Retenção de dados (dias)

Apaga registros coletados e gerados após esta idade: análise, bate-papo, tickets, feedback, transações, telemetria de IA, registros de integração e atividade CRM. 0 Configurações, conteúdo de autoria e recibos de consentimento nunca são removidos.

Quando uma conversa é deletada

A exclusão sempre esconde o bate-papo da caixa de entrada e do histórico do visitante, a retenção agendada e o esquecimento do visitante sempre apagam na íntegra, independentemente disso.

Tráfego de robôs de trilha

Conta rastejantes como visitantes, deixa de lado, infla os visitantes e distorce todos os relatórios.

Surto de feedback ativado.

Mostra o widget de feedback do site para os visitantes, separado das pesquisas de chat no Chat do Cliente, Support Flow.

Geral: IA Features

Chaves mestre para cada superfície de IA, todas padrão e salvas por espaço de trabalho.

AI Triage em ingressos

Classifica cada bilhete por categoria, prioridade e sentimento, e escreve um resumo de linha no topo do ticket.

AI Triage, sumário de pair.

Mostra as etiquetas e resumo de triagem em uma dica quando um agente passa por cima de uma linha na lista de tickets.

Copiloto de entrada (compositor)

Adiciona a resposta da IA, mais quente, mais curta, mais formal e de desculpas sob a caixa de resposta do bilhete.

Pergunte...OpsIQ Co-piloto.

O co-piloto flutuante em cada página de administração sabe qual cliente, fatura ou bilhete está aberto.

Bom dia, breve.

No primeiro dia de abertura, o co-piloto apresenta bilhetes urgentes, respostas atrasadas e bate-papos esperando.

Geral: dinheiro, marca, backup

OpsIQ Moeda de base

Cada dinheiro total do administrador é convertido nesta moeda para exibição.

Taxas de auto-sincronização FX

Refresca as taxas a cada seis horas de uma fonte pública sem chave API. Você pode adicionar taxas manuais que sobrepõem o feed.

Habilitar recursos de Comércio e Faturação

Desligando, o que mostra a página de Vendas e Conversões, os cartões de receitas do painel e o Live Intelligence Feed.

Vocabulário comercial

Ensina. OpsIQ Sua redação: se você faz renovações, a palavra para renovar, o que você vende, e como os compradores são chamados.

Marcas e Logotipos

Dois uploads, um para fundos claros (barra lateral de administração) e outro para escuro (página de entrada). 3 MB.

Agente de Inteligência do Site, permita particular. SSH Alvos

O agente de SEO Auto-Implemento conecta-se sobre SSH. Endereços privados, loopback e reservados são bloqueados por padrão como medida anti-SSRF.

OpsIQ Backup / Restauração

Exporta todos os cenários e OpsIQ Mesa de propriedade e arquivos carregados.OpsIQ configuração e registros apenas; nunca toca clientes, faturas, bilhetes, serviços, domínios, ordens ou transações.

⚠️
Faça um backup antes de usar qualquer coisa na Zona de Perigo, o backup vive em geral e as ações deletadas vivem na Zona do Perigo, então é fácil alcançar o botão deletar sem ter exportado primeiro.
Configurações

Seções: segurança

Proteção para a entrada do administrador, suas contas e os dados. OpsIQ A entrada do cliente para o portal de suporte é configurada separadamente.

Proteção de entrada

GooglereCAPTCHA

Escolha v3 (invisível, marcado) ou v2 (checkbox), ajuste o limite de pontuação v3, e forneça o site e as chaves secretas.

Falha no login Auto-Lockout

Bloqueia um endereço depois de várias falhas dentro de uma janela, por algumas horas.

Endurecimento de login

Política de senha com um comprimento mínimo, rejeição de senhas encontradas em violações conhecidas, bloqueio por conta contra recheio credencial, dois fatores obrigatórios para cada administrador, reentrada de senha antes de ações perigosas e alertas de entrada de novos dispositivos.

Único sinal de acesso (OIDC)

O pessoal precisa de um provedor de identidade. URL Domínios de auto-fornecimento, um por linha, criam usuários automaticamente no primeiro login.

Um único sinal.SAML 2.0)

Para provedores que falam SAML. OpsIQ fornece a resposta do ACS.URL e identificação da entidade SP; você fornece a identificação da unidade IdP, sinal de entrada URL, desligando opcionalmente URL e X.509 Os campos de atributos de email e nome só são necessários para nomes de atributos não padrão.

Provisionamento SCIM

Criação, atualização e desativação de diretórios.OpsIQ Contas.OpsIQ Suprirá o SCIM base URL Você gera símbolos aqui para que alguém possa ser revogado sem quebrar o resto.

Ameaças, bloqueio e coleta

Lista de permissão de saída

Restrições que o exterior hospeda, os conectores podem chamar. SSH Controle de alvo em geral.

Pontuação de ameaça e Auto-Block

Bloqueia um visitante assim que a pontuação de ameaça passar do seu limite. 0 Veja a página de Visão Geral da Segurança por uma semana antes de escolher um número.

Block Page Mensagem

A mensagem que um visitante bloqueado vê, como texto simples ou seu próprio costume HTML Bloquear tela.

Vitais da Web de visitantes reais

Mede LCP, INP e CLS de sessões reais.

Entrega de eventos seguros e retestes

Fila de eventos personalizados no navegador e entregar em lotes com repetições, reduzindo a perda de conexões móveis pobres.

Beacons de Rastreamento Assinado

As incorporações reais de widgets carregam um símbolo criptográfico giratório para que dados falsos possam ser rejeitados, desligados por padrão, permitindo mudanças na autenticação das incorporações, então teste primeiro.

Alertas de segurança

Detecção e bloqueio, de qualquer forma, esse cartão controla se você é informado e quanto a IA ajuda.

Ativar alertas de segurança.

Troca mestre para este cartão.

Onda fracassada no limiar de login

Quantos sinais falharam em um curto período de contagem como uma onda que vale a pena alertar.

IP Inteligência da reputação

Adiciona uma ameaça para visitantes aparecendo em feeds de abuso público.

Site de observação

Tempo de trabalho por hora e TLS Verificações de validade, alertando antes que um certificado caduque.

Analista de segurança e relatórios de incidentes de IA

Adiciona um veredicto explicativo a atividade suspeita, e grupos relacionados ataques em um único incidente legível ao invés de uma corrente de eventos.

Piloto automático da política

Atua por conta própria, transformando o que aprende de um incidente em uma regra proposta ou aplicada.

Digerir segurança diária e conselheiro de postura semanal

Uma recapitulação diária na página de Visão Geral da Segurança, e uma lista semanal mostrando o que está protegido e o que ainda está aberto.

Autoexpirar propostas velhas

Uma proposta de regra de bloqueio que você nunca agiu expira por si só em vez de acumular.

REplay da Sessão DOM

Activar repetição da sessão DOM

As gravações são amostradas e mascaradas com privacidade, e são vistas na página de Replay de Sessão sob o Analytics.

Taxa de amostragem, captura máxima, retenção

Que parte das sessões para gravar, quanto tempo uma única gravação pode ser executada, e quantos dias as gravações são mantidas.

⚠️
Reproduza as pessoas reais usando seu site, mantenha a taxa de amostragem e retenção tão baixa quanto responderá sua pergunta, e divulgue em seu aviso de privacidade.
Configurações

Configurações: Rastreamento e Privacidade

O quê? OpsIQ pode coletar, e quanto tempo cada tipo de registro sobrevive.

Exclusões

Excluído IPs E CIDR Ranges

Endereços nunca foram rastreados, um por linha, endereços exatos ou escalas de ICDR, a maneira mais limpa de manter sua equipe fora de suas análises, porque cobre todos nesse endereço ao invés de apenas administradores.

Excluído. URL Caminhos

Os padrões de página nunca foram rastreados, um por linha, cartões com asterisco. /admin/* mantém o escritório dos fundos fora do registro de visitas.

Política de retenção de dados

Separado do conjunto de retenção de dados em geral e da eliminação da Zona Perigosa.

Registros de interação com IA

Telemetria de confiança com pré-visualizações curtas de consulta e resposta. 90 Isso contém mais texto de clientes, então reduza-o primeiro quando apertar a privacidade.

Eventos de uso de IA

Por chamada, o token conta para relatórios de custos, dias padrão 90.

Action Audit Trail

A ação e o registro de segurança. 365 Mantenha isso por mais tempo, é o seu rastro de evidências.

Diagnósticos

Registros de saúde do sistema. 30 dias.

Perguntas sem resposta

Grupos de perguntas que a IA não poderia responder. 90 Veja as perguntas que a IA perdeu antes de expirarem.

Cães de guarda e exportações

Alertas de Anomalias Métricas

Comparação diária de ontem contra a recente linha de base, alertando quando uma métrica se move mais do que seu limite. 35 Por padrão, off.

Exportação de Armazém

Despejos noturnos de sessões, visitantes, pageviews e mesas relacionadas para sua própria pilha BI, em um formato que você escolher, mantido por vários dias.

Configurações

Configurações: Assistente de IA do administrador

O assistente flutuante que sua equipe usa dentro do administrador, com acesso ao vivo a clientes, faturas, ingressos, servidores e registros de cron.

Activar OpsIQ Al Widget

Mostra o botão assistente em cada página de administração.

Layout e comportamento

Posição do canto, largura do painel (320 para 600 PX), altura máxima (400 para 900 PX), raio de canto (0para 24), tamanho da fonte, e um vidro fosco borrado atrás do painel.

Mostrem as Batatas Rápidas.

Os botões de atalho sob o cabeçalho, a maneira mais rápida para a maioria dos funcionários.

Mostrar informações do modelo

Mostra qual modelo respondeu e quanto tempo levou, útil enquanto ajustava o custo, ruído para uso diário.

Por-admin portão de acesso

Só mostra o assistente de um administrador assinado cujo nome de usuário e e-mail correspondem a um OpsIQ Use o botão de acesso antes de habilitar ou pode bloquear sua equipe.

AI Persona

Mostrar nome, cabeçalho e uma mensagem de boas-vindas personalizada mostrada quando o painel abrir.

Batatas de ação rápida inteligentes

Edite o rótulo e o prompt subjacente para cada atalho, adicione o seu próprio ou reset para os padrões.

Cores e forma

Forma de chip (pílula, arredondada, quadrada), cores de chip, tema de cartão e forma de lançador (round, contorce, quadrado), com uma prévia ao vivo.

Memória de conversação

O assistente lembra o histórico de cada pessoa nas sessões do navegador, até mensagens de até 120, armazenadas em seu próprio banco de dados.

Configurações

Configurações: Conversa com o cliente

O widget de bate-papo que seus clientes usam, e a maior área de Configurações.

Trabalhe nos sub-tabs para uma nova instalação, identidade e cópia, aparência, comportamento, fluxo de suporte, treinamento de conhecimento, avançado é infraestrutura e pode esperar.

Identidade e cópia

Identidade da marca

Nome do agente, tagline, nome da IA, o nome usado para sistema e avisos inativos, e como nomes de agentes aparecem.

"Encontro de bate-papo"

Duas saudações, uma para todos os visitantes e outra para visitantes identificados.

Popup Teaser de 2016

A mensagem flutuante antes da conversa é aberta, com seu próprio nome, tamanho de fonte e cores, a IA pode escrever os teasers, com controles para quantos gerar, quantos mostrar por visita e o intervalo entre eles.

Prompts e Handoff

O roteiro completo: pedindo um nome e e-mail, confirmações, solicitando um humano, sem agentes disponíveis, bilhete criado ou cancelado, entrega pendente.

Status e Avisos Inativos

Três mensagens visíveis para o cliente: agente fecha a conversa, visitante fica quieto e agente devolve à IA. Evite palavras internas como resolvidas ou triadas.

Compositor e Sugestões

Colocador, etiqueta de botão para conversar com um humano e perguntas de abertura sugeridas.

Lançador, Ícone e Avatares

Ícone do lançador, um ícone opcional diferente quando aberto, tamanho do lançadora, e imagens para o agente humano e a IA.

Aparência

Tema e Vidro

Modo temático, predefinido com cores premium, intensidade de borrão e opacidade, além de alternações para animações, linhas de separadores, escondendo a linha do status, escondendo o cartão da mensagem e escondendo o botão de fechar.

Cores Principais

Lançador, cabeçalho, painel de ajuda, links, botões, avisos do sistema e compositor, cada um com uma cor inicial e final para gradientes.

Painel, Bolhas e Batatas

Cerca de trinta catadores cobrindo o painel, borda, texto, área de entrada e todos os tipos de bolha (visitante, IA, agente, digitação, sistema) mais chips de sugestão e seu estado de pair só abra isso para correspondência exata da marca, e verifique contraste no texto de bolhas.

Layout e Forma

Largura e altura do painel, raio de canto, tamanho da fonte, posição da tela, formato do lançador, estilo bolha e se os avatares mostram a largura em um telefone.

Comportamento

AI responde automaticamente.

O interruptor mestre para as respostas da IA.

Seguimentos humanos e texto duplo natural

Um acompanhamento suave quando um visitante fica quieto, e uma mensagem opcional de segundos curtos como uma pessoa enviava uma.

Respostas da máquina de escrever e ritmo de resposta

Se as respostas digitam palavra por palavra, e quão rápido o assistente responde, por predefinição ou seu próprio atraso mínimo e máximo em milissegundos.

Tradução ao vivo

Cada agente lê e escreve em sua própria língua enquanto o visitante lê a deles.

Devolva para Al depois do agente ocioso.

Minutos de inatividade do agente antes da IA retomar a conversa.

Abra o bate-papo.

Segundos antes do widget se abrir.0Intrusivo no celular, saia em0A não ser que seja testado.

Respostas mais inteligentes

Planejando para respostas de um passo, pensando em profundidade, um modelo opcional separado para respostas do agente, mostrando raciocínio aos visitantes, tolerando erros ortográficos, memória de longa conversa, restringindo o assistente apenas ao seu negócio, preços na moeda do visitante, e como os links aparecem.

Poupança de Custos

Abaixar o conhecimento, procurar saudações como "oi" e "obrigado", e fechar a resposta mais longa em fichas.

Línguas

Quais idiomas o widget suporta e como ele escolhe um para um visitante.

Respostas da Conta do Cliente

Respostas de uma conta própria do cliente, opcionalmente procuradas ao vivo e carregadas apenas quando necessário.

Reembolsos

Pedidos de reembolso assistidos onde o assistente reúne detalhes e entrega a uma pessoa, nunca completa um reembolso em si.

Conversa e Widget

Mantendo conversas passadas, continuando uma conversa em seus sites conectados, janela de arrasto, pedindo um e-mail aos convidados, e deixando sua equipe transformar uma conversa num ticket.

Características do Widget

Emoji, anexos com um modo opcional só para colar, compreensão de imagem IA, ícones em linha, microfone, botão de conversa com agente, sons de visitante, visualização do anexo, isolamento de botões de chamada de voz e sessão.

Caixa de entrada do administrador, notificações e boas-vindas.

O visitante recebe o popup, mais seus agentes alertas: sons de caixa de entrada, notificações no desktop, sons de sussurro, se os sussurros privados bip, e o intervalo da pesquisa.

Fluxo de Apoio

Handoff Humano

Como os pedidos de uma pessoa são atribuídos, os segundos que um agente tem que responder, se o declínio retorna a conversa para a IA, e se a IA retoma quando expirar o tempo limite.

Horas de trabalho

Horários de abertura, fuso horário e a mensagem de horas fechadas. OpsIQ Escrevendo.

Respostas quando a IA está desligada

A primeira resposta para uma nova mensagem, a resposta quando alguém já está na fila, e quanto tempo antes de repetir.

Forma Offline

Mostra um formulário de contato em vez da conversa.

Busca de ingressos e Notificações do Departamento

Um visitante citando um número de ingresso tem seu status real, e para qual departamentos a IA pode ir, um painel interno mostra os verdadeiros destinatários para cada departamento, resolvido da mesma forma que o notificador resolve, então você pode ver antes que um cliente faça isso, um departamento não alerta ninguém.

Central de Ajuda em widget de bate-papo

Você escolhe onde aparece o ponto de entrada, a etiqueta e ícone da barra inferior, e se oferece um link para o centro de ajuda completo.

Classificação de conversa

A classificação de estrelas foi acionada quando um agente fecha o bate-papo, quando termina uma entrega ou após um período de inatividade que você define.

Pesquisa Pós-Conversa

Uma pesquisa breve quando o visitante fecha a conversa, com sua pergunta, atraso, regra de tempo e um boné por visita.

Pesquisa de e-mail pós-conversa

Uma pesquisa de seguimento por e-mail após a conversa terminar, opcionalmente na língua em que o visitante conversou, com controle sobre atraso, assunto, introdução, pergunta, ambos os rótulos de botão e a linha obrigado.

Responder Feedback

Polegares para cima e polegares para baixo em cada resposta IA, alimentando os painéis de qualidade.

Arquivo de conversação

Auto-arquivo após dias, auto-resolver depois de minutos de silêncio e apagar conversas arquivadas após dias.

Treinamento de Conhecimento

Nada mais no chat do cliente importa.

Treinamento de Conhecimento no Site

Rasteja seu site para que o assistente possa responder a partir dele, até dez links iniciais, um limite de página, uma profundidade de link e pastas excluídas, um único URL pode ser testado antes do rastreamento completo, excluindo checkout, conta e caminhos administrativos.

Embutidos

O API Chave e modelo que transformam páginas em significado pesquisável ao invés de combinações de palavras-chave.

AI Organizador de Conhecimentos

Um clique e a IA lê todas as FAQs e páginas rastejadas e classifica-as em categorias.

Perguntas frequentes, respostas verificadas.

Os pares de perguntas e respostas tratados como a fonte mais alta prioridade, cada um com um status, peso e categoria, pesquisáveis, importáveis de JSON, e os IA podem escrever a partir de uma descrição do seu negócio.

Avançado

Desempenho e Limites

Intervalo de pesquisa, limite de taxa de mensagens e janela, tamanho máximo do anexo, tentativas de anexação por janela e extensões de arquivo permitidas.

Entrega em tempo real

Mensagem instantânea e entrega de status em vez de fazer pesquisas, através do Pusher, Ably ou Firebase, com um intervalo de votação.

Empurre as notificações.

Alertas de dispositivos para agentes através de feixes de pressão ou sinal One, com interesse em dispositivos.

Web Push (VAPID)

Navegador empurra usando suas chaves geradas sem provedor de terceiros.

Voz, vídeo e tela de compartilhamento

Credenciais da TURN então chamadas se conectam através de redes restritivas, usando Cloudflare Ou credenciais Twilio ou sua própria TURN URL, nome de usuário e credencial.

Fluxo de trabalho na caixa de entrada

Configurações de espaço de trabalho do agente ao invés de configurações de visitante: SLA de primeira resposta em minutos, visualização salva da fila, atalhos de teclado e paleta de comando, busca por conversas e tickets para o cliente no inspetor.

Mensagens de canais

WhatsApp, SMS, Facebook Messenger, Instagram, Telegram, X mensagens diretas e LINE, cada um com seu próprio interruptor de resposta automática IA, além de um interruptor de política para ações de IA em canais, uma resposta debounce e o modelo de reacoplamento WhatSApp.

Uma visualização ao vivo do Widget na parte inferior da aba atualiza-se enquanto você edita.
Configurações

Configurações: Modelos

Cada e-mail.OpsIQEdite o texto de qualquer mensagem, e escreva modelos para qualquer coisa.OpsIQNão já enviou.

Um design, muitas mensagens.

O Modelo global de email É o papel: seu logotipo, o cabeçalho, a tipografia e o rodapé, com um meio vazio. Toda mensagem OpsIQ é inserida nesse meio. Edite o papel uma vez e cada email muda juntos - as respostas do ticket, os recibos da loja, a senha reset, os lembretes de reserva, as cartas do PeopleOS, e tudo que você escrever.

Não há como enviar um e-mail para fora de OpsIQ sem esta embalagem.

Editando uma mensagem

1
Abra configurações, e depois templates.

Mensagens são agrupadas pelo que são: bilhete e portal, loja, login e segurança da conta, reservas, conversas e notificações, relatórios, cartas do PeopleOS, e o seu.

2
Pressione Editar sobre o que você quer

Você tem o assunto, um editor de texto rico com umHTMLVer você pode mudar para ao vivo, e uma prévia do e-mail terminado exatamente como o destinatário recebe - sua embalagem incluída.

3
Use os chips variáveis.

Os chips acima do editor são os fatos que mudam: um número de ingresso, uma referência de ordem, um tempo de reserva.

4
Salve

Deixe um campo vazio e mantenha sua redação integrada, a pílula na fila diz em que estado está.

💡
Uma variável que você não usa é removida quando o e-mail é enviado, assim como a linha em que ele se senta.

Escreva seu próprio modelo.

Use isso para uma mensagem.OpsIQRecebe tudo que uma mensagem incorporada recebe: o editor, a pré-visualização, as regras do plano e seu design global, e seu próprio sistema envia através daAPI.

1
Pressione Adicionar modelo

O botão fica no topo da página de Modelos e novamente ao lado de "Seus próprios modelos".

2
Diga-o.

O nome se torna a referência que seu sistema envia, mostrada sob o campo como você digita - por exemplo x_custom_livery_booked.

3
Diga para que é e quando é enviado.

Essas duas linhas são o que você e seus colegas leram na página de Templates daqui a um ano.

4
Liste as partes que mudam

Separados por vírgulas, por exemplo: nome, quando, rastreio_link {{variable}} Você pode passar para o assunto ou a mensagem, e seu sistema preenche-o na hora do envio.

5
Escreva o assunto e a mensagem.

Frases simples são finas, quebras de linha se tornam parágrafos, apenas a mensagem, o logotipo, cabeçalho e rodapé vêm do modelo global.

6
Crie-o, então abra-o.

Aparece em "Seus próprios modelos" com o editor completo e uma prévia ao vivo, igual a todas as mensagens incorporadas.

⚠️
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.

Enviando seu próprio modelo

Duas chamadas para o produto.APIO chamador fornece o destinatário e as variáveis - nunca a redação e nunca o design, então uma integração não pode enviar correio sem marca através de seu espaço de trabalho nem mudar silenciosamente o que você diz para seus clientes.

Liste seus modelos e as variáveis que cada um leva.
POST /api/v1.php
Authorization: Bearer YOUR_API_KEY

{ "action": "email.templates.list", "mine": true }
Envie
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"
  }
}
💡
Nomes variáveis vão sem aparelho noAPILigue, e-mail, templates. A lista os entrega de volta da mesma forma que você os passa.

Modelos e seu plano

Uma mensagem que você não tem o serviço para

Fica listado com um link "Ver planos" e nenhum editor - assim você pode ver o que OpsIQ Mandaria, e o que destrava.

Seus próprios modelos.

Escolha o serviço a que um modelo pertence quando você cria ou deixa em cada plano, uma área de trabalho sem esse serviço vê-o listado mas não pode editá-lo ou enviá-lo.

Entrar, segurança, notificações e o teste de e-mail

Ser incapaz de consertar a redação de uma senha reset que seus administradores recebem seria o tipo errado de bloqueio.

Perguntas

Posso mudar o design para uma mensagem?+

O design é o papel e é compartilhado, que mantém cada email reconhecidamente seu.

O que acontece com minha frase se eu pressionar Reset?+

O reset aparece no modelo global e substitui o editor pelo design embutido, nada é escrito até você pressionar Save, para que possa fechar o diálogo para mudar de ideia.

Eu apaguei um dos meus modelos por engano.+

Removendo leva dois cliques por essa razão, o primeiro braços e diz-lhe o que vai parar de funcionar.

Um conector ou um complemento podem trazer seus próprios modelos?+

Um pacote envia um mail_templates.json em seu próprio diretório, e suas mensagens aparecem em "Templates de desenvolvimento" com o mesmo editor, visualização, envoltório e portão de plano.

Configurações

Configurações: OpsIQ Escrevendo

Os ingressos responderam por escrito: respostas automáticas, sistema de bilhetes nativos, escalada, horário comercial, roteamento e os emails voltados para o cliente.

Resposta automática

Mostrar OpsIQ Escrita de botões.

Adiciona os botões de ajuda para seus agentes na administração.

Habilitar resposta automática do ticket

Começando com isso e revisando os rascunhos por uma semana, reembolsos, cancelamentos e mudanças de acesso devem sempre chegar a uma pessoa.

Departamentos de auto-responsáveis

Qualquer coisa que não esteja listada é deixada para um humano, o que é o padrão seguro.

Resposta programada (minutos)

Uma resposta instantânea é como um robô, alguns minutos são uma equipe rápida.

Max AI responde por bilhete por departamento.

Um boné por departamento, por exemplo Billing. 1 e apoio. 3Sem uma tampa, um fio confuso pode se enrolar.

Comprimento da resposta, status e identidade

Máxima escrita, status do ticket após uma resposta e depois de um aumento, e que conta administrativa as respostas automáticas são atribuídas a. Use uma conta claramente nomeada para que o pessoal possa dizer respostas de IA de humanos.

Operações de ingressos nativos

Sistema de Ingressos Nativos

O sistema de bilhetes incorporado em OpsIQ, para instalações sem um helpdesk externo.

Incorpore e-mails para os ingressos nativos.

Transforma e-mail de entrada em ingressos. OpsIQ fornece o ponto final. URL Qualquer coisa que possa postar nesse ponto pode criar tickets, então mantenha o segredo.

Respostas multi-volta e atraso e desfalque

Se a IA continua respondendo enquanto a conversa continua, e se espera uma janela silenciosa para que três mensagens rápidas recebam uma resposta considerada.

Portal de apoio público

Uma página voltada para o cliente onde qualquer um pode levantar e rastrear um ticket, com uma linha opcional de boas-vindas.

Formato do número de ingresso.

Quantas letras aleatórias aparecem em números de tickets gerados.

E-mail clientes em sua própria língua

E-mails de ticket seguem a linguagem do cliente, e-mails nunca mudam de idioma, notificações, alertas de departamento, instruções e relatórios agendados permanecem em sua língua.

Agradecimentos e confirmações

Um reconhecimento fixo em novos tickets, além de mensagens de confirmação quando um ticket é aberto, quando o feedback é deixado e quando um bilhete é fechado, cada um com uma prévia ao vivo.

-AI, rastreio de spam.

Escreve os ingressos de remetentes desconhecidos, e pode mover o suspeito de spam sozinho.

Fechem os bilhetes.

Fecha uma passagem depois de alguns dias tranquilos, diga ao cliente na mensagem final como reabrir.

Horário de trabalho (calendário SLA)

Fuso horário, horários de abertura e fechamento, dias úteis e feriados para temporizadores de primeira resposta e resolução. Uma programação separada do Horário de trabalho em Chat com o cliente.

Auto-atribuir novos bilhetes

Tarefa automática, opcionalmente apenas para agentes que estão online, com habilidades de agente e uma sensibilidade compatível para roteamento baseado em habilidades.

Sugerir ingressos duplicados.

Pontos quando um cliente abre uma passagem perto de uma que já tem, com sensibilidade ajustável.

Levantamento de satisfação após fechar

E-mails de uma pesquisa um dia depois de fechar.CSAT Page.

Notifique o departamento por e-mail.

Os destinatários são os membros desse departamento, não o endereço da caixa postal do departamento, que é o endereço de entrada.

O que a IA pode ler?

Acesso de dados do cliente IA

Um interruptor mestre mais permissões individuais somente leitura para o resumo do perfil do cliente, faturas, transações, saldo de crédito, produtos e serviços, domínios, servidores vinculados e uma visão geral da conta de alto nível.

Escalação e conhecimento

Activar aumento de bilhetes de IA

Você escolhe os departamentos autorizados, o atraso no cheque e pode escrever suas próprias instruções de aviso de escalada.

Configurações de conhecimento

Se as respostas usam o idioma do cliente, se elas desenham em links rastreados e FAQs, se a IA lê imagens e anexos PDF, o modo de resposta do conhecimento, se importado JSON conhecimento é usado, e se os links de origem podem aparecer. Use links rastejados e Perguntas Frequentes devem estar ligados, ou a IA está adivinhando.

Pare de responder automaticamente após a resposta humana.

Quando a equipe responder, o IA para de atender o bilhete... sem ele, a IA pode falar com seu próprio agente.

Instruções de passagem e email

Instruções de texto livre, moldando tom e conteúdo para cada resposta, com um exemplo louvável.

Importar JSON Conhecimento

Envie ou cole um. JSON Arquivo de conhecimento para o assistente de escrita.

Estúdio de botões

Um designer completo para o botão voltado para o cliente: estilo de exibição, tamanho, etiqueta, ícone, forma, largura mínima, estilo de fundo com cores primárias e secundárias, ângulo gradiente, borda, raio de canto, sombra, tipografia, enchimento, animação ociosa, movimento pair e cores, e o anel de foco, além de um personalizado CSS Caixa para qualquer coisa que os controles não cobrem.

Configurações

Configurações: Portal de Suporte

O site voltado para o cliente onde as pessoas levantam e rastreiam ingressos e lêem seus artigos de ajuda, esta guia controla como é alcançado e como os clientes entram, seu design visual é feito no Portal de Suporte Studio.

Portal Studio ou Portal de Bilhetes Incorporados: qual deles eu quero?

São dois produtos diferentes e as pessoas os misturam constantemente. Eles resolvem problemas diferentes, e correr juntos é normal.

Portal de Suporte Studio: um lugar para onde você envia clientes

O estúdio projeta um Um site de suporte completo que OpsIQ Anfitriões para você.Ele tem seu próprio endereço web, ou seu próprio domínio, e carrega toda a experiência de autoatendimento: artigos de ajuda com pesquisa, o formulário de solicitação, histórico de tickets, cliente que entra e assistente. Escolha um modelo, trabalhe através do Tema, Navegação, Layout, Conhecimento, Rodapé, Marca, Bilhetes, Assistente, Formulário e CSS, visualização em desktop, tablet e tamanhos de telefone, então publique.

Use-o quando Você quer um destino marcado que você pode apontar para cada cliente, e você prefere não construir ou manter uma área de suporte dentro de seu próprio site.

Portal de ingressos incorporado: ingressos dentro do seu próprio site

A incorporação coloca Apenas a experiência de ingresso em uma página do seu próprio site.Os clientes abrem, rastreiam e respondem aos pedidos de suporte sem nunca deixar suas páginas, e seu próprio cabeçalho, navegação e design ficam exatamente como estão.

Use-o quando Você já tem um site ou aplicativo com seu próprio design, e você quer suporte para acontecer dentro dele em vez de entregar o cliente para um endereço diferente.

A versão curta.

O Estúdio constrói Um lugar para onde você envia clientesA incorporação traz ingressos. Para onde seus clientes já estão.Muitos negócios operam ambos, incorporando o widget de tickets em sua área de conta para pedidos de contexto enquanto mantêm o portal hospedado como destino completo com artigos e busca.

Endereço e acesso

Modo de acesso

Se o portal está aberto a qualquer um ou restrito a clientes assinados, portais abertos recebem mais ingressos e mais spam.

Escolhas de layout

Se o portal e centro de ajuda compartilham um herói ou usam dois, que navegação e rodapé aparecem em ambas as superfícies, e a etiqueta da seção de navegação.

Endereço do portal

Escolha um nome e OpsIQ mostra o portal resultante e os endereços de centro de ajuda correspondentes.

Seu próprio domínio.

Serve o portal de um domínio seu, como suporte.

Portal de ingressos incorporado

Muda o item de entrada descrito acima, e abre o construtor de incorporação onde você escolhe as regras de layout, aparência e acesso, visualiza o resultado e copia o trecho para sua página.

Como os clientes se inscrevem

Essas são as opções de entrada dos clientes, a assinatura do pessoal está configurada em Configurações, Segurança.

Métodos de entrada

Que opções aparecem na página de entrada, o conector e o email funcionam automaticamente.

Inscrição social

Prestadores de contas de consumo, cada um precisando de uma identificação do cliente e segredo, com o endereço de redirecionamento fornecido por OpsIQ para se registrar com esse provedor.

Síncrono único (OIDC)

Cliente assinando através de um provedor de identidade, com emissor URL, ID do cliente, segredo e uma lista opcional permitida de domínios de email.

Cliente SAML 2.0

O SAML Equivalente. OpsIQ fornece a resposta do ACS.URLe identificação de entidade SP, você fornece a identificação da entidade IdP, login e assinatura. URLs, X.509 Certificado e nomes de atributos opcionais.SAML nos métodos de login ou não aparecerá.

Inscrição sem costura do seu aplicativo.

Um link profundo assinado, então um cliente já se inscreveu em suas terras de inscrição no portal sem assinar novamente. OpsIQ Fornece o segredo de assinatura, portal URL e a chave do espaço de trabalho, uma rota completa para sua língua (PHP, Laravel, WordPress, WHMCS, Node.js, Flask, Django, .NET, Rails, Java, Go, e em auto-anfitriões instala o OpsIQ Use o gerador antes de escrever qualquer código.

Como funciona o percurso

Seu cliente clica em um link de suporte que aponta para a rota. A rota encontra o cliente conectado ao seu aplicativo (um convidado é enviado para seu login e volta), lê o segredo do seu servidor, assina um token único que expira em dois minutos, e redireciona para o portal sem referer e sem-locações, para que o token não seja armazenado ou vazado.

O próprio botão de login do portal.

No Portal Studio, página de login, ligue o login do meu site e configure sua página de acesso URL O portal acrescenta: opsiq_portal_return (a página em que o cliente estava); a rota honra-o apenas quando está dentro do seu endereço do portal e traz o cliente de volta lá, assinado.

WHMCS

Nada para escrever: WHMCS Gancho de Sites Remotos já assina clientes no portal e lida com o endereço de retorno URL para o seu WHMCS login na área do cliente.

Assine em todos os lugares.

Sair do portal também assina o cliente fora de sua aplicação.

Ingestão e proteção

Requisitando campos de formulários.

Cada campo extra perde submissões, então peça apenas o que precisa para triagem.

Proteção contra spam e abuso

Em cima, você pode bloquear endereços de email descartáveis, adicionar seus próprios domínios bloqueados e adicionar um CAPTCHA usando o Google reCAPTCHA ou Cloudflare Turntile. ReCAPTCHA reutiliza as chaves já definidas em Configurações, Segurança; Chaves de turno são inseridas aqui.

Análise do Portal

Um resumo da atividade do portal nos últimos 30 dias.

Configurações

Configurações: Permissões, Licença, Cron e Zona de Perigo

O grupo do sistema, além do controle de acesso da equipe que decide quem pode ver qual guia Configurações.

Acesso e Permissões da Equipe

Per-admin permissões

Cada administrador recebe um conjunto explícito de permissões cobrindo acesso à caixa de entrada do chat, que as seções de configurações que podem editar, e seus departamentos, qualquer pessoa com o papel de Administrador completo sempre tem todas as permissões, e as permissões de configuração decidem quais páginas uma pessoa vê, então conceda o mais estreito conjunto que os permite trabalhar.

Licença

Mostra sua licença atual, o que lhe dá direito e seu status.

Configuração do Cron

Auto-hospedagem só instala. OpsIQ Uma linha de crontab dirige cada tarefa programada: auto-resposta do ticket, roteamento escalonado, atualização da taxa de câmbio, votação na caixa postal e sincronização de conectores.

1
Copia a linha.

A aba mostra a linha crontab exata para o seu servidor com o binário PHP correto já escolhido.

2
Adicione-o ao crontab

Execute crontab -e como o usuário que executa PHP e cole a única linha. cPanel Use a ferramenta Cron Jobs em vez disso.

3
Verifique

Em um minuto, os batimentos se acendem... e agora corra para testar imediatamente em vez de esperar.

O painel cardíaco mostra a última execução, duração e o que foi processado tanto para a fila de resposta automática quanto para a pesquisa por e-mail e conectores.

Zona de Perigo

Apague todos os dados de rastreamento.

Limpa tudo OpsIQ As configurações e configuração do site, endereços bloqueados, tudo o que sua equipe escreveu (base de conhecimento, FAQs, traduções, desenhos de portal, definições de ação) e recibos de consentimento são preservados.

Purgar dados mais velhos do que

A mesma varredura limitada a registros mais antigos que 30, 60, 90 ou 180 Para a retenção automática de rolamentos, use os valores de retenção em geral e rastreamento ao invés disso, e deixe a tarefa programada fazer isso.

🚫
Exportar um backup de Settings, General antes de usar qualquer coisa na Zona de Perigo.
Configurações

Gerenciando sua equipe

Convide membros da equipe e atribua papéis para controlar quem pode acessar o quê.

Equipe
Equipe e departamentosA tela da equipe: uma mesa de administradores com contato, crachá (Propriedade, Administração Completa, Agente) e os departamentos que cada um pode acessar.Equipe e departamentosEspaço de trabalhoEquipe e departamentos+ Salvar usuário administrativoCONTATOPAPELDEPARTAMENTOSAO[email protected]Ada OwusuDono.Todos.KM[email protected]Kojo MensahAdmin.Todos.RT[email protected]Rita TettehAgente.ContagemSB[email protected]Agente.Suporte1TEAMConvide e gerencie administradores.2ROLESDono · Gerente completo · Agente3SCOPEDAcesso por departamento
A verdadeira tela da equipe: cada administrador com seu contato, papel e os departamentos que eles podem alcançar, agentes examinados, proprietários cheios.

Papel

Dono.

Acesso total, incluindo licença, faturamento e zona de perigo.

Admin.

Acesso total, exceto licença e zona de perigo.

Agente.

Apenas para departamentos designados, ingressos, conversas e análises.

Convidando membros da equipe.

1
Vá para a Equipe.

Navegue para a equipe na barra lateral.

2
Clique em Convidar

Digite o e-mail do membro da equipe.

3
Definir o papel

Escolha o proprietário, administrador completo ou agente.

4
Atribuir departamentos

Para agentes, selecione departamentos acessíveis.

5
Enviar convite

Eles recebem um e-mail com uma conexão de configuração.

Configurações

Desempenho em equipe

O acesso é por permissão, não por função: a permissão de visualização abre a página, a permissão para gerenciar desbloqueia alvos, o QA e as leituras dos colegas que identificam, e a permissão financeira-recompensa é o que adiciona a guia Rewards.

Desempenho em equipe
Desempenho em equipeA tela de desempenho da equipe: agentes classificados por uma barra composta, CSAT e um saldo recompensa com um botão Pay por linha.Desempenho em equipeEspaço de trabalhoDesempenho em equipeAGENTEEscoreCSATEQUILÍBRIORTRita Tetteh4.8$42Pague.SBSam Boateng.4.5$28Pague.KMKojo Mensah4.2$15Pague.AOAda Owusu4.9$51Pague.1SCOREDDesempenho compósito.2CSAT & LOADAvaliações + volume3REWARDSSaldos de agentes pagadores
A verdadeira tela de desempenho da equipe: cada agente marcou em volume e CSAT, com um saldo de recompensa que você pode pagar por fila.

Como a página está organizada

Cada um responde uma pergunta diferente, e eles são ordenados por quão urgente eles geralmente precisam de você.

01 Centro de comando.

Estado de fila ao vivo, resultados do cliente contra seus alvos, como a capacidade foi gasta, situações que precisam de uma decisão e o índice de evidência ajustada por equipe.

02 Colegas de equipe.

A tabela de classificação, reconhecimento (mais melhorado e raias), missões, e o controle de opt-in para quem pode ver o ranking.

03 Qualidade

Cartões de pontuação, avaliações gravadas, acordo com revisor corrigido por acaso, desvio do revisor e disputas de evidências.

04 Recompensas

Valor do token, reivindicações de pagamento e alocação de período governado: autorizar um teto financiado, rever a pré-visualização, finalizar.

05 História

Como o espaço de trabalho se moveu ao longo do tempo: métricas de tendência com um gráfico, e um mapa de cobertura 28_-dia mostrando quando a equipe estava realmente trabalhando.

Unscored não é zero

Um colega de equipe sem volume suficiente, ou cujas dimensões com evidências somam menos da metade do peso configurado, é mostrado como Unscored.

Os dois limiares de evidência fazem trabalhos diferentes e vale a pena mantê-los separados, o mínimo que é tratado decide se alguém é pontuado em tudo, as avaliações mínimas não afetam a pontuação, ele decide a elegibilidade do prêmio e recompensa, então um companheiro de equipe pode ser totalmente marcado e classificado e ainda ser inelegível para esse período, porque poucos clientes os avaliaram.

💡
Um colega de equipe trabalhando em dois espaços de trabalho separados tem um registro independente em cada um.

O índice de desempenho

Um composto de cinco dimensões, cada uma medida contra um alvo que você definir em vez de contra colegas, então puxado para o meio quando as evidências por trás dele é fino.70 Uma primeira semana ruim em quatro conversas também não é um veredicto acertado, enquanto as evidências acumulam a figura ajustada converge para a crua.

Qualidade

Satisfação do cliente com os comentários verificados, complementados pelos resultados de QA onde existem e são governados.

Responsividade

Primeiras respostas nos percentis P50 e P90, contra seus alvos.

Resolução

Tempo de resolução e taxa de resolução de um toque.

SLA

Atintura contra o SLA que você configurou, além de em risco e contagens violadas.

- Aeromoça.

Reabrir e transferir taxas - o trabalho que volta.

💡
Os pesos são configuráveis e relativos, não têm que totalizar 100. Evidências desaparecidas só podem baixar o índice, nunca elevá-lo - o peso configurado permanece no denominador.

Capacidade e tempo produtivo

Ocupação, tempo produtivo, resolvido por hora produtiva e participação online da janela OpsIQ Não tem lista ou fonte de mudança, e um denominador substituído seria um palpite usando uma placa percentual.

⚠️
A ocupação diz como o tempo foi gasto, nunca como foi gasto e nunca financia, portas ou tamanhos de pagamento.

Garantia de qualidade

Uma revisão é uma evidência sobre uma conversa, não um veredicto sobre uma pessoa.

Acordo de revisão

Dois revisores que aprovam tudo concordam com o acordo de vocês 100% da época, sem nenhuma informação.

Revisão desliza

Se um revisor sistematicamente pontua mais forte ou suave que seus colegas na mesma conversa, uma comparação com o resto do painel, não uma tendência ao longo do tempo.

Litígios

Um colega de equipe pode formalmente disputar evidências registradas sobre eles, uma disputa em aberto bloqueia a finalização do período de recompensa até que seja resolvida.

Auto-revisão

Um colega de equipe não pode se submeter a uma avaliação.

⚠️
As avaliações de grau A não podem influenciar o pagamento até que uma calibração seja publicada mostrando que o modelo concorda com os revisores humanos o suficiente, medidos por kappa contra uma amostra mínima.

Reconhecimento

O ranking sozinho tem documentado modos de falha: jogos métricos, esgotamento e vergonha pública de quem for o último.

Mais melhorado.

Medido contra o recorde anterior de um colega, nunca contra colegas, com encolhimento para que um denominador minúsculo não possa comprar uma vitória.

"Srakes"

Todos podem manter uma faixa simultaneamente, então não cria nenhuma classificação, e um colega que tem um mês excepcional não pode quebrar a sua.

Opt-in ranking

Um colega de equipe sempre vê seu próprio índice, se eles veem colegas é uma decisão do espaço de trabalho.

💡
Reconhecimento nunca toca em dinheiro, uma raia não pode financiar um pagamento ou quebrar um, e o mais melhorado não é uma categoria de prêmio.

Buscas

Um alvo que a equipe trabalha, medido contra uma barra fixa declarada em vez de um contra o outro - para que todos possam limpar a mesma busca no mesmo período.

Escopo e cadência

Individual ou equipe, único, repetitivo ou sazonal com uma janela explícita.

Critérios

Conversas tratadas, audiências recebidas, dias ativos, média de classificação ou taxa de feedback negativo.

Guarda de qualidade.

Atingir o número enquanto a qualidade cai abaixo do chão retém a busca em vez de completá-la, e é mostrado como não está, não inacabado.

Repita os limites.

Uma tampa por período, conduzida pelo critério mais lento, além de uma refrigeração opcional antes que uma repetição possa contar.

Equipes em busca

Progresso compartilhado sem atribuição de companheiros de equipe publicada, então uma busca por equipe não pode se tornar uma tabela de liderança.

Sessões de treinamento

Uma sessão de treinamento é um registro, não uma conversa... tem um treinador, um colega de equipe sendo treinado, um horário marcado, pontos de conversa acordados e um resumo escrito depois.

Pontos de conversa

Concordo antes da sessão, então o colega não vai entrar em uma surpresa.

Provas afixadas

Conversas, tickets e avaliações de perguntas e respostas anexadas à sessão, um pino guarda uma referência, um tipo e um id, não uma cópia, então sempre aponta para o registro ao vivo.OpsIQ não verifica a identificação antes de aceitá-la.

Itens de ação.

Um item passado da data é mostrado como atrasado, um estado derivado, não um status que alguém precisa lembrar de definir.

Nota particular.

O treinador nunca pode ler o bilhete, não como agente, nem como gerente, nem enquanto dono.

Quem pode ver uma sessão

O treinador, o colega de equipe e qualquer um com permissão para gerenciar a performance da equipe.

Audição

Cada criação, atualização, pino, desabotoamento e conclusão é gravado com o que mudou, por quem.

💡
Uma sessão não muda o índice de ninguém, não dá uma recompensa e não aparece na tabela de classificação.

Recompensas e prêmios

A atividade gravada converte em fichas com um valor monetário que você define, o caminho para um pagamento é deliberadamente lento e cada passo é gravado.

1
Defina o valor do símbolo

Quantos símbolos equivalem a quanto dinheiro, e o que cada atividade vale.

2
Autorizar o teto financiado

Para um período de calendário fechado, um administrador completo declara o máximo de fichas que pode pagar.

3
Reveja a prévia.

As disputas de evidências abertas bloqueiam este passo.

4
Finalizar

A alocação é registrada permanentemente com as evidências por trás, um período que nada pode ser anulado e re-executado imediatamente, um que emitiu fichas deve ser invertido primeiro: OpsIQ A reversão se recusa se alguém já desembolsou mais do que a quantia sendo recuperada, e nomeia quem e por quanto.

⚠️
A qualidade da IA pode complementar esse julgamento, mas nunca substituí-lo, e um colega mostrado como Unscored não é elegível.25% acima de sua parte esperada do período, então um mês de grande volume não pode absorver todo o orçamento.
💡
O dono da conta não participa de prêmios ou recompensas, sem troca: autorizam o teto financiado e finalizam cada alocação, e não há ninguém acima deles para aprovar o que eles estariam pagando a si mesmos.

Todos os outros participam por padrão, líderes de equipe e coproprietários incluídos, para deixar alguém de fora, abri-los no Team & Departments e desligar a opção "Participa em prêmios e recompensas", seu trabalho ainda está marcado e mostrado, eles deixam de ser candidatos a partir desse ponto, e nada já finalizado é tocado.

⚠️
Ninguém aprova o dinheiro para si mesmo, porque as pessoas que podem participar também são as que podem aprovar pagamentos OpsIQ Recusou um pagamento ou crédito em sua própria carteira, pagando seu próprio direito, finalizando um período no qual você seria pago, e finalizando o prêmio que ganharia.

Quem pode ver e fazer o quê?

Veja o desempenho da equipe.

O conselho, estado ao vivo, capacidade e visão geral de qualidade para o espaço de trabalho.

Gerencie o desempenho da equipe.

Alvos e pontuação, exportações, avaliações e avaliações de QA, treinamento, missões, e as leituras que carregam dados de identificação de colegas como histórico per-admin e história prêmio.

Veja as finanças da equipe.

Saldos, valores em dinheiro, notas de crédito e referências de pagamento... separados das evidências de desempenho porque é vizinho da folha de pagamento.

Apenas administradora total.

Cada mutação monetária: pagar uma recompensa, pagar ou rejeitar um crédito, autorizar um orçamento, finalizar, anular ou reverter uma atribuição e definir a taxa de token-to-cash.

Usando-o com justiça.

O índice de desempenho é a evidência da gestão, não uma decisão automática de emprego, abra as conversas de origem por trás de um número antes de agir sobre isso, e pesem complexidade do caso, horários, licenças e necessidades de acessibilidade.

Configurações

Seus sites (espaços de trabalho)

Sites (espaços de trabalho) permitem que você gerencie vários sites de um OpsIQ Cada um tem seu próprio rastreamento, IA, conectores e acesso à equipe.

Sítios
Seus sites.A tela dos sites: uma lista de espaços de trabalho, cada um com seu domínio, tipo, conector, crachá de status e um botão aberto, além de adicionar novo local.Seus sites.Espaço de trabalhoSeus sites.+ Adicione novo siteSshop.acme.comECommerce · Shopify ConectorActivo.Abra.Hhost.acme.comHosting · WHMCS ConectorActivo.Abra.Bblog.acme.comConteúdo · sem conectorConfiguraçãoAbra.1MULTI-SITEUm espaço de trabalho por local2ISOLATEDOs dados nunca se misturam.3PER-SITEConfigurações próprias e conectores
A tela real dos Sites: cada site é sua própria área de trabalho isolada (domínio próprio, conector e configurações), adicionada e aberta a partir de uma lista.

Criando um site

1
Vá para os sites conectados.

Navegue para os Sites Conectados.

2
Adicione um novo site.

Digite nome, domínio e descrição.

3
Copie a chave do site.

Cada site recebe uma chave única para o trecho do widget.

4
Configure independentemente.

Cada site tem suas próprias IA, conectores e configurações.

Quantos sites posso ter?+

Depende do plano de licença, verifique os detalhes da licença.

Configurações

Licença e plano

Seu. OpsIQ A licença controla as características, os limites do site e o saldo de crédito da IA.

Licença
Centro de LicençaO OpsIQ Centro de Licenças: plano, crachá ativo, chave de licença mascarada, medidor de crédito de IA e botão "Force-remote-check".Centro de LicençaEspaço de trabalhoOpsIQ Centro de LicençaPlanoNegóciosSituaçãoActivo.ChaveOPSIQ-••••-••••-2F9CAI créditos$68 esquerdaForçar verificação remota.1PLAN & STATUSAtivo, de relance2KEYHMAC-cated localmente3CREDITSAI equilíbrio & limites
O verdadeiro Centro de Licença: seu plano e status ativo, a chave mascarada, seu saldo do crédito da IA, e uma força de um clique para verificar.
Chave da licença.

Digite Configurações > Licença. Validada contra o servidor de licença OpsIQ.

Carteira de habilitação / validação

OpsIQ Normalmente lê seu cache de licença local assinado e atualiza a validação quando necessário. DNS, HTTPS ou problemas de tempo do servidor.

Plano

Determina a disponibilidade e os limites.

Limite do site

Número máximo de espaços de trabalho.

AI créditos

Se usar IA gerenciada, seu saldo de crédito é mostrado aqui.

Validade

Renovar antes da expiração para evitar interrupção do serviço.

O que acontece quando minha licença expirar?+

Rastreamento, ingressos e CRM continuam... a IA tem pausa até a renovação.

Configurações

Perfil, senha e autenticação de dois fatores.

Cada administrador pode manter sua própria identidade, preferências de trabalho, senha e autenticação de dois fatores.

Tela de produto
Meu perfil.A página de perfil separa detalhes pessoais, idioma/tempo, avatar/assinatura, senha e autenticação de dois fatores.Meu perfil.Espaço de trabalhoPERFILCompletaTIMEZONEEuropa/Atenas2FAActivadoOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHONome e e-mailIdentidade pessoalEditarLinguagem e fuso horárioDatas e interfaceEditarAvatar e assinatura.Respostas e presença da equipeEditarSenha e 2FAProteção de conta.Seguro1UPDATE PROFILEIdentidade e localidade2SECURE LOGINSenha e 2FA3SAVEAplique-se a este administrador.
A página de perfil separa detalhes pessoais, idioma/tempo, avatar/assinatura, senha e autenticação de dois fatores.

As configurações do perfil pertencem ao administrador assinado e não mudam a marca de espaço de trabalho.

Configurações

Preferências de notificação

Preferências de notificação controlam quais eventos operacionais chegam a um administrador no produto ou por e-mail.

Tela de produto
Preferências de notificaçãoA página de notificação fornece opções de e-mail e por evento, além de uma lista de notificações recente.Preferências de notificaçãoEspaço de trabalhoIN-APPAdianteEMAILSeletivoUNREAD4OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOBilhete atribuídoEm aplicativo e e-mailAdianteO cliente respondeu:Em aplicaçãoAdianteRisco de SLAEm aplicativo e e-mailAdianteAI aprovaçãoEm aplicativo e e-mailAdiante1CHOOSE EVENTSApenas sinais úteis.2CHOOSE CHANNELIn-app ou e-mail3REVISÃONotificações recentes
A página de notificação fornece opções de e-mail e por evento, além de uma lista de notificações recente.

Preferências cobrem a atribuição de tickets, respostas ao cliente, avisos SLA, entrega de bate-papo e eventos de aprovação de IA.

Configurações

Visão geral da segurança

A Visão Geral da Segurança é a primeira tela para avaliar blocos, ataques de login, sessões de ameaças, tendências de segurança e integridade dos eventos.

Tela de produto
Visão geral da segurançaVisão geral da segurança combina cartões de risco atuais, 14- tendência do dia, lista de atacantes, alimentação de eventos e estado de integridade.Visão geral da segurançaEspaço de trabalhoACTIVE BLOCKS18FAILED LOGINS42HIGH THREAT3OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOBloqueado automaticamente.7_-dia total e fonteTendênciaÚltimos atacantes.IP, país e razãoRevisãoEventos de segurançaRisco e resultado da açãoAlimente-se.Integridade da cadeia de haxixes.Corrente de eventos evidentesVálido1READ HEADLINEExposição atual2OPEN EVIDENCEAtacadores e eventos3ATOBloquear, investigar, exportar.
Visão geral da segurança combina cartões de risco atuais, 14- tendência do dia, lista de atacantes, alimentação de eventos e estado de integridade.

Use os cartões de manchete para triagem, então abra a auditoria relacionada, Logins Falhados, Bloqueados IPs ou JavaScript Página de erros para o trabalho de nível recorde. 14 Sessões de alta ameaça devem ser investigadas contra visitantes, pedidos e evidências de autenticação antes que um bloco permanente seja aplicado.

Configurações

Diário de auditoria do Tamper-Evidente

O registro de auditoria registra quem fez o que, quando, para qual objeto, em que nível de risco e se conseguiu.

Tela de produto
Auditoria de atividadesA página de auditoria fornece atividade evidente e inviolável com ação, ator, risco, alvo e resultado.Auditoria de atividadesEspaço de trabalhoAcontecimentos18.2kHIGH RISK21INTEGRITYVálidoOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOConector ativado[email protected] · ShopifySucessoAPI Chave revogada.[email protected] · chave 19SucessoAs configurações mudaram.[email protected]· AISucessoPermissão negada.[email protected] · exportaçãoBloqueado.1FILTERAção, risco e ator.2INSPECTORAlvo e resultado3EXPORTCSV ou JSON
A página de auditoria fornece atividade evidente e inviolável com ação, ator, risco, alvo e resultado.

Filtrar por ação, risco e ator; exportar CSV ou JSON A cadeia de hash ajuda a detectar linhas de auditoria perdidas ou alteradas, mas não substitui backups protegidos e acesso restrito ao banco de dados.

Operações

Diagnósticos

Diagnósticos transformam os controles de subsistema em resultados de saúde simples e direcionam as próximas ações.

Tela de produto
DiagnósticosDiagnósticos agrupam verificações de saúde para o widget, IA, ingressos, integrações, Inteligência do Site, tarefas de fundo, automação CRM, licenciamento e armazenamento.DiagnósticosEspaço de trabalhoSAUDÁVEL13WARNING2FALHA1OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOWidgetBeacon e bate-papo.Saudável.Tarefas de fundoBatimentos cardíacos atrasadosAvisoE-mailTeste de saída falhou.Falhou.ConectoresRegistro e entrada de eventosSaudável.1REFRESHFaça as verificações atuais.2OPEN WARNINGLeia as evidências.3FIX AND RETESTConfirmar recuperação.
Diagnósticos agrupam verificações de saúde para o widget, IA, ingressos, integrações, Inteligência do Site, tarefas de fundo, automação CRM, licenciamento e armazenamento.

A página verifica velocidade do site, rank/keyword/backlink/dados locais, IA e gateway de ação, bilhetes, rastreador/auditorias, integração/evento de entrada, tarefas de fundo, automação CRM, licença, widget e serviços relacionados ao produto.

Depois de uma mudança, refresque e confirme que o subsistema afetado retorna saudável.

Configurações

Segurança e acesso

OpsIQ inclui várias camadas de segurança para proteger seu administrador, dados, e API Acesso.

Como funciona
Segurança e acessoUm escudo de segurança ao lado dos controles habilitados: dois fatores, OIDC. SSO, SCIM 2.0, OAuth2 PKCE, CSRF/CSP, IP firewall, limites de taxa e um cofre secreto.Dois fatores (ToTP)OIDC SSOSCIM 2.0OAuth2 PKCECSRF + CSPIPfirewallLimites de taxaAbóbada de segredos.
Segurança.

Recursos de segurança.

Autenticação de administrador

E-mail/senha com 2FA opcional.

Bloqueio de login

Trava temporária após muitas tentativas falhadas.

IP Bloqueando.

Bloquear IPs Ou ICDR varia de acesso a locais rastreados.

-Ameaça a marcar.

Os visitantes de alta ameaça podem ser bloqueados automaticamente.

Força de segurança HTTPS

Redirecionamento HTTP para HTTPS.

Cabeçalhos HSTS

Segurança de Transporte Estrito previne ataques degradantes.

Proteção CSRF

Todos os formulários de administração incluem fichas CSRF.

Proteção XSS.

Todos os dados do usuário escapam, os cabeçalhos da CSP restringem a execução do script.

Proteção SSRF

Os hooks de saída bloqueiam o privado/interno IP Endereços.

- É uma configuração recomendada.

1
Activar 2FA

Para todas as contas administrativas.

2
Senhas fortes.

Mínimo. 12 personagens, mistos.

3
Revisando contas

Remova o acesso para antigos membros da equipe.

4
Monitorar logins falhou

Verifique se há padrões suspeitos semanalmente.

5
Mantenha-se atualizado.

Aplique atualizações para os patches de segurança.

Configurações

Funções e permissões

Controle de Acesso baseado em papéis permite controlar o que cada membro da equipe pode fazer.

Funções e permissões
Funções e permissõesUma matriz de capacidade, o dono tem tudo, a administração completa não tem faturamento e zona de perigo, o agente só tem ingressos.Funções e permissõesEspaço de trabalhoCONSTITUIÇÕESFATURAÇÃOPERIGOCITKETSDono.Admin.Agente.scoped13 ROLESDono · Gerente completo · Agente2GRANULARPor página + por departamento3DEFAULT-DENYEstradas esquecidas bloqueadas
O papel matricial de relance: o dono recebe tudo, a administração completa tudo menos faturamento e zona de perigo, agente apenas seus bilhetes.

Papel padrão

Dono.

Tudo incluindo licença, zona de perigo e gerenciamento de instalação.

Admin.

Tudo, exceto licença e zona de perigo.

Agente.

Responda a tickets e bate-papos do departamento, análise de visualizações, sem configurações, equipe ou acesso à segurança.

Posso criar papéis personalizados?+

Três papéis embutidos e mais trabalho de departamento dão controle granular.

Configurações

Bloqueado. IPs

Gerenciar IP Endereços bloqueados de acessar seus sites rastreados.

Bloqueado. IPs
Bloqueado. IPsOs bloqueados...IPs Tela: um bloco-an...IPFormulário CIDR ao lado de uma tabela de endereços bloqueados com cada entrada, data, razão e um botão de desbloqueio.Bloqueado. IPsEspaço de trabalhoBloquear um IP / CIDR203.0.113.0/24Razão (opcional)BloquearEndereços bloqueados.203.0.113.9Jun 12 · força brutaDesabtruir45.12.0.0/16Jun 10 · SpamDesabtruir102.89.6.2Jun. 9 · AbusoDesabtruir1BLOQUEIOIP ou intervalo CIDR2LISTQuem e quando, com razão3UNBLOCKUm clique
O verdadeiro Bloqueado IPs Bloquear um único IPou um intervalo de CIDR, e gerenciar a lista, cada um com sua data, razão e um clique para desbloquear.

Como bloquear

1
Vá para a segurança, bloqueado. IPs

2
Adicione um IP ou intervalo CIDR

Exemplo: 203.0.113.42 ou 203.0.113.0/24

3
Adicione uma razão

Documento por que: spam, abuso, raspagem, etc.

Bloquear afetará usuários legítimos?+

Se os clientes compartilham uma empresa IP Ou VPN, bloqueando isso.IP Bloqueia todos e usa blocos estreitos.

Configurações

Falha no login

Todas as tentativas de login sem sucesso para o seu OpsIQ Administrador.

Falha no login
Falha no loginA tela de logins falhou: uma tabela de contas/IPs com contagens de falhas, tempo da última tentativa, e um botão Block por linha.Falha no loginEspaço de trabalhoTentativas de login falhadasCONTA / IPFALHAÚLTIMOACÇÃO[email protected] · 41.62.10.472m atrásBloquear[email protected] · 102.89.6.2318m atrásBloqueardesconhecidos... 45.12.9.71226m atrásBloquear[email protected] · 88.21.4.921h háBloquear1WATCHTentativas de login falhadas2COUNTSPor conta. IP3ATOBloqueie da fila.
A verdadeira tela de login falhou: cada conta/IP Com sua contagem de falhas e última tentativa, bloqueie uma fonte de força bruta diretamente da fila.

O que cada entrada mostra

Data/hora

Quando a tentativa aconteceu.

E-mail

Endereço de e-mail usado.

IP endereço

Fonte da tentativa.

País

Localização geográfica.

Razão

Senha errada, trancada ou não encontrada.

Sinais de alerta

Muitas tentativas, mesmo e-mail.

Senha adivinhada, certifique-se que 2FA esteja ativado.

Muitas tentativas, diferentes e-mails.

Ataque automático, bloqueie a fonte. IP.

Países incomuns.

Se sua equipe é local, tentativas estrangeiras são provavelmente ataques.

Configurações

Analista de segurança da IA

Uma camada de analista sobre as páginas de segurança: vereditos, relatórios de incidentes, um digest diário, uma verificação semanal da postura, perguntar à segurança, e 0Nunca funciona na rota de solicitação de visitantes.

O analista de segurança da IA acrescenta esse julgamento no lugar, e é construído para gastar quase nada: nunca fica na rota do sinal ou login, regras determinísticas resolvem os casos óbvios sem chamada de IA, veredictos são guardados, e a melhor saída do analista é uma regra determinística que então aplica para sempre em zero fichas. Configurações → Segurança- Todos estão fora.

O que ele adiciona

Batatas fritas + Explicar

Bloqueado. IPs E as linhas de logins falhadas mostram um chip benigno/suspeito/ hostil com uma pontuação de confiança. 24h, então re-visando um IPé livre.

Sucursais de incidentes

Eventos relacionados se aglomeram em um incidente. URL Os ataques em andamento se dobram para o mesmo incidente.

Digerir diariamente

Um recapitulação por dia: ontem contra sua linha de base, blocos, incidentes e a única coisa a fazer.

Teste de postura semanal

Uma lista de segunda-feira, endurecendo (2 lacunas do AFA, limiar de bloqueio contra o volume real de ataque, alertas) com gravidade, esforço e correção exata por item.

Pergunte à segurança.

Uma caixa de perguntas sobre a visão geral da segurança que responde do seu estado de segurança ao vivo.

Propostas políticas + piloto automático

O analista propõe regras de blocos concretos como Aprovar / Demitir cartões, regras aprovadas para aplicar em zero fichas com um contador de sucesso ao vivo.

Configurações

Analista de segurança da IA (apto para segurança)

Ativará o veredito, explicará e perguntará à segurança. IPs Alcance o modelo, em uma chamada.

Casos de incidentes

Agrupa os eventos em incidentes e escreve cada nova história, rodando o cron de segurança existente.

Digerir diariamente (digestão de segurança)

Uma recapitulação de segurança por dia no sino e na visão geral.

Teste de postura semanal (segurança)

Segunda-feira, endureça a lista de verificação.

Piloto automático de política (security_ai_autopilot)

Permite que o analista ative suas propostas mais seguras sem atenção: blocos reversíveis com tempo limitado apenas, únicos IPs ou não tem alcance maior que /24, Nunca compartilhado/móvel/privado, tampado 10 por hora, sempre auditado e inutilizável.

💡
Cada chamada é marcada com segurança_ai com seu próprio boné mensal em AI Config → Custo Guarda-rails (padrão 300k tokens). Se o boné for atingido, características degradam para leituras determinísticas. Bloqueamento, bloqueios e alertas nunca dependem deste orçamento.
Operações

Cron e automação.

OpsIQusa um programador de produtos para fazer pesquisas por e-mail, automação de tickets, rolagem de análises, retenção, filas de IA,CRM Trabalho, relatórios e trabalhos de conexão.

Tela de produto
Cron e automação.Um produto de entrada cron fornece o batimento cardíaco; OpsIQ Decide quais empregos internos são devidos.Cron e automação.servidorHEARTBEATCada minutoRUNNERcron/all.phpHEALTHConfiguraçõesOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOProduto únicoopsiq/cron/all.phpObrigatórioFilas de e-mail e ticketTrabalho curto agendadoActivo.Análise e retençãoCadência internaAgendado.Assinantes de conexãoDeclarados eventos de CronEscondido.1INSTALL ONE LINEFaça o agendamento do produto a cada minuto.2CHECK CRON SETUPConfirme batimentos cardíacos CLI3USE DIAGNOSTICSInvestigue o trabalho atrasado ou fracassado.
Um produto de entrada cron fornece o batimento cardíaco; OpsIQ Decide quais empregos internos são devidos.

Entrada de cron de produto necessária

Adicione esta linha única ao crontab para o mesmo servidor e ambiente PHP que executa OpsIQ:

OpsIQ produto crontab entrada
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1

Substituir /path/to/opsiq Use o caminho completo do PHP CLI quando o host precisar de um, por exemplo. /usr/bin/php8.4.

Não use o nível superior. /cron.php para o trabalho de produto. Neste repositório, esse corredor pertence a um serviço não-produto separado fora deste manual. OpsIQ O produtor de produtos é opsiq/cron/all.php.

O que o programador unificado dirige

Bilhetes e filas de IA

Processos devidos a auto-respostas, escaladas, aprovações e outros trabalhos de produtos em fila.

E-mail de entrada

Pesquisas configuradas caixas de correio onde as pesquisas são o método escolhido.

Análise e sessões

Reúne sessões e atualiza agregados quando eles são devidos.

CRM e noivado

Corre com pontuação, ciclo de vida, fluxo de trabalho, campanha e tarefas programadas que são habilitadas.

Retenção e manutenção.

Realiza limpeza, arquivo, validade e integridade.

Conectores

Envia assinantes de cron e pesquisas somente para conectores instalados, habilitados e configurados.

Verifique o cron.

  1. Abra. Configurações - Cron Setup E confirmar que o produtor de produtos existe.
  2. Uso Corra agora. Uma vez, confirme a atualização do batimento cardíaco.
  3. Cheque. Diagnósticos para um batimento cardíaco tardio, PHP CLI, banco de dados ou problema de caminho-ficheiro.
  4. Inspecione /tmp/opsiq-cron.log ou o caminho de registro que você selecionou quando uma execução manual falhou.

Mantenha os conectores curtos, indemponentes e vigiados no espaço de trabalho.

🚫
Quando o cron produto parar, baseado no tempo OpsIQ O trabalho para ou se atrasa, mesmo que páginas de administração comuns ainda possam carregar.
Operações

Operações de implantação hospedadas

Um anfitrião OpsIQ A implantação usa as mesmas telas de produto e fluxos de trabalho enquanto o operador gerencia a camada do servidor.

Tela de produto
- Adiantado.A operação hospedada muda quem mantém a infraestrutura, não muda como os clientes usam. OpsIQ.- Adiantado.Espaço de trabalhoPRODUCT UIO mesmo. OpsIQINFRASTRUCTUREOperadora gerenciadaWORKSPACE DATAIsolado.OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOHora de execução da aplicaçãoPHP, servidor web e banco de dados-Conseguido.Cron produtoProgramado pela operadora de hospedagemVerifiqueBackups e atualizaçõesPolítica e evidência do provedorRevisãoOpsIQ configuraçõesSites, IA, equipe e conectoresSua equipe.1OPERATE OPSIQ NORMALLYUse o mesmo produto de navegação.2VERIFY SERVICE HEALTHUse diagnósticos e evidências de status3KNOW RESPONSIBILITYSepare as configurações do produto do trabalho de hospedagem.
A operação hospedada muda quem mantém a infraestrutura, não muda como os clientes usam. OpsIQ.

O que o operador de hospedagem normalmente gerencia

  • Servidor web, PHP Runtime, serviço de banco de dados, TLS e armazenamento.
  • O cron de produto unificado e seus registros de nível do servidor.
  • Atualizações de aplicativos, monitoramento de infraestrutura e o processo de backup definido pelo acordo de hospedagem.

O que um OpsIQ O administrador ainda gerencia.

  • Sites e instalação de widgets, configurações de IA, conhecimento, caixas de correio e fluxos de trabalho de suporte ao cliente.
  • Acesso da equipe, departamentos, controles de segurança, API Chaves, conectores, automações e configurações de retenção de dados.
  • Verificação de produto através de diagnósticos, o registro de auditoria, testes de conectores e verificações reais.

Controlos operacionais

Não suponha que um serviço gerenciado significa que toda integração de produtos é saudável. OpsIQ Diagnósticos após mudanças para DNS, e-mail, provedores de IA, sites ou conectores.

Esta seção cobre apenas operações de produtos. OpsIQ Manual.

Operações

Auto-anfitrião. OpsIQ

Uma auto-anfitriã OpsIQ Você é responsável pelo tempo de execução, banco de dados, TLS, Cron de produto, backups, atualizações e monitoramento.

Tela de produto
Auto-anfitriãoA auto-alojamento dá controle de infraestrutura e torna sua equipe responsável por cada dependência operacional.Auto-anfitriãoservidorPHP8.4+DATABASEMySQL 5.7+SCHEDULERCada minutoOBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOExtensões de tempo de execuçãoCurva, pdo_mysql, mbstring, jsonObrigatórioExtensões adicionaisxml, opensl, zip, intl, gdObrigatório-Base de dados alternativo.MariaDB 10.3+ com InnoDBApoiado.TransporteHTTPS e acesso ao provedor de saídaVerifique1PREPARE THE SERVERMatch requisitos de tempo de execução2INSTALL AND CONFIGUREUse um banco de dados dedicado e HTTPS3ADD PRODUCT CRONCorrer opsiq/cron/all. php
A auto-alojamento dá controle de infraestrutura e torna sua equipe responsável por cada dependência operacional.

Contrato de software mínimo

PHP

PHP 8.4 Extensões necessárias: cacho, pdo_mysql, mbstring, json, xml, opensl, zip, intl e gd.

Banco de dados

MySQL 5.7+ ou MariaDB 10.3 Criar um banco de dados dedicado e usuário menos privilegiado.

Servidor Web

Apache ou Nginx configurados para o OpsIQ Controlador frontal, ativos estáticos e reescritas necessárias.

HTTPS

Necessário para sessões de administração, tráfego de widgets, API Chaves, webhooks e chamadas de provedor.

Acesso de saída

Permita. DNS e acesso HTTPS à IA, e-mail, conector e terminais de licença que você realmente habilita.

Acesso ao arquivo

Os usuários da Web e CLI devem ser capazes de ler arquivos de aplicativos e escrever apenas para os locais documentados de execução/armazenamento.

Cron.

Correr o OpsIQ Programador de produtos a cada minuto com a mesma configuração da aplicação e acesso ao banco de dados do processo web.

Sequência de instalação

  1. Envie o lançamento para a raiz do documento e preserve a estrutura de diretório fornecida.
  2. Crie o banco de dados e usuário do aplicativo, então insira o banco, configurações canônicas URL e de licença.
  3. Execute o fluxo de instalação e crie a primeira conta do proprietário.
  4. Habilite HTTPS e verifique redirecionamentos, cookies e o widget público.API caminhos.
  5. Adicione o unificador OpsIQ Cron de produto:
Cron de produto auto-hospedado
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1
  1. Abrir configurações, Cron Setup e Diagnostics, executar o programador uma vez e resolver cada dependência falhada.
  2. Configure backup, restaure testes, reter registros e atualizar procedimentos antes de adicionar dados de produção.

Atualizando com segurança

  1. Leia as notas de lançamento e verifique o PHP/extensões necessários antes de mudar de arquivos.
  2. Faça backup do banco de dados e arquivos de configuração, então prove que o backup pode ser restaurado em um local de teste.
  3. Implemente os novos arquivos sem excluir a configuração específica da instalação ou dados de execução.
  4. Execute o processo de migração/pré-voo fornecido e verifique login, rastreamento de widgets, tickets, e-mail, IA, conectores e cron.
  5. Mantenha o backup anterior e do banco de dados disponível para a janela de retrocesso documentada.
🚫
O repositório de topo /cron.php Não é o OpsIQ Marcador de produtos. opsiq cron/all.php.
⚠️
Não exclua .schema_cache.json Remova-o somente quando as instruções do produto exigirem explicitamente uma reconstrução de esquema-cache.
Operações

Guia de produção

Lista de verificação e melhores práticas para correr OpsIQ em produção.

Guia de produção
Guia de produçãoUma lista de verificação ao vivo: domínio personalizado e SSL, AI treinado, conectores e cron, backups e retenção, e papéis de equipe.- Vá em frente, lista de verificação.Espaço de trabalhoAntes de você ir ao vivoDomínio personalizado + SSL configuradoAI treinou sobre seu conteúdo.Conectores testados.Reforços programados.Equipes atribuídas e revisadas1GO-LIVELista de verificação pré-lançamento2VERIFYDomain · SSL _* backups3CONFIDENTNavio quando está verde
Uma lista de verificação ao vivo, então nada é perdido: domínio + SSL, IA treinada, conectores testados e cron, backups e retenção, e papéis de equipe.

Antes de ir ao vivo

HTTPS configurado

SSL instalado, redirecionamentos HTTP, HSTS ativado.

Cron correndo

Verifique através da página de diagnóstico.

AI testado

Converse como cliente, verifique a precisão e o tom.

Widget instalado

Verifique com o Live Feed.

Cópia de segurança configurada

Banco de dados diário automatizado e backups de arquivos.

Erro ao registrar

Registro de erro PHP ativado e monitorado.

Equipe convidada

Todos os membros têm contas com papéis corretos.

Base de conhecimento povoada

Pelo menos. 5-10 Artigos.

Verifique o painel, livre fila de ingressos, cheque as conversas com a IA.

Semanalmente, revise o AI Insights, atualize KB, verifique o desempenho da equipe, reveja a segurança.

Mensal: análise de tendências, conectores de auditoria, treinamento de IA atualizado, verificar backups.

Operações

Lista de verificação pré-lançamento

Um comando disponível não é evidência de que passou no seu ambiente.

Tela de produto
- Release de verificação.A visão de liberação mostra que é preciso portais para funcionar, não pré-rotula como passado.- Release de verificação.servidorCORRERPHP 8.4SOURCE GATESCorra localmenteOUTCOMEBaseado em evidências.OBJETIVO AO LIVRO DA ESPAÇO DE TRABALHOExtensões necessáriasVerifique antes da suíte.PortãoVarredura de sintaxe PHPTodos os arquivos PHP do projetoPortãoAvaliação de IA e PHPUnitCorra quando as dependências estiverem presentes.PortãoEstática e verificação de navegadorExecutar quando configuradoPortão1RUN THE CHECKSCapture a saída real.2FIX EVERY REQUIRED FAILURENão substitua as evidências por suposições.3TEST THE PRODUCTVerifique as viagens reais do usuário.
A visão de liberação mostra que é preciso portais para funcionar, não pré-rotula como passado.

Fonte e portão de liberação

Execute as verificações do repositório da raiz de instalação e mantenha sua saída completa com o registro de lançamento.

Portão primário de pré-voo
php tools/preflight.php
Portão de liberação estendido.
php tools/release_gate.php

O pré-voo verifica o PHP 8.4 runtime e extensões necessárias, executa uma varredura de sintaxe do PHP, executa o portão de avaliação de IA e suíte completa PHPUnit, e executa as verificações PHPStan/Node quando essas ferramentas são instaladas. O portal estendido também inclui fumaça, instalação limpa/esquema e verificação final do navegador quando seu ambiente é configurado.

Registre por que não estava disponível, instale a dependência perdida ou execute-a no ambiente correto antes de ser lançada.

Checagem de produtos.

1Autenticação e papéis

Assine como cada papel pretendido, verifique páginas/ações permitidas e negadas.

2Widget e rastreamento

Carregue um site real em um navegador privado, verifique o tráfego de faróis, transmissão ao vivo, visitas e registros de sessão.

3Conversa e IA

Faça perguntas representativas, verifique conhecimento de base, segurança, escalada e história da IA.

4Bilhetes

Criar, atribuir, responder, escalar, fechar e reabrir através de cada caminho permitido de entrada.

5E-mail.

Teste a entrega e cada caixa de correio ou o caminho do webhook configurados.

6 CRM e análise

Criar um contato/acordo/conversão controlado e verificar painéis, funis, pontuação e relatórios.

7Conectores

Testes de conexão, uma leitura, um seguro de gravação/seco e caminhos webhook/polling para cada conector habilitado.

8. API e ganchos de teia.

Verifiquem alcances estreitos, limites de taxa, tentativas indemponentes, assinaturas e manipulação duplicada.

9Cron.

Faça o agendamento unificado do produto e confirme todos os batimentos cardíacos necessários em Cron Setup/Diagnostics.

10 Segurança.

Verifique 2FA, CSRF/controlos de sessão, registros de auditoria, revogação chave e isolamento do espaço de trabalho.

11 Reforço e restauração

Restaure um backup atual em um ambiente de teste separado e verifique dados e configuração.

12 Observabilidade e retrocesso

Confirme registros/alertas, guarde identidades de pedidos e prove o procedimento de retrocesso.

⚠️
Só partir depois de cada portão necessário e viagem crítica ao negócio tem evidências atuais para a liberação exata e ambiente.
Desenvolvimento

Web Push em sites de terceiros

Navegador push notificações (incluindo OpsIQ Preciso de um funcionário da mesma ORIGEM como página.OpsIQ O widget carrega de seu OpsIQ implantação, então um site de terceiros não pode registrar OpsIQ O trabalhador do site, hospeda um pequeno arquivo no próprio domínio para permitir que o faça, as campanhas são feitas através dos dois métodos suportados.

Como funciona
-Push na internet.Uma notificação de impulso do SO acima de dois cartões de entrega: VAPID embutido e feixes de empurrador.Sua loja.Seu carrinho está esperando. 10% Hoje não.AgoraIncorporado (VAPID)Nenhum terceiro.Host um arquivoVigas de empurradorUse sua conta.Aloje o trabalhador.
-Push na internet.

Por que isso é necessário?

Navegadores só deixam uma página registrar um trabalhador de sua própria origem.OpsIQ implantação, então ele não pode instalar o push worker em um site do cliente, até que você hospede o trabalhador na origem desse site, o widget silenciosamente ignora push (sem erro, sem assinatura).OpsIQ Push Campaigns publica através de ambos.

Opção A: Auto-hospedado Web Push (VAPID, sem terceiros)

1. Baixe o trabalhador do seu OpsIQ Implementação: https://YOUR-OPSIQ/opsiq/opsiq-push-sw.js

2. Envie para o seu Raiz da web Então, é possível alcançar em https://yoursite.com/opsiq-push-sw.jsO widget auto-detecta este caminho Na própria origem da página e registra, nenhuma mudança de trecho necessária.

Opcional: Se você deve hospedá-lo em um caminho não padrão, aponte o widget para ele Antes Só é aceito quando a mesma origem:

Opcional · somente se o arquivo não estiver na raiz da web
<script>window.OpsIQ=window.OpsIQ||{};window.OpsIQ.pushSwUrl="/custom/opsiq-push-sw.js";</script>

3. Em OpsIQ, gerar chaves VAPID (Configurações → Cliente Chat AI → Avançado → Web Push) O widget então pede aos visitantes permissão de notificação e as assina.

Atrás de um CDN.Cloudflare Certifique-se /opsiq-push-sw.js retorna HTTP 200 (expurgar o tesouro se fosse 404 Antes de você enviar; um cache 404 Vai bloquear o registro).

Opção B · Vigas de empurrador (fornecedor gerenciado)

1. Em OpsIQ configurações definir o provedor de push para Vigas de empurrador E entre em seus feixes ID da instância e Chave secreta.

2. Hospede o trabalhador de serviço dos feixes na raiz do site como /service-worker.jsEntendido. https://YOUR-OPSIQ/opsiq/pusher-beams-service-worker.jsOu fundir essa linha com seu root worker existente:

Operário de feixes, anfitrião em https://yoursite.com/service-worker.js
importScripts("https://js.pusher.com/beams/service-worker.js");

3. O widget carrega automaticamente os feixes. SDK e assina cada visitante para o interesse por local opsiq-site-<your-site-key>Não é necessário mais fiação.

Como as campanhas se entregam

Push Campanhas publicam através Os dois. métodos de uma vez: visitantes no trabalhador auto-hospedado VAPID obter o Web Push criptografado, e os visitantes subscritos via Pusher Beams obter o Beam's publicar.

HTTPS é necessário. O chat de administrador já usa o mesmo mecanismo de interesse dos Beams para alertas de operador.

Operações

Solução de problemas

Problemas comuns e como consertá-los.

Geral

Página em branco+

Verifique os registros de erro do PHP. 8.4+), falta de extensão, conexão DB falhou, permissões de arquivos erradas.

O painel mostra zeros.+

Cheque: widget instalado? IP Excluído?

IA

AI não responde.+

Checar: provedor configurado? API Chave válida (usar conexão de teste)? Orçamento esgotado? Área de trabalho AI config correta?

AI dá respostas erradas.+

Checar: base de conhecimento atualizada?

AI é lenta.+

Depende: fornecedor API velocidade, tamanho do contexto (grande KB = mais tokens = mais lento), latência da rede.

Rastreando

Widget faltando+

Checar: script na página fonte, erros JS no console, bloqueio CSP, bloqueador de anúncios?

País desconhecido+

GeoIP não configurado. Cloudflare (automático) ou banco de dados MaxMind GeoLite2.

Bilhetes

E-mails não criam ingressos.+

Checar: caixa de correio conectada? IMAP Configurações corretas?

Resposta automática não funciona.+

Verificado: habilitado, autorizado pelo departamento?

Conectores

A conexão falhou.+

Checar: credenciais corretas? API Acessível do servidor? URL Correto?

Conectado, mas sem dados.+

Checar. API Sistema de navegação ativado, Cron correndo?

Desempenho

Páginas lentas.+

Verifique: desempenho do banco de dados (SHOW PROCESSSLIST), memória PHP (aumento para 1GB), habilitar opcache, reduzir período de retenção.

Operações

Widget não registra visitas

Use essa verificação quando o widget carregar incorretamente ou o Live Feed permanecer vazio.

Quando o widget não é visitas de registro, verificar a chave do site, carregar a página em um navegador privado, verificar o navegador Network / Console painéis para bloqueio de sinal ou widget pedidos, revisão Conteúdo-Segurança-Política e bloqueadores de anúncios, confirmar que o site está ativo em OpsIQ Uma bolha de bate-papo visível não prova por si só que o farol analítico foi aceito.

Referência

Glossário

Definições para termos usados em toda parte OpsIQ.

Ação.

Algo que a IA pode fazer através de um conector ou da plataforma.

Agente.

Um membro da equipe com acesso limitado, ou um agente de IA.

BYOK

Traga sua própria chave, você fornece sua própria IA. API Chave.

Conector

Um plugin integrando uma plataforma externa com OpsIQ.

CSAT

Pontuação de satisfação do cliente.

Combinado.

Uma oportunidade de receita no CRM.

Departamento

Uma categoria de passagem para controle de acesso e roteamento.

Escadagem

Passando uma passagem para um departamento diferente ou de IA para humano.

GeoIP

Detecção de localização do visitante. IP Endereço.

Demissão

Transferindo uma conversa de IA para humano.

Token de identidade

Assinado para identificar um visitante do site.

Base de conhecimento

Artigos que a IA usa para responder perguntas.

Chumbo

Uma visita mostrando intenção de compra.

Marcador principal

0-100 Número indicando probabilidade de conversão.

Fase do ciclo de vida

Onde um cliente está, líder, prospecto, cliente em risco, churned.

AI Gerenciado

Al providenciou como parte de seu OpsIQ Plano.

Pipeline

Conselho visual de etapas do acordo.

RBAC

Controle de Acesso Baseado em Papel.

Sessão

Uma série de visualizações em uma janela de tempo livre.

Chave do site

Identificador único para um site rastreado.

SLA

Acordo de Nível de Serviço, tempo de resposta ao alvo.

Token

Unidade de mensagem da IA. 4 caracteres = 1 Token.

Confie em Camada.

Sistema de segurança controlando a autonomia da IA.

Webhook

Chamada HTTP para notificações de eventos.

Widget

JavaScript Código incorporado em seu site.

Espaço de trabalho

Um site com seu próprio rastreamento, IA, conectores e equipe.

Referência

Consiga mais ajuda.

Se esta documentação não responder à sua pergunta:

Admin. Al.

Clique em "Pergunte OpsIQ Tem acesso a essa documentação e seus dados da plataforma.

Bilhete de apoio.

Incluindo: o que você tentou, o que aconteceu, o quê esperava, e qualquer mensagem de erro.

E-mail

E-mail com a chave de sua licença e descrição do problema.

Dicas para pedidos de apoio eficazes.

Inclua a página.

Qual página de administração (URL ou nome).

Inclua o cenário.

Nome exato e valor atual.

Inclua o erro.

Mensagem de erro exata com códigos.

Inclua os passos

O que você fez, passo a passo.

Incluir esperado vs real

O que deveria acontecer contra o que aconteceu.

💡
Quanto mais específico seu pedido, mais rápido a resposta. "Não funciona" requer investigação. 502"recebe uma resposta direta.