Как использовать только один 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
Посмотрите эту запись поваренной книги для чего-то подобного.