Ich versuche, auf den vollständigen Originaltext innerhalb einer Methode zuzugreifen, die als LuisIntent
innerhalb eines LuisDialog
markiert ist.
Die Dokumentation zeigt diese Methoden als zwei Argumente:
%Vor% Keiner von beiden stellt den ursprünglichen Text der Nachricht öffentlich dar. Das Kontextobjekt enthält die Nachricht jedoch in einer privaten Eigenschaft ( context.data.message.text
), auf die nicht zugegriffen werden kann.
Gibt es eine Möglichkeit, in context
darauf zuzugreifen, oder kann es in den Dialogkonstruktor übergeben werden?
Sie können die Funktion MessageReceived (...) des LuisDialogs außer Kraft setzen, die Felder der Nachricht, die Sie als Elementvariablen benötigen, behalten und auf diese Felder in Ihren Intent-Handlern zugreifen. Im Folgenden habe ich den SimpleAlarmDialog geändert, um zu zeigen, wie Sie in einem der Intent-Handler auf 'message.Text' zugreifen können:
%Vor%Wenn Sie in die Methode eindringen, können Sie in der Schnellübergabe sehen, dass das Kontextobjekt eine nicht öffentliche Eigenschaft hat bis hin zu context.data.mesage.Text (beachten Sie den Rechtschreibfehler von "message"). Da die Eigenschaft nicht öffentlich ist, können Sie mit der Reflektion schummeln, um an sie heranzukommen (siehe GetInstanceField in Wie erhalte ich den Wert eines privaten Feldes in C #? )
%Vor%Sie können das tun, indem Sie die Query-Eigenschaft von LuisResult verwenden,
%Vor%Tags und Links c# botframework luis