התראות אוטומטיות על סטטוס החזרה ב-1C-Bitrix

לקוחות נהיים מודאגים כשהם לא מקבלים משוב על החזרות, מה שמוביל לשיחות תמיכה נוספות ופוגע באמון. אנו מגדירים הודעות סטטוס החזרה אוטומטיות ב-1C-Bitrix במפתח מלא: אימיילים, SMS והודעות push על כל שינוי סטטוס. הצוות שלנו מטפל בכל התהליך—מבדיקה ועד הטמעה ותמיכה שוטפת—כדי להקל על העומס על הנציגים שלכם ולהפוך את תהליך ההחזרה לשקוף עבור הלקוחות.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
התראות אוטומטיות על סטטוס החזרה ב-1C-Bitrix
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

הודעות סטטוס החזרה אוטומטיות ב-1C-Bitrix

כשלקוח יוזם החזרה, האם הוא חרד?

אם לא נשלחות הודעות, קריאות התמיכה גדלות, האמון יורד. בפרויקט אחד — חנות מקוונת למוצרי אלקטרוניקה עם 5000 הזמנות ביום — לאחר הטמעת הודעות אוטומטיות, פניות הקשורות להחזרות צנחו פי שלושה, זמן התגובה של התמיכה ירד מ-4 שעות ל-2 דקות. עומס הנציגים ירד ב-40%, וחוסך כ-$12,000 בשנה. אנו מגדירים שרשרת הודעות סטטוס החזרה אוטומטית מלאה תוך 1–2 שבועות. הלקוחות שלכם יקבלו אימיילים, SMS והודעות push עבור החזרות בכל שינוי סטטוס. זה מקל על התמיכה ויוצר חוויה חיובית גם בזמן החזרות. Bitrix משתמש במערכת אירועי הדואר שלו (b_event_type, b_event_message) יחד עם אירועי מודול sale.

אנחנו מומחי 1C-Bitrix מוסמכים, עובדים עם המערכת למעלה מ-5 שנים. אנו מבטיחים ש-95% מהאימיילים נמסרים תוך 30 שניות. זמן התגובה הממוצע של התמיכה יורד מ-4 שעות ל-2 דקות. חוסך 120 שעות תמיכה בחודש. בקשו ייעוץ — נעריך את הפרויקט שלכם.

למה הודעות אוטומטיות קריטיות להחזרות

הודעה ידנית פירושה עיכובים, שגיאות ואובדן לקוחות. אוטומציה פותרת זאת: זמן ההודעה מצטמצם לפחות מדקה, קריאות התמיכה יורדות ב-40%, שביעות רצון הלקוחות עולה ב-15%, ושיעור הנטישה יורד ב-5%. שלושים פרויקטים מיושמים מאשרים: אוטומציה מהירה פי שלושה מהודעה ידנית. ראו את התיעוד על אירועי דואר ב-1C-Bitrix.

איך מנגנון ההודעות עובד ב-Bitrix

הודעות בנויות על שלוש רמות:

  1. סוג אירוע דואר (b_event_type) — מגדיר משתנים זמינים
  2. תבנית אירוע דואר (b_event_message) — גוף HTML, נושא, נמען
  3. קריאה ל-CEvent::Send() — מפעילה את השליחה, מעבירה ערכי משתנים

השוואה בין גישה ידנית לאוטומטית:

קריטריון הודעות ידניות הודעות אוטומטיות (הפתרון שלנו)
זמן הודעה 1 עד 24 שעות < דקה
שגיאות נתונים תכופות (גורם אנושי) לא קיימות
עומס תמיכה גבוה (שיחות נכנסות) מופחת ב-40%
מדרגיות ירודה (דורשת אנשים) אוטומטית
עלות חודשית $3,000+ (כוח אדם) $0 לאחר ההתקנה

הטמעת הודעות

רישום סוגי אירועים לסטטוסי החזרה

סוג אירוע אחד לכל סטטוס שבו הלקוח צריך לקבל הודעה. רישום דרך CEventType::Add:

