npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@areumtecnologia/unitychat

v1.1.7

Published

just another Baileys wrapper

Readme

@areumtecnologia/unitychat

npm version License: ISC

Uma biblioteca de alto nível (wrapper) robusta e resiliente para a Baileys. Facilita a criação e o gerenciamento de conexões com o WhatsApp, oferecendo uma arquitetura baseada em eventos unificados, normalização de mensagens para estruturas ricas e handlers especializados para simplificar a lógica de negócio do seu bot.


✨ Características

  • 🚀 Simplificação do Ciclo de Vida: Conexão auto-gerenciável, tratamento automático de desconexões e reconexão inteligente.
  • 📩 Estrutura de Mensagens Ricas: Mensagens recebidas são completamente normalizadas em objetos JavaScript amigáveis, contendo helpers para baixar mídias, verificar menções, respostas, reações e votos.
  • 🛠️ Handlers Especializados: Módulos desacoplados para gerenciar Mensagens, Grupos, Contatos, Usuários, Newsletters, Chamadas e Stories.
  • 🔘 Mensagens Interativas de Última Geração: Suporte nativo para construir e enviar botões interativos (Quick Reply, URL, Copy Code, Call, Location) e menus de lista de seleção única (List Buttons).
  • 📂 Multi-Sessão Nativa: Persistência de estado de autenticação simplificada e isolamento seguro por sessão.

📦 Instalação

Instale o pacote através do npm:

npm install @areumtecnologia/unitychat

🚀 Início Rápido

Aqui está um exemplo básico de como inicializar o cliente, escutar eventos e interagir com mensagens:

const { UnityChat, Events } = require('@areumtecnologia/unitychat');

// Inicializa o cliente com configurações personalizadas
const client = new UnityChat({
    sessionName: 'sessao-suporte',
    printQRInTerminal: true,
    restartOnClose: true
});

// Evento disparado quando a conexão com o WhatsApp está pronta
client.on(Events.CONNECTED, (user) => {
    console.log(`✅ Conectado com sucesso como: ${user.name} (${user.id})`);
});

// Escuta novas mensagens recebidas
client.on(Events.MESSAGE_RECEIVED, async (message) => {
    console.log(`📩 Nova mensagem de ${message.fromPushName} (${message.from}): ${message.body}`);

    // Exemplo de resposta simples
    if (message.body === '!ping') {
        await client.messages.sendTextMessage(message.from, 'pong! 🏓');
    }

    // Se a mensagem contiver mídia (imagem, áudio, etc)
    if (message.hasMedia && message.media) {
        console.log(`Mídia recebida do tipo: ${message.media.mimetype}`);
        
        // Baixa a mídia usando o helper integrado
        const attachments = await message.media.getAttachments();
        const base64Data = attachments.toBase64();
        console.log(`Tamanho do buffer de mídia: ${attachments.buffer.length} bytes`);
    }
});

// Trata erros ou desconexões inesperadas
client.on(Events.ERROR, (error) => {
    console.error('❌ Ocorreu um erro no cliente:', error);
});

// Inicia o processo de conexão
client.connect();

⚙️ Opções de Configuração

Ao instanciar a classe UnityChat, você pode customizar o comportamento da conexão passando as seguintes opções no construtor:

| Opção | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | sessionName | string | 'session' | Identificador único da sessão para isolar dados de autenticação. | | dataPath | string | 'data/sessions' | Caminho base onde as credenciais das sessões serão persistidas. | | printQRInTerminal | boolean | false | Se true, imprime o QR code para autenticação diretamente no console. | | loggerLevel | string | 'error' | Nível do log interno (ex: 'debug', 'info', 'warn', 'error'). | | restartOnClose | boolean | false | Tenta restabelecer a conexão automaticamente caso ocorra uma queda de rede/serviço. | | markOnlineOnConnect| boolean | false | Mantém o status do bot como "Online" logo após conectar. | | environment | Array | ['Mac OS', 'Chrome', '144.0.7559.110'] | Array customizado para simular a plataforma do navegador da sessão. | | waVersion | Array | null | Sobrescreve a versão padrão do WhatsApp Web (Array de 3 números). | | syncFullHistory | boolean | true | Habilita a sincronização de histórico de mensagens. | | historySyncLastMessageOnly | boolean | false | Se true, adiciona apenas uma mensagem no histórico (a última mensagem recebida). | | historySyncFilterStatus | string | 'all' | Filtra mensagens do histórico por status de leitura ('all', 'read' ou 'unread'). | | store | object | MessageStore | Instância customizada para leitura e gravação em cache/banco de mensagens. |


