Python - 如何使用 ask_sdk_core.handler_input 在 Alexa Skill 中获取 UserID

Python - How to obtain UserID in Alexa Skill using ask_sdk_core.handler_input

我正在研究一种玩具 Alexa 技能,我正在学习猜数字游戏 (code here) 中的示例。在示例中,他们

from ask_sdk_core.handler_input import HandlerInput

@sb.request_handler(can_handle_func=is_request_type("LaunchRequest"))
def launch_request_handler(handler_input):
    """Handler for Skill Launch.

    Get the persistence attributes, to figure out the game state.
    """
    # type: (HandlerInput) -> Response
    attr = handler_input.attributes_manager.persistent_attributes

这个 attr 对象允许我在整个会话中保留信息。在 Alexa Developer 控制台中,我在 'session':'attributes' 下的 JSON 中看到此数据 - 我还看到 'session':'user':'userId'

如何使用此函数中的 handler_input 访问 userId 数据?

所以当你将handler_input中的数据转换为'dict'

时,可以将其提取出来
step1 = handler_input.__dict__
step2 = step1['request_envelope'].__dict__
step3 = step2['session'].__dict__
step4 = step3['user'].__dict__
userid = step4['user_id']

也许可以用更少的步骤完成,但这就是它对我有用的原因。

你实际上可以从两个地方得到它:

user_id = handler_input.request_envelope.session.user.user_id

user_id = handler_input.request_envelope.context.system.user.user_id

不需要将对象转换为字典

如果您正在寻找 Alexa 设备 ID 以获取。

device_id = handler_input.request_envelope.context.system.device.device_id

这些答案都有效,但我更喜欢使用以下辅助函数:

from ask_sdk_core.utils import ​get_user_id

user_id = get_user_id(handler_input)