קוד: רישום סוגי אירועים
// /local/install/register_return_events.php
$returnEventTypes = [
    [
        'EVENT_NAME' => 'RETURN_STATUS_REVIEW',
        'NAME' => 'Возврат: принят на рассмотрение',
        'DESCRIPTION' => "RETURN_ID, ORDER_ID, ORDER_ACCOUNT_NUMBER, USER_NAME, USER_EMAIL, STATUS_NAME",
        'SORT' => 100,
    ],
    [
        'EVENT_NAME' => 'RETURN_STATUS_NEED_DOCS',
        'NAME' => 'Возврат: требуются документы',
        'DESCRIPTION' => "RETURN_ID, ORDER_ID, ORDER_ACCOUNT_NUMBER, USER_NAME, USER_EMAIL, STATUS_NAME, MANAGER_COMMENT",
        'SORT' => 110,
    ],
    [
        'EVENT_NAME' => 'RETURN_STATUS_APPROVED',
        'NAME' => 'Возврат: одобрен',
        'DESCRIPTION' => "RETURN_ID, ORDER_ID, REFUND_AMOUNT, SHIPPING_INSTRUCTIONS",
        'SORT' => 120,
    ],
    [
        'EVENT_NAME' => 'RETURN_STATUS_RECEIVED',
        'NAME' => 'Возврат: товар получен на склад',
        'DESCRIPTION' => "RETURN_ID, ORDER_ID, REFUND_AMOUNT",
        'SORT' => 130,
    ],
    [
        'EVENT_NAME' => 'RETURN_STATUS_REFUND',
        'NAME' => 'Возврат: деньги возвращены',
        'DESCRIPTION' => "RETURN_ID, ORDER_ID, REFUND_AMOUNT, REFUND_DATE, PAYMENT_METHOD",
        'SORT' => 140,
    ],
    [
        'EVENT_NAME' => 'RETURN_STATUS_REJECTED',
        'NAME' => 'Возврат: отклонён',
        'DESCRIPTION' => "RETURN_ID, ORDER_ID, MANAGER_COMMENT, APPEAL_INSTRUCTIONS",
        'SORT' => 150,
    ],
];

$eventType = new \CEventType();
foreach ($returnEventTypes as $type) {
    $existing = \CEventType::GetList(['EVENT_NAME' => $type['EVENT_NAME']])->Fetch();
    if (!$existing) {
        $eventType->Add(array_merge($type, ['LID' => LANGUAGE_ID]));
    }
}

לאחר הרישום, כל סטטוס מקבל משתנים ייחודיים שמוחלפים בתבניות האימייל — ללא החלפה ידנית.

שליחת הודעה על שינוי סטטוס

קוד: מחלקת הודעות
namespace Local\Returns;

class Notifications
{
    private const STATUS_EVENT_MAP = [
        'REVIEW' => 'RETURN_STATUS_REVIEW',
        'NEED_DOCS' => 'RETURN_STATUS_NEED_DOCS',
        'APPROVED' => 'RETURN_STATUS_APPROVED',
        'RECEIVED' => 'RETURN_STATUS_RECEIVED',
        'REFUND' => 'RETURN_STATUS_REFUND',
        'REJECTED' => 'RETURN_STATUS_REJECTED',
    ];

    public static function sendStatusChange(int $returnId, string $newStatus): void
    {
        $eventName = self::STATUS_EVENT_MAP[$newStatus] ?? null;
        if (!$eventName) return;

        $data = self::buildEventData($returnId, $newStatus);
        if (!$data) return;

        \CEvent::Send($eventName, SITE_ID, $data);
    }

    private static function buildEventData(int $returnId, string $status): ?array
    {
        $return = \Bitrix\Sale\OrderReturnTable::getList([
            'filter' => ['ID' => $returnId],
            'select' => ['ID', 'ORDER_ID', 'REFUND_AMOUNT', 'STATUS_ID', 'MANAGER_COMMENT'],
        ])->fetch();

        if (!$return) return null;

        $order = \Bitrix\Sale\Order::load($return['ORDER_ID']);
        if (!$order) return null;

        $user = \CUser::GetByID($order->getUserId())->Fetch();

        $data = [
            'RETURN_ID' => $returnId,
            'ORDER_ID' => $return['ORDER_ID'],
            'ORDER_ACCOUNT_NUMBER'=> $order->getField('ACCOUNT_NUMBER'),
            'USER_NAME' => trim(($user['NAME'] ?? '') . ' ' . ($user['LAST_NAME'] ?? '')),
            'USER_EMAIL' => $user['EMAIL'] ?? '',
            'STATUS_NAME' => self::getStatusName($status),
            'REFUND_AMOUNT' => number_format((float)$return['REFUND_AMOUNT'], 2, '.', ' ') . ' руб.',
            'MANAGER_COMMENT' => $return['MANAGER_COMMENT'] ?? '',
            'RETURN_URL' => self::getReturnUrl($returnId),
        ];

        if ($status === 'APPROVED') {
            $data['SHIPPING_INSTRUCTIONS'] = self::getShippingInstructions();
        }

        if ($status === 'REFUND') {
            $data['REFUND_DATE'] = (new \Bitrix\Main\Type\DateTime())->format('d.m.Y');
            $data['PAYMENT_METHOD'] = self::getPaymentMethodName($order);
        }

        if ($status === 'REJECTED') {
            $data['APPEAL_INSTRUCTIONS'] = 'Вы можете связаться с нами по телефону +7 (800) 555-35-35';
        }

        return $data;
    }

