首页 文章

如何使用语句序列为Alexa技能构建Python Lambda?

提问于
浏览
0

我正在为我的应用程序构建Alexa技能 . 当您询问'我的帐户状态是什么时?'此意图返回与用户帐户相关的语句序列 . API提供以下响应

response = [{
..
text: 'Total orders are 41, Delivered 28'
..
},
{
..
text: 'Today orders are 12, Delivered 2'
..
},
{}]

如何基于API响应构建响应序列?

有了这个意图,我从API获得了带有set语句的响应,Alexa应该逐个提示每个语句 . 如果用户在任何语句之间说“下一个”,而Alexa提示则转到响应数组中的下一个语句 .

2 回答

  • 1

    首先,当用户说 "what is my account status? “您的意图将被调用,您将在列表中得到响应,在第一次调用中您将显示第0项 .

    API结果:

    response = [{
    ..
    text: 'Total orders are 41, Delivered 28'
    ..
    },
    {
    ..
    text: 'Today orders are 12, Delivered 2'
    ..
    },
    {}]
    

    您需要在Session属性中存储信息,例如您显示的意图名称,索引(在第一次调用时为0)等 .
    现在,您需要再设置一个将在 next 之类的关键字上触发的意图 . 在代码中,您将检查会话属性的值,并根据值进行响应 . 例如,您需要检查先前的意图名称,先前的索引 . 如果一切正常,您将修改会话属性并响应用户 .
    希望能帮助到你 .

  • 1

    既然你提到了Python,我建议看看Flask-ask,它为你提供了两种主要的响应类型:语句和问题 .

    正如sid8491所提到的,您需要在会话中存储信息以跟踪需要返回的响应(来自json) . 您可以使用redis来实现此目的,使用this python库 .

    假设json响应存储在db(或某处)中,并且可以在列表中访问,那么假设您的交互模型看起来像这样:

    {
        "languageModel": {
            "intents": [
                {
                    "name": "NextIntent",
                    "samples": ["next", "tell me more"]
                },
                {
                    "name": "StopIntent",
                    "samples": ["stop"]
                },
                {
                    "name": "StatusIntent",
                    "samples": ["what is my account status"]
                }
            ],
            "invocationName": "orders"
        }
    }
    

    您可以使用以下步骤(对于此示例,使用redis和flask-ask):

    • 在'StatusIntent'上,存储会话并返回第一个响应:
    redis.set("session_key", 0)
    return statement(response[0]) # assuming responses are stored in a list
    
    • on'NextIntent',获取存储在会话中的值,如果存在则返回下一个响应
    value = redis.get("session_key")
    if not value:  # session is expired
        return statement("I don't understand")
    redis.set("session_key", int(value)+1)
    return statement(response[int(value)+1])
    
    • 在'StopIntent'上,从redis中删除“session_key”
    redis.delete("session_key")
    return statement("Ok. I am here if you need me.")
    

    这不是实际的代码,只是为了给你一个想法 . 希望能帮助到你 .

    :)

相关问题