Синхронізація з трьома сервісами через Node-red:
Необхідні умови:
- Воркспейс UBOS
- Flow Builder UBOS
- Обліковий запис в Telegram
- Обліковий запис в AirTable
За допомогою середовища Node-red можна реалізувати налаштування чат-бота для Telegram, беручи команди із таблиці AirTable, та відправлення повідомлень з чату на вказану пошту.
Telegram
Про те як створити телеграм бота та прив'язати його до Node-red можна дізнатись в статті.
AirTable.
Створюємо таблицю в AirTable з двома колонками:
- Command: команди для Telegram-Bot,
- Answer: відповіді на ці команди.
Зверніть увагу на назву таблиці TableName зліва та назви колонок.
Для зв’язку з таблицею Tasks в середовищі Node-red будемо використовувати вузол http request
, який назвемо AirTable request .
URL (AirTable API) можна утворити за такою схемою:
https://api.airtable.com/v0/BaseID/TableName?api_key=APIkey
BaseID та APIkey можна знайти в документації API. TableName - назва таблиці.
У розділі "INTRODUCTION" знаходимо BaseID:
У розділі "AUTHENTICATION" переходимо за посиланням на сторінку аккаунту, там знаходимо APIkey:
Отримане посилання вставляємо в поле URL вузла http request
: AirTable request:
https://api.airtable.com/v0/app5nGk...nNyZY/Tasks?api_key=keyui...nglSeh2
Щоб побачити дані, які повертаються після запиту до таблиці, підключимо до AirTable request вузли debug
та inject
:
Відправлення email на пошту.
Використовуємо вузол sendgrid
із бібліотеки node-red-contrib-sendgrid
Api key:
SG.4zAEY3xh***********************************
Створення endpoint.
Використовуємо вузли:
receiver
sender
-
http request
sendgrid
4 function
Залишилось розібратись із 4 function: saveTelegram
, getCommand
, sendAnswer
, sendEmail
.
- У вузлі
saveTelegram
треба створити змінну telegramMessage та присвоїти їй значення отриманого повідомлення із чат-боту.
msg.telegramMessage = msg.payload
return msg;
- У
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;
- В
sendAnswer
формуємо відповідь на команду.
msg.payload = {
...msg.telegramMessage,
content: msg.payload[0].Answer
}
return msg;
- У вузлі
sendEmail
потрібно вказати topic листа та його вміст. Якщо була викликана команда "/sendEmail" повідомлення буде надісланим.
if (msg.telegramMessage.content == "/sendEmail"){
msg.topic = "Msg from my telegramBot"
msg.payload = msg.payload.content
return msg;
}
Top comments (0)