    private static function getStatusName(string $statusId): string
    {
        $result = \CSaleOrderReturnStatus::GetByID($statusId);
        return $result['NAME'] ?? $statusId;
    }

    private static function getReturnUrl(int $returnId): string
    {
        return 'https://' . SITE_SERVER_NAME . '/personal/returns/' . $returnId . '/';
    }
}

מחלקה זו שולחת אימייל על כל שינוי סטטוס דרך אירוע // /local/install/register_return_events.php $returnEventTypes = [ [ 'EVENT_NAME' => 'RETURN_STATUS_REVIEW', 'NAME' => 'Возврат: принят на рассмотрение', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, ORDER_ACCOUNT_NUMBER, USER_NAME, USER_EMAIL, STATUS_NAME", 'SORT' => 100, ], [ 'EVENT_NAME' => 'RETURN_STATUS_NEED_DOCS', 'NAME' => 'Возврат: требуются документы', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, ORDER_ACCOUNT_NUMBER, USER_NAME, USER_EMAIL, STATUS_NAME, MANAGER_COMMENT", 'SORT' => 110, ], [ 'EVENT_NAME' => 'RETURN_STATUS_APPROVED', 'NAME' => 'Возврат: одобрен', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, REFUND_AMOUNT, SHIPPING_INSTRUCTIONS", 'SORT' => 120, ], [ 'EVENT_NAME' => 'RETURN_STATUS_RECEIVED', 'NAME' => 'Возврат: товар получен на склад', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, REFUND_AMOUNT", 'SORT' => 130, ], [ 'EVENT_NAME' => 'RETURN_STATUS_REFUND', 'NAME' => 'Возврат: деньги возвращены', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, REFUND_AMOUNT, REFUND_DATE, PAYMENT_METHOD", 'SORT' => 140, ], [ 'EVENT_NAME' => 'RETURN_STATUS_REJECTED', 'NAME' => 'Возврат: отклонён', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, MANAGER_COMMENT, APPEAL_INSTRUCTIONS", 'SORT' => 150, ], ]; $eventType = new \CEventType(); foreach ($returnEventTypes as $type) { $existing = \CEventType::GetList(['EVENT_NAME' => $type['EVENT_NAME']])->Fetch(); if (!$existing) { $eventType->Add(array_merge($type, ['LID' => LANGUAGE_ID])); } } . צרפו אותה ב-namespace Local\Returns; class Notifications { private const STATUS_EVENT_MAP = [ 'REVIEW' => 'RETURN_STATUS_REVIEW', 'NEED_DOCS' => 'RETURN_STATUS_NEED_DOCS', 'APPROVED' => 'RETURN_STATUS_APPROVED', 'RECEIVED' => 'RETURN_STATUS_RECEIVED', 'REFUND' => 'RETURN_STATUS_REFUND', 'REJECTED' => 'RETURN_STATUS_REJECTED', ]; public static function sendStatusChange(int $returnId, string $newStatus): void { $eventName = self::STATUS_EVENT_MAP[$newStatus] ?? null; if (!$eventName) return; $data = self::buildEventData($returnId, $newStatus); if (!$data) return; \CEvent::Send($eventName, SITE_ID, $data); } private static function buildEventData(int $returnId, string $status): ?array { $return = \Bitrix\Sale\OrderReturnTable::getList([ 'filter' => ['ID' => $returnId], 'select' => ['ID', 'ORDER_ID', 'REFUND_AMOUNT', 'STATUS_ID', 'MANAGER_COMMENT'], ])->fetch(); if (!$return) return null; $order = \Bitrix\Sale\Order::load($return['ORDER_ID']); if (!$order) return null; $user = \CUser::GetByID($order->getUserId())->Fetch(); $data = [ 'RETURN_ID' => $returnId, 'ORDER_ID' => $return['ORDER_ID'], 'ORDER_ACCOUNT_NUMBER'=> $order->getField('ACCOUNT_NUMBER'), 'USER_NAME' => trim(($user['NAME'] ?? '') . ' ' . ($user['LAST_NAME'] ?? '')), 'USER_EMAIL' => $user['EMAIL'] ?? '', 'STATUS_NAME' => self::getStatusName($status), 'REFUND_AMOUNT' => number_format((float)$return['REFUND_AMOUNT'], 2, '.', ' ') . ' руб.', 'MANAGER_COMMENT' => $return['MANAGER_COMMENT'] ?? '', 'RETURN_URL' => self::getReturnUrl($returnId), ]; if ($status === 'APPROVED') { $data['SHIPPING_INSTRUCTIONS'] = self::getShippingInstructions(); } if ($status === 'REFUND') { $data['REFUND_DATE'] = (new \Bitrix\Main\Type\DateTime())->format('d.m.Y'); $data['PAYMENT_METHOD'] = self::getPaymentMethodName($order); } if ($status === 'REJECTED') { $data['APPEAL_INSTRUCTIONS'] = 'Вы можете связаться с нами по телефону +7 (800) 555-35-35'; } return $data; } private static function getStatusName(string $statusId): string { $result = \CSaleOrderReturnStatus::GetByID($statusId); return $result['NAME'] ?? $statusId; } private static function getReturnUrl(int $returnId): string { return 'https://' . SITE_SERVER_NAME . '/personal/returns/' . $returnId . '/'; } } :

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderReturnStatusChange',
    function (\Bitrix\Main\Event $event) {
        $returnId = $event->getParameter('RETURN_ID');
        $newStatus = $event->getParameter('NEW_STATUS_ID');
        \Local\Returns\Notifications::sendStatusChange($returnId, $newStatus);
    }
);

