You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Engine de protocolo do WhatsApp Web Multi-device em Go — escrita do
zero, com suporte nativo a mensagens interativas (botões, listas, native_flow).
whatsgo é uma biblioteca Go que fala nativamente o protocolo do WhatsApp
Web Multi-device. Ela cuida de toda a complexidade do transporte (Noise
handshake, criptografia Signal, sessões multi-device, filas de envio,
retry receipts) e expõe uma API limpa pra você parear via QR e
enviar/receber mensagens.
O que o whatsgo resolve
Três problemas recorrentes ao enviar mensagens interativas contra o servidor
atual do WhatsApp são tratados dentro da engine, sem workaround no
consumidor:
#
Problema
Solução nativa
1
Versão antiga no handshake → servidor recusa interativos com 405
WAVersion recente fixada no store
2
Stanza <biz> placeholder → servidor recusa com 405
Stanza <biz> no formato native_flow montada automaticamente
3
Sem MessageSecret (32 bytes) → destinatário não descriptografa
Secret injetado automaticamente em qualquer mensagem interativa
Quem consome a biblioteca não monta <biz> na mão, não gera MessageSecret,
não mexe em versão. Chama SendButtons, SendList ou SendInteractive e
funciona.
Mensagens interativas (destaque)
São o carro-chefe do projeto. Todas funcionam em conta pessoal (não
precisam de aprovação Business API).
Limite do WhatsApp: até 3 botões por mensagem. Cada toque do destinatário
chega como evento Message com InteractiveResponse ou
ButtonsResponseMessage, já pronto pra você filtrar por ID.
Menu em lista (single_select)
client.SendList(ctx, jid,
"Cardápio", // título do header"Selecione um item", // descrição (body)"Ver opções", // texto do botão que abre a lista"rodapé opcional",
[]whatsgo.SectionSpec{
{
Title: "Bebidas",
Rows: []whatsgo.RowSpec{
{ID: "cafe", Title: "Café", Description: "Expresso"},
{ID: "cha", Title: "Chá", Description: "Mate"},
},
},
{
Title: "Comidas",
Rows: []whatsgo.RowSpec{
{ID: "pao", Title: "Pão de queijo", Description: "10 un."},
},
},
},
)
Suporta N seções, cada uma com N linhas. Limite prático recomendado
de até 10 linhas totais por lista (UX do WhatsApp).
Name aceita qualquer fluxo suportado pelo WA Web (cta_url, cta_call,
cta_copy, quick_reply, review_and_pay, …). ParamsJSON é o JSON de
parâmetros no formato exato esperado pelo servidor pra cada tipo.
API completa — principais funções
Conexão e pareamento
Função
O que faz
NewClient(deviceStore, logger)
Cria um client a partir de um device store
Connect() / ConnectContext(ctx)
Abre o socket Noise e inicia a sessão
Disconnect()
Fecha o socket (mantém a sessão salva)
IsConnected()
Socket aberto?
IsLoggedIn()
Sessão pareada ativa?
Logout(ctx)
Desfaz o pareamento (apaga credenciais)
GetQRChannel(ctx)
Canal pra consumir eventos de QR durante pareamento
WaitForConnection(timeout)
Bloqueia até conectar ou estourar timeout
Envio de mensagens
Função
O que faz
SendMessage(ctx, to, msg, extra...)
Envio genérico de qualquer waE2E.Message
SendButtons(ctx, to, text, footer, buttons)
Botões de resposta rápida (até 3)
SendList(ctx, to, title, desc, btn, footer, sections)