OBSERVE https://developers.facebook.com/docs/chat/
O serviço e a API que este documento cobre foram descontinuados com o lançamento da Platform API v2.0. Assim que a versão 1.0 for descontinuada, chat.facebook.com não estará mais disponível.
Importante! Leia isto e provavelmente você deseja fazer algo completamente diferente do que qualquer coisa que tenha a ver com esta questão.
Estou criando um bate-papo com WebForms C # conectando-se à API de bate-papo do Facebook.
Também examinei esta questão do SO (e todos os links). Algumas partes não são mais relevantes, já que o Facebook exige auth_token
agora.
Para replicar isso, você deve configurar um aplicativo da web do Facebook, usar o appId
e uma conta de usuário com a permissão xmpp_login definida. Em seguida, crie um Chat.aspx
with code behind e cole esse código de acordo. E substitua os usuários codificados para interagir.
Tenho dois (talvez três) problemas que acredito que me impedem de ter sucesso com meu objetivo de enviar uma mensagem de chat.
- O processo indicado
// finishes auth process
na documentação não corresponde à descrição da documentação (não estou recebendo nenhuma resposta depois de receber minha mensagem de sucesso baseada em SSL / TLS do Facebook). - Não tenho ideia de como a parte 'enviar mensagem de bate-papo' deve ser configurada e, como não recebo nenhuma mensagem do Facebook, é difícil dizer o que pode estar errado.
Aqui está meu código inteiro, em PasteBin .
Eu também tenho alguns auxiliares para adicionar permissões xmpp_login e outros. Removidos para maior clareza.
Variáveis globais:
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\"/>";
Então, Page_Load
todas as etapas necessárias são (ou deveriam ser) executadas. Vale a pena notar é o SendMessage("test");
. Eu só tentei colocá-lo lá para ver se ele teria sucesso em enviar uma mensagem de chat ... SetUserNameAndAuthToken
define meu token de autenticação e nome de usuário para variáveis globais. O 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);
}
Recebo uma resposta e a envio ao 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;
}
Isso leva 1 minuto e 40 segundos ... e a resposta é:
<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
Finalmente, faço o 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 as respostas são ""
. Olhando para o Read
método em SendWithSsl
: é 0 bytes. Tentar enviar uma mensagem também me dá 0 bytes de dados de leitura do Facebook. Eu não tenho ideia do porquê?
fonte
Respostas:
Agora há uma nova API. Como funciona a plataforma Messenger? Quando uma pessoa envia uma mensagem para uma empresa no Messenger e enquanto esta Página usa um aplicativo para automatizar parcial ou totalmente as conversas, acontecerá o seguinte. O servidor do Facebook envia webhooks para a URL do servidor de negócios, onde o aplicativo de mensagens está hospedado. Usando a API de envio, o aplicativo pode responder à pessoa no Messenger. Dessa forma, os desenvolvedores podem construir conversas guiadas para conduzir as pessoas por um fluxo automatizado ou construir um aplicativo para servir como uma ponte entre seus agentes e sua presença comercial no Messenger.
A plataforma Messenger não exige nenhum pagamento para ser usada. Destina-se a empresas para lidar com as consultas de seus clientes. Depois de criar sua experiência para os clientes interagirem, você pode aproveitar os anúncios para trazer as pessoas à sua experiência, como, por exemplo, anúncios click-to-Messenger ou anúncios na caixa de entrada.
Qual é a aparência de uma experiência no Messenger for Business? Temos um exemplo de negócio de comércio eletrônico com o qual você pode bater um papo no Messenger, chamado Original Coast Clothing.
Converse com um exemplo de empresa aqui
Como eu começo? Você pode começar criando uma página de teste e um aplicativo de teste que permite que você experimente sua experiência no Messenger. Temos alguns exemplos que podem ajudá-lo a começar. Assim que seu aplicativo estiver pronto para implantação, você pode enviá-lo para revisão. Quando seu aplicativo for aprovado em nosso processo de revisão, ele estará pronto para interagir com o público.
Para começar, você precisará do Messenger, de uma página do Facebook e de um url para onde os webhooks serão enviados.
Aqui está um guia passo a passo para implantar a experiência acima em sua página de teste para você começar.
Pronto para construir? Iniciar
https://developers.facebook.com/products/messenger/
https://developers.facebook.com/docs/messenger-platform/reference/send-api/
fonte