Рассмотрим типичный случай - у вас интернет-магазин и вы хотите "узнавать", кто вам звонит - новый или действующий клиент (и многое другое). Возьмем простой вариант и будем смотреть в базе данных (БД) Системы Управления Сайтом (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.