Twilio通话录音与MMS媒体HTTP认证启用后如何访问媒体?
Twilio媒体URL启用HTTP认证后的PHP SDK调整方案
当Twilio对通话录音和MMS媒体强制执行HTTP认证后,你需要做以下调整来确保应用能正常访问这些媒体资源:
停止直接使用存储的未认证媒体URL
之前你存储的https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Records/{RecordSid}.mp3这类原始URL,现在访问会返回401 Unauthorized,必须废弃直接调用的方式。通过Twilio PHP SDK生成带签名的临时媒体URL
利用SDK提供的方法生成带有效期的签名URL,这类URL包含认证信息,在有效期内可直接访问。示例代码:<?php require_once '/path/to/vendor/autoload.php'; use Twilio\Rest\Client; // 初始化Twilio客户端 $accountSid = '你的AccountSid'; $authToken = '你的AuthToken'; $client = new Client($accountSid, $authToken); // 生成通话录音的临时签名URL(有效期设为1小时,可自定义Ttl参数) $recording = $client->calls('目标通话的CallSid') ->recordings('录音的RecordSid') ->fetch(); $signedRecordingUrl = $recording->getAudioUrl(['Ttl' => 3600]); // 生成MMS媒体的临时签名URL $media = $client->messages('目标短信的MessageSid') ->media('媒体的MediaSid') ->fetch(); $signedMediaUrl = $media->getUrl(['Ttl' => 3600]);可选:直接通过SDK获取媒体二进制内容
如果不想依赖Twilio的URL,可以直接获取媒体的二进制数据,自行存储或返回给前端。示例:// 获取通话录音的二进制内容 $recordingContent = $client->calls('CallSid') ->recordings('RecordSid') ->fetch() ->fetchMedia(); // 将内容保存到本地服务器 file_put_contents('local_recording.mp3', $recordingContent);更新媒体资源的存储逻辑
不再存储Twilio的原始媒体URL,改为存储对应的资源标识(比如CallSid+RecordSid、MessageSid+MediaSid)。每次需要访问媒体时,动态生成签名URL或直接获取内容,避免因URL过期或认证规则变更导致的访问失败。处理历史存储的旧URL
对于之前存储的旧URL,需要对应找到资源的Sid,重新生成签名URL;或者批量将这些媒体内容迁移到自己的存储服务,彻底脱离对Twilio媒体URL的依赖。
内容的提问来源于stack exchange,提问作者arun kumar
相关产品推荐
相关产品推荐

