You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twilio错误20154:无效令牌声明(可编程视频场景)

排查Twilio Video错误20154:无效令牌声明

我之前也踩过Twilio可编程视频这个20154错误的坑,结合你贴的代码,给你几个实用的排查方向:

  • 确认房间标识完全匹配:你在$videoGrant->setRoom($slot_id)里传的$slot_id,必须和服务器端创建房间时用的**唯一名称(uniqueName)**或者房间SID完全一致。如果创建房间时指定了uniqueName,这里就传这个名称;如果没指定,就用返回的房间SID。可以去Twilio控制台的「视频房间」列表里核对这个值,哪怕少个字母、大小写不对都会触发错误。

  • 检查Identity格式合法性:传入AccessToken的$user_id(也就是Identity字段),Twilio要求只能包含字母、数字、下划线、连字符和点号,不能有空格、特殊符号或者非ASCII字符。如果Identity格式不符合要求,令牌的声明会直接无效。

  • 验证API Key的归属与权限:确保你使用的TWILIO_API_KEY和TWILIO_API_SECRET属于当前操作的Twilio账号,并且这个API Key没有被限制视频服务权限(默认是开启的,但可以去控制台的「API Keys」页面确认权限设置)。

  • 解析JWT直接排查声明问题:生成令牌后,把$token->toJWT()输出的字符串复制到JWT解析工具(可以用本地工具或安全的在线解析器,注意不要泄露你的API密钥),查看里面的video.grant.room字段是否正确,同时检查exp(过期时间)、iss(API Key)、sub(Account SID)这些核心声明是否和预期一致。很多时候,这里能直接定位到问题所在。

针对你的代码,也可以加个小调试步骤辅助排查:

$token = new AccessToken( 
    $this->TWILIO_ACCOUNT_SID, 
    $this->TWILIO_API_KEY, 
    $this->TWILIO_API_SECRET, 
    3600, 
    $user_id 
);
$videoGrant = new VideoGrant();
// 再次确认$slot_id是房间的正确标识
$videoGrant->setRoom($slot_id);
$token->addGrant($videoGrant);

// 打印JWT用于解析排查
$jwt = $token->toJWT();
echo $jwt;

如果还是有问题,可以再检查创建房间的代码,确保房间确实成功创建并且状态是可用的(比如不是已关闭的状态)。

内容的提问来源于stack exchange,提问作者ripul kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:20:32