Оповіщення про збої парсера 1С-Бітрікс: налаштування за один день

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Оповіщення про збої парсера 1С-Бітрікс: налаштування за один день
Простий
~1 день
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1362
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    949
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    695
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    834
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    733
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1076

Торговий каталог наповнюється автоматично через парсер, але одного ранку ви виявляєте, що ціни не оновлювалися вже дві доби. Парсер впав у першу ж годину, а сповіщення не прийшли — стандартна поштова черга Бітрікс забита, алерти не налаштовані. Втрати виручки за два дні — сотні тисяч рублів. Знайома ситуація? Ми вирішували її на 30+ проектах.

Без системи оповіщення про помилки будь-який парсер — бомба уповільненої дії. Ми стикалися з цим десятки разів: замовник втрачає виручку, тому що парсер тихо падає, а сповіщення не приходять. Рішення — налаштувати алерти так, щоб про проблему дізнаватися в хвилину збою.

Згідно з Wikipedia, веб-скрапінг потребує моніторингу помилок для запобігання збоям.

Чому штатні сповіщення Бітрікс не вирішують проблему?

Стандартні поштові події Бітрікс (CEvent::Send) часто не підходять: лист може йти кілька хвилин через чергу b_event, а при масових помилках поштова скринька забивається. Немає дедуплікації, немає маршрутизації за терміновістю. Потрібна кастомна обгортка.

Типи помилок, які потрібно ловити

Перш ніж налаштовувати сповіщення, класифікуємо помилки:

  • Мережеві — таймаут з'єднання, HTTP 403/429/503, скидання з'єднання. Джерело недоступне або блокує. У 30% випадків проблема тимчасова, але 5+ підряд — системна.
  • Парсинг DOM — змінилася верстка джерела: CSS-селектори або XPath повертають пустоту. Найчастіший тип (60% інцидентів).
  • Валідація даних — ціна = 0, назва пуста, артикул не за форматом. Парсер отримав сміття.
  • Імпорт в каталог — помилка CIBlockElement::Add(), перевищення пам'яті, нестача властивостей.

Кожен тип потребує своєї терміновості. Мережева — затримка 5 хвилин і повтор, поломка селекторів — втручання розробника.

Архітектура сповіщень

Створюємо поштову подію PARSER_ERROR_NOTIFY з макросами #ERROR_TYPE#, #SOURCE_URL#, #ERROR_MESSAGE#, #TIMESTAMP#. Шаблон реєструємо в адмінці. Відправка з коду парсера:

CEvent::SendImmediate('PARSER_ERROR_NOTIFY', SITE_ID, [
    'ERROR_TYPE' => 'DOM_CHANGED',
    'SOURCE_URL' => $url,
    'ERROR_MESSAGE' => 'Селектор .price-block повернув пустий результат',
    'TIMESTAMP' => date('Y-m-d H:i:s'),
]);

SendImmediate надсилає лист одразу, минаючи чергу. Додаємо дедуплікацію: перед відправкою перевіряємо в Redis, чи не було надіслано таке ж сповіщення за останні N хвилин. Для мережевих — 30-60 хвилин подавлення, для валідаційних — без подавлення.

Як дедуплікувати сповіщення?

Дедуплікація сповіщень — ключовий елемент, щоб не заспамити канали. Ми використовуємо Redis: ключ — хеш від ERROR_TYPE + SOURCE_URL, значення — часова мітка. Якщо такий хеш існує і не минув, сповіщення не надсилається. Для мережевих помилок TTL 30 хвилин, для помилок парсингу DOM — без подавлення. Альтернатива — таблиця b_option, але Redis швидше.

Канали крім пошти

Email — повільний канал (доставка 2-5 хвилин). Telegram доставляє сповіщення в 10 разів швидше за email, що робить його набагато кращим для критичних збоїв. Для критичних помилок підключаємо Telegram Bot API або Бітрікс24 вебхуки. Налаштовуємо таблицю маршрутизації за терміновістю:

Тип помилки Email Telegram Бітрікс24 чат
Мережева одинична
Мережева (>5 підряд) + +
Зміна DOM + + +
Невалідні дані (>10%) + +
Помилка імпорту + + +

Telegram у 10 разів швидший за email для доставки — порівняння не на користь стандартної пошти.

Канал Типова затримка Недоліки
Email (CEvent::Send) 2-5 хв Залежить від черги
Telegram Bot API 1-2 сек Потребує бота
Бітрікс24 вебхук 0.5-1 сек Тільки для on-premise

Логування як основа сповіщень

Сповіщення — надбудова над логами. Кожну помилку пишемо в b_event_log через CEventLog::Add() з AUDIT_TYPE_ID='PARSER_ERROR'. Це дає історію в журналі, фільтрацію та ротацію. Агент раз на годину рахує помилки та надсилає дайджест, якщо поріг перевищено. Ми також забезпечуємо логування помилок парсингу для аналізу.

Приклад емуляції збою для перевірки

