【发布时间】:2020-01-25 19:19:42
【问题描述】:
我正在使用 C# 中的 Bot Framework v4 开发一个 Bot。我现在想要的是,在使用 Actions 向用户发送自适应卡片后,我可以在触发 Action 后更新这张卡片。 例如,点击后按钮会消失。
这里我在 NodeJS 中有一个解决方案,但我无法将它转移到 C#。 有人可以帮忙吗?
在我使用 SharePoint 库中的 MS Graph 进行搜索后,将生成此卡片。
主要目标是,我可以使用 Refiners 使用来自 JSON 的新卡来更新卡。 “确定”按钮是一个提交操作,可以在 OnMessageActivityAsync 方法中捕获。 输入值在活动值中,因此可以创建过滤方法。 我的问题是,我无法更新已发送给用户的卡片。
在我将第一张带有结果的卡片发送给用户之前,我将 Activity 写入一个状态,因此我可以访问 OnMessageActivityAsync 方法,但我不确定这是否是正确的方法。
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
Logger.LogInformation("Running dialog with Message Activity.");
var txt = turnContext.Activity.Text;
dynamic val = turnContext.Activity.Value;
// Check if the activity came from a submit action
if (string.IsNullOrEmpty(txt) && val != null)
{
await turnContext.SendActivityAsync(MessageFactory.Text($"Refiner Language: {val.id_language}"));
await turnContext.SendActivityAsync(MessageFactory.Text($"Refiner MachType: {val.id_type}"));
var r = new StreamReader("Cards/helloCard2.json");
string json = r.ReadToEnd();
AdaptiveCard card = AdaptiveCard.FromJson(json).Card;
var docSearchState = await StateAccessor.GetAsync(turnContext);
Activity activity = docSearchState.Activity;
activity.Attachments = new List<Attachment>() {
new Attachment()
{
Name = "Card",
ContentType = AdaptiveCard.ContentType,
Content = card,
}
};
await turnContext.UpdateActivityAsync(activity);
}
此代码给我以下错误消息:
fail: Microsoft.Bot.Builder.Integration.AspNet.Core.BotFrameworkHttpAdapter[0]
Exception caught : Error reading JArray from JsonReader. Current JsonReader item is not an array: StartObject. Path 'DocumentSearchState.Activity.attachments.$values[0].content.body'.
有没有人解决这个问题的好主意?
【问题讨论】:
-
你应该开始做这个项目,然后在遇到障碍时寻求帮助,而不是把整个项目交给你。向我们展示您到目前为止所做的工作。
-
你在使用 Teams 频道吗?
-
目前我正在使用机器人模拟器进行测试。但最后我想使用团队频道。这不应该是特定于渠道的问题。我想。
-
您正在尝试更新对话历史记录中的现有消息。这绝对是特定于渠道的功能。我的回答可以接受吗?
标签: c# botframework bots