C# 在V4聊天机器人C中,除了使用自适应卡之外,是否有其他方法可以启用日历选项作为输入?

C# 在V4聊天机器人C中,除了使用自适应卡之外,是否有其他方法可以启用日历选项作为输入?,c#,botframework,bots,chatbot,C#,Botframework,Bots,Chatbot,是否有一种方法可以在聊天机器人中启用日期和时间输入,即不使用自适应卡的情况下启用日历选项?我从下面的链接了解到,除Microsoft频道外,所有频道均不支持自适应卡 我已使用以下输入启用自适应卡: 然后我的问题是:除了使用自适应卡(如英雄卡或除自适应卡以外的任何其他卡)之外,如何在机器人中启用日期时间输入 语言:C SDK:V4 频道:网络聊天频道 部署于:Azure 如果有办法,我请你提供一个详细的一步一步的指导,因为我是新的机器人和编码 谢谢和问候 -柴丹阳 using Microsoft.

是否有一种方法可以在聊天机器人中启用日期和时间输入,即不使用自适应卡的情况下启用日历选项?我从下面的链接了解到,除Microsoft频道外,所有频道均不支持自适应卡

我已使用以下输入启用自适应卡:

然后我的问题是:除了使用自适应卡(如英雄卡或除自适应卡以外的任何其他卡)之外,如何在机器人中启用日期时间输入

语言:C SDK:V4 频道:网络聊天频道 部署于:Azure

如果有办法,我请你提供一个详细的一步一步的指导,因为我是新的机器人和编码

谢谢和问候 -柴丹阳

using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Schema;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace EchoBot.Dialogs
{
    public class Adaptivecarddialog : WaterfallDialog
    {
        public const string cards = @"./AdaptiveCard.json";

        public Adaptivecarddialog(string dialogId, IEnumerable<WaterfallStep> steps = null)
            : base(dialogId, steps)
        {
            AddStep(async (stepContext, cancellationToken) =>
            {
                var cardAttachment = CreateAdaptiveCardAttachment(cards);

                var reply = stepContext.Context.Activity.CreateReply();
                reply.Attachments = new List<Attachment>() { cardAttachment };

                await stepContext.Context.SendActivityAsync(reply, cancellationToken);
                var opts = new PromptOptions
                {
                    Prompt = new Activity
                    {
                        Type = ActivityTypes.Message,
                        // You can comment this out if you don't want to display any text. Still works.
                    }
                };

                // Display a Text Prompt and wait for input
                return await stepContext.PromptAsync(nameof(TextPrompt), opts);
            });

            AddStep(async (stepContext, cancellationToken) =>
            {
                var res = stepContext.Result.ToString();
                dynamic jobject = JsonConvert.DeserializeObject(res);
                string NewStartDateTime = jobject.Startdate + " " + jobject.Starttime;
                string NewStopDateTime = jobject.Stopdate + " " + jobject.Stoptime;
                await stepContext.Context.SendActivityAsync($"StartDateTime:{NewStartDateTime}", cancellationToken: cancellationToken);
                await stepContext.Context.SendActivityAsync($"StopDateTime:{NewStopDateTime}", cancellationToken: cancellationToken);

                return await stepContext.EndDialogAsync();
            });

        }

        public static new string Id => "Adaptivecarddialog";

        public static Adaptivecarddialog Instance { get; } = new Adaptivecarddialog(Id);

        public static Attachment CreateAdaptiveCardAttachment(string filePath)
        {
            var adaptiveCardJson = File.ReadAllText(filePath);
            var adaptiveCardAttachment = new Attachment()
            {
                ContentType = "application/vnd.microsoft.card.adaptive",
                Content = JsonConvert.DeserializeObject(adaptiveCardJson),
            };
            return adaptiveCardAttachment;
        }
    }
}
我无法从GitHub尝试以下操作,因为这与React有关,但我的代码是用AZURE的C和SDK V4编写的:

预期结果:显示日历选项和时间选项以选择日期和时间,这样我就可以捕获输入值并在瀑布式对话框C中继续我的过程

实际结果:无法实现,因为自适应卡在网络聊天频道中似乎不受支持,仅在Skype等Microsoft频道中受支持

@mrichardson MSFT:谢谢你到现在为止的帮助

发行说明:

我有多个瀑布对话框类的机器人程序最后一个对话框类 步骤1:我正在显示带有两个日期和时间输入的自适应卡,一个用于启动,另一个用于停止 实际结果: adaptive在Emulator和web聊天频道中都成功显示,没有任何问题 步骤2:当我单击步骤1中显示的自适应卡上的SetSchedule时,应在步骤2中捕获值并显示在屏幕上 实际结果: 在emulator中工作得非常好,但在Web聊天频道bot中则不行。我在Webchat频道BOT中发现一个错误。 请查找用于访问bot的HTML文件、瀑布式对话框类和随附的自适应卡json文件,以供参考。同时,请查找附加在webchat频道中的错误截图,以供参考

