1
resposta

[Projeto] Desafio: Criar um script que resume e-mails usando a API Gemini

# Desafio: Criar um script que resume e-mails usando a API Gemini

import os
from google import genai

# Lista de 20 corpos de e-mail variados e realistas
email_bodies = [
    "Olá, gostaria de saber o status do meu pedido #12345. Ele foi feito na semana passada e ainda não recebi atualizações. Att., Maria",
    "Prezados, solicito a alteração do meu plano de internet para o pacote ultrafibra. Meu número de cliente é 987654. Obrigado, João",
    "Bom dia, estou com dúvidas sobre a nota fiscal emitida no dia 15/03. O valor parece incorreto. Podem revisar? Atenciosamente, Carla",
    "Senhores, preciso agendar uma visita técnica para reparo do ar condicionado na sala 302. Data sugerida: quinta-feira pela manhã. Abraços, Pedro",
    "Olá, gostaria de cancelar minha assinatura do serviço premium. Motivo: problemas financeiros. Meu ID é 554433. Att., Lucas",
    "Prezada equipe, solicito a segunda via do boleto referente ao mês de maio. Perdi o original. Desde já agradeço, Ana",
    "Boa tarde, estou insatisfeito com o atendimento recebido no último contato telefônico. Gostaria de registrar reclamação. Protocolo 778899. Carlos",
    "Olá, preciso de informações sobre garantia estendida para notebook modelo XPS 15. Comprei há dois meses. Obrigado, Fernanda",
    "Prezados, gostaria de saber se há vagas para estágio na área de marketing. Currículo anexo. Att., Beatriz",
    "Bom dia, solicito a portabilidade do meu número de celular para a operadora de vocês. Número: (11) 99999-8888. Grato, Rafael",
    "Senhores, por gentileza, atualizem meu endereço de entrega: Rua das Flores, 123 - Centro. Preciso que a próxima encomenda vá para lá. Obrigado, Mariana",
    "Olá, gostaria de saber o prazo de entrega do pedido #67890. Já se passaram 10 dias úteis. Aguardo retorno, Eduardo",
    "Prezada equipe de suporte, não consigo acessar minha conta desde a última atualização do sistema. Erro: 'Login inválido'. Meu login é user@email.com. Att., Sofia",
    "Boa tarde, estou com interesse em contratar o plano empresarial. Poderiam enviar orçamento para 50 usuários? Atenciosamente, Ricardo",
    "Olá, gostaria de elogiar o atendimento da funcionária Jéssica no dia 20/04. Foi muito prestativa. Parabéns! Isabela",
    "Prezados, solicito o reembolso do valor pago indevidamente na fatura de março. Valor: R$ 150,00. Boleto anexo. Att., Thiago",
    "Bom dia, preciso trocar a data da minha consulta agendada para 10/06. Pode ser para 12/06? Nome: Vanessa S. Obrigada",
    "Senhores, gostaria de saber se aceitam cartão de crédito como forma de pagamento para aquisição do curso online. Att., Gabriela",
    "Olá, não recebi o código de rastreio do meu pedido #34567. Podem reenviar? Grato, Felipe",
    "Prezada equipe, estou com dificuldades para instalar o software adquirido. O instalador trava na tela de licença. Meu SO é Windows 10. Att., Amanda"
]

def resumir_email(email_texto, client):
    """
    Envia o texto do e-mail para a API Gemini e retorna um resumo de uma linha.
    """
    prompt = f"Resuma em uma frase curta o que a pessoa queria no seguinte e-mail: {email_texto}"
    try:
        resposta = client.models.generate_content(
            model="gemini-1.5-flash",
            contents=prompt
        )
        return resposta.text.strip()
    except Exception as e:
        return f"Erro ao processar: {str(e)}"

def resumir_lista_de_emails(lista_emails, client):
    """
    Percorre a lista de e-mails e retorna uma lista de dicionários com indice, email_original e resumo.
    """
    resultados = []
    for idx, email in enumerate(lista_emails, start=1):
        resumo = resumir_email(email, client)
        resultados.append({
            "indice": idx,
            "email_original": email,
            "resumo": resumo
        })
    return resultados

# Exemplo de execução
if __name__ == "__main__":
    # Configura o cliente Gemini com a chave da variável de ambiente
    chave_api = os.environ.get("GEMINI_API_KEY")
    if not chave_api:
        print("Erro: Chave de API não encontrada. Defina a variável de ambiente GEMINI_API_KEY.")
    else:
        client = genai.Client(api_key=chave_api)
        print("Iniciando resumo dos e-mails...\n")
        resumos = resumir_lista_de_emails(email_bodies, client)
        for item in resumos:
            print(f"E-mail {item['indice']}:")
            print(f"Original: {item['email_original']}")
            print(f"Resumo: {item['resumo']}\n")

Eu resolvi o desafio separando em partes bem claras: primeiro deixei a lista com os 20 e-mails pronta, depois criei uma função para resumir um e-mail por vez e, por fim, outra função para passar por toda a lista e guardar os resultados de forma organizada. Assim, fica mais fácil entender o caminho do programa e também reaproveitar esse código depois, sem precisar refazer tudo.

1 resposta

Ei! Tudo bem, João?

Ficou excelente a sua resolução do desafio! Separar a lógica em funções específicas (resumir_email e resumir_lista_de_emails) torna o script muito mais organizado, fácil de ler e, como você bem pontuou, altamente reutilizável.

Além disso, a estrutura utilizando a biblioteca moderna google-genai com o modelo gemini-1.5-flash e o gerenciamento seguro da chave de API via os.environ mostram um cuidado técnico com a segurança e atualidade do projeto. O tratamento de exceções com try/except dentro da função também garante que o loop não quebre caso algum e-mail falhe.

Parabéns pelo excelente trabalho!

Foi tranquilo a prática ou você teve dificuldade em algum ponto?

Material Complementar
Esse conteúdo pode estar em inglês, para traduzi-lo utilize o tradutor automático do navegador ou clique com o botão direito do mouse sobre a página e selecione a opção Traduzir para o português.
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!