标签: botframework

使用Microsoft Bot Framework中的FormFlow的动态MULTIPLE选项字段

假设您正在动态获取可以登机的乘客列表.用户需要能够从列表中选择任意数量的乘客来登记.我可以制作动态列表,但我无法弄清楚如何允许它选择多个选项.我在动态字段上使用了.SetAllowsMultiple(true),但它不起作用.我在这里查看了文档中的formflow示例,但该示例仅允许单个选择.你会如何使它与多个选择一起工作?

这是我在CheckinDialog类中放置的属性:

public string Passenger { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我的动态领域:

.Field(new FieldReflector<CheckinDialog>(nameof(Passenger))
                                                        .SetAllowsMultiple(true)
                                                        .SetActive((state) =>
                                                        {
                                                            return CheckinDialog.Passengers != null && CheckinDialog.Passengers.Count > 0;
                                                        })
                                                        .SetPrompt(new PromptAttribute(Resources.Checkin.Passengers))
                                                        .SetType(null)
                                                        .SetDefine((state, field) =>
                                                        {
                                                            foreach (var pax in GetPassengers())
                                                                field
                                                                    .AddDescription(pax, pax)
                                                                    .AddTerms(pax, pax);
                                                            return TaskHelpers.FromResult(true);
                                                        }))
Run Code Online (Sandbox Code Playgroud)

c# botframework

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

Microsoft Bot Framework项目将聊天机器人添加到我的网站.我无法使用Web Chat客户端.我还可以使用其他什么方法?

我正在开发一个Microsoft Bot Framework项目,以便将聊天机器人添加到我的网站.我需要将数据从聊天UI连续传递到Bot以获取用户详细信息和当前页面详细信息.因此我无法使用Web Chat客户端.

除了创建自己的聊天界面外,我还可以使用哪些其他方法?

asp.net-mvc bots web-chat botframework

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

node.js bot框架Universalbot beginDialogAction的用法?

也许我很傻,但是我真的不明白如何阅读Microsoft bot框架sdknode.js版本。我试图弄清楚如何在ConsoleConnector bot中使用beginDialogAction()endConversationAction()。该文档说它在触发时会注册一个动作,但没有提及如何触发它。我想利用它可以在正常流程之外的调用堆栈中间添加对话框的想法。

抱歉,我无法提供代码,但是我可以提供此代码...

var connector = new builder.ConsoleConnector().listen();
var connector = new builder.ConsoleConnector().listen();
var bot = new builder.UniversalBot(connector);

bot.dialog('/', [
    function( session ) {
        builder.Prompts.text(session, "blah blah blah?");
    },
    function( session, results ) {
        // ...

        session.beginDialog('/foo');
        session.endDialog();
    }
]);

bot.dialog('/foo', [
    function( session, args ) {
        // ...
    },
    function( session, results ) {
        // ...
        session.endDialog();
    }
]);

bot.use({ botbuilder: function( session, next ) {

    // CALL …
Run Code Online (Sandbox Code Playgroud)

javascript chatbot node.js botframework

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

我的api.ai机器人不与Facebook上的其他用户通信

我在Api.ai上制作了一个演示机器人(免费版),并将其与facebook集成,但问题是它除了我以外没有其他任何人回复?也许是因为我从我的帐户创建了facebook页面并生成了页面访问令牌......但是我如何让我的机器人与其他用户进行通信呢?

facebook botframework dialogflow-es

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

如何使用LUIS无意图在c#中没有列车话语在LUIS

我已经实现了如下的无意图.

[LuisIntent("None")]
public async Task None(IDialogContext context, LuisResult result)
{
      await context.PostAsync("I'm sorry. I didn't understand you.");
      context.Wait(MessageReceived);            
}
Run Code Online (Sandbox Code Playgroud)

但看起来我需要在路易斯那边训练一些话语,这是我不想要的.我正在寻找在路易斯找不到或识别的东西,应该解雇无意图处理程序.我该如何实现这一目标?

c# botframework azure-language-understanding

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

如何在Botframework上检查对话框堆栈

我正在实现一个反馈对话框,并希望使用IScorableand键将“ feedback”一词从任何地方插入该对话框并将其压入FeedbackDialog堆栈。

从用户收集反馈时,我不希望出现这种情况。有没有办法确定my FeedbackDialog是否已经在堆栈中?所以我不会不小心双按它吗?

c# botframework

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

Bot框架对话框中的错误处理

如何捕获对话框中的所有异常?是否有类似ASP.NET异常过滤器的东西?我想根据异常类型向用户发送不同的消息.

谢谢

c# botframework

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

注册bot并部署到Azure

我使用bot框架创建了一个机器人,我只是在我的计算机上开发和测试它.

我现在需要注册机器人,以便我可以在线使用它并将其与Cortana等其他MS服务集成.

但我找不到办法做到这一点,一切都是如此令人困惑,所有教程似乎都已过时.例如,他们中的大多数告诉我去https://dev.botframework.com并点击"注册机器人",但该选项卡不再存在,当我点击"创建"时,我被重定向到Azure它似乎不是注册机器人而是创建一个新机器人.

有人可以提供一步一步的解决方案来注册Azure上的现有机器人(在我的计算机上)吗?

对不起,这不是针对本网站的问题,但我认为更多的人可能有同样的问题,这可以提供帮助.

azure botframework

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

无法在Azure Bot中全局声明Timer

我正在使用.NET Bot Builder v 3.15.2.2并在Bot Emulator v 3.5.36中测试它

我正在尝试应用一个计时器(非常类似于#837),在新的对话开始后,有一个10分钟的计时器来检查是否有任何不活动.一旦它已经失效,它将向对话发布消息,如果有人加入对话,它将停止计时器.我尝试了一种简单的方法,通过全局声明一个计时器并具有一个计时器回调.但是在我输入任何内容之前,我总是在模拟器中收到:"抱歉,我的机器人代码有问题".如果我将Timer作为全局变量删除,它运行正常.我知道对于我想要全局声明的类,它应该是可序列化的,但我不确定它如何适用于其他类似Timer.

private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result) {

     var message = await result;
     await SaveConversation(context, message);

     var timerCallBack = new TimerCallback(this.TimerEventCallback);
     this.botTimer = new Timer(timerCallBack, context, new TimeSpan(0, 10, 0).Milliseconds, new TimeSpan(0, 10, 0).Milliseconds);
    }


public void TimerEventCallback(object obj)
    {
         var context = (IDialogContext)obj;
        Activity reply = (Activity)context.Activity;

        ConnectorClient connector = new ConnectorClient(new System.Uri(reply.ServiceUrl));
        connector.Conversations.ReplyToActivityAsync(reply.CreateReply($"Conversation has been closed due to Inactivity")).Wait();
        this.botTimer.Dispose();
    }`
Run Code Online (Sandbox Code Playgroud)

c# timer botframework

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

Botframework DirectLineClient.Conversations.PostActivityAsync返回null

我正在尝试通过DirectLineClient库将活动发送到我的机器人:

        var directLineClient = new DirectLineClient($"{secret}");
        directLineClient.BaseUri = new Uri($"https://directline.botframework.com/");

        var conversation = await directLineClient.Conversations.StartConversationAsync().ConfigureAwait(false);
        var activity = new Microsoft.Bot.Connector.DirectLine.Activity();
        activity.From = new Microsoft.Bot.Connector.DirectLine.ChannelAccount();
        activity.From.Name = "Morgan";
        activity.Text = message;
        activity.Type = "message";

        var resourceResponse = await directLineClient.Conversations.PostActivityAsync(conversation.ConversationId, activity).ConfigureAwait(false);
        await ReadBotMessagesAsync(directLineClient, conversation.ConversationId);
Run Code Online (Sandbox Code Playgroud)

resourceResponse始终为null。

Nicolas R回答后编辑

我添加了一种方法来等待机器人的响应:

    private static async Task ReadBotMessagesAsync(DirectLineClient client, string conversationId)
    {
        string watermark = null;

        while (true)
        {
            var activitySet = await client.Conversations.GetActivitiesAsync(conversationId, watermark);
            watermark = activitySet?.Watermark;

            foreach (Microsoft.Bot.Connector.DirectLine.Activity activity in activitySet.Activities)
            {
                Console.WriteLine(activity.Text);

                if (activity.Attachments …
Run Code Online (Sandbox Code Playgroud)

.net c# botframework direct-line-botframework

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