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é obsoleta, chat.facebook.com ya no estará disponible.
¡Importante! Lea esto y probablemente quiera hacer algo completamente diferente a cualquier cosa que tenga que ver con esta pregunta.
Estoy creando un chat con WebForms C # que se conecta a la API de chat de Facebook.
También he mirado 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 appId
y una cuenta de usuario con el conjunto de permisos xmpp_login. Entonces crea unChat.aspx
código con detrás y pegue este código en consecuencia. Y reemplace a los usuarios codificados con los que interactuar.
Tengo dos (quizás tres) problemas que creo que me impiden tener éxito con mi objetivo de enviar un mensaje de chat.
- El proceso indicado
// finishes auth process
en la documentación no coincide con el descripción de documentación (no obtengo ninguna respuesta después de recibir mi mensaje de éxito basado en SSL / TLS de Facebook). - No tengo idea de cómo se debe configurar la parte 'enviar mensaje de chat' y, dado que 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 xmpp_login y demás ... 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
todos los pasos requeridos se realizan (o se supone que se deben realizar). Cabe destacar el SendMessage("test");
. Intenté ponerlo allí para ver si podía enviar un mensaje de chat ... SetUserNameAndAuthToken
establece mi token de autenticación y el nombre de usuario en variables globales. 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 Read
método en SendWithSsl
: es 0 bytes. Intentar enviar un mensaje también me da 0 bytes Leer datos de Facebook. ¿No tengo ni idea de por qué?
fuente
Respuestas:
Ahora hay una nueva API. ¿Cómo funciona la plataforma Messenger? Cuando una persona envía un mensaje a una empresa en Messenger y siempre que esta página utilice una aplicación para automatizar total o parcialmente las conversaciones, sucederá lo siguiente. El servidor de Facebook envía webhooks a la URL del servidor empresarial, donde se aloja la aplicación de mensajería. Con la API de envío, la aplicación puede responder a la persona en Messenger. De esta forma, los desarrolladores pueden crear conversaciones guiadas para guiar a las personas a través de un flujo automatizado o crear una aplicación que sirva de puente entre sus agentes y su presencia comercial en Messenger.
La Plataforma Messenger no requiere ningún pago para su uso. Está destinado a que las empresas gestionen las consultas de sus clientes. Una vez que desarrolle su experiencia para que sus clientes interactúen, puede aprovechar los anuncios para atraer a las personas a su experiencia, como por ejemplo, anuncios de clic para mensajería o anuncios en la bandeja de entrada.
¿Cómo es una experiencia de Messenger for Business? Tenemos un ejemplo de negocio de comercio electrónico con el que puede chatear en Messenger llamado Original Coast Clothing.
Chatear con negocios de muestra aquí
¿Cómo empiezo? Puede comenzar creando una página de prueba y una aplicación de prueba que le permita probar su experiencia en Messenger. Tenemos algunos ejemplos que pueden ayudarlo a comenzar. Una vez que su aplicación esté lista para implementarse, puede enviarla para revisión. Cuando su aplicación pase nuestro proceso de revisión, estará lista para interactuar con el público.
Para comenzar, necesitará Messenger, una página de Facebook y una URL a la que se enviarán los webhooks.
Aquí hay una guía paso a paso para implementar la experiencia anterior en su página de prueba para comenzar.
¿Listo para construir? Empezar
https://developers.facebook.com/products/messenger/
https://developers.facebook.com/docs/messenger-platform/reference/send-api/
fuente