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

如何通过单次客户端请求实现Twilio会议式外呼?

单次请求完成Twilio会议式外呼(JavaScript SDK + PHP)

需求背景

原本的直接拨号方案无法支持呼叫转移、呼叫辅导等高级功能,因此需要将呼叫接入会议。当前通过两次服务器往返实现会议外呼的方案不够简洁,需要优化为单次客户端请求,在服务端完成创建会议室、连接客户端、呼叫第三方并将其加入会议室的全流程。


优化方案:服务端一站式处理

核心思路是在服务端的TwiML回调中,一次性完成所有会议相关操作,无需客户端额外发起AJAX请求。

1. 客户端代码(简化版)

只保留初始的device.connect请求,无需在accept事件中触发额外请求:

device.connect({
    params: {
        callee_name: name,
        callee_number: phoneNumber,
    }   
}).then((call) => {
    call.on('accept', (acceptedCall) => {
        console.log('已接入会议,等待第三方接听');
    });
});

2. 服务端代码(一站式处理)

在返回客户端TwiML的同时,主动创建会议并发起第三方呼叫,将双方接入同一会议:

use Twilio\Rest\Client;
use Twilio\TwiML\VoiceResponse;
use Ramsey\Uuid\Uuid; // 需安装ramsey/uuid生成唯一会议ID(或用uniqid()替代)

// 初始化Twilio客户端
$twilio = new Client($accountSid, $authToken);

// 生成唯一会议名称,避免不同呼叫冲突
$conferenceName = 'conf_' . Uuid::uuid4()->toString();

// 生成TwiML,让客户端直接接入会议
$voiceResponse = new VoiceResponse();
$dial = $voiceResponse->dial('', ['callerId' => $callerId]);
$dial->conference($conferenceName, [
    'statusCallbackEvent' => 'start end join leave mute hold',
    'statusCallback' => $statusCallbackUrl
]);

// 主动发起对第三方的呼叫,接通后直接加入同一会议
$twilio->calls->create(
    $calleeNumber, // 第三方号码
    $callerId,     // 主叫号码(你的Twilio号码)
    [
        'twiml' => '<Response><Dial><Conference>' . $conferenceName . '</Conference></Dial></Response>',
        'statusCallback' => $conferenceStatusUrl,
        'statusCallbackEvent' => ['initiated', 'ringing', 'answered', 'completed'],
        'label' => $calleeType
    ]
);

// 返回TwiML给客户端(注意修正原代码的Content-Type拼写错误)
$xml = $voiceResponse->asXml();
$response = new Response($xml, Response::HTTP_OK, ['Content-Type' => 'text/xml']);
return $response;

关键说明

  • 唯一会议名称:用UUID生成独立会议ID,避免不同呼叫的会议混淆
  • 服务端主动呼叫:在返回客户端TwiML的同时,通过Twilio API发起第三方呼叫,第三方接通后直接接入同一会议
  • 简化客户端逻辑:无需额外AJAX请求,单次device.connect即可完成全流程

注意事项

  • 确保Twilio PHP SDK权限足够,可发起Calls和Conferences操作
  • 若未使用ramsey/uuid,可改用uniqid('conf_', true)生成唯一会议名称
  • 原代码中的context-type为拼写错误,需改为Content-Type

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:55:14