mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-24 17:38:40 -06:00
fixes
This commit is contained in:
parent
7968057a82
commit
16a9d1faf5
@ -2,13 +2,15 @@ services:
|
|||||||
api:
|
api:
|
||||||
container_name: evolution_api_${ENVIROMNENT}
|
container_name: evolution_api_${ENVIROMNENT}
|
||||||
build: .
|
build: .
|
||||||
image: adaptweb/evolution-api:1.6.1
|
image: adaptweb/evolution-api:1.7.0
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- postgres
|
- postgres
|
||||||
ports:
|
ports:
|
||||||
- ${MIRROR_PORT}:8080
|
- ${MIRROR_PORT}:8080
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
volumes:
|
volumes:
|
||||||
- evolution_instances:/evolution/instances
|
- evolution_instances:/evolution/instances
|
||||||
networks:
|
networks:
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
import { OfferCallDto } from '@api/dto/call.dto';
|
|
||||||
import { InstanceDto } from '@api/dto/instance.dto';
|
|
||||||
import { WAMonitoringService } from '@api/services/monitor.service';
|
|
||||||
|
|
||||||
export class CallController {
|
|
||||||
constructor(private readonly waMonitor: WAMonitoringService) {}
|
|
||||||
|
|
||||||
public async offerCall({ instanceName }: InstanceDto, data: OfferCallDto) {
|
|
||||||
return await this.waMonitor.waInstances[instanceName].offerCall(data);
|
|
||||||
}
|
|
||||||
}
|
|
@ -782,9 +782,6 @@ export class EvolutionStartupService extends ChannelStartupService {
|
|||||||
public async fetchProfile() {
|
public async fetchProfile() {
|
||||||
throw new BadRequestException('Method not available on Evolution Channel');
|
throw new BadRequestException('Method not available on Evolution Channel');
|
||||||
}
|
}
|
||||||
public async offerCall() {
|
|
||||||
throw new BadRequestException('Method not available on WhatsApp Business API');
|
|
||||||
}
|
|
||||||
public async sendPresence() {
|
public async sendPresence() {
|
||||||
throw new BadRequestException('Method not available on Evolution Channel');
|
throw new BadRequestException('Method not available on Evolution Channel');
|
||||||
}
|
}
|
||||||
|
@ -1410,9 +1410,6 @@ export class BusinessStartupService extends ChannelStartupService {
|
|||||||
public async fetchProfile() {
|
public async fetchProfile() {
|
||||||
throw new BadRequestException('Method not available on WhatsApp Business API');
|
throw new BadRequestException('Method not available on WhatsApp Business API');
|
||||||
}
|
}
|
||||||
public async offerCall() {
|
|
||||||
throw new BadRequestException('Method not available on WhatsApp Business API');
|
|
||||||
}
|
|
||||||
public async sendPresence() {
|
public async sendPresence() {
|
||||||
throw new BadRequestException('Method not available on WhatsApp Business API');
|
throw new BadRequestException('Method not available on WhatsApp Business API');
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { getCollectionsDto } from '@api/dto/business.dto';
|
import { getCollectionsDto } from '@api/dto/business.dto';
|
||||||
import { OfferCallDto } from '@api/dto/call.dto';
|
|
||||||
import {
|
import {
|
||||||
ArchiveChatDto,
|
ArchiveChatDto,
|
||||||
BlockUserDto,
|
BlockUserDto,
|
||||||
@ -383,7 +382,7 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
qrcodeTerminal.generate(qr, { small: true }, (qrcode) =>
|
qrcodeTerminal.generate(qr, { small: true }, (qrcode) =>
|
||||||
this.logger.log(
|
this.logger.log(
|
||||||
`\n{ instance: ${this.instance.name} pairingCode: ${this.instance.qrcode.pairingCode}, qrcodeCount: ${this.instance.qrcode.count} }\n` +
|
`\n{ instance: ${this.instance.name} pairingCode: ${this.instance.qrcode.pairingCode}, qrcodeCount: ${this.instance.qrcode.count} }\n` +
|
||||||
qrcode,
|
qrcode,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -1024,18 +1023,18 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
|
|
||||||
const messagesRepository: Set<string> = new Set(
|
const messagesRepository: Set<string> = new Set(
|
||||||
chatwootImport.getRepositoryMessagesCache(instance) ??
|
chatwootImport.getRepositoryMessagesCache(instance) ??
|
||||||
(
|
(
|
||||||
await this.prismaRepository.message.findMany({
|
await this.prismaRepository.message.findMany({
|
||||||
select: { key: true },
|
select: { key: true },
|
||||||
where: { instanceId: this.instanceId },
|
where: { instanceId: this.instanceId },
|
||||||
})
|
})
|
||||||
).map((message) => {
|
).map((message) => {
|
||||||
const key = message.key as {
|
const key = message.key as {
|
||||||
id: string;
|
id: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
return key.id;
|
return key.id;
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (chatwootImport.getRepositoryMessagesCache(instance) === null) {
|
if (chatwootImport.getRepositoryMessagesCache(instance) === null) {
|
||||||
@ -1651,13 +1650,10 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
|
|
||||||
private readonly groupHandler = {
|
private readonly groupHandler = {
|
||||||
'groups.upsert': (groupMetadata: GroupMetadata[]) => {
|
'groups.upsert': (groupMetadata: GroupMetadata[]) => {
|
||||||
console.dir({groupMetadata}, { depth: null });
|
|
||||||
this.sendDataWebhook(Events.GROUPS_UPSERT, groupMetadata);
|
this.sendDataWebhook(Events.GROUPS_UPSERT, groupMetadata);
|
||||||
},
|
},
|
||||||
|
|
||||||
'groups.update': (groupMetadataUpdate: Partial<GroupMetadata>[]) => {
|
'groups.update': (groupMetadataUpdate: Partial<GroupMetadata>[]) => {
|
||||||
console.dir({groupMetadataUpdate}, { depth: null });
|
|
||||||
console.dir("1-groupMetadataUpdate");
|
|
||||||
this.sendDataWebhook(Events.GROUPS_UPDATE, groupMetadataUpdate);
|
this.sendDataWebhook(Events.GROUPS_UPDATE, groupMetadataUpdate);
|
||||||
|
|
||||||
groupMetadataUpdate.forEach((group) => {
|
groupMetadataUpdate.forEach((group) => {
|
||||||
@ -1672,7 +1668,6 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
participants: string[];
|
participants: string[];
|
||||||
action: ParticipantAction;
|
action: ParticipantAction;
|
||||||
}) => {
|
}) => {
|
||||||
console.dir(participantsUpdate, { depth: null })
|
|
||||||
this.sendDataWebhook(Events.GROUP_PARTICIPANTS_UPDATE, participantsUpdate);
|
this.sendDataWebhook(Events.GROUP_PARTICIPANTS_UPDATE, participantsUpdate);
|
||||||
|
|
||||||
this.updateGroupMetadataCache(participantsUpdate.id);
|
this.updateGroupMetadataCache(participantsUpdate.id);
|
||||||
@ -2002,19 +1997,6 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async offerCall({ number, isVideo, callDuration }: OfferCallDto) {
|
|
||||||
const jid = createJid(number);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const call = await this.client.offerCall(jid, isVideo);
|
|
||||||
setTimeout(() => this.client.terminateCall(call.id, call.to), callDuration * 1000);
|
|
||||||
|
|
||||||
return call;
|
|
||||||
} catch (error) {
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async sendMessage(
|
private async sendMessage(
|
||||||
sender: string,
|
sender: string,
|
||||||
message: any,
|
message: any,
|
||||||
@ -3448,7 +3430,6 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
const filteredNumbers = numbersToVerify.filter(
|
const filteredNumbers = numbersToVerify.filter(
|
||||||
(jid) => !cachedNumbers.some((cached) => cached.jidOptions.includes(jid)),
|
(jid) => !cachedNumbers.some((cached) => cached.jidOptions.includes(jid)),
|
||||||
);
|
);
|
||||||
|
|
||||||
const verify = await this.client.onWhatsApp(...filteredNumbers);
|
const verify = await this.client.onWhatsApp(...filteredNumbers);
|
||||||
const users: OnWhatsAppDto[] = await Promise.all(
|
const users: OnWhatsAppDto[] = await Promise.all(
|
||||||
jids.users.map(async (user) => {
|
jids.users.map(async (user) => {
|
||||||
@ -3515,7 +3496,6 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
await saveOnWhatsappCache(users.filter((user) => user.exists).map((user) => ({ remoteJid: user.jid })));
|
await saveOnWhatsappCache(users.filter((user) => user.exists).map((user) => ({ remoteJid: user.jid })));
|
||||||
|
|
||||||
onWhatsapp.push(...users);
|
onWhatsapp.push(...users);
|
||||||
|
@ -113,7 +113,6 @@ export class EventManager {
|
|||||||
local?: boolean;
|
local?: boolean;
|
||||||
integration?: string[];
|
integration?: string[];
|
||||||
}): Promise<void> {
|
}): Promise<void> {
|
||||||
if(eventData.event === 'groups.update') console.dir(3);
|
|
||||||
await this.websocket.emit(eventData);
|
await this.websocket.emit(eventData);
|
||||||
await this.rabbitmq.emit(eventData);
|
await this.rabbitmq.emit(eventData);
|
||||||
await this.nats.emit(eventData);
|
await this.nats.emit(eventData);
|
||||||
|
@ -65,13 +65,10 @@ export class WebhookController extends EventController implements EventControlle
|
|||||||
local,
|
local,
|
||||||
integration,
|
integration,
|
||||||
}: EmitData): Promise<void> {
|
}: EmitData): Promise<void> {
|
||||||
if(event === 'groups.update')console.dir(4);
|
|
||||||
if (integration && !integration.includes('webhook')) {
|
if (integration && !integration.includes('webhook')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(event === 'groups.update')console.dir(5);
|
|
||||||
const instance = (await this.get(instanceName)) as wa.LocalWebHook;
|
const instance = (await this.get(instanceName)) as wa.LocalWebHook;
|
||||||
if(event === 'groups.update')console.dir(6);
|
|
||||||
const webhookConfig = configService.get<Webhook>('WEBHOOK');
|
const webhookConfig = configService.get<Webhook>('WEBHOOK');
|
||||||
const webhookLocal = instance?.events;
|
const webhookLocal = instance?.events;
|
||||||
const webhookHeaders = instance?.headers;
|
const webhookHeaders = instance?.headers;
|
||||||
@ -90,42 +87,29 @@ export class WebhookController extends EventController implements EventControlle
|
|||||||
server_url: serverUrl,
|
server_url: serverUrl,
|
||||||
apikey: apiKey,
|
apikey: apiKey,
|
||||||
};
|
};
|
||||||
if(event === 'groups.update')console.dir(7);
|
|
||||||
if (local && instance?.enabled) {
|
if (local && instance?.enabled) {
|
||||||
if(event === 'groups.update')console.dir(7.1);
|
|
||||||
console.dir({webhookLocal, we})
|
|
||||||
if (Array.isArray(webhookLocal) && webhookLocal.includes(we)) {
|
if (Array.isArray(webhookLocal) && webhookLocal.includes(we)) {
|
||||||
let baseURL: string;
|
let baseURL: string;
|
||||||
if(event === 'groups.update')console.dir(7.2);
|
|
||||||
if (instance?.webhookByEvents) {
|
if (instance?.webhookByEvents) {
|
||||||
if(event === 'groups.update')console.dir(7.21);
|
|
||||||
baseURL = `${instance?.url}/${transformedWe}`;
|
baseURL = `${instance?.url}/${transformedWe}`;
|
||||||
} else {
|
} else {
|
||||||
if(event === 'groups.update')console.dir(7.22);
|
|
||||||
baseURL = instance?.url;
|
baseURL = instance?.url;
|
||||||
}
|
}
|
||||||
if(event === 'groups.update')console.dir(7.3);
|
|
||||||
if (enabledLog) {
|
if (enabledLog) {
|
||||||
const logData = {
|
const logData = {
|
||||||
local: `${origin}.sendData-Webhook`,
|
local: `${origin}.sendData-Webhook`,
|
||||||
url: baseURL,
|
url: baseURL,
|
||||||
...webhookData,
|
...webhookData,
|
||||||
};
|
};
|
||||||
if(event === 'groups.update')console.dir(7.4);
|
|
||||||
this.logger.log(logData);
|
this.logger.log(logData);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(event === 'groups.update')console.dir(7.5);
|
|
||||||
if (instance?.enabled && regex.test(instance.url)) {
|
if (instance?.enabled && regex.test(instance.url)) {
|
||||||
if(event === 'groups.update')console.dir(7.6);
|
|
||||||
const httpService = axios.create({
|
const httpService = axios.create({
|
||||||
baseURL,
|
baseURL,
|
||||||
headers: webhookHeaders as Record<string, string> | undefined,
|
headers: webhookHeaders as Record<string, string> | undefined,
|
||||||
});
|
});
|
||||||
if(event === 'groups.update')console.dir(7.7);
|
|
||||||
console.dir({url:`${origin}.sendData-Webhook`, baseURL, serverUrl}, {depth: null})
|
|
||||||
if(event === 'groups.update')console.dir(7.8);
|
|
||||||
await this.retryWebhookRequest(httpService, webhookData, `${origin}.sendData-Webhook`, baseURL, serverUrl);
|
await this.retryWebhookRequest(httpService, webhookData, `${origin}.sendData-Webhook`, baseURL, serverUrl);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -144,7 +128,6 @@ export class WebhookController extends EventController implements EventControlle
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(event === 'groups.update')console.dir(8);
|
|
||||||
if (webhookConfig.GLOBAL?.ENABLED) {
|
if (webhookConfig.GLOBAL?.ENABLED) {
|
||||||
if (webhookConfig.EVENTS[we]) {
|
if (webhookConfig.EVENTS[we]) {
|
||||||
let globalURL = webhookConfig.GLOBAL.URL;
|
let globalURL = webhookConfig.GLOBAL.URL;
|
||||||
@ -191,7 +174,6 @@ export class WebhookController extends EventController implements EventControlle
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(event === 'groups.update')console.dir(9)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async retryWebhookRequest(
|
private async retryWebhookRequest(
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
import { RouterBroker } from '@api/abstract/abstract.router';
|
|
||||||
import { OfferCallDto } from '@api/dto/call.dto';
|
|
||||||
import { callController } from '@api/server.module';
|
|
||||||
import { offerCallSchema } from '@validate/validate.schema';
|
|
||||||
import { RequestHandler, Router } from 'express';
|
|
||||||
|
|
||||||
import { HttpStatus } from './index.router';
|
|
||||||
|
|
||||||
export class CallRouter extends RouterBroker {
|
|
||||||
constructor(...guards: RequestHandler[]) {
|
|
||||||
super();
|
|
||||||
this.router.post(this.routerPath('offer'), ...guards, async (req, res) => {
|
|
||||||
const response = await this.dataValidate<OfferCallDto>({
|
|
||||||
request: req,
|
|
||||||
schema: offerCallSchema,
|
|
||||||
ClassRef: OfferCallDto,
|
|
||||||
execute: (instance, data) => callController.offerCall(instance, data),
|
|
||||||
});
|
|
||||||
|
|
||||||
return res.status(HttpStatus.CREATED).json(response);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public readonly router: Router = Router();
|
|
||||||
}
|
|
@ -12,7 +12,6 @@ import mimeTypes from 'mime-types';
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import { BusinessRouter } from './business.router';
|
import { BusinessRouter } from './business.router';
|
||||||
import { CallRouter } from './call.router';
|
|
||||||
import { ChatRouter } from './chat.router';
|
import { ChatRouter } from './chat.router';
|
||||||
import { GroupRouter } from './group.router';
|
import { GroupRouter } from './group.router';
|
||||||
import { HealthRouter } from './health.router';
|
import { HealthRouter } from './health.router';
|
||||||
@ -58,8 +57,6 @@ router.get('/assets/*', (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
console.dir(new HealthRouter().router, { depth: null });
|
|
||||||
|
|
||||||
router
|
router
|
||||||
.use((req, res, next) => telemetry.collectTelemetry(req, res, next))
|
.use((req, res, next) => telemetry.collectTelemetry(req, res, next))
|
||||||
|
|
||||||
@ -85,7 +82,6 @@ router
|
|||||||
.use('', new HealthRouter().router)
|
.use('', new HealthRouter().router)
|
||||||
.use('/instance', new InstanceRouter(configService, ...guards).router)
|
.use('/instance', new InstanceRouter(configService, ...guards).router)
|
||||||
.use('/message', new MessageRouter(...guards).router)
|
.use('/message', new MessageRouter(...guards).router)
|
||||||
.use('/call', new CallRouter(...guards).router)
|
|
||||||
.use('/chat', new ChatRouter(...guards).router)
|
.use('/chat', new ChatRouter(...guards).router)
|
||||||
.use('/business', new BusinessRouter(...guards).router)
|
.use('/business', new BusinessRouter(...guards).router)
|
||||||
.use('/group', new GroupRouter(...guards).router)
|
.use('/group', new GroupRouter(...guards).router)
|
||||||
|
@ -4,7 +4,6 @@ import { eventEmitter } from '@config/event.config';
|
|||||||
import { Logger } from '@config/logger.config';
|
import { Logger } from '@config/logger.config';
|
||||||
|
|
||||||
import { BusinessController } from './controllers/business.controller';
|
import { BusinessController } from './controllers/business.controller';
|
||||||
import { CallController } from './controllers/call.controller';
|
|
||||||
import { ChatController } from './controllers/chat.controller';
|
import { ChatController } from './controllers/chat.controller';
|
||||||
import { GroupController } from './controllers/group.controller';
|
import { GroupController } from './controllers/group.controller';
|
||||||
import { HealthController } from './controllers/health.controller';
|
import { HealthController } from './controllers/health.controller';
|
||||||
@ -98,7 +97,6 @@ export const instanceController = new InstanceController(
|
|||||||
providerFiles,
|
providerFiles,
|
||||||
);
|
);
|
||||||
export const sendMessageController = new SendMessageController(waMonitor);
|
export const sendMessageController = new SendMessageController(waMonitor);
|
||||||
export const callController = new CallController(waMonitor);
|
|
||||||
export const chatController = new ChatController(waMonitor);
|
export const chatController = new ChatController(waMonitor);
|
||||||
export const businessController = new BusinessController(waMonitor);
|
export const businessController = new BusinessController(waMonitor);
|
||||||
export const groupController = new GroupController(waMonitor);
|
export const groupController = new GroupController(waMonitor);
|
||||||
|
@ -439,7 +439,6 @@ export class ChannelStartupService {
|
|||||||
const expose = this.configService.get<Auth>('AUTHENTICATION').EXPOSE_IN_FETCH_INSTANCES;
|
const expose = this.configService.get<Auth>('AUTHENTICATION').EXPOSE_IN_FETCH_INSTANCES;
|
||||||
|
|
||||||
const instanceApikey = this.token || 'Apikey not found';
|
const instanceApikey = this.token || 'Apikey not found';
|
||||||
if(event === Events.GROUPS_UPDATE )console.dir(2);
|
|
||||||
await eventManager.emit({
|
await eventManager.emit({
|
||||||
instanceName: this.instance.name,
|
instanceName: this.instance.name,
|
||||||
origin: ChannelStartupService.name,
|
origin: ChannelStartupService.name,
|
||||||
|
4
src/cache/rediscache.client.ts
vendored
4
src/cache/rediscache.client.ts
vendored
@ -40,7 +40,9 @@ class Redis {
|
|||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.client.connect().then(()=> {this.logger.verbose("Attempting redis connection")});
|
this.client.connect().then(() => {
|
||||||
|
this.logger.verbose('Attempting redis connection');
|
||||||
|
});
|
||||||
this.connected = true;
|
this.connected = true;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.connected = false;
|
this.connected = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user