2016-04-26 9 views
1

ボットコネクタで登録された簡単なボットをセットアップしました。基本的なダイレクトラインAPI接続設定。別のアプリケーション(C#)では、私はで、HttpClientを使用してconversationId(応答をデシリアライズして)を取得することで、会話を開始してに成功しました。ダイレクトラインAPIでMicrosoftボットコネクタにメッセージを投稿しようとすると「内部サーバーエラー」が発生する

しかし、スレッドにメッセージを投稿しようとすると、「Internal Server Error」というエラーコード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); 
} 

convo_idは、サイトへの最初の呼び出しから撮影はconversationIdである一方で、ログは、コンソールに出力する簡単な方法です。

+0

あなたは完全なエラーを投稿していますか?この回答は、それに関連付けられている番号が必要であることを示唆しているかもしれません、おそらくそれはanwerを見つけるのに役立ちます:http://stackoverflow.com/questions/18713666/500-internal-server-error-when-sending-web-request-using- api – Bassie

+0

編集されました。これは簡単な500エラーです。これは混乱しています。Bot Connector APIが何がうまくいかないかを説明するための詳細はありません。 –

答えて

0

コードの行::のように定義PrintResponseと

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; 

var post_content = new StringContent("Adding to the convo", Encoding.UTF8, "application/json"); 

は問題の原因です。 期待されるメッセージのフォーマットを見てください: http://docs.botframework.com/sdkreference/restapi-directline/#!/Conversations/Conversations_PostMessage

これは、フィールドの束と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"); 
+0

優れたキャッチ!助けてくれてありがとう!その間、最初の答えで識別されたNuGetパッケージを使用するように切り替えましたが、完全な状況を理解することができてうれしいです。すぐに文書が少し明確になることを願っていますが、あなたの洞察は非常に貴重です。 –

0

Microsoft.Bot.Connector.DirectLine NuGetパッケージを使用して、DirectLine APIでいくつかの成功を収めています。

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); 
    } 


} 
+0

ええ、私はそのパッケージを見つけました...私が知る限り、それは完全に文書化されていません。しかし、残念なことに、なぜ簡単なRESTコマンドが失敗しているのかという問題は解決していません。 –

関連する問題