Dados da loja para o bot
O bot da IA no chat pode responder não só com base na base de conhecimento, mas também com dados da loja em tempo real: onde está o pedido, qual é o código de rastreamento, se o produto está em estoque, quanto custa a entrega, como devolver uma compra. E, se você permitir, pode cancelar um pedido não pago ou enviar à loja uma solicitação de devolução ou de alteração da entrega. Para isso, a loja se conecta ao bot pelo protocolo MCP (Model Context Protocol): o bot chama as ferramentas da loja, e a loja responde com os dados.
A loja pode ser conectada em qualquer plano, mas o bot, como toda a IA no chat, funciona em plano pago: as respostas com dados da loja são cobradas como as respostas comuns da IA, com o saldo do projeto; veja Cobrança.
Conexão
O jeito mais simples é usar o nosso módulo para a loja. O módulo sobe o servidor sozinho e o conecta ao projeto quando você salva as configurações:
| Plataforma | Onde ativar |
|---|---|
| WooCommerce | WooCommerce → Settings → OneTrace.ru → AI chat bot: store MCP |
| Magento 2 | Stores → Configuration → OneTrace.ru → AI chat bot: store MCP → Connect to the chat bot |
| 1C-Bitrix | Configurações do módulo → aba do site → bloco AI chat bot: store MCP → Connect to the chat bot |
A chave secreta do módulo precisa da permissão “Conexão do servidor MCP da loja ao bot de IA” (chats.manage). As permissões de uma chave não podem ser alteradas depois da criação: se a chave do módulo não tiver essa permissão, crie na seção Chaves de API uma chave nova com as mesmas permissões e mais esta e informe-a nas configurações do módulo. Os sites de um mesmo projeto são conectados uma única vez.
Uma loja própria em PHP ou Laravel se conecta com o servidor pronto da biblioteca PHP e do pacote Laravel — o desenvolvedor só precisa escrever os handlers das ferramentas. Qualquer outro servidor que cumpra o contrato MCP da loja é conectado manualmente: em Chats → Configurações do chat → Bot → Loja (MCP), informe o endereço https://…, a chave de acesso emitida pela loja e um nome. O contrato, com a descrição das ferramentas, dos erros e da verificação do cliente, está na seção Para desenvolvedores.

Na seção Loja (MCP) você vê se o servidor está funcionando e quais ferramentas a loja liberou para o bot. A chave liga/desliga desativa o servidor temporariamente, e o botão de atualizar verifica o servidor de novo e relê as ferramentas (a plataforma também faz isso sozinha uma vez por dia).
O que o bot pode fazer
Quem decide o que o bot pode fazer é a loja, nas configurações do módulo. Por padrão, só a leitura vem ativada:
| Ferramenta | O que o bot faz |
|---|---|
| Pedidos do cliente, pedido | encontra os pedidos do cliente e informa os detalhes: itens, valor, pagamento, forma de entrega, endereço |
| Rastreamento | informa a transportadora e o código de rastreamento e envia o link de acompanhamento |
| Disponibilidade e preços | procura o produto pelo nome ou SKU e diz se está disponível e em quais variações |
| Entrega | lista as formas de entrega com o preço e o valor mínimo para frete grátis |
| Condições de devolução | resume as condições de devolução da loja |
As ações ficam desativadas até que a loja as libere:
| Ação | O que acontece |
|---|---|
| Cancelamento do pedido | o bot cancela um pedido em que nada foi pago nem enviado |
| Solicitação de devolução | a solicitação vai para a loja como comentário no pedido e por e-mail para a equipe |
| Alteração da entrega | a solicitação de novo endereço, data ou horário vai para a loja da mesma forma |
As descrições das ferramentas para o modelo são definidas pela plataforma, não pela loja, e o bot trata as respostas da loja como dados, não como instruções. Se a resposta do bot tiver preços, prazos ou promessas que não estão nos dados da loja, a verificação da resposta não a deixa chegar ao cliente.
Verificação do cliente
Os pedidos e as ações sobre eles ficam disponíveis apenas para um cliente verificado — o bot não mostra o pedido de outra pessoa nem confirma que ele existe. O cliente pode ser verificado de duas formas:
- Login no site. Se o cliente entrou na conta da loja, o módulo passa ao widget do chat um token assinado — o bot já sabe quem está escrevendo.
- Código. Nos mensageiros e para visitantes sem login, o bot pede o e-mail cadastrado na loja, a loja envia para ele um código de 6 dígitos e o cliente digita o código no chat. O código vale por 10 minutos, com no máximo 5 códigos por hora para o mesmo endereço.
A verificação vale por 24 horas. O operador a vê na janela da conversa: “cliente confirmado: entrou no site” ou “cliente confirmado com código”. O token do cliente fica armazenado criptografado na conversa; nem o modelo nem os operadores têm acesso a ele.
Ações na loja
O bot só executa uma ação depois do consentimento explícito do cliente:
- O bot descreve o que vai fazer — número do pedido, itens — e pede confirmação.
- O cliente concorda no chat, por exemplo, “sim, pode cancelar”.
- Um modelo de avaliação separado verifica se o cliente concordou exatamente com essa ação. Uma pergunta, uma dúvida ou outro pedido não contam como consentimento.
- A loja executa a ação; uma nova chamada da mesma ação não a repete.
Na conversa aparece a linha “O bot executou na loja: …” com o resultado e, no log de auditoria do projeto, o registro “Ação do bot na loja”. O rascunho do operador usa os dados da loja apenas para leitura: as ações o próprio operador executa, na loja.

