Saleor Store
우리 컬렉션을 쇼핑하세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Bot que recebe uma foto de um produto no WhatsApp e responde com as melhores opções equivalentes na Shopee (link de afiliado já atribuído). O núcleo (Shopee + concierge) nunca importa nada de channel/. Isso é de propósito: pra trocar de instância Z-API, ou até trocar WhatsApp por outro canal (Instagram oficial, por exemplo, se um dia fizer sentido), você só troca o arquivo dentro de channel/ e as variáveis de ambiente — nada no núcleo muda. O que já está pronto e validadoREADME 전문 보기 ↗
Bot que recebe uma foto de um produto no WhatsApp e responde com as melhores opções equivalentes na Shopee (link de afiliado já atribuído).
src/lib/shopee/ -> núcleo Shopee (busca + geração de link) — não sabe nada de canal
src/lib/concierge/ -> núcleo do concierge (sessão, reconhecimento, ranking, resposta) — não sabe nada de canal
src/lib/channel/ -> conector de canal (hoje: Z-API). É a ÚNICA peça que fala com o WhatsApp.
src/app/api/webhook/zapi/ -> endpoint HTTP que a Z-API chama quando chega mensagem
O núcleo (Shopee + concierge) nunca importa nada de channel/. Isso é
de propósito: pra trocar de instância Z-API, ou até trocar WhatsApp por
outro canal (Instagram oficial, por exemplo, se um dia fizer sentido),
você só troca o arquivo dentro de channel/ e as variáveis de ambiente
— nada no núcleo muda.
.env (copie de .env.example): Shopee (você já
tem), Z-API da instância que decidiu usar, e uma chave da OpenAI
(custo pequeno por foto processada, mas real — confirme se topa antes
de ligar em produção).src/app/api/webhook/zapi/route.ts explica esse risco. Se for a
mesma instância, o ideal é ter um único endpoint recebendo tudo e
decidindo o que é concierge e o que é BancaZAP (hoje este projeto só
cobre a parte do concierge).Só trocar ZAPI_INSTANCE_ID, ZAPI_TOKEN e ZAPI_CLIENT_TOKEN no
ambiente de produção e reconfigurar o webhook na nova instância. Nenhum
arquivo de código precisa mudar.
cp .env.example .env # preencha SHOPEE_APP_ID e SHOPEE_SECRET
npm install
npm run test:search -- "fone de ouvido bluetooth"
recognizeProductImage + searchProductsByKeyword direto, sem
precisar do WhatsApp ainda.compare.ts: a
foto do usuário + as fotos dos top ~8 candidatos (pré-filtrados por
texto/nota/venda) vão juntas pro modelo de visão, que classifica
cada uma com honestidade (inclusive "não relacionado", pra descartar
opções que só batem a palavra-chave mas não o produto). Isso
substituiu o match só por texto que gerava sugestões fora de
contexto (categoria certa, mas estilo/preço bem diferentes).Este repositório está conectado a um projeto Vercel com deploy automático a cada push na branch main — não precisa mais copiar variáveis de ambiente a cada atualização de código.
O sourcing coleta ofertas reais, grava produtos e snapshots no Supabase,
aplica os cortes e o score mínimo de 75 e gera até três links de afiliado.
Não publica em WhatsApp ou Instagram. Os candidatos permanecem em
discovered: o desconto informado pela Shopee ainda é um proxy, sem
verificação de queda histórica e com confiança de histórico zerada.
Configure SUPABASE_URL e SUPABASE_SERVICE_ROLE_KEY no servidor, além
das variáveis de .env.example. O projeto de banco é babamanager-pro
(czocwdlygdslyuoixmhh). A chave service role nunca vai para o navegador.
A migration versionada usa 20260912035120, o timestamp confirmado no
histórico do Supabase; não é necessário reaplicá-la nesse projeto.
npm ci
npx tsc --noEmit
npm run test:router
npm run test:deals
npm run build
npm run source:deals
O script carrega .env. Se as credenciais estiverem em .env.local, defina
DOTENV_CONFIG_PATH=.env.local antes de executá-lo (PowerShell:
$env:DOTENV_CONFIG_PATH='.env.local'). O JSON final informa erros e
quantos candidatos tiveram o link gerado e confirmado no banco. Nenhum
candidato aprovado é um resultado possível; o mínimo de 75 não é reduzido.
GET /api/health consulta o banco a cada chamada, sem cache: retorna HTTP
200 com ok: true quando todas as variáveis obrigatórias e o banco estão
disponíveis, ou HTTP 503 quando existe alguma pendência. Isso não valida
as credenciais externas nem o recebimento de mensagens pela Z-API.