c# facebook xmpp facebook-chat

Enviar mensaje a través de Facebook Chat API(XMPP) C#



facebook-chat (1)

////////////////////////////////////////////////// ////////////////////////////////////////////////

// OBSERVE https://developers.facebook.com/docs/chat/

El servicio y la API que cubre este documento han quedado obsoletos con el lanzamiento de Platform API v2.0. Una vez que la versión 1.0 está en desuso, chat.facebook.com ya no estará disponible.

// Lee esto y probablemente quieras hacer algo completamente diferente a cualquier cosa que tenga que ver con esta pregunta.

////////////////////////////////////////////////// //////////////////////////////////////

Estoy creando un chat con WebForms C # conectando a Facebook Chat API.

También he visto esta pregunta SO (y todos los enlaces). Algunas partes ya no son relevantes ya que Facebook requiere auth_token ahora.

Para replicar esto, debe configurar una aplicación web de Facebook, usar la appId y una cuenta de usuario con el conjunto de permisos xmpp_login. Luego crea un Chat.aspx con código detrás y pega este código en consecuencia. Y reemplace a los usuarios codificados para interactuar.

Tengo dos (tal vez tres) problemas que creo que me impiden tener éxito con mi objetivo de enviar un mensaje de chat.

  1. El proceso indicado como // finishes auth process en la documentación no coincide con la https://developers.facebook.com/docs/chat/ la https://developers.facebook.com/docs/chat/ (no recibiré respuesta después de recibir mi mensaje de éxito basado en SSL / TLS de Facebook).
  2. No tengo idea de cómo se debe configurar la parte ''enviar mensaje de chat'', y como no recibo ningún mensaje de Facebook es difícil saber qué podría estar mal.

Aquí está mi código en su totalidad, en PasteBin .

También tengo algunos ayudantes para agregar permisos de xmpp_login y tales ... eliminados para mayor claridad.

Variables globales:

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/"/>";

Luego, en Page_Load realizan (o se supone que se deben realizar) todos los pasos requeridos. Digno de mención es SendMessage("test"); . Intenté ponerlo allí para ver si SetUserNameAndAuthToken enviar un mensaje de chat ... SetUserNameAndAuthToken establece mi token de autenticación y el nombre de usuario en variables globales. El AuthToken funciona.

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

Entonces recibo una respuesta y luego envío la respuesta al servidor:

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

Esto toma 1 minuto 40 segundos ... y la respuesta es:

<success xmlns=''urn:ietf:params:xml:ns:xmpp-sasl''/>

Finalmente hago el 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; }

Todas las respuestas son "" . Mirando el método Read en SendWithSsl : es 0 bytes. Intentar enviar un mensaje también me da 0 bytes Leer datos de Facebook. No tengo idea de por qué?


Me gustaría ir con una biblioteca jabber / xmpp ya creada y agregarle las cosas de autenticación de Facebook. Ya escribí el mío en PHP pero no en C #. Aunque en unos pocos meses FB Chat API estará muerto (Realmente cojo), encontré muchos ejemplos de C # (que código) cuando busco. Aquí hay un video de cómo hacer un cliente de chat con la fuente en los comentarios: https://www.youtube.com/watch?v=tHOb80TghDA

Aquí hay una aplicación de ejemplo de artículo completa con el código fuente: http://csharp-tricks-en.blogspot.com/2013/10/connect-to-facebook-chat.html

Aquí hay una biblioteca xmpp del paquete nuget específicamente para facebook chat api: https://www.nuget.org/packages/Facebook-Chat/

Si examina la fuente de algunos ejemplos, es probable que vea dónde salió mal o simplemente podría comenzar con uno de los ejemplos. Finalmente, la búsqueda que realicé: https://www.google.com/search?q=c%23+chat+api+library&ie=utf-8&oe=utf-8#safe=off&q=c%23+facebook+chat+api+library