php - 如果用户未使用 Twilio 应答,请再次呼叫用户
问题描述
编辑:现在工作,将此帖子编辑为工作脚本。 我正在设置一个警报,如果传感器达到某个值,它会呼叫用户。我已经让呼叫部分工作,但如果用户没有拿起电话,我需要 Twilio 再次呼叫用户。
目前,Twilio 打电话给用户,告诉他警报响了。如果用户在 15 秒内没有接听电话,Twilio 将结束通话,因此不会转到语音信箱。现在,呼叫的状态将在 Twilio 控制台中为“无应答”。我试过以下代码:
在我的 call.php 中:
<?php
require __DIR__ . '/vendor/autoload.php';
use Twilio\Rest\Client;
// /include 'insertcall.php';
// Your Account SID and Auth Token from twilio.com/console
$account_sid = 'xxx';
$auth_token = 'xxx';
// In production, these should be environment variables. E.g.:
// $auth_token = $_ENV["TWILIO_ACCOUNT_SID"]
// A Twilio number you own with Voice capabilities
$twilio_number = "+12242631292";
// Where to make a voice call (your cell phone?)
$time = time();
$call_id = $sensor_id . $time;
echo "callid: ";
echo $call_id;
echo "<br><br>";
$client = new Client($account_sid, $auth_token);
$client->account->calls->create(
$callto,
$twilio_number,
array(
"machineDetection" => "DetectMessageEnd",
"url" => "https://link.nl/includes/alarmbot/includes/cas_xml.inc.php?sensor=$sensor_id",
"statusCallbackMethod" => "POST",
"statusCallback" => "https://link.nl/includes/alarmbot/callback.php?sensor=$sensor_id&callid=$call_id",
"statusCallbackEvent" => array(
"completed"
),
"timeout" => 15 // Wanneer niemand op neemt na 15 sec -> No Answer zodat we niet naar voicemail gaan en alsnog als completed gaat.
)
);
$conn = mysqli_connect($servername, $username, $password, $dbname);
$sql5 = "INSERT INTO twilio_calls (id, sensor_id, completed) VALUES ($call_id, '$sensor_id', '0')";
if ($conn->query($sql5) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql5 . "<br>" . $conn->error;
}
在我的 callback.php 中:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
setlocale(LC_ALL, 'nl_NL');
require 'includes/boot.php';
use Twilio\Rest\Client;
$servername = "localhost";
$username = "xxx";
$password = "xxx";
$dbname = 'xxx';
$account_sid = 'xxx';
$auth_token = 'xxx';
if (isset($_REQUEST['CallStatus'])) {
$call_status = $_REQUEST['CallStatus'];
$call_id = $_REQUEST['callid'];
$twilio_number = "+mynumber";
echo $call_status;
echo "<br>";
echo $call_id;
echo "<br>";
if ($call_status !== 'completed' && $call_status !== 'busy') {
$conn = mysqli_connect($servername, $username, $password, $dbname);
$sql = "SELECT * FROM twilio_calls WHERE id='$call_id'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$sensor_id = $row['sensor_id'];
$sql_2 = "SELECT telefoonnummer FROM alarmnummers WHERE sensor_id='$sensor_id' AND backup = 1";
$result_2 = $conn->query($sql_2);
if ($result_2->num_rows > 0) {
while ($row_2 = $result_2->fetch_assoc()) {
$telefoonnummer = $row_2['telefoonnummer'];
echo $telefoonnummer;
$client = new Client($account_sid, $auth_token);
$client->account->calls->create(
$telefoonnummer,
$twilio_number,
array(
"url" => "https://link.nl/includes/alarmbot/includes/callback.php?sensor=$sensor_id",
"timeout" => 15
)
);
}
} else {
echo "query ni goed";
}
$sql_3 = "UPDATE twilio_calls SET completed=1 WHERE id='$call_id'";
$conn->query($sql_3);
}
} else {
echo "andere query ni goed";
}
} else {
$sql = "UPDATE twilio_calls SET completed=1 WHERE id='$call_id'";
$conn->query($sql);
echo "Updated, call busy or completed";
}
} else {
echo 'No valid callback';
}
所以当他/她没有接听时,我需要再次打电话给用户。我不确定我应该怎么做。
解决方案
推荐阅读
- vue.js - Vue 3.0 导入不是静态的?
- tableau-api - 带针的 Tableau 量规图表 - 红色 琥珀色 绿色
- google-play-console - Google Play 开发者控制台未激活
- jenkins - Jenkins 使用环境变量控制阶段的声明性管道问题
- python - 遍历熊猫数据框中的一系列元素并根据元素的长度更新值
- c# - 将 Rebus 与 RabbitMQ 独占队列一起使用时出错
- html - React 中的组件重叠
- javascript - 通过过滤器对象中的键过滤对象数组
- python - Pandas - lambda - 列表中的值和来自另一列的对应值,其中列表中的值
- c# - System.Text.Json.Deserialize 仍然无法处理 .NET Core 5 中的 TimeSpan?