Gửi tin nhắn qua Facebook Chat API (XMPP) C #


88

QUAN SÁT https://developers.facebook.com/docs/chat/

Dịch vụ và API mà tài liệu này bao gồm đã không còn được dùng nữa với việc phát hành API nền tảng v2.0. Sau khi phiên bản 1.0 không được dùng nữa, chat.facebook.com sẽ không còn khả dụng nữa.

Quan trọng! Đọc đến đây và có thể bạn muốn làm điều gì đó hoàn toàn khác so với bất cứ điều gì liên quan đến câu hỏi này.

Tôi đang tạo cuộc trò chuyện bằng WebForms C # kết nối với API trò chuyện của Facebook.

Tôi cũng đã xem xét câu hỏi SO này (và tất cả các liên kết). Một số phần không còn phù hợp vì Facebook yêu cầu auth_tokenbây giờ.

Để tái tạo điều này, bạn nên thiết lập ứng dụng web Facebook, sử dụng appIdvà tài khoản người dùng với quyền xmpp_login được đặt. Sau đó, tạo một Chat.aspxmã có mã phía sau và dán mã này cho phù hợp. Và thay thế những người dùng được mã hóa cứng để tương tác.

Tôi có hai (có thể là ba) vấn đề mà tôi tin rằng tôi không thể thành công với mục tiêu gửi tin nhắn trò chuyện.

  1. Quy trình được lưu ý như // finishes auth processtrong tài liệu không khớp với mô tả tài liệu (Tôi không nhận được bất kỳ hồi đáp nào sau khi tôi nhận được thông báo thành công dựa trên SSL / TLS của mình từ Facebook.)
  2. Tôi không biết phần 'gửi tin nhắn trò chuyện' sẽ được thiết lập như thế nào và vì tôi không nhận được bất kỳ tin nhắn nào từ Facebook nên rất khó để biết được điều gì có thể xảy ra.

Đây là toàn bộ mã của tôi, trên PasteBin .

Tôi cũng có một số người trợ giúp để thêm quyền xmpp_login và các quyền đó .. đã bị xóa để rõ ràng.

Các biến toàn cục:

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

Sau đó, trong Page_Loadtất cả các bước cần thiết được thực hiện (hoặc được cho là). Đáng chú ý là SendMessage("test");. Tôi chỉ cố gắng đặt nó ở đó để xem liệu nó có thành công trong việc gửi tin nhắn trò chuyện hay không ... SetUserNameAndAuthTokenđặt mã xác thực và tên người dùng của tôi thành các biến toàn cục. AuthToken hoạt động.

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

}

Vì vậy, tôi nhận được phản hồi sau đó tôi gửi phản hồi đến máy chủ:

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

Quá trình này mất 1 phút 40 giây ... và phản hồi là:

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

Cuối cùng, tôi thực hiện 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;
}

Tất cả các phản hồi là "". Nhìn vào Readphương thức trong SendWithSsl: nó là 0 byte. Cố gắng gửi tin nhắn cũng cho tôi 0 byte Đọc dữ liệu từ Facebook. Tôi không biết tại sao?


6
@DanielHilgarth Hehe, à .. phần đầu tiên của Connect có thể không cần thiết nhưng không có ví dụ nào về cách thực hiện điều này trong C # nên tôi nghĩ tôi sẽ đảm bảo có một cái cho bất kỳ ai ngoài kia đang cố gắng trò chuyện trên facebook tôi C #. Tôi cũng có thể viết mọi thứ trong một cơ sở mã nhưng sau đó nó sẽ không thể giám sát được.
Magnus Karlsson

6
Nếu bạn muốn có câu trả lời, tôi khuyên bạn nên rút mã trong bài đăng này xuống chỉ mức tối thiểu cần thiết để hiểu vấn đề. Phần còn lại của mã (ví dụ như để người khác có thể sao chép nó) bạn có thể đặt trên pastebin và liên kết đến nó từ bài đăng của bạn.
Daniel AA Pelsmaeker

4
mã của bạn chưa hoàn chỉnh, vì vậy tôi không thể theo dõi luồng điều khiển. Vui lòng đính kèm Xml gỡ lỗi, những gì bạn gửi đến máy chủ và những gì bạn nhận lại. Tại sao bạn không sử dụng thư viện XMPP hiện có từ đây, thư viện này thực sự khó khăn cho bạn? xmpp.org/xmpp-software/libraries
Alex

4
@MatiCicero Máy chủ xmpp chat.facebook.com sắp đóng cửa sau 6 tháng nữa theo facebook.
Magnus Karlsson

11
@cari Bạn không nên đi với giải pháp này. Thay vào đó, hãy sử dụng một thư viện như agsXMPP. Tuy nhiên, tất cả các giải pháp này sẽ ngừng hoạt động trong vòng sáu tháng kể từ khi Facebook đóng máy chủ trò chuyện.
Magnus Karlsson

Câu trả lời:


1

Hiện có api mới. Nền tảng Messenger hoạt động như thế nào? Khi một người gửi tin nhắn cho doanh nghiệp trên Messenger và miễn là Trang này sử dụng ứng dụng để tự động hóa một phần hoặc hoàn toàn các cuộc trò chuyện, điều sau sẽ xảy ra. Máy chủ Facebook gửi webhook đến URL của máy chủ doanh nghiệp, nơi lưu trữ ứng dụng nhắn tin. Sử dụng API Gửi, ứng dụng có thể trả lời người đó trên Messenger. Bằng cách này, các nhà phát triển có thể tạo các cuộc trò chuyện có hướng dẫn để dẫn dắt mọi người thông qua quy trình tự động hoặc xây dựng một ứng dụng để làm cầu nối giữa các đại lý và sự hiện diện của doanh nghiệp bạn trên Messenger.

Nền tảng Messenger không yêu cầu bất kỳ khoản thanh toán nào để sử dụng. Nó có nghĩa là để các doanh nghiệp xử lý các yêu cầu từ khách hàng của họ. Sau khi bạn xây dựng trải nghiệm của mình để khách hàng tương tác, bạn có thể tận dụng Quảng cáo để đưa mọi người đến trải nghiệm của mình, chẳng hạn như Quảng cáo nhấp để nhắn tin hoặc Quảng cáo hộp thư đến.

Trải nghiệm Messenger for Business trông như thế nào? Chúng tôi có một doanh nghiệp Thương mại điện tử mẫu mà bạn có thể trò chuyện trên Messenger có tên là Original Coast Clothing.

Trò chuyện với Doanh nghiệp mẫu Tại đây

Làm cách nào để bắt đầu? Bạn có thể bắt đầu bằng cách tạo một trang thử nghiệm và ứng dụng thử nghiệm cho phép bạn thử trải nghiệm của mình trong Messenger. Chúng tôi có một số ví dụ có thể giúp bạn bắt đầu. Sau khi ứng dụng của bạn sẵn sàng triển khai, bạn có thể gửi ứng dụng đó để được xem xét. Khi ứng dụng của bạn vượt qua quy trình xem xét của chúng tôi, ứng dụng sẽ sẵn sàng tương tác với công chúng.

Để bắt đầu, bạn cần có Messenger, Trang Facebook và url nơi các webhook được gửi đến.

Dưới đây là hướng dẫn từng bước để triển khai trải nghiệm trên vào trang thử nghiệm của bạn để giúp bạn bắt đầu.

Sẵn sàng xây dựng? Bắt đầu

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

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.