Azure 机器人生成器:自适应卡-提交时调用方法
我需要创建一个表单,用户必须在其中填写并发送它。所以我必须创建一个submit按钮来调用另一个方法,但是我找不到submit操作和调用另一个方法之间的链接 我表格的脚本是:Azure 机器人生成器:自适应卡-提交时调用方法,azure,botframework,form-submit,adaptive-cards,Azure,Botframework,Form Submit,Adaptive Cards,我需要创建一个表单,用户必须在其中填写并发送它。所以我必须创建一个submit按钮来调用另一个方法,但是我找不到submit操作和调用另一个方法之间的链接 我表格的脚本是: public Attachment CreateAdaptiveCardwithEntry() { var submitActionData = JObject.Parse("{ \"Type\": \"SaveFunction\" }"); var card
public Attachment CreateAdaptiveCardwithEntry()
{
var submitActionData = JObject.Parse("{ \"Type\": \"SaveFunction\" }");
var card = new AdaptiveCard()
{
Body = new List<CardElement>()
{
// Hotels Search form
new TextBlock() { Text = "Titre de la note des frais" },
new TextInput()
{
Id = "titre",
Speak = "<s>Veuillez saisir le titre</s>",
Placeholder = "Veuillez saisir le titre",
Style = TextInputStyle.Text
},
},
Actions = new List<ActionBase>()
{
new SubmitAction()
{
DataJson = submitActionData.ToString()
}
}
};
公共附件CreateAptiveCardWithEntry()
{
var submitActionData=JObject.Parse(“{\”类型\“:\”保存函数\“}”);
var卡=新的自适应卡()
{
Body=新列表()
{
//酒店查询表格
新建TextBlock(){Text=“Titre de la note des frais”},
新文本输入()
{
Id=“titre”,
Speak=“Veuillez Saiser le titre”,
占位符=“Veuillez saisir le titre”,
Style=TextInputStyle.Text
},
},
操作=新列表()
{
新提交
{
DataJson=submitActionData.ToString()
}
}
};
我的卡片的脚本是:
var replyMessage = context.MakeMessage();
replyMessage.Attachments = new List<Attachment> { FraisDialog.CreateAdaptiveCardwithEntry() };
await context.PostAsync(replyMessage, CancellationToken.None);
context.Wait(MessageReceived);
var replyMessage=context.MakeMessage();
replyMessage.Attachments=新列表{FraisDialog.CreateAptiveCardWithEntry()};
wait context.PostAsync(replyMessage,CancellationToken.None);
Wait(MessageReceived);
MessageReceivedAsync中的脚本是:
public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
var message = await result;
if (message.Value != null)
{
// Got an Action Submit
dynamic value = message.Value;
string submitType = value.Type.ToString();
switch (submitType)
{
case "SaveFunction":
await context.PostAsync("Please complete all the search parameters:\n");
return;
}
}
}
公共虚拟异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable结果)
{
var消息=等待结果;
if(message.Value!=null)
{
//收到一个提交的动作
动态值=message.value;
字符串submitType=value.Type.ToString();
开关(提交类型)
{
案例“SaveFunction”:
wait context.PostAsync(“请完成所有搜索参数:\n”);
返回;
}
}
}
在本例中,我需要用Id=“titre”发送信息,然后再进行处理,我不知道如何发送(DataJson?)和发送位置(MessageReceivedAsync?)。有人能帮我吗?我是否需要为卡创建另一个对话框
Ps:所有这些代码都在rootDialog中
我没有收到“请完成所有搜索参数”的消息
如果您的所有代码都在RootDialog中,请在发送附件后使用context.Wait(MessageReceivedAsync)
我需要发送Id=“titre”的信息,然后再进行处理
单击“提交”按钮时,表单数据会像往常一样发送到MessageReceived方法。如果您只想访问自适应卡中的字段,可以访问动态变量值。下面是一个示例
var message = await result;
if (message.Value != null)
{
// Got an Action Submit
dynamic value = message.Value;
string submitType = value.Type.ToString();
switch (submitType)
{
case "SaveFunction":
if(value.titre == "")
{
await context.PostAsync("Please complete all the search parameters:\n");
}
else
{
await context.PostAsync($"You entered {value.titre}");
}
return;
}
}
您只想处理自适应卡中输入的字段?是的,这正是我想要的,但我无法触发提交操作。您能告诉我怎么做吗?触发提交操作是什么意思?您没有收到消息“请完成所有搜索参数”吗?这正是我的问题所在,我没有收到消息“请完成搜索”我将搜索参数改为“抱歉,我的bot代码有问题”,这是一个500内部服务器错误。我已经使用了context.Wait(MessageReceivedAsync);在发送我的附件后,如上面代码所示。就好像从未调用过MessageReceivedAsync方法一样,我已经在那里设置了一个断点,但它从未被命中。您是否认为该对话框导致的问题是一个LuisDialog而不是一个常规对话框?因为我以前从未在LuisDialog中见过MessageReceivedAsync方法ore.Luis Dialog?您没有指定任何关于Luis Dialog的内容,并且您提到所有内容都在根对话框中?Luis Dialog没有MessageReceiveDaSync。请使用问题的详细信息更改您的问题。好的,谢谢,我将更改它。因此,为了确认我们无法在Luis Dialog中触发提交操作,我们只需创建另一个管理自适应卡的对话框?尝试使用根对话框并转发到具有
上下文的LUIS对话框。转发
,这样您可以在点击LUIS之前根据需要操作值
和活动