forked from clairton/unoapi-cloud
-
Notifications
You must be signed in to change notification settings - Fork 3
DESENVOLVIMENTO
wiki-bot edited this page May 3, 2026
·
5 revisions
- Build e subir serviços de dev:
docker compose up -d --build web worker redis rabbitmq minio
- Hot‑reload:
- Código montado em
/appcomnodemon. - Polling ativado para estabilidade no Windows.
- Código montado em
- Debug no VS Code:
- Inspector:
web→9229,worker→9230. -
.vscode/launch.jsonjá possui “Attach: web/worker”.
- Inspector:
-
yarn web-dev/yarn worker-dev— serviços com nodemon. -
yarn build— compilação TypeScript. -
yarn test— testes com Jest.
- Health:
GET /ping→pong! - UI da sessão:
GET /session/{phone}→ QR code + pairing/config via Socket.IO. - Enviar mensagem:
POST /v15.0/{phone}/messages(formato Cloud API). - Validação de contatos (standalone):
POST /{phone}/contacts. - Listar grupos em cache:
GET /v15.0/{phone}/groups. - Listar participantes do grupo:
GET /v15.0/{phone}/groups/{groupId}/participants.
Listar grupos em cache de uma sessão:
GET /v15.0/{phone}/groups
Listar participantes de um grupo em cache:
GET /v15.0/{phone}/groups/{groupId}/participants
Notas:
-
groupIdaceita1203...ou1203...@g.us(normalização interna). - O payload de participantes retorna
jidename. - Para contatos PN,
jidé retornado só com dígitos (sem@s.whatsapp.net). -
nameé resolvido do cache de contatos com fallback PN/LID. - Se o grupo não estiver no cache Redis, retorna
404.
Para POST /v15.0/{phone}/messages com type: "text" e to terminando com @g.us:
-
@allou@todosnotext.body:- define
mentionAll=trueantes de enviar ao Baileys - remove apenas o token
@all/@todosdo texto final
- define
-
@<telefone_valido>notext.body:- preenche automaticamente
mentions[](normalizado para@s.whatsapp.net) - mantém o texto com o telefone no
body
- preenche automaticamente
- Se vierem juntos (
@telefones+@all/@todos), as duas regras são aplicadas.
Exemplos:
POST /v15.0/{phone}/messages
{
"to": "120363012345678@g.us",
"type": "text",
"text": { "body": "Aviso @todos" }
}
POST /v15.0/{phone}/messages
{
"to": "120363012345678@g.us",
"type": "text",
"text": { "body": "Oi @5566996269251 e @5566996222471" }
}
POST /v15.0/{phone}/messages
{
"to": "120363012345678@g.us",
"type": "text",
"text": { "body": "Oi @5566996269251, @5566996222471 @all" }
}
A Unoapi aceita um payload Meta-like type: "message_edit" em POST /v15.0/{phone}/messages.
Essa é uma extensão Unoapi/Baileys; a Cloud API oficial da Meta não expõe esse payload de envio.
Exemplo 1:1:
POST /v15.0/{phone}/messages
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5566996269251",
"type": "message_edit",
"context": {
"message_id": "uno-message-id-original"
},
"text": {
"body": "Texto editado"
}
}
Exemplo em grupo:
POST /v15.0/{phone}/messages
{
"messaging_product": "whatsapp",
"recipient_type": "group",
"to": "120363012345678@g.us",
"type": "message_edit",
"context": {
"message_id": "uno-message-id-original"
},
"text": {
"body": "@5566996269251 texto editado"
},
"mentions": ["5566996269251"]
}
Regras:
-
context.message_iddeve ser o ID Unoapi da mensagem original enviada. - A Unoapi resolve esse ID para o provider id/key original do Baileys via DataStore/Redis.
- A chamada final no Baileys equivale a
sock.sendMessage(jid, { text, edit: originalMessageKey }). - Em edição de grupo,
todeve ser o ID do grupo (@g.us). Menções seguem a mesma normalização das mensagens de texto em grupo.
Exemplo (imagem):
POST /v15.0/{phone}/messages
{
"to": "status@broadcast",
"type": "image",
"image": { "link": "https://.../image.png", "caption": "Hello" },
"statusJidList": ["5511999999999", "5511888888888"]
}
Nota:
- Se statusJidList estiver vazio ou nulo e type for image/video, Unoapi preenche via Redis contact-info (unoapi-contact-info::*).
- Se a lista continuar vazia, nao faz relay.
Resposta adiciona ao Cloud API:
{
...,
"status_skipped": ["5511..."],
"status_recipients": 123
}
POST /v15.0/{phone}/messages
{
"to": "5511999999999",
"type": "reaction",
"reaction": {
"message_id": "MESSAGE_ID",
"emoji": "👍"
}
}
PNG/JPG/GIF sao convertidos automaticamente para WEBP antes do envio.
POST /v15.0/{phone}/messages
{
"to": "5511999999999",
"type": "sticker",
"sticker": {
"link": "https://example.com/sticker.png"
}
}
- Erro de certificado ao baixar
wait-forno build:- Corrigido em
develop.Dockerfile(instalaca-certificatese usacurl).
- Corrigido em
-
voice-calls-baileysnão encontrado:-
vendor/é copiado antes doyarn install(corrigido nodevelop.Dockerfile).
-
- Breakpoints não param:
- Ative sourcemaps no TS (
"sourceMap": true) ou usets-nodenos scripts dev.
- Ative sourcemaps no TS (
- Há um workflow em
.github/workflows/wiki-sync.ymlpara sincronizardocs/→ Wiki. - Configure o secret do repositório
WIKI_TOKEN(PAT comrepoe acesso ao Wiki). - Ao fazer push na branch principal, arquivos em
docs/serão publicados na Wiki do repositório.