Team Ai
Apppublic

oex2003/evolution-api

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
flowise.service.ts137 linesDownload Raw Back to services
1/* eslint-disable @typescript-eslint/no-unused-vars */2import { PrismaRepository } from '@api/repository/repository.service';3import { WAMonitoringService } from '@api/services/monitor.service';4import { Integration } from '@api/types/wa.types';5import { ConfigService, HttpServer } from '@config/env.config';6import { Flowise as FlowiseModel, IntegrationSession } from '@prisma/client';7import axios from 'axios';8 9import { BaseChatbotService } from '../../base-chatbot.service';10import { OpenaiService } from '../../openai/services/openai.service';11 12export class FlowiseService extends BaseChatbotService<FlowiseModel> {13  private openaiService: OpenaiService;14 15  constructor(16    waMonitor: WAMonitoringService,17    prismaRepository: PrismaRepository,18    configService: ConfigService,19    openaiService: OpenaiService,20  ) {21    super(waMonitor, prismaRepository, 'FlowiseService', configService);22    this.openaiService = openaiService;23  }24 25  // Return the bot type for Flowise26  protected getBotType(): string {27    return 'flowise';28  }29 30  // Process Flowise-specific bot logic31  public async processBot(32    instance: any,33    remoteJid: string,34    bot: FlowiseModel,35    session: IntegrationSession,36    settings: any,37    content: string,38    pushName?: string,39    msg?: any,40  ) {41    await this.process(instance, remoteJid, bot, session, settings, content, pushName, msg);42  }43 44  // Implement the abstract method to send message to Flowise API45  protected async sendMessageToBot(46    instance: any,47    session: IntegrationSession,48    settings: any,49    bot: FlowiseModel,50    remoteJid: string,51    pushName: string,52    content: string,53    msg?: any,54  ): Promise<void> {55    const payload: any = {56      question: content,57      overrideConfig: {58        sessionId: remoteJid,59        vars: {60          remoteJid: remoteJid,61          pushName: pushName,62          instanceName: instance.instanceName,63          serverUrl: this.configService.get<HttpServer>('SERVER').URL,64          apiKey: instance.token,65        },66      },67    };68 69    // Handle audio messages70    if (this.isAudioMessage(content) && msg) {71      try {72        this.logger.debug(`[Flowise] Downloading audio for Whisper transcription`);73        const transcription = await this.openaiService.speechToText(msg, instance);74        if (transcription) {75          payload.question = `[audio] ${transcription}`;76        }77      } catch (err) {78        this.logger.error(`[Flowise] Failed to transcribe audio: ${err}`);79      }80    }81 82    if (this.isImageMessage(content)) {83      const contentSplit = content.split('|');84 85      payload.uploads = [86        {87          data: contentSplit[1].split('?')[0],88          type: 'url',89          name: 'Flowise.png',90          mime: 'image/png',91        },92      ];93      payload.question = contentSplit[2] || content;94    }95 96    if (instance.integration === Integration.WHATSAPP_BAILEYS) {97      await instance.client.presenceSubscribe(remoteJid);98      await instance.client.sendPresenceUpdate('composing', remoteJid);99    }100 101    let headers: any = {102      'Content-Type': 'application/json',103    };104 105    if (bot.apiKey) {106      headers = {107        ...headers,108        Authorization: `Bearer ${bot.apiKey}`,109      };110    }111 112    const endpoint = bot.apiUrl;113 114    if (!endpoint) {115      this.logger.error('No Flowise endpoint defined');116      return;117    }118 119    const response = await axios.post(endpoint, payload, {120      headers,121    });122 123    if (instance.integration === Integration.WHATSAPP_BAILEYS) {124      await instance.client.sendPresenceUpdate('paused', remoteJid);125    }126 127    const message = response?.data?.text;128 129    if (message) {130      // Use the base class method to send the message to WhatsApp131      await this.sendMessageWhatsApp(instance, remoteJid, message, settings);132    }133  }134 135  // The service is now complete with just the abstract method implementations136}137