Skip to content

zynapte/OmniComm

Repository files navigation

OmniComm Banner

OmniComm

Light-weight Communication Adapter: Unified Messaging Gateway

A light-weight, production-ready NestJS communication router designed to unify multiple messaging channels into a single, standardized API. This adapter allows businesses to integrate WhatsApp, Telegram, Slack, Teams, and Email with ease, bypassing high-cost third-party providers by deploying directly on their own infrastructure.

🚀 Why This Adapter?

  • Zero Middle-man Fees: Directly integrate with official APIs (like WhatsApp Cloud API) without paying message surcharges to third-party platforms.
  • Local Deployment Support: Full support for local development and self-hosted production environments using standard infrastructure (PostgreSQL, Redis).
  • Unified Schema: Normalize all incoming and outgoing messages into a consistent GenericMessage format, regardless of the source channel.
  • Automated Webhook Management: Built-in ngrok integration and automated Meta webhook registration for zero-config developer setups.
  • High Reliability: Powered by BullMQ for robust background processing, retries, and dead-letter queue management.

📊 Progress Tracker

Channel Inbound Outbound Status
WhatsApp Cloud API Production Ready
Telegram 🏗️ 🏗️ Skeleton Ready
Slack 🏗️ 🏗️ Skeleton Ready
Microsoft Teams 🏗️ 🏗️ Skeleton Ready
Email (SMTP/SendGrid) 🏗️ 🏗️ Skeleton Ready

✨ Features

  • WhatsApp Cloud API Integration: Full support for text, images, videos, and attachments.
  • Media Persistence: Automatically downloads and serves media sent via WhatsApp locally.
  • Intelligent Routing: Rule-based engine to fan-out messages to multiple destinations.
  • Idempotency: Built-in duplicate suppression for inbound webhooks.
  • Static Asset Serving: Built-in support to serve downloaded attachments for webhook consumers.

🛠️ Tech Stack

  • Framework: NestJS + TypeScript
  • Database: PostgreSQL (via Prisma ORM)
  • Queue Layer: Redis + BullMQ
  • Tunneling: Official @ngrok/ngrok for local development

📖 API Documentation

System

  • GET /health: Returns the health status of the application and its dependencies.

Messages

  • GET /messages: List all normalized messages stored in the database.
  • POST /messages/send: Send an outbound message.
    • Body:
      {
        "channel": "whatsapp",
        "to": { "phone": "1234567890" },
        "type": "text",
        "text": "Hello world"
      }

WhatsApp Integration

  • GET /whatsapp/webhook: Used by Meta to verify your webhook endpoint.
  • POST /whatsapp/webhook: Receives inbound messages and status updates from WhatsApp.

⚙️ Getting Started

1. Environment Setup

Copy .env.example to .env:

cp .env.example .env

To get your API keys (Meta App ID, Secret, WhatsApp IDs, and Ngrok Token), follow our Step-by-Step Meta Setup Guide.

2. Infrastructure

Start the required Redis and PostgreSQL services:

docker compose up -d

3. Database Initialization

pnpm install
pnpm prisma generate
pnpm prisma migrate dev --name init

4. Run the Application

# Development
pnpm start:dev

# Production
pnpm build
pnpm start:prod

💎 Key Sponsors

This project is proudly supported and maintained by:

Sponsor Website
Zynapte www.zynapte.com

🤝 Contribution Guidelines

We welcome contributions! To get started:

  1. Fork the repository.
  2. Create a feature branch: git checkout -b feature/amazing-feature.
  3. Commit your changes: git commit -m 'Add some amazing feature'.
  4. Push to the branch: git push origin feature/amazing-feature.
  5. Open a Pull Request.

Please ensure your code adheres to the project's Prettier and ESLint configurations.

📄 License

This project is licensed under the Apache License 2.0. See the LICENSE file for details.


Built with ❤️ for the open-source community. Stop paying for every message, start own-hosting your communication stack.

About

Unified communication adapter for WhatsApp, Telegram, Slack, Teams, Email & more — built for scalable message routing and automation.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages