用 iPhone 把短信验证码送进 CI 和 QA 自动化
作者:Fwrd · · 更新于
要把短信一次性验证码送进 CI 或 QA 自动化,就把接收验证码的 SIM 卡放进一部团队 iPhone,让“快捷指令”的“信息”自动化把每条验证码短信交给 Fwrd,由它以 JSON 格式 POST 到你自己的 HTTPS Webhook。然后你的 CI 任务从该端点读取最新的验证码,并输入到登录界面。
你需要: 一部运行 iOS 26 或更高版本、装有接收验证码号码 SIM 卡的 iPhone、“快捷指令”App(手机里本来就有)、Fwrd,以及一个 CI 能读取的公开 HTTPS 地址,例如预发布环境的路由或 n8n 工作流。Fwrd 会拒绝 IP 地址以及 .local 或 .internal 名称,而且不发送登录请求头,所以请在地址里放一段很长的密钥。
为什么短信验证码很难自动化?
短信验证码会卡住 CI,因为它们到达的是手机,而不是你的运行器,除非有东西把每条短信送到你的流水线能读到的地方。
编写这类检查的团队,大多只有自己的手机来接收验证码。装着 Fwrd 的团队 iPhone,能让这部手机变成你的流水线可以读取的东西。
什么时候团队 iPhone 合适?
当验证码必须送到某个特定的运营商号码时,它很合适:比如你要登录的第三方服务、已经绑定公司手机号的预发布账户,或按号码类型区别对待的流程。Twilio 的 Lookup 文档(2026 年 10 月 17 日查阅)表明,应用能区分移动号码和非固定 VoIP 号码,后者被描述为在线获得的虚拟号码。团队 iPhone 里的 SIM 卡是真实的运营商号码,所以验证码会像发给客户时一样送到。
取舍在于:一部手机只有一个号码,而且必须保持开机并联网。下面的章节会讲到这两点。
如何把 iPhone 上的短信验证码发送到 CI
在 Fwrd 中添加一个只保留验证码的 Webhook 转发目标,再创建一个把每条验证码短信交给 Fwrd 的“信息”自动化。端点这一侧的做法,Webhook 指南里有完整说明。
在 Fwrd 中添加 Webhook。 打开 Fwrd,轻点 +,选取 Webhook。把你端点完整的 HTTPS 地址粘贴到“配置”栏,轻点“发送测试信息”,让你的端点看到这些字段,然后轻点 ✓ 保存。
只保留验证码。 在同一个转发目标里,在“哪些短信”下选取“仅部分短信”,并打开“像验证码”,它会保留含有 4 到 8 位验证码的短信。这只算一个条件,所以免费版也能用。
创建“信息”自动化。 在 iOS 27 上,打开“快捷指令”,依次轻点“资料库”“自动化”和 +。如果看到“描述快捷指令”,轻点“编辑”。轻点“自动化”,再轻点“信息”,将“发件人”改为“信息”,然后输入 code,或你的服务发来的短信里使用的词。在 iOS 26 上,打开“自动化”标签页,轻点 +,选取“信息”,并在“信息包含”下输入它。
让它不经询问直接运行。 在 iOS 27 上,轻点触发条件旁边的箭头,确保“运行前确认”已关闭。依次轻点 ⓘ 和“隐私”,确保“锁定时允许运行”已打开。在 iOS 26 上,选取“立即运行”,然后轻点“下一步”和“创建新快捷指令”。
添加 Fwrd 的操作。 搜索“转发”,添加“转发信息到所有目标”。把它的“信息”设为“输入快捷指令的信息”(在 iOS 26 上,依次选取“输入快捷指令的信息”和“信息”)。轻点返回来保存(iOS 26 上为“完成”)。
在 CI 中读取验证码。 让你的端点把每个请求体连同到达时间一起保存下来。在你的运行请求验证码之后,轮询此后收到的最新短信,并用正则表达式取出其中的数字。
这就完成了。 含有验证码的新短信现在会自动到达你的端点,无论 iPhone 是否锁屏。
端点会收到什么?
一个 POST 请求,JSON 请求体里是原样的短信文字,同时放在 content 和 text 中。其中没有时间戳,所以请在你这一侧记录时间。
{
"content": "Your verification code is 482913",
"text": "Your verification code is 482913"
}
同一条短信的每次尝试都带有相同的 Idempotency-Key 请求头,所以你可以丢弃重复项。如果发送超时、遇到 429 或 5xx,或者连接中断,Fwrd 最多会再试两次。15 秒内返回的任何 2xx 响应都算已送达,重定向会被拒绝。在 Fwrd 的“设置”中打开“附上发件人”,并在 Fwrd 的操作上选取“发件人”,请求体里还会多出一个 sender 字段,当多个服务向同一个号码发短信时很有用。
这个方案做不到什么
- 一个号码一次只能服务一次运行。 并行的任务在同一个号码上请求验证码,可能读到对方的验证码,所以请让登录步骤排队,或把每个验证码与请求它的那次运行对应起来。
- 免费版每月涵盖 15 条验证码。 超过之后,验证码要到下个月才会继续转发,繁忙的流水线很快就会用完;Fwrd Pro 可取消限制,在美国售价为每月 $4.99 或每年 $29.99。
- 它只能接收。 Fwrd 无法替你的 CI 从 iPhone 发送短信。
- 手机必须保持开机并联网。 重新启动后,转发要等有人解锁一次才会继续;连续三天没有解锁的 iPhone 会自行重新启动。请让它保持充电,并放在有人够得着的地方。
- Fwrd 的操作会发送到每个已启用的转发目标。 如果同一部手机还要转发到别处,请改用“转发信息到目标”,再选取这个 Webhook。
- 只处理新短信。 自动化创建之前到达的验证码不会被发送。
如果你要的是给人看的验证码,而不是给流水线用的,在 Slack 中与团队共享 2FA 验证码介绍了那种设置。
关于自动化中的短信验证码的问题
Selenium 或 Playwright 能直接读取短信验证码吗?
不能。浏览器自动化看不到手机里的信息。必须先有东西把短信从手机上移出来,例如由“快捷指令”自动化加上 Fwrd,把它发送到你的脚本轮询的 Webhook。
验证码会经过 Fwrd 的服务器吗?
不会。Fwrd 没有账户,也没有自己的服务器;每条短信从 iPhone 直接发送到你的 HTTPS 端点,地址保存在 iPhone 的钥匙串中。
它支持短码发件人吗?
支持。自动化匹配的是短信的内容,而不是发件人,所以来自不在你联系人里的短号码的验证码,也能匹配 code 这样的词。
我可以用 n8n 工作流作为端点吗?
可以。添加一个设为 POST 的 Webhook 节点,使用它的 Production URL,并发布工作流,否则它不会应答。把 iPhone 短信发送到 Zapier、Make 或 n8n里有具体步骤。
想让 CI 读到短信验证码?
Fwrd 把团队 iPhone 上每条符合条件的短信以 JSON 格式 POST 到你自己的 HTTPS Webhook,无需账户,中间也没有 Fwrd 的服务器。每月有 15 条免费转发。
每月 15 条免费转发。Fwrd Pro 取消转发和筛选条件的上限,并增加“永不转发”列表,每月 $4.99 或每年 $29.99,符合条件的客户在年度订阅上可享 7 天免费试用。
iPhone · iOS 26 或更高版本