Промо-купоны — эффективный инструмент маркетинга, повышающий вовлечённость клиентов. В 1С-Битрикс их можно создавать вручную через административную панель, но для автоматизации процессов удобнее использовать API.
В этой статье рассмотрим, как программно генерировать купоны, настраивать их параметры и избегать распространённых ошибок.
1. Подготовка и проверка модулей
Перед работой с купонами необходимо убедиться, что в системе подключены модули sale и catalog.
if (!CModule::IncludeModule("sale") || !CModule::IncludeModule("catalog")) {
die("Не удалось подключить необходимые модули Битрикс");
}2. Генерация уникального кода купона
1С-Битрикс предоставляет функцию CatalogGenerateCoupon(), но она не всегда гарантирует уникальность. Лучше использовать свой генератор с проверкой:
do {
$couponCode = "PROMO" . rand(1000, 9999); // или uniqid()
$coupon = Bitrix\Sale\Internals\DiscountCouponTable::getList([
"filter" => ["COUPON" => $couponCode]
])->fetch();
} while ($coupon); // Повторяем, пока не найдём уникальный код3. Создание купона через DiscountCouponTable
Основные параметры купона:
-
DISCOUNT_ID– ID правила корзины, к которому привязывается купон. -
TYPE– тип купона (0– одноразовый,1– для одного заказа,2– многоразовый). -
MAX_USE– максимальное число применений (0– без ограничений). -
ACTIVE– активность (Y/N). -
DATE_APPLY– срок действия (опционально).
Пример создания:
use Bitrix\Sale\Internals\DiscountCouponTable;
$fields = [
"DISCOUNT_ID" => 6, // ID правила скидки
"COUPON" => $couponCode, // Сгенерированный код
"TYPE" => 2, // Многоразовый купон
"MAX_USE" => 100, // Лимит использований
"ACTIVE" => "Y", // Активировать сразу
"DATE_APPLY" => "2025-12-31 23:59:59", // Срок действия
"DESCRIPTION" => "Акция 2025", // Описание
];
$result = DiscountCouponTable::add($fields);
if ($result->isSuccess()) {
echo "Купон успешно создан: " . $couponCode;
} else {
echo "Ошибка: " . implode(", ", $result->getErrorMessages());
}4. Массовая генерация купонов
Если нужно создать несколько купонов, используем цикл:
for ($i = 0; $i < 10; $i++) {
// Генерация уникального кода
do {
$couponCode = "BATCH" . rand(1000, 9999);
$exists = DiscountCouponTable::getList([
"filter" => ["COUPON" => $couponCode]
])->fetch();
} while ($exists);
// Создание купона
DiscountCouponTable::add([
"DISCOUNT_ID" => 6,
"COUPON" => $couponCode,
"TYPE" => 1, // Одноразовый
"ACTIVE" => "Y",
]);
}5. Интеграция с CRM и маркетингом
Привязка купонов к пользователям
Можно указать USER_ID при создании:
$fields["USER_ID"] = 123; // ID пользователя в БитриксОтправка купонов по email
Используем CEvent::Send():
CEvent::Send("NEW_COUPON", "s1", [
"EMAIL" => "client@example.com",
"COUPON" => $couponCode,
"MESSAGE" => "Ваш промокод: " . $couponCode,
]);6. Возможные ошибки и решения
| Ошибка | Причина | Решение |
|---|---|---|
DISCOUNT_ID не найден
|
Неправильный ID скидки |
Проверить в marketing > Правила работы с корзиной
|
Купон уже существует
|
Дублирование кода | Использовать проверку на уникальность |
Модуль sale не подключён
|
Отсутствует модуль |
Проверить в Настройки > Модули
|
Недостаточно прав
|
У пользователя нет доступа | Проверить права доступа к API |
Заключение
Программное создание купонов в 1С-Битрикс позволяет автоматизировать маркетинговые кампании, раздавать промокоды клиентам и интегрировать скидки с CRM.
Рекомендации:
-
Используйте проверку уникальности кодов.
-
Ограничивайте срок действия (
DATE_APPLY). -
Для массовой генерации применяйте транзакции (
startTransaction()).
Теперь вы можете гибко управлять купонами в 1С-Битрикс без ручного ввода!