Node.js Wit.ai SDK — получение имени пользователя в мессенджере

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

Я определил действие имени 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;
  });
};

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

Помощь будет принята с благодарностью :)


person Nitsuja    schedule 23.10.2016    source источник


Ответы (1)


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

Действие 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;
  });
};
person Nitsuja    schedule 23.10.2016
comment
Привет... Знаете ли вы, есть ли способ получить имя пользователя, когда wit.ai интегрирован через встроенный NLP Facebook Messenger? - person SamT; 24.12.2017