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

基于PHP RestAPI实现Twilio通话录音下载及转写问题求助

问题分析与解决方案

核心错误点

  1. recording.php语法致命错误:require DIR . '/vendor/autoload.php'; 中DIR是未定义常量,必须改为__DIR__,这是引发500错误的直接原因。
  2. 录音配置重复冲突:dailcall.php中同时设置record: true和指定url指向recording.php手动创建录音,导致Twilio流程冲突,触发异常。
  3. 参数格式错误:recording.php中transcribe使用字符串'true',Twilio要求该参数为布尔值true。

修正后的代码实现

方案一:直接通过通话创建配置实现30秒录音+转写(推荐)

无需额外中间文件,直接在创建通话时完成所有配置,避免流程冲突。

dailcall.php

$call = $twilio->calls
    ->create($to, // 目标号码
        $from, // Twilio号码
        [
            "record" => true,
            "recordingDuration" => 30, // 限制最长录音30秒
            "recordingChannels" => "dual",
            "transcribe" => true,
            "recordingStatusCallback" => "https://twilioxxxx.tk/api/araonvlad_bot/read_Recording.php",
            "recordingStatusCallbackMethod" => "POST",
            "transcribeCallback" => "https://twilioxxxx.tk/api/araonvlad_bot/read_Transcription.php", // 单独接收转写结果
            "StatusCallbackMethod" => "POST",
            "StatusCallbackEvent" => ["in-progress", "completed"]
        ]
    );

方案二:通过TwiML手动触发录音(适合复杂场景)

如果需要在通话过程中手动控制录音时机,修正recording.php并调整dailcall.php配置:

dailcall.php

$call = $twilio->calls
    ->create($to, // 目标号码
        $from, // Twilio号码
        [
            "method" => "POST",
            "url" => "https://twilioxxxx.tk/api/araonvlad_bot/recording.php",
            "StatusCallbackMethod" => "POST",
            "StatusCallbackEvent" => ["in-progress", "completed"]
        ]
    );

recording.php

use Twilio\Rest\Client;
require __DIR__ . '/vendor/autoload.php'; // 修正__DIR__常量

// 返回TwiML指令启动录音(之前错误地用API创建,Twilio要求通过TwiML控制通话流程)
header('Content-Type: application/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<Response>';
echo '<Record maxLength="30" transcribe="true" recordingStatusCallback="https://twilioxxxx.tk/api/araonvlad_bot/read_Recording.php" recordingChannels="dual"/>';
echo '</Response>';

read_Recording.php(处理录音下载与转写存储)

require __DIR__ . '/vendor/autoload.php';
use Twilio\Rest\Client;

$twilio = new Client("AC8b2cc96be2a8dbc059f29xxxxx", "88db8eeb71124a3effd6c19681xxxx");

// 记录请求日志
file_put_contents('request.log', "\n" . json_encode($_REQUEST) . ' - read Recording File: - ' . "\n", FILE_APPEND);

$recordingSid = $_REQUEST['RecordingSid'];

// 1. 下载MP3录音文件
$recording = $twilio->recordings($recordingSid)->fetch();
$fullMp3Url = 'https://api.twilio.com' . $recording->uri . '.mp3';
// 确保recordings目录存在且有写入权限
$localMp3Path = 'recordings/' . $recordingSid . '.mp3';
file_put_contents($localMp3Path, file_get_contents($fullMp3Url));

// 2. 获取并保存转写文本
$transcriptions = $twilio->recordings($recordingSid)->transcriptions->read();
foreach ($transcriptions as $transcription) {
    $localTxtPath = 'transcriptions/' . $recordingSid . '.txt';
    file_put_contents($localTxtPath, $transcription->transcriptionText);
}

额外注意事项

  • 确保服务器上recordings/和transcriptions/目录存在且具备写入权限。
  • 你的服务器必须能被公网访问,且使用有效SSL证书(Twilio要求Webhook地址为HTTPS)。
  • 确认Twilio账户已开通转写功能,且账户余额充足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:20:32