Знакът на КАГАМИ КАГАМИ
kagami.bg/academy · lesson · machine-readable viewVERIFIED 2026-10-01 · UPDATED 2026-10-01
IDENTITY
module
OpenClaw-04 · Connecting Open WebUI and n8n to OpenClaw
series
OpenClaw · lesson 4
level
Intermediate
duration
1–2 h
prerequisites
A running OpenClaw Gateway (Node.js 24.16+ or 26.1+); Open WebUI; n8n 2.x; a secret vault
trust_label
VERIFIED 2026-10-01 against official docs · UPDATED 2026-10-01 · NOT end-to-end tested (no TESTED label)
versions
OpenClaw 2026.9.x · Open WebUI 0.11.3 (2026-08-31) · n8n 2.x
previous / next
Обучение 3.4 · Отстраняване на чести проблеми с OpenClaw.html / Обучение 5 · Производителност и ресурси на локални модели.html
PURPOSE

Show the real integration points between three separate products and wire them safely: Open WebUI as chat front end (OpenAI-compatible connection to the OpenClaw Gateway), n8n as workflow engine (HTTP Request to OpenClaw hooks or chat completions; Webhook node as receiver), OpenClaw as the acting agent. Replaces earlier unverified endpoints.

KEY CONCEPTS
COMMANDS / PATHS
CHECKLIST
NEXT MODULE

OpenClaw 05 · Performance and resources of local models · offer: Quick experiment (kagami.bg/stalbata/)

SOURCES
TAGS
openclawopen-webuin8nwebhooksopenai-compatible-apiintegrationsecurity
ПРОВЕРЕНО · 01.10.2026 ОБНОВЕНО · 01.10.2026

Open WebUI и n8n с OpenClaw: как да ги свържеш

Три програми, три различни роли: Open WebUI е чат прозорецът, n8n е машината за работни процеси, OpenClaw е асистентът, който действа. Тук виждаш кой с кого и по кой вход може да говори — по официалните документации, не по предположения.

⏱ 1–2 ч Средно OpenClaw · Обучение 4 Open WebUI · n8n · OpenClaw
Open WebUI🔒 локално n8n🔒 локално OpenClaw с локален модел🔒 локално OpenClaw с облачен модел (по избор)🌐 глобален
🔄
ОБНОВЕНО · 01.10.2026 — какво
Входовете на OpenClaw бяха измислени. Старата версия викаше адрес /api/messages и команда openclaw message send --to. В документацията на OpenClaw такъв адрес няма, а командата приема --target. Истинските входове са три: OpenAI-съвместим адрес /v1/chat/completions, входящи куки (webhooks) /hooks/agent и /hooks/wake, и командата openclaw message send. Всички са изключени по подразбиране.

Open WebUI → OpenClaw вече има официален наръчник: добавя се като връзка към /v1, не чрез „функции“. В n8n няма „Nextcloud Trigger“ — Nextcloud възелът има само действия. Примерът с JSON за импорт е махнат: той съдържаше ключ за достъп и не беше пускан. Добавени са още: ключове в сейф, не в кода; 200 от кука не значи „готово“; защо връзката към /v1 е пълен достъп.
⚠️
Какво не сме пускали сами
Проверката е по официалните документации на Open WebUI, OpenClaw и n8n към 01.10.2026. Връзките не са тествани от край до край на жива връзка между трите — затова няма етикет „ТЕСТВАНО“. Особено непроверени са: заявка към /v1/chat/completions от n8n (по формата на OpenAI), доставката през кука от OpenClaw към n8n и поведението на възела „Execute Command“ в n8n 2.x. Маркирани са с ⚠️.

01Какво ще научиш

02Преди да започнеш

⛔
Адресът /v1 е пълен достъп до агента
Документацията на OpenClaw казва изрично: ключът за този адрес е равен на ключ на оператор, не на ограничен потребител. Всичко, което агентът е оставен да прави (команди, файлове, съобщения), може да се стартира през него. Дръж го само на локален или частен адрес, никога в интернет. Ключът за куките е отделен и по-тесен — използвай него, когато можеш.

