From 2e0c9c7068c6d6f29a9261ed9d7fe6cab6c3954f Mon Sep 17 00:00:00 2001 From: Somay Chauhan Date: Tue, 19 Dec 2023 20:22:35 +0530 Subject: [PATCH] feat: meeting started webhook (#12764) Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com> --- apps/web/public/static/locales/en/common.json | 1 + .../bookings/lib/handleConfirmation.ts | 13 ++++++++- .../features/bookings/lib/handleNewBooking.ts | 23 +++++++++++++++- .../webhooks/components/WebhookForm.tsx | 1 + packages/features/webhooks/lib/constants.ts | 1 + .../features/webhooks/lib/scheduleTrigger.ts | 27 ++++++++++++------- .../migration.sql | 2 ++ packages/prisma/schema.prisma | 1 + 8 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 packages/prisma/migrations/20231213083720_add_meeting_started_webhook/migration.sql diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index 9522b32d74..2b956a25ff 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -2168,5 +2168,6 @@ "need_help": "Need help?", "troubleshooter": "Troubleshooter", "please_install_a_calendar": "Please install a calendar", + "meeting_started": "Meeting Started", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" } diff --git a/packages/features/bookings/lib/handleConfirmation.ts b/packages/features/bookings/lib/handleConfirmation.ts index cc71c27041..fd23e80699 100644 --- a/packages/features/bookings/lib/handleConfirmation.ts +++ b/packages/features/bookings/lib/handleConfirmation.ts @@ -300,6 +300,12 @@ export async function handleConfirmation(args: { triggerEvent: WebhookTriggerEvents.BOOKING_CREATED, teamId, }); + const subscribersMeetingStarted = await getWebhooks({ + userId: triggerForUser ? booking.userId : null, + eventTypeId: booking.eventTypeId, + triggerEvent: WebhookTriggerEvents.MEETING_STARTED, + teamId: booking.eventType?.teamId, + }); const subscribersMeetingEnded = await getWebhooks({ userId: triggerForUser ? booking.userId : null, eventTypeId: booking.eventTypeId, @@ -307,9 +313,14 @@ export async function handleConfirmation(args: { teamId: booking.eventType?.teamId, }); + subscribersMeetingStarted.forEach((subscriber) => { + updatedBookings.forEach((booking) => { + scheduleTrigger(booking, subscriber.subscriberUrl, subscriber, WebhookTriggerEvents.MEETING_STARTED); + }); + }); subscribersMeetingEnded.forEach((subscriber) => { updatedBookings.forEach((booking) => { - scheduleTrigger(booking, subscriber.subscriberUrl, subscriber); + scheduleTrigger(booking, subscriber.subscriberUrl, subscriber, WebhookTriggerEvents.MEETING_ENDED); }); }); diff --git a/packages/features/bookings/lib/handleNewBooking.ts b/packages/features/bookings/lib/handleNewBooking.ts index 6deee33c56..9d6249474d 100644 --- a/packages/features/bookings/lib/handleNewBooking.ts +++ b/packages/features/bookings/lib/handleNewBooking.ts @@ -1416,6 +1416,12 @@ async function handler( teamId, }; + const subscriberOptionsMeetingStarted = { + userId: triggerForUser ? organizerUser.id : null, + eventTypeId, + triggerEvent: WebhookTriggerEvents.MEETING_STARTED, + teamId, + }; const handleSeats = async () => { let resultBooking: | (Partial & { @@ -2693,13 +2699,28 @@ async function handler( if (isConfirmedByDefault) { try { const subscribersMeetingEnded = await getWebhooks(subscriberOptionsMeetingEnded); + const subscribersMeetingStarted = await getWebhooks(subscriberOptionsMeetingStarted); subscribersMeetingEnded.forEach((subscriber) => { if (rescheduleUid && originalRescheduledBooking) { cancelScheduledJobs(originalRescheduledBooking, undefined, true); } if (booking && booking.status === BookingStatus.ACCEPTED) { - scheduleTrigger(booking, subscriber.subscriberUrl, subscriber); + scheduleTrigger(booking, subscriber.subscriberUrl, subscriber, WebhookTriggerEvents.MEETING_ENDED); + } + }); + + subscribersMeetingStarted.forEach((subscriber) => { + if (rescheduleUid && originalRescheduledBooking) { + cancelScheduledJobs(originalRescheduledBooking, undefined, true); + } + if (booking && booking.status === BookingStatus.ACCEPTED) { + scheduleTrigger( + booking, + subscriber.subscriberUrl, + subscriber, + WebhookTriggerEvents.MEETING_STARTED + ); } }); } catch (error) { diff --git a/packages/features/webhooks/components/WebhookForm.tsx b/packages/features/webhooks/components/WebhookForm.tsx index d599f77394..d55061b06f 100644 --- a/packages/features/webhooks/components/WebhookForm.tsx +++ b/packages/features/webhooks/components/WebhookForm.tsx @@ -39,6 +39,7 @@ const WEBHOOK_TRIGGER_EVENTS_GROUPED_BY_APP_V2: Record