2017-05-16 3 views
1

Ich baue gerade den AWS Lex Chat Bot und habe ein Problem mit den Einstellungen der Lambda-Funktion. Gemäß dem Beispielcode wurde diese Lambda-Funktion am Ende der Konversation verwendet. Deshalb ist der Code war wie: function close (.....)AWS Lex-Lambda-Funktion Slicen Slots

'use strict'; 

    // Close dialog with the customer, reporting fulfillmentState of Failed 
     or Fulfilled ("Thanks, your pizza will arrive in 20 minutes") 
    function close(sessionAttributes, fulfillmentState, message) { 
     return { 
      sessionAttributes, 
      dialogAction: { 
       type: 'Close', 
       fulfillmentState, 
       message, 
      }, 
     }; 
    } 

jedoch, was ich die DialogCodeHook anstelle dieser FulfillmentCodeHook tun möchte verwendet.

Die einfachste Logik in Lex ist die Frage 1 -> Antwort 1 -> Frage 2 -> Antwort 2 -> Frage 2 -> Antwort 3 erhalten; Was ich tun möchte, ist Frage 1- Antwortwert Stellen Sie sind 1.1 erlaubt, 1.2 Wenn Antwortwert = Wert 1.1 Frage stellen 2 Wenn Antwortwert = 1.2 Wert Frage stellen 3 Frage stellen 4- Wert 4.1, Wert 4.2 ..

Im AWS Diskussionsforum ist eine Antwort wie folgt: Ja, Sie können Lambda verwenden, um den Entscheidungsbaum zu implementieren. Lambda erlaubt es Ihnen, eine bestimmte Nachricht zu setzen und mit 'dialogAction' einen Slot auszulösen. fließen

Für dieses spezifische Gespräch

if (response_value = 1.1) { 
// set dialogAction.message = "Question 2" 
... 
// set type = ElicitSlot 
... 
// slotToElicit = answer2" 

} 

ähnlich würden Sie Bedingungen definieren 3 fragen Frage, 4 usw.

Aber ich bin nicht sicher, wo soll ich dieses Falls stellen ..... an und wie diese ElicitSlot-Funktion verwendet wird.

Vollversion des Beispielcodes für die Schließfunktion ist:

'use strict'; 

// Close dialog with the customer, reporting fulfillmentState of Failed or Fulfilled ("Thanks, your pizza will arrive in 20 minutes") 
function close(sessionAttributes, fulfillmentState, message) { 
    return { 
     sessionAttributes, 
     dialogAction: { 
      type: 'Close', 
      fulfillmentState, 
      message, 
     }, 
    }; 
} 

// --------------- Events ----------------------- 

function dispatch(intentRequest, callback) { 
    console.log('request received for userId=${intentRequest.userId}, intentName=${intentRequest.currentIntent.intentName}'); 
    const sessionAttributes = intentRequest.sessionAttributes; 
    const slots = intentRequest.currentIntent.slots; 
    const crust = slots.crust; 
    const size = slots.size; 
    const pizzaKind = slots.pizzaKind; 

    callback(close(sessionAttributes, 'Fulfilled', 
    {'contentType': 'PlainText', 'content': `Okay, I have ordered your ${size} ${pizzaKind} pizza on ${crust} crust`})); 

} 

// --------------- Main handler ----------------------- 

// Route the incoming request based on intent. 
// The JSON body of the request is provided in the event slot. 
exports.handler = (event, context, callback) => { 
    try { 
     dispatch(event, 
      (response) => { 
       callback(null, response); 
      }); 
    } catch (err) { 
     callback(err); 
    } 
}; 

Hoffnung jemand helfen kann! Ich danke dir sehr!!!!!!!!!!!!!!!!!!!!!

+0

Ich fürchte, dass das ** lex ** -Tag in Ihrer Frage falsch ist. (Dieses Lex-Tag ist für das Compiler-Compiler-Tool lex oder flex, das oft zusammen mit yacc oder bison verwendet wird.) Ich glaube, das ist nicht das Lex, das Sie im Sinn haben. (Bitte beachten Sie die Sprechblasenhilfe von Lex oder klicken Sie im Zweifelsfall auf das Tag.) – Scheff

+0

Oh ja, was ich meine, ist AWS Lex Funktion. Das tut mir leid. Vielen Dank! –

Antwort

0

Bitte überprüfen Sie diesen Code: https://github.com/nicholasjackson/slack-bot-lex-lambda/blob/master/src/dispatcher.js

Es listet Funktionen für alle möglichen Szenarien, einschließlich der Nähe (...) Sie haben, sondern auch die ElicitSlot (...), als auch, dass Sie nach. Bitte beachten Sie, dass es auch einen Dialogaktionstyp ElicitIntent gibt, der nicht im Code verwendet wird, aber in einigen Szenarien nützlich sein könnte.

Ich hoffe, es hilft. Tibor

+0

Vielen Dank! –