在Python中调用一个Alexa技能的会话变量

时间:2017-08-02 22:34:48

标签: python-2.7 alexa-skills-kit

所以我已经阅读了这篇文章:Adding session attributes in Python for Alexa skills它解决了我能够存储多个会话变量的问题。

但是,现在我的问题是在另一个函数中调用这些会话变量。这是我想要做的一个例子:

speech_output = "Your invoice for " + session['attributes']['invoiceAmount'] + \
                " dollars."

我也尝试过这种代码将局部变量设置为会话变量:

invoice_amount = int(session['attributes']['invoiceAmount'])

我做错了什么?我之前从未用Python编程,所以我只是通过查看亚马逊最喜欢的Color示例代码并根据我的需要进行自我教学。我实际上有三个会话变量,但显然如果我可以让其中一个变量工作,我可以找出另一个。谢谢。

2 个答案:

答案 0 :(得分:1)

我真的很抱歉,我终于找到了错误。我的会话变量存储整数,但我试图将这些整数与文本连接起来。我没有意识到我需要先将它们转换为字符串。我转换成了一个字符串,解决了我所有的问题。

答案 1 :(得分:0)

您的问题很可能涉及session变量的范围。

以下代码是颜色专家技能的意图调用。 正如您在第1行中看到的那样,变量session被定义为参数。在第12行,变量被传递给函数set_color_in_session(intent,session)

def on_intent(intent_request, session): # <-------------
    """ Called when the user specifies an intent for this skill """

    print("on_intent requestId=" + intent_request['requestId'] +
          ", sessionId=" + session['sessionId'])

    intent = intent_request['intent']
    intent_name = intent_request['intent']['name']

    # Dispatch to your skill's intent handlers
    if intent_name == "MyColorIsIntent":
        return set_color_in_session(intent, session) # <-------------
    elif intent_name == "WhatsMyColorIntent":
        return get_color_from_session(intent, session) # <-------------
    elif intent_name == "AMAZON.HelpIntent":
        return get_welcome_response()
    else:
        raise ValueError("Invalid intent")

从提供的信息中我相信你定义了自己的函数被自定义意图触发,并且很可能忘记将session变量传递给这些函数。同样,变量session只会在函数内部存在,如果它作为参数传入。以函数def get_color_from_session(intent, session):为例。因为session作为参数传入,所以在第6行favorite_color = session['attributes']['favoriteColor']中的此函数中可以使用session

如果你没有传入变量session,你将引用一个可能不存在的名为def get_color_from_session(intent, session): session_attributes = {} reprompt_text = None if "favoriteColor" in session.get('attributes', {}): favorite_color = session['attributes']['favoriteColor'] #<------------- speech_output = "Your favorite color is " + favorite_color + \ ". Goodbye." should_end_session = True else: speech_output = "I'm not sure what your favorite color is. " \ "You can say, my favorite color is red." should_end_session = False # Setting reprompt_text to None signifies that we do not want to reprompt # the user. If the user does not respond or says something that is not # understood, the session will end. return build_response(session_attributes, build_speechlet_response( intent['name'], speech_output, reprompt_text, should_end_session)) 的局部变量。

out float DEPTH ;
...
DEPTH = gl_Position.z / gl_Position.w;