Уведомления
Очистить все

Как я починил ошибку Telegram вебхука в n8n: Failed to resolve host

1 Записи
1 Пользователи
0 Reactions
1,127 Просмотры
(@admin)
Записи: 25
Участник Admin
Создатель темы
 
[#13]

Разбираю кейс с self‑hosted n8n за Traefik, где внезапно перестал работать Telegram Trigger, хотя ещё вчера всё было ок.

Симптомы

  • n8n крутится на VPS (Ubuntu 22.04) в Docker.

  • Перед ним стоит Traefik, который слушает 80/443 и отдаёт HTTPS.

  • При запуске workflow с Telegram Trigger в n8n ошибка:

Bad Request: bad webhook: Failed to resolve host: Temporary failure in name resolution
  • При прямом запросе к Telegram API:

 https://api.telegram.org/bot<ТОКЕН>/setWebhook?url=https://СТАРЫЙ_ДОМЕН_ХОСТЕРА/ 

получаю тот же ответ: Telegram не может зарезолвить этот домен. То есть проблема не в n8n, а в DNS со стороны Telegram для конкретного служебного домена.

Что оказалось под капотом

Команда:

docker ps

показала:

... n8nio/n8n:latest 127.0.0.1:5678->5678/tcp ... traefik 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp

В каталоге с конфигом нашёл compose‑файл:

bash
cd ~/n8n-compose-file cat compose.yml

Ключевые куски выглядели так:

services: traefik: image: "traefik" command: - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.web.http.redirections.entryPoint.to=websecure" - "--entrypoints.web.http.redirections.entrypoint.scheme=https" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true" - "--certificatesresolvers.mytlschallenge.acme.email=admin@example.com" - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" n8n: image: docker.n8n.io/n8nio/n8n:latest ports: - "127.0.0.1:5678:5678" labels: - traefik.enable=true - traefik.http.routers.n8n.rule=Host(`СТАРЫЙ_ДОМЕН_ХОСТЕРА`) - traefik.http.routers.n8n.tls=true - traefik.http.services.n8n.loadbalancer.server.port=5678 - traefik.http.routers.n8n.entrypoints=web,websecure - traefik.http.routers.n8n.tls.certresolver=mytlschallenge - traefik.http.middlewares.n8n.headers.SSLHost=СТАРЫЙ_ДОМЕН_ХОСТЕРА environment: - N8N_HOST=СТАРЫЙ_ДОМЕН_ХОСТЕРА - N8N_PORT=5678 - N8N_PROTOCOL=https - WEBHOOK_URL= https://СТАРЫЙ_ДОМЕН_ХОСТЕРА/ 

Вывод:

  • Traefik уже умеет выдавать HTTPS (Let’s Encrypt через tls‑challenge).

  • Везде жёстко прописан служебный домен хостинга.

  • Telegram именно этот домен не может резолвить — отсюда Failed to resolve host.

Попытка повесить ещё один nginx+certbot сверху привела к ошибке:

bind() to 0.0.0.0:80 failed (98: Address already in use)

Потому что порт 80 занят Traefik.

Решение: свой домен + правка Traefik и n8n

1. Свой поддомен на DNS

На своём домене (пример: mydomain.pro) в панели DNS добавил:

  • тип: A

  • имя: n8n

  • значение: IP сервера XXX.XXX.XXX.XXX

Через несколько минут n8n.mydomain.pro начал резолвиться на VPS.

2. Настроил Traefik и n8n на новый домен

В compose.yml в сервисе n8n заменил все вхождения старого домена на новый n8n.mydomain.pro:

Важно:

  • В файле не должно остаться старого домена.

  • Traefik через rule=Host(...) и SSLHost=... начинает обслуживать новый домен.

  • n8n сам считает, что его публичный URL —  https://n8n.mydomain.pro/ , и генерирует вебхуки от него.

После правки:

Traefik и n8n поднялись заново, Traefik автоматически получил сертификат Let’s Encrypt для нового домена.

3. Проверка HTTPS и обновление вебхука Telegram

Дальше:

  1. В браузере проверил:

 https://n8n.mydomain.pro 

— открывается интерфейс n8n по HTTPS, сертификат валидный.

  1. Обновил webhook бота (токен не светим):

 https://api.telegram.org/bot<ТОКЕН>/deleteWebhook  https://api.telegram.org/bot<ТОКЕН>/setWebhook?url= https://n8n.mydomain.pro/ 

Ответ на setWebhook:

{"ok":true,"result":true,"description":"Webhook was set"}
  1. В n8n по новому домену активировал Telegram Trigger — после этого сообщения боту начали прилетать в workflow без каких‑либо Failed to resolve host.

Краткая инструкция, если у вас похожая проблема

  1. Проверить, что n8n стоит за Traefik в Docker:

docker ps
  1. Добавить свой домен/поддомен и направить его A‑записью на IP сервера.

  2. Найти compose‑файл с Traefik+n8n (что‑то вроде n8n-compose-file/compose.yml).

  3. В сервисе n8n заменить старый домен на свой во всех местах:

  • traefik.http.routers.n8n.rule=Host(\ВАШ_ДОМЕН`)`

  • traefik.http.middlewares.n8n.headers.SSLHost=ВАШ_ДОМЕН

  • N8N_HOST=ВАШ_ДОМЕН

  • WEBHOOK_URL= https://ВАШ_ДОМЕН/

  1. Перезапустить стек:

docker compose down docker compose up -d
  1. Убедиться, что  https://ВАШ_ДОМЕН  открывает n8n по HTTPS.

  2. Обновить webhook Telegram:

 https://api.telegram.org/bot<ТОКЕН>/deleteWebhook  https://api.telegram.org/bot<ТОКЕН>/setWebhook?url= https://ВАШ_ДОМЕН/ 
  1. Активировать Telegram Trigger в n8n и проверить сообщения.


 
Размещено : 11/03/2026 3:15 пп