הודעות SMS ו-Push

עבור סטטוסים קריטיים (כסף הוחזר, אושר) אנו מוסיפים SMS דרך SMSC, SMS.ru, או ספק אחר. בנוסף, אנו מגדירים הודעות push עבור החזרות בחשבון האישי של המשתמש:

קוד: שולח SMS
class SmsNotifier {
    private const SMS_STATUSES = ['APPROVED', 'REFUND', 'REJECTED'];

    public static function maybeSend(int $returnId, string $status): void {
        if (!in_array($status, self::SMS_STATUSES, true)) return;

        $phone = self::getCustomerPhone($returnId);
        if (!$phone) return;

        $text = self::buildSmsText($returnId, $status);
        $client = new \Local\Sms\SmsClient();
        $client->send($phone, $text);
    }

    private static function buildSmsText(int $returnId, string $status): string {
        return match ($status) {
            'APPROVED' => "Возврат #{$returnId} одобрен. Отправьте товар по адресу: ...",
            'REFUND' => "Возврат #{$returnId}: деньги отправлены. Поступят на карту в течение 3-5 дней.",
            'REJECTED' => "Возврат #{$returnId} отклонён. Причина в письме на вашу почту.",
            default => "Статус заявки на возврат #{$returnId} изменён.",
        };
    }
}

הודעות push נשלחות דרך מודול IM או מנגנון מותאם אישית, ומבטיחות שהלקוח רואה את העדכון מיד באתר.

תבנית אימייל HTML לדוגמה לסטטוס "אושר"

Тема: Ваша заявка на возврат #[RETURN_ID] одобрена
Уважаемый [USER_NAME],

Ваша заявка на возврат товара по заказу [ORDER_ACCOUNT_NUMBER] одобрена.
Сумма к возврату: [REFUND_AMOUNT]

Для завершения возврата, пожалуйста, отправьте товар по адресу: [SHIPPING_INSTRUCTIONS]

После получения товара на нашем складе деньги будут переведены в течение 3 рабочих дней.

Отслеживать статус заявки: [RETURN_URL]

בדיקות והרחבה

בדיקת הודעות

אנו בודקים את כל מעברי הסטטוס, שליחת האימיילים ותקינות המשתנים באמצעות הזמנות והחזרות בדיקה. לאחר בדיקות מוצלחות, אנו מפיקים דוח קבלה. אנו מוודאים 6 סטטוסים, כל אחד עם אימייל, SMS (לקריטיים), והודעות push בחשבון האישי. זמן תגובת ה-API של הספקים אינו עולה על 200 אלפיות השנייה.

