Faça sua plataforma Al-operável.
Call 2,420 named operations through one contract-generated API, with least-privilege scopes, workspace pinning, dry-run validation and replay-safe writes. Subscribe to canonical events through HMAC-signed background webhooks, or build a governed package in the six-stage Connector Builder.
Pedido de acesso. Evento assinado.
PÓS-TACA DE UMA AÇÃO PARA /api/v1.php com uma chave de portador. OpsIQ Os eventos canônicos assinados saem através de uma fila de entrega assinada pelo HMAC com tentativas rastreáveis e repetições limitadas.
Da chave para a integração governada em Três passos.
Emitindo uma chave de menos privilégio, descobrindo o contrato gerado, rodando um roteiro e depois assinando um webhook quando sua aplicação precisar de entrega de eventos.
Pegue uma chave.
Registre-se e gere um portador de escopo. API Chave (opq_…) em configurações de desenvolvimento, e dar a cada integração apenas as superfícies que ele precisa.
Descubra e valide
Leia meta.actions, meta.action e meta.scopes; use dry_run para validar as escritas antes da execução.
Executar e assinar
Adicione uma chave de indemnidade para escrever, e então subscreva seu ponto final para os eventos canônicos que sua aplicação precisa.
Um padrão de conector. Cinco primitivos limpos.
Qualquer coisa específica de plataforma vive em um conector. OpsIQ O núcleo continua genérico, a IA permanece previsível, e sua integração permanece auditável.
Diga. OpsIQ O que aconteceu.
Emita eventos canônicos de sua plataforma, ou defina um evento personalizado governado.
Referência do eventoinvoice.paid, ticket.created, subscription.cancelled, customer.signed_up Ou o seu próprio.
Assinantes de fãs.O cérebro da IA, regras de automação, conectores de espelho e seus terminais de webhook todos reagem.
Ordem PrioritáriaEnvio determinístico para que os espelhos escrevam antes de alertar o fogo.
Diga. OpsIQ O que a IA está autorizada a fazer.
Cada operação nomeada recebe um contrato gerado: escopo, característica, leitura ou escrita tipo, risco, política de confirmação, pedido e esquema de resposta, suporte a seco, indemnidade e erros estáveis.
Esquema de ação.{
"action": "tickets.reply",
"kind": "write",
"scopes": ["tickets.write", "admin"],
"feature": "ticket_system",
"risk": "medium",
"confirmation": "recommended",
"idempotency": "supported",
"dry_run": true,
"request": { "type": "object" },
"response": { "required": ["success"] }
}
Empurre os eventos para sua pilha com provas criptográficas.
Subscribe any URL to any of the 52 deliverable events. OpsIQ POSTs the JSON payload signed with HMAC-SHA256 over the scheme version, the timestamp, the delivery ID and the body together, not the body alone, so yesterday's delivery cannot be replayed at you today.
$raw = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_OPSIQ_SIGNATURE'] ?? ''; // "v2=<hex>"
$ts = (int)($_SERVER['HTTP_X_OPSIQ_TIMESTAMP'] ?? 0);
$id = (int)($_SERVER['HTTP_X_OPSIQ_DELIVERY'] ?? 0);
if (abs(time() - $ts) > 300) http_response_code(401); // replay window
[$ver, $hex] = array_pad(explode('=', $sig, 2), 2, ''); // split the prefix
$signed = $ver . '.' . $ts . '.' . $id . '.' . $raw; // NOT the body alone
$expected = hash_hmac('sha256', $signed, $secret);
if (!hash_equals($expected, $hex)) http_response_code(401);
$event = json_decode($raw, true); // $id is stable across retries
Use HTTP direto ou gere o cliente que você preferir.
O General completo.API é publicado como OpenAPI 3.0.3 E os clientes de integração do PHP, além de Node e Python, cobrem eventos assinados e fluxos webhook. JSON superfície de ação diretamente.
const response = await fetch(`${base}/api/v1.php`, {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.OPSIQ_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
action: "tickets.reply",
dry_run: true,
idempotency_key: crypto.randomUUID(),
body: "Thanks. We are checking this now."
})
});
$payload = json_encode([
'action' => 'tickets.reply',
'dry_run' => true,
'idempotency_key' => bin2hex(random_bytes(16)),
'body' => 'Thanks - we are checking this now.',
]);
$ch = curl_init($base . '/api/v1.php');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('OPSIQ_KEY'),
'Content-Type: application/json',
],
]);
response = requests.post(
f"{base}/api/v1.php",
headers={
"Authorization": f"Bearer {os.environ['OPSIQ_KEY']}",
"Content-Type": "application/json",
},
json={
"action": "tickets.reply",
"dry_run": True,
"idempotency_key": str(uuid.uuid4()),
"body": "Thanks - we are checking this now.",
},
)
Conectar qualquer coisa.
Um conector é um pacote governado gerado ou importado através de Identidade, Auth, Teste, Ações, Gatilhos e Revisão. OpsIQ É permitido expor.
Abra o construtor de seis estágios.Inglês puro. Operação auditada desligada.
OpsIQ Ele percorre os contratos registrados, prepara a carga útil, pede confirmação quando a ação requer, e produz uma linha de auditoria completa quando executa, então uma IA que pode Atue. Nunca se torna uma IA em que não se pode confiar.
API superfície em um olhar.
One JSON POST surface exposes 2,420 named actions. Each generated contract declares auth scopes, read/write kind, risk, confirmation, request schema, dry-run, idempotency and stable errors.
ACTION tickets.replytickets.writeDryrun + IdempotênciaConfigurado / horaACTION security.reportsecurity.writeDryrun + IdempotênciaConfigurado / horaACTION platform.routes.writeadministradorConfirmação + chaveConfigurado / horaACTION meta.actionsDescoberta públicaLeia somenteConfigurado / horaACTION tickets.listtickets.readLeia somenteConfigurado / horaACTION connectors.listconnectors.readLeia somenteConfigurado / horahr.* Contratos · hr.read / hr.write escoposACTION hr.people.listhr.readLeia somenteConfigurado / horaACTION hr.people.createhr.writeDryrun + IdempotênciaConfigurado / horaACTION hr.org.treehr.readLeia somenteConfigurado / horahr Obtém uma recusa, não uma lista vazia. O que o PeopleOS HR é.Limites de taxa são configurados por chave em uma janela horária. X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset; um pedido rejeitado retorna 429 com Retry-AfterUse o OpenAPI 3.0.3 contrato Ou Colecção de carteiros Gerados dos mesmos registros de tempo.
Construir, testar e liberar Seis estágios.
Comecem de um perfil governado ou definam o contrato, o construtor valida cada etapa antes que ele gere um pacote de conectores auto-suficiente.
Validar com segurança, e depois passar o portão de liberação.
Uso dry_run O programa de validação do pacote verifica os nomes, configurações, procedência e arquivos necessários; os trabalhadores de segundo plano lidam com pesquisas reativas e entrega de saída.
Um pacote não pode reivindicar uma capacidade. O código não tem.
OpsIQ\Connectors\ConnectorContract Descobrir o tempo de execução, o Construtor, pacotes de primeira parte, conformidade, o General API Declare uma capacidade e três arquivos têm que concordar um com o outro antes OpsIQ Roteia uma única fileira até você.
- 01 connector.php A aula de corrida.
- 02 IdentityProvider.php Chave externa estável
- 03 SalesIngest.php -ConciliarSales ()
- 04 actions.json Nomeadas operações.
- 05 settings.json configuração do operador
- 06 connector_contract.json Autoridade legível por máquina
hmac-sha256 sobre uma carga determinística de SHA por arquivo...256 Hashes responde Isso foi modificado desde que assinouUm. ed25519 Respostas de assinatura Foi assinado por NabtechEditando um byte e o primeiro pára de combinar.
marketplace.json Está fora da assinatura por definição: o instalador escreve após assinar, então o editor nunca poderia ter assinado.
Um guarda que nunca falhou. não está provado.
Testes verdes não te dizem que nada quebrou hoje, e não dizem que o guarda que escreveu impediria a coisa escrita para parar, porque um guarda que nunca é exercitado passa exatamente como um guarda sem fazer nada, então paramos seu coração de propósito, e exigimos que o monitor grite.
211 /* A read role must never reach a destructive operation. */ 212- if ($isRead && $isDestructive) { 212+ if (false) { 213 $errors[] = "read role '{$role}' points at a destructive op"; 214 return false; 215 }
1[ ok ]hash sha256 4f2a9c1e… remember the file exactly as it is 2[ ok ]control exit 0 green BEFORE anything is touched 3[ ok ]mutate 1 match, lint ok one replacement, then php -l the mutant 4[RED ]prove exit 1 and "read role destructive" IS in the failures 5[ ok ]restore bytes written the original, not a regenerated copy 6[ ok ]verify sha256 matches and the check is green again ══ PROVEN. file restored, hash matched, 1 proof run, 0 failed.
A mutação nunca se aplicava.
O texto de busca não bate, o arquivo estava intacto, a suíte passou, e a prova gravada Verde sob o velho código Pegado por exigir uma combinação textual e comparar arquivos de ambos os lados.
A mutação quebrou outra coisa.
A suíte ficou vermelha porque o arquivo parou de analisar ou a armadilha morreu, e a prova registrou um vermelho que não tinha nada a ver com o guarda. Nomeado Teste entre as falhas.
Não pode deixar um mutante no disco.
Cada mutação copia o original para um sidecar fora da árvore servida pela web, escreve um marcador que nomeia a mudança notável, e é desfeito por um manipulador em cada saída.
Certificação é um comando. com um código de saída.
Not a review queue where somebody reads your code and forms an opinion. Run the same suites we run, on your own machine, before you submit. 8 published JSON Schemas under doc/contracts/schemas/ Cobrir configurações, ações, especificações do construtor, mapas de eventos de viagem e comércio, receitas de fluxo de trabalho, contratos de conectores e manifestos de liberação.
- manifests Analisar e concordar uns com os outros.
- Capacidades existem na aula de corrida.
- interfaces implementado onde declarado
- files Todos os arquivos necessários presentes.
- Ações Equilibrar o manifesto de ações.
- destructive declarar confirmação
- Identidade Uma chave externa estável, não um e-mail.
- Replay uma atualização repetida, nunca duplica.
- empresa declarações correspondem à extensão.
- Doutores. LEIA-ME, DEVELOPER, MUDANÇA
- Esquemas Cada JSON valida
$ php tools/test_connector_conformance_all.php --connector=acme
$ php tools/test_connector_json_schemas.php
$ php tools/verify_commerce_contracts.php
$ php tools/release_gate_connectors.php --require-signatures
Aponte o primeiro em uma conta real de não-produção com --live-settings=/secure/test-acme.jsonEnquanto você ainda está iterante, troque o último por --unsigned-okTrata uma assinatura desaparecida como um aviso esperado em vez de fingir que está bem.
Declarando o que pode vender é um arquivo, não um registro.
Um conector que pode vender declara qual dos É sua própria operações respondem OpsIQOs papéis canônicos do comércio, a presença do arquivo é o direito... ele aparece nos locais de venda no momento em que se declara e desaparece quando para, não há lista para entrar e ninguém para perguntar.
Um canônico. escrever A correspondência é estrutural, um substantivo de armazenamento ao lado de um verbo mutante, qualquer que seja sua convenção de nomeação, escrever a linha de negócios diretamente ignora os preços da plataforma, a disponibilidade do bloqueio e o correio de confirmação, e produz uma ordem em que o próprio sistema comercial só acredita. recovery Ou, então um tempo seria irrecuperável.
{
"commerce": {
"roles": {
"catalog_search": { "operation": "acme_search_products", "transport": "http" },
"order_get": { "operation": "acme_get_order", "transport": "http" },
"order_create": { "operation": "acme_create_order", "transport": "http",
"recovery": "acme_get_order" }
}
}
}
connector_contract.json é gerado e seus esquemas se configuram additionalProperties:falseEntão, um bloco escrito à mão iria falhar na validação e depois seria substituído no próximo gerador.
Um papel que não está em CommerceRole Não existe. OpsIQ Nunca deduz um nome de uma operação, porque um nome não é uma promessa.
A operação deve aparecer em seu actions.jsonDeclarar um que não existe promete ao cliente algo que então não produz nada.
O tempo de descanso mais perigoso é o que depois da plataforma já pode ter feito o trabalho, sem um olhar indemponente "escrevi minha terra", as únicas opções são tentar novamente cegar ou perder a ordem.
Qualquer papel de classe de pagamento também declara payment_profile com o Ambiente, webhook_verify usando o próprio esquema do provedor, e event_mapUm ambiente não declarado é como um provedor de modo teste recebe um pagamento ao vivo.
OpsIQ vs um Integração de DY.
Que plataforma de contrato, assinada e auditada, dá a você que enrolar seus próprios webhooks e encanamento de IA nunca vai funcionar.
| Capacidade | Role o seu próprio | OpsIQ |
|---|---|---|
| Portador de Escopo API + HMAC-assinado webhooks | Enrolado à mão | ✓ |
| A corrida a seco escreve: 24-Hora de replay bem sucedido | DIY | ✓ |
| 1m → 5m → 30m →2h → 12h Retrocede | Fila de DIY | ✓ |
| Registro de contrato de ação (AI não pode inventar chamadas) | — | ✓ |
| Política de confirmação antes dos efeitos colaterais | — | ✓ |
| Envelope de erro estável + identidades de solicitação | Registro manual | ✓ |
| HTTP direto + opções de cliente geradas | Escreva o seu próprio | ✓ |
| OpenAPI 3.0.3 contrato legível por máquina | Talvez. | ✓ |
| Construtor de seis estágios + pacote portão de liberação | Construa uma corrente de ferramentas | ✓ |
| Chaves de espaço de trabalho e limites horários | Varias | ✓ |
| Padrão do conector: código da plataforma permanece isolado. | — | ✓ |
Perguntas de desenvolvedor, -Respondeu.
Autenticação, contratos, tentativas de recuperação, geração de clientes, testes seguros e o modelo de conectores, antes da primeira solicitação de produção.
Authorization: Bearer opq_…Chaves podem ser irrestritas, restritas ou somente leitura, carregar escopos de menor privilégio, obedecer a um limite horário e pode ser preso a uma área de trabalho. X-OpsIQ-Signature, X-OpsIQ-Timestamp, X-OpsIQ-Event e X-OpsIQ-Delivery.hash_hmac('sha256', $rawBody, $secret) e comparar sua digest hexadecimal com X-OpsIQ-Signature usando hash_equalsValidar X-OpsIQ-Timestamp dentro da sua janela de repetição e use X-OpsIQ-Delivery como o identificador de entrega rastreável.dry_run em ações cujo contrato gerado o apoia, execute o teste de conexão limitado do Conector Builder, inspecione seus arquivos gerados, e passe o pacote conformação e libere portões antes de tratar o conector como pronto.settings.json, opcional actions.jsonO construtor de seis estágios o monta, o registro descobre, a conformidade e as portas de liberação validam.