Доступ к слотам намерений из лямбда-функции - PullRequest
0 голосов
/ 07 марта 2019

Я создал простого бота с простым намерением lex.Это лекс-намерение имеет один слот slotTwo.

Затем я связал его с лямбда-функцией Python.Я хочу получить доступ к значению этого слота внутри лямбда-функции.

Лямбда-функция python получает параметры context и event.Ссылка ниже показывает структуру для параметра event.https://docs.aws.amazon.com/lex/latest/dg/lambda-input-response-format.html

I copy it here too:


{
  "currentIntent": {
    "name": "intent-name",
    "slots": {
      "slot name": "value",
      "slot name": "value"
    },
    "slotDetails": {
      "slot name": {
        "resolutions" : [
          { "value": "resolved value" },
          { "value": "resolved value" }
        ],
        "originalValue": "original text"
      },
      "slot name": {
        "resolutions" : [
          { "value": "resolved value" },
          { "value": "resolved value" }
        ],
        "originalValue": "original text"
      }
    },
    "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)"
  },
  "bot": {
    "name": "bot name",
    "alias": "bot alias",
    "version": "bot version"
  },
  "userId": "User ID specified in the POST request to Amazon Lex.",
  "inputTranscript": "Text used to process the request",
  "invocationSource": "FulfillmentCodeHook or DialogCodeHook",
  "outputDialogMode": "Text or Voice, based on ContentType request header in runtime API request",
  "messageVersion": "1.0",
  "sessionAttributes": { 
     "key": "value",
     "key": "value"
  },
  "requestAttributes": { 
     "key": "value",
     "key": "value"
  }
}

Однако, когда я распечатываю содержимое этого параметра, я вижу только ячейку и могу напрямую получить доступ к его значению, первый уровень.

START RequestId: 60a541d8-b3c8-48b0-a7a3-6b3f65d96482 Version: $LATEST
{
"slotTwo": "some text here"
}

Тест с лямбда-консоли работает нормально.Он может извлечь значение и продолжить логику.Однако, когда я тестирую бота от Лекса, он не работает.Есть идеи почему?Большое спасибо, Эстер

1 Ответ

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

Мой плохой. Я пропустил, что значения, указанные в тесте lamdda, должны соответствовать всей структуре JSON. Так что теперь я добавил это в качестве теста события:

{
  "currentIntent": {
    "name": "intent-name",
    "slots": {
      "slotTwo": "Hi from the sendmessagetest"
    }
  }
}

и я получаю доступ к слоту в лямбде следующим образом:

 messagetext = event['currentIntent'] ['slots'] ['slotTwo']

Не стесняйтесь удалять мой пост, если он вас смущает. Спасибо всем

...