Conversas de Exemplo
Três cenários reais mostrando como o Claude encadeia as tools do MCP em uma conversa de verdade. Use como referência para entender o que pedir e como o LLM responde.
Cenário 1: Criar um agente de vendas do zero e testar
Cria o assistente, configura um gatilho de captura de lead com webhook, e roda um teste end-to-end com create_session + send_message.
Crie um assistente "Bia: Vendas Loja XYZ" com prompt de SDR para uma loja de roupas, em português, temperature 0.6. Em seguida adicione um gatilho que captura nome, email e telefone quando o cliente quiser comprar e dispara um POST para https://api.lojaxyz.com/leads com header Authorization: Bearer SECRET_TOKEN.
Vou em três passos: assistente, gatilho, action de webhook.
name = "Bia: Vendas Loja XYZ" prompt = "Você é a Bia, SDR da Loja XYZ. Qualifique o lead, entenda a necessidade e direcione para fechamento." language = "brazil-portuguese" temperature = 0.6
assistantId = 87 name = "captureLead" description = "Coleta nome, email e telefone quando o cliente demonstra intenção de compra." parametersJson = { "type": "object", "properties": { "nome": { "type": "string", "description": "Nome completo do cliente" }, "email": { "type": "string", "description": "Email do cliente" }, "telefone": { "type": "string", "description": "Telefone com DDD" } }, "required": ["nome", "email", "telefone"] }
assistantId = 87 triggerId = 153 type = "WEBHOOK" actionJson = { "url": "https://api.lojaxyz.com/leads", "method": "POST", "body": "{\"nome\":\"$nome\",\"email\":\"$email\",\"telefone\":\"$telefone\"}", "headers": [{ "key": "Authorization", "value": "Bearer SECRET_TOKEN" }] }
Pronto. Assistente 87, trigger 153, webhook configurado. Quer rodar um teste?
Quero. Simula um cliente que quer comprar uma camisa M branca: "Oi, quero comprar uma camisa M branca. Meu nome é João Silva, joao@email.com, 11999990000".
assistant_id = 87
session = "test_8a3f" message = "Oi, quero comprar uma camisa M branca. Meu nome é João Silva, joao@email.com, 11999990000"
A Bia respondeu confirmando o pedido e o gatilho captureLead disparou. O webhook foi chamado com sucesso (HTTP 200). Para ver o histórico completo posso rodar get_session("test_8a3f").
Cenário 2: Agendamento Feegow com referência a parâmetros
Mostra como referenciar parâmetros do gatilho dentro do actionJson, e como encadear duas actions Feegow para resolver paciente_id a partir de um CPF.
No assistente 42 (clínica), quero um gatilho scheduleAppointment que coleta CPF do paciente, ID do profissional, ID do procedimento, data (YYYY-MM-DD) e horário (HH:MM), e cria o agendamento no Feegow.
Vou criar o trigger com os 5 parâmetros e a action FEEGOW APPOINTMENT_CREATE. Lembre que dentro de actionJson os valores são nomes dos parâmetros, não placeholders.
assistantId = 42 name = "scheduleAppointment" description = "Cria um agendamento no Feegow após coletar CPF, profissional, procedimento, data e horário." parametersJson = { "type": "object", "properties": { "patientCPF": { "type": "string", "description": "CPF do paciente, só dígitos" }, "professionalId": { "type": "number", "description": "ID do profissional no Feegow" }, "procedureId": { "type": "number", "description": "ID do procedimento" }, "date": { "type": "string", "description": "Data no formato YYYY-MM-DD" }, "time": { "type": "string", "description": "Horário no formato HH:MM" } }, "required": ["patientCPF", "professionalId", "procedureId", "date", "time"] }
assistantId = 42 triggerId = 211 type = "FEEGOW" actionJson = { "type": "APPOINTMENT_CREATE", "data": { "paciente_id": "patientCPF", "profissional_id": "professionalId", "procedimento_id": "procedureId", "data": "date", "horario": "time", "local_id": 1 } }
- O
local_idficou fixo em1. Se a clínica tiver mais unidades, adicioneunitIdaos parâmetros do gatilho e troque por"local_id":"unitId". - O Feegow exige
paciente_idnumérico, não CPF. O ideal é o trigger ter uma actionFEEGOW PATIENT_SEARCHantes (recebecpf, devolve o ID) e o LLM encadeia. Quer que eu adicione?
Sim, adiciona o PATIENT_SEARCH antes.
assistantId = 42 triggerId = 211 type = "FEEGOW" actionJson = { "type": "PATIENT_SEARCH", "data": { "paciente_cpf": "patientCPF", "photo": false } }
O trigger 211 agora tem 2 actions executadas em ordem: primeiro PATIENT_SEARCH resolve o paciente_id a partir do CPF, depois APPOINTMENT_CREATE usa o ID retornado.
Cenário 3: Investigar uma conversa em produção
Mostra o ciclo completo de incidente: encontrar a sessão problemática usando as tools de histórico, identificar a causa, corrigir o prompt do assistente e validar com um teste.
Recebi uma reclamação que o assistente 42 mandou um link errado para um cliente hoje à tarde. Acha a sessão e me diz o que aconteceu.
Vou listar as sessões recentes do assistente 42 e procurar pelo link.
assistantId = 42 perPage = 20
assistantId = 42 perPage = 50 // match: link "lojaxyz.com/promocao-velha" // session: whatsapp:5511988887777
session = "whatsapp:5511988887777"
O fluxo: o cliente perguntou sobre a promoção de Black Friday, e o assistente respondeu citando a URL da promoção do ano passado. Olhando o assistente:
id = 42
O prompt tem um trecho hardcoded: "Nossa promoção atual está em https://lojaxyz.com/promocao-velha". É isso que precisa sair.
Tira esse trecho do prompt e bota uma instrução pro assistente sempre consultar a base de conhecimento pra promoções ativas.
id = 42 prompt = "...prompt original sem o link hardcoded, agora terminando com: 'Para qualquer pergunta sobre promoções, consulte a base de conhecimento: nunca cite URLs de memória.'"
Quer que eu rode um teste agora pra confirmar que ele vai buscar na base ao invés de cuspir o link velho?
Roda.
assistant_id = 42
session = "test_re9c" message = "Oi, qual a promoção de Black Friday de vocês?"
Resposta: "Deixa eu confirmar a promoção atual...": o assistente disparou a busca na base de conhecimento e devolveu o link correto. Bug resolvido.