Невозможно прочитать весь обратный вызов веб-просмотра из API Gupshup.io внутри моей облачной функции

У меня есть функция Google Cloud, написанная на Node-js, которая вызывается каждый раз, когда кто-то отправляет форму веб-просмотра Gupshup без сервера

Я ожидаю получить следующую информацию в моем веб-сервисе:

{
    "linkId": "f42414e2-ce1a-4bf5-b40a-e88e4d4d9aee",
    "payload": [{
                  "fieldname": "name",
                  "fieldvalue": "Alice"
               },{
                   "fieldname": "gender",
                   "fieldvalue": "Male"
               },{
                   "fieldname": "account",
                   "fieldvalue": "savings"
               },{
                   "fieldname": "interest",
                   "fieldvalue": "Cooking"
               }],
    "time": 1479904354249,
    "userid": "UserID"
}

Но у меня проблемы с получением объектов внутри "полезной нагрузки", объектов времени и использования.

Это мой код:

exports.orderForm = (req, res) => {
  const data = req.body;
  const ref = data.userid;
  var propValue;

  console.log(req.method); // POST
  console.log(req.get('content-type')); // application/x-www-form-urlencoded
  console.log(req.body.linkid); // undefined
  console.log(req.body.payload[0].fieldname); // cannot read property from undefined error
  console.log(req.body.time); //undefined
  console.log(req.body.userid); // undefined

  // I attemp to print the properties, but they won't print
  for(var propName in req.body.payload) {
      propValue = req.body.payload[propName];
      console.log(propName, propValue);
  }

  console.log('JSON.stringify: ' + JSON.stringify(req.body)); // This prints the following:
  // JSON.stringify: {"{\"linkId\":\"f42414e2-ce1a-4bf5-b40a-e88e4d4d9aee\",\"payload\":":{"{\"fieldname\":\"account\",\"fieldvalue\":\"savings\"},{\"fieldname\":\"name\",\"fieldvalue\":\"Alice\"},{\"fieldname\":\"gender\",\"fieldvalue\":\"Male\"},{\"fieldname\":\"interest\",\"fieldvalue\":\"Cooking\"}":""}}

  res.sendStatus(200);
};

Как вы можете видеть, stringify позволяет видеть все свойства полезной нагрузки, но до этого я не могу получить к ним доступ в объекте js.

Вторая проблема заключается в том, что событие после stringify не может видеть время и идентификатор пользователя.

Я подозреваю, что должен обрабатывать запросы content-type="application/x-www-form-urlencoded" иначе, чем я привык, но я не смог найти никаких примеров для этого.

1 ответ

Ответ, который вы получаете от Gupshup на ваш обратный вызов после отправки бессерверной формы веб-просмотра, уже является строковым объектом.

Следовательно, вам нужно разобрать его, используя JSON.parse() чтобы получить объект JSON, а затем вы сможете получить значения.

Образец кода

exports.orderForm = (req, res) => {
  const data = JSON.parse(req.body);
  console.log(data.linkid); // undefined
  console.log(data.payload[0].fieldname); 
  console.log(data.time); 
  console.log(data.userid);
};

Это должно решить вашу проблему.

Другие вопросы по тегам