返回首页

AI 代理与封闭 API:Dodo Pizza 案例

本文详细解析了通过封闭 API 在 Dodo Pizza 下真实订单的 AI 代理的技术实现。它描述了逆向工程方法、使用 headless Chromium 绕过反机器人保护、技能架构以及标准化代理接口的前景。

AI 代理已经在订购披萨:工作原理
Advertisement 728x90

AI代理如何重新定义商业API:以无开放接口的Dodo Pizza集成为例

AI代理早已不再只是概念——它们已经在生产环境中处理各类交易任务:添加商品到购物车、查询积分余额、确认支付以及下单。关键的技术挑战在于与那些不提供公开API的服务进行交互。本案例研究以Dodo Pizza为例,展示了开发者如何在封闭的RESTful接口之上构建一个功能完备的代理技能,通过无头浏览器绕过WAF和反爬虫保护,同时严格保障数据隐私并遵守服务条款。

代理架构:从CLI到上下文技能

该系统被设计为一种可扩展的代理框架技能(Claude Code、Kimiclaw、Openclaw),兼容任何支持外部工具的接口。不同于仅限于信息查询的语音助手,此代理能够执行有状态的操作:管理购物车、选择自提点、通过保存的Cookie进行双因素认证,并在资金扣款前完成支付确认。

一个关键原则是职责分离:

Google AdInline article slot
  • 代理界面——一个简洁的自然语言界面:“订购一份香肠披萨配柠檬水”、“显示最近三次订单的历史”;
  • 执行逻辑——由代理运行器触发的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/menuPOST /api/v5/cart/addPUT /api/v5/order/confirmGET /api/v5/profile/bonuses等。

关键技术难点及其解决方案:

Google AdInline article slot
  • 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:readorders:dodo:writelimit:2000rub/day
  • Dodo验证令牌签名并确认作用域后再执行操作;
  • 访问权限可通过运营商的手机App即时撤销。

这消除了存储Cookie和手动授权的必要,使企业能够掌控权限和分析数据。

Google AdInline article slot

更具前景的是主代理模型。它可同时协调多个技能:

主代理:
├── 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

Advertisement 728x90

继续阅读