Identifying Facebook Messenger user with UserID from a Facebook Login

39,438

Solution 1

Facebook's latest update includes a new "Account Linking" functionality that appears to solve this issue. See https://developers.facebook.com/docs/messenger-platform/account-linking

Solution 2

Unfortunately, there's no way of doing that currently. Asking them to login for new threads is the best way of linking accounts.

Solution 3

Yes. You can get details like first name, last name, profile pic url, locale, timezone, gender from an api. Only you have to pass is their recipient id/sender id and acccess_token of your messenger bot.

https://graph.facebook.com/v2.6/USER_ID?fields=first_name,last_name,profile_pic,locale,timezone,gender&access_token=TOKEN

Solution 4

I solved it different way but it works perfectly by graph API,i read mailbox of my page so that when any one can interact by messenger bot than i read pages inbox and iterate through,

Step 1:

Do a HTTP get request by graph API , you want a PAGE_UNIQUE_ID from Graph API ,

GET REQUEST

https://graph.facebook.com/v2.6/<PAGE_UNIQUE_ID>?fields=conversations.limit(10){participants,updated_time,id}&access_token=<PAGE_ACCESS_TOKEN>

PAGE_UNIQUE_ID Hints:

Go ===> https://developers.facebook.com/tools/explorer/ ==> Press "Get Token" ===> Select your desired page ===>Finally Submit , You show a id on output that is PAGE_UNIQUE_ID in here.

Check on browser for resoponse.

Step 2:

After doing above http request ,you get a JSON object that will show latest 10 conversation of pages where desired facebook id included.

Step 3:

Do iteration through by user full name or you can use lodash or underscore at your choice,

getUserID(response,'Zahid Rahman')


function getUserID(response, fullname) {
  if (response && response.conversations && response.conversations.data) { //Check response is correct
    var conversations = response.conversations.data;                       //Get all conversations
    for (var j = 0; j < conversations.length; j++) {
      var conversationsParticipants = conversations[j].participants.data; 
      for (var k = 0; k < conversationsParticipants.length; k++) {         //Get all particiapnts of a single conversation.

        var conversationsParticipantsEach = conversationsParticipants[k];
        if (conversationsParticipantsEach.name === fullname) {             //Check fullname match or not
          console.log("Desired Facebook User ID : " + conversationsParticipants[k].id);
          return conversationsParticipants[k].id;     
        } 
      }
    }
  }
}

Hope it will help you.

Solution 5

This is probably what you want: https://developers.facebook.com/docs/apps/for-business

It allows you to get all of the app-scoped user ids on a per-business basis.

Share:
39,438
Admin
Author by

Admin

Updated on July 09, 2022

Comments

  • Admin
    Admin almost 2 years

    I am trying out the new Facebook Messenger Platform and have hit a bit of a problem.

    When a user first chats with my Bot, I want to use the sender.id to lookup the user in my DB and verify whether they're a customer or not and offer a more tailored UX.

    User's sign up to my service using Facebook Login, but unfortunately it appears my App's Facebook ID & my Bot's Facebook ID are different due to IDs being limited to App-scopes.

    Is there any way associate the 2 IDs to allow me to find a user in my DB?

    UPDATE (4/20/2016): We got around this by asking users on first contact via messenger to click a link to login to their account so we could associate their messenger_id with their account in our DB.

    Would be awesome if facebook instead included PAGE_SCOPED IDs in the ids_for_business endpoint.

    UPDATE: (6/1/2016): Facebook's latest update includes a new "Account Linking" functionality that appears to solve this issue. See https://developers.facebook.com/docs/messenger-platform/account-linking