ChatbotX
開源的 ManyChat 替代方案,為 AI 而建。跨平台行銷,支援 WhatsApp、TikTok、Facebook、Instagram、Telegram、Zalo、Email、API 與 Webchat 🤖
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Self-hosted social media scheduling. Connect your accounts with one click, write a post once, publish it everywhere — now or later.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Self-hosted marketing for a business: social media posts, online ads, print, letters by post and video or radio spots, planned in campaigns with one brand and one recurring brand character. Connect your accounts with one click, write once, publish everywhere.
Documentation: schulzoli.github.io/MarketingAsAService: getting started, configuration, a guide for every network, and the marketing tools.
/canvas#n=network:instagram, /canvas#@x,y,zoom).| Flow builder | Composing through a flow |
|---|---|
| Calendar | Auf Deutsch |
|---|---|
| A campaign | A print-ready flyer | AI drafts |
|---|---|---|
| Aurora | Paper | Blueprint |
|---|---|---|
Phases 0 (foundation), 1 (uploads, editing, calendar, teams, email, Bluesky sign-in, German and English) and 2 (the bridge: every network without app reviews, through Zernio) are done, and so is marketing beyond social media (brand kit, campaigns, print and letters, spots, paid ads, the AI studio). Phase 3 is prepared: every network integration is implemented, and each server's admin chooses per network between their own developer app, the Zernio bridge, or switching it off (guide). Every server registers its own apps; the project applies for none on anyone's behalf. MarketingAsAService serves the about, privacy, terms, imprint and data deletion pages the reviews ask for (docs/legal.md). Networks become "live-verified" as operators run them with their own apps (docs/platforms.md). The canvas with flows is the main interface (the classic list pages remain under “List view”); its look comes from theme plugins. Roadmap: docs/plan.md.
Requirements: Node 22+, Docker.
npm install
cp .env.example .env
sed -i "s|^ENCRYPTION_KEY=.*|ENCRYPTION_KEY=$(openssl rand -base64 32)|" .env
npm run services:up # Postgres on localhost:5432
docker compose exec postgres psql -U maas -c "CREATE DATABASE maas_test" # for tests
npm run db:migrate
npm run dev # web on http://localhost:3000 + worker
Sign up, add a Sandbox account and schedule a post. Put #fail or #flaky in the text to see error handling.
cp .env.example .env # set ENCRYPTION_KEY, APP_URL, POSTGRES_PASSWORD
docker compose --profile app up -d --build
This starts Postgres, runs migrations, and launches the web app (port 3000) and the worker. Put a reverse proxy with HTTPS in front of the web app and set APP_URL to the public URL — OAuth callbacks and links in emails depend on it. The proxy should set X-Forwarded-For; login rate limits per IP rely on it (limits per email address do not).
| Variable | Required | Description |
|---|---|---|
DATABASE_URL | yes | Postgres connection string |
ENCRYPTION_KEY | yes | 32 random bytes, base64 (openssl rand -base64 32). Encrypts account tokens; do not change after accounts are connected |
APP_URL | yes | Public URL without trailing slash |
ENABLE_SANDBOX | no | true shows the fake Sandbox network |
WORKER_POLL_INTERVAL_MS | no | How often the worker checks for due posts (default 10000) |
MEDIA_STORAGE | no | local (default) keeps uploads in MEDIA_DIR (a Docker volume), s3 uses any S3-compatible storage (S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, see .env.example) |
MEDIA_MAX_VIDEO_MB | no | Largest video upload (default 512; images up to 20 MB) |
SMTP_URL | no | Outgoing mail for password resets, invites, email confirmation and failed-post alerts, e.g. smtp://user:[email protected]:587. Without it, emails are printed to the log |
MAIL_FROM | no | Sender address, e.g. MarketingAsAService <[email protected]> |
OPERATOR_NAME, OPERATOR_EMAIL | for app reviews | Who runs the server. Turns on /about, a privacy policy, terms and data deletion instructions; with OPERATOR_ADDRESS also an imprint. LEGAL_*_URL links your own pages instead. See docs/legal.md |
<NETWORK>_CLIENT_ID / _CLIENT_SECRET | no | Operator developer apps, e.g. INSTAGRAM_CLIENT_ID. See docs/platforms.md |
apps/web Next.js app: canvas (components/world), list pages, server actions, OAuth callbacks
apps/web/messages UI texts in English and German, one catalog per area
apps/worker Worker: publishes due posts, sends letters, reads ad numbers
packages/core Posts, accounts, flows, campaigns, print, ads, AI studio, theme plugins, publishing loop, encryption
packages/db Drizzle schema + SQL migrations
packages/providers Network and ad platform integrations behind common interfaces
docs/ Documentation website: guides per network, marketing, plan, screenshots
The UI is in English and German. Texts live in typed catalogs — apps/web/messages/*.ts for the app, packages/core/src/messages.ts for errors and emails, packages/providers/src/messages.ts for validation and network texts. Each catalog has an en and a de object, and TypeScript refuses a German catalog that misses a message or takes other values. To add a language, add it to locales in packages/providers/src/i18n.ts and follow the type errors.
| Command | What it does |
|---|---|
npm run dev | Web app + worker with hot reload |
npm test | Unit tests; integration tests run when TEST_DATABASE_URL is set |
npm run typecheck | TypeScript across all packages |
npm run build | Production builds of web and worker |
npm run db:generate | Create a migration after changing packages/db/src/schema.ts |
npm run db:migrate | Apply migrations |
Contributions are welcome — bug reports, ideas, translations and code. Read CONTRIBUTING.md for the setup, checks and conventions, and report security problems privately as described in SECURITY.md. Everyone taking part follows the code of conduct.
MarketingAsAService is open source under the MIT License. Its dependencies have their own licenses, almost all MIT, Apache-2.0, ISC or BSD; the image library sharp that Next.js installs includes libvips under LGPL-3.0.
HIDE_NETWORKS | no | Network ids you don't offer at all, e.g. x,tiktok |
ZERNIO_API_KEY | no | Connects every network without a developer app through Zernio. ZERNIO_NETWORKS limits or forces the list, ZERNIO_ACCOUNT_PRICE (e.g. 6 or 5.50 EUR) shows cost estimates. See docs/bridge.md |
PINGEN_CLIENT_ID / _CLIENT_SECRET | no | Sends letters and postcards by post through Pingen. See docs/marketing/print.md |
GOOGLE_ADS_DEVELOPER_TOKEN, ENABLE_META_ADS | no | Turn on paid ads on Google Ads and Meta Ads with the Google and Facebook apps. See docs/marketing/ads.md |
ANTHROPIC_API_KEY | no | Turns on the AI studio (AI_MODEL picks the Claude model). See docs/marketing/ai-studio.md |