DialogFlow устанавливает 12:00:00 как начало дня, если время не указано в тексте - PullRequest
0 голосов
/ 09 июля 2020

Я учусь создавать чат-ботов с помощью DialogFlow. В качестве примера я создал простое намерение сообщить свой текущий вес. Я построил на своем сервере конечную точку для приема данных в виде запросов выполнения и сохранения их в базе данных.

В качестве параметров данных я указал вес как @ sys.unit-weight и дату как @ sys.date. Когда я указываю дату словами «сегодня» или «завтра», часть даты анализируется правильно, но DialogFlow добавляет 12:00:00 как часть времени. Это немного странно, и я не могу понять, в чем смысл того времени. Это выглядит некорректно.

Я прилагаю скриншот выполнения намерения в консоли DialogFlow, а также полезную нагрузку запроса выполнения. Кто-нибудь знает, как получить даты без времени или с 00:00:00, если время не было указано?

Снимок экрана с запуском намерения консолью DialogFlow

 {
  "responseId": "518945f5-33bf-43a8-86ce-42e422033e6c-425db6e2",
  "queryResult": {
    "queryText": "yes",
    "action": "TrackWeight",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Your weight log was saved. Do you want anything else?",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Your weight log was saved. Do you want anything else?"
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/chatbot-59dda/agent/sessions/414dfa61-4850-eb27-804a-afea25516ab8/contexts/trackweight-followup",
        "parameters": {
          "weight": {
            "amount": 50,
            "unit": "kg"
          },
          "weight.original": "50 kg",
          "date": "2020-07-09T12:00:00+03:00",
          "date.original": "today"
        }
      },
      {
        "name": "projects/chatbot-59dda/agent/sessions/414dfa61-4850-eb27-804a-afea25516ab8/contexts/__system_counters__",
        "parameters": {
          "no-input": 0,
          "no-match": 0
        }
      }
    ],
    "intent": {
      "name": "projects/chatbot-59dda/agent/intents/c8bafb9d-1c44-401c-877f-9929d4fc23c2",
      "displayName": "Track Weight - yes"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "payload": {}
  },
  "session": "projects/chatbot-59dda/agent/sessions/414dfa61-4850-eb27-804a-afea25516ab8"
}

Заранее благодарим за любую помощь!

1 Ответ

0 голосов
/ 10 июля 2020

Это формат даты / времени отчетов Dialogflow. Все, что вам нужно сделать, это разделить дату и время и преобразовать их в нужный формат. Вы можете получить доступ к дате или времени, набрав agent.parameters.date или agent.parameter.time, и формат останется прежним. Вот несколько функций, которые могут помочь:

function convertParametersDateTime(date, time){
     return new Date(Date.parse(date.split('T')[0] + 'T' + time.split('T')[1].split('+')[0]));
}


// A helper function that adds the integer value of 'hoursToAdd' to the Date instance 'dateObj' and return a new Data instance.
function addHours(dateObj, hoursToAdd){
    return new Date(new Date(dateObj).setHours(dateObj.getHours() + hoursToAdd));
}

// A helper funciton that converts the Date instance 'dateObj' into a string that represents this time in English.
function getLocaleTimeString(dateObj){
    return dateObj.toLocaleTimeString('en-US', {hour: 'numeric', hour12: true});
}

// A helper dunction that converts the Date instance 'dateObj' into a string that represents this date in English
function getLocaleDateString(dateObj){
    return dateObj.toLocaleDateString('en-US', {weekday: 'long', month: 'long', day: 'numeric'});
}

Идея в том, что вы можете разделить на 'T' и использовать ту часть, которая вам нужна

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