UBOS Community

Dmytro
Dmytro

Posted on

Створення телеграм бота із інтеграцією з OpenAi

В даній статті описується інтеграція телеграм бота з сервісом OpenAI
Для реалізації даної інтеграції потрібно виконати три кроки:

  1. Створити та підключитися до телеграм бота за допомогою Node-red - цей процес описано у статті Synchronization with three services via Node-red:
  2. Зареєструвати акаунт в сервсі OpenAI та отримати апі ключ.
  3. Створити потік в середовищі Node Red, який позволить працювати з ботом. Image description Для створення даного потоку ми використувоєму наступні вузли:
  • Telegram reciever;
  • Telegram sender(3);
  • Function (4);
  • Http request;

Вузли telegram reiever та telegram sender відповідають лише за отримання та відправку даних в телеграм бот, в них потрібно як описано в статті вище вписати лише токен бота.

В вузлі Content validation(function) ми здійснюмо перевірку вхідних даних, по наступним критеріям :

  • чи повідомлення містить в собі команду '/start';
  • чи тип повідомлення=='message';
  • якщо попередні критерії не пройшли перевірку ми завжди вертаємо помилку;

У випадку якщо повідомлення містить в собі команду '/start' ми відправляємо короткий опис функціонала бота.
У випадку якщо тип повідомлення 'message' ми відправляємо дане повідомлення до серсвісу OpenAI, який у відповідь нам відправляє посилання на згенероване моделлю DALL·E зображення і ми відправляємо його у відповідь користувачу.

Вузол Content validation(function)

if (msg.payload.content.includes('/start')) {
    return [msg, null,null]
}
if (msg.payload.type == "message") { 
    return [null, msg,null]
    }
else{
    return[null,null,msg]
}

Enter fullscreen mode Exit fullscreen mode

Вузол Send Instruction(function)

msg.oldpayload=msg.payload;
msg.payload={};
msg.payload.type = "message";
msg.payload.content = `Напишіть будь ласка боту вашу історію текстовим повідомлення і насолоджуйтесь отриманим зображенням=)`;
msg.payload.chatId = `${msg.oldpayload.chatId}`;
return msg;
Enter fullscreen mode Exit fullscreen mode

Вузол Request to OpenAI(function)

msg.oldpayload=msg.payload;
msg.url=`https://api.openai.com/v1/images/generations`;
msg.method="POST";
msg.headers={
'Content-Type': 'application/json',
    'Authorization': env.get("secret_key") /* Ваш Апі Ключ */
}
msg.payload={
    "prompt": msg.oldpayload.content,
    "n": 1,
    "size": "1024x1024"
}

return msg;
Enter fullscreen mode Exit fullscreen mode

Вузол Content Validation failed(function)

msg.oldpayload=msg.payload;
msg.payload={};
msg.payload.type = "message";
msg.payload.content = `Error: you can send only text messages`;
msg.payload.chatId = `${msg.oldpayload.chatId}`;
return msg;
Enter fullscreen mode Exit fullscreen mode

Вузол Send Response(function)

if (msg.statusCode==200){
msg.payload.type = "message";
msg.payload.content = `<a href="${msg.payload.data[0].url}">image link</a>`;

msg.payload.chatId = `${msg.oldpayload.chatId}`;
msg.payload.options = { parse_mode: "HTML" };
}else{
    msg.payload.type = "message";
    msg.payload.content = `${msg.payload.error.message}`;
    msg.payload.chatId = `${msg.oldpayload.chatId}`;

}
return msg;
Enter fullscreen mode Exit fullscreen mode

Телеграм бота можна знайти в телеграмі за посиланням UBOS.OPEN AI

Приклади використання:
Image description

Image description

Discussion (1)

Collapse
giorgio profile image
Giorgio Armani

what about phrase: "running cat and dog"? could you please show us the result?