Open-Source Cold Email & Warmup Platform
Warmbly는 메일함을 예열하고 캠페인 전송·답변 triage를 지원하는 오픈소스 콜드 이메일 플랫폼입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A production-ready WhatsApp Business management platform built with Next.js 14, MySQL, and Meta WhatsApp Cloud API — similar to AiSensy.
| Feature | Description |
|---|---|
| Multi-tenant | Each user gets their own workspace with separate API credentials |
| Chat Inbox | WhatsApp Web-style chat UI with real-time polling |
| Bulk Campaigns | Send template messages to thousands of contacts |
| CRM Contacts | Manage leads with tags, status, and CSV import |
| Templates | Create & submit templates for Meta approval |
| Chatbot | Rule-based auto-reply by keyword/pattern |
| Analytics | Delivery rates, read rates, conversion charts |
| Webhook | Receive messages & status updates from Meta in real-time |
whatsapp-saas/
├── app/
│ ├── api/
│ │ ├── auth/ login, signup, logout
│ │ ├── webhook/ Meta webhook handler
│ │ ├── contacts/ CRUD + CSV import
│ │ ├── messages/ conversation history
│ │ ├── templates/ CRUD + Meta submission
│ │ ├── campaigns/ CRUD + launch (bulk send)
│ │ ├── chatbot/ CRUD rules
│ │ ├── analytics/ summary + chart data
│ │ └── workspace/ settings
│ ├── dashboard/ Analytics overview
│ ├── inbox/ Chat UI
│ ├── contacts/ CRM
│ ├── campaigns/ Bulk campaigns
│ ├── templates/ Template manager
│ ├── chatbot/ Chatbot rules
│ ├── analytics/ Full analytics
│ ├── settings/ Workspace config
│ ├── login/
│ └── signup/
├── lib/
│ ├── db.ts MySQL connection pool
│ ├── auth.ts JWT + bcrypt helpers
│ ├── whatsapp.ts Meta API wrapper
│ └── utils.ts Shared utilities
├── types/index.ts TypeScript interfaces
├── middleware.ts Auth route protection
├── schema.sql MySQL schema
└── .env.local.example Environment template
cd whatsapp
npm install
mysql -u root -p < schema.sql
cp .env.local.example .env.local
# Edit .env.local with your MySQL credentials and Meta API keys
https://your-domain.com/api/webhook
messages, message_deliveries, message_readsnpm run dev
# Open http://localhost:3000
http://localhost:3000/signupPOST /api/auth/signup { name, email, password, workspaceName }
POST /api/auth/login { email, password }
POST /api/auth/logout
POST /api/send-message { contactId, type, text } OR { contactId, type:'template', templateName, language, components }
GET /api/messages?contactId=X&limit=50
GET /api/contacts?page=1&limit=20&search=X&status=new
POST /api/contacts { name, phone, email, city, source, tags, status }
PUT /api/contacts/:id
DEL /api/contacts/:id
POST /api/contacts/import (multipart/form-data, file=CSV)
GET /api/templates
POST /api/templates { name, language, category, body_text, ... }
GET /api/campaigns
POST /api/campaigns { name, template_id, contact_ids, scheduled_at }
POST /api/campaigns/:id/launch
GET /api/chatbot
POST /api/chatbot { trigger_type, trigger_value, response_type, response_text, priority }
PUT /api/chatbot/:id
DEL /api/chatbot/:id
GET /api/analytics
GET /api/webhook?hub.mode=subscribe&hub.verify_token=X&hub.challenge=Y
POST /api/webhook (receives messages and status updates)
# Signup
curl -X POST http://localhost:3000/api/auth/signup \
-H "Content-Type: application/json" \
-d '{"name":"Test User","email":"[email protected]","password":"password123","workspaceName":"My Business"}'
# Send message (use token from signup response)
curl -X POST http://localhost:3000/api/send-message \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"contactId":1,"type":"text","text":"Hello from API!"}'
# Import contacts CSV
curl -X POST http://localhost:3000/api/contacts/import \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "[email protected]"
name,phone,email,city,source
John Doe,919876543210,[email protected],Mumbai,website
Jane Smith,919123456789,[email protected],Delhi,manual
npm i -g vercel
vercel --prod
Set environment variables in Vercel dashboard.
npm run build
npm start
# Or use PM2:
pm2 start npm --name "wa-saas" -- start
Use PlanetScale, Railway, or AWS RDS for MySQL in production.
Built with ❤️ using Next.js + Meta WhatsApp Cloud API