Twilio TaskRouter:如何将在途通话转为会议以添加坐席
将现有Twilio TaskRouter通话转换为会议(Laravel环境)
我目前用Twilio TaskRouter的enqueue和dequeue指令已经实现了呼叫者和坐席的正常连接,现在需要在同一通话中添加另一名坐席,得把当前通话转换成会议。以下是我当前的入队和出队代码:
当前入队代码
$taskAttributes = [ 'channel' => 'voice', // Specify that it's a voice call 'type' => $deptName, 'departmentId' => $department_id, ]; $enqueue->task(json_encode($taskAttributes),['timeout' => 60]); return response($response)->header('Content-Type', 'text/xml');
当前出队代码
return response()->json([ "instruction" => "dequeue", "status_callback_events" => "initiated,ringing,answered,completed", "record" => "record-from-answer", "status_callback_url" => url('ivr/statuseventCallback'), ]);
实现步骤
替换Dequeue指令,将坐席接入会议
原来的dequeue是让坐席和呼叫者点对点通话,现在要改成让坐席加入唯一会议。当坐席接受任务时,不再返回dequeue的JSON响应,而是返回Twiml指令引导坐席进入会议:return response()->xml('<Response> <Dial> <Conference record="record-from-answer" statusCallbackEvent="initiated,joined,completed" statusCallback="' . url('ivr/conference-status') . '"> support-call-' . $taskSid . ' </Conference> </Dial> </Response>');用任务的
$taskSid作为会议名称,确保每个通话的会议唯一。调整呼叫者等待流程,接入同一会议
呼叫者原来等待时播放等待音,现在要在坐席分配完成后自动转入会议。修改入队Twiml,指定waitUrl处理等待逻辑:$response = new Twiml(); $enqueue = $response->enqueue(['waitUrl' => url('ivr/wait-instruction')]); $enqueue->task(json_encode($taskAttributes), ['timeout' => 60]); return response($response)->header('Content-Type', 'text/xml');然后在
ivr/wait-instruction路由里检查任务状态,一旦坐席分配完成,引导呼叫者进入会议:// ivr/wait-instruction 路由处理逻辑 $taskSid = request()->query('TaskSid'); $task = \Twilio\Rest\Client::getInstance()->taskrouter->workspaces('你的工作区SID') ->tasks($taskSid)->fetch(); if ($task->assignmentStatus === 'assigned') { $twiml = new Twiml(); $twiml->dial()->conference('support-call-' . $taskSid, [ 'record' => 'record-from-answer', 'statusCallback' => url('ivr/conference-status') ]); return response($twiml)->header('Content-Type', 'text/xml'); } else { // 坐席未分配,继续播放等待音乐 $twiml = new Twiml(); $twiml->play('https://example.com/hold-music.mp3'); // 替换为你的等待音乐地址 return response($twiml)->header('Content-Type', 'text/xml'); }添加新坐席到会议
当需要添加另一名坐席时,直接通过Twilio API呼叫该坐席,并返回Twiml让其加入同一会议:// 呼叫新坐席的逻辑 $client = new \Twilio\Rest\Client(env('TWILIO_ACCOUNT_SID'), env('TWILIO_AUTH_TOKEN')); $client->calls->create( $newWorkerPhone, // 新坐席的电话号码 env('TWILIO_PHONE_NUMBER'), // 你的Twilio号码 [ 'url' => url('ivr/join-conference', ['conferenceName' => 'support-call-' . $taskSid]) ] ); // ivr/join-conference 路由处理 $conferenceName = request()->route('conferenceName'); $twiml = new Twiml(); $twiml->dial()->conference($conferenceName, [ 'record' => 'record-from-answer', 'statusCallback' => url('ivr/conference-status') ]); return response($twiml)->header('Content-Type', 'text/xml');处理会议状态回调
在ivr/conference-status路由里监听会议事件(成员加入、离开、会议结束等),用于日志记录或业务状态更新:// ivr/conference-status 路由处理 $event = request()->input('StatusEvent'); $conferenceName = request()->input('ConferenceName'); // 根据事件类型执行对应逻辑,比如记录会议日志、更新业务状态 return response('', 200);
内容的提问来源于stack exchange,提问作者Yasir Ijaz
相关产品推荐
相关产品推荐

