MessageResponse возвращает нулевой указатель в диалоге Уотсона

MessageResponse дает NullPointerException,

ConversationService service = new ConversationService(ConversationService.VERSION_DATE_2016_09_20);
// Credentials of Workspace of Conversation
service.setApiKey("API_KEY");
service.setUsernameAndPassword("USERNAME", "PASSWORD");
MessageRequest newMessage = new MessageRequest.Builder()
  .inputText(request.getQuery())
  .build();

// Workspace ID of Conversation current workspace
String workspaceId = "WORKSPACEID";
service.setSkipAuthentication(true);
MessageResponse response = service.message(workspaceId, newMessage)
  .execute();

2 ответа

Решение

Служба беседы не использует api_key но username а также password

В вашем фрагменте кода есть две ошибки: 1. setApiKey() не требуется при использовании разговора. 1. service.setSkipAuthentication(true); будет инструктировать SDK игнорировать учетные данные службы, поэтому они не отправляются на сервер при каждом запросе.

Вам просто нужно удалить строку service.setSkipAuthentication(true);,

ConversationService service = new ConversationService(ConversationService.VERSION_DATE_2016_09_20);
// Credentials of Workspace of Conversation
// BTW: This are not your Bluemix credentials!
service.setUsernameAndPassword("USERNAME", "PASSWORD");

MessageRequest newMessage = new MessageRequest.Builder()
  .inputText("Hi! this is my first message to Watson")
  .build();

MessageResponse response = service.message("WORKSPACEID", newMessage)
  .execute();
System.out.println(response);

По словам разработчика IBM (@German): "Сервисы Watson в настоящее время используют Basic Auth, поэтому вместо api_key вы будете использовать имя пользователя и пароль. Чтобы получить учетные данные, вам нужно привязать сервис, который вы хотите использовать (например, вопрос и ответ) к приложению Bluemix."

Проверьте следующие примеры.

Попробуйте использовать следующий код из Java SDK:

ConversationService service = new ConversationService(ConversationService.VERSION_DATE_2017_05_26);
service.setUsernameAndPassword("<username>", "<password>"); //Please make sure if this username and password is the Service Credentials from the Service that you have created to use Conversation

InputData input = new InputData.Builder("Hi").build();
MessageOptions options = new MessageOptions.Builder(workspaceId).input(input).build();

// sync
MessageResponse response = service.message(options).execute();
System.out.println(response);

Другой пример:

MessageRequest newMessage = new MessageRequest.Builder().inputText(input).context(context).build();

MessageResponse response = service.message(WORKSPACE_ID,newMessage).execute();

context = response.getContext();    
System.out.println(response);
  • Вы можете увидеть официальный пример с помощью Watson Conversation.
  • См. Руководство по началу работы для использования Watson Services (шаг 5) здесь.
Другие вопросы по тегам