2016-10-23 7 views
0

Я новичок в Node.js, и у меня возникли проблемы с поиском пользователя «first name» пользователя facebook с помощью SDK. У меня есть рассказ «приветствие», в котором я хотел бы ответить «Hello {userName}».Node.js Wit.ai SDK - Получить имя пользователя на мессенджере

Я определил имя действия GetUserName, которое связано с «поздравительную» истории:

getUserName({context, entities}) { 
     if(context.fbid) { 
      return new Promise(function(resolve, reject) { 
      if (context.userName) { 
       return requestUserName(context) 
       .then((json) => { 
       context.userName = json.first_name; 
       return context; 
       }) 
       .catch((err) => { 
       console.error('Oops! An error occurred while asking the name of the user: ', 
        err.stack || err); 
       }); 
      } else { 
       return resolve(context); 
      } 
      }); 
     } else { 
      console.error('Oops! Couldn\'t find user for session:', sessionId); 
      // Giving the wheel back to our bot 
      return Promise.resolve() 
     } 
     } 

где requestUserName определяется следующим образом:

const requestUserName = (id) => { 
    const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN); 
    return fetch('https://graph.facebook.com/v2.8/' + id +'?' + qs) 
    .then(rsp => rsp.json()) 
    .then(json => { 
    if (json.error && json.error.message) { 
     throw new Error(json.error.message); 
    } 
    return json; 
    }); 
}; 

Даже если действие, кажется, срабатывает, это не работает, и я не знаю причины :( Удивительно, но другое действие срабатывает, но я не знаю, почему, поскольку это действие не связано с историей «приветствия». Я думаю, что я пропустил какую-то ключевую концепцию SDK Node.js.

справка была бы благодарна :)

ответ

0

Я решил свою проблему. Если вам интересно, вот мой код.

Действие GetUserName:

getUserName({sessionId, context, entities}) { 
    const recipientId = sessions[sessionId].fbid; 
    const name = sessions[sessionId].name; 
    if(recipientId) { 
     return new Promise(function(resolve, reject) { 
     if (!name) { 
      return requestUserName(recipientId) 
      .then((json) => { 
      context.userName = json.first_name; 
      sessions[sessionId].name = json.first_name; 
      resolve(context); 
      }) 
      .catch((err) => { 
      console.error('Oops! An error occurred while asking the name of the user: ', 
       err.stack || err); 
      }); 
     } else { 
      // Retrieve the name of the user 
      context.userName = name; 
      return resolve(context); 
     } 
     }); 
    } else { 
     console.error('Oops! Couldn\'t find user for session:', sessionId); 
     // Giving the wheel back to our bot 
     return Promise.resolve() 
    } 
    }, 

запрос Имя пользователя:

const requestUserName = (id) => { 
    const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN); 
    return fetch('https://graph.facebook.com/v2.8/' + encodeURIComponent(id) +'?' + qs) 
    .then(rsp => rsp.json()) 
    .then(json => { 
    if (json.error && json.error.message) { 
     throw new Error(json.error.message); 
    } 
    return json; 
    }); 
}; 
+0

Привет ... Вы знаете, если есть способ, которым мы можем получить имя пользователя, когда wit.ai является интегрированы через встроенный в НЛП Facebook Messenger? – SamT