C# 尝试通过Direct Line API在Microsoft Bot Connector中发布邮件时出现“内部服务器错误”

C# 尝试通过Direct Line API在Microsoft Bot Connector中发布邮件时出现“内部服务器错误”,c#,botframework,C#,Botframework,我已经设置了一个简单的bot-使用bot Connector注册-我正在尝试设置基本的直连API连接。在我单独的应用程序C中,我已经成功地使用HttpClient启动了一个对话,并通过反序列化响应来检索conversationId 但是,我随后尝试向线程发布一条消息,得到一个内部服务器错误,错误代码500。附加的唯一消息是发生了错误 using(var client = new HttpClient()) { client.BaseAddress = new Uri("https://dire

我已经设置了一个简单的bot-使用bot Connector注册-我正在尝试设置基本的直连API连接。在我单独的应用程序C中,我已经成功地使用HttpClient启动了一个对话,并通过反序列化响应来检索conversationId

但是,我随后尝试向线程发布一条消息,得到一个内部服务器错误,错误代码500。附加的唯一消息是发生了错误

using(var client =  new HttpClient())
{
client.BaseAddress = new Uri("https://directline.botframework.com/");
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Add("Authorization", $"BotConnector {token}");
client.DefaultRequestheaders.Add("Type", "Message");
var post_content = new StringContent("Adding to the convo", Encoding.UTF8, "application/json");
HttpResponseMessage response = new client.PostAsync($"api/conversations/{convo_id}/messages", post_content).Result;
log(response.ReadAsStringAsync().Result);
}

log是一种输出到控制台的简单方法,而Conva_id是从对站点的初始调用中获取的conversationId。

使用Microsoft.Bot.Connector.DirectLine NuGet包,我在DirectLine API方面取得了一些成功

var uri = new Uri("https://directline.botframework.com");

DirectLineClientCredentials creds = new DirectLineClientCredentials(secret);

DirectLineClient client = new DirectLineClient(uri, creds);
Conversations convs = new Conversations(client);

string waterMark;

var conv = convs.NewConversation();
var set = convs.GetMessages(conv.ConversationId);
waterMark = set.Watermark;

Message message = new Message(conversationId: conv.ConversationId, text: "your text");
Console.WriteLine(message.Text);
convs.PostMessage(conv.ConversationId, message);

set = convs.GetMessages(conv.ConversationId, waterMark);
PrintResponse(set);
waterMark = set.Watermark;
将PrintResponse定义为:

private static void PrintResponse(MessageSet set)
{
  var q = from x in set.Messages
          where x.FromProperty == "<YOUR BOTS APP ID HERE>"
          select x.Text;

  foreach (var str in q.ToList())
   {
      Console.WriteLine(">> " +str);
   }


}

使用Microsoft.Bot.Connector.DirectLine NuGet包,我在DirectLine API方面取得了一些成功

var uri = new Uri("https://directline.botframework.com");

DirectLineClientCredentials creds = new DirectLineClientCredentials(secret);

DirectLineClient client = new DirectLineClient(uri, creds);
Conversations convs = new Conversations(client);

string waterMark;

var conv = convs.NewConversation();
var set = convs.GetMessages(conv.ConversationId);
waterMark = set.Watermark;

Message message = new Message(conversationId: conv.ConversationId, text: "your text");
Console.WriteLine(message.Text);
convs.PostMessage(conv.ConversationId, message);

set = convs.GetMessages(conv.ConversationId, waterMark);
PrintResponse(set);
waterMark = set.Watermark;
将PrintResponse定义为:

private static void PrintResponse(MessageSet set)
{
  var q = from x in set.Messages
          where x.FromProperty == "<YOUR BOTS APP ID HERE>"
          select x.Text;

  foreach (var str in q.ToList())
   {
      Console.WriteLine(">> " +str);
   }


}
代码行:

var post_content = new StringContent("Adding to the convo", Encoding.UTF8, "application/json");
是问题的根源。 查看预期消息的格式:

它需要一个JSON对象和一组字段。我能够回复您的问题,并更改了消息的内容,错误消失了

Message message = new Message(conversationId: convId, text: "Happy days");
string output = JsonConvert.SerializeObject(message);
var post_content = new StringContent(output,Encoding.UTF8,"application/json");
代码行:

var post_content = new StringContent("Adding to the convo", Encoding.UTF8, "application/json");
是问题的根源。 查看预期消息的格式:

它需要一个JSON对象和一组字段。我能够回复您的问题,并更改了消息的内容,错误消失了

Message message = new Message(conversationId: convId, text: "Happy days");
string output = JsonConvert.SerializeObject(message);
var post_content = new StringContent(output,Encoding.UTF8,"application/json");

你公布了全部错误了吗?这个答案表明应该有一个与之相关的数字,也许这有助于找到答案:编辑以回应:这是一个简单的500错误。这就是困惑:Bot连接器API没有提供详细信息来解释出错的原因。您发布了完整的错误了吗?这个答案表明应该有一个与之相关的数字,也许这有助于找到答案:编辑以回应:这是一个简单的500错误。这就是困惑:Bot连接器API没有提供详细信息来解释出错的原因。是的,我发现了那个包……据我所知,它完全没有文档记录,这让我很沮丧。但不幸的是,这并没有解决为什么简单的REST命令失败的问题。是的,我发现了那个包……令人沮丧的是,据我所知,它完全没有文档记录。但不幸的是,这并没有解决为什么简单的REST命令失败的问题。这是一个极好的发现!谢谢你的帮助!与此同时,我已经转而使用你的第一个答案所确定的NuGet软件包,但我很高兴能够理解全部情况。我希望文档很快会变得更清晰,但是你在这里的见解非常有价值。这是一个极好的发现!谢谢你的帮助!与此同时,我已经转而使用你的第一个答案所确定的NuGet软件包,但我很高兴能够理解全部情况。我希望文档很快变得更清晰,但是您在这里的见解非常有价值。