从 Speechlet 枚举自定义插槽值
Enumerate Custom Slot Values from Speechlet
是否有任何方法可以检查或枚举在您的 interaction model 中设置的自定义插槽 值?例如,假设您有一个具有以下意图的意图模式:
{
"intent": "MySuperCoolIntent",
"slots":
[
{
"name": "ShapesNSuch",
"type": "LIST_OF_SHAPES"
}
]
}
此外,您已将 LIST_OF_SHAPES 自定义槽定义为具有以下值:
SQUARE
TRIANGLE
CIRCLE
ICOSADECAHECKASPECKAHEDRON
ROUND
HUSKY
问题:是否有一种方法可以从我的 Speechlet 或我的 RequestStreamHandler 中调用,它会给我这些自定义槽值的枚举?
我查看了 Alexa Skills Kit 的 SDK Javadocs Located Here
我什么也没找到。
我知道我可以获得随意图发送的插槽值:
String slotValue = incomingIntentRequest.getIntent().getSlot("LIST_OF_SHAPES").getValue();
我什至可以枚举 ALL 个传入插槽(以及它们的值):
Map<String, Slot> slotMap = IncomingIntentRequest.getIntent().getSlots();
for(Map.Entry<String, Slot> entry : slotMap.entrySet())
{
String key = entry.getKey();
Slot slot = (Slot)entry.getValue();
String slotName = slot.getName();
String slotValue = slot.getValue();
//do something nifty with the current slot info....
}
我真正想要的是这样的:
String myAppId = "amzn1.echo-sdk-ams.app.<TheRestOfMyID>";
List<String> posibleSlotValues = SomeMagicAlexaAPI.getAllSlotValues(myAppId, "LIST_OF_SHAPES");
有了这些信息,我就不必维护两个单独的 "Lists" 或 "Enumerations";一个在交互模型中,另一个在我的请求处理程序中。看起来应该是这样吧?
否 - API 中没有任何内容允许您这样做。
您可以看到 Alexa 提供给您使用的请求主体结构的完整范围。它非常简单,可在此处获得:
请注意,Request Body不要和request混淆,request是request body中的一个结构体,有两个兄弟:version和session。
不,API 不允许您这样做。
但是,由于您的交互模型与您的开发密切相关,我建议您在源代码控制系统中签入带有源代码的模型。如果你打算这样做,你不妨把它和你的来源放在一起。根据您的语言,这也意味着您可能可以在 运行 时间内阅读它。
使用此技术,您可以在 运行 时间访问您的交互模型。不是通过 API 自动完成,而是通过最佳实践来完成。
您可以在 TsaTsaTzu's examples 中看到 Java 的几个例子。
是否有任何方法可以检查或枚举在您的 interaction model 中设置的自定义插槽 值?例如,假设您有一个具有以下意图的意图模式:
{
"intent": "MySuperCoolIntent",
"slots":
[
{
"name": "ShapesNSuch",
"type": "LIST_OF_SHAPES"
}
]
}
此外,您已将 LIST_OF_SHAPES 自定义槽定义为具有以下值:
SQUARE
TRIANGLE
CIRCLE
ICOSADECAHECKASPECKAHEDRON
ROUND
HUSKY
问题:是否有一种方法可以从我的 Speechlet 或我的 RequestStreamHandler 中调用,它会给我这些自定义槽值的枚举?
我查看了 Alexa Skills Kit 的 SDK Javadocs Located Here
我什么也没找到。
我知道我可以获得随意图发送的插槽值:
String slotValue = incomingIntentRequest.getIntent().getSlot("LIST_OF_SHAPES").getValue();
我什至可以枚举 ALL 个传入插槽(以及它们的值):
Map<String, Slot> slotMap = IncomingIntentRequest.getIntent().getSlots();
for(Map.Entry<String, Slot> entry : slotMap.entrySet())
{
String key = entry.getKey();
Slot slot = (Slot)entry.getValue();
String slotName = slot.getName();
String slotValue = slot.getValue();
//do something nifty with the current slot info....
}
我真正想要的是这样的:
String myAppId = "amzn1.echo-sdk-ams.app.<TheRestOfMyID>";
List<String> posibleSlotValues = SomeMagicAlexaAPI.getAllSlotValues(myAppId, "LIST_OF_SHAPES");
有了这些信息,我就不必维护两个单独的 "Lists" 或 "Enumerations";一个在交互模型中,另一个在我的请求处理程序中。看起来应该是这样吧?
否 - API 中没有任何内容允许您这样做。
您可以看到 Alexa 提供给您使用的请求主体结构的完整范围。它非常简单,可在此处获得:
请注意,Request Body不要和request混淆,request是request body中的一个结构体,有两个兄弟:version和session。
不,API 不允许您这样做。
但是,由于您的交互模型与您的开发密切相关,我建议您在源代码控制系统中签入带有源代码的模型。如果你打算这样做,你不妨把它和你的来源放在一起。根据您的语言,这也意味着您可能可以在 运行 时间内阅读它。
使用此技术,您可以在 运行 时间访问您的交互模型。不是通过 API 自动完成,而是通过最佳实践来完成。
您可以在 TsaTsaTzu's examples 中看到 Java 的几个例子。