Skip to content

Commit 8d675fd

Browse files
authored
feat: Add AssignmentReason to BOOKING_CREATED webhook (calcom#21315)
* AssignmentREasonRecorder methods return the reason generated * Add assignmentReason to `EventPayloadType` * Pass `assignmentReason` to webhook payload data * Undo constants commit
1 parent a5639a8 commit 8d675fd

2 files changed

Lines changed: 36 additions & 10 deletions

File tree

packages/features/bookings/lib/handleNewBooking.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ import { getTranslation } from "@calcom/lib/server/i18n";
6868
import { WorkflowRepository } from "@calcom/lib/server/repository/workflow";
6969
import { getTimeFormatStringFromUserTimeFormat } from "@calcom/lib/timeFormat";
7070
import prisma from "@calcom/prisma";
71+
import type { AssignmentReasonEnum } from "@calcom/prisma/enums";
7172
import { BookingStatus, SchedulingType, WebhookTriggerEvents } from "@calcom/prisma/enums";
7273
import { CreationSource } from "@calcom/prisma/enums";
7374
import {
@@ -1301,6 +1302,8 @@ async function handler(
13011302
})
13021303
);
13031304

1305+
let assignmentReason: { reasonEnum: AssignmentReasonEnum; reasonString: string } | undefined;
1306+
13041307
try {
13051308
if (!isDryRun) {
13061309
booking = await createBooking({
@@ -1341,15 +1344,15 @@ async function handler(
13411344
// If it's a round robin event, record the reason for the host assignment
13421345
if (eventType.schedulingType === SchedulingType.ROUND_ROBIN) {
13431346
if (reqBody.crmOwnerRecordType && reqBody.crmAppSlug && contactOwnerEmail && routingFormResponseId) {
1344-
await AssignmentReasonRecorder.CRMOwnership({
1347+
assignmentReason = await AssignmentReasonRecorder.CRMOwnership({
13451348
bookingId: booking.id,
13461349
crmAppSlug: reqBody.crmAppSlug,
13471350
teamMemberEmail: contactOwnerEmail,
13481351
recordType: reqBody.crmOwnerRecordType,
13491352
routingFormResponseId,
13501353
});
13511354
} else if (routingFormResponseId && teamId) {
1352-
await AssignmentReasonRecorder.routingFormRoute({
1355+
assignmentReason = await AssignmentReasonRecorder.routingFormRoute({
13531356
bookingId: booking.id,
13541357
routingFormResponseId,
13551358
organizerId: organizerUser.id,
@@ -1885,6 +1888,7 @@ async function handler(
18851888
status: "ACCEPTED",
18861889
smsReminderNumber: booking?.smsReminderNumber || undefined,
18871890
rescheduledBy: reqBody.rescheduledBy,
1891+
...(assignmentReason ? { assignmentReason: [assignmentReason] } : {}),
18881892
};
18891893

18901894
if (bookingRequiresPayment) {

packages/features/ee/round-robin/assignmentReason/AssignmentReasonRecorder.ts

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,21 @@ export default class AssignmentReasonRecorder {
113113
}
114114
}
115115

116+
const reasonEnum = AssignmentReasonEnum.ROUTING_FORM_ROUTING;
117+
const reasonString = attributeValues.join(", ");
118+
116119
await prisma.assignmentReason.create({
117120
data: {
118121
bookingId: bookingId,
119-
reasonEnum: AssignmentReasonEnum.ROUTING_FORM_ROUTING,
120-
reasonString: attributeValues.join(", "),
122+
reasonEnum,
123+
reasonString,
121124
},
122125
});
126+
127+
return {
128+
reasonEnum,
129+
reasonString,
130+
};
123131
}
124132

125133
// Separate method to handle rerouting
@@ -148,13 +156,20 @@ export default class AssignmentReasonRecorder {
148156

149157
if (!crmRoutingReason || !crmRoutingReason.assignmentReason) return;
150158

159+
const { reasonEnum, assignmentReason } = crmRoutingReason;
160+
151161
await prisma.assignmentReason.create({
152162
data: {
153163
bookingId,
154-
reasonEnum: crmRoutingReason.reasonEnum,
155-
reasonString: crmRoutingReason.assignmentReason,
164+
reasonEnum,
165+
reasonString: assignmentReason,
156166
},
157167
});
168+
169+
return {
170+
reasonEnum,
171+
reasonString: assignmentReason,
172+
};
158173
}
159174
static roundRobinReassignment = withReporting(
160175
AssignmentReasonRecorder._roundRobinReassignment,
@@ -180,19 +195,26 @@ export default class AssignmentReasonRecorder {
180195
},
181196
});
182197

198+
const reasonEnum =
199+
reassignmentType === RRReassignmentType.MANUAL
200+
? AssignmentReasonEnum.REASSIGNED
201+
: AssignmentReasonEnum.RR_REASSIGNED;
202+
183203
const reasonString = `Reassigned by: ${reassignedBy?.username || "team member"}. ${
184204
reassignReason ? `Reason: ${reassignReason}` : ""
185205
}`;
186206

187207
await prisma.assignmentReason.create({
188208
data: {
189209
bookingId: bookingId,
190-
reasonEnum:
191-
reassignmentType === RRReassignmentType.MANUAL
192-
? AssignmentReasonEnum.REASSIGNED
193-
: AssignmentReasonEnum.RR_REASSIGNED,
210+
reasonEnum,
194211
reasonString,
195212
},
196213
});
214+
215+
return {
216+
reasonEnum,
217+
reasonString,
218+
};
197219
}
198220
}

0 commit comments

Comments
 (0)