Как сообщить пользователю о сбоях POST в обещаниях Dialogflow? - PullRequest
0 голосов
/ 09 мая 2019

В моем агенте диалогового потока, в выполнении, у меня есть часть в моем коде, где я вызываю обещание, и бот отвечает пользователю некоторыми данными с сервера. В случае успеха все работает как задумано. Однако в случае ошибки (например, прервать работу) я хочу напечатать пользователю сообщение о том, что произошла ошибка, и ему / ей не нужно ждать ответа вечность.

      return new Promise( (resolve,reject) => {
        const request = require('request-promise-native');
        const options = {  
          uri: 'https://server.server.com/example',
          method: 'POST',
          headers: {
            'api-token': 'code'
        },
          body: {
            user:'user_name'
         },
        json: true
    };

    request(options)
        .then(function (body) {
            // POST succeeded
            console.log("got: "+ body);
            agent.add("SUCCESS");
            resolve();
        })
        .catch(function (err) {
            // POST failed...
            console.log("ERROR!: " + err);            
            agent.add("I am sorry for the inconvenience but an error happened during your last call.");
            agent.add("Please try in a while");
            console.log(err.stack);
        });
    });

Сообщения об ошибках после неудачного сообщения POST печатаются в файлах журналов (поэтому он попадает в раздел .catch), но пользователь не получает никаких сообщений, функция agent.add () в этом не работает случай, который кажется странным. Как я могу напечатать сообщение пользователю, если процедура обещания не удалась?

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Вы можете попытаться сделать это в соответствии с ответом на почтовый запрос. Например, создайте функцию обещания и отклоните ошибку при возникновении ошибки. Затем в вашем обработчике намерений получите отклоненный ответ и отобразите свое сообщение об ошибке, если есть отклоненный ответ от функции.

Я не знаком с запросом-обещанием-родным, но вы можете попробовать это с помощью модуля запроса в вашем обещании

request.post(options, (error, response, body) => {
   if (error) {
     console.log(error);
     reject(error);
   }
   else {
     answer = body;
     resolve(answer);
   }
});

и затем в вашем намерении обработчик

promisefunction()
.then((resolve, reject) => {
if (reject)
{
 agent.add("I am sorry for the inconvenience but an error happened during your last call.");
 agent.add("Please try in a while");
}
else
agent.add("SUCCESS");
}

0 голосов
/ 09 мая 2019

Использовать оператор try-catch?Я не знаю, какая ошибка возникает, но если вы получите ошибку, вы наверняка ее поймаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...