From a5da557dd942fdcbe3191282b0695ed56346d4fe Mon Sep 17 00:00:00 2001 From: shancheas Date: Thu, 19 Jun 2025 14:40:17 +0700 Subject: [PATCH] feat: implement booking expired notification in WhatsApp service --- .../midtrans-transaction-callback.handler.ts | 16 ++++++ src/services/whatsapp/whatsapp.service.ts | 51 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/src/modules/transaction/transaction/domain/usecases/handlers/midtrans-transaction-callback.handler.ts b/src/modules/transaction/transaction/domain/usecases/handlers/midtrans-transaction-callback.handler.ts index 35f9214..c2cec81 100644 --- a/src/modules/transaction/transaction/domain/usecases/handlers/midtrans-transaction-callback.handler.ts +++ b/src/modules/transaction/transaction/domain/usecases/handlers/midtrans-transaction-callback.handler.ts @@ -77,6 +77,22 @@ export class MidtransCallbackHandler await whatsappService.bookingCreated(payload); } + if ( + transaction.status === STATUS.EXPIRED && + transaction.type === TransactionType.ONLINE + ) { + const whatsappService = new WhatsappService(); + const formattedDate = moment(transaction.booking_date); + const payload = { + id: transaction.id, + phone: transaction.customer_phone, + code: transaction.invoice_code, + name: transaction.customer_name, + time: formattedDate.valueOf(), + }; + await whatsappService.bookingExpired(payload); + } + this.eventBus.publish( new TransactionChangeStatusEvent({ id: data_id, diff --git a/src/services/whatsapp/whatsapp.service.ts b/src/services/whatsapp/whatsapp.service.ts index 61785f9..85ec5e6 100644 --- a/src/services/whatsapp/whatsapp.service.ts +++ b/src/services/whatsapp/whatsapp.service.ts @@ -198,6 +198,57 @@ export class WhatsappService { ); } + async bookingExpired(data: WhatsappBookingCreate) { + const momentDate = moment(data.time); + const fallbackValue = momentDate.locale('id').format('dddd, DD MMMM YYYY'); + // const dayOfWeek = momentDate.day(); + // const dayOfMonth = momentDate.date(); + // const year = momentDate.year(); + // const month = momentDate.month() + 1; + // const hour = momentDate.hour(); + // const minute = momentDate.minute(); + + const payload = { + messaging_product: 'whatsapp', + to: phoneNumberOnly(data.phone), // recipient's phone number + type: 'template', + template: { + name: 'booking_expired', + language: { + code: 'id', // language code + }, + components: [ + { + type: 'body', + parameters: [ + { + type: 'text', + parameter_name: 'customer', + text: data.name, // replace with name variable + }, + { + type: 'text', + parameter_name: 'code', + text: data.code, // replace with queue_code variable + }, + { + type: 'text', + parameter_name: 'booking_date', + text: fallbackValue, + }, + ], + }, + ], + }, + }; + + const response = await this.sendMessage(payload); + if (response) + Logger.log( + `Notification register Booking for ${data.code} send to ${data.phone}`, + ); + } + async rescheduleCreated(data: WhatsappBookingCreate) { const imageUrl = `${BOOKING_QR_URL}${data.id}`;