我为 AI 代理构建了 Docusign —— 具体做法

发布: (2026年3月13日 GMT+8 18:02)
5 分钟阅读
原文: Dev.to

Source: Dev.to

AI 代理可以起草合同、协商条款并完成语言定稿,但一旦需要签名,工作流就会中断。传统的电子签名服务(DocuSign、HelloSign、Adobe Sign)依赖浏览器、OAuth 流程或人工步骤,这些都不适合非人类发送者。

我构建了 signb.ee —— 为 AI 代理设计的文档签署基础设施。

Introducing signb.ee

signb.ee 提供一个单一的 API 调用,接受 markdown(大多数 LLM 的原生输出格式),并处理整个签署流程:

  • 将 markdown 转换为干净的 PDF
  • 验证发送者(API 密钥或邮件 OTP)
  • 向收件人发送签署链接的电子邮件
  • 让双方选择签名风格并签署
  • 返回带有防篡改签署证书的 SHA‑256 认证 PDF

无需 SDK,无需 OAuth 流程,也无需浏览器自动化。

API 示例

curl -X POST https://signb.ee/api/v1/send \
  -H "Content-Type: application/json" \
  -d '{
    "markdown": "# Mutual NDA\n\nTerms here...",
    "sender_name": "Alice",
    "sender_email": "alice@company.com",
    "recipient_name": "Bob",
    "recipient_email": "bob@acme.com"
  }'

signb.ee 工作原理

  1. Markdown → PDF – 服务将 Markdown 渲染为 PDF。
  2. 发送者验证
    • 无 API 密钥:向发送者发送电子邮件 OTP。
    • 有 API 密钥:发送者已预先验证,跳过 OTP。
  3. 收件人流程 – 收件人收到带有签署链接的电子邮件,选择签名样式并完成签署。
  4. 证书 – 双方均收到包含 SHA‑256 哈希和签署证书的 PDF。

实现细节

PDF 生成

我最初尝试使用 Puppeteer(HTML → 截图 → PDF),但 50 MB 的 Chromium 二进制文件导致无服务器平台出现大量冷启动。改用 pdf‑lib——一个纯 JavaScript 的 PDF 库,消除了原生依赖,并将包体积缩小了 95 %。

import { PDFDocument, rgb, StandardFonts } from "pdf-lib";

const pdfDoc = await PDFDocument.load(originalPdfBytes);
const page = pdfDoc.addPage([595, 842]); // A4

const helveticaBold = await pdfDoc.embedFont(StandardFonts.HelveticaBold);

page.drawText("SIGNING CERTIFICATE", {
  x: 50,
  y: 750,
  font: helveticaBold,
  size: 18,
  color: rgb(0.1, 0.1, 0.1),
});

// ... add signatures, timestamps, SHA‑256 hash

冷启动时间从约 8 秒下降到 < 500 毫秒。

身份验证选项

模式工作原理
API‑key发送方已预先验证;收件人可立即获取签署链接。
OTP发送方收到包含一次性验证码的电子邮件;几乎无摩擦,无需事先设置。

在生产环境中,HTTPS 下的认证 cookie 会带有 __Secure- 前缀,而中间件只检查 better-auth.session_token。解决办法只需一行代码:

// Before (broken in production)
const session = request.cookies.get("better-auth.session_token");

// After (works everywhere)
const session =
  request.cookies.get("__Secure-better-auth.session_token") ||
  request.cookies.get("better-auth.session_token");

如果在 HTTPS 上使用 BetterAuth,请确保同时检查这两种 cookie 名称。

端到端流程

  1. AgentPOST /api/v1/send
    • Markdown → PDF,上传到 Blob 存储
    • 发送者收到 OTP 邮件(或已预先验证)
  2. Sender 点击验证链接 → 创建账户,选择签名样式,签署 → 收件人收到签署链接
  3. Recipient 点击链接 → 查看 PDF,选择签名样式,签署 → 双方收到带有证书的最终 PDF

签名证书内容

  • 双方的姓名和签名
  • 每个签名的 UTC 时间戳
  • 签署者的 IP 地址
  • 完整文档的 SHA‑256 哈希值
  • 验证 URL

Future Work

  • MCP server discovery – 允许代理(Claude、Cursor、Windsurf 等)通过工具描述自动发现 signb.ee,消除手动文档的需求。
  • Webhook notifications – 在文档签署完成时触发 webhook,实现完全自动化的代理工作流,无需依赖电子邮件。

API 可用性

API 已上线,地址为 **https://signb.ee**,提供免费套餐(每月 5 份文档)。无需信用卡。

代理技能的安装

npx skills add signbee/skill --skill signbee -g

OpenAPI 规范和 llms.txt 可供代理使用。

Feedback

我正在寻找关于 API 设计的反馈,尤其是来自构建代理工作流的人的反馈。有什么缺失吗?有什么可以让它对你的代理更有用的地方吗?

0 浏览
Back to Blog

相关文章

阅读更多 »