【问题标题】:How would you design slots for letter and number codes?您将如何设计用于字母和数字代码的插槽?
【发布时间】:2016-01-11 06:13:52
【问题描述】:

我希望我的技能能够捕捉到 4 到 5 个字符的代码,其中可以包含字母和数字,例如 AB05 或 ABC12。如何设计让 Alexa 理解的槽和话语并将它们传递给我的技能?

【问题讨论】:

  • laynr 指出了我认为的最佳解决方案。但是,我注意到 Alexa 有时会在口头字母后添加一个点 (.)。使用多个插槽构建字符串后,使用以下技术(在 Python 中显示)删除点。然后字符串将可以使用而不会失败。 item_number = item_number.replace('.','')

标签: alexa alexa-skills-kit alexa-skill alexa-voice-service


【解决方案1】:

这个技能https://github.com/maihde/alexa-qrz的作用如下:

IntentSchema

1 { 
2   "intents": [ 
3     { 
4       "intent": "GetQRZ", 
5       "slots": [ 
6         { 
7           "name": "CallSignA", 
8           "type": "LETTER_OR_NUMBER" 
9         }, 
10         { 
11           "name": "CallSignB", 
12           "type": "LETTER_OR_NUMBER" 
13         }, 
14         { 
15           "name": "CallSignC", 
16           "type": "LETTER_OR_NUMBER" 
17         }, 
18         { 
19           "name": "CallSignD", 
20           "type": "LETTER_OR_NUMBER" 
21         }, 
22         { 
23           "name": "CallSignE", 
24           "type": "LETTER_OR_NUMBER" 
25         }, 
26         { 
27           "name": "CallSignF", 
28           "type": "LETTER_OR_NUMBER" 
29         }, 
30         { 
31           "name": "CallSignG", 
32           "type": "LETTER_OR_NUMBER" 
33         } 
34       ] 
35     }, 
36     { 
37       "intent": "AMAZON.YesIntent" 
38     }, 
39     { 
40       "intent": "AMAZON.NoIntent" 
41     }, 
42     { 
43       "intent": "AMAZON.StopIntent" 
44     }, 
45     { 
46       "intent": "AMAZON.CancelIntent" 
47     } 
48   ] 
49 } 

自定义槽 LETTER_OR_NUMBER

A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
zero
one
two
three
four
five
six
seven
eight
nine
alfa
alpha
bravo
charlie
delta
echo
foxtrot
golf
hotel
india
juliett
juliet
kilo
lima
mike
november
oscar
papa
quebec
romeo
sierra
tango
uniform
victor
whiskey
x-ray
xray
yankee
zulu

示例话语:

GetQRZ  {CallSignA} {CallSignB} {CallSignC}
GetQRZ  {CallSignA} {CallSignB} {CallSignC} please
GetQRZ  {CallSignA} {CallSignB} {CallSignC} stop
GetQRZ  {CallSignA} {CallSignB} {CallSignC} over
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD}
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} please
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} stop
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} over
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} {CallSignE}
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} {CallSignE} please
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} {CallSignE} stop
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} {CallSignE} over
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} {CallSignE} {CallSignF}
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} {CallSignE} {CallSignF} please
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} {CallSignE} {CallSignF} stop
GetQRZ  {CallSignA} {CallSignB} {CallSignC} {CallSignD} {CallSignE} {CallSignF} over
enter code here

【讨论】:

  • 当然,在您的示例话语中,您还可以添加另一个具有自定义槽类型的槽,称为 TERMINATION,可能值为“请”、“停止”、“结束”,因此您'没有重复的话语那么多
【解决方案2】:

您应该可以使用AMAZON.LITERAL 作为您的插槽类型

{
  "intent": "GetCodeIntent",
  "slots": [
    {
      "name": "code",
      "type": "AMAZON.LITERAL"
    }
  ]
}

对于您的话语,这有点奇怪,因为您可能必须根据我的经验定义最长的话语,但如果最长的是 5 个字符,您应该能够执行类似的操作

GetCodeIntent update code {one two three four five|code}
GetCodeIntent set code {one two three four five|code}
GetCodeIntent change code {one two three four five|code}

您仍将使用代码 var 引用您的意图槽

"GetCodeIntent": function (intent, session, response) {
    var codeSlot = intent.slots.code;
    //Do all of your amazingness with your code here
},

【讨论】:

  • 这也能处理 aphabets 吗?
猜你喜欢
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2020-02-25
  • 2013-04-01
  • 2015-06-13
  • 1970-01-01
  • 2011-06-20
相关资源
最近更新 更多