标签: botframework

如果用户输入了错误的数据,您可以在瀑布对话框中返回一步吗?#botframework

在对话框中,我想询问用户他的电子邮件地址.如果用户错误地输入了无效的电子邮件,我希望能够返回或进入一些"循环"状态,继续询问他的电子邮件,直到他输入有效的电子邮件.实现这一目标的最佳方法是什么?我找不到任何方法回到瀑布对话中的一步.

bots waterfall botframework

6
推荐指数
1
解决办法
1324
查看次数

如何在Microsoft Bot Framework中提供延迟响应

我正在使用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错误.

c# botframework

6
推荐指数
1
解决办法
2134
查看次数

与Microsoft bot builder和microsoft bot框架开始对话

我试图让我的机器人开始与用户进行对话,但我不知道代码中应该从哪里发送消息.启动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)

bots botframework

6
推荐指数
1
解决办法
3200
查看次数

Bot框架v3未经授权

我正在尝试使用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)

botframework

6
推荐指数
1
解决办法
1846
查看次数

如何在Microsoft BOT中测试语音输入?

我已将语音输入api(Bing Speech API)集成到我正在研究的其中一个BOT(MS BOT framework-.net)中,但不确定如何测试它是否正常工作.MS Bot仿真器是否便于使用麦克风进行测试?或者我应该使用Skype等任何渠道进行测试吗?Plz协助.

谢谢

speech-recognition speech-to-text botframework

6
推荐指数
1
解决办法
1398
查看次数

Bot - 如何从Bot返回换行到skype预览和skype web应用程序

我有一个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应用程序而不是换行符中添加类似于该文本的内容 - 我正在寻找适用于任何客户端的新行.

有任何想法吗?

newline botframework

6
推荐指数
4
解决办法
5789
查看次数

从Scorable,如何调用对话框然后清除堆栈?

我正在研究.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()

任何人都可以建议修复此问题或让我知道一个不同的方法?

谢谢!

背风处

c# botframework

6
推荐指数
1
解决办法
582
查看次数

如何在microsoft bot框架中进行rest api调用

我需要一个接受用户输入的机器人,将其用作某个第三方休息api呼叫的id并发回响应.我查看了Microsoft文档,但没有找到有关如何编写请求 - 响应过程的任何示例.

任何示例或有用的链接将不胜感激

rest botframework

6
推荐指数
1
解决办法
4372
查看次数

在Web App Bot和Function Bot之间进行选择

在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作为标准。

到目前为止,这是我所知道的:

  1. 计费模式不同。App Services计划的计费方式更像是始终运行的VM,而功能按运行付费。

  2. App Service使用标准的ASP.NET MVC模型。函数使用C#脚本

  3. Visual Studio似乎对调试和发布App Service计划机器人提供了更好的支持

我认为与#2相关的一件事是全局消息处理。Microsoft提供的用于实现全局消息处理程序的示例似乎要求使用global.asax.cs来注册全局处理程序,该文件不在Function Bot中。

Web App机器人是Microsoft的首选选项吗?

两种选择都更好地支持.NET Core吗?

有没有一种方法可以在Function Bots中实现全局处理程序?

功能机器人还有其他特定弱点吗?

一种选择比另一种更“现代”吗?

azure botframework

6
推荐指数
0
解决办法
3504
查看次数

带有LUIS和WaterFall对话框的Azure Bot Framework Bot以异常方式执行。意外的对话流

我正在为我自己的目的,为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

6
推荐指数
1
解决办法
248
查看次数