关于 chasa
docstoc 面向自由职业者,将未付款发票信息转为跟进邮件,并根据逾期时间调整语气。它只生成草稿,不会替用户发送;MCP 端点公开只读工具,生成草稿需会话或 API 密钥。
主要功能
- 01按逾期时间生成跟进邮件
- 02将草稿改写得更委婉、坚定或简短
- 03通过 CSV 导入发票
- 04在账龄看板中跟踪发票
- 05提供公开的 MCP 只读工具
适用场景
- 01为未付款发票撰写提醒
- 02发票逾期后准备更坚定的跟进邮件
- 03从 CSV 文件载入发票记录
- 04在账龄看板查看未付款发票
MCP 相关
服务在 https://api.docstoc.io/mcp 提供 MCP 端点。只读工具公开可用;draft_chase_email 工具需要会话或 API 密钥。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://api.chasa.io/mcpclaude mcp add --transport http docracy1-chasa https://api.chasa.io/mcp{"mcpServers":{"docracy1-chasa":{"type":"http","url":"https://api.chasa.io/mcp"}}}在 Cursor 中打开{"servers":{"docracy1-chasa":{"type":"http","url":"https://api.chasa.io/mcp"}}}在 VS Code 中打开{"mcpServers":{"docracy1-chasa":{"type":"http","url":"https://api.chasa.io/mcp"}}}{"mcpServers":{"docracy1-chasa":{"serverUrl":"https://api.chasa.io/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
docstoc
粘贴未付款的发票,即可获得一封已写好的跟进邮件,语气会根据逾期时间恰到好处地调整。
docstoc 绝不会代你给客户发送邮件——它只会起草跟进邮件,供你复制到 Gmail、Outlook 或 Apple Mail 中。语气会随逾期天数逐步加强(友好 → 坚定 → 直接)。
在线网址
| URL | |
|---|---|
| 营销页面 | https://docstoc.io/ |
| 应用(工具) | https://docstoc.io/app/ |
| 登录 | https://docstoc.io/app/login |
| 连接器 | https://docstoc.io/app/connector |
| 管理后台 | https://docstoc.io/app/admin |
| API | https://api.docstoc.io |
| MCP | https://api.docstoc.io/mcp — 只读工具公开可用;draft_chase_email 需要会话或 API 密钥 |
Worker 的 PUBLIC_APP_URL 为 https://docstoc.io(用于魔法链接、OAuth 回调、Stripe 返回 URL 和摘要链接)。
旧版 chasa.io / api.chasa.io 会通过 Pages 的 _middleware.ts 和 worker 重定向,返回 301 到 docstoc。服务提供商控制台 URI 请参见 scripts/oauth-redirect-uris.md。
上线检查清单
- 在 Cloudflare Pages 项目
chasa中绑定docstoc.io,并等待状态变为 Active。 www.docstoc.io→ 主域名:由apps/web/functions/_middleware.ts处理(重新部署 web)。chasa.io/www.chasa.io→docstoc.io:由同一中间件处理。api.chasa.io→api.docstoc.io:由apps/worker/src/lib/legacyHostRedirect.ts中的 worker 中间件处理。- 在
api.docstoc.io上注册 OAuth 重定向 URI——请参见scripts/oauth-redirect-uris.md。 - 可选:配置 DMARC:
./scripts/dmarc-remove-rua.sh(从_dmarc.docstoc.io中移除rua=)。 - 运行
./scripts/go-live-verify.sh。
部署顺序无关紧要:面向浏览器的链接会根据请求来源的 origin 构建(见下文“应用 origin 解析”),因此无论先部署哪一项,pages.dev 和 chasa.io 都会继续正常工作。
应用 origin 解析
魔法链接、登录后重定向、Stripe 返回 URL 和团队邀请使用用户当前所在的 origin,而非 PUBLIC_APP_URL。Pages 的 /api 代理会将其转发为 X-Docstoc-App-Origin,worker 仅在其与 lib/appUrl.ts 的允许列表匹配时才会接受(PUBLIC_APP_URL、docstoc.io、www.docstoc.io、旧版 chasa.io 主机、*.pages.dev 项目/预览主机、localhost)。这样可以让预览部署独立运行,并实现零停机切换域名。
不带受信任 origin 的请求——直接发往 api.docstoc.io 的服务提供商 OAuth 回调,以及摘要 cron——仍会回退到 PUBLIC_APP_URL。
产品规格
套餐与定价
| 套餐 | 价格 | AI 草稿 | 团队席位 | 备注 |
|---|---|---|---|---|
| 免费版 | $0 | 每月 5 次(由服务器强制执行) | 1(仅所有者) | 起草邮件无需注册;登录后即可升级 |
| Pro | $14.99 / 月 | 不限量 | 5(所有者 + 邀请成员) | 工作区统一收费——不按席位计费;最受欢迎 |
| Business | $39.99 / 月 | 不限量 | 20 | 智能回复、风险评分、催款函、证书品牌定制、SSL 自动化 |
Stripe 价格 ID 位于 apps/worker/wrangler.toml,分别为 STRIPE_PRICE_SOLO(对应 Pro)、STRIPE_PRICE_PRO / STRIPE_PRICE_ENTERPRISE(对应 Business;非机密)。账单门户和 Webhook 会更新 accounts.plan 和 is_paid。
功能矩阵(按方案)
| 功能 | Free | Pro+ |
|---|---|---|
| AI 催款邮件草稿(按逾期天数调整语气) | 5 封/月 | 不限量 |
15+ 个可复制粘贴的邮件模板(/free-templates/) | ✓ | ✓ |
| CSV 发票上传(工具) | ✓ | ✓ |
| 手动发票列表 + 账龄看板(工具) | ✓ | ✓ |
| 改写为更委婉 / 更强硬 / 更简短 | — | ✓ |
| 感谢信、回复客户、3 步邮件序列、SMS/WhatsApp 草稿 | — | ✓ |
| 客户 CRM + 联系备注 | — | ✓ |
| 账龄同步(工具 → 服务端) | — | ✓ |
| 提醒日历(计划催款日期) | — | ✓ |
| 催款时间线 + 标记已发送 / 已付款 | — | ✓ |
| 每日催款摘要邮件(美国东部时间上午 9 点,批准后发送) | — | ✓ |
| 延后提醒 + 标记已付款后停止提醒 | — | ✓ |
| 跟踪版 HTML 邮件的打开 / 点击跟踪 | — | ✓ |
| 默认付款链接(Stripe、PayPal、Venmo、Zelle…) | — | ✓ |
| Zapier 模板(FreshBooks、Wave、Zoho Books) | — | ✓ |
| 智能回复分类器 + 识别承诺付款日期 | — | Business |
| 客户付款风险评分 | — | Business |
| 正式催款函 + 催收证据包 | — | Business |
| 自定义证书品牌标识 + SSL 自动化 | — | Business |
| 自定义品牌标识(徽标、滞纳金提示) | — | ✓(管理员角色) |
出站 Webhook(chase.drafted、chase.sent 等)+ HMAC 签名 | — | ✓(管理员) |
| 点击跟踪(跟踪版副本 HTML) | — | ✓ |
| 团队邀请(管理员 / 成员角色) | — | ✓ |
| 云存储 PDF 导入(Dropbox、OneDrive、Box) | — | ✓ |
| QuickBooks Online + Xero 逾期发票导入 | — | ✓ |
HTTP API + API 密钥(/api/v1/chase/draft) | — | ✓ |
| 通过 API 密钥使用 Zapier / Make | — | ✓ |
**工作区角色:**所有者始终是管理员。受邀成员可以使用 Pro+ 功能;仅管理员可执行的操作:品牌设置、Webhook、连接器 OAuth 连接 / 导入、API 密钥增删改查、团队邀请。
应用路由(/app/*)
| 路由 | 用途 |
|---|---|
/ | 工具 — 发票列表、AI 草稿、CSV/PDF 导入、多选批量操作 |
/login | Magic-link 登录 + Cloudflare Turnstile |
/account | 方案、账单门户、付款链接 |
/team | 邀请成员、角色(Pro+) |
/clients | 客户 CRM(Pro+) |
/branding | 徽标 + 滞纳金提示(工作区管理员) |
/webhooks | 出站 Webhook URL(工作区管理员) |
/connector | 云存储 + QBO/Xero OAuth + API 密钥 |
/admin | 内部管理仪表板(独立 Cookie) |
除 /login 和 /admin 外,所有应用路由都需要会话。未通过身份验证的用户会重定向到 /login。SPA 分析需要获得 Cookie 同意(GDPR)。
国际化(EN + ES)
与 Docracy 使用相同路径:apps/web/app/src/lib/i18n/ 中的轻量级目录(不使用 i18next)。登录页、侧边栏和 More 面板中提供 LocaleProvider + EN|ES 切换器。P1 涵盖登录页 / 外壳 / 欢迎页;接下来扩充应用其余部分的目录。偏好设置存储为 chasa_locale。营销 HTML 在后续处理前保持英文。
营销与 SEO(apps/web/public/ 中的静态 HTML)
- 首页包含定价、FAQ JSON-LD、竞品对比
- SEO 着陆页:
/invoice-follow-up、/payment-reminder、/overdue-invoice、/chase-invoices、/freelancer-invoice-follow-up /features/(索引、AI 语气、模板)、/docs/、/ai、/about/blog/(3 篇文章 + 动态post.html)/free-templates/— 15 个生成的模板页面 + 索引- 法律页面:
/privacy、/terms、/imprint sitemap.xml、robots.txt、404.html、Cookie 同意、滚动深度分析- 使用自托管字体(不使用 Google Fonts);通过
_headers强制执行 CSP
编辑 apps/web/scripts/generate-free-templates.mjs 后,重新生成免费模板:
npm run generate:templates --workspace apps/web
架构
Monorepo(npm 工作区):
| Package | Stack | Deploy target |
|---|---|---|
apps/web | React 18 + Vite + React Router | Cloudflare Pages(chasa) |
apps/worker | Hono + Cloudflare Workers + D1 + Workers AI | api.chasa.io |
apps/web/
app/ React SPA (/app/*) — lazy-loaded routes, AccountProvider
src/pages/tool/ Tool module (components, CSV import, aging sync)
src/pages/connector/ Connector module (OAuth, API keys)
public/ Static marketing site + fonts + _headers
scripts/ copy-fonts, generate-free-templates, validate-static-html
apps/worker/
src/routes/ HTTP handlers (auth, billing, emails, aging, mcp, …)
src/lib/ auth, ai, billing, schemas (Zod), rate limits, webhooks
migrations/ D1 SQL (0001–0011)
**数据:**Cloudflare D1(chasa-db)。OAuth 令牌在静态存储时使用 AES-GCM 加密(TOKEN_SECRET)。会话存储在 sessions 表中;魔法链接仅可使用一次(原子消费)。
**AI:**Cloudflare Workers AI(@cf/meta/llama-3.1-8b-instruct-fp8)。提示词会用分隔符包裹用户内容,以降低注入风险。
API 接口(worker)
| 前缀 | 用途 |
|---|---|
/api/auth | 魔法链接请求/验证、登出、Turnstile 配置 |
/api/account | 个人资料、品牌设置 |
/api(邮件) | generate-email、rewrite-email、generate-thank-you、generate-reply、generate-sequence、generate-sms |
/api/billing | Stripe 结账、门户、Webhook |
/api/aging | 账龄看板 CRUD + 原子批量同步 |
/api/clients | 客户 CRM |
/api/reminders | 催款提醒日历 |
/api/team | 工作区成员 + 邀请 |
/api/webhooks | 出站 Webhook CRUD |
/api/connector | 旧版 API 密钥 CRUD |
/api/account/connectors | 云服务 + 会计 OAuth |
/api/tracking | 跟踪副本 + 点击统计 |
/api/analytics | 事件跟踪 + 页面浏览聚合数据 |
/api/v1/chase/draft | 公共 HTTP API(Bearer chasa_… 密钥) |
/api/admin | 管理员仪表板 API |
/api/blog | 来自 D1 的公开博客文章 |
/api/csp-report | CSP 违规报告 |
/mcp | MCP JSON-RPC(草稿工具、模板列表) |
/api/t/:id | 点击重定向(仅允许列表中的 URL) |
安全与合规(已实现)
- **免费套餐额度:**每月 5 份 AI 草稿,在 D1(
ai_usage)中强制执行,而非在客户端执行 - **速率限制:**AI 草稿、MCP、分析、管理员登录(D1 桶)
- **Turnstile:**设置密钥后,在生产环境 HTTPS 中采用失败关闭策略;每个邮箱的魔法链接冷却时间为 60 秒
- **HKDF 令牌用途:**会话、魔法链接、API 密钥、管理员、邀请、OAuth 状态和 Webhook 签名分别使用独立密钥(查找时回退到旧版哈希)
- **会话轮换:**通过魔法链接登录时使之前的会话失效;管理员登录时清除管理员会话
- **会话清理:**每日 cron 清除过期会话、魔法链接和速率限制桶
- **RBAC:**工作区管理员权限可用于品牌设置、Webhook、连接器 OAuth、API 密钥、团队邀请
- **输入验证:**所有 JSON API 路由均使用 Zod schema(身份验证、邮件、客户、团队、Webhook、账单、管理员、MCP 草稿参数)
- **Stripe Webhook:**通过事件 ID 去重(
stripe_events) - 出站 Webhook:
X-Chasa-Signature: sha256=…HMAC - **点击跟踪:**仅重定向到创建跟踪邮件时存储的 URL
- **Webhook URL:**SSRF 检查(不允许 localhost / 私有 IP)
- **OAuth 状态:**使用时序安全的 HMAC 比较
- **CSP:**Pages 上强制执行策略;
report-uri→/api/csp-report - **GDPR:**Cookie 同意控制 SPA 分析;页面浏览不使用访客 ID(仅聚合数据)
- **密钥:**绝不提交 —
wrangler secret put …
本地开发
npm install
npm run dev:worker # wrangler dev --local, http://127.0.0.1:8787
npm run dev:web # vite, http://localhost:5173 (proxies /api to worker)
未设置 RESEND_API_KEY 时,魔法链接会输出到 worker 控制台 — 复制 URL 并在浏览器中打开。
质量检查
npm run lint # ESLint (web app + worker)
npm run test # Vitest (schemas, crypto, dates)
npm run typecheck # tsc worker + vite build web
CI(.github/workflows/ci.yml)会在每个 PR 上依次运行 lint → test → 静态 HTML 验证 → 类型检查;当设置了 CLOUDFLARE_API_TOKEN 时,推送到 main 会自动部署 worker + web。
手动部署
npm run deploy:worker
npm run deploy:web # builds (copies fonts) then pages deploy
架构变更后:
cd apps/worker
wrangler d1 migrations apply chasa-db --local # dev
wrangler d1 migrations apply chasa-db --remote # production
迁移 0001–0011 包括套餐、管理员/分析、品牌设置、Webhook、API 密钥、云连接器、客户/账龄、功能对等,以及安全强化(速率限制、AI 使用量、Stripe 幂等性、跟踪链接允许列表)。
Cloudflare Turnstile(机器人防护)
保护 /api/auth/request 和管理员登录。
- Cloudflare Dashboard → Turnstile → Add widget
- 主机名:
chasa-71s.pages.dev、chasa.io、localhost - 站点密钥 →
wrangler.toml[vars]中的TURNSTILE_SITE_KEY - 密钥 →
wrangler secret put TURNSTILE_SECRET_KEY - 重新部署 Worker。登录界面通过
GET /api/auth/config读取配置。
本地运行 / 未配置密钥: 验证会被跳过,并显示控制台警告。测试密钥:
| 值 | |
|---|---|
| 站点密钥 | 1x00000000000000000000AA |
| 密钥 | 1x0000000000000000000000000000000AA |
一次性云端设置
-
cd apps/worker && wrangler d1 create chasa-db— 将database_id粘贴到wrangler.toml -
wrangler d1 migrations apply chasa-db --remote -
Stripe(先使用测试模式): 创建两个周期性 Price(Pro $14.99、Business $39.99)。将
price_…ID 复制到wrangler.toml:STRIPE_PRICE_SOLO、STRIPE_PRICE_PRO、STRIPE_PRICE_ENTERPRISE
-
wrangler secret put TOKEN_SECRET—openssl rand -hex 32 -
wrangler secret put STRIPE_SECRET_KEY(先使用测试密钥) -
Stripe webhook →
https://api.chasa.io/api/billing/webhook— 事件:checkout.session.completed、customer.subscription.deleted→wrangler secret put STRIPE_WEBHOOK_SECRET -
wrangler secret put RESEND_API_KEY— 在 Resend 中验证发信域名 -
Turnstile — 参见上文
-
wrangler secret put ADMIN_PASSWORD— 用于/app/admin9a. AI 文档生成器(可选,公开营销工具): Google AI Studio → 创建免费 API 密钥 →wrangler secret put GEMINI_API_KEY。免费套餐有速率限制;Worker 也会实施自己的每 IP 限制和 Turnstile 验证。参见apps/worker/src/lib/geminiDocGen.ts。 -
云存储 OAuth(可选,Pro+):
提供商 重定向 URI Dropbox https://api.docstoc.io/api/account/connectors/dropbox/callbackOneDrive https://api.docstoc.io/api/account/connectors/onedrive/callbackBox https://api.docstoc.io/api/account/connectors/box/callbackGoogle https://api.docstoc.io/api/account/connectors/google/callbackGoogle 登录重定向:
https://api.docstoc.io/api/auth/google/callback各提供商的分步说明:
scripts/connectors-docstoc-setup.mdwrangler secret put DROPBOX_CLIENT_ID wrangler secret put DROPBOX_CLIENT_SECRET wrangler secret put ONEDRIVE_CLIENT_ID wrangler secret put ONEDRIVE_CLIENT_SECRET wrangler secret put BOX_CLIENT_ID wrangler secret put BOX_CLIENT_SECRET wrangler secret put GOOGLE_LOGIN_CLIENT_SECRET wrangler secret put GOOGLE_INTEGRATIONS_CLIENT_SECRET -
QuickBooks Online + Xero(可选,Pro+):
提供商 重定向 URI QBO https://api.docstoc.io/api/account/connectors/quickbooks/callbackXero https://api.docstoc.io/api/account/connectors/xero/callback控制台设置步骤参见
scripts/connectors-docstoc-setup.md。wrangler secret put QBO_CLIENT_ID wrangler secret put QBO_CLIENT_SECRET wrangler secret put XERO_CLIENT_ID wrangler secret put XERO_CLIENT_SECRET -
Cloudflare Pages 项目
chasa+ 自定义域名chasa.io;Worker 自定义域名api.chasa.io -
只有在端到端测试模式冒烟测试通过后,才切换到 Stripe 正式密钥、价格和 webhook
本地密钥(apps/worker/.dev.vars,已被 git 忽略)
TOKEN_SECRET=dev-secret-not-for-prod
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
ADMIN_PASSWORD=your-dev-admin-password
# Optional Turnstile test keys (or omit to bypass):
# TURNSTILE_SECRET_KEY=1x0000000000000000000000000000000AA
# Optional — AI Document Generator tool returns 503 until set:
# GEMINI_API_KEY=your-google-ai-studio-key
用于本地 webhook 的 Stripe CLI:
stripe listen --forward-to localhost:8787/api/billing/webhook
预发布环境
wrangler deploy --env staging
使用单独的 D1(chasa-db-staging)——创建该数据库,并将 ID 粘贴到 wrangler.toml 的 [env.staging] 中。
SEO 上线检查清单
自动化(构建)
generate-seo.mjs 会在每次运行 npm run build 时执行,并写入:
sitemap.xml— 所有公开页面(营销页面、模板、博客)robots.txt— 爬取规则 + 站点地图 URLblog/feed.xml— 博客文章的 RSS{indexnow-key}.txt— Bing/Yandex 的 IndexNow 密钥文件- 设置环境变量时,在
index.html/ai.html中添加验证元数据(见下文)
新闻资料包见 /press — 标志、公司简介文案,以及建议用于反向链接的锚文本。
Google Search Console(一次性设置)
-
在 Search Console 中添加媒体资源
https://chasa.io -
选择 HTML tag 验证方式 → 复制
content="…"的值 -
使用令牌重新构建:
GOOGLE_SITE_VERIFICATION=your_token_here npm run build --workspace apps/web npm run deploy:web或者在 Cloudflare 中使用 DNS TXT(无需重新构建)。
-
提交站点地图:
https://chasa.io/sitemap.xml -
对
/、/app/、/payment-reminder、/free-templates/使用 URL 检查工具
Bing 可选:BING_SITE_VERIFICATION=…,与 Google 的设置相同。
部署后,向 IndexNow(Bing)发送 ping:
curl -X POST https://api.indexnow.org/indexnow \
-H 'Content-Type: application/json' \
-d '{"host":"chasa.io","key":"chasa-indexnow-20260727","keyLocation":"https://chasa.io/chasa-indexnow-20260727.txt","urlList":["https://chasa.io/sitemap.xml"]}'
反向链接(创始人 — 使用 /press)
网站端已完成:所有页面均添加了社交链接和 sameAs 架构化数据,博客文章链接到落地页的站内链接、RSS + llms.txt。
仍需手动处理(从新闻资料包中复制):
- LinkedIn 公司主页 — 网站字段 + 发布链接到
/app/或博客文章的上线公告 - X @DocstocHQ — 置顶上线公告
- 准备就绪后发布到 Product Hunt / Indie Hackers
- 在 RELACON GmbH 网站添加指向
chasa.io的交叉链接 - 3–5 个自由职业者社区 — 链接到
/blog/文章或/free-templates/,而不只是首页 - 在电子邮件签名中添加
chasa.io
实体
docstoc 是 RELACON GmbH 的产品,公司位于奥地利维也纳。请参阅 /imprint 和 /privacy。
联系方式:[email protected]
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。