Я создаю чат-бота для Java-приложения с помощью Watson Assistant, код сервлета:
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String sessionIdOut = "";
String question = req.getParameter("message");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// Set up Assistant service.
IamOptions iamOptions = new IamOptions.Builder().apiKey("<apikey>").build();
Assistant service = new Assistant("2018-09-20", iamOptions);
service.setEndPoint("https://gateway-lon.watsonplatform.net/assistant/api/");
assistantId = "<assistantid>";
// Create session.
CreateSessionOptions createSessionOptions = new CreateSessionOptions.Builder(assistantId).build();
SessionResponse session = service.createSession(createSessionOptions).execute();
sessionId = session.getSessionId();
// Suppress log messages in stdout.
LogManager.getLogManager().reset();
// Initialize with an empty value to start the conversation.
String inputText = question;
// Send message to assistant.
MessageInput input = new MessageInput.Builder().text(inputText).build();
MessageOptions messageOptions = new MessageOptions.Builder(assistantId, sessionId)
.input(input)
.build();
MessageResponse response = service.message(messageOptions).execute();
// Print the output from the dialog if any. Assumes a single text response.
List<DialogRuntimeResponseGeneric> responseGeneric = response.getOutput().getGeneric();
if(responseGeneric.size() > 0) {
System.out.println(response.getOutput()/*.getGeneric().get(0).getText()*/);
String answer = response.getOutput().getGeneric().get(0).getText();
// set up the response
res.setContentType("text/html");
res.setHeader("Cache-Control", "no-cache");
// write out the response string
res.getWriter( ).write(answer);
}
// Prompt for next round of input.
System.out.print(">> ");
}
В настоящее время сервлет всегда создает новый сеанс и настраивает помощника при поступлении запроса GET из пользовательского интерфейса. Я хочу, чтобы он создавал новый сеанс и настраивал службу помощника только один раз при запуске сервера.
Попытка решить проблему путем добавления функции init () и написания кода создания сеанса и настройки помощника внутри этой функции init (), например:
@Override
public void init() throws ServletException {
// Set up Assistant service.
IamOptions iamOptions = new IamOptions.Builder().apiKey("<apikey>").build();
Assistant service = new Assistant("2018-09-20", iamOptions);
service.setEndPoint("https://gateway-lon.watsonplatform.net/assistant/api/");
assistantId = "<assistantid>";
// Create session.
CreateSessionOptions createSessionOptions = new CreateSessionOptions.Builder(assistantId).build();
SessionResponse session = service.createSession(createSessionOptions).execute();
sessionId = session.getSessionId();
super.init();
}
Но это не работает, когда я пишу вопрос в пользовательском интерфейсе, он возвращает мне 500 кодов состояния.