🛠️ Métodos do Cliente (UnityChat)

A classe UnityChat disponibiliza diversos métodos principais para gerenciar o ciclo de vida da conexão, obter informações do bot e realizar operações auxiliares:

  • setHistorySyncOptions({ lastMessageOnly, filterStatus }):

    • Parâmetros: options (object com lastMessageOnly: boolean, filterStatus: 'all' | 'read' | 'unread')
    • Retorno: void
    • Descrição: Configura os filtros de histórico dinamicamente antes ou durante a sincronização.
  • connect():

    • Retorno: Promise<void>
    • Descrição: Inicializa as credenciais de autenticação da sessão, configura o socket e inicia a conexão aos servidores do WhatsApp. Gerencia reconexões e novas tentativas de pareamento automaticamente.
  • disconnect():

    • Retorno: void
    • Descrição: Encerra a conexão socket ativa com o WhatsApp de forma limpa, definindo internamente a flag de desconexão manual para evitar novas conexões automáticas. Não apaga credenciais locais.
  • logout():

    • Retorno: Promise<void>
    • Descrição: Realiza o logout da conta conectada no WhatsApp e encerra o socket de conexão, invalidando a sessão.
  • itsMe():

    • Retorno: Promise<object>
    • Descrição: Retorna o perfil normalizado do próprio bot conectado (contendo informações de perfil, grupos e newsletters participantes).
  • composing(jid, ts):

    • Parâmetros: jid (string), ts (number)
    • Retorno: Promise<void>
    • Descrição: Aciona visualmente o estado "digitando..." para o destinatário especificado pelo jid.
  • getMessages(jid, limit):

    • Parâmetros: jid (string), limit (number, padrão 50)
    • Retorno: Promise<Array>
    • Descrição: Recupera o histórico local ou remoto de mensagens brutas associadas a um chat.
  • decryptPollVote(vote, voteParams):

    • Parâmetros: vote (object), voteParams (object)
    • Retorno: Promise<object>
    • Descrição: Descriptografa votos recebidos em enquetes.
  • getAggregateVotesInPollMessage(pollParams):

    • Parâmetros: pollParams (object)
    • Retorno: Promise<object>
    • Descrição: Agrega e contabiliza os votos descriptografados de uma enquete.
  • getAggregateResponsesInEventMessage(eventParams):

    • Parâmetros: eventParams (object)
    • Retorno: Promise<object>
    • Descrição: Analisa e decodifica as presenças/respostas a um evento criado no chat.
  • jidNormalizedUser(id):

    • Parâmetros: id (string)
    • Retorno: string
    • Descrição: Normaliza e unifica IDs do WhatsApp, removendo identificadores secundários de múltiplos dispositivos.
  • downloadContentFromMessage(content, type):

    • Parâmetros: content (object), type (string)
    • Retorno: Promise<Buffer>
    • Descrição: Efetua o download binário de um anexo ou mídia de uma mensagem bruta.
  • getContentType(message):

    • Parâmetros: message (object)
    • Retorno: string
    • Descrição: Retorna o tipo de conteúdo de uma mensagem bruta (ex: text, image).

🔔 Eventos (Events)

A classe UnityChat herda do EventEmitter do Node.js e emite eventos semânticos correspondentes ao ciclo de vida da aplicação:

Ciclo de Conexão e Autenticação

  • init: Iniciando o processo de carregamento de credenciais.
  • connecting: Tentando estabelecer conexão de socket com os servidores do WhatsApp.
  • status_change: Disparado quando ocorre mudança no status geral do cliente.
  • pairing_code: QR Code gerado. Retorna um objeto contendo { base64, qr, attempts }.
  • pairing_success: QR Code escaneado com sucesso e login concluído.
  • connected: Conexão estabelecida e autenticação pronta. Retorna o perfil do bot normalizado.
  • disconnected: Desconectado dos servidores. Retorna { statusCode, statusType, reason, details }.

Mensagens

  • message_received: Nova mensagem recebida do usuário (Normalizada).
  • message_sent: Mensagem enviada pelo próprio bot (Normalizada).
  • message_update: Mensagem editada ou atualizada no chat (Ex: recebimento de confirmações).
  • message_delete: Mensagem excluída da conversa.
  • message_reaction: Reação com emoji recebida/enviada.
  • messages_history_sync_done: Sincronização de histórico concluída. Retorna o array aninhado [ Contato <- chats: [ Chat <- messages: [ MensagensNormalizadas ] ] ].
  • broadcast_message: Mensagem recebida via lista de transmissão ou Status.
  • notification: Notificação interna de sistema ou protocolo.

