Notifly в OpenCart
OpenCart — это интернет-магазин, где каждое событие означает деньги. Заказ,
регистрация, товар на исходе — всё это стоит получать push мгновенно, а не
проверять почту раз в час. Подключимся через систему событий OpenCart
(таблица event) и небольшой OCMOD-модификатор.
Функцию notifly_send() берём общую — ту же, что и для остальных CMS.
Положите её в файл system/library/notifly.php и подключите из config.php,
чтобы она была доступна везде.
Новый заказ
Заголовок раздела «Новый заказ»Самое важное событие. Ловим момент, когда заказу впервые присваивается статус
(addOrderHistory), через событие catalog/model/checkout/order/addHistory/after.
Зарегистрируйте обработчик в таблице event (через админку Дополнения →
События или SQL) на путь catalog/model/checkout/order/addHistory/after,
указав ваш файл:
<?phpclass ModelExtensionNotiflyOrder extends Model { public function alert(&$route, &$args, &$output) { [$order_id, $status_id] = $args;
// Реагируем только на первый переход в «оформлен» (по умолчанию 1). if ((int)$status_id !== 1) { return; }
$this->load->model('checkout/order'); $order = $this->model_checkout_order->getOrder($order_id); if (!$order) { return; }
$products = $this->model_checkout_order->getOrderProducts($order_id); $lines = []; foreach ($products as $p) { $lines[] = "• {$p['name']} × {$p['quantity']}"; }
notifly_send( "🛒 Заказ #{$order_id} — {$order['total']} {$order['currency_code']}", "Покупатель: {$order['firstname']} {$order['lastname']}\n" . "Телефон: {$order['telephone']}\n" . "Оплата: {$order['payment_method']}\n\n" . "Состав:\n" . implode("\n", $lines) . "\n\n" . "Админка: index.php?route=sale/order.info&order_id={$order_id}", 9 // заказы — громкий приоритет ); }}Предупреждение о низком остатке
Заголовок раздела «Предупреждение о низком остатке»После оформления заказа остаток товаров уменьшается. Проверим товары заказа и предупредим, если что-то ушло ниже порога. Дополним тот же обработчик:
$this->load->model('catalog/product');foreach ($products as $p) { $product = $this->model_catalog_product->getProduct($p['product_id']); if (!$product) { continue; } if ((int)$product['quantity'] <= 3) { notifly_send( "📦 Мало на складе: {$product['name']}", "Осталось: {$product['quantity']} шт.\n" . "SKU: {$product['sku']}\n" . "Пополнить: index.php?route=catalog/product.form&product_id={$p['product_id']}", 6 ); }}Регистрация нового покупателя
Заголовок раздела «Регистрация нового покупателя»Событие catalog/model/account/customer/addCustomer/after срабатывает после
создания аккаунта:
<?phpclass ModelExtensionNotiflyCustomer extends Model { public function alert(&$route, &$args, &$output) { $data = $args[0]; notifly_send( "👤 Новый покупатель: {$data['firstname']} {$data['lastname']}", "Email: {$data['email']}\n" . "Телефон: " . ($data['telephone'] ?? '—'), 4 ); }}Регистрация событий через OCMOD
Заголовок раздела «Регистрация событий через OCMOD»Чтобы не прописывать обработчики руками, оформите их как OCMOD-модификатор,
который добавляет строки в таблицу event при установке:
<?xml version="1.0" encoding="utf-8"?><modification> <name>Notifly Alerts</name> <version>1.0</version> <author>Notifly</author> <!-- События регистрируются install-скриптом модуля --> <file path="system/startup.php"> <operation> <search><![CDATA[// Registry]]></search> <add position="before"><![CDATA[require_once(DIR_SYSTEM . 'library/notifly.php');]]></add> </operation> </file></modification>А сами события добавьте install-скриптом модуля (admin/controller/extension/module/notifly.php, метод install()):
$this->load->model('setting/event');$this->model_setting_event->addEvent([ 'code' => 'notifly_order', 'trigger'=> 'catalog/model/checkout/order/addHistory/after', 'action' => 'extension/notifly/order.alert', 'status' => 1, 'sort_order' => 0,]);$this->model_setting_event->addEvent([ 'code' => 'notifly_customer', 'trigger'=> 'catalog/model/account/customer/addCustomer/after', 'action' => 'extension/notifly/customer.alert', 'status' => 1, 'sort_order' => 0,]);Тротлинг
Заголовок раздела «Тротлинг»При импорте или массовом обновлении статусов заказов не заваливайте канал. Используйте встроенный кэш OpenCart:
$key = 'notifly_' . md5($title);if ($this->cache->get($key)) { return;}$this->cache->set($key, 1);- Заказ виден за секунды. Успеваете подтвердить заказ, пока клиент ещё онлайн.
- Склад под контролем. Push о низком остатке — не пропустите «out of stock».
- Не нужен платный модуль уведомлений из маркетплейса OpenCart.
Что улучшить дальше
Заголовок раздела «Что улучшить дальше»- Отдельные каналы Notifly: «заказы», «склад», «клиенты».
- Приоритет заказа по сумме: большие чеки — приоритет 10.
- Deep-link на заказ через extras.