带有 Jovo Framework 的 Alexa 语音:是否可以通过语音获取 IntentName?如何根据用户话语决定跳转到哪个意图?

Alexa voice with Jovo Framework: Is this possible to get IntentName by utterance? How can I decide which intent to jump to based on user utterance?

我使用以下流程构建了 Alexa 技能:

LAUNCH -> AccountLinkingIntent -> CampaignIntent

AccountLinkingIntent 中,如果帐户已经链接,目前我正在路由到 CampaignIntent

到目前为止一切正常。现在我必须添加另一个 Intent ActiveContactIntent 以便流程变为:

LAUNCH -> AccountLinkingIntent -> CampaignIntent / ActiveContactIntent 即,从 AccountLinking 我需要决定路由到哪个 Intent。

调用是这样的 (CampaignIntent):

Alexa, ask <invocation_name> to get my latest campaign result

或(ActiveContactIntent)

Alexa, ask <invocation_name> who is my most active contact

根据语音,我需要告诉 Alexa 去哪里。到目前为止,我在 AccountLinkingIntent

中有以下内容

... return this.toIntent("CampaignIntent"); ...

但现在我需要像这样决定:

...
if( ... ) {
   return this.toIntent("CampaignIntent");
} else {
   return this.toIntent("ActiveContactIntent");
}
...

有什么方法可以通过话语获取 IntentName 以便我可以通过相同的方式进行检查,例如:

...
if( intent_name_by_utterance === "CampaignIntent" ) {
   return this.toIntent("CampaignIntent");
} else {
   return this.toIntent("ActiveContactIntent");
}
...

或者可能,如果可以得到 intent_name_by_utterance 如果允许传递变量,我也可以将值作为参数传递给 toIntent 方法!

return this.toIntent(intent_name_by_utterance);

更新:

我尝试了以下方法来查看意图名称是否被 returned:

启动(){ return this.toIntent("LinkAccountIntent"); },

异步 LinkAccountIntent() { const intent_name = this.$request.getIntentName(); this.tell(Current intent is: ${intent_name}); },

调用了以下两种方式的技能:

Alexa, ask <invocation-name> to give me my latest campaign results

Alexa, ask <invocation-name> who is my most active contact

give me my latest campaign resultswho is my most active contact 是各自意图的表达。

我正在使用 Alexa Test 控制台进行测试。在这两种情况下,我都期待意图的名称 (this.$request.getIntentName()),以

结尾

Hmm, I don't know that one.

我的意图是通过使用其调用名称唤醒技能来直接通过其话语调用意图。

有什么建议吗?

我认为你应该分别对待这两个意图,而不是通过发布,因为例如在这种情况下

"Alexa, ask who is my most active contact"

Alexa 跳过 launch 并直接跳转以解决预期的 ActiveContactIntent
因此,正如您拥有 LAUNCH(){} 函数一样,您还必须拥有 CampaignIntent(){}ActiveContactIntent(){}。 这样你就可以避免 Alexa 回答

Hmm, I don't know that one.

要验证用户是否已经 link 登录了他的帐户,您必须输入如下代码:

if (!this.$request.getAccessToken()) {
        this.$alexaSkill.showAccountLinkingCard();
        this.tell('Please link you Account');
    } else {
        //code for your respective action
    }

我建议您查看有关“使用 jovo 进行路由”的文档,以便更清楚地了解该主题。您可以在以下 link 查看它: https://www.jovo.tech/docs/routing