有没有办法检查或枚举interaction model中设置的自定义插槽值?对于Instance,假设您有一个具有以下意图的意图模式:
{
"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
我找不到任何东西。
我知道我可以获得与意图一起发送的Slot值:
String slotValue = incomingIntentRequest.getIntent().getSlot("LIST_OF_SHAPES").getValue();
我甚至可以枚举 ALL 传入的Slots(以及它们的值):
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");
根据这些信息,我不必保留两个单独的“列表”或“枚举”;一个在交互模型中,另一个在我的请求处理程序中。看起来这应该是对的吗?
答案 0 :(得分:0)
不 - API中没有任何内容可以让您这样做。
您可以看到Alexa为您提供的Request Body结构的完整范围。这很简单,可以在这里找到:
请注意,请求正文不应与请求相混淆,该请求是请求正文中的一个结构,具有两个兄弟:版本和会话。
答案 1 :(得分:0)
不,API不允许你这样做。
但是,由于您的交互模型与您的开发密切相关,我建议您在源代码管理系统中使用源代码检查模型。如果你打算这样做,你可以把它放在你的来源上。根据您的语言,这也意味着您可以在运行时阅读它。
使用此技术,您可以在运行时访问交互模型。不是通过API自动完成,而是通过最佳实践来完成。
您可以在TsaTsaTzu's examples中看到几个针对Java的实例。