Botframework 处理AdaptiveCard操作get“;抱歉,我的机器人程序代码有问题。”;
我在处理AdaptiveCards的一个项目中遇到了问题。我的方法在我所有的其他项目中都非常有效,只是不是最近的。我尝试回滚bot.builder和bot.connector的版本,以匹配其他项目,但没有帮助 该卡显示良好,但一旦你按下按钮,你会得到良好的旧“对不起,我的机器人代码有问题”。我正在根对话框中显示卡,并调用context.wait(MessageReceivedAsync) 调试,如果我在卡显示消息ReceivedAsync被触发后向bot键入内容。点击按钮,永远不会到达那里。将断点直接放在MessageController中,它就会到达那里,但进入断点会立即消失,并显示“对不起,我的bot代码有问题。” 这是我的MessageController:Botframework 处理AdaptiveCard操作get“;抱歉,我的机器人程序代码有问题。”;,botframework,adaptive-cards,Botframework,Adaptive Cards,我在处理AdaptiveCards的一个项目中遇到了问题。我的方法在我所有的其他项目中都非常有效,只是不是最近的。我尝试回滚bot.builder和bot.connector的版本,以匹配其他项目,但没有帮助 该卡显示良好,但一旦你按下按钮,你会得到良好的旧“对不起,我的机器人代码有问题”。我正在根对话框中显示卡,并调用context.wait(MessageReceivedAsync) 调试,如果我在卡显示消息ReceivedAsync被触发后向bot键入内容。点击按钮,永远不会到达那里。将断
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
await Conversation.SendAsync(activity, () => new RootDialog());
}
]
}
在我的RootDialog中:
await context.PostAsync(CardHelper.MakeCard(context, "~\\AdaptiveCards\\ContactInfo311.json", replacements));
context.Wait(MessageReceivedAsync);
该卡显示良好,但一旦你按下按钮,你会得到良好的旧“对不起,我的机器人代码有问题”
我用下面的示例代码做了一个测试,它对我很有用,你可以参考它。如果可能的话,你可以在你这边测试它,看看它是否适合你
在RootDialog中:
packages.config
测试结果:
此外,要解决项目中的问题,可以设置断点并逐步调试代码,以跟踪活动
,并检查错误是否由活动引起。Text=null
谢谢你!此问题不在MessageReceivedAsync中。RootDialog中messagereceivedasync函数中的断点永远不会到达,一旦发生这种情况,bot代码就会立即终止:wait Conversation.SendAsync(活动,()=>new RootDialog());你提到的Activity.Text为空确实帮助我检查了我的scorable对话框,这就是我发现问题的地方!scorable对话框试图使用空文本。非常感谢。
await context.PostAsync(CardHelper.MakeCard(context, "~\\AdaptiveCards\\ContactInfo311.json", replacements));
context.Wait(MessageReceivedAsync);
[Serializable]
public class RootDialog : IDialog<object>
{
public Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
return Task.CompletedTask;
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
var replymes = context.MakeMessage();
if (activity.Text != null)
{
if (activity.Text.ToLower().Contains("cards"))
{
replymes = context.MakeMessage();
var cardjson = await GetCardText("ContactInfo311");
var results = AdaptiveCard.FromJson(cardjson);
var card = results.Card;
replymes.Attachments.Add(new Attachment()
{
Content = card,
ContentType = AdaptiveCard.ContentType,
Name = "Card"
});
}
else
{
replymes.Text = $"You sent {activity.Text}";
}
}
else if (activity.Value != null)
{
replymes.Text = $"submit data: {activity.Value}";
}
// return our reply to the user
await context.PostAsync(replymes);
context.Wait(MessageReceivedAsync);
}
public async Task<string> GetCardText(string cardName)
{
var path = System.Web.HttpContext.Current.Server.MapPath($"~/AdaptiveCards/{cardName}.json");
if (!File.Exists(path))
return string.Empty;
using (var f = File.OpenText(path))
{
return await f.ReadToEndAsync();
}
}
}
{
"type": "AdaptiveCard",
"version": "1.0",
"body": [
{
"type": "TextBlock",
"size": "large",
"weight": "bolder",
"text": "This is Adaptive Card"
}
],
"actions": [
{
"type": "Action.Submit",
"data": {
"action": "requestContact"
},
"title": "Clike me"
}
]
}
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AdaptiveCards" version="1.0.0" targetFramework="net46" />
<package id="Autofac" version="3.5.2" targetFramework="net46" />
<package id="Chronic.Signed" version="0.3.2" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.Bot.Builder" version="3.15.2.2" targetFramework="net46" />
<package id="Microsoft.Bot.Connector" version="3.15.2.2" targetFramework="net46" />
<package id="Microsoft.CSharp" version="4.4.0" targetFramework="net46" />
<package id="Microsoft.IdentityModel.Logging" version="1.1.4" targetFramework="net46" />
<package id="Microsoft.IdentityModel.Protocol.Extensions" version="1.0.4.403061554" targetFramework="net46" />
<package id="Microsoft.IdentityModel.Protocols" version="2.1.4" targetFramework="net46" />
<package id="Microsoft.IdentityModel.Protocols.OpenIdConnect" version="2.1.4" targetFramework="net46" />
<package id="Microsoft.IdentityModel.Tokens" version="5.1.4" targetFramework="net46" />
<package id="Microsoft.Rest.ClientRuntime" version="2.3.2" targetFramework="net46" />
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="3.1.0" targetFramework="net46" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net46" />
<package id="System.IdentityModel.Tokens.Jwt" version="5.1.4" targetFramework="net46" />
</packages>