1

我正在使用 VoiceXmlDialogueFactory 来创建一些对话。我想知道如何检查 Dialog 中配置的类名(在 web.xml 中),这样我就不必为每个 Dialog 创建一个 DialogueFactory 类,我可以在 create 方法中使用 if/then。我已经检查了该方法:

public VoiceXmlDialogue create(DialogueInitializationInfo<VoiceXmlInputTurn, VoiceXmlOutputTurn, VoiceXmlDialogueContext> initializationInfo) throws DialogueFactoryException {

但是没有找到 com.nuecho.rivr.voicexml.dialogue.class 参数的获取位置。我可以通过其他方式读取的特定参数也可以解决问题。

感谢您的任何建议。

4

1 回答 1

1

DialogueFactory如果我理解正确,您需要一个可以根据一些外部数据创建不同对话(不同VoiceXmlDialogue类)的单一类。这就是 的目的DialogueFactory,真的。

最直接的方法是使用初始 HTTP 请求中的某些内容(如参数或路径)来确定要构建的对话。您可以通过将 的initializationInfo参数DialgueFactory.create()转换为WebDialogueInitializationInfo. 在此对象中,您将找到可用于执行所需逻辑的其他属性。您甚至可以访问 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

有关类似内容,请参阅此食谱条目

于 2015-09-24T01:45:02.927 回答