Outros Recursos

  • incoming_call: Nova chamada de voz/vídeo recebida pelo número.
  • presence_update: Mudança no status de presença de contatos (digitando, gravando, online).
  • contacts_upsert / contacts_update: Atualizações na lista ou metadados de contatos.
  • groups_upsert / groups_update: Criação ou alteração de informações nos grupos participantes.
  • group_participants_update: Mudanças nos membros de um grupo (entrada, saída, promoções).
  • group_member_tag_update: Atualização de etiquetas/papéis dos membros do grupo.
  • blocklist_update: Atualização na lista de contatos bloqueados.
  • chat_update / chat_delete: Modificações em chats locais da conta.

📩 Estrutura de Mensagem Normalizada

Todas as mensagens emitidas nos eventos message_received e message_sent são processadas através do MessageNormalizer, gerando um objeto padronizado com a seguinte estrutura:

{
    id: "3EB0...",             // Identificador único da mensagem
    chat: {                    // Objeto de contato normalizado associado ao chat
        id: "[email protected]",
        name: "João Silva",
        type: "personal"       // 'personal' | 'business' | 'group' | 'newsletter'
    },
    fromMe: false,             // Define se a mensagem partiu do bot
    from: "559199999999@...",  // Quem enviou a mensagem
    fromPushName: "João",      // Nome de exibição configurado no perfil do emissor
    to: "559188888888@...",    // Destinatário da mensagem
    type: "text",              // Tipo amigável ('text', 'image', 'audio', 'document', 'sticker', 'location', 'contact', 'interactive_reply', etc)
    body: "Olá, mundo!",       // Corpo de texto principal extraído da mensagem
    hasMedia: false,           // Flag indicando a presença de mídia para download
    media: null,               // Objeto com metadados de mídia (caso hasMedia seja true)
    location: null,            // Objeto contendo { latitude, longitude } para mensagens de localização
    contacts: [],              // Lista de contatos formatados se recebido um vCard
    isReply: false,            // Indica se é uma resposta citada (quoted)
    quotedMessage: null,       // Mensagem citada recursivamente normalizada
    isForwarded: false,        // Indica se a mensagem foi encaminhada
    mentions: [],              // Lista de JIDs mencionados na mensagem
    isMentioningMe: false,     // Indica se o JID do próprio bot foi mencionado
    isEdited: false,           // Se a mensagem foi editada posteriormente
    interactiveReply: null,    // ID e texto do botão clicado caso seja uma resposta interativa
    reaction: null,            // Estrutura de emoji e timestamp caso seja reação
    poll: null,                // Dados de criação de enquete
    pollUpdate: null,          // Votos decodificados recebidos em enquetes
    timestamp: Date,           // Objeto Date representando quando a mensagem foi criada
    raw: { ... }               // Objeto bruto original fornecido pela Baileys (útil para uso avançado)
}

Download de Mídias

Quando hasMedia é true, você pode acessar message.media.getAttachments() para obter um conjunto de helpers utilitários para manipulação do buffer:

const attachments = await message.media.getAttachments();

attachments.mimetype;           // Mimetype do arquivo (ex: 'image/png')
attachments.extension;          // Extensão sugerida (ex: 'png')
attachments.buffer;             // Buffer binário completo do arquivo

// Métodos utilitários:
attachments.toBase64();         // Converte para String Base64
attachments.toDataUri();        // Retorna formato Data URI
attachments.toArrayBuffer();    // Retorna ArrayBuffer
await attachments.save(caminho);// Grava a mídia em um caminho local e retorna o nome e arquivo.

📚 Referência de API dos Handlers

A biblioteca separa responsabilidades organizando seus recursos em handlers acessíveis diretamente pela instância do client.

📩 Mensagens (client.messages)

