Интеграция n8n с Яндекс Мессенджером

В этой статье разберём, как связать n8n с Яндекс Мессенджером: создать бота, принять запрос через Webhook и отправить пользователю ответ — текстом или файлом.

Почему мы используем Яндекс

ITCost с первого дня работы, с 2018 года, выбрал стек технологий Яндекса для построения корпоративной инфраструктуры. Это помогло нам избежать сложного переезда с технологий Microsoft в 2022 году.

Почтовый домен мы делегировали Яндекс Почте и сразу получили SSO (Single Sign-On), который используем вместо Microsoft Active Directory. Если вы до сих пор работаете с Microsoft Active Directory, Microsoft Exchange или аналогичными сервисами, можно настроить интеграцию с сервисами Яндекса, а затем подключить сотрудникам ботов и другие корпоративные инструменты. Для части продуктов Яндекс развивает локальные (on-premise) решения — за обновлениями стоит следить отдельно.

Что понадобится

  • доступ администратора к организации в Яндексе;
  • созданный бот и API-ключ для него;
  • работающий инстанс n8n с доступным Webhook URL;
  • переменная окружения для хранения токена, например YANDEX_BOT_TOKEN_LOGPARSER.

1. Создайте бота в Яндекс Мессенджере

В панели администрирования Яндекса откройте раздел «Мессенджер» → «Боты» и создайте нового бота. После создания сохраните API-ключ: он понадобится для авторизации запросов к Bot API.

Раздел «Мессенджер» → «Боты» в панели администрирования Яндекса.

2. Создайте Webhook в n8n

В панели n8n нажмите «+», найдите ноду Webhook и создайте её. Для примера используется метод POST. В продакшене лучше заранее продумать защиту входящего Webhook: секретный путь, проверку подписи или отдельную авторизацию на уровне инфраструктуры.

Настройки Webhook в n8n.

3. Настройте ветвление по наличию файла

Для отправки ответа в Яндекс Мессенджер создайте три ноды: «If file», «Send File» и «Send Text». В ноде «If file» добавьте условие в режиме Expression:

{{ !!$binary.file }}

Если во входных данных есть бинарное поле file, сценарий пойдёт по ветке отправки файла. Если файла нет, ответ будет отправлен как текстовое сообщение.

Ветка «If file»: проверка наличия бинарного файла.

4. Настройте ноду Send File

В ноде «Send File» укажите метод POST и адрес API:

https://botapi.messenger.yandex.net/bot/v1/messages/sendFile/

В .env-файле создайте переменную с API-ключом бота. В заголовке Authorization укажите выражение:

{{ 'OAuth ' + ($env.YANDEX_BOT_TOKEN_LOGPARSER || '') }}

В Body выберите Form-Data и передайте два поля:

  • login: {{ $json.login }}
  • document: бинарный файл из поля file

Поля с выражениями должны быть переведены в режим Expression.

Настройки ноды «Send File»: заголовок Authorization и Form-Data.

5. Настройте ноду Send Text

В ноде «Send Text» укажите метод POST и адрес API:

https://botapi.messenger.yandex.net/bot/v1/messages/sendText/

В заголовке Authorization используйте то же выражение с API-ключом:

{{ 'OAuth ' + ($env.YANDEX_BOT_TOKEN_LOGPARSER || '') }}

В Body выберите JSON и передайте поля:

  • login: {{ $json.login }}
  • text: {{ $json.text }}

Настройки ноды «Send Text»: отправка JSON с полями login и text.

6. Проверьте результат

После настройки сценария бот сможет отвечать на запросы в Яндекс Мессенджере: отправлять текстовые сообщения или файлы, если во входных данных есть бинарное поле file.

Made on
Tilda