Lex é uma inteligência artificial desenvolvida especificamente para esta campanha, equipada com tecnologia de ponta para analisar dados em grande escala, formular políticas públicas, fiscalizar contratos e interagir diretamente com a população. Lex não é apenas um programa; é um novo modelo de representação política que garante que todas as vozes sejam ouvidas e que cada decisão seja baseada em análises profundas e objetivas.
Este projeto é uma aplicação de ChatBot Legislativo que utiliza Firebase para armazenamento de dados, Twilio para notificações via WhatsApp e OpenAI para funcionalidades de IA. O sistema principal é o receiveMessage
, que processa mensagens recebidas, verifica permissões de usuários e tokens, e responde utilizando OpenAI.
Conheça mais em https://lex.tec.br/
Clone o Repositório
git clone https://github.com/pmarkun/lex-firebase
cd lex-firebase
Instale as Dependências
npm install
Configuração do Firebase
serviceAccountKey.json
das credenciais do Firebase e coloque-o na raiz do projeto.Configuração do Twilio
TWILIO_ACCOUNT_SID
e TWILIO_AUTH_TOKEN
.Configuração do OpenAI
Configuração do Arquivo .env
Crie um arquivo .env
na raiz do projeto com o seguinte conteúdo:
OPENAI_API_KEY=<sua-chave-de-api-do-openai>
TWILIO_ACCOUNT_SID=<seu-account-sid-do-twilio>
TWILIO_AUTH_TOKEN=<seu-auth-token-do-twilio>
ASSISTANT_ID=<id-do-assistente>
DONOR_TOKENS=2000
MAX_COMPLETION_TOKENS=8096
MAX_PROMPT_TOKENS=60000
TWILIO_FROM=<seu-numero-do-twilio>
Você pode usar suas próprias chaves (OpenAI, Firebase e Twilio) ou pode pedir as chaves do ambiente de desenvolvimento para @luisleao ou @pmarkun.
Inicialize o Firebase
Conecte-se ao seu projeto Firebase:
firebase login
firebase use --add
Deploy das Funções Firebase
firebase deploy --only functions
Rodando o Projeto Localmente
Para rodar o projeto localmente em modo de desenvolvimento:
npm start
Expondo o Endpoint Localmente com ngrok
Para expor o endpoint localmente e testar os webhooks:
Instale o ngrok (se ainda não tiver):
npm install -g ngrok
Inicie o ngrok para expor a porta onde sua aplicação está rodando (normalmente a porta 5001 para Firebase Functions em desenvolvimento):
ngrok http 5001
O ngrok fornecerá uma URL pública. Use essa URL para configurar os webhooks no Twilio e no DoarPara.
receiveMessage.js
: Função principal que processa mensagens recebidas e interage com o OpenAI.receiveDonation.js
: Função que lida com doações recebidas e atualiza o status do usuário e tokens.serviceAccountKey.json
: Arquivo de chave de serviço do Firebase (não incluído no repositório por questões de segurança).util.js
: Contém funções utilitárias como limpaNumero
e adicionaNove
.roles.js
: Define os papéis dos usuários no sistema.receiveMessage
Esta função é chamada quando uma nova mensagem é recebida. Ela realiza as seguintes operações:
receiveDonation
Esta função lida com doações recebidas e atualiza o status do usuário e tokens, conforme necessário. A seguir está uma descrição detalhada das etapas envolvidas:
donations
do Firestore, organizada por usuário.new_donation
, atualiza o status da doação e incrementa o contador de intenções de doação.donation_captured
, atualiza o papel do usuário para user
(se for guest
), incrementa os tokens máximos e envia uma notificação via WhatsApp.Para que o Twilio envie mensagens para a função receiveMessage
, é necessário configurar o callback no Twilio Console:
https://<ngrok-id>.ngrok.io/receiveMessage
).Para que o sistema receba notificações de doações da plataforma DoarPara, é necessário configurar o callback no DoarPara:
https://<ngrok-id>.ngrok.io/receiveDonation
).Nota: Configurar o callback no DoarPara não é obrigatório para o funcionamento do sistema principal, mas é necessário para atualizar o status de doações e gerenciar permissões de acesso baseadas em doações.
git checkout -b feature/nova-feature
).git commit -m 'Adiciona nova feature'
).git push origin feature/nova-feature
).Este projeto está licenciado sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Certifique-se de atualizar <sua-chave-de-api-do-openai>
, <seu-account-sid-do-twilio>
, <seu-auth-token-do-twilio>
, <id-do-assistente>
e <seu-numero-do-twilio>
com informações específicas do seu projeto.