#c# #botframework #azure-language-understanding #luis.ai
Вопрос:
Ниже приведен пример намерения бота Azure SDK, который запускается в эмуляторе платформы bot. Бот распознает мои намерения, возвращая ответ строкового типа. Это была просто подготовка к боту, когда он распознает мое намерение, он должен запустить программу CMD и выполнить команду в системе, а после выполнения команды в CMD и завершения этого он вернет ответ о том, что команда была выполнена…. Однако, как вы можете видеть ниже, к сожалению, это не работает. Вместо этого бот немедленно возвращает все ответы, не дожидаясь и не выполняя команду в CMD.
case WebAppBotTester.Intent.TestPageOne:
var getSearchActionText = "Redirecting to the Action and run CMD, wait...";
var getSearchActionMessage = MessageFactory.Text(getSearchActionText, getSearchActionText, InputHints.IgnoringInput);
await stepContext.Context.SendActivityAsync(getSearchActionMessage, cancellationToken);
string command = @"cd ..\..amp; cd tests amp; npx [MAKE ACTION..]";
ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
cmdsi.Arguments = command;
Process cmd = Process.Start(cmdsi);
cmd.WaitForExit();
var getresultActionText = "The result is ready!";
var getresultActionMessage = MessageFactory.Text(getresultActionText , getresultActionText, InputHints.IgnoringInput);
await stepContext.Context.SendActivityAsync(getresultActionMessage, cancellationToken);
break;
Что я делаю не так?
Комментарии:
1. есть новости ??????
Ответ №1:
Это решило мою проблему:
Я написал простой класс NodeJsServer на C#, который может помочь вам в этих вещах. Он доступен на GitHub здесь. Он имеет множество опций, вы можете выполнять команды «установка npm» в определенных каталогах или запускать NodeJS, проверять текущее состояние (выполняется ли он, компилируется ли, запускается ли, устанавливается ли) и, наконец, останавливать NodeJS. Проверьте быстрый пример использования.
Это необработанный код (скопированный в основном из класса NodeJsServer) того, что вы пытаетесь сделать:
// create the command-line process
var cmdProcess = new Process
{
StartInfo =
{
FileName = "cmd.exe",
UseShellExecute = false,
CreateNoWindow = true, // this is probably optional
ErrorDialog = false, // this is probably optional
RedirectStandardOutput = true,
RedirectStandardInput = true
}
};
// register for the output (for reading the output)
cmdProcess.OutputDataReceived = (object sender, DataReceivedEventArgs e) =>
{
string output = e.Data;
// inspect the output text here ...
};
// start the cmd process
cmdProcess.Start();
cmdProcess.BeginOutputReadLine();
// execute your command
cmdProcess.StandardInput.WriteLine("quicktype --version");