Подключение GigaChat к n8n: инструкция, код, обход проблем с токенами | AiManual
AiManual Logo Ai / Manual.
07 Янв 2026 Гайд

GigaChat в n8n: как заставить российский ИИ работать в автоматизациях без головной боли с токенами

Пошаговое руководство по интеграции GigaChat API в n8n. Реальные решения проблем авторизации, токенов и работы с российским ИИ в автоматизациях.

Зачем это вообще нужно? (И почему это сложнее, чем кажется)

Представьте: вы хотите автоматизировать обработку клиентских обращений на русском языке. ChatGPT отлично справляется, но данные утекают за границу, да и платить в долларах не всегда удобно. GigaChat - логичный выбор. Но когда пытаешься подключить его к n8n, сталкиваешься с реальностью: авторизация через Sber ID, токены живут 15 минут, а стандартные HTTP Request ноды просто не понимают, что от них хотят.

Главная проблема не в API - он довольно простой. Проблема в том, что GigaChat требует OAuth 2.0 авторизацию с токенами, которые нужно постоянно обновлять. В n8n нет встроенной ноды для GigaChat, в отличие от OpenAI.

Что сломается, если делать "как обычно"

Большинство пытается подключить GigaChat через стандартную HTTP Request ноду. Пишут endpoint, добавляют заголовки... и получают 401 ошибку. Почему? Потому что забывают про три ключевых момента:

  • Токен доступа живет всего 15 минут (да, это не опечатка)
  • Для получения токена нужен refresh token, который тоже имеет срок жизни
  • Авторизация проходит через Sber ID, а не простой API key

Если вы уже пробовали сделать интеграцию и получили ошибку "Invalid token" через 16 минут работы - вы не одиноки. Это стандартное поведение.

1 Подготовка: что нужно получить до начала работы

Прежде чем открывать n8n, зайдите в Sber Developers и создайте приложение. Это займет минут 10, но сэкономит часы позже.

Что нужно Где взять Важно
Client ID Sber Developers → ваше приложение Храните в секретах n8n
Client Secret Там же, генерируется один раз Никому не показывайте!
Redirect URI Укажите https://your-n8n.com/oauth/callback Должен быть HTTPS
💡
Если у вас локальный n8n без HTTPS, используйте ngrok или localtunnel для временного туннеля. Без HTTPS OAuth не сработает - это требование Sber ID.

2 Создаем кастомную ноду для работы с токенами

Вот где начинается реальная работа. Мы не будем использовать HTTP Request для каждого запроса - это неэффективно. Вместо этого создадим кастомную ноду, которая сама управляет токенами.

Сначала установите необходимые пакеты в папку с n8n:

cd /path/to/n8n
npm install axios
npm install jsonwebtoken

Теперь создайте файл GigaChatNode.js в папке custom nodes. Вот его основа:

const { IExecuteFunctions } = require('n8n-workflow');
const axios = require('axios');

class GigaChatNode {
    constructor() {
        this.description = {
            displayName: 'GigaChat',
            name: 'gigaChat',
            icon: 'fa:robot',
            group: ['transform'],
            version: 1,
            description: 'Работа с GigaChat API',
            defaults: {
                name: 'GigaChat',
                color: '#772244',
            },
            inputs: ['main'],
            outputs: ['main'],
            credentials: [
                {
                    name: 'gigaChatApi',
                    required: true,
                },
            ],
            properties: [
                {
                    displayName: 'Operation',
                    name: 'operation',
                    type: 'options',
                    options: [
                        {
                            name: 'Chat Completion',
                            value: 'chat',
                            description: 'Получить ответ от модели',
                        },
                        {
                            name: 'Refresh Token',
                            value: 'refresh',
                            description: 'Обновить токен доступа',
                        },
                    ],
                    default: 'chat',
                    description: 'Операция для выполнения',
                },
                // ... остальные параметры
            ],
        };
    }

    async execute(functionArgs) {
        // Основная логика здесь
    }

    async getAccessToken(credentials) {
        // Получение и обновление токена
    }
}

3 Код для работы с токенами: самая важная часть

Вот как выглядит метод getAccessToken, который решает главную проблему:

async getAccessToken(credentials) {
    const { clientId, clientSecret, refreshToken } = credentials;
    
    // Проверяем, есть ли сохраненный токен и не истек ли он
    const storedToken = await this.getStoredToken();
    if (storedToken && Date.now() < storedToken.expires_at) {
        return storedToken.access_token;
    }
    
    // Если токен истек или его нет - получаем новый
    const tokenResponse = await axios.post(
        'https://ngw.devices.sberbank.ru:9443/api/v2/oauth',
        new URLSearchParams({
            grant_type: 'refresh_token',
            refresh_token: refreshToken,
        }),
        {
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Authorization': `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString('base64')}`,
                'RqUID': this.generateRqUID(),
            },
        }
    );
    
    // Сохраняем новый токен с временем истечения
    const newToken = {
        access_token: tokenResponse.data.access_token,
        expires_at: Date.now() + (tokenResponse.data.expires_in * 1000) - 60000, // минус минута на запас
        refresh_token: tokenResponse.data.refresh_token,
    };
    
    await this.saveToken(newToken);
    return newToken.access_token;
}