Responsável por todas as operações de envio, respostas, download e modificações de mensagens nos chats.

  • sendMessage(jid, content, options): Envia um payload bruto customizado da Baileys para o JID especificado.
    • Opções especiais: { composing: { timeout: MS } } ou { recording: { timeout: MS } } simula o estado "digitando" ou "gravando áudio" por MS milissegundos antes de enviar a mensagem.
  • sendTextMessage(jid, text, options): Envia uma mensagem de texto simples.
  • reply(originalMessage, content): Responde (marcando e citando) a uma mensagem recebida.
  • sendImage(jid, media, caption, options): Envia uma imagem (parâmetro media aceita URL pública ou Buffer).
    • Opção: { viewOnce: true } para envio temporário.
  • sendVideo(jid, media, caption, options): Envia um vídeo (parâmetro media aceita URL ou Buffer).
    • Opção: { viewOnce: true } para visualização única.
  • sendAudio(jid, media, ptt, options): Envia um áudio. Defina ptt: true para simular gravação de mensagem de voz no WhatsApp.
  • sendDocument(jid, media, mimetype, fileName, caption, options): Envia um arquivo/documento genérico.
  • sendLocation(jid, latitude, longitude, name, address): Envia uma mensagem contendo pin de mapa.
  • sendContacts(jid, contacts): Envia cartões de contatos estruturados (vCards). O parâmetro contacts é um array de objetos { fullName, waid, organization }.
  • sendPoll(jid, pollName, pollValues, options): Cria uma enquete com opções de voto.
  • sendLink(jid, url, options): Envia um link ativando a renderização prévia de metadados da URL (preview).
  • forwardMessage(jid, messageToForward): Encaminha uma mensagem existente para outro chat.
  • editMessage(originalMessageKey, newText): Edita o texto de uma mensagem anteriormente enviada pelo bot.
  • react(messageKey, emoji): Adiciona uma reação com emoji a uma mensagem.
  • delete(messageKey): Apaga uma mensagem enviada pelo bot para todos os participantes do chat.
  • read(messageKey): Envia a confirmação de leitura da mensagem.
  • composing(jid, ts): Aciona o estado "digitando..." para o destinatário JID.
  • getMessages(jid, limit): Busca o histórico local ou remoto de mensagens de um chat (limite padrão de 50 mensagens).
  • getAttachments(message): Efetua o download e retorna helpers para a mídia contida em um payload de mensagem bruto.

👥 Grupos (client.groups)

Contém as operações de criação, modificação de metadados e moderação de membros em grupos.

  • getMetadata(groupId): Retorna as configurações e lista de participantes ativos em um grupo. Utiliza cache integrado de 5 minutos.
  • getAllGroups(): Retorna uma lista com todos os grupos que o bot faz parte.
  • getProfilePicture(jid): Obtém o link público para a foto de perfil do grupo.
  • create(subject, participantsJids): Cria um novo grupo.
  • leave(groupId): Sai de um grupo.
  • updateName(groupId, newName): Altera o título de exibição de um grupo.
  • updateDescription(groupId, newDescription): Atualiza a descrição textual do grupo.
  • updateParticipants(groupId, participantsJids, action): Gerencia membros. Valores aceitos para a ação: 'add' | 'remove' | 'promote' | 'demote'.
  • addParticipants(groupId, participantsJids): Atalho direto para adicionar novos membros.
  • removeParticipants(groupId, participantsJids): Atalho direto para remover membros.
  • promoteParticipants(groupId, participantsJids): Concede privilégios de administrador do grupo a membros específicos.
  • demoteParticipants(groupId, participantsJids): Retira os privilégios de administrador de membros específicos.
  • getInviteCode(groupId): Retorna o sufixo alfanumérico do link de convite do grupo.
  • revokeInviteCode(groupId): Invalida o código/link de convite antigo e gera um novo.
  • updateMemberLabel(groupId, label): Define a etiqueta/papel de membro próprio do bot no grupo.

👤 Usuários e Contatos (client.users e client.contacts)

Handlers focados no gerenciamento de contatos, privacidade e metadados de contas pessoais ou comerciais.

client.users

  • getMetadata(jid): Retorna dados estruturados de um contato (nome, foto, tipo).
  • getStatus(id): Retorna a frase de "Recado" cadastrada no perfil do contato.
  • getPnForLid(lid): Retorna o JID convencional (baseado em número de telefone) associado a um identificador interno LID do WhatsApp.
  • getMyStatus(): Retorna o status de "Recado" da conta do bot.
  • getBusinessProfile(jid): Retorna dados comerciais adicionais se for uma conta comercial (descrição, endereço, e-mail, etc).
  • getProfilePicture(jid): Obtém a imagem de exibição do usuário.
  • isOnWhatsApp(number): Verifica se um número de telefone está cadastrado no WhatsApp (normalizando DDI e o nono dígito).
  • updateProfileName(newName): Atualiza o nome de perfil público da conta do bot.
  • updateProfileStatus(newStatus): Atualiza a frase de recado da conta do bot.
  • block(jid) / unblock(jid): Bloqueia ou desbloqueia um contato.
  • getBlocklist(): Retorna todos os contatos bloqueados pela conta do bot.
  • sendPresence(jid, presenceStatus): Atualiza a presença visível do bot em relação a um chat (valores do PresenceStatus: 'available', 'unavailable', 'composing', 'recording').
  • updateLastSeenPrivacy(value): Atualiza configuração de privacidade do Visto por Último ('all' | 'contacts' | 'contact_blacklist' | 'none').
  • updateOnlinePrivacy(value): Atualiza configuração de privacidade do Visto Online ('all' | 'match_last_seen').
  • updateReadReceiptsPrivacy(value): Atualiza configuração de privacidade das confirmações de leitura ('all' | 'none').

