验证设置
Configure 页面的 General 选项卡决定工作区中每个验证的行为。它控制验证码的有效时长、多少次错误尝试会结束一个验证、多久之后可以发送新验证码,以及验证码所属的网站。
每个字段显示的是生效值:如果您设置了覆盖值,则显示该值,否则显示 Bird 的平台默认值。离开字段时即自动保存。Duration、Maximum Retries 和 Website 在创建验证时固定,因此修改它们只对新的验证生效。修改 Retry Delay 则对下一次创建调用生效,包括已在进行中的验证。
修改设置需要 write 级别的 verify_management 权限,admin 和 developer 角色包含该权限。analyst 角色可以查看此页面。请参阅用户、团队和角色。

验证周期
| 设置 | 控制内容 | 默认值 | 范围 |
|---|---|---|---|
| Duration | 验证保持有效的时长。超过此时间窗口后的校验会返回原因 expired,验证随即结束,原因为 ttl_elapsed。 | 10 分钟 | 1 至 999 分钟 |
| Maximum Retries | 多少个错误验证码会结束一个验证。最后一个错误验证码会使验证失败,原因为 attempts_exhausted。 | 5 | 1 至 10 |
| Retry Delay | 重新发送冷却时间:向同一收件人发送下一个验证码前的最短等待时间。 | 60 秒 | 0 至 3600 秒 |
- Duration 从创建验证时开始计时。重新发送验证码或切换到其他渠道会发送新的验证码,但保留原来的过期时间,因此较晚的重新发送不会延长有效期。对于身份验证流程,请将其设为 10 分钟或更短;原因见最佳实践。
- Maximum Retries 统计该验证下所有已发送验证码的错误输入次数,因此重新发送不会将其重置。如果某次校验使用了错误的验证码但验证仍处于待定状态,响应会在
attempts_remaining中报告剩余的尝试次数。 - Retry Delay 在你为同一收件人再次调用创建接口时生效。在冷却期内,该调用会返回仍有效的验证,而不会发送新的验证码。通过其他渠道发送验证码不受此限制,因为切换渠道与再次请求同一渠道是不同的请求。将其设为 0,则每次调用创建接口都会发送新的验证码,但仍受滥用防护中针对每个收件人的限制约束。
验证码长度不在此页面设置。验证码默认为六位数字,options.code_length 可为单个验证设置 4 到 8 位数字;请参阅选项。
自动填充
Website 指定用户输入验证码的网站,例如 https://login.example.com。设置网站后,浏览器只会在该网站上提示填入验证码,不会在其他网站上提示,这样用户无需手动复制验证码。留空则发送的验证码不指定任何网站。
网站的写法为 https:// 加上小写域名,不带端口、路径或末尾斜杠。国际化域名使用其 xn-- 形式,例如 bücher.example 写作 https://xn--bcher-kva.example。其他任何形式都会被拒绝;如果存在可用的形式,错误消息会给出应填写的形式。请使用显示验证码输入框的确切网站:位于 login.example.com 上的表单需要填写 https://login.example.com,而不是 https://example.com。
验证一旦设置了网站,Verify 就会将其添加到验证码消息中:
- SMS:消息末尾会附加一行,例如
@login.example.com #123456。为验证码输入框添加autocomplete="one-time-code",Safari 和其他浏览器就会提示填入验证码;如果希望浏览器无需点击即可自动填入,请在页面中调用 WebOTP API。这一额外行可能会增加一个 SMS 分段:在许多需要 Unicode 编码的语言中,例如阿拉伯语、希腊语或俄语,绑定网站的验证码会占用两个分段而不是一个,使其 SMS 费用翻倍;在其他语言中,较长的域名也可能产生同样的结果。 - 电子邮件:消息会携带一个
OTP-Token邮件头,其中包含验证码和网站,其定义见 OTP-Token 互联网草案第 01 版。邮件应用才刚开始读取此邮件头,因此请将其视为消息正文中验证码的补充。
网站在创建验证时即已确定。重新发送、回退到其他渠道或为同一收件人再次调用创建接口都会保留该网站。
按请求绑定验证码
请求可以通过 options.autofill_origin 指定自己的网站,该值会替换此验证的 Website。当一个工作区服务多个网站时使用。
如果验证码输入框位于跨源 iframe 中,例如嵌入在商店结账页中的支付表单,请将 options.autofill_origin 设为该 iframe 的网站,并将 options.autofill_top_level_origin 设为浏览器标签页中的页面。这样 SMS 行会同时列出两个网站,如 @shop.example #123456 @pay.example,这在任何语言中都可能增加一个分段。当页面直接嵌入该 iframe 并授予其 allow="otp-credentials" 时,Chrome 会自动填充该表单。对于这类验证,电子邮件不发送 OTP-Token 头,因为该头只能指定一个网站。如果顶层网站格式错误、请求和此页面中都未设置网站,或者顶层网站与该网站相同,请求会被拒绝并返回 422。
已注册的 SMS 发送方
如果您通过自己注册的发送方发送 SMS,例如美国 10DLC 活动,请在设置网站之前,向该活动添加一条以绑定行结尾的示例消息。如果消息与活动注册的示例不同,运营商可能会过滤该消息。
故障排除
- 网站被拒绝。 该值不符合要求的格式。请输入消息建议的格式,例如用
https://example.com表示https://Example.com/。 - 浏览器没有提供验证码。 请检查网站是否与页面地址完全一致(包括所有子域名),以及验证码输入框是否设置了
autocomplete="one-time-code"。对于 iframe,请检查请求是否同时设置了两个网站,以及嵌入页面是否授予了allow="otp-credentials"。自动填充还取决于浏览器:Chrome 通过 WebOTP 读取 SMS 行,Safari 通过其验证码自动填充功能读取,而 Firefox 不支持 WebOTP(浏览器支持)。 - 验证码在用户输入前已过期。 在调高 Duration 之前,请先在 Verify 日志中查看尝试的时间。原因通常是投递路径较慢,而延长有效时间会削弱验证码的安全性。