feat: meeting started webhook (#12764)
Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com>
This commit is contained in:
parent
038008502c
commit
2e0c9c7068
|
@ -2168,5 +2168,6 @@
|
||||||
"need_help": "Need help?",
|
"need_help": "Need help?",
|
||||||
"troubleshooter": "Troubleshooter",
|
"troubleshooter": "Troubleshooter",
|
||||||
"please_install_a_calendar": "Please install a calendar",
|
"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 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
|
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
|
||||||
}
|
}
|
||||||
|
|
|
@ -300,6 +300,12 @@ export async function handleConfirmation(args: {
|
||||||
triggerEvent: WebhookTriggerEvents.BOOKING_CREATED,
|
triggerEvent: WebhookTriggerEvents.BOOKING_CREATED,
|
||||||
teamId,
|
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({
|
const subscribersMeetingEnded = await getWebhooks({
|
||||||
userId: triggerForUser ? booking.userId : null,
|
userId: triggerForUser ? booking.userId : null,
|
||||||
eventTypeId: booking.eventTypeId,
|
eventTypeId: booking.eventTypeId,
|
||||||
|
@ -307,9 +313,14 @@ export async function handleConfirmation(args: {
|
||||||
teamId: booking.eventType?.teamId,
|
teamId: booking.eventType?.teamId,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
subscribersMeetingStarted.forEach((subscriber) => {
|
||||||
|
updatedBookings.forEach((booking) => {
|
||||||
|
scheduleTrigger(booking, subscriber.subscriberUrl, subscriber, WebhookTriggerEvents.MEETING_STARTED);
|
||||||
|
});
|
||||||
|
});
|
||||||
subscribersMeetingEnded.forEach((subscriber) => {
|
subscribersMeetingEnded.forEach((subscriber) => {
|
||||||
updatedBookings.forEach((booking) => {
|
updatedBookings.forEach((booking) => {
|
||||||
scheduleTrigger(booking, subscriber.subscriberUrl, subscriber);
|
scheduleTrigger(booking, subscriber.subscriberUrl, subscriber, WebhookTriggerEvents.MEETING_ENDED);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1416,6 +1416,12 @@ async function handler(
|
||||||
teamId,
|
teamId,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const subscriberOptionsMeetingStarted = {
|
||||||
|
userId: triggerForUser ? organizerUser.id : null,
|
||||||
|
eventTypeId,
|
||||||
|
triggerEvent: WebhookTriggerEvents.MEETING_STARTED,
|
||||||
|
teamId,
|
||||||
|
};
|
||||||
const handleSeats = async () => {
|
const handleSeats = async () => {
|
||||||
let resultBooking:
|
let resultBooking:
|
||||||
| (Partial<Booking> & {
|
| (Partial<Booking> & {
|
||||||
|
@ -2693,13 +2699,28 @@ async function handler(
|
||||||
if (isConfirmedByDefault) {
|
if (isConfirmedByDefault) {
|
||||||
try {
|
try {
|
||||||
const subscribersMeetingEnded = await getWebhooks(subscriberOptionsMeetingEnded);
|
const subscribersMeetingEnded = await getWebhooks(subscriberOptionsMeetingEnded);
|
||||||
|
const subscribersMeetingStarted = await getWebhooks(subscriberOptionsMeetingStarted);
|
||||||
|
|
||||||
subscribersMeetingEnded.forEach((subscriber) => {
|
subscribersMeetingEnded.forEach((subscriber) => {
|
||||||
if (rescheduleUid && originalRescheduledBooking) {
|
if (rescheduleUid && originalRescheduledBooking) {
|
||||||
cancelScheduledJobs(originalRescheduledBooking, undefined, true);
|
cancelScheduledJobs(originalRescheduledBooking, undefined, true);
|
||||||
}
|
}
|
||||||
if (booking && booking.status === BookingStatus.ACCEPTED) {
|
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) {
|
} catch (error) {
|
||||||
|
|
|
@ -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_RESCHEDULED, label: "booking_rescheduled" },
|
||||||
{ value: WebhookTriggerEvents.BOOKING_PAID, label: "booking_paid" },
|
{ value: WebhookTriggerEvents.BOOKING_PAID, label: "booking_paid" },
|
||||||
{ value: WebhookTriggerEvents.MEETING_ENDED, label: "meeting_ended" },
|
{ value: WebhookTriggerEvents.MEETING_ENDED, label: "meeting_ended" },
|
||||||
|
{ value: WebhookTriggerEvents.MEETING_STARTED, label: "meeting_started" },
|
||||||
{ value: WebhookTriggerEvents.RECORDING_READY, label: "recording_ready" },
|
{ value: WebhookTriggerEvents.RECORDING_READY, label: "recording_ready" },
|
||||||
],
|
],
|
||||||
"routing-forms": [{ value: WebhookTriggerEvents.FORM_SUBMITTED, label: "form_submitted" }],
|
"routing-forms": [{ value: WebhookTriggerEvents.FORM_SUBMITTED, label: "form_submitted" }],
|
||||||
|
|
|
@ -10,6 +10,7 @@ export const WEBHOOK_TRIGGER_EVENTS_GROUPED_BY_APP = {
|
||||||
WebhookTriggerEvents.BOOKING_PAID,
|
WebhookTriggerEvents.BOOKING_PAID,
|
||||||
WebhookTriggerEvents.BOOKING_PAYMENT_INITIATED,
|
WebhookTriggerEvents.BOOKING_PAYMENT_INITIATED,
|
||||||
WebhookTriggerEvents.MEETING_ENDED,
|
WebhookTriggerEvents.MEETING_ENDED,
|
||||||
|
WebhookTriggerEvents.MEETING_STARTED,
|
||||||
WebhookTriggerEvents.BOOKING_REQUESTED,
|
WebhookTriggerEvents.BOOKING_REQUESTED,
|
||||||
WebhookTriggerEvents.BOOKING_REJECTED,
|
WebhookTriggerEvents.BOOKING_REJECTED,
|
||||||
WebhookTriggerEvents.RECORDING_READY,
|
WebhookTriggerEvents.RECORDING_READY,
|
||||||
|
|
|
@ -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
|
//schedule job for already existing bookings
|
||||||
const where: Prisma.BookingWhereInput = {};
|
const where: Prisma.BookingWhereInput = {};
|
||||||
if (teamId) {
|
if (teamId) {
|
||||||
|
@ -64,10 +67,15 @@ export async function addSubscription({
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const booking of bookings) {
|
for (const booking of bookings) {
|
||||||
scheduleTrigger(booking, createSubscription.subscriberUrl, {
|
scheduleTrigger(
|
||||||
id: createSubscription.id,
|
booking,
|
||||||
appId: createSubscription.appId,
|
createSubscription.subscriberUrl,
|
||||||
});
|
{
|
||||||
|
id: createSubscription.id,
|
||||||
|
appId: createSubscription.appId,
|
||||||
|
},
|
||||||
|
triggerEvent
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,12 +281,13 @@ export async function listBookings(
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function scheduleTrigger(
|
export async function scheduleTrigger(
|
||||||
booking: { id: number; endTime: Date; scheduledJobs: string[] },
|
booking: { id: number; endTime: Date; startTime: Date; scheduledJobs: string[] },
|
||||||
subscriberUrl: string,
|
subscriberUrl: string,
|
||||||
subscriber: { id: string; appId: string | null }
|
subscriber: { id: string; appId: string | null },
|
||||||
|
triggerEvent: WebhookTriggerEvents
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
const payload = JSON.stringify({ triggerEvent: WebhookTriggerEvents.MEETING_ENDED, ...booking });
|
const payload = JSON.stringify({ triggerEvent, ...booking });
|
||||||
const jobName = `${subscriber.appId}_${subscriber.id}`;
|
const jobName = `${subscriber.appId}_${subscriber.id}`;
|
||||||
|
|
||||||
// add scheduled job to database
|
// add scheduled job to database
|
||||||
|
@ -286,7 +295,7 @@ export async function scheduleTrigger(
|
||||||
data: {
|
data: {
|
||||||
jobName,
|
jobName,
|
||||||
payload,
|
payload,
|
||||||
startAfter: booking.endTime,
|
startAfter: triggerEvent === WebhookTriggerEvents.MEETING_ENDED ? booking.endTime : booking.startTime,
|
||||||
subscriberUrl,
|
subscriberUrl,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
-- AlterEnum
|
||||||
|
ALTER TYPE "WebhookTriggerEvents" ADD VALUE 'MEETING_STARTED';
|
|
@ -570,6 +570,7 @@ enum WebhookTriggerEvents {
|
||||||
BOOKING_REJECTED
|
BOOKING_REJECTED
|
||||||
FORM_SUBMITTED
|
FORM_SUBMITTED
|
||||||
MEETING_ENDED
|
MEETING_ENDED
|
||||||
|
MEETING_STARTED
|
||||||
RECORDING_READY
|
RECORDING_READY
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user