client.contacts

  • get(jid): Recupera um contato diretamente do cache local em memória.
  • getAll(): Retorna todos os contatos presentes no cache em memória.
  • set(jid, contact): Adiciona ou atualiza manualmente um contato na estrutura de cache do cliente.
  • normalize(message): Efetua varredura na mensagem para extrair, carregar metadados externos (como imagem de perfil e status) e formatar um contato estruturado.

📰 Newsletters / Canais (client.newsletters)

Permite a interação básica de leitura e criação de Canais do WhatsApp.

  • getMetadata(id): Retorna metadados de um Canal através do ID ou link de convite.
  • getAllNewsletters(): Retorna a lista de canais nos quais o bot está inscrito.
  • follow(id) / unfollow(id): Inscreve-se ou cancela a inscrição em um canal.
  • mute(jid, duration) / unmute(jid): Configura silenciamento de notificações do canal.
  • create(name, description, picture): Cria um novo canal próprio do bot.
  • delete(jid): Exclui permanentemente um canal criado pelo bot.
  • updateName(jid, name): Atualiza o nome do canal.
  • updateDescription(jid, description): Altera a descrição do canal.
  • updatePicture(jid, picture): Atualiza o avatar do canal.
  • update(jid, { name, description, picture }): Método utilitário para atualizar múltiplos dados ao mesmo tempo.
  • updateReactionMode(jid, mode): Configura a regra de reações em posts do canal. Valores: 'ALL' | 'BASIC' | 'NONE'.

📞 Chamadas (client.calls)

  • reject(call): Recusa uma chamada telefônica de voz/vídeo recebida pelo bot.

📱 Stories (client.stories)

Responsável por enviar, gerenciar e excluir publicações de Stories (Status) no WhatsApp.

  • send(jids, content, options): Envia uma publicação de stories para uma lista de contatos.
    • jids: Array de JIDs que receberão ou serão mencionados nos stories.
    • content: Conteúdo da mensagem a ser enviada (texto, imagem, vídeo, etc.).
    • Opções:
      • sendMentions (boolean): Se true, realiza a menção nos stories (limita o array de JIDs a no máximo 5 elementos devido a restrições do WhatsApp).
      • backgroundColor (string): Cor de fundo para os stories de texto (padrão: '#288d7c85').
      • font (number): Estilo de fonte para os stories de texto (padrão: 1).
  • delete(msg): Exclui uma publicação de stories enviada anteriormente.

🏷️ Etiquetas (client.labels)

Gerenciamento de Etiquetas do WhatsApp Business.

  • createLabel(name, color): Cria uma etiqueta com nome e cor especificados (cores de 0 a 19).
  • updateLabel(id, name, color): Atualiza o nome e a cor de uma etiqueta existente.
  • deleteLabel(id): Remove permanentemente uma etiqueta da conta comercial.
  • addChatLabel(jid, labelId): Associa uma etiqueta a uma conversa.
  • removeChatLabel(jid, labelId): Remove a etiqueta de uma conversa.
  • addMessageLabel(jid, msgId, labelId): Associa uma etiqueta a uma mensagem específica.
  • removeMessageLabel(jid, msgId, labelId): Remove a etiqueta de uma mensagem específica.

💼 WhatsApp Business (client.business)

Gerenciamento de recursos comerciais (Catálogo, Produtos, Perfil e Capa Comercial).

  • updateBusinessProfile(profile): Atualiza endereço, e-mail, websites, descrição e horários do perfil comercial do bot.
  • updateCoverPhoto(path): Define ou altera a foto de capa comercial (URL ou Buffer).
  • removeCoverPhoto(coverPhotoId): Remove a foto de capa comercial atual.
  • getCatalog(options): Busca a lista de produtos de um contato comercial ou do próprio bot.
  • getCollections(jid, count): Retorna as coleções de produtos do catálogo de um contato.
  • getOrderDetails(orderId, orderToken): Obtém os detalhes completos de um pedido a partir do carrinho.
  • productCreate(product): Adiciona um novo produto ao catálogo comercial.
  • productUpdate(productId, product): Atualiza os dados de um produto existente.
  • productDelete(productIds): Exclui permanentemente produtos do catálogo (aceita array de IDs).

