Как стать автором
Обновить
1604.98
МТС
Про жизнь и развитие в IT

SMS-автоответчик с обновлением статуса: еще один канал связи для клиентов, которым мало интернета и звонков

Время на прочтение6 мин
Количество просмотров204

Привет, Хабр! Меня зовут Екатерина Саяпина, я Product Owner личного кабинета МТС Exolve. Сегодня расскажу, как с помощью нашей платформы можно создать SMS-автоответчик, который будет не просто информировать клиентов, но и своевременно обновлять статус доставки товара или его наличия. С ним любой клиент может отправить запрос, например «Статус 4321», и получить сообщение с информацией о заказе. Без необходимости поиска на сайте, звонков или установки приложений.

Как это работает?

Представим простую схему: клиент отправляет SMS с текстом «Статус [номер заказа]» на ваш номер. Система, интегрированная с MTС Exolve, принимает это сообщение, проверяет базу данных и возвращает клиенту актуальный статус. Звучит легко, но есть множество нюансов, которые стоит учитывать при проектировании такой системы.

Во-первых, нужно обеспечить, чтобы база данных всегда была актуальна. Это означает, что статус заказа должен обновляться в режиме реального времени. Также важно, чтобы система могла работать с любым числом клиентов и заказов, не теряя в производительности и надежности.

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

В-третьих, должно быть ограничение на количество отправленных SMS.

Приступаем к разработке

Теперь перейдем непосредственно к разработке. Мы будем использовать MTС Exolve для обработки SMS и MySQL для хранения данных о заказах. В качестве серверного языка возьмем PHP — классическое решение для подобных задач.

Настройка номера

Первым шагом будет создание аккаунта в SMS API, получение API-ключа и номера телефона, с которого будут отправляться и приниматься сообщения. MTС Exolve предоставляет удобный API-интерфейс для отправки и приема SMS-сообщений, а также для настройки вебхуков, которые будут обрабатывать входящие сообщения.

Для авторизации запросов к API вам потребуется передать заголовок с токеном:

Authorization: Bearer <ваш API-ключ>

Для отправки SMS используется метод SendSMS. Пример POST-запроса:

{
  "number": "79991112233",
  "destination": "79992223344",
  "text": "Статус вашего заказа №12345: Доставка завтра."
}

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

Проектируем базу данных

Ключевой компонент нашей системы — это база данных. Она будет хранить информацию о заказах, их статусах и времени обновления. Для этого создадим таблицу в MySQL, которая будет содержать такие поля, как номер заказа, статус и время последнего обновления.

Структура таблицы может выглядеть так:

CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    order_number VARCHAR(255) NOT NULL,
    status VARCHAR(255) NOT NULL,
    last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

В этой таблице мы будем хранить все данные о заказах. Когда клиент отправит запрос с номером заказа, система проверит базу данных и вернет соответствующий статус.

Как это будет выглядеть

Клиент отправляет SMS с текстом «Статус 12345». Система на сервере принимает этот запрос и проверяет, существует ли такой номер в базе. Если заказ найден, клиенту возвращается ответ в духе «Ваш заказ №12345 сейчас в пути. Ожидаемая доставка — завтра». Если заказа нет, клиенту приходит сообщение вроде «Извините, заказ №12345 не найден».

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

Логика работы автоответчика

Пример PHP-скрипта для обработки входящих SMS с использованием вебхуков MTС Exolve:

<?php

// Подключаем библиотеку для работы с MTS-Exolve API
require __DIR__ . '/vendor/autoload.php';

// Подключаемся к базе данных
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

// Получаем данные о входящем сообщении
$from = $_POST['sender'];
$message = $_POST['text'];

// Проверяем сообщение на наличие номера заказа
if (preg_match('/Статус (\d+)/', $message, $matches)) {
    $order_number = $matches[1];

    // Ищем заказ в базе данных
    $stmt = $pdo->prepare('SELECT status FROM orders WHERE order_number = ?');
    $stmt->execute([$order_number]);
    $order = $stmt->fetch();

    if ($order) {
        $status = $order['status'];
        $reply = "Заказ №$order_number: статус - $status";
    } else {
        $reply = "Заказ №$order_number не найден.";
    }

    // Отправляем ответное SMS через MTS-Exolve
    $client->messages->create([
        "number" => "AlfaName",
        "destination" => $from,
        "text" => $reply
    ]);
} else {
    echo "Неверный формат запроса";
}

?>

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

Обновление статуса заказов

Одной из ключевых задач для оператора будет возможность быстро обновлять статусы заказов. Для этого мы добавим небольшой веб-интерфейс, который позволит администратору вносить изменения в базу данных.

Создадим HTML-форму:

<form action="update-status.php" method="POST">
    <label for="order_number">Номер заказа:</label>
    <input type="text" id="order_number" name="order_number" required>
    
    <label for="status">Статус:</label>
    <input type="text" id="status" name="status" required>
    
    <button type="submit">Обновить статус</button>
