diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c1be220..8d56ec43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 1.4.0 (homolog) + +### Features + +* Added connection functionality via pairing code + # 1.3.2 (2023-07-21 17:19) ### Fixed diff --git a/package.json b/package.json index 7bc6f476..92745ead 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "evolution-api", - "version": "1.3.2", + "version": "1.4.0", "description": "Rest api for communication with WhatsApp", "main": "./dist/src/main.js", "scripts": { diff --git a/src/validate/validate.schema.ts b/src/validate/validate.schema.ts index 2b9ce19a..ed7ab2e0 100644 --- a/src/validate/validate.schema.ts +++ b/src/validate/validate.schema.ts @@ -58,6 +58,7 @@ export const instanceNameSchema: JSONSchema7 = { }, }, qrcode: { type: 'boolean', enum: [true, false] }, + number: { type: 'string', pattern: '^\\d+[\\.@\\w-]+' }, token: { type: 'string' }, }, ...isNotEmpty('instanceName'), diff --git a/src/whatsapp/controllers/instance.controller.ts b/src/whatsapp/controllers/instance.controller.ts index 75911848..b54858b2 100644 --- a/src/whatsapp/controllers/instance.controller.ts +++ b/src/whatsapp/controllers/instance.controller.ts @@ -34,6 +34,7 @@ export class InstanceController { webhook_by_events, events, qrcode, + number, token, chatwoot_account_id, chatwoot_token, @@ -102,10 +103,16 @@ export class InstanceController { if (!chatwoot_account_id || !chatwoot_token || !chatwoot_url) { let getQrcode: wa.QrCode; + let getParingCode: string; if (qrcode) { this.logger.verbose('creating qrcode'); await instance.connectToWhatsapp(); + if (number) { + this.logger.verbose('creating number'); + await delay(5000); + getParingCode = await instance.client.requestPairingCode(number); + } await delay(2000); getQrcode = instance.qrCode; } @@ -120,6 +127,7 @@ export class InstanceController { webhook, webhook_by_events, events: getEvents, + pairingCode: getParingCode, qrcode: getQrcode, }); @@ -132,6 +140,7 @@ export class InstanceController { webhook, webhook_by_events, events: getEvents, + pairingCode: getParingCode, qrcode: getQrcode, }; } @@ -195,7 +204,7 @@ export class InstanceController { }; } - public async connectToWhatsapp({ instanceName }: InstanceDto) { + public async connectToWhatsapp({ instanceName, number = null }: InstanceDto) { try { this.logger.verbose( 'requested connectToWhatsapp from ' + instanceName + ' instance', @@ -210,8 +219,17 @@ export class InstanceController { case 'close': this.logger.verbose('connecting'); await instance.connectToWhatsapp(); + let pairingCode = null; + if (number) { + this.logger.verbose('creating pairing code'); + await delay(5000); + pairingCode = await instance.client.requestPairingCode(number); + } await delay(2000); - return instance.qrCode; + return { + pairingCode, + ...instance.qrCode, + }; case 'connecting': return instance.qrCode; default: diff --git a/src/whatsapp/dto/instance.dto.ts b/src/whatsapp/dto/instance.dto.ts index ce282e03..9e8a7ec3 100644 --- a/src/whatsapp/dto/instance.dto.ts +++ b/src/whatsapp/dto/instance.dto.ts @@ -4,6 +4,7 @@ export class InstanceDto { webhook_by_events?: boolean; events?: string[]; qrcode?: boolean; + number?: string; token?: string; chatwoot_account_id?: string; chatwoot_token?: string; diff --git a/src/whatsapp/routers/instance.router.ts b/src/whatsapp/routers/instance.router.ts index 850ffebd..a984a89c 100644 --- a/src/whatsapp/routers/instance.router.ts +++ b/src/whatsapp/routers/instance.router.ts @@ -60,7 +60,8 @@ export class InstanceRouter extends RouterBroker { request: req, schema: instanceNameSchema, ClassRef: InstanceDto, - execute: (instance) => instanceController.connectToWhatsapp(instance), + execute: (instance, data) => + instanceController.connectToWhatsapp(instance, data), }); return res.status(HttpStatus.OK).json(response); diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index 3851f067..ab94d691 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -545,6 +545,11 @@ export class WAStartupService { return this.eventEmitter.emit('no.connection', this.instance.name); } + // pairing code + // await delay(5000); + // const code = await this.client.requestPairingCode('557499879409'); + // console.log(`Pairing code: ${code}`); + this.logger.verbose('Incrementing QR code count'); this.instance.qrcode.count++; diff --git a/src/whatsapp/types/wa.types.ts b/src/whatsapp/types/wa.types.ts index 6869545f..fc71de31 100644 --- a/src/whatsapp/types/wa.types.ts +++ b/src/whatsapp/types/wa.types.ts @@ -25,7 +25,11 @@ export enum Events { } export declare namespace wa { - export type QrCode = { count?: number; base64?: string; code?: string }; + export type QrCode = { + count?: number; + base64?: string; + code?: string; + }; export type Instance = { qrcode?: QrCode; authState?: { state: AuthenticationState; saveCreds: () => void };