🔘 Mensagens Interativas

A biblioteca disponibiliza classes auxiliares estruturadas para a criação de mensagens interativas avançadas com facilidade.

1. Botões de Resposta Rápida (Quick Reply)

Gera botões de clique rápido que enviam o texto correspondente de volta ao chat ao serem tocados.

const { InteractiveMessage, QuickReplyButton } = require('@areumtecnologia/unitychat');

const message = new InteractiveMessage()
    .withText('Olá! Escolha uma das opções abaixo:')
    .withFooter('Responda clicando em um dos botões')
    .addButton(new QuickReplyButton('id_opcao_1', 'Falar com Atendente'))
    .addButton(new QuickReplyButton('id_opcao_2', 'Ver Menu Principal'));

await client.messages.sendMessage(jid, message.build());

2. Links de Chamada à Ação (CTA URL / Call / Copy Code / Location)

Exibe botões especiais para direcionamento para sites externos, chamadas de voz normais da operadora, cópia de códigos PIX/Cupons e compartilhamento de localização:

const { InteractiveMessage, UrlButton, CopyCodeButton, CallButton, LocationButton } = require('@areumtecnologia/unitychat');

const message = new InteractiveMessage()
    .withText('Aqui estão seus links especiais:')
    .addButton(new UrlButton('Acessar Site', 'https://unitychat.areum.com.br'))
    .addButton(new CopyCodeButton('Copiar Código PIX', 'pix-payload-key-12345'))
    .addButton(new CallButton('Ligar para o Suporte', '559199999999'))
    .addButton(new LocationButton('Compartilhar Localização'));

await client.messages.sendMessage(jid, message.build());

3. Botão de Pagamento PIX e Checkout (Review & Pay)

Gera botões interativos para pagamento PIX estático e faturamento integrado de checkout:

const { InteractiveMessage, PixButton, CheckoutButton } = require('@areumtecnologia/unitychat');

// Exemplo 1: Botão PIX Estático
const pixMessage = new InteractiveMessage()
    .withText('Efetue o pagamento via PIX clicando no botão abaixo:')
    .addButton(new PixButton('Áreum Tecnologia LTDA', '[email protected]', 'EMAIL'));

await client.messages.sendMessage(jid, pixMessage.build());

// Exemplo 2: Checkout / Faturamento
const checkoutMessage = new InteractiveMessage()
    .withText('Fatura gerada com sucesso!')
    .addButton(new CheckoutButton({
        currency: 'BRL',
        totalAmount: { value: '15000', offset: '100' },
        referenceId: 'REF_PEDIDO_12345',
        items: [{
            retailer_id: 'item_01',
            name: 'Licença Anual WaSockets',
            amount: { value: '15000', offset: '100' },
            quantity: '1'
        }],
        additionalNote: 'Agradecemos a sua preferência!'
    }));

await client.messages.sendMessage(jid, checkoutMessage.build());

3. Listas Interativas (Menus de Seleção Única)

Permite enviar uma lista completa dividida por seções para seleções únicas:

const { InteractiveMessage, ListButton, ListSection, ListRow } = require('@areumtecnologia/unitychat');

const listMenu = new InteractiveMessage()
    .withText('Selecione o produto de interesse:')
    .withFooter('Escolha uma das linhas abaixo')
    .addButton(
        new ListButton('Ver Catálogo')
            .addSection(
                new ListSection('Aparelhos Celulares')
                    .addRow(new ListRow('iphone_15', 'iPhone 15 Pro', 'Mais recente lançamento Apple'))
                    .addRow(new ListRow('s24_ultra', 'Galaxy S24 Ultra', 'Processador Snapdragon e AI integrada'))
            )
            .addSection(
                new ListSection('Acessórios')
                    .addRow(new ListRow('airpods_3', 'AirPods 3', 'Áudio espacial de alta qualidade'))
            )
    );

await client.messages.sendMessage(jid, listMenu.build());

📄 Licença

Este projeto está licenciado sob a licença ISC. Consulte o arquivo LICENSE para obter detalhes.


Desenvolvido com carinho por Áreum Tecnologia.