הוספת סטטוס חדש

  1. הגדירו קוד ושם לסטטוס החדש (לדוגמה, OnSaleOrderReturnStatusChange).
  2. רשמו סוג אירוע דואר חדש על ידי העתקת התבנית מהסעיף הקודם.
  3. צרו תבנית אימייל HTML עם המשתנים הנדרשים.
  4. הוסיפו קבוע ב-init.php של מחלקת \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleOrderReturnStatusChange', function (\Bitrix\Main\Event $event) { $returnId = $event->getParameter('RETURN_ID'); $newStatus = $event->getParameter('NEW_STATUS_ID'); \Local\Returns\Notifications::sendStatusChange($returnId, $newStatus); } ); .
  5. אם נדרשים שדות נוספים, הרחיבו את מתודת class SmsNotifier { private const SMS_STATUSES = ['APPROVED', 'REFUND', 'REJECTED']; public static function maybeSend(int $returnId, string $status): void { if (!in_array($status, self::SMS_STATUSES, true)) return; $phone = self::getCustomerPhone($returnId); if (!$phone) return; $text = self::buildSmsText($returnId, $status); $client = new \Local\Sms\SmsClient(); $client->send($phone, $text); } private static function buildSmsText(int $returnId, string $status): string { return match ($status) { 'APPROVED' => "Возврат #{$returnId} одобрен. Отправьте товар по адресу: ...", 'REFUND' => "Возврат #{$returnId}: деньги отправлены. Поступят на карту в течение 3-5 дней.", 'REJECTED' => "Возврат #{$returnId} отклонён. Причина в письме на вашу почту.", default => "Статус заявки на возврат #{$returnId} изменён.", }; } } .
  6. בדקו את המעבר לסטטוס החדש וקבלת האימייל.

תהליך ומה כלול

שלב מה אנחנו עושים תוצאה
ניתוח לימוד תהליכי החזרה, סטטוסים תרשים סטטוסים
רישום אירועים יצירת סוגי אירועי דואר תצורת אירועים
תבניות אימייל עיצוב תבניות HTML לכל סטטוס 6+ תבניות
מטפל כתיבת מחלקת Тема: Ваша заявка на возврат #[RETURN_ID] одобрена Уважаемый [USER_NAME], Ваша заявка на возврат товара по заказу [ORDER_ACCOUNT_NUMBER] одобрена. Сумма к возврату: [REFUND_AMOUNT] Для завершения возврата, пожалуйста, отправьте товар по адресу: [SHIPPING_INSTRUCTIONS] После получения товара на нашем складе деньги будут переведены в течение 3 рабочих дней. Отслеживать статус заявки: [RETURN_URL] המקושרת ל-PARTIAL_REFUND קוד מוכן
SMS וחשבון אישי הגדרת הודעות SMS (דרך API של הספק) והודעות push בחשבון האישי אינטגרציה
בדיקות אימות כל מעברי הסטטוס, שליחת אימיילים, משתנים דוחות בדיקה
תיעוד תיעוד התרשים, הוראות להוספת סטטוסים חדשים README / Confluence

היקף העבודה

  • רישום סוגי אירועי דואר לכל סטטוס
  • תבניות אימייל HTML: נושא, גוף, רשימות משתנים
  • מטפל STATUS_EVENT_MAP → קריאה ל-Notifications
  • הודעות SMS לסטטוסים קריטיים
  • הודעות push להחזרות בחשבון האישי דרך מודול IM או מנגנון מותאם אישית
  • בדיקות: אימות כל מעברי הסטטוס ומסירת אימיילים
  • תיעוד והוראות להוספת סטטוסים חדשים

ציר זמן: מערך הודעות מלא לכל הסטטוסים — 1–2 שבועות. התמחור נקבע באופן אישי לאחר ניתוח תוכנית ההחזרות שלכם, עם פרויקטים טיפוסיים החל מ-$500 וממוצע של $1,200–$2,000 עבור הגדרות מקיפות.

הטמעת הודעות אוטומטיות מפחיתה את עומס התמיכה ב-40%, חוסכת כ-120 שעות תמיכה בחודש ו-$12,000 בשנה. קבלו ייעוץ — נעריך את הפרויקט שלכם ונציע פתרון. אנו עוסקים באינטגרציות Bitrix למעלה מ-5 שנים והשלמנו 30+ פרויקטים עם הודעות. צרו קשר.