Содержание
- Почему OpenRouter удобен в no-code
- Подключение к n8n OpenRouter
- Через узел OpenAI со сменой базового адреса
- Через узел HTTP Request
- Смена модели по шагам флоу
- Контентный сценарий на n8n с OpenRouter
- Один ключ на текст, картинки и транскрипцию
- Открытые альтернативы для self-hosted
- Что дальше в серии
- Референсные ссылки
Разберёмся, как подключить OpenRouter в n8n и собрать рабочий сценарий без единой строки кода. n8n это open-source платформа автоматизации, где логика собирается из узлов на визуальном холсте. OpenRouter отдаёт всё через OpenAI-совместимый API, поэтому подключается он в пару полей. В статье соберём контентный флоу, покажем, как через один ключ идут текст, картинки и транскрипция, и честно сравним n8n с открытыми альтернативами. Все вызовы проверены на реальном стенде.
Почему OpenRouter удобен в no-code
В low-code сценариях смена провайдера модели обычно боль: свой узел, свои креды, свой формат. OpenRouter снимает это. Один ключ, один базовый адрес, десятки моделей, и всё в привычном формате OpenAI. Значит, любой узел, который умеет говорить с OpenAI, работает с OpenRouter после смены базового адреса.
Выгода видна на практике. Хотите попробовать другую модель, меняете одну строку, а не переписываете сценарий. Нужна модель дешевле или новее, она уже доступна по тому же ключу. Для команды это ещё и единый счёт вместо десятка договоров с провайдерами.
Если вы ещё не выпустили ключ, начните со статьи про старт с OpenRouter. Управление провайдерами разобрано в статье про маршрутизацию, а экономия в статье про токены. Общий разбор самой платформы автоматизации есть в вики-статье про n8n.
Дальше соберём этот флоу по шагам и проверим каждый вызов.
Подключение к n8n OpenRouter
Подключить OpenRouter можно двумя путями. Первый через готовый узел с базовым адресом OpenAI, второй через универсальный HTTP Request. Первый быстрее, второй гибче и подходит под любой эндпоинт.
Через узел OpenAI со сменой базового адреса
У n8n есть узел OpenRouter Chat Model для сборки агентов и есть узел OpenAI. В узле OpenAI при создании credential укажите базовый адрес https://openrouter.ai/api/v1 и вставьте ключ OpenRouter. После этого выбираете любую модель OpenRouter в поле модели, остальной узел не меняется. Это самый быстрый путь для чата и агентных сценариев.
По старой традиции весь код используемый в статье 4 выкладываем на наш GitHub репозиторий
Через узел HTTP Request
Универсальный путь это узел HTTP Request. Он бьёт напрямую в эндпоинт и умеет всё, что умеет API. Метод POST, адрес https://openrouter.ai/api/v1/chat/completions, заголовок авторизации и JSON-тело. Ключ лучше положить в Header Auth credential, а не хардкодить.
# тело запроса узла HTTP Request (JSON body)
{
"model": "openai/gpt-4o-mini",
"messages": [
{ "role": "user", "content": "Напиши короткий пост в блог про: {{ $json.topic }}" }
]
}
Готовый флоу лежит в файле openrouter_n8n_content_flow.json в репозитории кода статьи 4, его можно импортировать в один клик через Import from File.
Ответ модели приходит в поле choices, и его обычно достают следующим узлом. В узле Set добавляете поле с выражением, которое берёт текст из ответа. В n8n это выглядит как обращение к пути внутри JSON предыдущего узла. Дальше готовый текст уходит туда, куда нужно: в базу, в письмо, в мессенджер.
Про безопасность стоит сказать отдельно. Ключ в n8n лучше хранить как credential Header Auth, а не вписывать в узел. Тогда он не попадает в экспортируемый JSON и переиспользуется во всех узлах флоу. При импорте чужого воркфлоу вы просто подставляете свой credential, и ключ остаётся при вас.
Смена модели по шагам флоу
Одно из главных удобств: разные шаги флоу могут звать разные модели. Черновик генерит дешёвая модель, финальную вычитку делает сильная. Менять модель просто, вы правите одно поле model в теле запроса нужного узла. Идентификатор берёте из каталога моделей OpenRouter, например openai/gpt-4o-mini для черновика и посильнее для финала. Ключ и адрес при этом не трогаете.
Это тот же каскад, что мы считали в статье про экономику, только собранный мышью. Дешёвая модель делает черновую массу работы, дорогая подключается точечно. На потоке задач такой расклад заметно экономит, а перенастройка занимает секунды.
ИИ-агенты для оптимизации бизнес-процессов
Код курса
AGENT
Ближайшая дата курса
26 октября, 2026
Продолжительность
24 ак.часов
Стоимость обучения
66 000
Контентный сценарий на n8n с OpenRouter
Соберём простой контентный флоу из трёх узлов. Триггер запускает сценарий, узел Тема задаёт тему поста, узел HTTP Request зовёт OpenRouter и возвращает готовый текст. Тема прокидывается в тело запроса через выражение n8n, поэтому один и тот же флоу генерит посты на любую тему.
Тот же скелет расширяется под RAG или рассылку: перед узлом OpenRouter добавляете поиск по базе знаний, после него отправку в почту или мессенджер. Логика собирается мышью, а модель остаётся сменной одним полем. Связка с агентными сценариями подробно разбирается в курсе про ИИ-агентов для оптимизации бизнес-процессов.
Flow удобно ставить на расписание и защищать от сбоев. Вместо ручного запуска подключаете триггер по времени, и посты выходят сами. У каждого узла есть повтор при ошибке, поэтому разовый сбой провайдера не роняет весь сценарий. Здесь же пригодится fallback по моделям из статьи про маршрутизацию.
Один ключ на текст, картинки и транскрипцию
Ещё одно удобство для low-code: тем же ключом идут не только тексты. Через один базовый адрес доступны генерация картинок и транскрипция аудио. Не нужно поднимать отдельный Whisper-сервер или плодить креды под каждую модальность. Проверим это на стенде одним ключом: текст, картинку и транскрипцию. Речь синтезируем тут же, чтобы получить аудио для распознавания.
# протестировано на EU-ноде (AWS Stockholm) 2026-08-04: Python 3.12.3, httpx 0.28.1, OpenRouter API
import os, base64, json, wave
import httpx
key = os.environ["OPENROUTER_API_KEY"]
H = {"Authorization": f"Bearer {key}"}
BASE = "https://openrouter.ai/api/v1"
# 1. Текст: chat к openai/gpt-4o-mini
chat = httpx.post(f"{BASE}/chat/completions", headers=H, timeout=60, json={
"model": "openai/gpt-4o-mini",
"messages": [{"role": "user", "content": "Ответь одним словом: готово"}],
"max_tokens": 5,
}).json()
print("текст:", chat["choices"][0]["message"]["content"].strip())
# 2. Картинка: chat к google/gemini-2.5-flash-image с modalities ["image","text"] сохраняем PNG
img = httpx.post(f"{BASE}/chat/completions", headers=H, timeout=120, json={
"model": "google/gemini-2.5-flash-image",
"messages": [{"role": "user", "content": "Нарисуй простой логотип: синий круг на белом фоне"}],
"modalities": ["image", "text"],
}).json()
url = img["choices"][0]["message"]["images"][0]["image_url"]["url"]
png = base64.b64decode(url.split(",", 1)[1])
open("logo.png", "wb").write(png)
print("картинка: logo.png,", len(png), "байт")
# 3. Синтез речи: стрим аудио от openai/gpt-audio, собираем WAV
pcm = bytearray()
with httpx.stream("POST", f"{BASE}/chat/completions", headers=H, timeout=180, json={
"model": "openai/gpt-audio",
"modalities": ["text", "audio"],
"audio": {"voice": "alloy", "format": "pcm16"},
"stream": True,
"messages": [{"role": "user", "content": "Скажи ровно фразу: Проверка транскрипции через ОупенРоутер"}],
}) as r:
for line in r.iter_lines():
if not line.startswith("data: "):
continue
chunk = line[6:]
if chunk.strip() == "[DONE]":
break
au = json.loads(chunk)["choices"][0]["delta"].get("audio")
if au and au.get("data"):
pcm += base64.b64decode(au["data"])
with wave.open("speech.wav", "wb") as w:
w.setnchannels(1); w.setsampwidth(2); w.setframerate(24000); w.writeframes(bytes(pcm))
print("речь: speech.wav,", len(pcm), "байт PCM16")
# 4. Транскрипция того же аудио: POST /audio/transcriptions с моделью openai/gpt-4o-transcribe
tr = httpx.post(f"{BASE}/audio/transcriptions", headers=H, timeout=120,
files={"file": ("speech.wav", open("speech.wav", "rb"), "audio/wav")},
data={"model": "openai/gpt-4o-transcribe"}).json()
print("транскрипция:", tr["text"])
Все четыре ответа пришли через один ключ и один базовый адрес. Картинка вернулась прямо в ответе чата как изображение, а транскрипция распознала ровно ту фразу, что мы синтезировали. В n8n это те же вызовы, только собранные узлами. Полный сценарий в файле multimodal_onekey.py.
В флоу это ложится естественно. Для картинки тот же узел HTTP Request с моделью-генератором, ответ приходит бинарным изображением. Для транскрипции узел шлёт аудиофайл на эндпоинт распознавания. Ключ и базовый адрес общие, меняется только тело запроса. Так один сценарий обрабатывает текст, картинки и звук без зоопарка сервисов.
Открытые альтернативы для self-hosted
n8n не единственный вариант, и для команды с требованием держать всё у себя полезно знать соседей. Все перечисленные платформы open-source, разворачиваются на своём сервере и цепляют OpenRouter как OpenAI-совместимый эндпоинт. Это аргумент для импортозамещения: промпты и данные не покидают вашу инфраструктуру.
| Платформа | Профиль | Агенты | С OpenRouter |
|---|---|---|---|
| n8n | Автоматизация плюс ИИ, много интеграций | Встроенный Agent builder | Узел OpenRouter или HTTP Request |
| Flowise | Визуальный билдер агентов и RAG | AgentFlow | OpenAI-совместимый эндпоинт |
| Dify | LLM-ops платформа с воркфлоу | Агентные воркфлоу | Провайдер OpenRouter |
| Langflow | Визуальные графы на LangChain | Есть, плюс режимы MCP | OpenAI-совместимый узел |
| Activepieces | Автоматизации в духе n8n | Лидер по MCP-серверам | HTTP или коннектор |
Выбирают по задаче. n8n берут, когда нужна автоматизация с кучей интеграций и ИИ заодно. Flowise и Langflow ближе для прототипов агентов и RAG. Dify удобен как LLM-ops платформа под команду. Activepieces выделяется числом MCP-серверов. Общее у них одно: OpenRouter подключается почти так же, как в n8n.
Важная оговорка про сеть. Если развернуть любую из них на российском сервере, запросы к openrouter.ai могут упереться в блок Cloudflare на 403. n8n cloud за рубежом обходит это сам, а для self-hosted в России нужен прокси или зарубежный egress. Подробный разбор обхода гео вынесен в отдельную статью серии.
ИИ-агенты для оптимизации бизнес-процессов
Код курса
AGENT
Ближайшая дата курса
26 октября, 2026
Продолжительность
24 ак.часов
Стоимость обучения
66 000
Что дальше в серии
Итог такой. OpenRouter подключается в n8n сменой базового адреса или через узел HTTP Request. Модель меняется одним полем на любом шаге флоу, а один ключ покрывает текст, картинки и транскрипцию. Для self-hosted есть живые открытые альтернативы под импортозамещение. В следующей статье серии перейдём к tool calling, строгому JSON и агентам, чтобы модель не только отвечала, но и вызывала ваши функции надёжно.







