indicaindependent/bsky-campaign-engine
GitHub: indicaindependent/bsky-campaign-engine
一个运行在 Cloudflare 边缘的 Bluesky 自动化活动调度引擎,支持长串帖子定时发布、图片嵌入和回复链接。
Stars: 0 | Forks: 0
# 📡 Bluesky 活动引擎
**自动化 Bluesky 活动调度 — AT Protocol + Cloudflare D1 + 串链回复**
[](https://atproto.com)
[](https://workers.cloudflare.com)
[](LICENSE)
## 这是什么
一个用于 Bluesky 的生产级活动调度引擎。调度带有图像、facets(链接/提及/标签)和精确时间的多帖长串活动——全部在 Cloudflare 的边缘节点上以 Serverless 方式运行。
在 Bluesky 上运行真实的调查新闻活动时构建并经过实战检验。
## 功能
- 🧵 **长串链接** — 通过 root/parent URI 追踪实现正确的回复链
- 🖼️ **图像嵌入** — 自动上传图像 + 附加 blob
- 🏷️ **Facet 支持** — 自动检测并编码链接、提及和话题标签
- ⏱️ **基于 D1 的调度** — 通过 CF Cron 在精确的时间触发
- 🔒 **单次触发锁** — D1 状态防止重复发布
- 📦 **活动存档** — 已完成的活动会被存档,永不删除
- 🌐 **REST API** — 通过 `/inject` 注入活动,通过 `/status` 检查状态
## 架构
```
POST /inject (campaign payload)
│
▼
schedule-worker (D1: schedule-db)
│
CF Cron Trigger (every minute check)
│
▼
bsky-worker ──► AT Protocol API ──► Bluesky
│
└── Update D1 (post URIs, CIDs, status)
```
## 活动 Payload 格式
```
{
"campaign_id": "my-campaign-001",
"handle": "yourhandle.bsky.social",
"posts": [
{
"post_index": 0,
"text": "🧵 THREAD: My investigation into X...",
"image_url": "https://example.com/image.jpg",
"scheduled_at": "2026-05-02T14:00:00Z"
},
{
"post_index": 1,
"text": "1/ Here's what we found...",
"scheduled_at": "2026-05-02T14:05:00Z"
}
]
}
```
## 自托管
```
git clone https://github.com/indicaindependent/bsky-campaign-engine
cd bsky-campaign-engine
cp wrangler.toml.example wrangler.toml
wrangler d1 create campaign-db
wrangler secret put BSKY_APP_PASS
wrangler secret put WORKER_SECRET
wrangler deploy
```
## 字素安全
所有帖子都会根据 Bluesky 的 300 字符限制进行验证(JS 的 `length`,而非字节数)。旗帜 emoji = 4 个字符。在发布前强制执行硬性上限。
## 许可证
[MIT](LICENSE)
在真实的调查活动中经过实战检验 | 由 Indica Independent 构建
标签:程序员工具, 网络测绘, 高对比度