Um bot para WhatsApp com uma persona que utiliza a API Assistant da OpenAI, oferecendo uma experiência de companhia de IA através do WhatsApp.
O Garra AI Companion é um bot para WhatsApp que conecta a poderosa API Assistant da OpenAI com o WhatsApp, permitindo que os usuários interajam com um assistente de IA através de suas mensagens no WhatsApp. O bot suporta mensagens de texto, notas de voz (com transcrição), imagens (com análise de visão) e processamento de arquivos (PDFs, TXT).
- Integração com WhatsApp: Conecte-se com usuários via WhatsApp
- API Assistant da OpenAI: Aproveite as capacidades de IA usando a API Assistant da OpenAI
- Suporte a Multimídia:
- Transcrição de notas de voz usando a API Whisper
- Análise de imagens com GPT-4 Vision
- Processamento de arquivos PDF e TXT
- Integração com API Externa: Conecte-se a serviços externos através de um serviço de API flexível
- Gerenciamento de Configuração: Configuração armazenada em banco de dados com interface web
- Persistência de Mensagens: Armazene o histórico de conversas em um banco de dados PostgreSQL
- Gerenciamento de Conversas: Pause/retome conversas
- Fila de Mensagens: Fila baseada em Redis para processar mensagens em ordem
- Autenticação: Autenticação baseada em código QR para WhatsApp Web
A aplicação consiste em vários componentes:
- Cliente WhatsApp: Gerencia a conexão com o WhatsApp Web usando
@periskope/whatsapp-web.js - Cliente OpenAI: Lida com interações com a API da OpenAI para Assistant, Vision e Whisper
- Banco de Dados: Banco de dados PostgreSQL para armazenar conversas, mensagens e configurações
- Fila Redis: Para processamento assíncrono de mensagens
- Servidor Express: Fornece uma API REST para gerenciar o bot
- Serviço de API Externa: Proxy genérico para conexão com APIs externas
- Thread: Representa uma conversa com um usuário
- ThreadMessage: Mensagens individuais em uma thread
- Config: Valores de configuração do sistema
- Usuário envia uma mensagem para o número do WhatsApp
- Bot recebe a mensagem via cliente WhatsApp Web
- Para mensagens de texto:
- As mensagens são agregadas com debounce (3s) para combinar mensagens fragmentadas
- A thread é criada ou recuperada do banco de dados
- A mensagem é enviada para a API Assistant da OpenAI
- A resposta é enviada de volta ao usuário
- Para mídia (notas de voz, imagens, arquivos):
- A mídia é processada imediatamente (transcrição, análise de visão, extração de texto)
- O resultado é enviado para a API Assistant da OpenAI
- A resposta é enviada de volta ao usuário
- Todas as mensagens são armazenadas no banco de dados
- Node.js (v14+)
- Banco de dados PostgreSQL
- Servidor Redis
- Chave de API da OpenAI
- Conta de WhatsApp
Crie um arquivo .env no diretório raiz com as seguintes variáveis:
# Configuração Principal
OPENAI_API_KEY=sua_chave_api_openai
ASSISTANT_ID=seu_id_de_assistente
BOT_NAME=Garra
WHATSAPP_NUMBER=seu_numero_whatsapp
# Configuração do Banco de Dados
DATABASE_URL=postgres://usuario:senha@localhost:5432/nome_do_banco
# Configuração do Redis
REDIS_URL=redis://localhost:6379
# Configuração da API
API_BASE_URL=https://sua-api-externa.com
- Instale as dependências:
npm install- Migre o banco de dados:
npm run migrate- Inicie o bot:
npm start- Escaneie o código QR exibido com o WhatsApp para autenticar
O bot fornece uma API REST para gerenciamento:
GET /api/config: Obter todas as configuraçõesGET /api/config/:key: Obter uma configuração específicaPOST /api/config: Criar ou atualizar uma configuraçãoPUT /api/config/:key: Atualizar uma configuração específicaDELETE /api/config/:key: Excluir uma configuração
POST /api/config/external-api/config: Configurar as configurações da API externaPOST /api/config/external-api/mappings: Configurar mapeamentos de funçãoPOST /api/config/external-api/clear-cache: Limpar cache da APIPOST /api/config/test-api: Testar conexão com a API
GET /api/conversations: Obter todas as conversas (com paginação)GET /api/conversations/:id: Obter uma conversa específica com mensagensPOST /api/conversations: Criar uma nova conversaPOST /api/conversations/:id/pause: Pausar uma conversaPOST /api/conversations/:id/resume: Retomar uma conversaGET /api/conversations/:id/status: Obter status da conversaPOST /api/conversations/:id/messages: Adicionar uma mensagem a uma conversaGET /api/conversations/search/messages: Pesquisar mensagens
POST /conversation/:id/pause: Pausar uma conversaPOST /conversation/:id/resume: Retomar uma conversaGET /conversation/:id/status: Obter status da conversa
O bot não possui comandos específicos. Os usuários podem simplesmente enviar mensagens, e o assistente de IA responderá de acordo com suas capacidades e persona.
O sistema usa uma abordagem de configuração em camadas:
- Configuração de Banco de Dados: Fonte primária de configuração
- Cache de Memória: Para acesso rápido à configuração
- Variáveis de Ambiente: Fallback e valores iniciais
A configuração pode ser atualizada via API ou através de scripts de banco de dados.
O sistema inclui um Serviço de API Externa flexível para conexão com serviços externos:
- Cliente HTTP genérico com suporte para múltiplos métodos (GET, POST, PUT, DELETE, PATCH)
- Mapeamento de funções para traduzir chamadas de função da IA para endpoints de API
- Suporte a autenticação (Basic, Bearer, API Key)
- Cache de requisições
- Mecanismo de retry com backoff exponencial
- Sistema de logging
npm start: Iniciar a aplicaçãonpm run migrate: Executar migrações de banco de dadosnpm run update-openai-key: Atualizar chave da API OpenAInpm run migrate-env-to-db: Migrar variáveis de ambiente para o banco de dados
- Cache de Threads: As threads são armazenadas em cache na memória para melhor desempenho
- Agregação de Mensagens: Mensagens de texto são agregadas por 3 segundos para melhorar a experiência do usuário
- Tratamento de Erros: O sistema implementa mecanismos robustos de tratamento de erros e retry
- Logging: Logging extensivo para fins de depuração
- Chaves de API da OpenAI são mascaradas nos logs
- Valores sensíveis (chaves de API, URLs de banco de dados) são mascarados nas respostas da API
- Autenticação é necessária para o WhatsApp Web usando código QR
- Valores de configuração podem ser criptografados no banco de dados
- Proteção CORS no servidor da API
- Requer uma sessão ativa do WhatsApp (re-autenticação necessária se desconectado)
- Depende da disponibilidade do serviço da OpenAI
- Limitado pela taxa da API da OpenAI
- Limitações de tamanho de arquivo para processamento de mídia
- Falha na Autenticação: A sessão do WhatsApp pode ter expirado. Reinicie o bot e escaneie o código QR novamente.
- Erros da API OpenAI: Verifique a validade da chave de API e limites de cota.
- Problemas de Conexão com o Banco de Dados: Verifique se o DATABASE_URL está correto e o banco de dados está acessível.
- Problemas de Conexão com o Redis: Certifique-se de que o Redis está em execução e o REDIS_URL está correto.
A aplicação registra logs extensivamente para ajudar a diagnosticar problemas. Verifique a saída do console para:
- Status da conexão do WhatsApp
- Detalhes de processamento de mensagens
- Chamadas e respostas da API
- Alterações de configuração
- Mensagens de erro com stack traces
Este projeto é um software proprietário. Distribuição não autorizada é proibida.
Este projeto foi desenvolvido por mim mesmo.
