给有Twilio的人打电话,然后断开我的连接并向其他人播放消息

给有Twilio的人打电话,然后断开我的连接并向其他人播放消息,twilio,Twilio,我正在尝试在网页(在我的个人PHP Web服务器上)上创建一个按钮,该按钮应该可以连接我(打我的手机或通过网络客户端),然后拨打一个号码,然后我想有一个选项来挂断电话,或者只是断开我的连接,然后向其他人播放mp3,然后挂断 我不知道该怎么办。我创建了一个TwiML,但如何将其连接到现有呼叫?还是有不同的方法 <?xml version="1.0" encoding="UTF-8"?> <Response> <Play>https://something-s

我正在尝试在网页(在我的个人PHP Web服务器上)上创建一个按钮,该按钮应该可以连接我(打我的手机或通过网络客户端),然后拨打一个号码,然后我想有一个选项来挂断电话,或者只是断开我的连接,然后向其他人播放mp3,然后挂断

我不知道该怎么办。我创建了一个TwiML,但如何将其连接到现有呼叫?还是有不同的方法

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Play>https://something-something.twil.io/assets/recording1.mp3</Play>
  <Hangup/>
</Response>

https://something-something.twil.io/assets/recording1.mp3

提前谢谢。

我想我明白你的意思了。你有一张你要打电话的人的名单。应用程序将给他们打电话并与你连接。如果你听到电话答录机的声音,你想按一个键,然后挂断电话,转到下一个电话。但在你挂断电话后,第一个拨出的电话保持在线,并给收件人留下一条.mp3的信息

我相信一个解决方案是用机器人创建一个会议

您的应用程序向您、机器人和收件人发出出站呼叫,并将所有人放入名为“房间时间戳”的会议室,其中时间戳为当前时间。bot是一个twilio号码,用于侦听聚集dtmf。如果按1,它将播放信息1,然后挂断。但因为这是一个会议,你可以随时挂断电话,继续打下一个电话。 机器人可以循环几次,如果没有检测到dtmf,它会自动挂断。 通过使用新的出站会议API,您可以将会议名称而不是会议SID传递给它,这一切都变得更加容易:

编辑:

将三个号码连接到会议室:

$uniqueid = time();
$call = $client->account->calls->create($officeline,$twilionum,
数组(“url”=>“$uniqueid”)

数组(“url”=>“$uniqueid”)

数组(“url”=>“$uniqueid”)

这将把三个号码连接到一个会议室:

  • $officeline(您的号码)
  • $botline(响应dtmf的机器人的斜纹手机)
  • $customerline(您呼叫的客户)
conference.php只是返回一个conferenceID,用于连接到以下位置的调用:

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;
您的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;
标题('Content-Type:text/xml');
$dtmf=isset($_请求[“数字”])$_请求[“数字”]:“”;
$playmore=“”;
如果($dtmf==“1”){
$playmore=“嘿,我只是想给你留言\n”;
}
如果($dtmf==“2”){
$playmore=”http://www.soundboard.com/mediafiles/22/224470-33a9f640-d998-45a3-b0c1-31c1687c2ae4.mp3\n”;
}

echoTwilio开发者福音传道者

这是一个理想的应用程序用例。通过Twilio的应答机检测,您可以将其设置为
已启用
检测消息和
,这意味着您可以使用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,您需要根据机器检测到的内容响应调用。你可以用这个。类似这样的东西,如果有人回答或说了一条信息,则使用“如果机器回答”输入您的号码:

<?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>";
  }
当你想挂断并播放一条消息时,你需要将它发送到你的服务器。这是父调用的SID,您需要获取子调用,另一个分支。所以,在您的服务器上,您需要这样做


当您重定向子呼叫时,父呼叫将不再连接,因此将挂断。您将孩子呼叫重定向到的URL应包含使用或向机器播放消息所需的TwiML。

您确定要先与对方通话,然后自己挂断电话,还是直接向第三方拨打电话就可以了?我只想在听到应答机时才转接他们。如果是活人,我会与他们交谈,完成后与他们断开连接,然后连接到我名单上的另一个人。我不想使用电话答录机检测,因为(它对电话答录机非常有效,但是)人类只会听到几秒钟的间隔。另外,如果在机器应答之前我正在在线/会议上,我可以说“hello John”,然后播放消息。好的,我已经编辑了我的答案以提供不同的答案。如果有帮助,请告诉我@B更确切地说是的。当我听到这件事时,我挂了很多次电话。机器人呼叫是最糟糕的,所以在这种情况下,使用Twilio而不使用机器学习是一件好事,因为如果不是合法的呼叫,它对接收者意味着什么。这正是我想要做的。因此,我需要购买一个Twilio号码,并将其设置为一个机器人(这样我就可以向机器人、我和其他人发起一个呼叫)。对的或者有没有办法将机器人连接到现有会议?我喜欢@philnash方法,即使用web浏览器作为拨号器,并将更多逻辑移到那里。如果您想让办公室电话铃和机器人加入呼叫,请参阅我添加的代码。希望有帮助。
   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;
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"
    )
);
<?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>";
  }
var connection = Twilio.Device.connect({ number: "+1234567890" });
var callSid = connection.parameters.CallSid;
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"
    ));
}