Для перевірки алертів ми імітуємо помилку: надсилаємо POST-запит з свідомо невірними даними в парсер. Наприклад, вказуємо неіснуючий URL або підсовуємо HTML без потрібних селекторів. Система надсилає сповіщення. Якщо воно приходить протягом 5 секунд — все працює.

Що входить в роботу

Ми пропонуємо рішення під ключ:

  • Аналіз поточного парсера та типів помилок
  • Налаштування поштової події PARSER_ERROR_NOTIFY
  • Розробка класу ParserNotifier з дедуплікацією
  • Інтеграція Telegram Bot API та/або Бітрікс24 вебхуків
  • Налаштування логування помилок в b_event_log
  • Тестування системи емуляцією збою
  • Документація та інструкція з експлуатації
  • Підтримка протягом 30 днів після налаштування

Як налаштувати алерти за 1 день?

Процес займає один робочий день:

  1. Створюємо поштову подію PARSER_ERROR_NOTIFY і шаблон.
  2. Пишемо клас ParserNotifier::send() з дедуплікацією та вибором каналу.
  3. Інтегруємо Telegram Bot API або Бітрікс24 вебхук.
  4. Налаштовуємо запис помилок до b_event_log.
  5. Емулюємо збій і перевіряємо доставку.

Після налаштування ви отримуєте готову систему оповіщення про помилки з інструкцією. Замовте налаштування — ми проаналізуємо ваш парсер і налаштуємо алерти за 1 день. Оцінимо проект безкоштовно — пишіть нам.

З чого почати розробку парсера для 1С-Бітрікс?

XMLReader, а не SimpleXML — вибір інструмента визначає долю проекту. SimpleXML завантажує весь XML у пам’ять, і при файлі постачальника на 800 МБ PHP впаде з fatal error на ліміті 512 МБ. XMLReader обробляє потоково, node за node, споживаючи 20–30 МБ — в 30 разів ефективніше. З цієї деталі стартує будь-яка розробка парсерів під Бітрікс. Ми робимо такі системи вже понад 10 років, реалізували 50+ проектів, і жоден не обходиться без правильного вибору парсера.

Проблеми, які вирішує парсинг

  • Первинне наповнення каталогу — 15 000 карток з описами, характеристиками, фото. Вручну це три місяці контент-менеджера; парсер — тиждень з налагодженням. Економія часу — до 90%.
  • Моніторинг цін конкурентів — збір даних з Ozon, Wildberries, сайтів конкурентів. Конкурент знизив ціну на ходову позицію — дізнаєтеся через дві години, а не через два тижні. Окупається за 2–3 місяці.
  • Агрегація постачальників — п’ять прайсів у різних форматах (CSV з CP1251, XML у CommerceML, Excel з об’єднаними комірками) перетворюються на єдиний каталог із загальною системою властивостей інфоблоку.
  • Збагачення карток — підтягуємо характеристики, інструкції, 3D-моделі з сайтів виробників. Без цього картка товару — пустушка для SEO.
  • Оновлення асортименту — товари, які зникли з фіду постачальника, деактивуються через CIBlockElement::Update($ID, ['ACTIVE' => 'N']). Нові — створюються. Каталог синхронізовано.

Інструменти для розробки парсерів

Статичні сайти — PHP (Goutte, Symfony DomCrawler) або Python (Scrapy, lxml). Швидкість: 50–100 сторінок/сек. Вистачає для каталогів без JS-рендерингу.

SPA та динамічні сайти — Puppeteer або Playwright. Нескінченний скрол, AJAX-фільтри, lazy-load картинок — headless-браузер все це обробить. Швидкість падає до 1–10 сторінок/сек, але альтернативи немає: дані існують лише після виконання JavaScript.

Файли постачальників:

  • Excel (XLS, XLSX) — PhpSpreadsheet. Обережно з об’єднаними комірками та формулами — вони ламають автоматичний мапінг.
  • CSV — fgetcsv() з правильною кодуванням. Постачальники люблять CP1251, BOM у UTF-8 та крапку з комою замість коми. Все це потрібно детектувати та обробляти.
  • XML/YML — XMLReader для великих файлів, SimpleXML для фідів до 50 МБ.
  • CommerceML — стандартний формат обміну з 1С. Розбираємо import.xml та offers.xml, мапимо на структуру інфоблоків.

API — REST-ендпоінти постачальників, API маркетплейсів (Ozon Seller API, Wildberries API). Працюємо в рамках rate limits, обробляємо пагінацію.

Як влаштований пайплайн автонаповнення?