03Стъпки

  1. Кой с кого говори

    Първо картата. Защо? Защото най-честата грешка е да търсиш „един адрес на OpenClaw“ — а те са няколко и всеки върши друго.

    ПосокаВходКлючВръща отговор?
    Човек в Open WebUI → OpenClawOpenAI-съвместим /v1 (модел openclaw/default)ключ на Gatewayда, като чат
    n8n → OpenClaw (пусни задача)кука /hooks/agent (или /hooks/wake)отделен ключ за кукитене — само „приета“; отговорът отива в канал
    n8n → OpenClaw (вземи отговор)/v1/chat/completionsключ на Gatewayда, в отговора на заявката
    OpenClaw → n8nавтоматизация с --webhook към Webhook възелключ за доставка към куката на n8nn8n получава резултата
    Open WebUI → n8nИнструмент на Open WebUI, който вика Webhook на n8nтвой (от сейфа)да, през Инструмента

    Трите програми се допълват, не се заместват: Open WebUI за разговор, n8n за повтарящи се процеси, OpenClaw за действия с инструменти.

  2. Включи OpenAI-съвместимия адрес на OpenClaw

    По подразбиране е изключен. Добави в конфигурацията (слива се със съществуващата), валидирай и рестартирай Gateway. Защо отделно включване? Защото е пълен достъп (виж предупреждението горе) — OpenClaw не го отваря без твое решение.

    json5 · конфигурация на OpenClaw
    {
      gateway: {
        http: {
          endpoints: {
            chatCompletions: { enabled: true },
          },
        },
      },
    }
    bash
    openclaw config validate
    openclaw gateway restart

    Gateway иска ключ. В режим token той се задава в gateway.auth.token или в променливата OPENCLAW_GATEWAY_TOKEN; държи го в сейфа. Провери, че адресът отговаря:

    bash
    curl -s http://<ХОСТ>:<ПОРТ_НА_GATEWAY>/v1/models \
      -H "Authorization: Bearer <GATEWAY_КЛЮЧ>"

    В списъка трябва да видиш openclaw, openclaw/default и openclaw/<име-на-агент>. Това са агенти, не модели на доставчик — полето „model“ в заявката избира към кой агент да отиде.

  3. Свържи Open WebUI с OpenClaw

    Open WebUI говори с всеки сървър, който следва OpenAI Chat Completions протокола — това е основната му идея, затова не са нужни добавки. В документацията на Open WebUI има отделен наръчник „Connect an Agent → OpenClaw“. Стъпките:

    1. Отвори Settings → Admin → Connections и в „Manage OpenAI API Connections“ натисни ➕ Add Connection.
    2. URL: http://<ХОСТ>:<ПОРТ_НА_GATEWAY>/v1. Ако Open WebUI е в Docker — хост host.docker.internal.
    3. API ключ: ключът на Gateway (от сейфа).
    4. Провери връзката и запази. В падащия списък с модели трябва да се появи openclaw/default.

    Без /v1 в края откриването на модели не работи. Ако проверката минава, а моделите не се зареждат — виж точния адрес; ако „connection refused“ — проверка на порта и на openclaw gateway status.

    💡
    Без памет между заявките — освен ако…
    Адресът е без състояние по подразбиране: всяка заявка е нова сесия. Ако заявката носи поле user, Gateway извежда стабилна сесия от него и разговорът се пази. За чат в Open WebUI това е удобно; за n8n — решавай съзнателно.
    ⚠️
    Кой още стига до агента
    Щом връзката е в Admin → Connections, всеки потребител на Open WebUI, който вижда този модел, говори с агента с неговите инструменти. Това е нашето четене на документацията, не цитат от нея: ограничи кой вижда модела и дай на агента само инструментите, които му трябват.
    🧩
    Open WebUI може и направо към Ollama — без агент
    Ако искаш само да си говориш с локален модел (без инструментите на OpenClaw), свържи Open WebUI директно с Ollama: в Settings → Admin → Connections → Manage Ollama API Connections адресът е http://host.docker.internal:11434, когато Open WebUI е в Docker, а Ollama — на хоста (или при стартиране — променливата OLLAMA_BASE_URL). Docker примерът от документацията: docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data -e WEBUI_SECRET_KEY=<ТАЙНА> --name open-webui ghcr.io/open-webui/open-webui:main — после Open WebUI е на http://localhost:3000. Двете връзки (Ollama и OpenClaw) могат да стоят една до друга: моделите на Ollama за бърз разговор, openclaw/default — когато трябва агентът да действа.

    Има и втори, общностен начин — приставка „Channels“, която прави бота участник в канали на Open WebUI. Тя не се поддържа нито от Open WebUI, нито от OpenClaw и тук не я разглеждаме.

  4. От n8n към OpenClaw: куката /hooks/agent

    Искаш един работен процес в n8n да „събуди“ агента със задача. Защо кука, а не /v1? Защото има собствен, по-тесен ключ и собствен списък с разрешени агенти. Включи я (и я дръж изключена, докато не ти трябва):

    json5 · конфигурация на OpenClaw
    {
      hooks: {
        enabled: true,
        token: "<ДЪЛГ-СЛУЧАЕН-НИЗ-САМО-ЗА-КУКИТЕ>",
        path: "/hooks",
        allowedAgentIds: ["main"],
        allowRequestSessionKey: false,
      },
    }

    Ключът на куките е различен от ключа на Gateway. Рестартирай, после пробвай от терминала:

    bash
    curl --include http://<ХОСТ>:<ПОРТ_НА_GATEWAY>/hooks/agent \
      -H "Authorization: Bearer <КЛЮЧ_ЗА_КУКИ>" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: test-001" \
      --data '{"message":"Обобщи в едно изречение: примерният внос приключи.","name":"Проба","agentId":"main","deliver":false}'

    Очакваш HTTP 200 и {"ok":true,"runId":"…"}. Това значи само, че задачата е приета — не че моделът е приключил или че нещо е изпратено. Отговорът на модела не се връща в тази заявка; с "waitForCompletion": true получаваш само състоянието на изпълнението. Разгледай резултата в дневника: openclaw logs --follow.

    В n8n използвай възела HTTP Request:

    • Метод POST, URL http://host.docker.internal:<ПОРТ_НА_GATEWAY>/hooks/agent (n8n е в контейнер, OpenClaw — на хоста).
    • Удостоверяване: Generic Credential Type → Header Auth, име Authorization, стойност Bearer <КЛЮЧ_ЗА_КУКИ>. Ключът живее в удостоверенията на n8n, не в полето на възела.
    • Тяло — JSON (виж стъпка 6). Куките приемат само POST; ключ в адреса (?token=…) се отхвърля.

    Код при грешка: 401 — грешен ключ (не този на Gateway); 404 — куките не са включени или пътят е различен; 429 — твърде много грешни опита.

  5. От n8n към OpenClaw — когато ти трябва отговорът

    Ако следващият възел в n8n трябва да ползва отговора на агента, куката не върши работа. Извикай OpenAI-съвместимия адрес с HTTP Request: POST …/v1/chat/completions, ключ на Gateway, тяло във формата на OpenAI (model: "openclaw/default", messages: […]). Пробвай първо от терминала:

    bash
    curl -s http://<ХОСТ>:<ПОРТ_НА_GATEWAY>/v1/chat/completions \
      -H "Authorization: Bearer <GATEWAY_КЛЮЧ>" \
      -H "Content-Type: application/json" \
      -d '{"model":"openclaw/default","messages":[{"role":"user","content":"Отговори с една дума: здравей."}]}'

    ⚠️ От n8n не сме го пускали; формата е стандартният на OpenAI. Помни и обратното на стъпка 3: това е пълен достъп — не подавай на агента непроверено съдържание от външния свят с включени опасни инструменти. Един „мозък“ на процес: n8n има и собствен възел „AI Agent“ със свой модел; не връзвай агент в агент, ако не ти е нужно.

  6. Примерен процес: външно събитие → кратко известие

    Задача: когато някоя система съобщи „нов файл“, агентът да обобщи и да пише в чат канал. Тригер: възелът Webhook на n8n — той има два адреса, тестов (докато слушаш) и производствен (след публикуване на процеса). Защити го: в „Authentication“ избери Header auth (или JWT), по желание и „IP(s) Allowlist“.

    ⚠️
    Няма „Nextcloud Trigger“
    Nextcloud възелът в n8n умее файлове, папки и потребители — но няма тригер за събития. За „нов файл“ имаш два пътя: система, която сама вика твоя Webhook (⚠️ дали и как го прави Nextcloud в твоята версия не сме проверявали), или Schedule Trigger на всеки няколко минути + Nextcloud „Return the contents of a folder“ и сравнение със запомнения списък.

    Следващият възел — Code — прави заявката за агента:

    javascript · Code възел
    // n8n · Code node · Run Once for All Items
    // Вход: тялото, което е изпратила външната система към Webhook възела
    const b = $input.first().json.body;
    const event = `Нов файл: ${b.name} (папка: ${b.folder})`;
    return [{
      json: {
        message: `Обобщи накратко за екипа това събитие и кажи дали иска действие: ${event}`,
        name: 'Нов файл',
      },
    }];

    И накрая HTTP Request към /hooks/agent. За да пише агентът директно в чат канал, трябват и двете — channel и to; ако е само едното, заявката пада с 400.

    json · тяло на HTTP Request
    {
      "message": "{{ $json.message }}",
      "name": "{{ $json.name }}",
      "agentId": "main",
      "deliver": true,
      "channel": "<КАНАЛ>",
      "to": "<ЦЕЛ_В_КАНАЛА>"
    }

    Формат на целта зависи от канала (напр. за Discord — channel:<id>); виж „openclaw message“ в документацията. Ако искаш само да изпратиш готово съобщение, без агент, има и команда:

    bash
    openclaw message send --channel discord --target channel:<ID_НА_КАНАЛА> --message "Готово."

    Тя е на хоста на OpenClaw — от контейнера на n8n не е достъпна директно. ⚠️ Възелът „Execute Command“ в n8n 2.x е, доколкото знаем, изключен по подразбиране; предпочети куката.

  7. Обратната посока: OpenClaw към n8n

    OpenClaw може да изпрати завършен резултат на автоматизация към HTTP адрес. Създай график и сочи към производствения адрес на Webhook възела:

    bash
    openclaw automations create "0 18 * * 1-5" \
      "Обобщи днешните промени като JSON." \
      --name "Дневен преглед" \
      --webhook "https://<АДРЕС_НА_N8N>/webhook/<ПЪТ>"

    Доставката с --webhook се ползва вместо чат доставка, не заедно. Ключът за доставката е cron.webhookToken (праща се като Authorization: Bearer …) — задай го от сейфа и същото изискване сложи на Webhook възела в n8n. Адрес в частна мрежа се блокира от строгата защита; за доверен локален приемник се добавя изключение в cron.webhookSsrfPolicy (тясно, по име на хост). ⚠️ Тази посока не е пускана от нас.

  8. Open WebUI → n8n: Инструмент

    Open WebUI има няколко вида „инструменти“: вградени функции, Workspace Tools (Python, изпълняван в самия Open WebUI), външни сървъри по MCP и OpenAPI. Най-простият начин моделът да пусне работен процес в n8n е малък Workspace Tool, който вика Webhook:

    python · Workspace Tool (по модела на документацията)
    import requests
    
    class Tools:
        def start_workflow(self, text: str) -> str:
            """Пуска работен процес в n8n и връща отговора му."""
            r = requests.post(
                "https://<АДРЕС_НА_N8N>/webhook/<ПЪТ>",
                json={"text": text},
                headers={"<ИМЕ_НА_ЗАГЛАВИЕ>": "<СТОЙНОСТ_ОТ_СЕЙФА>"},
                timeout=30,
            )
            return r.text
    🔐
    Workspace Tools са код на сървъра
    Документацията на Open WebUI предупреждава: Инструментите изпълняват произволен Python на сървъра; правото да ги създава или внася е като право на команден ред. Давай го само на доверени администратори и преглеждай кода преди внос. Ключа дръж в самия Инструмент (сървърна страна), не в чата.

    Освен Инструменти, Open WebUI има Функции (добавки като „pipe“, „filter“, „action“) и отделни Pipelines. За връзка с OpenClaw не са нужни — там стига обикновената връзка от стъпка 3.

  9. Сигурност: правилата на тази връзка

    🔐
    Запомни
    • Два ключа, две роли: ключ на Gateway (пълен достъп) и отделен ключ за куките.
    • Всички ключове — в сейф или удостоверенията на n8n; никога в JSON за споделяне, в скрийншот или в кода на Инструмента, който не е твой.
    • Само allowedAgentIds с един нужен агент; allowRequestSessionKey: false.
    • Гласът на външния свят е данни: агентът се пази от вмъкнати указания, но опаковката не маха инструментите му. За недоверено съдържание ползвай агент с ограничени инструменти.
    • Локален, частен или през HTTPS с доверен посредник — никога гол достъп от интернет.
    • За действия с реален ефект (пари, изтриване, съобщения навън) — човек потвърждава.

04Проверка

Чеклист

Тест

1. Кой адрес слагаш в връзка на Open WebUI, за да говориш с OpenClaw?

2. n8n трябва да вземе ОТГОВОРА на агента и да го ползва в следващ възел. Кой вход е подходящ?

3. Какво означава HTTP 200 от /hooks/agent?

4. Къде е правилно да стои ключът за куките?

05Какво следва

06Източници

  1. OpenClaw: OpenAI chat completions — изключен по подразбиране, модел = цел-агент, граница на сигурност, ключ.
  2. OpenClaw: входящи куки — /hooks/agent, /hooks/wake, ключ, кодове, предупреждения.
  3. OpenClaw: управление на автоматизации — --webhook, cron.webhookToken, политика за изходящи адреси.
  4. OpenClaw: openclaw message — send, --target, формати на цел.
  5. Open WebUI: свързване с OpenClaw · OpenAI-съвместими връзки — Admin → Connections, /v1.
  6. Open WebUI: Инструменти — Workspace Tools, MCP, OpenAPI, предупреждение за сигурност · дневник на промените.
  7. n8n: Webhook възел — тестов и производствен адрес, удостоверяване, IP списък · n8n: Nextcloud възел — само действия.