我正在尝试在网页上(在我的预设PHP网络服务器上)创建一个按钮,该按钮应该连接我(可以通过我的手机或通过网络客户端),然后拨打一个号码,然后我想要选择挂断电话,或者只是断开我,但是给另一个人播放mp3,然后挂机。
我不确定该怎么做。我创建了一个TwiML,但是如何将其连接到现有的调用?或者有不同的方法吗?
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Play>https://something-something.twil.io/assets/recording1.mp3</Play>
<Hangup/>
</Response>
提前致谢。
答案 0 :(得分:2)
Twilio开发者传道者在这里。
这是Answering Machine Detection的理想用例。使用Twilio的应答机检测,您可以将其设置为Enabled
或DetectMessageEnd
,这意味着您可以使用Twilio来确定机器是否已应答呼叫并等待消息结束然后发挥消息。否则,您可以将呼叫连接到自己。
使用PHP,您可以生成如下调用:
use Twilio\Rest\Client;
// Your Account Sid and Auth Token from twilio.com/console
$sid = "YOUR_ACCOUNT_SID";
$token = "YOUR_AUTH_TOKEN";
$client = new Client($sid, $token);
$call = $client->calls->create(
"+14155551212", "+14158675309",
array(
"url" => "http://example.com/calls",
"MachineDetection" => "DetectMessageEnd"
)
);
然后,对于您的URL,您需要根据计算机检测到的内容来响应呼叫。您可以使用AnsweredBy
parameter执行此操作。这样的话,dials如果某人在机器应答时使用<Say>
回复或说出消息,则Twilio Client JS为您的号码:
<?php
if ($_REQUEST['AnsweredBy'] == "human") {
echo "<Response><Dial><Number>YOUR_NUMBER</Number></Dial></Response>";
} else {
echo "<Response><Say>Hello, this is my message</Say></Response>";
}
让我知道这是否有帮助。
修改强>
好的,要在没有应答机器检测的情况下执行此操作,我建议您使用quickstart guide here构建自己的拨号器。有一个Twilio.Device.activeConnection().disconnect()
,所以我不知道如何在这里工作。
有了拨号器,您就可以用它来发起电话了。问题是然后移动语音邮件呼叫以播放消息。我会建立两个按钮,一个挂起,好像你已经成功完成了通话而另一个按钮播放了消息。第一个按钮是对use the REST API to get the other call的简单函数调用。
第二个需要一些东西。我们的想法是,它会调用您的服务器将另一个调用重定向到一组新的TwiML。
首先,您需要您创建的呼叫的SID。您可以从响应调用connect
的接收对象中获取该内容。
var connection = Twilio.Device.connect({ number: "+1234567890" });
var callSid = connection.parameters.CallSid;
当您想要挂断并播放消息时,您需要将其发送到您的服务器。这是父母呼叫的SID,你需要接听子呼叫,另一条腿。因此,在您的服务器上,您需要redirect it,然后<Say>
。
use Twilio\Rest\Client;
// Your Account Sid and Auth Token from twilio.com/console
$sid = "YOUR_ACCOUNT_SID";
$token = "YOUR_AUTH_TOKEN";
$client = new Client($sid, $token);
$calls = $client->calls->read(
array("ParentCallSid" => $_REQUEST['CallSid'])
);
// Loop over the list of calls, it should only have one call in it, and redirect the call to a URL that has the message TwiML
foreach ($calls as $call) {
$call->update(array(
"url" => "http://example.com/message.xml"
));
}
当您重定向子呼叫时,将不再连接父呼叫,因此它将挂断。您重定向子呼叫的URL应包含使用<Play>
或{{3}}向计算机播放消息所需的TwiML。
答案 1 :(得分:1)
我想我得到了你想做的事。您有一个您要拨打电话的人员列表。该应用程序将呼叫他们并连接您。如果您听到应答机,则需要按一个键然后挂断并继续拨打下一个电话。但挂机后,第一个外拨电话保持在线状态并向该收件人留下.mp3消息?
我相信一个解决方案是用机器人创建一个会议。
您的应用会向您,机器人和收件人拨打电话,并将所有人都放入名为“room-timestamp”的会议室,其中时间戳是当前时间。机器人是一个twilio数字,听取收集dtmf。如果按1,它将播放消息1然后挂断。但是因为这是一个会议,你可以随时挂机并继续下一个电话。 机器人可以循环几次,如果没有检测到dtmf,它会自行挂起。 使用新的出站会议API可以更轻松地完成此操作,您可以在其中传递会议名称而不是会议SID:
https://www.twilio.com/docs/api/rest/participant#list-post
编辑:
将三个号码连接到会议室:
$uniqueid = time();
$call = $client->account->calls->create($officeline,$twilionum,
array(“url”=&gt;“http://yourdomain/conference.php?id= $ uniqueid”));
$call = $client->account->calls->create($botline,$twilionum,
array(“url”=&gt;“http://yourdomain/conference.php?id= $ uniqueid”));
$call = $client->account->calls->create($customerline,$twilionum,
array(“url”=&gt;“http://yourdomain/conference.php?id= $ uniqueid”));
这会将三个号码连接到会议室:
conference.php只返回呼叫连接到的会议ID:
header('Content-Type: text/xml');
$confid = $_REQUEST['id'];
echo<<<XMLOUT
<?xml version="1.0" encoding="ISO-8859-1"?>
<Response>
<Dial>
<Conference statusCallbackEvent="leave" statusCallback="killconference.php">$confid</Conference>
</Dial>
</Response>
XMLOUT;
调用killconference.php,以便在只剩下一个人时终止会议。只需确保你的机器人在玩完东西后挂机。
killconference.php
$theconference = $_REQUEST['ConferenceSid'];
$participants = $client
->conferences($theconference)
->participants
->read();
if (count($participants) == 1) {
$conference = $client
->conferences($theconference)
->fetch();
$conference->update(array(
"Status" => "completed"
));
}
你的botline twilio号码将指向响应dtmf的bot.php:
bot.php
header('Content-Type: text/xml');
$dtmf = isset($_REQUEST["Digits"]) ? $_REQUEST["Digits"] : "";
$playmore = "";
if ($dtmf == "1") {
$playmore = "<Say>Hey I just wanted to leave you a message </Say><Hangup/>\n";
}
if ($dtmf == "2") {
$playmore = "<Play>http://www.soundboard.com/mediafiles/22/224470-33a9f640-d998-45a3-b0c1-31c1687c2ae4.mp3</Play><Hangup/>\n";
}
echo<<<XMLOUT
<?xml version="1.0" encoding="ISO-8859-1"?>
<Response>
$playmore
<Gather action="bot.php" numDigits="1" timeout="30">
</Gather>
<Hangup/>
</Response>
XMLOUT;
机器人将在线上停留30秒,如果没有输入dtmf,它会自行挂起。按1给客户留言2,Leroy Jenkins