2016-12-06 28 views
0

Facebook Messenger APIに接続するのに苦労しています。FacebookリクエストをFacebook Messenger APIに送信する

The remote server returned an error: (400) Bad Request.

私は、数日間、この時になって、複数の方法を試してみたが、でもなく、かなりの作業を行う少数VSパッケージを試してみました:サーバーが返す続けます。私は認証トークンを何回かチェックしましたが、他に何があるのか​​分かりません。

悪意のある要求を引き起こしていることが明らかなものはありますか? FacebookのAPIページからルートURLをコピーしました。以下のコードのトークンは削除されています。応答を読み込もうとすると、アプリケーションで例外がスローされます。 (にWebResponse FBresponse = FBrequest.GetResponse();)

private string FBSendMessage(string user, string message) 
{ 
    string result = null; 
    string FBroot = "https://graph.facebook.com/v2.6/me/messages?access_token="; 
    string token = "EAA...DZD"; 
    string FBURI = FBroot + token; 

    string FBstring = "{ \"recipient\": { \"id\":\"" + user + "\" }, \"message\": { \"text\":\"" + message + "\" } }"; 

    try 
    { 

     //using (WebClient FBclient = new WebClient()) 
     //{ 
     // result = 
     //  FBclient.UploadString(FBURI, FBstring); 
     //} 

     HttpWebRequest FBrequest = (HttpWebRequest)WebRequest.Create(FBURI); 

     FBrequest.Credentials = CredentialCache.DefaultCredentials; 
     FBrequest.ProtocolVersion = HttpVersion.Version11; 
     FBrequest.Method = "POST"; 
     FBrequest.ContentType = "application/json"; 

     byte[] FBbytes = Encoding.UTF8.GetBytes(FBstring); 
     FBrequest.ContentLength = FBbytes.Length; 

     Stream FBstream = FBrequest.GetRequestStream(); 

     FBstream.Write(FBbytes, 0, FBbytes.Length); 

     FBstream.Close(); 

     WebResponse FBresponse = FBrequest.GetResponse(); 

     Output((((HttpWebResponse)FBresponse).StatusDescription), Log.Error); 

     FBstream = FBresponse.GetResponseStream(); 

     StreamReader FBreader = new StreamReader(FBstream); 

     result = FBreader.ReadToEnd(); 

     FBreader.Close(); 
     FBresponse.Close(); 
    } 
    catch(Exception ex) 
    { 
     Output(ex.Message, Log.Error); 
    } 

    return result; 

} 
+0

レスポンス本文に実際のAPIエラーメッセージがあるはずです。 – CBroe

+0

@CBroeあります。私は昨夜、トラフィックを監視するためにFiddlerを使い始めましたが、それは私にエラーを送信していますが、何らかの理由で私のコードがエラーを読み込んでいないので、読み込む前に失敗しています。応答を読み込もうとすると失敗するので、間違って読み込もうとしています。 – Prdufresne

+0

状況コードによってエラーが示された場合、要求本体が破棄されることがあります。 HTTPリクエストで使用しているパッケージがその点でオプションを提供しているかどうかを確認します。 – CBroe

答えて

0

私は私のコードは問題ではないと判断しました。問題は、無効なユーザーIDでリクエストしていることです。 Facebookは、デフォルトのユーザーIDと同じではないアプリケーション・コンテキスト内にユーザーIDを作成します。メッセージを送信する前に、状況に応じたIDを知るためにメッセージを受け取る必要があります。

+0

正確には、idはページスコープです。 (あなたのボットが動作するすべてのページについて、同じユーザの異なるページスコープのIDが表示されます)。 – CBroe

関連する問題