2017-05-01 3 views
0

Ich habe einen Bot mit einem LUIS Intent Recognizer konfiguriert und obwohl das anfängliche Stammdialogfeld wie erwartet startet, wenn LUIS die Absicht erkennt, wenn ich einen Benutzer in diesem Dialogfeld auffordere, wird die Antwort des Benutzers den unterbrochenen Dialog nicht fortsetzen Stattdessen wird es durch den LUIS-Erkenner zurückgesendet und beginnt vollständig mit einem neuen Dialog.Wie kann ich einen Benutzer richtig auffordern, ohne dass LUIS versucht, die Antwort zu erkennen?

Das ist mein Bot-Setup:

const connector = new builder.ChatConnector({ 
    appId: config.get('bot.id'), 
    appPassword: config.get('bot.secret') 
}) 

super(connector, (session) => this.help(session)) 

this.set('storage', new BotStorage()) 

this.use(builder.Middleware.sendTyping(), new MessageSanitizer()) 

this.on('conversationUpdate', (message: any) => { 
    console.log(message) 
}) 

const recognizer = new builder.LuisRecognizer(config.get('bot.model')) 
this.recognizer(recognizer) 

Mein Dialog Setup:

this.dialog('/send', [(session, context, next) => { 
    const amount = builder.EntityRecognizer.findEntity(context.intent.entities, 'builtin.currency') 
    const recipient = builder.EntityRecognizer.findEntity(context.intent.entities, 'recipient') 
    const product = builder.EntityRecognizer.findEntity(context.intent.entities, 'product') 

    session.send('Sure, I can do that.') 
    session.beginDialog('/send/product', product ? product.entity : null) 
}]).triggerAction({ 
    matches: 'send' 
}) 

this.dialog('/send/product', [(session, query, next) => { 
    if (query) { 
    session.dialogData.productQuery = query 
    next() 
    } else { 
    builder.Prompts.text(session, 'What type of product did you want to send?') 
    } 
}, (session, results) => { 
    if (results && results.response) { 
    session.dialogData.productQuery = results.response 
    } 

    session.sendTyping() 
    ProductService.search(session.dialogData.productQuery).then(products => { 
    if (!products.length) { 
     session.send('Sorry, I couldn\'t find any products by that name.') 
     session.replaceDialog('/send/product') 
    } 

    const attachments = products.map(product => { 
     const image = builder.CardImage.create(session, product.configuration.image) 
     const valueLine = `$${product.value.min} - $${product.value.max}` 

     const card = new builder.HeroCard(session) 
     .title(product.name) 
     .images([image]) 
     .text(product.description) 
     .subtitle(valueLine) 
     .tap(builder.CardAction.postBack(session, product.id)) 

     return card 
    }) 

    const message = new builder.Message(session) 
     .text('Okay, I found the following products. Please select the one you\'d like to send.') 
     .attachments(attachments) 
     .attachmentLayout(builder.AttachmentLayout.carousel) 

    builder.Prompts.text(session, message) 
    }).catch((err: Error) => { 
    session.error(err) 
    }) 
}, (session, response, next) => { 
    console.log(response) 
}]) 

Auf Anregung einer Antwort unten, ich habe auch versucht, eher den Erkenner als Teil eines IntentDialog einzurichten als auf dem Bot selbst und ordnen Sie dann die folgenden Dialoge dem Wurzeldialog wie folgt zu:

Dies ist jedoch nicht helfen, ich bin immer noch die folgende Fehlermeldung erhalten:

/ - WARN: IntentDialog - no intent handler found for None

anzeigt, dass die Antwort eine neue Absicht zu entsprechen versucht, anstatt das suspendierte Dialog wieder aufzunehmen.

Ein Beispiel Interaktion mit dem Bot, die dieses Problem veranschaulicht: Image of the problem

Der ‚Typisierung‘ Indikator wird nur weiterhin auf unbestimmte Zeit, weil sein Versuch, um mit der ‚keine‘ Absicht, aber keiner vorhanden ist.

Antwort

1

Eine Übereinstimmung in triggerAction hat Vorrang, da jede vom Bot empfangene Nachricht über das Routing-System gesendet wird. Sie können es anpassen, aber Sie können auch versuchen, die IntentDialog verwenden, um einige Ihrer Flüsse daraus zu isolieren.

Mehr: Botframework No Interruptions from other Intent Dialogs until done with current Intent Dialog

+0

Hey, modifiziert, um die Original-Beitrag auf meine Erkenntnisse aus Ihren Vorschlag enthalten. Danke für die Antwort! –

+0

@DavidK, können Sie bitte die Reihenfolge der Äußerungen und Bot-Antworten des Benutzers teilen? –

+0

fertig! Danke für die schnellen Antworten. –

Verwandte Themen