mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-25 01:48:39 -06:00
feat: adiciona controlador de chamadas
Adiciona o controlador de chamadas para oferecer chamadas falsas. - Adiciona o arquivo `call.controller.ts` com a classe `CallController` que possui o método `offerCall` para oferecer chamadas falsas. - Adiciona o arquivo `call.dto.ts` com as classes `Metadata` e `OfferCallDto` para definir os dados da chamada. - Atualiza o arquivo `sendMessage.dto.ts` removendo a classe `OfferCallDto`. - Atualiza o arquivo `whatsapp.baileys.service.ts` importando a classe `OfferCallDto` corretamente e atualizando o método `offerCall` para receber os parâmetros corretos. - Adiciona o arquivo `call.router.ts` com a classe `CallRouter` para lidar com as rotas relacionadas a chamadas. - Atualiza o arquivo `index.router.ts` para incluir as rotas relacionadas a chamadas.
This commit is contained in:
parent
0af00582f0
commit
bcf59a2015
11
src/api/controllers/call.controller.ts
Normal file
11
src/api/controllers/call.controller.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
8
src/api/dto/call.dto.ts
Normal file
8
src/api/dto/call.dto.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
export class Metadata {
|
||||||
|
number: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class OfferCallDto extends Metadata {
|
||||||
|
isVideo?: boolean;
|
||||||
|
callDuration?: number;
|
||||||
|
}
|
@ -46,11 +46,6 @@ export class Metadata {
|
|||||||
encoding?: boolean;
|
encoding?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class OfferCallDto extends Metadata {
|
|
||||||
isVideo?: boolean;
|
|
||||||
callDuration?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class SendTextDto extends Metadata {
|
export class SendTextDto extends Metadata {
|
||||||
text: string;
|
text: string;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { OfferCallDto } from '@api/dto/call.dto';
|
||||||
import {
|
import {
|
||||||
ArchiveChatDto,
|
ArchiveChatDto,
|
||||||
BlockUserDto,
|
BlockUserDto,
|
||||||
@ -32,7 +33,6 @@ import { HandleLabelDto, LabelDto } from '@api/dto/label.dto';
|
|||||||
import {
|
import {
|
||||||
ContactMessage,
|
ContactMessage,
|
||||||
MediaMessage,
|
MediaMessage,
|
||||||
OfferCallDto,
|
|
||||||
Options,
|
Options,
|
||||||
SendAudioDto,
|
SendAudioDto,
|
||||||
SendContactDto,
|
SendContactDto,
|
||||||
@ -1671,14 +1671,12 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async offerCall({ number, callDuration }: OfferCallDto) {
|
public async offerCall({ number, isVideo, callDuration }: OfferCallDto) {
|
||||||
const jid = this.createJid(number);
|
const jid = this.createJid(number);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const call = await this.client.offerCall(jid);
|
const call = await this.client.offerCall(jid, isVideo);
|
||||||
if (callDuration) {
|
setTimeout(() => this.client.terminateCall(call.id, call.to), callDuration * 1000);
|
||||||
setTimeout(() => this.client.terminateCall(call.id, call.to), callDuration * 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
return call;
|
return call;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
25
src/api/routes/call.router.ts
Normal file
25
src/api/routes/call.router.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import { RouterBroker } from '@api/abstract/abstract.router';
|
||||||
|
import { OfferCallDto } from '@api/dto/call.dto';
|
||||||
|
import { sendMessageController } 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) => sendMessageController.offerCall(instance, data),
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.status(HttpStatus.CREATED).json(response);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public readonly router: Router = Router();
|
||||||
|
}
|
@ -11,6 +11,7 @@ import fs from 'fs';
|
|||||||
import mime from 'mime';
|
import mime from 'mime';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
|
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 { InstanceRouter } from './instance.router';
|
import { InstanceRouter } from './instance.router';
|
||||||
@ -79,6 +80,7 @@ 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('/group', new GroupRouter(...guards).router)
|
.use('/group', new GroupRouter(...guards).router)
|
||||||
.use('/template', new TemplateRouter(configService, ...guards).router)
|
.use('/template', new TemplateRouter(configService, ...guards).router)
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { RouterBroker } from '@api/abstract/abstract.router';
|
import { RouterBroker } from '@api/abstract/abstract.router';
|
||||||
import {
|
import {
|
||||||
OfferCallDto,
|
|
||||||
SendAudioDto,
|
SendAudioDto,
|
||||||
SendButtonDto,
|
SendButtonDto,
|
||||||
SendContactDto,
|
SendContactDto,
|
||||||
@ -22,7 +21,6 @@ import {
|
|||||||
listMessageSchema,
|
listMessageSchema,
|
||||||
locationMessageSchema,
|
locationMessageSchema,
|
||||||
mediaMessageSchema,
|
mediaMessageSchema,
|
||||||
offerCallSchema,
|
|
||||||
pollMessageSchema,
|
pollMessageSchema,
|
||||||
reactionMessageSchema,
|
reactionMessageSchema,
|
||||||
statusMessageSchema,
|
statusMessageSchema,
|
||||||
@ -168,16 +166,6 @@ export class MessageRouter extends RouterBroker {
|
|||||||
execute: (instance, data) => sendMessageController.sendButtons(instance, data),
|
execute: (instance, data) => sendMessageController.sendButtons(instance, data),
|
||||||
});
|
});
|
||||||
|
|
||||||
return res.status(HttpStatus.CREATED).json(response);
|
|
||||||
})
|
|
||||||
.post(this.routerPath('offerCall'), ...guards, async (req, res) => {
|
|
||||||
const response = await this.dataValidate<OfferCallDto>({
|
|
||||||
request: req,
|
|
||||||
schema: offerCallSchema,
|
|
||||||
ClassRef: OfferCallDto,
|
|
||||||
execute: (instance, data) => sendMessageController.offerCall(instance, data),
|
|
||||||
});
|
|
||||||
|
|
||||||
return res.status(HttpStatus.CREATED).json(response);
|
return res.status(HttpStatus.CREATED).json(response);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user