AI代理如何重新定义商业API:以无开放接口的Dodo Pizza集成为例
AI代理早已不再只是概念——它们已经在生产环境中处理各类交易任务:添加商品到购物车、查询积分余额、确认支付以及下单。关键的技术挑战在于与那些不提供公开API的服务进行交互。本案例研究以Dodo Pizza为例,展示了开发者如何在封闭的RESTful接口之上构建一个功能完备的代理技能,通过无头浏览器绕过WAF和反爬虫保护,同时严格保障数据隐私并遵守服务条款。
代理架构:从CLI到上下文技能
该系统被设计为一种可扩展的代理框架技能(Claude Code、Kimiclaw、Openclaw),兼容任何支持外部工具的接口。不同于仅限于信息查询的语音助手,此代理能够执行有状态的操作:管理购物车、选择自提点、通过保存的Cookie进行双因素认证,并在资金扣款前完成支付确认。
一个关键原则是职责分离:
- 代理界面——一个简洁的自然语言界面:“订购一份香肠披萨配柠檬水”、“显示最近三次订单的历史”;
- 执行逻辑——由代理运行器触发的Node.js脚本(
dodo.mjs); - 网络交互——完全通过无头Chromium(Puppeteer)实现,模拟真实用户行为。
代理并不解析HTML——它会在通过所有客户端检查后,在加载页面的上下文中向网站的内部API发起fetch()请求。对服务器而言,它看起来就像普通用户流量:相同的User-Agent、相同的Cookie、相同的navigator.webdriver === false、相同的资源加载顺序。
反向工程封闭API并对抗检测
通过Chrome DevTools Protocol嗅探网络流量,获取了超过30个端点的文档。脚本会在完整的用户场景中拦截所有包含/api/的fetch和XHR请求——从浏览菜单到最终下单。这提供了完整的端点映射:GET /api/v5/menu、POST /api/v5/cart/add、PUT /api/v5/order/confirm、GET /api/v5/profile/bonuses等。
关键技术难点及其解决方案:
- Webdriver检测:ServicePipe会检查
navigator.webdriver。解决方案:在Puppeteer启动选项中加入一行代码——--disable-blink-features=AutomationControlled——并在运行时手动替换相关属性。 - JS挑战:网站在
page.goto()后会立即显示验证码任务。代理会等待<title>中出现“delivery”字样——这是SPA成功加载的标志。 - 登录时的reCAPTCHA v3:目前尚无软件解决方案。授权需在支持GUI的机器上手动完成一次;Cookie会被保存到文件中并传输给服务器。有效期为30天,未实现自动轮换。
- Canvas/WebGL指纹识别:尚未启用,但架构允许未来集成
puppeteer-extra-plugin-stealth。
所有这些措施确保了四个月的稳定运行,期间未发生故障或被封禁。
从技能到代理经济:安全认证与跨服务编排
目前,代理采用“一用户—一账号—一服务”的模式。然而,可扩展的模型需要标准化的代理身份识别。建议使用电信运营商作为身份提供商:MTS ID、Sber ID或Tinkoff ID已可通过护照和SIM卡验证身份。OAuth式的代理令牌方案如下:
- 用户通过电信运营商一次性认证;
- 电信运营商颁发带有明确作用域的JWT:
orders:dodo:read、orders:dodo:write、limit:2000rub/day; - Dodo验证令牌签名并确认作用域后再执行操作;
- 访问权限可通过运营商的手机App即时撤销。
这消除了存储Cookie和手动授权的必要,使企业能够掌控权限和分析数据。
更具前景的是主代理模型。它可同时协调多个技能:
主代理:
├── Dodo技能 → 辣香肠25厘米 — 369₽(15分钟自提)
├── Magnit技能 → 好可乐1.5L — 89₽(30分钟配送)
└── 结论:“从Dodo取披萨,从Magnit订可乐。
省下66₽,还能多拿三倍的可乐量。行吗?”
此类代理使用A2A(代理对代理)协议:每个服务都发布其能力的机器可读描述(例如,采用OpenAPI 3.1格式并附加x-agent-capabilities扩展)。代理之间可动态发现彼此,无需手动集成。
关键要点
- 代理已在生产环境中投入使用:订单作者自2025年12月起便将其作为主要下单方式——这不是PoC,而是可用的解决方案。
- 封闭API若能模拟真实用户行为且不违反服务条款,便可合法地通过无头浏览器使用(即在自己的账户中自动化自身操作)。
- 企业忽视代理流量时会失去控制权和分析能力:当前的集成在指标上与爬虫无异。
- 专用的代理就绪API并非选项——它是竞争优势:可将CAC降至零、免除平台佣金,并开辟个性化促销渠道。
- 个性化应置于客户端:代理了解订单历史、预算和偏好——企业只需提供干净、文档化的API。
实施:380行JavaScript代码,一个依赖库(puppeteer-core),只需一条命令即可安装。出于伦理原因,代码未开源:绕过特定服务的反爬虫措施需获得API所有者的同意。本文的目的并非提供规避指南,而是邀请就代理接口标准化展开对话。
— Editorial Team
暂无评论。