0

我正在编写一个按城市返回顶尖大学的 alexa 技能。我希望会话和技能继续,直到用户说停止。TopCollegesByCityIntentHandler 采用城市名称的代码如下:

const TopCollegesByCityIntentHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && handlerInput.requestEnvelope.request.intent.name === 'TopCollegesByCity';
    },
    handle(handlerInput) {
        console.log('handlerInput.requestEnvelope.request', JSON.stringify(handlerInput.requestEnvelope.request));
        let speechText = '';
        const cityName = handlerInput.requestEnvelope.request.intent.slots.cityName.value;

        // logic to get top colleges by city name and modify speechText

        speechText += 'To know top colleges in your city say, top colleges in your city. To stop say, stop.';
        return handlerInput.responseBuilder
            .speak(speechText)
            .withSimpleCard('Top Colleges', speechText)
            .withShouldEndSession(false)
            .getResponse();
    }

但是如果用户不说话超过 5-10 秒,技能会因为“请求的技能没有发送有效的响应”而死亡。我如何继续会话直到用户说停止?

谢谢

4

2 回答 2

0

您不能让 Alexa 的麦克风打开超过 8 秒。

但是我建议使用 reprompt 方法,如果用户在前 8 秒内没有响应,它会再次提出问题。

这是它的样子

speechText += 'To know top colleges in your city say, top colleges in your city. To stop say, stop.';
repromptText = 'Say top colleges in your city for the city.';
return handlerInput.responseBuilder
        .speak(speechText)
        .reprompt(repromptText)
        .withSimpleCard('Top Colleges', speechText)
        .withShouldEndSession(false)
        .getResponse();
于 2020-04-09T18:40:54.223 回答
0

这里有几个问题...

  • 首先,我不确定您为什么要让会话保持打开状态。你不是在问问题。(我建议你不要。)

  • 其次,如果您确实想要让会话保持打开状态,您应该指定您的reprompt意愿(这将自动使会话保持打开状态,不再需要withShouldEndSession)。

  • 第三,您应该将大学列表放入其自己的变量中,并将其添加到.SimpleCard而不是speechText. 即,不需要简单的卡片包含短语“停止……”

  • 最后,如果你用一个很长的列表来回应——听起来你正在做的,你希望他们知道如何阻止它或在你开始列表之前要求其他东西。(否则,他们必须先听整个列表,然后才能知道可以停止它。)我建议从To know top colleges in your city, say, "Alexa, ask {yourSkillName} for Top Colleges in", and the name of your city. To stop, say "Alexa, stop". Here are the Top Colleges by city: {super long collegeList}. 否reprompt(因为您不希望会话保持打开状态)。然后,您可以依靠“一次性”来处理您的其他请求。

这个 Alexa 设计文档概述了 8 秒的限制。

设置超时限制的官方 UserVoice 功能请求,以防您想添加投票。

于 2020-04-14T16:34:43.890 回答