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

使用Plivo录制呼入电话时触发404 Call Not Found错误求助

解决Plivo呼入电话录制的404 "Call Not Found"错误

看起来你在这里犯了一个常见的逻辑误区:你同时使用了Plivo的<Record> XML元素和startRecording API,这两者的作用重复且时机不对,最终导致了错误。让我详细拆解问题并给出解决方案:

问题根源分析

当你在answer方法中返回包含<Record>的XML响应时,Plivo会自动启动通话录制——这个XML元素本身就是用来触发录制的,完全不需要再通过API手动调用startRecording。

而你的record方法是作为<Record>的action参数被Plivo回调的,这个回调发生在录制完成之后(或通话挂断时)。此时通话已经处于非活跃状态(甚至可能已结束),这时候再调用startRecording API,Plivo自然会返回"Call Not Found",因为对应的通话UUID已经不再有效。

修正方案

你只需要保留<Record> XML元素自动处理录制,然后在record方法中接收Plivo发送的录制结果即可,不需要调用startRecording API。

修改后的record方法代码

public function record() { 
    Log::useDailyFiles(storage_path().'/logs/debug.log'); 
    // Plivo会自动发送录制相关参数到这个回调,包括:
    // RecordingURL, RecordingID, CallUUID, Duration等
    $recordingData = $this->_request->all();
    
    Log::info([ 
        '录制完成通知',
        '录制数据' => $recordingData,
        '通话UUID' => $this->_request->input('CallUUID'),
    ]);
    
    // 这里可以添加你的业务逻辑,比如把RecordingURL保存到数据库
    // ...
    
    // 返回空的XML响应或者200状态码即可,Plivo只需要确认你收到了通知
    return response('', 200)->header('Content-Type', 'text/xml');
}

额外检查点

  1. 确认XML响应的正确性:你的answer方法中的<Record>参数设置是合理的:

    • startOnDialAnswer="true":对于呼入电话,这个参数会在Plivo接起通话后立即开始录制,符合需求
    • redirect="false":确保Plivo不会重定向,而是继续执行后续的XML指令(如果有的话)
    • maxLength=600:限制录制最长10分钟,设置没问题
  2. 验证权限与配置:虽然你能拿到CallUUID,但还是可以确认AUTH_ID和AUTH_TOKEN是否正确,并且你的Plivo账号是否有录制通话的权限(默认是开启的)。

  3. 检查日志中的回调参数:查看debug.log,确认Plivo在回调record方法时发送了RecordingURL、RecordingID等字段,这说明录制已经成功完成。

如果你确实需要用API触发录制

如果你的业务场景需要手动控制录制的开始时机(而非自动录制),那应该移除<Record> XML元素,然后在通话建立后的活跃状态下调用startRecording API。比如,可以在answer方法返回响应后,通过Laravel队列这类异步任务来调用API,确保通话处于活跃状态时触发录制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:19:24