Negocia ai
Restaurant owners either burn hours running quotes, or just take the first supplier who answers.
Core trick
Agent opens parallel WhatsApp negotiations with local suppliers and normalizes voice, photo, and text quotes into price per delivered kilo.
Description
Restaurant owners either burn hours running quotes, or just take the first supplier who answers.
Now the owner sends one WhatsApp message: "20kg of mozzarella by Thursday, Vila Mariana."
The agent finds suppliers in the area and opens parallel negotiations with all of them — same app, same thread style, no portal to log into.
It understands whatever comes back — voice notes, photos of price sheets, a bare "42" — and converts everything to price per kilo delivered.
It takes the lowest, goes back to the other threads, and asks who'll match it.
Then it messages the owner with the options, he replies with a number.
Order placed.
README excerpt
# Agente de compras para restaurantes Aplicação com cliente Next.js e servidor Express. O servidor expõe uma busca assíncrona de fornecedores no Google Maps através do Actor da Apify `compass/crawler-google-places` e um agente de negociação de cotações. ## Fluxo do agente 1. O dono descreve item, quantidade e prazo em linguagem natural. 2. O agente usa o cadastro do restaurante no Supabase para obter a localização. 3. A busca Apify encontra até 10 fornecedores com telefone. 4. O primeiro contato é enviado pela integração direta com a WhatsApp Cloud API usando um template aprovado. 5. A primeira resposta do fornecedor abre a janela de atendimento e o agente passa a cuidar da thread. 6. Texto, áudio e imagem são convertidos em uma cotação estruturada e normalizada. 7. Ao receber cinco cotações comparáveis, o menor preço é congelado como âncora e enviado aos demais fornecedores. 8. Uma única rodada de contraoferta atualiza o ranking no Supabase Realtime. 9. O dono aprova uma oferta e somente o vencedor recebe a confirmação. As decisões com efeitos colaterais são determinísticas. O modelo interpreta conteúdo não estruturado, mas não decide quantos fornecedores contam, não altera a âncora e não envia mensagens diretamente. ## Configuração do servidor Copie `server/.env.example` para `server/.env` e informe um token da Apify: ```env APIFY_TOKEN=your_apify_token OPENAI_API_KEY=your_openai_api_key SUPABASE_URL=https://your-project.supabase.co SUPABASE_SERVICE_ROLE_KEY=your_ser