mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-12-10 02:19:39 -06:00
93 lines
3.2 KiB
TypeScript
93 lines
3.2 KiB
TypeScript
import { InstanceDto } from '@api/dto/instance.dto';
|
|
import { ChatwootDto } from '@api/integrations/chatbot/chatwoot/dto/chatwoot.dto';
|
|
import { ChatwootService } from '@api/integrations/chatbot/chatwoot/services/chatwoot.service';
|
|
import { PrismaRepository } from '@api/repository/repository.service';
|
|
import { waMonitor } from '@api/server.module';
|
|
import { CacheService } from '@api/services/cache.service';
|
|
import { CacheEngine } from '@cache/cacheengine';
|
|
import { Chatwoot, ConfigService, HttpServer } from '@config/env.config';
|
|
import { BadRequestException } from '@exceptions';
|
|
import { isURL } from 'class-validator';
|
|
|
|
export class ChatwootController {
|
|
constructor(
|
|
private readonly chatwootService: ChatwootService,
|
|
private readonly configService: ConfigService,
|
|
private readonly prismaRepository: PrismaRepository,
|
|
) {}
|
|
|
|
public async createChatwoot(instance: InstanceDto, data: ChatwootDto) {
|
|
if (!this.configService.get<Chatwoot>('CHATWOOT').ENABLED) throw new BadRequestException('Chatwoot is disabled');
|
|
|
|
if (data?.enabled) {
|
|
if (!isURL(data.url, { require_tld: false })) {
|
|
throw new BadRequestException('url is not valid');
|
|
}
|
|
|
|
if (!data.accountId) {
|
|
throw new BadRequestException('accountId is required');
|
|
}
|
|
|
|
if (!data.token) {
|
|
throw new BadRequestException('token is required');
|
|
}
|
|
|
|
if (data.signMsg !== true && data.signMsg !== false) {
|
|
throw new BadRequestException('signMsg is required');
|
|
}
|
|
if (data.signMsg === false) data.signDelimiter = null;
|
|
}
|
|
|
|
if (!data.nameInbox || data.nameInbox === '') {
|
|
data.nameInbox = instance.instanceName;
|
|
}
|
|
|
|
const result = await this.chatwootService.create(instance, data);
|
|
|
|
const urlServer = this.configService.get<HttpServer>('SERVER').URL;
|
|
|
|
const response = {
|
|
...result,
|
|
webhook_url: `${urlServer}/chatwoot/webhook/${encodeURIComponent(instance.instanceName)}`,
|
|
};
|
|
|
|
return response;
|
|
}
|
|
|
|
public async findChatwoot(instance: InstanceDto): Promise<ChatwootDto & { webhook_url: string }> {
|
|
if (!this.configService.get<Chatwoot>('CHATWOOT').ENABLED) throw new BadRequestException('Chatwoot is disabled');
|
|
|
|
const result = await this.chatwootService.find(instance);
|
|
|
|
const urlServer = this.configService.get<HttpServer>('SERVER').URL;
|
|
|
|
if (Object.keys(result || {}).length === 0) {
|
|
return {
|
|
enabled: false,
|
|
url: '',
|
|
accountId: '',
|
|
token: '',
|
|
signMsg: false,
|
|
nameInbox: '',
|
|
webhook_url: '',
|
|
};
|
|
}
|
|
|
|
const response = {
|
|
...result,
|
|
webhook_url: `${urlServer}/chatwoot/webhook/${encodeURIComponent(instance.instanceName)}`,
|
|
};
|
|
|
|
return response;
|
|
}
|
|
|
|
public async receiveWebhook(instance: InstanceDto, data: any) {
|
|
if (!this.configService.get<Chatwoot>('CHATWOOT').ENABLED) throw new BadRequestException('Chatwoot is disabled');
|
|
|
|
const chatwootCache = new CacheService(new CacheEngine(this.configService, ChatwootService.name).getEngine());
|
|
const chatwootService = new ChatwootService(waMonitor, this.configService, this.prismaRepository, chatwootCache);
|
|
|
|
return chatwootService.receiveWebhook(instance, data);
|
|
}
|
|
}
|