Как использовать только один DialogueFactory для разных диалогов в Rivr VoiceXML

Я использую VoiceXmlDialogueFactory для создания некоторых диалогов. Интересно, как я могу проверить, какое имя класса настроено в диалоге (в web.xml), поэтому мне не нужно создавать класс DialogueFactory для каждого диалога, и я могу просто если / тогда в методе создания. Я проверил этот метод:

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

Но не нашел, где взять параметр com.nuecho.rivr.voicexml.dialogue.class. Определенный параметр, который я могу прочитать другим способом, тоже может помочь.

спасибо за любой совет.

1 ответ

Решение

Если я правильно понимаю, вы хотите один DialogueFactory класс, который может создавать разные диалоги (разных VoiceXmlDialogue классы) на основе некоторых внешних данных. Это цель DialogueFactory, действительно.

Самый простой способ сделать это - использовать что-то в начальном HTTP-запросе (например, параметр или путь), чтобы определить, какой диалог должен быть построен. Вы можете получить HttpServletRequest, применив initializationInfo параметр DialgueFactory.create() в WebDialogueInitializationInfo, В этом объекте вы найдете дополнительные свойства, которые вы можете использовать для выполнения требуемой логики. Вы даже можете получить доступ к контексту сервлета.

Таким образом, используя параметр запроса, вы можете создать правильный вид диалога. 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

Посмотрите эту запись поваренной книги для чего-то подобного.

Другие вопросы по тегам