Automatizando fluxos de retenção de clientes com o Amazon Quick

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.docx em 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.csv do bucket S3, lê como CSV com headers e armazena o resultado como call_data.
  • Etapa 2 — Filtrar clientes de alto risco: baixa o arquivo input/NegativeSentiment.docx do 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.json existe 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/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *