42 lines
1.6 KiB
JavaScript
42 lines
1.6 KiB
JavaScript
const Event = require('../../models/Event');
|
|
const { registrationHref } = require('../../utils/micrositeBuild');
|
|
const { generateConciergeResponse } = require('../conciergeCall2.service');
|
|
|
|
/**
|
|
* registration: cards-first. Return a registration link card built from the
|
|
* event's website/registration config. Falls back to Call 2 when no link can
|
|
* be resolved (e.g. process-only questions).
|
|
*/
|
|
module.exports = async function registrationHandler({ plan, bot, event, session, turnLog }) {
|
|
let ev = null;
|
|
try {
|
|
ev = await Event.findById(bot.event).select('website settings').lean();
|
|
} catch (err) {
|
|
console.warn('[concierge][registration] event load failed:', err?.message || err);
|
|
}
|
|
|
|
const website = ev?.website || {};
|
|
const url = ev ? registrationHref({ _id: bot.event, website }, website) : '';
|
|
const settings = ev?.settings || {};
|
|
const isClosed = settings.registrationOpen === false;
|
|
const deadline = settings.registrationDeadline
|
|
? new Date(settings.registrationDeadline).toISOString()
|
|
: null;
|
|
|
|
if (url) {
|
|
const cards = [
|
|
{
|
|
type: 'registration',
|
|
data: { url, label: isClosed ? 'Registration closed' : 'Register now', open: !isClosed, deadline },
|
|
},
|
|
];
|
|
const reply = isClosed
|
|
? `Registration is currently closed for ${event?.name || 'this event'}.`
|
|
: `You can register for ${event?.name || 'this event'} using the button below.`;
|
|
return { reply, cards, usedCall2: false };
|
|
}
|
|
|
|
const call2 = await generateConciergeResponse({ bot, event, session, plan, turnLog });
|
|
return { reply: call2.reply, usedCall2: true, usage: call2.usage, modelId: call2.modelId };
|
|
};
|