标签: alexa-skills-kit

当我为 Alexa 技能集创建函数时,Lambda ARN(亚马逊资源名称)没有显示在右上角

我开始使用 Alexa 技能集,我按照亚马逊开发文档中提到的步骤操作,并为事件源“Alexa 技能集”创建了一个 lambda 函数。如文档中所述,ARN 没有出现在右上角。

我手动尝试如下

arn:aws:lambda:region:account-id:function:function-name

arn:aws:lambda:us-east-1:123456789:function:talkToBerna
Run Code Online (Sandbox Code Playgroud)

但没有运气...错误:无法调用远程端点,或者它返回的响应无效。

有人可以把我放在正确的方向吗?提前致谢

amazon-web-services aws-lambda alexa-skills-kit amazon-echo

3
推荐指数
1
解决办法
3622
查看次数

将 Alexa 技能链接到特定的 Lambda 别名

我想利用 AWS Lambda 的版本控制和别名来管理链接到 Alexa Skill 的代码。

因此,我有两个别名PRODUAT(几乎如AWS 文档中所述)。

但是 - 如果我尝试将我的一个别名(例如arn:aws:lambda:eu-west-1:1234567:function:Alexa-Skill:PROD)的 ARN 配置为 Amazon 开发人员控制台中 Alexa 技能的端点,我会收到以下错误:

Error: Please make sure that "Alexa Skills Kit" is selected for the event source type of arn:aws:lambda:eu-west-1:1234567:function:Alexa-Skill:PROD

不合格的 ARN(即arn:aws:lambda:eu-west-1:1234567:function:Alexa-Skill)工作正常。

这是 Alexa Skills Kit 和 Lambda 之间集成的已知限制吗?

aws-lambda alexa-skills-kit

3
推荐指数
1
解决办法
761
查看次数

Alexa 是否可以在不直接等待用户输入的情况下等待技能?

我意识到这个问题可能措辞不当,但这是我能想到的最好的办法。

我的问题是,我在偶尔发出 Alexa 技能命令(比如每隔几分钟)的情况下使用 Alexa,并且我不想每次都重新调用该技能。

目前,在我发出命令后,Alexa 回复说她正在执行该操作,但最后她希望通过以下方式获得新用户输入:

this.emit(':responseReady');
Run Code Online (Sandbox Code Playgroud)

然而,这并不是我想要的,因为大多数时候我不想立即发出另一个命令。相反,几分钟后,我会想再次与该技能互动。

但是,如果我完全退出该技能,下次我将不得不重新调用它,并再次收到整个技能欢迎消息(“欢迎使用技能名称。您可以说……”)。我也不认为这是最佳选择。

有没有办法让该技能保持“打开/激活”状态,以便在该技能的上下文中解释我给出的下一个命令,而不必发出 :responseReady (期望立即响应)并且不必重新启动该技能( “Alexa,打开技能名称”)?

alexa node.js alexa-skills-kit

3
推荐指数
1
解决办法
3847
查看次数

尽管卡片存在于 JSON 中,但 Alexa 并未显示卡片

我正在尝试将卡牌添加到我的技能中,但遇到了一个奇怪的障碍。我可以通过 LaunchReqest 使卡片正常显示,但是当它遇到意图请求时,卡片就会停止显示。

显示卡片的代码与 LaunchRequest 的代码相同:

return handlerInput.getResponseBuilder()
        .withSpeech(speechText)
        .withSimpleCard("HelloWorld", speechText)
        .withReprompt(speechText)
        .build();
Run Code Online (Sandbox Code Playgroud)

从字面上看,这只是我想要展示的一张卡片的简单回应。这出现在 Alexa 获取的 JSON 中:

Alexa JSON 响应

(亚马逊不允许您从控制台复制。)

这是在开发控制台中,我目前最好的猜测是它只是一个开发控制台错误,而不是真正的错误,但我们尚未使用配套应用程序在真实设备上进行测试,所以我可能是错的。

这里的任何方向都会有帮助,从我所有的在线阅读来看,这应该有效,特别是因为相同的文本在 LaunchReqest 中有效,但在 IntentRequest 中无效。

alexa-skills-kit

3
推荐指数
1
解决办法
1004
查看次数

如何识别用户是否是第一次在 Alexa 中启动技能?

有什么方法可以识别用户是否是第一次启动技能?不使用后端数据库来存储访问信息?

例如,请求对象指定用户是否已授予权限。有没有办法还可以识别用户是否是第一次启动该技能?

