基于PHP的Twilio会议通话问题:通话中添加参会者出错排查
排查你的Twilio会议通话代码问题
我帮你梳理下代码里的几个关键问题,这些应该是导致功能无法正常工作的核心原因:
1. 未正确定义$dial变量
你的代码里直接调用$dial->conference(),但实际上$dial并没有被赋值。在Twilio的PHP SDK中,$response->dial()会返回一个Dial实例,你需要把它赋值给$dial变量才能继续调用conference()方法:
// 修正前 $response->dial( $vb,array( ... ) ); $dial->conference( $roomName, array( ... ) ); // 修正后 $dial = $response->dial( $vb, array( ... ) ); $dial->conference( $roomName, array( ... ) );
2. PHP布尔值大小写错误
你代码里用了大写的True,但在PHP中布尔值的标准写法是小写的true,虽然部分环境可能兼容,但这不符合语法规范,会有潜在的运行风险:
// 修正前 'record' => True, // 修正后 'record' => true,
3. 数组末尾多余逗号
conference方法的参数数组最后有一个多余的逗号:
// 修正前 'waitUrl' => 'http://twimlets.com/holdmusic?Bucket=com.twilio.music.ambient', // 修正后 'waitUrl' => 'http://twimlets.com/holdmusic?Bucket=com.twilio.music.ambient'
虽然PHP 7.2+支持数组末尾逗号,但为了兼容更多环境,最好去掉这个多余的逗号,避免旧版本PHP环境报错。
4. “通话中添加他人”的逻辑缺失
你设置了hangupOnStar => 'true'和url => "http://demo.twilio.com/docs/voice.xml",但这个Demo的VoiceXML并不是用来处理添加参会者的逻辑。要实现“任意一方拨号添加人”的功能,你需要:
- 把
url指向你自己编写的接口,这个接口需要返回包含Dial或Conference指令的Twiml,用来处理添加新参会者的操作; hangupOnStar的作用是让当前通话者退出当前Dial操作,触发url的逻辑,所以你需要确保这个接口能正确接收Twilio的请求,完成添加参会者的流程。
修正后的完整代码示例
$response->say( 'You have joined the conference.', ['voice' => 'alice', 'language' => 'en-GB'] ); // 正确赋值$dial变量 $dial = $response->dial( $vb, array( 'record' => true, 'hangupOnStar' => true, 'url' => "myurl/phone_module_html.php", 'recordingStatusCallback' => "myurl/phone_module_html.php" ) ); $dial->conference( $roomName, array( 'startConferenceOnEnter' => true, 'endConferenceOnExit' => false, 'muted' => false, 'record' => 'record-from-start', 'waitUrl' => 'http://twimlets.com/holdmusic?Bucket=com.twilio.music.ambient' ) );
内容的提问来源于stack exchange,提问作者user9832187
相关产品推荐
相关产品推荐

