Alexa python get запрос возвращает ноль. Лямбда в порядке - PullRequest
0 голосов
/ 04 июля 2018

Привет! Я пытаюсь получить ответ от Алекса, запрашивающего на сервере с помощью запросов. Я использую Python с этим примером: https://github.com/alexa/skill-sample-python-fact. Однако мой бэкэнд - NodeJS.

Из моей лямбды:

URL = 'https://alexa-app-nikko.herokuapp.com/alexa'

def get_post_response():
    r = requests.get(URL)

    speech_output = str(r.text)
    return response(speech_response(speech_output, True))

На моем бэкэнде он направляется в / alexa:

router.get('/', function(request, response) {
    //console.log('Logged from Alexa.');
    response.send('Hello World, Alexa!');
});

Я протестировал его на Lambda и отлично работает с этими результатами:

{
  "version": "1.0",
  "response": {
    "outputSpeech": {
      "type": "PlainText",
      "text": "Hello World, Alexa!"
    },
    "shouldEndSession": true
  }
}

Однако я получаю null на выходе навыка или этот ответ от Alexa:

"There was a problem with the requested skill's response"

Как отлаживать с консоли разработчика, потому что кажется, что с лямбдой все в порядке.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

На основании вашего собственного ответа:

Проблема в том, что когда вы вызываете LaunchIntent или другие намерения, такие как AMAZON.StopIntent, в них нет ключа "slots". И вы пытались получить доступ к значению slots, которое должно выдать KeyError .

Что вы можете сделать, если вы уверены в вызове какого-либо конкретного намерения, использующего некоторые слоты, то вы пытаетесь получить к ним доступ.

Вот что я делаю:

def getSlotValue(intent, slot):
    if 'slots' in intent:
        if slot in intent['slots']:
            if 'value' in intent['slots'][slot] and len(intent['slots'][slot]['value']) > 0:
                return intent['slots'][slot]['value']

    return -1

И попробуйте получить доступ к значениям слотов в функции вашего намерения (в вашем get_post_response или get_power_response).

0 голосов
/ 05 июля 2018

Я не знаю, как эта проблема связана с моим запросом. Сейчас работает.

def on_intent(request, session):
    """ called on receipt of an Intent  """

    intent_name = request['intent']['name']
    #intent_slots = request['intent']['slots']

    # process the intents
    if intent_name == "DebugIntent":
        return get_debug_response()
    elif intent_name == "PostIntent":
        return get_post_response()
    elif intent_name == "PowerIntent":
        return get_power_response(request)
        #return get_power_response(intent_slots)
# ----------- Amazon Built-in Intents -----------------
    elif intent_name == "AMAZON.HelpIntent":
        return get_help_response()
    elif intent_name == "AMAZON.StopIntent":
        return get_stop_response()
    elif intent_name == "AMAZON.CancelIntent":
        return get_stop_response()
    elif intent_name == "AMAZON.FallbackIntent":
        return get_fallback_response()
    else:
        print("invalid Intent reply with help")
        return get_help_response()

Я отладил его, и у меня возникла проблема с ключевым словом «slots», поэтому я удалил в своем коде intent_slots = request['intent']['slots'], который я также использовал для передачи его в другую функцию return get_power_response(intent_slots). Я закомментировал это и заменил или просто поместил оригинал request из def on_intent(request, session):.

...