O problema: cinco dias é tempo demais
Imagine perder 12% das contas em risco simplesmente porque a equipe de retenção demorou cinco dias para identificar e contatar clientes insatisfeitos. Quando alguém finalmente revisava planilhas de CSAT (Pontuação de Satisfação do Cliente, uma avaliação de 1 a 5 dada pelo cliente após cada atendimento) e transcrições de chamadas manualmente, esses clientes já tinham ido embora. Esse cenário real de uma empresa SaaS de médio porte motivou a AWS a publicar um guia completo de como o Amazon Quick pode comprimir esse ciclo de resposta de dias para minutos.
Este post explica como funciona esse pipeline automatizado de retenção e o que você precisa para reproduzi-lo no seu ambiente.
Visão geral da solução
O pipeline conecta quatro componentes do Amazon Quick em sequência, cada um com uma responsabilidade clara:
- Quick Dashboard: monitora KPIs do contact center, incluindo CSAT, FCR (Resolução no Primeiro Contato — se o problema foi resolvido em uma única chamada) e AHT (Tempo Médio de Atendimento). Identifica clientes com pontuação CSAT igual ou inferior a 2.
- Quick Chat Agent: usa linguagem natural para consultar dados estruturados e transcrições de chamadas não estruturadas. Combina sinais quantitativos com análise de sentimento qualitativa — revelando por que um cliente está em risco, não apenas que ele está.
- Quick Flows: transforma a análise baseada em chat em uma automação reutilizável, que pode rodar sob demanda ou em agendamento, sem intervenção manual. O resultado final é uma lista estruturada de clientes em risco que etapas subsequentes podem consumir diretamente.
- Quick Automate: orquestra o pipeline completo em múltiplas etapas — ingere a lista de clientes em risco, pontua cada um via MCP Action customizada, ranqueia por prioridade, gera cartas de retenção personalizadas e faz upload no Amazon S3 para distribuição.
Arquitetura do pipeline Automate
O pipeline executa cinco etapas sequenciais:
- Etapa 1: Download dos dados de clientes em risco e do dataset do contact center a partir do Amazon S3.
- Etapa 2: Pontuação de retenção — cada cliente é avaliado com base no CSAT e na recência do problema, e os dois casos de maior prioridade são selecionados.
- Etapa 3: Geração de cartas de bônus personalizadas, referenciando os problemas específicos de cada cliente.
- Etapa 4: Criação de PDF com as cartas geradas.
- Etapa 5: Upload dos PDFs no Amazon S3 para entrega e arquivamento.
Pré-requisitos
Para seguir o walkthrough, você vai precisar de:
- Uma conta AWS com o Amazon Quick ativado (Dashboard, Chat, Flows e Automate).
- Um dataset estruturado de contact center em formato CSV chamado
contact_center_data.csv, com as colunas:customer_id,csat_score,call_date,call_reason,team_id. - Documentos de transcrição de chamadas chamados
Call_transcripts.docxem formato PDF ou TXT. - Um bucket Amazon S3 para entrada e saída do pipeline (exemplo:
amzn-s3-demo-bucket).
Passo a passo da construção
1. Preparando o Quick Space
O Quick Space é a camada de dados que dá ao Chat Agent acesso tanto a datasets estruturados quanto a documentos não estruturados. No console do Quick, crie um Space chamado ContactSpace, adicione o dataset contact_center_data e faça upload do arquivo Call_transcripts.docx. Aguarde o status Ready aparecer para ambos antes de continuar.
2. Criando o conector MCP Action
Uma MCP Action é um endpoint serverless que estende o Quick Automate com lógica de negócio customizada. O MCP (Model Context Protocol) é um padrão aberto que permite que assistentes de IA como o Amazon Quick chamem ferramentas externas em um formato consistente de requisição e resposta. Consulte o guia de desenvolvedor MCP do Quick Automate para mais detalhes.
O processo envolve três partes: criar uma função AWS Lambda com o algoritmo de pontuação, expô-la via Amazon API Gateway e registrar o endpoint no Amazon Quick.
A função Lambda abaixo implementa um servidor MCP mínimo. Ela trata os três métodos JSON-RPC que o Amazon Quick utiliza: initialize (handshake), tools/list (anuncia a ferramenta score_customers) e tools/call (executa a pontuação quando invocada):
import json
# Tool catalog advertised to Amazon Quick during discovery (tools/list).
# inputSchema uses JSON Schema Draft 7 (required is an array at the root).
TOOLS = [
{
"name": "score_customers",
"description": "Scores contact center customers by retention priority.",
"inputSchema": {
"type": "object",
"properties": {
"customers": {
"type": "array",
"description": "Customer records to score.",
"items": {
"type": "object",
"properties": {
"customer_id": {"type": "string"},
"csat_score": {"type": "number"},
"days_since_last_issue": {"type": "number"}
},
"required": ["customer_id"]
}
}
},
"required": ["customers"]
}
}
]
def score_customers(customers):
scored = []
for c in customers:
score = 0
# Weight factors: low CSAT = high churn risk
score += (5 - c.get("csat_score", 3)) * 20
# Recency: issues in last 7 days score higher
score += 30 if c.get("days_since_last_issue", 30) < 7 else 0
scored.append({
"customer_id": c["customer_id"],
"retention_score": round(score, 1),
"explanation": f"CSAT:{c.get('csat_score')}, days_since_last_issue:{c.get('days_since_last_issue')}"
})
scored.sort(key=lambda x: x["retention_score"], reverse=True)
return scored
def lambda_handler(event, context):
"""MCP-compliant JSON-RPC handler for customer retention scoring."""
req = json.loads(event.get("body", "{}"))
method = req.get("method")
req_id = req.get("id")
def rpc(result):
return {"statusCode": 200, "headers": {"Content-Type": "application/json"},
"body": json.dumps({"jsonrpc": "2.0", "id": req_id, "result": result})}
if method == "initialize":
return rpc({
"protocolVersion": "2024-11-05",
"capabilities": {"tools": {}},
"serverInfo": {"name": "customer-scoring", "version": "1.0.0"}
})
if method == "tools/list":
return rpc({"tools": TOOLS})
if method == "tools/call":
params = req.get("params", {})
if params.get("name") == "score_customers":
args = params.get("arguments", {})
scored = score_customers(args.get("customers", []))
return rpc({"content": [{"type": "text", "text": json.dumps(scored)}]})
return {"statusCode": 200, "headers": {"Content-Type": "application/json"},
"body": json.dumps({"jsonrpc": "2.0", "id": req_id, "error": {"code": -32601, "message": "Method not found"}})}
Com a função implantada, crie o endpoint via AWS CLI. Execute os comandos abaixo em ordem, substituindo os valores entre <> pelos seus próprios:
# 1. Create REST API
aws apigateway create-rest-api --name customer-scoring-api --endpoint-configuration types=REGIONAL
# Note the "id" value from the response -> <API_ID>
# 2. Get root resource ID
aws apigateway get-resources --rest-api-id <API_ID>
# Note the "id" value -> <ROOT_RESOURCE_ID>
# 3. Create POST method
aws apigateway put-method --rest-api-id <API_ID> --resource-id <ROOT_RESOURCE_ID> --http-method POST --authorization-type NONE
# 4. Integrate with Lambda
aws apigateway put-integration --rest-api-id <API_ID> --resource-id <ROOT_RESOURCE_ID> --http-method POST --type AWS_PROXY --integration-http-method POST --uri "arn:aws:apigateway:<REGION>:lambda:path/2015-03-31/functions/arn:aws:lambda:<REGION>:<ACCOUNT_ID>:function:<LAMBDA_FUNCTION_NAME>/invocations"
# 5. Allow API Gateway to invoke Lambda
aws lambda add-permission --function-name <LAMBDA_FUNCTION_NAME> --statement-id apigateway-invoke --action lambda:InvokeFunction --principal apigateway.amazonaws.com --source-arn "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<API_ID>/*/POST/"
# 6. Deploy
aws apigateway create-deployment --rest-api-id <API_ID> --stage-name prod
# Your endpoint URL:
# https://<API_ID>.execute-api.<REGION>.amazonaws.com/prod/mcp
Consideração para produção: este walkthrough usa o API Gateway diretamente na frente do Lambda por simplicidade. Para cargas de trabalho em produção, a AWS recomenda usar gateways Agentcore na frente do Lambda, que oferecem autenticação, throttling e observabilidade nativos.
Depois de obter a URL do endpoint, registre o conector no Amazon Quick: acesse More > Connectors, selecione Model Context Protocol, informe o nome mcp-customer-score, a URL do endpoint e tipo de conexão Public network. Na etapa de autenticação, selecione None (adequado para demonstração; em produção, use OAuth 2LO). Publique e aguarde o status Ready.
3. Criando o Chat Agent personalizado
O Chat Agent conecta o ContactSpace e o conector MCP registrado. O prompt de sistema é o componente crítico — ele instrui o agente sobre como interpretar os dados, quais perguntas fazer nas transcrições e quando invocar a ferramenta de pontuação. Crie um agente chamado Contact Center Strategy Analyst com o seguinte prompt:
You are a Contact Center Strategy Analyst. You have access to:
1. contact_center_data.csv - structured CSAT, call, and team data
2. Call_transcripts.docx - unstructured call transcript documents
3. mcp-customer-score tool - calculates retention priority scores
When asked about at-risk customers:
- Query the structured dataset for low CSAT scores
- Cross-reference with transcripts to identify sentiment and root causes
- When asked to score customers, call the mcp-customer-score tool
- Always explain WHY a customer is at risk, not just that they are
- Format results as tables when showing multiple customers
4. Analisando clientes em risco com o Chat Agent
Com o agente configurado, use-o para identificar e entender os clientes em risco. Comece com o prompt:
Show me customers that rated low CSAT (at or below 2) using contact center data
O agente retorna uma tabela com IDs de clientes, datas de chamada, pontuações CSAT e métricas relacionadas — isso identifica quem está em risco, mas não o porquê. Aprofunde com:
Using the call transcripts, summarize the main reasons these customers were dissatisfied
O agente lê as transcrições e resume os achados. Por exemplo, pode identificar que o Cliente 4471 expressou frustração repetida com erros de cobrança em três chamadas, enquanto o Cliente 8832 teve uma única interação intensa sobre uma interrupção de serviço. Essa distinção importa: frustrações repetidas exigem uma abordagem de retenção diferente de um único incidente grave.
Para gerar um resultado estruturado que a automação downstream possa consumir, use o prompt final:
For the top 20 most at-risk customers, return only a JSON array where each object has customer_id, csat_score, and days_since_last_issue (calculated from the most recent call date). Do not include any other text.
Salve o JSON retornado como at_risk_customers.json e faça upload no seu bucket S3 (por exemplo, no prefixo inputs/).
5. Convertendo a análise em um Quick Flow
O Quick Flows permite transformar a conversa do chat em uma automação reutilizável com um único passo. Na interface do Chat, selecione o símbolo + na barra de ferramentas, depois Flow. Selecione Generate new flow, mantenha o prompt sugerido e clique em Generate. Após revisar, publique o Flow. Ele agora pode ser compartilhado com a equipe ou agendado para rodar semanalmente.
6. Criando o workflow no Quick Automate
Antes de criar o projeto de automação, é necessário criar um Automation Group — o agrupamento que define quais conectores estarão disponíveis. No Amazon Quick, acesse More > Automations, vá para a aba Groups e crie um grupo adicionando as ações necessárias: Amazon S3 (duas conexões: uma para dados de origem e outra para uploads de saída) e o agente MCP customizado criado anteriormente.
Com o grupo criado, crie o projeto de automação associado a ele. O pipeline é construído em quatro etapas principais dentro do canvas do Automate, cada uma descrita via linguagem natural para o assistente de chat da ferramenta:
- Etapa 1 — Carregar dados do S3: baixa o arquivo
contact_center_data_complete.csvdo bucket S3, lê como CSV com headers e armazena o resultado comocall_data. - Etapa 2 — Filtrar clientes de alto risco: baixa o arquivo
input/NegativeSentiment.docxdo bucket S3, que contém os clientes com sentimento negativo identificados anteriormente. - Etapa 3 — Agregar métricas por cliente: itera sobre os resultados agregados e registra, para cada cliente, métricas como total de chamadas, CSAT médio, taxa de FCR, taxa de resolução, transferências médias, tempo médio de espera e taxa de reclamações.
- Etapa 4 — Identificar top clientes e gerar cartas: usa um agente inline no modo "pro" para analisar as métricas agregadas e identificar os 2 clientes de maior pontuação. Para cada um, gera uma carta em HTML formatada com oferta de crédito bônus de US$ 100, converte para PDF e faz upload no S3 com o caminho
output/{customer_id}{timestamp}.pdf.
7. Testando e implantando a automação
No canvas, use o modo Debug (ou Test) para executar o pipeline completo. Verifique nos logs se a etapa de pontuação retorna os dois clientes corretos, se as cartas referenciam os problemas específicos de cada cliente e se o upload no S3 é concluído com sucesso. Quando o resultado estiver correto, clique em Commit para criar uma versão e depois em Deploy. Para execução agendada, configure um trigger com frequência, horário de início e fuso horário na página de Deployment.
Para mais detalhes sobre testes e implantação, consulte a documentação oficial: testando automações e implantando automações.
Resultados observados
Após implantar o pipeline em ambiente de teste com dados históricos de contact center, a AWS reporta melhorias em quatro dimensões — com a ressalva de que os resultados podem variar conforme a implementação:
- Tempo de resposta: caiu de dias de identificação e redação manuais para minutos de execução automatizada.
- Taxa de retenção: melhorou entre os clientes sinalizados em comparação com a abordagem reativa anterior. O contato mais rápido, enquanto a experiência ainda está fresca, impulsionou essa melhoria.
- Aceitação das ofertas: aumentou quando as cartas referenciavam o problema específico do cliente em vez de oferecer um desconto genérico.
- Tempo de implantação: menos de um dia. Usuários de negócio construíram o workflow completo via linguagem natural e interfaces point-and-click.
Troubleshooting
Os problemas mais comuns e suas resoluções:
- Chat Agent retorna "No data found": indexação do Space incompleta. Verifique o status do ContactSpace e aguarde o indicador Ready antes de executar consultas.
- Análise de sentimento genérica: transcrições não indexadas. Confirme que os documentos foram enviados para a seção Documents do Space.
- Automação não pontua clientes ou pontua os errados: JSON de clientes em risco não encontrado, ou o agente não o recebeu. Confirme que
at_risk_customers.jsonexiste no caminho S3 referenciado e que as instruções do agente referenciam a variável baixada. - MCP Action retorna timeout: endpoint sem resposta. Aumente o timeout da MCP Action ou reduza o escopo do dataset.
- Cartas genéricas ou sem detalhes do cliente: o agente gerador de cartas não recebeu os resultados da pontuação. Confirme que o prompt referencia a variável de saída da etapa de pontuação (inserida com @).
Limpeza dos recursos
Para evitar custos contínuos quando não precisar mais dos recursos:
aws s3 rm s3://amzn-s3-demo-bucket/inputs/ --recursive
aws s3 rm s3://amzn-s3-demo-bucket/output/letters/ --recursive
Além disso, exclua o workflow do Automate, o Flow, cancele o registro do endpoint MCP Action customizado e remova os dados enviados ao ContactSpace.
Conclusão
O walkthrough publicado pela AWS demonstra como construir um pipeline de retenção de clientes que vai dos dados brutos do contact center até ações de retenção direcionadas — sem escrever código de aplicação. A combinação do monitoramento de KPIs via Quick Dashboard, análise de transcrições via Chat Agent, automação reutilizável via Quick Flows e processamento em múltiplas etapas via Quick Automate forma um sistema coeso e operável por usuários de negócio.
O MCP Action connector estende o pipeline com lógica de pontuação customizada que reflete os critérios específicos de retenção de cada organização. O mesmo padrão pode ser aplicado a casos de uso adjacentes: monitoramento de saúde de contas de clientes, escalação de riscos de compliance ou recuperação proativa de serviço.
Para explorar mais, consulte a documentação do Amazon Quick e o framework de MCP Actions.
Fonte
Automating customer retention workflows in Amazon Quick (https://aws.amazon.com/blogs/machine-learning/automating-customer-retention-workflows-in-amazon-quick/)
Leave a Reply