feat: meeting started webhook (#12764)

Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com>
This commit is contained in:
Somay Chauhan 2023-12-19 20:22:35 +05:30 committed by GitHub
parent 038008502c
commit 2e0c9c7068
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 58 additions and 11 deletions

View File

@ -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 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}

View File

@ -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);
});
});

View File

@ -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<Booking> & {
@ -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) {

View File

@ -39,6 +39,7 @@ const WEBHOOK_TRIGGER_EVENTS_GROUPED_BY_APP_V2: Record<string, WebhookTriggerEve
{ value: WebhookTriggerEvents.BOOKING_RESCHEDULED, label: "booking_rescheduled" },
{ value: WebhookTriggerEvents.BOOKING_PAID, label: "booking_paid" },
{ value: WebhookTriggerEvents.MEETING_ENDED, label: "meeting_ended" },
{ value: WebhookTriggerEvents.MEETING_STARTED, label: "meeting_started" },
{ value: WebhookTriggerEvents.RECORDING_READY, label: "recording_ready" },
],
"routing-forms": [{ value: WebhookTriggerEvents.FORM_SUBMITTED, label: "form_submitted" }],

View File

@ -10,6 +10,7 @@ export const WEBHOOK_TRIGGER_EVENTS_GROUPED_BY_APP = {
WebhookTriggerEvents.BOOKING_PAID,
WebhookTriggerEvents.BOOKING_PAYMENT_INITIATED,
WebhookTriggerEvents.MEETING_ENDED,
WebhookTriggerEvents.MEETING_STARTED,
WebhookTriggerEvents.BOOKING_REQUESTED,
WebhookTriggerEvents.BOOKING_REJECTED,
WebhookTriggerEvents.RECORDING_READY,

View File

@ -45,7 +45,10 @@ export async function addSubscription({
},
});
if (triggerEvent === WebhookTriggerEvents.MEETING_ENDED) {
if (
triggerEvent === WebhookTriggerEvents.MEETING_ENDED ||
triggerEvent === WebhookTriggerEvents.MEETING_STARTED
) {
//schedule job for already existing bookings
const where: Prisma.BookingWhereInput = {};
if (teamId) {
@ -64,10 +67,15 @@ export async function addSubscription({
});
for (const booking of bookings) {
scheduleTrigger(booking, createSubscription.subscriberUrl, {
id: createSubscription.id,
appId: createSubscription.appId,
});
scheduleTrigger(
booking,
createSubscription.subscriberUrl,
{
id: createSubscription.id,
appId: createSubscription.appId,
},
triggerEvent
);
}
}
@ -273,12 +281,13 @@ export async function listBookings(
}
export async function scheduleTrigger(
booking: { id: number; endTime: Date; scheduledJobs: string[] },
booking: { id: number; endTime: Date; startTime: Date; scheduledJobs: string[] },
subscriberUrl: string,
subscriber: { id: string; appId: string | null }
subscriber: { id: string; appId: string | null },
triggerEvent: WebhookTriggerEvents
) {
try {
const payload = JSON.stringify({ triggerEvent: WebhookTriggerEvents.MEETING_ENDED, ...booking });
const payload = JSON.stringify({ triggerEvent, ...booking });
const jobName = `${subscriber.appId}_${subscriber.id}`;
// add scheduled job to database
@ -286,7 +295,7 @@ export async function scheduleTrigger(
data: {
jobName,
payload,
startAfter: booking.endTime,
startAfter: triggerEvent === WebhookTriggerEvents.MEETING_ENDED ? booking.endTime : booking.startTime,
subscriberUrl,
},
});

View File

@ -0,0 +1,2 @@
-- AlterEnum
ALTER TYPE "WebhookTriggerEvents" ADD VALUE 'MEETING_STARTED';

View File

@ -570,6 +570,7 @@ enum WebhookTriggerEvents {
BOOKING_REJECTED
FORM_SUBMITTED
MEETING_ENDED
MEETING_STARTED
RECORDING_READY
}