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
相关产品推荐
相关产品推荐

