Допустим, у нас есть база клиентов: их номера, почтовые адреса, имена.
Нам необходимо дать возможность пользователю получить вызов от оператора 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 создание страницы для приема обращений
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);
}
}