Saltar a contenido

@arcaelas/whatsapp

Banner

Libreria TypeScript para automatizacion de WhatsApp Basada en Baileys | Tipado completo | Engine de persistencia flexible | Facil de usar


Caracteristicas

  • Conexion simplificada - QR o codigo de emparejamiento en una sola llamada
  • Eventos tipados - TypeScript completo con autocompletado
  • Persistencia flexible - FileEngine por defecto, RedisEngine incluido, o implementa tu propio Engine
  • Clases intuitivas - Chat, Contact, Message con metodos estaticos
  • Multiples tipos de mensaje - text, image, video, audio, location, poll
  • Gestion de grupos - Listar miembros, archivar, silenciar, fijar
  • Soporte de encuestas - Crear encuestas con multiples opciones

Inicio Rapido

import { WhatsApp } from "@arcaelas/whatsapp";

// Crear instancia
const wa = new WhatsApp({
  phone: "5491112345678", // Opcional: para codigo de emparejamiento
});

// Escuchar eventos
wa.event.on("open", () => console.log("Conectado!"));
wa.event.on("close", () => console.log("Desconectado"));
wa.event.on("error", (err) => console.error("Error:", err.message));

// Conectar
await wa.pair(async (data) => {
  if (Buffer.isBuffer(data)) {
    // QR code como imagen PNG
    const fs = await import("fs");
    fs.writeFileSync("qr.png", data);
    console.log("Escanea el QR en qr.png");
  } else {
    // Codigo de emparejamiento (8 digitos)
    console.log("Codigo:", data);
  }
});

// Escuchar mensajes
wa.event.on("message:created", async (msg) => {
  if (msg.me) return; // Ignorar mensajes propios

  // Verificar tipo
  if (msg.type === "text") {
    const text = (await msg.content()).toString();
    console.log(`Mensaje: ${text}`);

    // Responder
    if (text.toLowerCase() === "hola") {
      await wa.Message.text(msg.cid, "Hola! Como estas?");
    }
  }
});

Tipos de Mensaje

La libreria soporta multiples tipos de mensaje:

Tipo msg.type Descripcion
Texto "text" Mensaje de texto plano
Imagen "image" Imagen con caption opcional
Video "video" Video con caption opcional
Audio "audio" Nota de voz o audio
Ubicacion "location" Coordenadas geograficas
Encuesta "poll" Encuesta con opciones
wa.event.on("message:created", async (msg) => {
  if (msg.me) return;

  if (msg.type === "image") {
    const buffer = await msg.content();
    console.log(`Imagen recibida: ${buffer.length} bytes`);
    if (msg.caption) {
      console.log(`Caption: ${msg.caption}`);
    }
  }

  if (msg.type === "poll") {
    const buffer = await msg.content();
    const poll = JSON.parse(buffer.toString());
    console.log(`Encuesta: ${poll.content}`);
    poll.options.forEach((opt: { content: string }, i: number) => {
      console.log(`  ${i + 1}. ${opt.content}`);
    });
  }
});

Engine de Persistencia

Por defecto se usa FileEngine. Puedes implementar tu propio engine:

import { WhatsApp, FileEngine } from "@arcaelas/whatsapp";

const wa = new WhatsApp({
  engine: new FileEngine(".baileys/mi-bot"),
});
import { WhatsApp, RedisEngine } from "@arcaelas/whatsapp";
import Redis from "ioredis";

const client = new Redis();
const wa = new WhatsApp({
  engine: new RedisEngine(client, "wa:mi-bot"),
});
import { WhatsApp } from "@arcaelas/whatsapp";
import type { Engine } from "@arcaelas/whatsapp";

// Implementa la interfaz Engine
class MyEngine implements Engine {
  async get(key: string): Promise<string | null> { /* ... */ }
  async set(key: string, value: string | null): Promise<void> { /* ... */ }
  async list(prefix: string, offset?: number, limit?: number): Promise<string[]> { /* ... */ }
}

const wa = new WhatsApp({
  engine: new MyEngine(),
});

Siguiente Paso

  • Instalacion


    Instrucciones detalladas para instalar la libreria

    Ver guia

  • Primeros Pasos


    Tutorial paso a paso para crear tu primer bot

    Comenzar

  • Referencias API


    Documentacion completa de todas las clases

    Ver API

  • Ejemplos


    Ejemplos practicos listos para usar

    Ver ejemplos


Desarrollado por Arcaelas Insiders