Реализация функционала генерации звонков из RSS и СМС с помощью api-метода callStart

Допустим, у нас есть база клиентов: их номера, почтовые адреса, имена.

Нам необходимо дать возможность пользователю получить вызов от оператора call-центра щелкнув по кнопке в письме, либо пройдя по ссылке в смс(фактически сообщение может приходить в любой мессенджер). Триггер срабатывания может быть любым.

Пример письма с функцией обратного звонка

Пример СМС с функцией обратного звонка

Для реализации нам подойдёт метод callStart, возьмем готовую библиотеку с GitHub

Использоние данного метода ранее рассматривалось в данной статье

Весь процесс создания функционала можно разделить на 4 части: *
1 генерация ссылки для обратного звонка
2 создание страницы для приема обращений
3 проверка разрешения на заказ звонка
4 запуск звонка

1 генерация страницы для формирования ссылки для обратного звонка

для обеспечения безопасности и защиты от рандомной накрутки звонков мы будем учитывать случайную величину, далее мы будем проверять ключ и номер в базе для дальнейшего сопоставления.

  function generatePassword($length){

  $chars = 'abdefhiknrstyzABDEFGHKNQRSTYZ23456789';
  $numChars = strlen($chars);
  $string = '';
  for ($i = 0; $i < $length; $i++) {
      $string .= substr($chars, rand(1, $numChars) - 1, 1);
  }
  return $string;
  }

//получаем данные со страницы

if(isset($_POST["send"])) {
   $tell_from = htmlspecialchars($_POST["tell_1"]);
    $tell_to = htmlspecialchars($_POST["tell_2"]);

//генерим случайный ключ для проверки прав на заказ обратного звонка 
$matRandom =  generatePassword(8);

//получаем последнюю добавленную запись
$resultSet = $mysqli->query("SELECT MAX(`id`) FROM `orderMailCalls`")
or die("Ошибка " . mysqli_error($mysqli));

$max_id = printResult($resultSet);

//генерим ссылку где первым параметром является запись в табличке orderMailCalls которая содержит данные по звонку, вторым параметром является ключ проверки
$link_create= "http://foxy/mailCallStart.php?i=$max_id&r=$matRandom";

//пишем данные в бд 
$mysqli->query ("INSERT INTO orderMailCalls(
`from`, `to`, `matRandom`, `link`, `callStatus`, `data_create`)

VALUES (
'$tell_from', '$tell_to', '$matRandom', '$link_create', '1', '" . time() . "'
); ");

$mysqli->close();

echo("Внимание!!! Ссылка одноразовая, ваша ссылка:<br/>");
echo("$link_create");

}

2 создание страницы для приема обращений

<form class="formForLink" action="" method="post">
    <input type="text" name="tell_1" id="phone_1" placeholder="Введите номер клиента" value="">
    <input type="text" name="tell_2" id="phone_2" placeholder="Введите номер оператора" value="">

    <input type="submit" name="send" value="Запустить звонок"/>
</form>

3 проверка разрешения на заказ звонка

function printResult($result)
{
while (($row = $result->fetch_assoc()) != false) {

    return array($row["from"], $row["to"], $row["matRandom"], $row["callStatus"]);
}
}
//получаем параметры из ссылки
$i=$_GET['i'];
$r=$_GET['r'];

$result = $mysqli->query ("SELECT * FROM `orderMailCalls` WHERE `id`= '$i'");
list($to, $from, $matRandom, $callStatus) = printResult($result);

// проверяем корректность ключа и стутус обращения(данную проверку мы вводим для ограничения колличества звонков)

if ($matRandom==$r and $callStatus!=0){

4 запуск звонка

//если мы прошли проверку, то подключаем библиотеку, передаём параметры и вызываем нужный нам метод

$callstart = new class_callStart();
$callstart->to = "$to";
$callstart->from = "$from";
$callstart->callStar_function();

//меняем значение в бд для укаания того что по заявке уже был звонок
$mysqli->query ("UPDATE `u0305396_crm`.`orderMailCalls` SET `callStatus`='0' WHERE  `id`='$i'");

//перекидываем на главную странрицу
header( 'Location: ../index.php');

}else{
//перекидываем на посадочную страницу странрицу
header( 'Location: ../tarifs.php');
}

Ниже код callstart.php

require_once("smartcallback-api-php-client-master/SmartCallBackAPI.php");

class class_callStart{

public $to;
public $from;

function callStar_function(){

    $POST = Array(
        "client_id" => xxx,//в какой кабинет закидываем, токен или client_id
        "domen_id"   => xxx,//домен
        "phoneto"   => $this->to,//кому звоним
        "phonefrom"   => $this->from,//оператор
        "utm_source"   => 'mailCall'//utm метка

    );

    $SmartCallBackAPI = new SmartCallBack_API();
    $SmartCallBackAPI->callStart($POST);
    }

 }