如何在 Rivr VoiceXML 中为不同的对话只使用一个 DialogueFactory
How to use just one DialogueFactory for different Dialogs in Rivr VoiceXML
我正在使用 VoiceXmlDialogueFactory 创建一些对话。我想知道如何检查对话框中配置的 class 名称(在 web.xml 中),这样我就不必为每个对话框创建一个 DialogueFactory class,我可以 if/then 在创建方法中。我检查了那个方法:
public VoiceXmlDialogue create(DialogueInitializationInfo<VoiceXmlInputTurn, VoiceXmlOutputTurn, VoiceXmlDialogueContext> initializationInfo) throws DialogueFactoryException {
但是没有找到com.nuecho.rivr.voicexml.dialogue.class参数的获取位置。我可以通过其他方式读取的特定参数也可以解决问题。
感谢任何建议。
如果我没理解错的话,您需要一个 DialogueFactory
class,它可以根据一些外部数据创建不同的对话(不同的 VoiceXmlDialogue
classes)。这就是 DialogueFactory
的目的,真的。
最直接的方法是使用初始 HTTP 请求中的某些内容(如参数或路径)来确定要构建的对话。您可以通过将 DialgueFactory.create()
的 initializationInfo
参数转换为 WebDialogueInitializationInfo
来获取 HttpServletRequest。在此对象中,您将找到可用于执行所需逻辑的其他属性。您甚至可以访问 servlet 上下文。
因此,使用查询参数,您可以创建正确类型的对话框。
http://server.exemple.com/application/dialogue?type=abc
public class DialogueFactory implements VoiceXmlDialogueFactory {
@Override
public VoiceXmlDialogue create(
DialogueInitializationInfo<VoiceXmlInputTurn, VoiceXmlOutputTurn, VoiceXmlDialogueContext> initializationInfo)
throws DialogueFactoryException {
if (!(initializationInfo instanceof WebDialogueInitializationInfo))
throw new DialogueFactoryException("Can only work in web mode.");
WebDialogueInitializationInfo<?, ?, ?> webInitializationInfo =
(WebDialogueInitializationInfo<?, ?, ?>) initializationInfo;
String dialogueType = webInitializationInfo.getHttpServletRequest().getParameter("type");
// Then use dialogueType to build the right kind of Dialogue.
}
}
您还可以使用路径信息:
http://server.exemple.com/application/dialogue/abc
有关类似内容,请参阅 this cookbook entry。
我正在使用 VoiceXmlDialogueFactory 创建一些对话。我想知道如何检查对话框中配置的 class 名称(在 web.xml 中),这样我就不必为每个对话框创建一个 DialogueFactory class,我可以 if/then 在创建方法中。我检查了那个方法:
public VoiceXmlDialogue create(DialogueInitializationInfo<VoiceXmlInputTurn, VoiceXmlOutputTurn, VoiceXmlDialogueContext> initializationInfo) throws DialogueFactoryException {
但是没有找到com.nuecho.rivr.voicexml.dialogue.class参数的获取位置。我可以通过其他方式读取的特定参数也可以解决问题。
感谢任何建议。
如果我没理解错的话,您需要一个 DialogueFactory
class,它可以根据一些外部数据创建不同的对话(不同的 VoiceXmlDialogue
classes)。这就是 DialogueFactory
的目的,真的。
最直接的方法是使用初始 HTTP 请求中的某些内容(如参数或路径)来确定要构建的对话。您可以通过将 DialgueFactory.create()
的 initializationInfo
参数转换为 WebDialogueInitializationInfo
来获取 HttpServletRequest。在此对象中,您将找到可用于执行所需逻辑的其他属性。您甚至可以访问 servlet 上下文。
因此,使用查询参数,您可以创建正确类型的对话框。 http://server.exemple.com/application/dialogue?type=abc
public class DialogueFactory implements VoiceXmlDialogueFactory {
@Override
public VoiceXmlDialogue create(
DialogueInitializationInfo<VoiceXmlInputTurn, VoiceXmlOutputTurn, VoiceXmlDialogueContext> initializationInfo)
throws DialogueFactoryException {
if (!(initializationInfo instanceof WebDialogueInitializationInfo))
throw new DialogueFactoryException("Can only work in web mode.");
WebDialogueInitializationInfo<?, ?, ?> webInitializationInfo =
(WebDialogueInitializationInfo<?, ?, ?>) initializationInfo;
String dialogueType = webInitializationInfo.getHttpServletRequest().getParameter("type");
// Then use dialogueType to build the right kind of Dialogue.
}
}
您还可以使用路径信息: http://server.exemple.com/application/dialogue/abc
有关类似内容,请参阅 this cookbook entry。