Обновление приватного виджета — один из самых рискованных моментов в работе с amoCRM / Kommo. После обновления всегда есть риск сбросить настройки и приходится восстанавливать их вручную. Особенно неприятно, когда настроек много и они сложные. В этой статье я покажу проверенный на практике способ, который позволяет почти полностью исключить потерю данных.

Разработчик виджетов амяуCRM
Разработчик виджетов амяуCRM

Важные предупреждения:

  • Способ работает только с приватными виджетами.

  • Это обходное решение (хак). amoCRM может изменить внутренние механизмы в любой момент.

  • Всегда делайте бэкапы перед обновлением.

  • Используйте на свой страх и риск.

1. Предварительно нужно узнать код виджета:

  1. Зайдите в amoМаркет (в Kommo: Settings Integrations) → раздел «Установленные».

  2. Найдите нужную интеграцию и откройте её.

  3. Перейдите во вкладку «Ключи и доступы».

  4. Скопируйте «Код виджета».

    Как узнать код виджета в amoCRM
    Как узнать код виджета в amoCRM

2. Бэкап архива виджета (widget.zip)

Это самый важный шаг. Если после обновления что-то пойдёт не так, вы сможете быстро откатиться.

Сформируйте и откройте ссылку:

https://ВАШ_СУБДОМЕН.amocrm.ru/upl/КОД_ВИДЖЕТА/widget.zip

Скачается архив текущей версии виджета в аккаунте. Обязательно переименуйте его, например: widget_1.0.0_backup.zip.

3. Бэкап настроек виджета

  1. Откройте консоль браузера (F12 → вкладка Console).

  2. Выполните команду (замените КОД_ВИДЖЕТА):

console.log(JSON.stringify(APP.widgets.list['КОД_ВИДЖЕТА'].params));
Вывод настроек виджета в консоли
Вывод настроек виджета в консоли

Скопируйте результат и сохраните его у себя.

4. Обновление виджета

Загружайте новую версию виджета обычным способом.

5. Восстановление настроек из бэкапа

В случае возникновения проблем при обновлени сразу возвращайте прошлую версию архива, а если пропали настройки, то восстановить их можно двумя способами:

  1. Вручную занести всё в поля и сохранить. Не годится, если настроек много и они сложные.

  2. Выполнить следующий скрипт в консоли браузера, предварительно вставив в него ваш бэкап:

(function restoreWidgetSettings() {
    const BACKUP = JSON.parse('ВСТАВЬТЕ_СЮДА_ВАШ_БЭКАП');

    // Системные поля
    const systemKeys = [
        'active', 'id', 'status', 'widget_code', 'path', 'version',
        'oauth_client_uuid', 'widget_active', 'images_path', 'cdn_path',
        'cdn_images_path', 'support', 'category_code'
    ];

    // Автоматически берём все поля, кроме системных
    const settingsKeys = Object.keys(BACKUP).filter(key => !systemKeys.includes(key));

    console.log('🔄 Восстанавливаем поля:', settingsKeys);

    const body = new URLSearchParams();
    body.append('action', 'edit');
    body.append('id', String(BACKUP.id));
    body.append('code', BACKUP.widget_code);
    body.append('widget_active', 'Y');
    body.append('is_widget_state_action', '1');
    body.append('is_marketplace_request', '1');

    settingsKeys.forEach(key => {
        const value = BACKUP[key];
        if (value === undefined) return;

        body.append(
            `settings[${key}]`,
            typeof value === 'string' ? value : JSON.stringify(value)
        );
    });

    fetch('/ajax/widgets/edit', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'X-Requested-With': 'XMLHttpRequest',
        },
        body: body,
    })
    .then(response => {
        if (response.ok) {
            console.log('✅ Настройки успешно восстановлены!');
            console.log(`   Восстановлено полей: ${settingsKeys.length}`);
            console.log('   Обновите страницу (F5), чтобы увидеть изменения.');
        } else {
            console.error('❌ Ошибка при восстановлении. Статус:', response.status);
        }
    })
    .catch(error => {
        console.error('❌ Произошла ошибка при выполнении запроса:', error);
    });
})();

Полезные советы

  • Делайте бэкап перед каждым обновлением, даже небольшим.

  • Храните бэкапы версий отдельно.

  • Если виджет используется на нескольких аккаунтах — делайте бэкап для каждого.

  • После восстановления обновляйте страницу (F5).

Таким образом вы значительно снижаете риски при обновлении приватных виджетов.

Если у вас есть свои проверенные приёмы — делитесь в комментариях.