在对话框中,我想询问用户他的电子邮件地址.如果用户错误地输入了无效的电子邮件,我希望能够返回或进入一些"循环"状态,继续询问他的电子邮件,直到他输入有效的电子邮件.实现这一目标的最佳方法是什么?我找不到任何方法回到瀑布对话中的一步.
我正在使用Microsoft Bot Framework FormFlow来让用户填写表单.完成后,Dialog结束并执行为ResumeWith参数指定的方法(在本例中quoteComplete):
var quoteForm = new FormDialog<Quote>(new Quote(),
quoteFormBuilder.BuildForm, FormOptions.PromptInStart);
context.Call<Quote>(quoteForm, quoteComplete);
Run Code Online (Sandbox Code Playgroud)
在quoteComplete我希望机器人告诉用户它正在获得一个引用,它可能需要几秒钟.然后完成执行引用的异步调用,并且在它返回时我希望机器人显示另一个带有引用值的消息:
await context.PostAsync("I will now calculate your quote. I won't be long...");
context.Wait(MessageReceived);
//Simulate getting the quote
Task.Delay(5000).ContinueWith(t =>
{
context.PostAsync("Your quote is £133.54");
});
Run Code Online (Sandbox Code Playgroud)
我还尝试在文档中提供以下建议,通过将其放入以下内容来发送多个回复Delay().ContinueWith:
var message = context.MakeMessage();
message.Text = "Your quote is for £133.54";
var connector = new ConnectorClient();
connector.Messages.SendMessage(message);
Run Code Online (Sandbox Code Playgroud)
但是我得到了一个Access Denied错误.
我试图让我的机器人开始与用户进行对话,但我不知道代码中应该从哪里发送消息.启动convo的文档在这里,但它并没有超级帮助:http://docs.botframework.com/connector/new-conversations/#navtitle.我也尝试在HandleSystemMessages中回复(如果我更改了消息类型,它与模拟器一起工作)但它仍然不会发送第一条消息.
我正在使用Microsoft Bot Connector和C#.
// Idk如何在stackoverflow中进行语法高亮显示//这是我在MessageController类中的代码
public async Task<Message> Post([FromBody]Message message)
{
if (message.Type == "Message")
{
return message.CreateReplyMessage($"You said:{message.Text}");
}
else
{
return HandleSystemMessage(message);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MS botframework V3使用nodejs教程代码创建一个基本的机器人,但我一直使用模拟器获得401 Unauthorized.请帮忙?
AppId/Secret在env变量中设置,在模拟器中肯定是正确的.
代码如下
var restify = require('restify');
var builder = require('botbuilder');
//=========================================================
// Bot Setup
//=========================================================
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat bot
var connector = new builder.ChatConnector({
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
});
var bot = new builder.UniversalBot(connector);
server.post('/api/messages', connector.listen());
//=========================================================
// Bots Dialogs
//=========================================================
bot.dialog('/', function (session) {
session.send("Hello World");
});
Run Code Online (Sandbox Code Playgroud) 我已将语音输入api(Bing Speech API)集成到我正在研究的其中一个BOT(MS BOT framework-.net)中,但不确定如何测试它是否正常工作.MS Bot仿真器是否便于使用麦克风进行测试?或者我应该使用Skype等任何渠道进行测试吗?Plz协助.
谢谢
我有一个Bot应用程序,使用\n \n返回到Skype预览窗口10应用程序的新行.但是,当我在Web应用程序https://web.skype.com/en/?ecsoverride=developer中显示该消息时,它既不会尊重换行符,也会将其表示为正在进行的字符串.
我在这里的帮助中没有看到:https://docs.botframework.com/en-us/csharp/builder/sdkreference/activities.html
...无论客户端是什么,如何表示换行符 - 是否存在一些新行可以用于任何将从我的机器人接收消息的客户端?如果我
在我的skype windows 10应用程序而不是换行符中添加类似于该文本的内容 - 我正在寻找适用于任何客户端的新行.
有任何想法吗?
我正在研究.NET中的机器人.我有一个scorable,我想从一个对话框D1,然后最终得到一个空堆栈.或者用另一种方式,我想发射一个新的对话框,但不是打断然后恢复我所处的位置(像最可靠的例子),最后得到一个空白的对话框(如取消可行的例子).
可能相关点:它触发的对话框(D1)依次在堆栈上放置另一个对话框(D2),我也希望在堆栈清除之前正常工作.
有一个取消可行的例子:https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-global-handlers .其目的是清除对话框堆栈.
我想这样做,但先调用另一个对话框.我在我的scorable的PostAsync()方法中试过这个:
var interruption = dialog_D1.Void<object, IMessageActivity>();
_task.Call(interruption, null);
await _task.PollAsync(token);
_task.Reset();
Run Code Online (Sandbox Code Playgroud)
然而,只要D1调用D2,就会触发PollAsync()并清除对话框堆栈.这意味着当您响应D2时,堆栈为空,RootDialog接受输入.
我也在我的scorable的PostAsync()方法中试过这个:
var interruption = dialog_D1.Void<object, IMessageActivity>();
_task.Call(interruption, AfterCallingDialog);
await _task.PollAsync(token);
...
private async Task AfterCallingDialog(IDialogContext context, IAwaitable<object> result)
{
_task.Reset();
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,机器人错误地出现"IDialog方法执行完成了通过IDialogStack指定的多个简历处理程序".一击到_task.Call()
任何人都可以建议修复此问题或让我知道一个不同的方法?
谢谢!
背风处
我需要一个接受用户输入的机器人,将其用作某个第三方休息api呼叫的id并发回响应.我查看了Microsoft文档,但没有找到有关如何编写请求 - 响应过程的任何示例.
任何示例或有用的链接将不胜感激
在Azure Bot Service中创建机器人时,根据本文,您有两个托管选项:https : //docs.microsoft.com/zh-cn/bot-framework/bot-service-overview-introduction
应用程序服务计划(标准Azure Web应用程序,Web App Bot)消费计划(Azure功能,Functions Bot)
我试图了解每个优点和缺点。Function Bot的计费模型最适合我的用例,但我似乎在发现局限性。似乎Microsoft的文档也偏向于将Web App Bot作为标准。
到目前为止,这是我所知道的:
计费模式不同。App Services计划的计费方式更像是始终运行的VM,而功能按运行付费。
App Service使用标准的ASP.NET MVC模型。函数使用C#脚本
Visual Studio似乎对调试和发布App Service计划机器人提供了更好的支持
我认为与#2相关的一件事是全局消息处理。Microsoft提供的用于实现全局消息处理程序的示例似乎要求使用global.asax.cs来注册全局处理程序,该文件不在Function Bot中。
Web App机器人是Microsoft的首选选项吗?
两种选择都更好地支持.NET Core吗?
有没有一种方法可以在Function Bots中实现全局处理程序?
功能机器人还有其他特定弱点吗?
一种选择比另一种更“现代”吗?
我正在为我自己的目的,为Bot Framework V4(使用LUIS)破解GitHub'CoreBot'示例代码,并且在响应和瀑布对话框步骤的执行方式上遇到了麻烦。
我有一个顶级对话框。我的期望是,该对话框基于输入对LUIS进行初始调用,并基于该输入路由到其他对话框。目前,只能问候机器人并报告危险。我的对话框设置如下(忽略BookingDialog,它是示例的一部分)。
public MainDialog(IConfiguration configuration, ILogger<MainDialog> logger)
: base(nameof(MainDialog))
{
Configuration = configuration;
Logger = logger;
AddDialog(new TextPrompt(nameof(TextPrompt)));
AddDialog(new BookingDialog());
AddDialog(new HazardDialog());
AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[]
{
MainStepAsync,
EndOfMainDialogAsync
}));
// The initial child Dialog to run.
InitialDialogId = nameof(WaterfallDialog);
}
Run Code Online (Sandbox Code Playgroud)
我的期望是MainStepAsync被执行,并运行以下命令:
private async Task<DialogTurnResult> MainStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
CoreBot.StorageLogging.LogToTableAsync($"Main step entered. I am contacting LUIS to determine the intent");
string what_i_got = await LuisHelper.ExecuteMyLuisQuery(Configuration, Logger, stepContext.Context, cancellationToken);
CoreBot.StorageLogging.LogToTableAsync($"LUIS intent matched: {what_i_got}");
//await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { …Run Code Online (Sandbox Code Playgroud) c# botframework azure-language-understanding azure-bot-service
botframework ×10
c# ×3
bots ×2
azure ×1
azure-language-understanding ×1
newline ×1
rest ×1
waterfall ×1