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

基于Twilio PHP与React Native SDK的多方会议通话问题求助

问题分析

你当前的初始通话是点对点的Client-to-Client通话,没有使用Twilio会议功能;后续添加手机号参与者时创建的是另一个独立会议,因此出现两个完全分离的通话。要实现多方通话,必须从一开始就把所有参与者都接入同一个Twilio会议。

解决方案

核心修改思路

  1. 初始通话改用会议模式:ClientA发起通话时,先进入专属会议,同时通过API邀请ClientB加入该会议。
  2. 统一参与者加入逻辑:后续添加手机号参与者时,直接将其接入同一个会议。
  3. 确保会议名称唯一:用唯一标识(如UUID)作为会议名称,避免不同通话的会议冲突。

修改后的完整PHP代码

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require __DIR__ . '/twilio-php-main/src/Twilio/autoload.php';

use Twilio\TwiML\VoiceResponse;
use Twilio\Rest\Client;

$accountSid = 'xxxxxxxxx';
$authToken = 'xxxxxxxxx';

$response = new VoiceResponse();
$callerNumber = '+447401120267';
$callerId = isset($_POST["callerId"]) ? $_POST["callerId"] : "";
$typeOfCall = isset($_POST["typeOfCall"]) ? $_POST["typeOfCall"] : "audio";
$minimumMinutes = isset($_POST["minimumMinutes"]) ? $_POST["minimumMinutes"] : "60";
$language = isset($_POST["language"]) ? $_POST["language"] : "Arabic";
$speciality = isset($_POST["speciality"]) ? $_POST["speciality"] : "Social Services";
$from = isset($_POST["from"]) ? $_POST["from"] : "";
$to = isset($_POST["to"]) ? $_POST["to"] : "";
$participantPhoneNumber = isset($_POST["participant"]) ? $_POST["participant"] : "";

if (!isset($to) || empty($to)) {
    $response->say('Hello');
} else {
    // 生成唯一会议名称,避免不同通话冲突
    $conferenceName = uniqid('conf_', true);
    
    if (empty($participantPhoneNumber)) {
        // 场景1:ClientA发起与ClientB的初始通话
        $twilioClient = new Client($accountSid, $authToken);
        
        // 1. 让发起方ClientA进入会议等待
        $dial = $response->dial();
        $dial->conference($conferenceName, [
            'startConferenceOnEnter' => false, // 等待其他参与者加入再启动会议
            'endConferenceOnExit' => false,    // 防止单个参与者退出导致会议结束
            'beep' => false
        ]);
        
        // 2. 主动呼叫ClientB,邀请其加入同一会议
        try {
            $twilioClient->calls->create(
                "client:$to",
                $callerNumber,
                [
                    'url' => 'https://your-server-domain/your-twiml-file.php?conference=' . urlencode($conferenceName),
                    'parameters' => [
                        'typeOfCall' => $typeOfCall,
                        'minimumMinutes' => $minimumMinutes,
                        'language' => $language,
                        'speciality' => $speciality
                    ]
                ]
            );
        } catch (Twilio\Exceptions\TwilioException $e) {
            echo $e->getMessage();
        }
    } else if (isset($_GET['conference'])) {
        // 场景2:ClientB被邀请进入会议
        $conferenceName = $_GET['conference'];
        $dial = $response->dial();
        $dial->conference($conferenceName, [
            'startConferenceOnEnter' => true, // 加入时启动会议(若未启动)
            'endConferenceOnExit' => false,
            'beep' => false
        ]);
    } else {
        // 场景3:通话中添加手机号参与者
        $twilioClient = new Client($accountSid, $authToken);
        
        try {
            // 将手机号参与者接入指定会议
            $participant = $twilioClient->conferences($_POST['conferenceName'])->participants->create(
                $callerNumber,
                $participantPhoneNumber,
                ["beep" => false]
            );
            $response->say('Participant added successfully');
        } catch (Twilio\Exceptions\TwilioException $e) {
            echo $e->getMessage();
        }
    }
}

header('Content-Type: text/xml');
print $response;
?>

关键说明

  • 唯一会议名称:通过uniqid('conf_', true)生成唯一ID,确保不同通话的会议完全独立。
  • 初始通话流程:ClientA发起请求后先进入会议等待,后端通过Twilio API主动呼叫ClientB,引导其进入同一会议。
  • 参与者接入逻辑:ClientB被呼叫时,后端根据传入的会议名称将其接入;添加手机号时,直接调用会议参与者API将号码加入指定会议。
  • 会议参数调整:startConferenceOnEnter和endConferenceOnExit可根据业务需求修改,比如需要第一个人进入就启动会议,可将startConferenceOnEnter设为true。

移动端适配

在React Native端,ClientB收到呼入请求时,SDK会自动处理后端返回的TwiML会议指令,无需额外开发;添加参与者时,需将当前通话的会议名称传递给后端接口,确保后端知道要往哪个会议添加成员。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:44:51