C# 在V4聊天机器人C中,除了使用自适应卡之外,是否有其他方法可以启用日历选项作为输入?
是否有一种方法可以在聊天机器人中启用日期和时间输入,即不使用自适应卡的情况下启用日历选项?我从下面的链接了解到,除Microsoft频道外,所有频道均不支持自适应卡 我已使用以下输入启用自适应卡: 然后我的问题是:除了使用自适应卡(如英雄卡或除自适应卡以外的任何其他卡)之外,如何在机器人中启用日期时间输入 语言:C SDK:V4 频道:网络聊天频道 部署于:Azure 如果有办法,我请你提供一个详细的一步一步的指导,因为我是新的机器人和编码 谢谢和问候 -柴丹阳C# 在V4聊天机器人C中,除了使用自适应卡之外,是否有其他方法可以启用日历选项作为输入?,c#,botframework,bots,chatbot,C#,Botframework,Bots,Chatbot,是否有一种方法可以在聊天机器人中启用日期和时间输入,即不使用自适应卡的情况下启用日历选项?我从下面的链接了解到,除Microsoft频道外,所有频道均不支持自适应卡 我已使用以下输入启用自适应卡: 然后我的问题是:除了使用自适应卡(如英雄卡或除自适应卡以外的任何其他卡)之外,如何在机器人中启用日期时间输入 语言:C SDK:V4 频道:网络聊天频道 部署于:Azure 如果有办法,我请你提供一个详细的一步一步的指导,因为我是新的机器人和编码 谢谢和问候 -柴丹阳 using Microsoft.
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,并且状态显示为“成功,无错误”。因此,我发布了一个新的查询,正如上面所建议的,下面给出的链接是:关闭此问题。