Twilio 云通信平台 Skill
Twilio 的每个 REST 端点都用 HTTP Basic Auth(Account SID + Auth Token 或 API Key)鉴权,如果按接完其他 REST API 的默认手感发 Authorization: Bearer,每个请求都会失败并报错误码 20003,看起来像凭证错了,实际是鉴权方式错了。更容易搞反的是方向:调用 Twilio 拿到的永远是 JSON,但 Twilio 反过来调用你的服务器(入站短信/来电 webhook)时,你必须用 TwiML(XML)作答,返回 JSON 不会优雅降级,只会直接出错或被挂断。
安装
选你用的 Agent,复制命令。
npx -y skills add fxp/skillify --skill twilio --agent claude-code --yes装到项目的 .claude/skills/;加 -g 装到全局。装完需要你手动执行 /reload-plugins,这一步 Agent 代劳不了。
npx -y skills add fxp/skillify --skill twilio --agent codex --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill twilio --agent cursor --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill twilio --agent opencode --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill twilio --agent gemini-cli --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill twilio --agent github-copilot --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill twilio --agent trae --yes装到项目的 .trae/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill twilio --agent windsurf --yes装到项目的 .windsurf/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill twilio --agent qwen-code --yes把 --agent 换成你用的 Agent 标识,可以一次写多个。skills CLI 1.5.25 共支持 79 个,例如 qwen-code、kimi-code-cli、trae-cn、qoder、lingma、cline、roo。
或者让 Agent 自己装
读 https://github.com/fxp/skillify/blob/main/skills/twilio/prompt.md 并照它执行装对了的标志:references/ 下有 6 份文档。
装好后,可以这样问你的 Agent
这份 Skill 覆盖的典型任务。点一下复制。
6 类能力
每类能力对应一份 reference,Agent 按任务只打开需要的那份。
鉴权
HTTP Basic Auth、Account SID+Token 与 API Key 怎么选、Main/Standard/Restricted 权限范围、OAuth apps 的适用边界
短信 / MMS 发送
Messages 资源的发送与查询、E.164 校验、From/MessagingServiceSid 二选一、分段计费与消息状态生命周期
手机验证 / OTP
Verify Service、启动验证与核对验证码的两步流程、渠道选择、验证码有效期与频率限制
语音通话与 TwiML
发起外呼的 Calls 资源、入站来电必须用 TwiML 应答、Gather/Dial/Record 等动词与应答机检测
Webhook 与签名校验
入站短信/来电 webhook 必须回 TwiML、X-Twilio-Signature 的算法与校验方式、状态回调和录音回调
定价与错误码
用 Pricing API 查真实分国家价格、trial 账号限制、通用错误信封与错误码区间
当前事实
整理自官方文档(抓取于 2026-09-21),还没有用真实凭证验证。
| 项 | 值 |
|---|---|
| 鉴权方式 | HTTP Basic:-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN(或 API Key SID+Secret),不是 Authorization: Bearer;用错会拿到 401 / 错误码 20003 |
| 手机号格式 | To/From 一律 E.164(如 +14155552671),格式错按文档同步报 400:Messages/Calls 是错误码 21211,Verify 是 60200 |
| Verify 流程 | POST /v2/Services/{Sid}/Verifications 发码(不返回验证码本身),再 POST /v2/Services/{Sid}/VerificationCheck 核对,判 status == "approved",不要看遗留字段 valid |
| TwiML 方向 | 你调用 Twilio 拿到 JSON;Twilio 调你的 webhook 时,响应体必须是 TwiML(XML),Content-Type: text/xml,返回 JSON 不会优雅降级 |
| 计价 | 没有统一单价,按国家/运营商/号码类型浮动;查 GET /v1/Messaging/Countries/{IsoCountry}(pricing.twilio.com),别硬编码美国价格 |
照通用经验写容易错的 6 件事
来自官方文档,还没有用真实凭证验证。
- Standard API Key 不能调账号级端点。用 Standard key 请求
/Accounts或/v1/Keys会拿到和凭证错误一样的401/ 错误码20003,这类场景要用 Account SID + Auth Token 或 Main key。 - 请求体是表单编码,不是 JSON。Messages、Calls、Verify 的创建/更新请求都要
application/x-www-form-urlencoded;手写请求时发Content-Type: application/json只会拿到一个含糊的400,不会提示 content type 错了。 - OpenAPI 的 required 字段没写全。创建 Message 的规范里顶层
required只列了To,From和MessagingServiceSid二选一的约束只存在于文字说明里;照 JSON Schema 生成客户端代码会漏掉这条校验,两个都不传要等服务端才报错。 - 校验 webhook 签名必须用 Auth Token,不能用 API Key Secret。即使出站调用全走 API Key 鉴权,
X-Twilio-Signature依然是用账号 Auth Token 算出来的 HMAC-SHA1,两者不能互相替代。 - <Gather> 省略 action 会形成死循环。不写
action,Twilio 会把按键/语音结果 POST 回同一份 TwiML 文档;如果这段逻辑不判断Digits/SpeechResult是否存在,来电者会卡在反复播放同一句提示里。 - 新账号是 trial,未验证号码报的是账号级错误,不是格式错误。trial 账号只能给最多 5 个已验证号码收发消息/通话,格式完全正确的 E.164 号码发给未验证号码会报错误码
14111,排查前先确认账号状态再查格式。