mkadri85/relay-marketing-console

GitHub: mkadri85/relay-marketing-console

一款部署在 Cloud Run 上的生产级营销控制台,集成 WhatsApp 批量活动、多 AI 提供商实时聊天、广告创意生成与 BigQuery ETL 异常检测。

Stars: 0 | Forks: 0

# Relay 控制台 一款面向消费服务类移动应用的生产级营销与互动控制台: 批量 WhatsApp 活动、带 AI 辅助的实时操作员收件箱、浏览器内的广告创意工作室、每小时数据同步 pipeline,以及带有基于预测的异常警报的分析层。它作为单个容器化的 Node 服务在 Cloud Run 上运行,由测试门控的 Cloud Build pipeline 进行部署。 ## 功能说明 | 功能 | 简介 | |---|---| | **WhatsApp 活动引擎** | 批量模板/轮播发送,支持并行扇出、每个活动的 media-id 缓存以及 Cloud Tasks 调度器。吞吐量比原始的顺序循环高出约 10 倍。 | | **实时聊天 + AI 辅助** | 基于 WhatsApp Cloud API 的操作员收件箱。多提供商 AI(以 Claude 为主,OpenAI 为备选,基于规则的兜底机制),带有针对单用户的速率限制,并可自动转接给人工。 | | **创意工作室** | 浏览器内的分层广告编辑器。通过提供商网关(Imagen / gpt-image / Flux)进行 AI 图像生成,通过 headless Chromium 进行服务端渲染,使用带签名的 URL 访问私有 GCS 存储桶,并配有针对每个组织的成本防护。 | | **数据同步 pipeline** | 每小时执行 ETL,将 Meta Ads、GA4 和 Firestore 数据提取至 BigQuery,使用基于幂等 load job 的 upsert 操作,并通过 BigQuery ML 异常检测写入警报。 | | **通知** | 事件驱动的 Cloud Functions,响应 Firestore 变更(优惠券/订阅/安全/互动),并带有退订、静默时间、每日上限和去重防护。 | | **Cloud Run 上的 CI/CD** | 推送至 main 分支会运行测试、构建镜像、进行部署,并将流量固定至最新修订版本。 | ## 可视化流程演示 独立的 HTML 图表(在浏览器中打开): - [`docs/index.html`](docs/index.html) - 导航主页 / 从这里开始 - [`docs/architecture.html`](docs/architecture.html) - 全系统映射图 - [`docs/flow-campaign-send.html`](docs/flow-campaign-send.html) - WhatsApp 发送 pipeline - [`docs/flow-data-sync.html`](docs/flow-data-sync.html) - ETL + 异常检测 - [`docs/flow-chat-ai.html`](docs/flow-chat-ai.html) - 聊天 + AI 兜底 + 人工转接 - [`docs/flow-creative-studio.html`](docs/flow-creative-studio.html) - 生成 / 组合 / 发布 - [`docs/flow-cicd-deploy.html`](docs/flow-cicd-deploy.html) - Cloud Build 至 Cloud Run ## 架构 ``` Cloudflare -> console.relay.example.com | +--v--+ | Cloud Run (Node/Express) | | EJS + Alpine.js UI | +--+--+--+ WhatsApp Cloud API <--+ | | +--+--+--+ | | | | BigQuery MongoDB (Atlas) Cloud Tasks GCS (private) analytics + read replica scheduled creative assets campaign log (campaign audience) campaigns + signed URLs ^ | hourly ETL (Cloud Scheduler) +-- Meta Ads API / GA4 Data API / Firestore Firestore document changes -> Cloud Functions -> FCM / HMS push ``` 控制台使用单个 Cloud Run 服务;通知作为独立的 Cloud Functions 运行。读取活动受众的数据来自 Mongo 只读副本(而不是庞大的数据仓库镜像),从而避免了活动的重复扣费。 ## 技术栈 - **运行时:** Node.js 18、Express、EJS 服务端渲染视图、Alpine.js 群岛 - **数据:** BigQuery(分析与 ML)、MongoDB(受众)、Firestore(移动端事件)、GCS(资产) - **消息传递:** WhatsApp Cloud API(Meta Graph)、Cloud Tasks(调度) - **AI:** Anthropic Claude、OpenAI、Google Imagen / Gemini、Flux(FAL) - **渲染:** Playwright headless Chromium(每次渲染一个子进程) - **基础设施:** Cloud Run、Cloud Build、Secret Manager、Cloud Scheduler、Cloud Functions ## 仓库布局 ``` src/ whatsapp/ campaign-engine, media-cache, scheduler (Cloud Tasks) chat/ multi-provider AI gateway + rate-limit-to-human handoff creative-studio/ provider gateway, render pipeline, GCS, cost guard marketing/ ETL (meta/ga4/firestore), BigQuery ML anomaly detection lib/ GA4 Measurement Protocol functions/ event-driven notification Cloud Functions docs/ HTML flow diagrams cloudbuild.yaml test -> build -> deploy -> pin-traffic pipeline Dockerfile Debian-slim + Playwright Chromium ``` ## 工程亮点 几个值得阅读代码的决定: 1. **Media-id 缓存 (`src/whatsapp/media-cache.js`)** - 向 2,200 名接收者发送 4 张卡片的轮播广告时,会重复上传相同的 4 张图片达 8,800 次。通过针对每个数据源缓存 `media_id` 并结合进行中请求的合并(in-flight coalescing),将上传次数减少到 4 次,并去除了约 95% 的活动运行时间。 2. **并行扇出 (`src/whatsapp/campaign-engine.js`)** - 以并发组的形式发送,组间有可调的暂停时间,在保持低于 Meta 速率限制的同时,将发送速度从约 33 条消息/分钟提升至约 355 条消息/分钟。 3. **预留后结算的成本防护 (`src/creative-studio/lib/quotaGuard.js`)** - 原子化的消费预留解决了并发竞争问题,并附带了一条坦诚的注释,说明了为什么单进程 mutex 在自动扩缩的副本中只能作为软警报,以及真正的上限在哪里。 4. **幂等的 BigQuery upsert (`src/marketing/lib/bq.js`)** - 使用 load job + MERGE 代替流式插入,这样每小时的 ETL 就可以安全地重新运行同一个时间窗口(流式插入的行在约 90 分钟内无法进行 MERGE)。 5. **异常检测 (`src/marketing/etl/anomaly.js`)** - 针对每个指标使用 BigQuery ML ARIMA_PLUS,仅将标记的日期写入警报表。 6. **跨环境签名的 URL (`src/creative-studio/lib/gcs.js`)** - 在 Cloud Run 上进行原生 v4 签名,对于本地用户凭据则使用 IAM `signBlob` 作为兜底。 ## 本地运行 ``` cp .env.example .env # fill in your own keys + project npm install npm test # jest npm run dev # nodemon ``` 该服务需要其专属的 GCP 项目、BigQuery 数据集和提供商密钥。 本仓库中的任何内容均未指向原始的生产后端。 ## 许可证 MIT。请参见 [LICENSE](LICENSE)。
标签:AI图像生成, AI对话, BigQuery, MITM代理, 特征检测, 自定义脚本, 营销自动化