Это точно не может быть сделано, поскольку endDialog
не всплывает из-за чего-либо доступного из ActivityHandler
(насколько я знаю).
Но для обходного пути вы так близко! Измените его на что-то вроде этого:
this.onDialog(async (context, next) => {
const currentDialog = await this.dialogState.get(context);
if (currentDialog === undefined) {
console.log('No dialogs started');
} else if (currentDialog.dialogStack && currentDialog.dialogStack.length > 0) {
console.log('Dialog is running');
} else {
console.log('Dialog is not running');
}
// By calling next() you ensure that the next BotHandler is run.
await next();
});
Ваш не совсем работал, только потому что currentDialog
устанавливается на {}
, если он не существует, что является правдой, поэтому мы должны проверить, если в dialogStack есть что-нибудь с currentDialog.dialogStack.length > 0
.
currentDialog
, равное undefined
, если диалог еще не начался, поэтому currentDialog === undefined
или !currentDialog
допускают исходные и приветственные сообщения. Наличие этих трех отдельных ветвей должно позволить вам справиться с каждой ситуацией.
Что касается "лучших практик", я бы сказал, что это подход правильный , если вы хотите получить обратную связь в конце каждый диалог. Если есть любой , для которого вы не хотите получать обратную связь, лучше всего вызвать ваш FeedbackDialog в конце соответствующих диалогов.