UBOS Community

AC
AC

Posted on • Updated on

Synchronization with three services via Node-red:

Синхронізація з трьома сервісами через Node-red:

Необхідні умови:

  1. Воркспейс UBOS
  2. Flow Builder UBOS
  3. Обліковий запис в Telegram
  4. Обліковий запис в AirTable

За допомогою середовища Node-red можна реалізувати налаштування чат-бота для Telegram, беручи команди із таблиці AirTable, та відправлення повідомлень з чату на вказану пошту.

Telegram

Про те як створити телеграм бота та прив'язати його до Node-red можна дізнатись в статті.

AirTable.

Створюємо таблицю в AirTable з двома колонками:

  • Command: команди для Telegram-Bot,
  • Answer: відповіді на ці команди.

Image description

Зверніть увагу на назву таблиці TableName зліва та назви колонок.

Для зв’язку з таблицею Tasks в середовищі Node-red будемо використовувати вузол http request, який назвемо AirTable request .
Image description

URL (AirTable API) можна утворити за такою схемою:

https://api.airtable.com/v0/BaseID/TableName?api_key=APIkey
Enter fullscreen mode Exit fullscreen mode

BaseID та APIkey можна знайти в документації API. TableName - назва таблиці.

У розділі "INTRODUCTION" знаходимо BaseID:

Image description

У розділі "AUTHENTICATION" переходимо за посиланням на сторінку аккаунту, там знаходимо APIkey:

Image description

Отримане посилання вставляємо в поле URL вузла http request: AirTable request:

https://api.airtable.com/v0/app5nGk...nNyZY/Tasks?api_key=keyui...nglSeh2
Enter fullscreen mode Exit fullscreen mode

Image description

Щоб побачити дані, які повертаються після запиту до таблиці, підключимо до AirTable request вузли debug та inject:

Image description

Відправлення email на пошту.

Використовуємо вузол sendgrid із бібліотеки node-red-contrib-sendgrid

Image description

Api key:

SG.4zAEY3xh***********************************
Enter fullscreen mode Exit fullscreen mode

Image description

Створення endpoint.

Використовуємо вузли:

  • receiver
  • sender
  • http request
  • sendgrid
  • 4 function

Image description

Залишилось розібратись із 4 function: saveTelegram, getCommand, sendAnswer, sendEmail.

  • У вузлі saveTelegram треба створити змінну telegramMessage та присвоїти їй значення отриманого повідомлення із чат-боту.
msg.telegramMessage = msg.payload
return msg;
Enter fullscreen mode Exit fullscreen mode

Image description

  • У getCommand отримані дані з AirTable необхідно спершу перетворити строку на об'єкт, відфільтрувати масив records та витягнути лише одну пару команда-відповідь, яка була написана в чат-бот.
msg.payload = JSON.parse(msg.payload);
msg.payload = msg.payload.records.map(e=> e.fields)
msg.payload = msg.payload.filter(e=> e.Command == msg.telegramMessage.content)
return msg;
Enter fullscreen mode Exit fullscreen mode

Image description

  • В sendAnswer формуємо відповідь на команду.
msg.payload = {
    ...msg.telegramMessage,
    content: msg.payload[0].Answer
}
return msg;
Enter fullscreen mode Exit fullscreen mode

Image description

  • У вузлі sendEmail потрібно вказати topic листа та його вміст. Якщо була викликана команда "/sendEmail" повідомлення буде надісланим.
if (msg.telegramMessage.content == "/sendEmail"){
    msg.topic = "Msg from my telegramBot"
    msg.payload = msg.payload.content
    return msg;
}
Enter fullscreen mode Exit fullscreen mode

Результат.

Telegram-chat:
Image description

Email:
Image description

Discussion (0)