[c#] Facebook Chat API (XMPP)를 통해 메시지 보내기 C #

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

이 문서에서 다루는 서비스 및 API는 Platform API v2.0 릴리스에서 더 이상 사용되지 않습니다. 버전 1.0이 더 이상 사용되지 않으면 chat.facebook.com을 더 이상 사용할 수 없습니다.

중대한! 이것을 읽으면 아마도이 질문과 관련된 어떤 것과는 완전히 다른 것을하고 싶을 것입니다.

Facebook Chat API에 연결하는 WebForms C #으로 채팅을 만들고 있습니다.

나는 또한 이 SO 질문 (및 모든 링크)을 보았습니다 . Facebook이 auth_token지금 요구 하기 때문에 일부 부분은 더 이상 관련이 없습니다 .

이를 복제하려면 Facebook 웹 앱을 appId설정하고 xmpp_login 권한이 설정된 및 사용자 계정을 사용해야합니다. 그런 다음 Chat.aspxwith 코드를 생성하고 그에 따라이 코드를 붙여 넣습니다. 그리고 상호 작용할 하드 코딩 된 사용자를 교체합니다.

두 가지 (아마 세 가지) 문제가있어 채팅 메시지를 보내려는 목표를 달성 할 수 없습니다.

  1. // finishes auth process문서에 명시된 프로세스 가 문서 설명 과 일치하지 않습니다
    (Facebook에서 SSL / TLS 기반 성공 메시지를받은 후 응답을받지 못함).
  2. ‘채팅 메시지 보내기’부분이 어떻게 설정되어야하는지 모르겠고, 페이스 북에서 어떤 메시지도받지 못하기 때문에 무엇이 잘못되었는지 알기가 어렵습니다.

PasteBin에 대한 전체 코드는 다음과 같습니다 .

또한 xmpp_login 권한을 추가하기위한 몇 가지 도우미가 있으며 명확성을 위해 제거되었습니다.

전역 변수 :

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

그런 다음 Page_Load필요한 모든 단계가 수행됩니다 (또는 수행되어야합니다). 주목할 가치가있는 것은 SendMessage("test");. 채팅 메시지를 보내는 데 성공할 수 있는지 확인하기 위해 거기에 두려고했습니다. SetUserNameAndAuthToken인증 토큰과 사용자 이름을 전역 변수로 설정합니다. AuthToken이 작동합니다.

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

}

그래서 응답을받은 다음 서버에 응답을 보냅니다.

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

1 분 40 초가 소요되며 응답은 다음과 같습니다.

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

마지막으로 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;
}

모든 응답은 ""입니다. 에서 Read메서드를 보면 SendWithSsl: 0 바이트입니다. 메시지를 보내려고하면 0 바이트 Facebook에서 데이터를 읽습니다. 왜 그런지 모르겠어요?



답변

이제 새로운 API가 있습니다. 메신저 플랫폼은 어떻게 작동합니까? 사람이 메신저를 통해 비즈니스에 메시지를 보낼 때이 페이지가 앱을 사용하여 대화를 부분적으로 또는 완전히 자동화하는 한 다음이 발생합니다. Facebook 서버는 메시징 앱이 호스팅되는 비즈니스 서버의 URL로 웹훅을 보냅니다. Send API를 사용하면 앱이 메신저에있는 사람에게 응답 할 수 있습니다. 이러한 방식으로 개발자는 자동화 된 흐름을 통해 사람들을 이끄는 안내 식 대화를 구축하거나 메신저에서 에이전트와 비즈니스 존재 사이의 다리 역할을하는 앱을 구축 할 수 있습니다.

메신저 플랫폼은 사용하기 위해 지불 할 필요가 없습니다. 기업이 고객의 문의를 처리하기위한 것입니다. 고객이 상호 작용할 수있는 경험을 구축 한 후에는 광고를 활용하여 클릭 투 메신저 광고 또는받은 편지함 광고와 같이 사람들을 귀하의 경험으로 유도 할 수 있습니다.

Messenger for Business 환경은 어떤 모습입니까? Original Coast Clothing이라는 메신저에서 채팅 할 수있는 샘플 전자 상거래 비즈니스가 있습니다.

여기에서 샘플 비즈니스와 채팅

어떻게 시작합니까? 메신저 내에서 경험을 시도 할 수있는 테스트 페이지와 테스트 앱을 만들어 시작할 수 있습니다. 시작하는 데 도움이되는 몇 가지 예가 있습니다. 앱을 배포 할 준비가되면 검토를 위해 제출할 수 있습니다. 앱이 검토 프로세스를 통과하면 대중과 상호 작용할 준비가 된 것입니다.

시작하려면 메신저, Facebook 페이지 및 웹 후크가 전송 될 URL이 필요합니다.

다음은 위의 경험을 테스트 페이지에 배포하여 시작하는 단계별 가이드입니다.

구축 할 준비가 되셨습니까? 시작하다

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

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


답변