// Генерация RqUID (требуется Sber API)
generateRqUID() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        const r = Math.random() * 16 | 0;
        const v = c === 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}

Обратите внимание на expires_at: Date.now() + (tokenResponse.data.expires_in * 1000) - 60000. Мы вычитаем 60 секунд из времени жизни токена. Зачем? Чтобы не получить ошибку в самый неподходящий момент, если запрос будет идти на грани истечения токена.

4 Первоначальная авторизация: как получить первый refresh token

Это самая муторная часть. Для первого запуска нужно получить refresh token через OAuth flow. Создайте отдельный workflow в n8n:

// Временный endpoint для получения кода авторизации
const express = require('express');
const app = express();

app.get('/oauth/callback', async (req, res) => {
    const { code } = req.query;
    
    // Обмениваем код на токен
    const tokenResponse = await axios.post(
        'https://ngw.devices.sberbank.ru:9443/api/v2/oauth',
        new URLSearchParams({
            grant_type: 'authorization_code',
            code: code,
            redirect_uri: 'https://your-n8n.com/oauth/callback',
        }),
        {
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Authorization': `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString('base64')}`,
                'RqUID': generateRqUID(),
            },
        }
    );
    
    // Сохраняем refresh token в базу или файл
    saveRefreshToken(tokenResponse.data.refresh_token);
    
    res.send('Авторизация успешна! Теперь можно закрыть эту вкладку.');
});

Затем откройте в браузере URL авторизации:

https://ngw.devices.sberbank.ru:9443/api/v2/oauth/authorize?response_type=code&client_id=ВАШ_CLIENT_ID&redirect_uri=https://your-n8n.com/oauth/callback&scope=GIGACHAT_API_PERS

5 Рабочий workflow: от запроса к ответу

Теперь соберем все вместе. Вот как выглядит конечный workflow:

  1. Webhook node - получаем запрос от пользователя
  2. Function node - подготавливаем промпт и параметры
  3. Custom GigaChat node - отправляем запрос к API
  4. Switch node - обрабатываем разные типы ответов
  5. Response node - возвращаем результат

В Function node добавляем:

// Подготовка запроса для GigaChat
const messages = [
  {
    role: 'user',
    content: $input.first().json.prompt,
  }
];

const payload = {
  model: 'GigaChat',
  messages: messages,
  temperature: 0.7,
  max_tokens: 1000,
};

return [{ json: payload }];

Типичные ошибки и как их избежать

Ошибка Причина Решение
"Invalid token" Токен истек (15 минут прошло) Используйте refresh token для получения нового
"RqUID is required" Отсутствует заголовок RqUID Генерируйте UUID для каждого запроса
429 Too Many Requests Превышен лимит запросов Добавьте задержку между запросами
"Scope not allowed" Неверный scope в OAuth Используйте GIGACHAT_API_PERS

Зачем все эти сложности? Альтернативы есть?

Справедливый вопрос. Можно использовать ChatGPT через прокси или другие модели. Но GigaChat дает два ключевых преимущества:

  • Данные остаются в России - критично для банков, госструктур
  • Оплата в рублях - никаких валютных рисков
  • Лучшее понимание русского - особенно сленга и контекста

Если вам нужно обрабатывать голосовые сообщения, посмотрите интеграцию GigaAM-v3 - это отдельная модель для расшифровки аудио.

Что делать, когда все работает?

После настройки базовой интеграции можно создавать сложные автоматизации. Например:

  • Автоматическая классификация обращений в поддержку
  • Генерация ответов на частые вопросы
  • Анализ тональности отзывов
  • Извлечение сущностей из документов

Для бизнес-автоматизаций посмотрите кейсы по ИИ-агентам. А если нужно работать с документами - история про экономию на документах покажет, на что способен n8n.

💡
Храните refresh token в зашифрованном виде. В n8n есть Credentials для этого. Не держите токены в открытом виде в коде или конфигах.

Почему это стоит потраченного времени?

Потому что после настройки вы получаете систему, которая:

  1. Работает с российским ИИ без VPN и обходов блокировок
  2. Сохраняет данные внутри страны (это не только про закон, но и про скорость)
  3. Позволяет создавать автоматизации, которые понимают контекст российского бизнеса
  4. Стоит дешевле западных аналогов при сравнимом качестве

Да, первоначальная настройка требует усилий. Но это инвестиция в стабильность. Когда следующий раз поменяются правила экспорта данных или курс доллара прыгнет на 10%, ваша автоматизация продолжит работать.

И последнее: не пытайтесь сделать "идеальную" интеграцию с первого раза. Сначала добейтесь рабочего прототипа, даже если он будет обновлять токен каждые 14 минут. Потом оптимизируйте. Главное - начать.