Как просто "узнавать" своих клиентов при звонке

Рассмотрим типичный случай - у вас интернет-магазин и вы хотите "узнавать", кто вам звонит - новый или действующий клиент (и многое другое). Возьмем простой вариант и будем смотреть в базе данных (БД) Системы Управления Сайтом (CMS) напрямую, сравнивая номер позвонившего клиента с номерами клиентов из таблицы с заказами или клиентами. Для этого мы подготовили скрипт (скачать архив), который необходимо поместить в корневую папку сайта (в папку с index.php сайта). Сам скрипт является универсальным - если у вас сайт на PHP и БД MySQL, то он вам подойдет. Для примера он настроен на CMS OpenCart 1.5, под другие CMS потребуются незначительные настройки: потребуется указать настройки доступа к БД, название таблицы и поля, в которых содержится информация о заказах - поле с номером заказа и поле с телефоном.

Скрипт поиска клиента по номеру телефона в базе данных

<?php
/* Скрипт поиска клиента по номеру телефона в базе данных - пример для сервиса VoiceTal.ru */
/* https://voicetal.ru/blog/recognize-clients/ */

/* НАСТРОЙКИ ДОСТУПА К БАЗЕ ДАННЫХ */
$db_hostname = 'localhost';
//имя пользователя бд
$db_username = '';
//пароль
$db_password = '';
//название базы данных
$db_database = '';
//кодировка таблиц
$db_encode = 'utf8';
/* НАСТРОЙКИ ДОСТУПА К БАЗЕ ДАННЫХ */

/* НАСТРОЙКА ТАБЛИЦЫ С ЗАКАЗАМИ ДЛЯ ПОИСКА ПО ТЕЛЕФОНУ */
//название таблицы с заказами
$cms_tablename = 'order';
//название поля в таблице заказов с ID заказа
$cms_field_id = 'order_id';
//название поля в таблице заказов с телефонов заказчика
$cms_field_phone  = 'telephone';
//название поля в таблице заказов с именем заказчика
$cms_field_name = 'firstname';
//поле с датой добавления заказа для сортировки (чтоб искать сначала в самых новых заказах)
$cms_field_date = 'date_added';
/* НАСТРОЙКА ТАБЛИЦЫ С ЗАКАЗАМИ ДЛЯ ПОИСКА ПО ТЕЛЕФОНУ */

//подключаемся в БД и устанавливаем кодировку
$connect = mysqli_connect($db_hostname, $db_username, $db_password, $db_database);
mysqli_query($connect, "SET NAMES $db_encode");

//проверяем соединение
if (mysqli_connect_errno ())
{
    printf ("Не удалось подключиться к БД: %s\n", mysqli_connect_error ());
    exit ();
}

//в $_GET['phone'] передаем номер звонящего из сервиса VoiceTal
//нормализуем его до нужного нам формата
$phone = normalize_phone ($_GET['phone']);

//составляем запрос в таблицу с заказами
//стоит заметить, что это не самый лучший вариант с точки зрения производительности - 
//при самом худшем варианте, когда данных клиента нет в таблице, мы переберем
//все записи в таблице. если у вас номер телефона хранится в нормализованном формате
//(т.е. формат телефона в таблице всегда один - например 79261234567), то можно изменить запрос
//чтобы искать конкретно этот телефон, а не сравнивать все.
//но т.к. мы хотим сделать максимально универсальный скрипт, то нормализуем телефон в скрипте
$query = "SELECT $cms_field_id,$cms_field_phone,$cms_field_name,$cms_field_date
FROM `$cms_tablename` ORDER BY $cms_field_date DESC LIMIT 10000";
$ret = mysqli_query ($connect, $query);
while ($theme = mysqli_fetch_assoc ($ret))
{
    if ($theme[$cms_field_phone])
    {
        //нормализуем телефон до нужного нам формата
        $order_phone = normalize_phone ($theme[$cms_field_phone]);
        //если телефоны совпадают, то мы нашли, что искали
        if ($order_phone == $phone)
        {
            //подготавливаем данные
            $result = array (
                'status' => true,
                'phone' => $phone,
                'firstname' => $theme[$cms_field_name],
                'order_id' => $theme[$cms_field_id],
                'date_added' => $theme[$cms_field_date]
            );
            //возвращаем результат в VoiceTal
            //значение этих переменных можно будет использовать в схеме звонка
            echo json_encode ($result);
            //результат получен - не смысла перебирать остальные строки таблицы
            die ();
        }
    }
}
//если дошли до сюда, значит телефон не найдет в базе
//возвращаем статус в VoiceTal, что скрипт успешно отработал
echo json_encode (array ('status' => true));

//функция для нормализации телефона
//на входе - любой текстовый или числовой формат
//на выходе - формат 79261234567
function normalize_phone ($phone)
{
    if (!$phone)
        return false;
    $phone = ereg_replace ("[^0-9]",'',$phone);
    $phone = substr ($phone, 0, 11);
    if (strlen ($phone) == 10)
        $phone = '7'.$phone;
    if (strlen ($phone) == 11)
    {
        $phone = substr ($phone, 1, 10);
        $phone = '7'.$phone;
    }
    if (strlen ($phone) == 11)
        return $phone;
    else
        return false;
}
?>

Как проверить работу скрипта

После того, как вы скачали архив со скриптом, если следует распаковать в папку с вашим сайтом. Далее нужно настроить параметры, указанные в скрипте - доступ в БД и прочее. Проверить работу скрипта можно, набрав в адресной строке браузера http://yousitename.ru/voicetal1.php?phone=89261234567, где yousitename.ru - адрес вашего сайта, 89261234567 - номер телефона, который точно есть в заказах.

Если результат будет примерно такой - {"status":true,"phone":"89261234567","firstname":"\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0437\u0430\u043a\u0430\u0437","order_id":"112","date_added":"2017-09-21 18:00:10"}, то все хорошо, заказ найден.

Если результат такой - {"status":true}, то заказ не найден.

Как это использовать в схеме звонка

Для того, чтобы использовать этот скрипт, вам нужно в начале схемы звонка добавить блок HTTP-запрос с параметром http://yousitename.ru/voicetal.php?phone=[@callerphone].

В результате выполнения данного блока мы сможем использовать значения переменных (данные о клиенте), которые вернул нам скрипт, далее в схеме звонка. Например, при переадресации на очередь звонков мы можем в названии указать параметры [$order_id] [$firstname] - таким образом при звонке у менеджера на телефоне будет отображаться номер заказа и имя клиента.

Варианты применения

Варианты применения данного скрипта (в т.ч. после небольшой модификации):

    - отображении в названии очереди звонков (пример выше)

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

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

    - можно отслеживать статус заказа клиента. Например, если заказ у клиента в статусе "в доставке", то скорее всего клиент звонит уточнить время доставки. Можно предоставить ему выбор - связаться с персональным менеджером или соединить с отделом логистики (либо сделать еще один блок HTTP-запрос и запросить у курьерской службы по API информацию по заказу и соообщить ее клиенту). Если клиент только оставил заказ, то можно его поблагодарить за это и, например, подтвердить заказ в автоматическом режиме, без связи с оператором

    - можно отследить клиентов из "черного списка" - которые часто отказываются от заказа или с которыми возникают проблемы

    - можно отслеживать VIP-клиентов, которые много и часто заказывают.

Итоги

Если вам что то осталось не понятно либо требуется помощь во внедрении - пишите на почту support@voicetal.ru.