хранение данных между намерениями из webhook-in-dialogflow II - PullRequest
0 голосов
/ 04 июля 2019

Мой вопрос очень похож на этот Хранение данных между намерениями из WebHook в Dialogflow ответ @ prisioner Но в отличие от исходного, я уже использую контекст в моем c # *Реализация 1005 *, в моем контексте я установил атрибут, в котором хранится текущий эпизод, который воспроизводит мое действие (это своего рода медиаплеер), поэтому при первом запуске моего действия мы случайным образом выбираем эпизод для воспроизведения, я добавил следующийи предыдущие намерения продолжения, которые используют ранее установленный контекст с продолжительностью жизни 5 (просто чтобы быть в безопасности)

Я пытаюсь включить # context.episdeId как часть моих параметров запроса намерения, но это возвращает500 error, но как только я удаляю этот параметр запроса, запрос выполняется, однако мой контекст пуст в моих намерениях отслеживания.

так выглядит мой ответ на первое намерение.

{
  "Payload": {
    "google": {
      "richResponse": {
        "Items": [
          {
            "simpleResponse": {
              "TextToSpeech": "Playing episode",
              "DisplayText": "Playing episode 123"
            }
          },
          {
            "mediaResponse": {
              "mediaType": "AUDIO",
              "mediaObjects": [
                {
                  "Name": "Playing episode 123",
                  "Description": "Image from Episode 123",
                  "LargeImage": {
                    "url": "https://mydomain/640x480.jpg",
                    "accessibilityText": "Image from episode 123"
                  },
                  "ContentUrl": "https://mydomain/epidode123.mp3"
                }
              ]
            }
          }
        ]
      }
    }
  },
  "OutputContexts": [
    {
      "Name": "projects/{projectId}/agent/sessions/2d2851bc-fc56-d7dc-c18a-588d42a77360/contexts/playerstarter-followup",
      "LifespanCount": 5,
      "Parameters": {
        "playerTypeOriginal": null,
        "playerType": null,
        "playerType1Original": null,
        "playerType1": null,
        "episodeIdOriginal": 761198,
        "episodeId": 761198,
        "showIdOriginal": 0,
        "showId": 378
      }
    }
  ]
}

Но, в моем последующем (следующем) намерении, это то, что получает моя конечная точка, проверьте, как использовался тот же сеанс.ed.

{
  "QueryResult": {
    "QueryText": "next",
    "Parameters": {
      "PlayerType": null,
      "PlayerType1": null,
      "ShowId": 378,
      "EpisodeId": 0
    },
    "AllRequiredParamsPresent": true,
    "Intent": {
      "Name": "projects/{projectId}/agent/intents/66f12b74-93cc-450e-9ca2-0b119c5674ea",
      "DisplayName": "player.starter - next"
    },
    "IntentDetectionConfidence": 1,
    "LanguageCode": "en",
    "OutputContexts": [
      {
        "Name": "projects/{projectId}/agent/sessions/2d2851bc-fc56-d7dc-c18a-588d42a77360/contexts/playerstarter-followup",
        "LifespanCount": 5,
        "Parameters": {
          "playerTypeOriginal": "",
          "playerType": "previous",
          "playerType1Original": "",
          "playerType1": "",
          "episodeIdOriginal": 0,
          "episodeId": 0,
          "showIdOriginal": 0,
          "showId": 378
        }
      }
    ]
  },
  "ResponseId": "8088377a-c297-49a2-bb7e-c3a60a4c2e07-68e175c7",
  "Session": "projects/testing-c58c3/agent/sessions/2d2851bc-fc56-d7dc-c18a-588d42a77360",
  "IsMinistryAction": false,
  "EpisodeId": 0
}

Спасибо за быстрый ответ @prisoner здесь вы можете найти скриншот https://i.imgur.com/JwWFNma.png

1 Ответ

0 голосов
/ 09 июля 2019

Используя https://www.mockable.io в качестве моей новой конечной точки и возвращая предопределенный ответ, который установит выходной контекст, я смог увидеть, что ошибка была в моем отображении класса веб-API, чтобы убедиться, что я прочиталнеобработанный запрос в моей конечной точке, используя что-то вроде этого.

    //Getting the raw request
    var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream);
    bodyStream.BaseStream.Seek(0, SeekOrigin.Begin);
    var rawRequest = bodyStream.ReadToEnd();

Затем я просто десериализовываю объект rawRequest.та же ситуация.

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