অবলম্বন করুন https://developers.facebook.com/docs/chat/
এই দস্তাবেজের কভার পরিষেবা এবং API এ প্ল্যাটফর্ম API v2.0 প্রকাশের সাথে অবচয় করা হয়েছে। 1.0 সংস্করণটি একবার অবনতি হয়ে গেলে, chat.facebook.com আর উপলভ্য হবে না।
গুরুত্বপূর্ণ! এটি পড়ুন এবং আপনি সম্ভবত এই প্রশ্নের সাথে যা কিছু করা উচিত তার চেয়ে সম্পূর্ণ আলাদা কিছু করতে চান।
আমি ফেসবুক চ্যাট API এ সংযুক্ত হয়ে ওয়েবফর্ম সি সি দিয়ে একটি চ্যাট তৈরি করছি।
আমি এই এসও প্রশ্নটিও (এবং সমস্ত লিঙ্কগুলি) দেখেছি । ফেসবুকের প্রয়োজনীয়তার কারণে কিছু অংশ আর প্রাসঙ্গিক নয়auth_token
এখন ।
এটির অনুলিপি করতে, আপনার একটি ফেসবুক ওয়েব অ্যাপ সেট আপ করা উচিত, appId
এবং এক্সএমপি_লগিন অনুমতি সেট সহ একটি ব্যবহারকারী অ্যাকাউন্ট ব্যবহার করা উচিত । তারপরে একটি তৈরি করুনChat.aspx
কোড সহ পিছনে এবং সেই অনুসারে এই কোডটি আটকে দিন। এবং ইন্টারঅ্যাক্ট করতে হার্ড-কোডড ব্যবহারকারীদের প্রতিস্থাপন করুন।
আমার দুটি (সম্ভবত তিনটি) সমস্যা রয়েছে যা আমি বিশ্বাস করি যে চ্যাট বার্তা প্রেরণে আমার লক্ষ্যটি সফল হতে আমাকে বাধা দেয়।
// finishes auth process
ডকুমেন্টেশনের মতো উল্লিখিত প্রক্রিয়াটি ডকুমেন্টেশনের বর্ণনার সাথে মেলে না (ফেসবুক থেকে আমার এসএসএল / টিএলএস ভিত্তিক সাফল্যের বার্তা পাওয়ার পরে আমি কোনও স্থগিত পাচ্ছি না।)- কীভাবে 'চ্যাট বার্তা প্রেরণ করুন' -র অংশটি কীভাবে সেট আপ করা উচিত তা আমার কোনও ধারণা নেই এবং যেহেতু আমি ফেসবুকের কোনও বার্তা পাইনি তবে কী ভুল হতে পারে তা বলা শক্ত।
এখানে আমার কোডটি পুরোপুরি, পেস্টবিনে ।
আমার কাছে এক্সএমপি_লগিন অনুমতি এবং এই জাতীয় .. যোগ করার জন্য কিছু সহায়ক রয়েছে স্পষ্টতার জন্য মুছে ফেলা হয়েছে।
গ্লোবাল ভেরিয়েবল:
public partial class Chat : Page
{
public TcpClient client = new TcpClient();
NetworkStream stream;
private SslStream ssl;
private string AppId { get; set; }
public string AppSecret { get; set; }
public string AppUrl { get; set; }
public string UserId { get; set; }
public string AccessToken { get; set; }
private string _error = string.Empty;//global error string for watch debugging in VS.
public const string FbServer = "chat.facebook.com";
private const string STREAM_XML = "<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\" xmlns=\"jabber:client\" to=\"chat.facebook.com\" xml:lang=\"en\" xmlns:xml=\"http://www.w3.org/XML/1998/namespace\">";
private const string AUTH_XML = "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='X-FACEBOOK-PLATFORM'></auth>";
private const string CLOSE_XML = "</stream:stream>";
private const string RESOURCE_XML = "<iq type=\"set\" id=\"3\"><bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"><resource>fb_xmpp_script</resource></bind></iq>";
private const string SESSION_XML = "<iq type=\"set\" id=\"4\" to=\"chat.facebook.com\"><session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/></iq>";
private const string START_TLS = "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>";
তারপরে Page_Load
প্রয়োজনীয় সমস্ত পদক্ষেপগুলি সম্পাদনা করা হয় (বা অনুমিত হয়)। মূল্যবান হয় SendMessage("test");
। আমি এখানে এটি চেষ্টা করার চেষ্টা করেছি যে এটি কোনও চ্যাট বার্তা প্রেরণে সফল হবে কিনা ... SetUserNameAndAuthToken
আমার লেখকের টোকেন এবং ব্যবহারকারীর নামকে বৈশ্বিক ভেরিয়েবলগুলিতে সেট করে। আথটোকেন কাজ করে।
protected void Page_Load(object sender, EventArgs e)
{
this.AppId = "000000082000090";//TODO get from appsettings.
//AddAdditionalPermissions("xmpp_login");//TODO handle xmpp_login persmission
this.AppSecret = "d370c1bfec9be6d9accbdf0117f2c495"; //TODO Get appsecret from appsetting.
this.AppUrl = "https://fbd.anteckna.nu";
SetUserNameAndAuthToken();
Connect(FbServer);
// initiates auth process (using X-FACEBOOK_PLATFORM)
InitiateAuthProcess(STREAM_XML);
// starting tls - MANDATORY TO USE OAUTH TOKEN!!!!
StartTlsConnection(START_TLS);
// gets decoded challenge from server
var decoded = GetDecodedChallenge(AUTH_XML);
// creates the response and signature
string response = CreateResponse(decoded);
//send response to server
SendResponseToServer(response);
SendMessage("test");
// finishes auth process
FinishAuthProcess();
// we made it!
string streamresponseEnd = SendWihSsl(CLOSE_XML);
}
সুতরাং আমি একটি প্রতিক্রিয়া পাই তখন আমি প্রতিক্রিয়াটি সার্ভারে প্রেরণ করি:
private void SendResponseToServer(string response)
{
string xml = String.Format("<response xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">{0}</response>", response);
string response2 = SendWihSsl2(xml);
if (!response2.ToLower().Contains("success"))
_error = response2;
}
এটি 1 মিনিট 40 সেকেন্ড সময় নেয় ... এবং প্রতিক্রিয়াটি হ'ল:
<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
শেষ পর্যন্ত আমি FinishAuthPorcess () করি
private void FinishAuthProcess()
{
string streamresponse = SendWithSsl(STREAM_XML);
if (!streamresponse.Contains("STREAM:STREAM"))
_error = streamresponse;
string streamresponse2 = SendWihSsl(RESOURCE_XML);
if (!streamresponse2.Contains("JID"))
_error = streamresponse2;
string streamresponse3 = SendWihSsl(SESSION_XML);
if (!streamresponse3.Contains("SESSION"))
_error = streamresponse2;
}
সমস্ত প্রতিক্রিয়া হয় ""
। এ খুঁজছি Read
পদ্ধতি SendWithSsl
: এটা 0 বাইট। একটি বার্তা প্রেরণের চেষ্টা আমাকে ফেসবুক থেকে 0 বাইট পড়ার ডেটাও দেয়। আমার কোন খোঁজ নেই কেন?