Нет ничего волшебного или особенного в использовании intentMap
или создании одного обработчика намерений для каждого намерения.Все, что делает функция handleRequest()
, это смотрит на action.intent
, чтобы получить имя Intent, получить обработчик с этим именем из карты, вызвать его и, возможно, иметь дело с Promise, которое он возвращает.
Но еслиВы собираетесь нарушить соглашение, у вас должна быть очень веская причина для этого.Наличие одного обработчика намерений на каждое намерение позволяет очень четко определить, какой код выполняется для каждого соответствующего намерения, и это облегчает поддержку вашего кода.
Похоже, что причина, по которой вы хотите это сделать, заключается в том, чтозначительный дублирующий код между двумя обработчиками.В вашем примере это получает параметры date
и time
, но это может быть и многое другое.
Если это правда, делайте то, что программисты делали десятилетиями: выполняйте эти задачик функции, которая может быть вызвана из каждого обработчика.Так что ваши примеры могут выглядеть примерно так:
function getParameters( agent ){
return {
date: agent.parameters.date,
time: agent.parameters.time
}
}
function bookingHandler( agent ){
const {date, time} = getParameters( agent );
// Then do the stuff that uses the date and time to book the appointment
// and send an appropriate reply
}
function cancelHandler( agent ){
const {date, time} = getParameters( agent );
// Similarly, cancel things and reply as appropriate
}
intentMap.set( 'Start Booking', bookingHandler );
intentMap.set( 'Cancel Booking', cancelHandler );