Facebook Chat API (XMPP) C # ile mesaj gönderin


88

GÖZLEMLEYİN https://developers.facebook.com/docs/chat/

Bu belgenin kapsadığı hizmet ve API, Platform API v2.0 sürümüyle birlikte kullanımdan kaldırılmıştır. 1.0 sürümü kullanımdan kaldırıldığında, chat.facebook.com artık kullanılamayacak.

Önemli! Bunu okuyun ve muhtemelen bu soruyla ilgili her şeyden tamamen farklı bir şey yapmak istersiniz.

Facebook Chat API'ye bağlanan WebForms C # ile bir sohbet oluşturuyorum.

Bu SO sorusuna (ve tüm bağlantılara) da baktım . Facebook'un auth_tokenşimdi gerektirmesi nedeniyle bazı bölümler artık alakalı değil .

Bunu çoğaltmak için, bir Facebook web uygulaması appIdkurmalı , ve xmpp_login izin setine sahip bir kullanıcı hesabı kullanmalısınız . Ardından Chat.aspxarkasında bir kod oluşturun ve bu kodu uygun şekilde yapıştırın. Ve etkileşime girmek için sabit kodlanmış kullanıcıları değiştirin.

Sohbet mesajı gönderme amacımla başarılı olamadığımı düşündüğüm iki (belki üç) sorun var.

  1. // finishes auth processDokümantasyonda belirtilen işlem dokümantasyon açıklamasına uymuyor (Facebook'tan SSL / TLS tabanlı başarı mesajımı aldıktan sonra herhangi bir yanıt alamıyorum.)
  2. 'Sohbet mesajı gönder' bölümünün nasıl ayarlanacağı hakkında hiçbir fikrim yok ve Facebook'tan herhangi bir mesaj almadığım için neyin yanlış olabileceğini söylemek zor.

İşte kodumun tamamı PasteBin'de .

Ayrıca xmpp_login izinleri eklemek için bazı yardımcılarım var ve bunun gibi .. netlik için kaldırıldı.

Global değişkenler:

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

Daha sonra Page_Loadgerekli tüm adımlarda gerçekleştirilir (veya yapılması gerekir). Kayda değer SendMessage("test");. Bir sohbet mesajı göndermede başarılı olup olmayacağını görmek için oraya koymaya çalıştım ... SetUserNameAndAuthTokenkimlik doğrulama jetonumu ve kullanıcı adımı genel değişkenlere ayarlıyor. AuthToken çalışır.

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

}

Bu yüzden bir yanıt alıyorum ve ardından yanıtı sunucuya gönderiyorum:

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

Bu 1 dakika 40 saniye sürer ... ve yanıt:

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

Sonunda FinishAuthPorcess () yapıyorum

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

Tüm yanıtlar "". ReadYönteme bakıldığında SendWithSsl: 0 bayt. Bir mesaj göndermeye çalışmak da bana 0 bayt Facebook'tan veri oku veriyor. Neden olduğuna dair hiçbir fikrim yok?


6
@DanielHilgarth Hehe, pekala .. Connect'in ilk kısmı gerekli olmayabilir ama C # 'da bunun nasıl yapılacağına dair çalışan örnekler yok, bu yüzden orada bir facebook sohbeti yapmaya çalışan herkes için bir tane olduğundan emin olacağımı düşündüm i C #. Her şeyi tek bir kod tabanında da yazabilirim, ancak o zaman çok denetlenebilir olmayacak.
Magnus Karlsson

6
Bir cevap istiyorsanız, bu gönderideki kodu, sorunu anlamak için gereken minimum değere indirmenizi öneririm. Kodun geri kalanı (örneğin başkalarının onu yeniden üretebilmesi için) pastebin'i koyabilir ve gönderinizden ona bağlantı verebilir misiniz ?
Daniel AA Pelsmaeker

4
kodunuz tamamlanmamış, bu yüzden kontrol akışını takip edemiyorum. Lütfen hata ayıklama Xml'sini, sunucuya gönderdiklerinizi ve geri aldıklarınızı ekleyin. Neden buradaki mevcut bir XMPP kitaplığını kullanmıyorsunuz ve bu sizin için çok çalışıyor? xmpp.org/xmpp-software/libraries
Alex

4
@MatiCicero chat.facebook.com xmpp sunucusu facebook'a göre 6 ay içinde kapanmak üzere.
Magnus Karlsson

11
@cari Bu çözüme gitmemelisiniz. Bunun yerine agsXMPP gibi bir kitaplık kullanın. Ancak, Facebook sohbet sunucusunu kapattığından bu yana tüm bu çözümler altı ay içinde çalışmayı bırakacak.
Magnus Karlsson

Yanıtlar:


1

Artık yeni api var. Messenger Platformu nasıl çalışır? Bir kişi Messenger'daki bir işletmeye mesaj gönderdiğinde ve bu Sayfa, görüşmeleri kısmen veya tamamen otomatikleştirmek için bir uygulama kullandığı sürece aşağıdakiler gerçekleşecektir. Facebook sunucusu, mesajlaşma uygulamasının barındırıldığı iş sunucusunun URL'sine web kancaları gönderir. Uygulama, Gönder API'sini kullanarak Messenger'daki kişiye yanıt verebilir. Bu şekilde, geliştiriciler insanları otomatik bir akışta yönlendirmek için rehberli görüşmeler oluşturabilir veya aracılarınız ile Messenger'daki iş varlığınız arasında bir köprü görevi görecek bir uygulama oluşturabilir.

Messenger Platformunun kullanımı herhangi bir ödeme gerektirmez. İşletmelerin müşterilerinden gelen soruları ele alması içindir. Müşterilerinizin etkileşimde bulunabileceği deneyiminizi oluşturduktan sonra, örneğin Click-to-Messenger Reklamları veya Gelen Kutusu Reklamları gibi insanları deneyiminize getirmek için Reklamlardan yararlanabilirsiniz.

Messenger for Business deneyimi neye benzer? Messenger'da Original Coast Clothing adında sohbet edebileceğiniz örnek bir e-ticaret işletmemiz var.

Burada Örnek İşletme ile Sohbet Edin

Nasıl başlarım? Messenger'da deneyiminizi denemenizi sağlayan bir test sayfası ve test uygulaması oluşturarak başlayabilirsiniz. Başlamanıza yardımcı olabilecek bazı örneklerimiz var. Uygulamanız dağıtıma hazır olduğunda, incelemeye gönderebilirsiniz. Uygulamanız inceleme sürecimizi geçtiğinde, halkla etkileşimde bulunmaya hazır olacaktır.

Başlamak için Messenger'a, bir Facebook Sayfasına ve webhook'ların gönderileceği bir url'ye ihtiyacınız olacak.

Başlamanız için yukarıdaki deneyimi test sayfanıza yerleştirmek için adım adım bir kılavuz.

İnşa etmeye hazır mısınız? Başlamak

https://developers.facebook.com/products/messenger/

https://developers.facebook.com/docs/messenger-platform/reference/send-api/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.