Dialogflow не выполняет веб-запросы - PullRequest
0 голосов
/ 13 марта 2019

Я написал маленький файл js, который возвращает отправление общественного транспорта.Вот что я ожидаю:

const dvb = require("dvbjs");

dvb.findStop("NUP").then((data) => {
    console.log( "Abfahrten für "+data[0].name+ " in " +data[0].city+":" );
    dvb.monitor(data[0].id, 0, 1).then((data) => {
        for (const bus of data){
            console.log(bus.mode.title +" "+ bus.line+" Richtung "+bus.direction+ " in "+bus.arrivalTimeRelative+ " Minuten.")
        }
    });
});

Вывод на моей консоли выглядит следующим образом:

Abfahrten für Nürnberger Platz in Dresden:
Straßenbahn 8 Richtung Hellerau in 3 Minuten.

Это нормально.Теперь я изменил его, поэтому Google Assistant может читать выходные данные:

app.intent('Haltestellenabfrage', (conv, {haltestelle}) => {
    //conv.ask("Debug 1");
    dvb.findStop("NUP").then((data) => {
        //conv.ask("Debug 2");
        conv.ask( "Abfahrten für "+data[0].name+ " in " +data[0].city+":" );
        dvb.monitor(data[0].id, 0, 1).then((data) => {
            for (const bus of data){
                //conv.ask("Debug 3");
                conv.close(bus.mode.title +" "+ bus.line+" Richtung "+bus.direction+ " in "+bus.arrivalTimeRelative+ " Minuten.");
            }
        });
    });
    //conv.ask("Debug 3");
});

Когда я запускаю свое действие на Google в симуляторе, я получаю следующую ошибку и не получаю ответа:

{
  "responseMetadata": {
    "status": {
      "code": 10,
      "message": "Failed to parse Dialogflow response into AppResponse because of empty speech response",
      "details": [
        {
          "@type": "type.googleapis.com/google.protobuf.Value",
          "value": "{\"id\":\"bad774a2-9e35-4ced-980f-d4e75d710727\",\"timestamp\":\"2019-03-13T11:50:56.405Z\",\"lang\":\"de\",\"result\":{},\"alternateResult\":{},\"status\":{\"code\":206,\"errorType\":\"partial_content\",\"errorDetails\":\"Webhook call failed. Error: 500 Internal Server Error\"},\"sessionId\":\"ABwppHHpg1lcJFHtSSM8Pmg4gWWkjgICLeZhBuwFb_UJTXuvVyVc5jE5QWLIpGYRCQOHAVmHTzunZw\"}"
        }
      ]
    }
  }
}

Что бы я ни делал, часть в предложении .then () никогда не выполняется Dialogflow.Я абсолютный новичок в javascript, поэтому я не знаю, что еще попробовать.

1 Ответ

0 голосов
/ 13 марта 2019

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

Вы используете Обещания, но не возвращаете их.

Так как вы, вы можете просто вернуть Обещание с такой строкой, как

return dvb.findStop("NUP").then((data) => {
...