360 Secure SkillHub
360 安全技能中心

Verifying Phones

该 Skill 说明如何使用 Sendly Verify API 发送短信 OTP、校验和重发验证码、处理过期与超限错误,并创建托管验证会话;提供 curl 与 Node.js SDK 示例,需要配置 API 密钥,号码与验证码会发送至第三方服务。

sendly-live
sendly-live
热度 32.09
最近更新 2026-05-11 17:39:59
分类:开发依赖:第三方 API应用场景:API 集成 / 代码生成

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add verifying-phones
Metadata
name
verifying-phones
description
Verifies phone numbers via SMS OTP using the Sendly Verify API. Sends codes, checks codes, handles expiry, and provides hosted verification sessions. Applies for phone verification, OTP, 2FA, or passwordless login flows.

Phone Verification with Sendly

Quick start

import Sendly from "@sendly/node";

const sendly = new Sendly(process.env.SENDLY_API_KEY!);

const verification = await sendly.verify.send({ to: "+15551234567" });
console.log(verification.id); // ver_abc123

const result = await sendly.verify.check(verification.id, { code: "123456" });
console.log(result.status); // "verified" | "failed" | "expired"

REST API

Base URL: https://sendly.live/api/v1

Send OTP

curl -X POST https://sendly.live/api/v1/verify \
  -H "Authorization: Bearer $SENDLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to": "+15551234567", "app_name": "MyApp", "code_length": 6, "timeout_secs": 300}'

Required: to (E.164 format)

Optional: app_name (shown in SMS), code_length (4–10, default 6), timeout_secs (default 300)

Response:

{
  "id": "ver_abc123",
  "status": "pending",
  "phone": "+15551234567",
  "expires_at": "2026-04-01T10:05:00Z"
}

In sandbox mode (sk_test_* keys), the response includes sandbox_code with the actual code.

Check code

curl -X POST https://sendly.live/api/v1/verify/ver_abc123/check \
  -H "Authorization: Bearer $SENDLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"code": "123456"}'

Statuses: verified, failed (wrong code), expired, max_attempts_exceeded (3 attempts max)

Resend OTP

curl -X POST https://sendly.live/api/v1/verify/ver_abc123/resend \
  -H "Authorization: Bearer $SENDLY_API_KEY"

Hosted verification sessions

Zero-code verification UI hosted by Sendly:

curl -X POST https://sendly.live/api/v1/verify/sessions \
  -H "Authorization: Bearer $SENDLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"success_url": "https://yourapp.com/verified?token={TOKEN}", "brand_name": "MyApp"}'

Returns a url the user visits. After verification, redirects to success_url with a token. Validate the token server-side:

curl -X POST https://sendly.live/api/v1/verify/sessions/validate \
  -H "Authorization: Bearer $SENDLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"token": "tok_from_redirect"}'

Node.js SDK

import Sendly from "@sendly/node";
const sendly = new Sendly(process.env.SENDLY_API_KEY!);

const v = await sendly.verify.send({ to: "+15551234567", appName: "MyApp" });
const check = await sendly.verify.check(v.id, { code: "123456" });
const resend = await sendly.verify.resend(v.id);
const session = await sendly.verify.sessions.create({ successUrl: "https://app.com/done?token={TOKEN}", brandName: "MyApp" });
const validated = await sendly.verify.sessions.validate({ token: "tok_xxx" });

Error handling

Error Meaning Action
invalid_phone_number Not E.164 format Format as +{country}{number}
verification_expired Code timed out Call resend or start new verification
max_attempts_exceeded 3 wrong codes Start new verification
rate_limit_exceeded Too many requests Wait and retry

Sandbox testing

With sk_test_* keys, the sandbox_code field in the send response contains the code. No real SMS is sent. OTP to +15005550000 always works.

Full reference