你能指导我解决这个问题吗,就像你解决登录问题一样?请求你立即帮助这阻碍了我的工作

谢谢和问候 -柴丹阳

using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Schema;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace EchoBot.Dialogs
{
    public class Adaptivecarddialog : WaterfallDialog
    {
        public const string cards = @"./AdaptiveCard.json";

        public Adaptivecarddialog(string dialogId, IEnumerable<WaterfallStep> steps = null)
            : base(dialogId, steps)
        {
            AddStep(async (stepContext, cancellationToken) =>
            {
                var cardAttachment = CreateAdaptiveCardAttachment(cards);

                var reply = stepContext.Context.Activity.CreateReply();
                reply.Attachments = new List<Attachment>() { cardAttachment };

                await stepContext.Context.SendActivityAsync(reply, cancellationToken);
                var opts = new PromptOptions
                {
                    Prompt = new Activity
                    {
                        Type = ActivityTypes.Message,
                        // You can comment this out if you don't want to display any text. Still works.
                    }
                };

                // Display a Text Prompt and wait for input
                return await stepContext.PromptAsync(nameof(TextPrompt), opts);
            });

            AddStep(async (stepContext, cancellationToken) =>
            {
                var res = stepContext.Result.ToString();
                dynamic jobject = JsonConvert.DeserializeObject(res);
                string NewStartDateTime = jobject.Startdate + " " + jobject.Starttime;
                string NewStopDateTime = jobject.Stopdate + " " + jobject.Stoptime;
                await stepContext.Context.SendActivityAsync($"StartDateTime:{NewStartDateTime}", cancellationToken: cancellationToken);
                await stepContext.Context.SendActivityAsync($"StopDateTime:{NewStopDateTime}", cancellationToken: cancellationToken);

                return await stepContext.EndDialogAsync();
            });

        }

        public static new string Id => "Adaptivecarddialog";

        public static Adaptivecarddialog Instance { get; } = new Adaptivecarddialog(Id);

        public static Attachment CreateAdaptiveCardAttachment(string filePath)
        {
            var adaptiveCardJson = File.ReadAllText(filePath);
            var adaptiveCardAttachment = new Attachment()
            {
                ContentType = "application/vnd.microsoft.card.adaptive",
                Content = JsonConvert.DeserializeObject(adaptiveCardJson),
            };
            return adaptiveCardAttachment;
        }
    }
}

简单的回答是,此功能不可用。自适应卡是任何基于用户界面的日期/时间选择器的最佳选择。是的,自适应卡在包括WebChat在内的Microsoft频道上完全受支持,在其他频道上则不受支持

您最好的选择是使用

有很多不同的方法以不同的复杂度来实现这一点,但是应用非常广泛。这可能是一个很好的起点

CoreBot还有一个可能会有所帮助并且更容易理解的功能

在聊天机器人中使用DateTime非常复杂,因为星期三4点可能意味着星期三凌晨4点或下午4点。如果您使用的是基于文本的输入,则应该提供处理此问题的其他想法

这可能是因为以下原因,在WebChat中对您不起作用。我刚刚测试了这张卡的日期和时间输入,它正在工作:

{
    "type": "AdaptiveCard",
    "actions": [{
        "type": "Action.Submit",
        "id": "submit",
        "title": "Submit"
    }],
    "body": [
        {
            "type": "Input.Date",
            "id": "date",
            "title": "New Input.Toggle"
        },
        {
            "type": "Container",
            "items": [
                {
                    "type": "Input.Time",
                    "id": "time",
                    "title": "New Input.Toggle"
                }
            ]
        }
    ],
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.0"
}

嗨,理查森,谢谢你的快速回复。由于评论部分的字符长度限制,我已经在你的帖子中回复了。请审阅,并让我知道您对我面临的问题的意见。由于评论部分的空间限制,我已将更新的问题或评论添加到原始帖子中。请求您的帮助以解决此问题,并始终如此。@ChaitanyaNG 500错误表示您部署的机器人有问题。尝试在网络聊天中使用Azure门户>Web应用程序机器人>测试。如果这不起作用,你需要这样做。如果它在Web聊天的测试中起作用,您可能在HTML文件中使用了错误的密码。如果仍然存在问题,请打开一个新的StackOverflow问题,因为这是一个非常不同的主题/问题。似乎没有发布错误,因为我已使用visual studio 2019将其发布到azure,并且状态显示为“成功,无错误”。因此,我发布了一个新的查询,正如上面所建议的,下面给出的链接是:关闭此问题。