Чотири етапи. Кожен може зламатися по-своєму.

  1. Збір. Парсер обходить джерела по cron-розкладу. Сирі дані пишемо в проміжну таблицю — не одразу в b_iblock_element. Логуємо все: скільки сторінок обійшли, скільки елементів розпарсили, де отримали 403 або timeout. Без логів налагодження парсера — ворожіння на кавовій гущі.

  2. Нормалізація. Тут основна робота:

    • Очищення HTML-тегів, зайвих пробілів, Unicode-сміття
    • Одиниці виміру: «мм» → «мм», «millimeters» → «мм», «миллиметр» → «мм»
    • Мапінг категорій постачальника → розділи інфоблоку Бітрікс. В одного постачальника «Ноутбуки», в іншого «Ноутбуки та планшети», у третього «Laptops» — все в одну секцію
    • Дедуплікація за артикулом, EAN/GTIN. Один товар від трьох постачальників не повинен з’явитися тричі
  3. Завантаження в Бітрікс. Через CIBlockElement::Add() для нових елементів, CIBlockElement::Update() для існуючих. Зображення: завантажуємо, ресайзимо через CFile::ResizeImageGet(), конвертуємо в WebP. Властивості — через CIBlockElement::SetPropertyValuesEx(). SEO-мета через \Bitrix\Iblock\InheritedProperty\ElementValues. ЧПУ генеруємо з транслітерації назви.

  4. Оновлення. Ключовий момент — не затерти ручні правки контент-менеджера. Оновлюємо лише ціну, залишки, активність. Опис та фото, доопрацьовані вручну, позначаємо прапорцем UF_MANUAL_EDIT у властивостях елемента і пропускаємо при імпорті. Товари, що зникли з фіду — деактивуємо, але не видаляємо.

Моніторинг цін конкурентів: необхідність та реалізація

Окрема підсистема зі своєю специфікою:

Параметр Як влаштовано
Частота Від разу на день до кожних 2 годин — залежить від волатильності ринку
Зіставлення За артикулом, EAN, нечітке порівняння назв через відстань Левенштейна
Зберігання Своя таблиця vendor_price_monitor з історією, не інфоблоки
Алерти Telegram/email при відхиленні ціни конкурента більш ніж на X%
Автоправила «Тримати ціну на 3% нижче мінімальної серед конкурентів, але не нижче собівартості + 15%»

Результат — дашборд: ваш товар vs конкуренти, історія цін, тренди. Менеджер бачить, де можна підняти ціну без втрати позиції, а де потрібно реагувати.

Модуль імпорту CSV/XML: налаштування під ваш формат

Для файлів від постачальників — кастомний модуль з адмінкою:

  • Налаштовуваний мапінг: «колонка B у файлі → властивість BRAND інфоблоку»
  • Автодетект кодування (CP1251, UTF-8, UTF-16) через mb_detect_encoding() з перевіркою
  • Завантаження зображень за URL з чергою агентів Bitrix — щоб не забити канал
  • Інкрементальне оновлення за хешем рядка: змінився рядок — оновлюємо, ні — пропускаємо
  • Cron-розклад, звіт: створено 145, оновлено 892, помилок 3 (з деталями)

Великі файли: CSV обробляємо батчами по 1000 рядків через fgetcsv(), XML потоково через XMLReader, фонове виконання через чергу агентів Бітрікс — ніяких PHP-таймаутів.

Правова сторона — що важливо врахувати

  • robots.txt — поважаємо. Crawl-delay — дотримуємося.
  • Частота запитів — 1–2 в секунду, не більше. Не потрібно DDoS-ити чужий сайт.
  • Контент виробників — використовуємо. Унікальні авторські тексти — не копіюємо.
  • Персональні дані — не збираємо.

Що входить в розробку парсера під ключ?

Складова Опис
Прототип Парсер 1–2 джерел за 2–3 дні для оцінки якості даних
Основний парсер Повний збір даних з одного джерела (статичний/динамічний)
Модуль імпорту в Бітрікс Нормалізація, завантаження, оновлення, адмінка мапінгу
Моніторинг цін Якщо потрібно – система збору та алертів (до 10 конкурентів)
Документація Опис архітектури, інструкція з оновлення селекторів
Підтримка Гарантія 3 місяці на безперебійну роботу, правка при зміні верстки донора

Скільки часу займає розробка парсера?

Процес і терміни:

  1. Прототип — парсер для 1–2 джерел за 2–3 дні. Оцінюємо якість даних, підводні камені (захист Cloudflare, капча, динамічне підвантаження).
  2. Розробка — повний пайплайн: парсер → нормалізація → імпорт в Бітрікс → адмінка для управління.
  3. Тестування — проганяємо на повному обсязі каталогу, перевіряємо edge-кейси (порожні поля, кривий HTML, биті картинки).
  4. Запуск — налаштовуємо cron, моніторинг помилок через Telegram-бот.
  5. Підтримка — конкурент переробив верстку? Оновлюємо CSS-селектори в парсері.
Орієнтовні терміни для різних типів завдань
Задача Терміни
Парсер одного сайту (статичний HTML) 3–5 днів
Парсер SPA-сайту (Puppeteer/Playwright, обхід захисту) 1–2 тижні
Модуль імпорту CSV/XML в Бітрікс 1–2 тижні
Система моніторингу цін (5–10 конкурентів) 2–4 тижні
Комплексна система автонаповнення 4–8 тижнів
Підтримка та адаптація парсерів за підпискою

Отримайте консультацію: розкажіть про своє джерело даних — ми підберемо оптимальний підхід. Зв’яжіться для оцінки вашого проекту — запропонуємо рішення під ваш бюджет. Гарантуємо стабільну роботу парсерів і повну підтримку.