首页 > 解决方案 > Conf call:等待第一个人响应,然后连接第二个人

问题描述

基本情况:系统将呼叫A。如果A拿起电话,它将呼叫B,并且2将被连接。

我在这里阅读了几个答案,例如https://stackoverflow.com/a/20976996/1907888但仍不清楚。

下面的工作吗?如果有人响应它会调用 PERSON_A 它将连接到会议然后调用 PERSON_B 并连接到同一个会议?我需要先开始会议吗?

$response = new VoiceResponse();
$dial = $response->dial('PERSON_A');
if($dial->conference('Room 1234')) {
    $dial = $response->dial('PERSON_B');
    $dial->conference('Room 1234');
}

标签: twiliotwilio-php

解决方案


Twilio 开发人员布道者在这里。

当您使用 Twilio 控制调用时,它有两种工作机制。您的应用程序可以使用Twilio REST API来使事情发生,例如开始或更改呼叫。然后是 webhook,这是 Twilio 在呼叫中发生变化时向您的应用程序发出的 HTTP 请求,例如有人拨打您的 Twilio 号码、在电话上输入数据或有人接听出站电话。您使用 XML 的子集TwiML响应 webhook ,并提供有关下一步如何处理调用的说明。

在这种情况下,您首先要呼叫人员 A。为此,您将需要REST API 来进行调用。当 A 接听电话时,Twilio 将向您的应用程序发出 webhook 请求,以了解下一步该做什么。此时,您既可以再次使用 REST API 呼叫人员 B,也可以通过 TwiML 响应将人员 A 置于电话会议中。

因此,您的初始出站 REST API 调用应如下所示:

use Twilio\Rest\Client;

// Find your Account Sid and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
$sid = getenv("TWILIO_ACCOUNT_SID");
$token = getenv("TWILIO_AUTH_TOKEN");
$twilio = new Client($sid, $token);

$call = $twilio->calls
               ->create($personANumber, // to
                        $yourTwilioNumber, // from
                        ["url" => "http://example.com/conference.php"]
               );

您拨打电话时发送的 URL 将是 Twilio 发送 webhook 请求的位置。因此,example.com/conference.php在这种情况下,您需要拨打另一个人并使用 TwiML 进行响应,以将人 A 引导到电话会议中。

这一次,您实际上可以在 REST API 响应中发送 TwiML,而不是发送 URL。像这样的东西:

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

// Find your Account Sid and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
$sid = getenv("TWILIO_ACCOUNT_SID");
$token = getenv("TWILIO_AUTH_TOKEN");
$twilio = new Client($sid, $token);

$twiml = new VoiceResponse();
$dial = $twiml->dial();
$dial->conference("Conference Name");

$call = $twilio->calls
               ->create($personBNumber, // to
                        $yourTwilioNumber, // from
                        ["twiml" => $twiml->toString()]
               );

echo $twiml.toString();

在这种情况下,我对通话的两个分支都使用了相同的 TwiML,因为它们都进入了同一个会议。您可以根据发生的情况使用不同的 TwiML 进行响应。

让我知道这是否有帮助。


推荐阅读