29

Я пробовал новую платформу Facebook Messenger и столкнулся с проблемой.Идентификация пользователя Facebook Messenger с помощью UserID от пользователя Facebook

Когда пользователь сначала беседует с моим ботом, я хочу использовать sender.id для поиска пользователя в моей БД и проверки того, являются ли они клиентом или нет, и предлагает более индивидуальный UX.

Пользователь подписался на мою услугу, используя Facebook Войти, но, к сожалению, он появляется на Facebook ID &. Мой идентификатор Facebook Bot отличается от ID, ограниченного App-областями.

Есть ли способ связать 2 идентификатора, чтобы я мог найти пользователя в моей БД?

UPDATE (4/20/2016): Мы получили вокруг этого, попросив пользователей при первом контакте через посыльного, чтобы нажать на ссылку, чтобы войти в свою учетную запись, чтобы мы могли связать их messenger_id с их счета в нашей БД ,

Было бы замечательно, если бы в facebook вместо этого были включены PAGE_SCOPED идентификаторы в конечной точке ids_for_business.

UPDATE: (6/1/2016): последнее обновление Facebook включает в себя новый "Account Linking" функциональность, которая появляется, чтобы решить эту проблему. См https://developers.facebook.com/docs/messenger-platform/account-linking

+2

Лучшее решение, о котором я мог думать, это проверить изображение профиля. Не гарантируется, что пользователь не изменится, но он может дать вам некоторые правильные. – niry

+0

@Richard O'Brien один вопрос: как вы обрабатываете новых пользователей? Правильно знаю, что у меня возникла проблема с тем, что я хочу разрешить пользователям FB Messenger подписываться на мою службу с помощью в iFrame, но похоже, что FB Login SDK не работает в Facebook iFrames of Messenger. – BausTheBig

ответ

7

Последнее обновление Facebook включает в себя новую функциональность «Связывание учетных записей», которая, как представляется, решает эту проблему. См. https://developers.facebook.com/docs/messenger-platform/account-linking

+1

Рекомендуется использовать ссылки на внешние ресурсы, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши коллеги могли понять, что это такое и почему Это здесь. Всегда указывайте наиболее значимую часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. Из раздела [Как ответить] (http://stackoverflow.com/help/how-to-answer). –

1

Это, вероятно, что вы хотите: https://developers.facebook.com/docs/apps/for-business

Это позволяет получить все приложения в области видимости идентификаторов пользователей на основе каждого бизнеса.

+0

Спасибо. Я не понимал, что существует ... похоже, что это может сработать. Я попробую. –

+1

К сожалению, похоже, что это не сработает. Messenger не отображается в списке как отдельное приложение. :( Я думаю, мне нужно будет заставить пользователя щелкнуть ссылку и войти в систему с помощью Facebook, передав идентификатор мессенджера в строке запроса, а затем связать идентификатор FB и идентификатор почтового ящика в моем обратном вызове. –

+0

Имеются ли оба ваших приложения по тому же делу на веб-сайте Facebook? – user3268305

3

К сожалению, в данный момент нет возможности сделать это. Попросить их войти в систему для новых потоков - лучший способ связывания аккаунтов.

2

Да. Вы можете получить информацию, такую ​​как имя, фамилия, профиль pic url, locale, часовой пояс, пол из api. Только вам нужно передать идентификатор id/отправителя получателя и acccess_token вашего бот-посланника.

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

Я решил это по-другому, но она прекрасно работает на графике API, я прочитал почтовый ящик моей страницы так, что, когда любой может взаимодействовать с помощью мессенджера бота, чем я прочитал страницы Входящие и перебирать,

Шаг 1:

Выполните HTTP GET запрос на графике API, вы хотите PAGE_UNIQUE_ID от Graph API,

ПОЛУЧИТЬ ЗАПРОС

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 Советы:

Go ===>https://developers.facebook.com/tools/explorer/ ==> Нажмите "Получить токен" ===> Выберите нужную страницу ===> Наконец Submit, Вы показать идентификатор на вывода, который находится здесь PAGE_UNIQUE_ID.

Осмотр браузера для ответа.

Шаг 2:

После выполнения выше запроса HTTP, вы получите объект JSON, который будет отображаться последние 10 страниц разговора, где включен желательно facebook идентификатор.

Шаг 3:

ли итерация пользователя полного имя, или вы можете использовать lodash или подчеркивание на ваш выбор,

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

Надеется, что это поможет.

+0

Для этого требуется разрешение «read_mailbox», которое, похоже, не так просто: «Это разрешение предоставляется приложениям, создающим клиент под брендом Facebook на платформах, где Facebook еще не доступен. Например, приложения для Android и iOS не будут быть одобренным для этого разрешения. Кроме того, веб-, настольные, автомобильные и телевизионные приложения не получат такого разрешения ». – j0k

Смежные вопросы