</form>

И PHP-скрипт для обновления:

<?php

$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$order_number = $_POST['order_number'];
$status = $_POST['status'];

$stmt = $pdo->prepare('UPDATE orders SET status = ?, last_updated = NOW() WHERE order_number = ?');
$stmt->execute([$status, $order_number]);

echo "Статус заказа №$order_number обновлен на '$status'.";

?>

Таким образом, оператор может быстро обновлять статусы заказов через удобный веб-интерфейс.

Финальные штрихи

Система автоответчика должна быть гибкой и масштабируемой. Даже если у вас тысячи клиентов, она обязана реагировать мгновенно. Кроме того, MTС Exolve предоставляет дополнительные возможности по обработке статусов сообщений. Вы можете использовать метод GetList для получения полной информации о статусе каждого отправленного или полученного сообщения, что позволит администратору легко отслеживать ошибки и недоставленные сообщения.

И еще небольшое дополнение для нашего тестового кода. В реальных условиях важно предусмотреть защиту от перегрузок и спам-атак, например через лимитирование количества запросов с одного номера. В нашем случае мы можем реализовать эту защиту через лимитирование количества запросов с одного номера.

Для начала нам потребуется создать новую таблицу в нашей базе данных. Назовем ее rate_limit. В этой таблице мы будем хранить информацию о каждом запросе: номер телефона, с которого он был сделан, и временную метку. Структура таблицы будет выглядеть следующим образом:

CREATE TABLE rate_limit (
    id INT AUTO_INCREMENT PRIMARY KEY,
    phone_number VARCHAR(20) NOT NULL,
    timestamp INT NOT NULL
);

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

<?php
function checkRateLimit($phoneNumber, $limit = 5, $period = 3600) {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); 
    // Очистка старых записей
    $stmt = $pdo->prepare("DELETE FROM rate_limit WHERE timestamp < :time");
    $stmt->execute(['time' => time() - $period]);   
    // Подсчет запросов за период
    $stmt = $pdo->prepare("SELECT COUNT(*) as count FROM rate_limit WHERE phone_number = :phone");
    $stmt->execute(['phone' => $phoneNumber]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
   
    if ($result['count'] >= $limit) {
        return false; // Лимит превышен
    }    
    // Добавление нового запроса
    $stmt = $pdo->prepare("INSERT INTO rate_limit (phone_number, timestamp) VALUES (:phone, :time)");
    $stmt->execute([
        'phone' => $phoneNumber,
        'time' => time()
    ]);    
    return true; // Запрос разрешен
}
?>

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

Использовать эту функцию в нашем основном коде обработки SMS довольно просто. Вот как это будет выглядеть:

$phoneNumber = $_POST['sender'];
if (checkRateLimit($phoneNumber)) {
    // Обработка SMS
    processIncomingSMS($phoneNumber, $_POST['text']);
} else {
    // Отправка сообщения о превышении лимита
    sendSMS($phoneNumber, "Извините, вы превысили лимит запросов. Попробуйте позже.");
}

Заключение

Создание SMS-автоответчика — это еще один канал, который может быть удобным клиентам, а в некоторых случаях он даже надежнее и удобнее, чем интернет или прямые звонки. Стоит отметить, что подход с SMS-автоответчиком универсален. Здесь мы рассмотрели его в контексте обновления статуса заказа или наличия товара на складе, но те же принципы можно использовать и в других кейсах. К примеру, давать клиентам возможность проверить готовность документов, статус заявок или изменения в расписании. Вопрос только в том, насколько гибко вы сможете настроить логику, но, как видите, сама по себе система легко адаптируется под разные задачи.

Будет также интересно почитать, как вы подходили к решению аналогичной или схожей задачи, — ждем вас в комментариях!

Теги:
Хабы:
+6
Комментарии2

Полезные ссылки

Настраиваем аутентификацию по SMS и через мессенджеры для самых мобильных пользователей

Время на прочтение7 мин
Количество просмотров3.7K
Всего голосов 10: ↑9 и ↓1+11
Комментарии9

Как настроить аутентификацию через SMS и Flask для самых-самых ленивых пользователей

Время на прочтение7 мин
Количество просмотров3.5K
Всего голосов 10: ↑8 и ↓2+9
Комментарии6

Создание WordPress-плагина для отправки SMS-сообщений

Время на прочтение9 мин
Количество просмотров1.9K
Всего голосов 6: ↑6 и ↓0+6
Комментарии2

Помощь логистам: как сделать SMS-уведомления о разгрузке товара на складе на основе FastAPI

Время на прочтение8 мин
Количество просмотров1.6K
Всего голосов 5: ↑4 и ↓1+5
Комментарии4

Конструктор в мире коммуникаций: обзор платформы МТС Exolve

Время на прочтение6 мин
Количество просмотров3.9K
Всего голосов 8: ↑8 и ↓0+8
Комментарии1

Информация

Сайт
www.mts.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия