Почему важна отправка SMS-уведомлений о статусах заказов в WooCommerce
Для интернет-магазинов на WooCommerce оперативное информирование клиентов о статусе их заказов повышает лояльность и снижает количество обращений в службу поддержки. SMS-уведомления работают надежнее email, часто читаются быстрее и не попадают в спам. В статье подробно разберем, как реализовать отправку SMS при смене статуса заказа без сторонних платных сервисов, опираясь на проверенные методы.
Диагностика: что проверить перед настройкой SMS-уведомлений
- Убедитесь, что у вас есть доступ к SMS-шлюзу с API (например, Twilio, SMS.RU, Nexmo и т.п.).
- Проверьте, что номера телефонов клиентов корректно сохраняются в поле "Billing Phone" в заказах WooCommerce.
- Убедитесь, что в WooCommerce корректно обрабатываются статусы заказов (например, "processing", "completed").
- Проверьте, что нет конфликтов с другими плагинами, которые могут блокировать хук смены статуса.
Пошаговое решение: интеграция отправки SMS при смене статуса заказа
1. Получение данных для SMS
Нам нужны номер телефона клиента и новый статус заказа. Номер обычно хранится в метаполе _billing_phone.
2. Добавление кода отправки SMS через API
В этом примере используем SMS.RU (бесплатный тариф с ограничениями, но удобен для тестирования). Для других сервисов нужно адаптировать API-запросы.
function send_sms_ru($phone, $message) {
$api_id = 'ВАШ_API_ID'; // получите в личном кабинете SMS.RU
$url = 'https://sms.ru/sms/send?api_id=' . $api_id . '&to=' . urlencode($phone) . '&msg=' . urlencode($message) . '&json=1';
$response = wp_remote_get($url);
if (is_wp_error($response)) {
error_log('Ошибка отправки SMS: ' . $response->get_error_message());
return false;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
if ($body['status'] != 'OK') {
error_log('Ошибка SMS.RU: ' . print_r($body, true));
return false;
}
return true;
}3. Хук на смену статуса заказа
Используем хук woocommerce_order_status_changed, чтобы отправлять SMS при изменении статуса. Например, уведомим клиента при переходе заказа в статус "processing" и "completed".
add_action('woocommerce_order_status_changed', 'send_sms_on_order_status_change', 10, 4);
function send_sms_on_order_status_change($order_id, $old_status, $new_status, $order) {
$phone = $order->get_billing_phone();
if (empty($phone)) {
error_log('Отсутствует номер телефона для заказа ' . $order_id);
return;
}
$statuses_to_notify = ['processing', 'completed'];
if (!in_array($new_status, $statuses_to_notify)) {
return; // не отправляем для других статусов
}
$message = sprintf('Ваш заказ #%d теперь имеет статус: %s.', $order_id, ucfirst($new_status));
send_sms_ru($phone, $message);
}Проверка результата: как убедиться, что SMS отправляются
- Сделайте тестовый заказ и смените статус вручную в админке WooCommerce на "processing" или "completed".
- Проверьте лог ошибок WordPress (wp-content/debug.log), если включен WP_DEBUG, на предмет ошибок отправки SMS.
- Убедитесь, что SMS приходит на телефон, указанный в заказе.
- Для отладки можно временно добавить
error_logили уведомления через email в функцию отправки SMS.
Частые ошибки и их исправление
- Номер телефона не приходит или пустой: проверьте, что поле "Billing Phone" заполнено корректно, и используйте метод
$order->get_billing_phone(). Иногда клиенты оставляют номера в неправильном формате — добавьте валидацию. - Ошибка API SMS-сервиса: проверьте правильность API ключа и URL. Иногда сервисы блокируют запросы с локальных серверов, используйте внешние хостинги или VPN для тестов.
- Хук не срабатывает: убедитесь, что код добавлен в functions.php или в плагин и что нет конфликтов с другими плагинами, отключите все плагины кроме WooCommerce и проверьте.
- Дублирование SMS: если вы используете несколько плагинов для уведомлений, возможны дубли. Отслеживайте вызовы и отключайте лишние модули.
Практические советы по безопасности и производительности
- Храните API ключи вне публичного доступа — используйте
wp-config.phpили переменные окружения. - Не отправляйте SMS в синхронном режиме при обработке запроса — при высоких нагрузках используйте очередь задач (Action Scheduler или WP-Cron) для отложенной отправки.
- Внедрите ограничение на количество SMS для одного номера в сутки, чтобы избежать спама и лишних расходов.
- Регулярно обновляйте используемый API и проверяйте совместимость плагинов с WooCommerce.
Сравнение вариантов реализации отправки SMS в WooCommerce
| Способ | Плюсы | Минусы |
|---|---|---|
| Самописный код с SMS.RU API | Гибкость, бесплатный тариф для тестов | Требует навыков, ограниченный функционал, возможны ошибки |
| Плагин WooCommerce SMS Notifications | Простая установка, готовые шаблоны | Платные функции, иногда конфликтует с кастомными решениями |
| Использование сервисов типа Twilio с готовыми интеграциями | Надежность, расширенный функционал, поддержка | Стоимость, настройка API |