拨号,根据不同的号码在数据库中以twilio

问题描述 投票:-1回答:1

当传感器提交值时,我试图拨打多个电话号码。

传感器提交一个值和一个Sensorid。当数据库中有多个联系人时,它必须呼叫所有这些号码。此代码选择必须拨打的触发器和夹心号码。如果有2个号码,则必须同时拨打这两个号码。

$conn = mysqli_connect($servername, $username, $password, $dbname);

$sql = "SELECT * FROM alarmtriggers WHERE sensor_id = '$sensor_id'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        /* Als waarde gelijk is aan */
        if ($row['type'] == 'vast') {
            if ($row['waarde'] = $val1) {

                // get the phonenumbers it needs to dial
                $sql2 = "SELECT telefoonnummer FROM alarmnummers WHERE sensor_id = '$sensor_id'";
                $result2 = $conn->query($sql2);

                if ($result2->num_rows > 0) {
                    while ($row2 = $result2->fetch_assoc()) {
                        $phonenumber = $row2["telefoonnummer"]; // phonenumbers it needs to dial
                // execute this link several times, depending on how many contacts are in the database 
                // mirandaleus.nl/includes/alarmbot/call.php?sensorid=$sensor_id&callto=$phonenumber
            }
        }
    }
}

the call.php:

<?php

require "vendor/autoload.php";

use Twilio\Rest\Client;

$sid    = "mysid";
$token  = "mytoken";
$twilio = new Client($sid, $token);

$sensor_id = $_REQUEST["sensor_id"];
$callto = $_REQUEST["callto"];
$call = $twilio->calls
    ->create(
        $callto, // to
        "+12242631292", // from
        array("url" => "https://mirandaleus.nl/includes/alarmbot/includes/cas_xml.inc.php?sensor=$sensor_id")
    );

print($call->sid);

call_xml.inc.php:

<?php header('Content-type: text/xml'); ?>
<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$servername = "localhost";
$username = "myusername";
$password = "mypassword";
$dbname = 'mydbname';

$sensor_id = $_GET['sensor'];
$conn = mysqli_connect($servername, $username, $password, $dbname);

$sql = "SELECT sensor_naam FROM sensoren WHERE sensor_id = '$sensor_id'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        $sensornaam = $row['sensor_naam'];
    }
}
?>
<Response>
    <Say voice="alice" language="nl-NL">
        Het alarm van sensor <?php echo $sensornaam ?> gaat af.
    </Say>
    <Pause length="1" />
    <Say voice="alice" language="nl-NL">
        Het alarm van sensor <?php echo $sensornaam ?> gaat af.
    </Say>
    <Pause length="1" />
    <Say voice="alice" language="nl-NL">
        Het alarm van sensor <?php echo $sensornaam ?> gaat af.
    </Say>
    <Pause length="1" />
    <Say voice="alice" language="nl-NL">
        Einde bericht
    </Say>
</Response>

总之,它必须执行一个具有不同变量的链接(或脚本),具体取决于数据库中有多少个变量

php sql twilio
1个回答
0
投票

这不需要通过每个调用的额外HTTP请求来完成,您可以通过一些小的修改直接将call.php脚本包含在循环中。 HTTP请求增加了“开销”并减慢了工作速度,并且由于实际的Twilio API调用意味着已经为每个调用提出了一个HTTP请求,因此最好不要在每个请求之上再添加一个。

当直接包含脚本时,它不需要从$ _REQUEST中获取其参数,而是可以直接访问包含它的当前范围内的所有变量。

应对此工作进行以下小修改:

主脚本:

if ($result2->num_rows > 0) {
  while ($row2 = $result2->fetch_assoc()) {
    $callto = $row2["telefoonnummer"]; // phonenumbers it needs to dial
    require '{path-from-this-location}/call.php';
  }
}

call.php:

<?php

require_once "vendor/autoload.php"; // require_once, so that this doesn’t crash when call.php 
                                    // itself gets included multiple times in the loop

use Twilio\Rest\Client;

$sid    = "mysid";
$token  = "mytoken";
$twilio = new Client($sid, $token);

// commented out, these variables are in the current scope inside the while loop already,
// and therefor accessible directly here
//$sensor_id = $_REQUEST["sensor_id"];
//$callto = $_REQUEST["callto"];

// rest from here on, same as before
$call = $twilio->calls(…); 
© www.soinside.com 2019 - 2024. All rights reserved.