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

Twilio在Symphony中实现通话保持及取消保持的问题咨询

Twilio Symphony 场景通话取消保持实现方案

问题原因分析

当前代码仅更新了主号码对应callSid的回调URL,直接切断了主叫与次号码原有的桥接链路,因此次号码会被直接挂断,无法支持后续恢复通话的操作。

前置准备

  • 通话建立阶段,需要同时存储主叫callSid和被叫callSid两个标识,将二者一一绑定存储在业务侧(数据库、Redis、会话缓存均可)

实现逻辑

1 先修正通话保持逻辑(避免次号码断开)

保持操作需要分别给双方设置等待音回调,保证双方都处于在线等待状态不会断线:

// 业务侧提前存储的主叫、被叫callSid
$callSidA = '主叫对应的callSid';
$callSidB = '次号码对应的callSid';

$client = new Client(SmsSpool::$arrTwilioSetting['sid'], SmsSpool::$arrTwilioSetting['auth_token']);

$holdConfig = [
    "url" => "http://demo.twilio.com/docs/voice.xml",
    "method" => "POST"
];
// 分别更新双方的通话路由到等待音
$client->calls($callSidA)->update($holdConfig);
$client->calls($callSidB)->update($holdConfig);

2 实现取消保持功能

取消保持的核心是把双方重新桥接,首先需要在你的业务服务上新增一个返回桥接TwiML的接口,示例逻辑如下:

// 你业务服务新增的接口:/bridge-call.php
$targetCallSid = $_GET['target_sid'];
$response = new Twilio\TwiML\VoiceResponse();
$dial = $response->dial();
$dial->queue($targetCallSid);
echo $response;

然后编写取消保持的业务代码:

$callSidA = '主叫对应的callSid';
$callSidB = '次号码对应的callSid';
$yourServiceDomain = '替换为你自己的服务域名';

$client = new Client(SmsSpool::$arrTwilioSetting['sid'], SmsSpool::$arrTwilioSetting['auth_token']);

// 主叫桥接回次号码
$client->calls($callSidA)->update([
    "url" => "https://{$yourServiceDomain}/bridge-call.php?target_sid=".$callSidB,
    "method" => "POST"
]);
// 次号码桥接回主叫
$client->calls($callSidB)->update([
    "url" => "https://{$yourServiceDomain}/bridge-call.php?target_sid=".$callSidA,
    "method" => "POST"
]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:06:05