{
   "version":"1.0",
   "session":{
      "new":true,
      "sessionId":"amzn1.echo-api.session.abc",
      "application":{
         "applicationId":"amzn1.ask.sabc3"
      },
      "user":{
         "userId":"amzn1.ask.account.AGQ"
      }
   },
   "context":{
      "System":{
         "application":{
            "applicationId":"amzn1.ask.skill.bb"
         },
         "user":{
            "userId":"amzn1.ask.account.AGQ"
         },
         "device":{
            "deviceId":"amzn1.ask.device.AHH",
            "supportedInterfaces":{

            }
         },
         "apiEndpoint":"https://api.amazonalexa.com",
         "apiAccessToken":"eysed"
      }
   },
   "request":{
      "type":"LaunchRequest",
      "requestId":"amzn1.echo-api.request.09b",
      "timestamp":"2018-10-15T17:03:03Z",
      "locale":"en-US",
      "shouldLinkResultBeReturned":false
   }
}
Run Code Online (Sandbox Code Playgroud)

java amazon echo alexa alexa-skills-kit

3
推荐指数
1
解决办法
577
查看次数

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

我正在研究玩具 Alexa 技能,并且正在遵循猜数字游戏中的示例(此处为代码)。在例子中他们

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
Run Code Online (Sandbox Code Playgroud)

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

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

python alexa-skills-kit

3
推荐指数
1
解决办法
859
查看次数

Alexa 技能帐户与 Google API 凭据链接,刷新令牌出现问题

我在 Alexa 帐户链接授权方面遇到了一些问题。

这些是我遵循的步骤:

  1. 我从 Google Cloud Console 获得了凭据(客户端 ID、客户端机密...)
  2. 在 Alexa 开发者控制台上设置,使用“Auth Code Grant”作为授权授权类型
  3. 激活了我的 Alexa 应用程序上的技能并使用我的 Google 帐户成功登录
  4. 现在我在请求中获得了访问令牌,在 handler_input.request_envelope.context.system.user.access_token

问题是访问令牌在一小时后过期,Alexa 不管理令牌的刷新

我应该怎么做才能避免每次一小时后都要求我的用户登录?我应该Implicit grant用作授权类型吗?我应该以某种方式获得刷新令牌吗?

附加信息:这是一项使用 Python3 连接到 AWS Lambda 的自定义技能

google-api google-authentication alexa alexa-skill alexa-skills-kit

3
推荐指数
1
解决办法
1085
查看次数

从 s3 读取数据:s3.getObject 不是函数

我正在尝试从 S3 读取 txt 文件来构建 Alexa 的响应。在 Lambda 中测试代码时,我收到此错误。谁能看到我哪里出错了?

错误

Error handled: s3.getObject is not a function
Run Code Online (Sandbox Code Playgroud)

我已经安装了“aws-sdk”,并且需要该模块位于我的技能的 index.js 顶部

const s3 = require('aws-sdk/clients/s3')
Run Code Online (Sandbox Code Playgroud)

处理程序代码。为了强调这一点,我使用 Async/Await 并在下面的 goGetS3 函数中返回一个 Promise。

const ChooseStoryIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
      handlerInput.requestEnvelope.request.intent.name === 'ChooseStoryIntent';
  },
  async handle(handlerInput) {
    let speechText;
    let options = {
      "Bucket": "stores",
      "Key": "person.txt"
    }
    await goGetS3(options)
      .then((response) => {
        console.log(response),
        console.log(response.Body.toString()),
          speechText = response
      })
      .catch((err) => {
        console.log(err)
        speechText = 'something wrong getting the …
Run Code Online (Sandbox Code Playgroud)

alexa-skills-kit

3
推荐指数
1
解决办法
9847
查看次数

Alexa lambda_handler没有创建事件会话

我有一个问题让我的python lambda函数工作.我得到一个无效的键,用于在调用技能时应该创建的事件数组.我得到的错误是:

{
    "stackTrace": [
        [
            "/var/task/lambda_function.py",
            163,
            "lambda_handler",
            "app_id = event['session']['application']['applicationId']"
            ]
    ],
    "errorType": "KeyError",
    "errorMessage": "'session'"
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码

def lambda_handler(event, context):


"""Lambda function entrypoint."""
# print("event.session.application.applicationId={}".format(
#       event['session']['application']['applicationId']))

# Prevent unwanted access to this Lambda function.
app_id = event['session']['application']['applicationId']
if app_id != "amzn1.ask.skill.yyyyyyyy-xxx":
    raise ValueError("Invalid Application ID: {}".format(app_id))

request = event['request']

if event['session']['new']:
    on_session_started(
        {'requestId': request['requestId']}, event['session'])

func_map = {
    "LaunchRequest": on_launch,
    "IntentRequest": on_intent,
    "SessionEndedRequest": on_session_ended,
}

return func_map[request['type']](event['request'], event['session'])
Run Code Online (Sandbox Code Playgroud)

python alexa aws-lambda alexa-skills-kit

2
推荐指数
1
解决办法
1921
查看次数

如何让Alexa说出电话号码

我希望Alexa将电话号码称为数字而不是其值.

例如:

[Alexa]联系电话是9 8 7 6 5 4 3 2 1 0.

但现在Alexa说

联系电话是九十八亿七千六百五十四万三千二百十

谢谢

ssml alexa alexa-skill alexa-skills-kit

2
推荐指数
1
解决办法
143
查看次数