Para desenvolvedores
Um servidor próprio pode ser conectado se cumprir a versão 1 do contrato MCP da loja. Para PHP e Laravel, o contrato já está implementado: a classe StoreMcp\Server da biblioteca PHP e a rota POST /onetrace/mcp do pacote Laravel — basta escrever os handlers das ferramentas.
Transporte. MCP Streamable HTTP, versão do protocolo 2025-06-18: um único endereço, requisições POST com JSON-RPC 2.0, resposta em JSON ou um fluxo text/event-stream com uma única resposta. O endereço deve ser https:// em um IP público, sem redirecionamentos. A resposta deve chegar em até 10 segundos e ter no máximo 256 KB. A plataforma chama initialize, notifications/initialized, tools/list e tools/call; o cabeçalho Mcp-Session-Id é suportado, mas não obrigatório.
Acesso. Toda requisição traz Authorization: Bearer <chave>; a chave é criada pela loja e tem pelo menos 32 caracteres aleatórios. Requisição sem chave ou com outra chave recebe a resposta 401.
Marca do contrato. Na resposta a initialize, o servidor declara capabilities.experimental["onetrace/store"] = { "version": 1 } — sem isso, o servidor não é conectado.
Ferramentas. Os nomes são exatamente os da tabela; tools/list retorna apenas as liberadas pelo dono da loja. Cada uma tem a anotação readOnlyHint: true (leitura) ou destructiveHint: true (ação) e _meta["onetrace/auth"]: customer exige cliente verificado, none não. O resultado é structuredContent, com o mesmo JSON como texto em content[0].text. Valores no formato { "amount": 1250.5, "currency": "RUB" }, datas em ISO 8601.
| Ferramenta | Acesso | Entrada | Resultado |
|---|---|---|---|
store_start_verification |
none | contact, order |
sent, channel, destination |
store_verify |
none | contact, code |
customer_token, expires_at |
store_get_customer |
customer | — | id, email, phone, first_name |
store_find_orders |
customer | status, limit (até 20) |
orders: order, created_at, status, status_label, total, items_count |
store_get_order |
customer | order |
pedido com items, total, payment, shipping, can_cancel, can_return |
store_get_tracking |
customer | order |
carrier, tracking_number, tracking_url, status, events |
store_check_availability |
none | query, sku ou product_id |
products (até 10) com in_stock, quantity, variants |
store_get_delivery_options |
none | country, city, postcode, total |
methods: name, price, free_from, min_days, max_days |
store_get_return_policy |
none | — | days, conditions, text, url |
store_cancel_order |
customer | order, reason |
order, status, message |
store_create_return |
customer | order, items, reason |
return_id, status, instructions |
store_change_delivery |
customer | order, address, date, time_window |
order, message |
O status do pedido é um destes: pending, processing, on_hold, shipped, delivered, completed, cancelled, refunded, failed. Para o pedido de outro cliente, a resposta é not_found, como se ele não existisse.
Cliente. O token customer_token é emitido e verificado pela loja, com validade de no máximo 24 horas. A loja envia o código de confirmação por conta própria e responde da mesma forma, exista ou não esse cliente; o código tem 6 dígitos, vale por 10 minutos, com até 5 tentativas e até 5 códigos por hora por endereço. Para o cliente logado, a página passa o token ao rastreador: cdp.chatCustomer('…').
Contexto da chamada em params._meta: onetrace/customer_token, onetrace/language (idioma da conversa), onetrace/conversation e, nas ações, onetrace/confirmed: true e onetrace/idempotency_key. O servidor recusa uma ação sem onetrace/confirmed; uma repetição com a mesma chave de idempotência retorna o mesmo resultado sem repetir a ação.
Erros: isError: true e structuredContent: { "error": "<código>", "message": "<texto para o cliente>" }:
| Código | Quando |
|---|---|
auth_required |
é preciso um cliente verificado |
invalid_code |
código errado ou expirado |
not_found |
o pedido ou o produto não existe |
not_allowed |
a ação não está disponível nesse estado ou foi desativada pelo dono da loja |
invalid_input |
argumentos inválidos |
rate_limited |
requisições ou códigos demais |
unavailable |
falha temporária da loja |
Conexão pelo módulo. O módulo registra o próprio servidor com uma chave secreta com a permissão chats.manage: PUT /api/v1/chat/store-mcp com url, key, name, platform conecta ou atualiza o servidor, e DELETE /api/v1/chat/store-mcp com url o desconecta.