Watson 플랫폼 설명은 생략하겠다.
카카오 챗봇 구현은 지난 개발일기C[1] 에서 붙여서 한다!
사실 이렇게 노가다로 끼워넣는거 말고 단어만 추출해주면 그걸로 하고싶은데 ㅠ____ㅠ 자연어처리 API 는 좀 더 찾아볼 필요가 있을 것 같다.
가이드가 참 잘나와있어서 편했다
https://console.bluemix.net/docs/services/conversation/develop-app.html#building-a-client-application우선 pom.xml 에 왓슨 클라우드 의존을 추가한다.
<!-- watson --> <dependency> <groupid>com.ibm.watson.developer_cloud</groupid> <artifactid>java-sdk</artifactid> <version>6.2.0</version> </dependency>
그런다음, /message 경로 컨트롤러로 슝
@RequestMapping(value = "/message", method = RequestMethod.POST, produces="application/json; charset=UTF-8") @ResponseBody public ResponseMessageVO message(@RequestBody RequestMessageVO vo) throws JsonParseException, JsonMappingException, IOException { ResponseMessageVO res_vo=new ResponseMessageVO(); MessageVO mes_vo=new MessageVO(); KeyboardVO keyboard=new KeyboardVO(); keyboard.setType("text"); //텍스트 타입으로 출력 res_vo.setKeyboard(keyboard); if(!vo.getType().equals("text")) { //텍스트 타입만 허용할 것이기 때문에 mes_vo.setText("텍스트 타입만 허용하고 있습니다"); res_vo.setMessage(mes_vo); return res_vo; } //텍스트 요청 받기 -> 사용자가 챗봇에게 보내는 메시지를 이렇게 담는다 String query=vo.getContent(); //여기서부터 왓슨 // Set up Assistant service. Assistant service = new Assistant("2018-08-06"); service.setUsernameAndPassword("", // replace with service username ""); // replace with service password String workspaceId = ""; // replace with workspace ID //이 세 항목은 자신의 워크스페이스에서 왼쪽 목록 두번째 -> Deploy에 들어가면 나와있다. // Start assistant with empty message. MessageOptions options = new MessageOptions.Builder(workspaceId).build(); InputData input = new InputData.Builder(query).build();//위에서 입력받은 사용자의 요청을 여기로 넣어준다. //즉, 자연어(사용자의 요청) --- 왓슨 -----> "결과 도출" 이렇게 흘러가는 것이다. //나같은 경우는 "홍대입구역인데 언제와?" 이런식으로 요청오면 "홍대입구"만 추출하는 것을 구현했다.(노가다로) options = new MessageOptions.Builder(workspaceId).input(input).build(); // Send message to Assistant service. MessageResponse mes_response = service.message(options).execute(); String responseText = mes_response.getOutput().getText().get(0); //이게 왓슨이 자연어를 처리한 뒤 출력해주는 단어. 즉, 홍대입구가 출력된다. List<RuntimeIntent> responseIntents = mes_response.getIntents(); // If an intent was detected, print it to the console. if(responseIntents.size() > 0) { System.out.println("Detected intent: #" + responseIntents.get(0).getIntent()); } String station= mes_response.getOutput().getText().get(0); RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.add("Content-type", "application/json; charset=UTF8"); try{ String encodeStation=URLEncoder.encode(station,"UTF-8");//추출한 station을 url인코딩 HttpEntity entity = new HttpEntity("parameters", headers); //http://swopenapi.seoul.go.kr/api/subway/sample/json/realtimeStationArrival/0/5/서울 URI url=URI.create("http://swopenapi.seoul.go.kr/api/subway/appkey/json/realtimeStationArrival/0/5/"+encodeStation); //x -> x좌표, y -> y좌표 ResponseEntity response= restTemplate.exchange(url, HttpMethod.GET, entity, String.class); //String 타입으로 받아오면 JSON 객체 형식으로 넘어옴 ObjectMapper obj=new ObjectMapper(); RealTimeArrivalList rl=new RealTimeArrivalList(); //d=obj.readValue(response.getBody(), JSONMapper.class); JsonNode node=obj.readValue(response.getBody().toString(), JsonNode.class); JsonNode realtimeArrivalList=node.get("realtimeArrivalList"); mes_vo.setText(realtimeArrivalList.get(0).get("trainLineNm")+" -> "+realtimeArrivalList.get(0).get("arvlMsg2")); res_vo.setMessage(mes_vo); return res_vo; }catch(NullPointerException exNull){ mes_vo.setText("올바른 역 명을 입력해주세요"); res_vo.setMessage(mes_vo); return res_vo; } catch(Exception ex){ ex.printStackTrace(); mes_vo.setText("서버뻑가"); res_vo.setMessage(mes_vo); return res_vo; } }
사실 가이드를 보면 금방 적용할 수 있을 것이다!
'개발 > Java & Spring ' 카테고리의 다른 글
[Spring] Properties 를 적용해서 중요한 값들을 숨겨보자!<부제: 아 털렸다!> (Spring/Spring boot/ Java Config) - 개발일기A [8] (1) | 2018.08.11 |
---|---|
[Spring] Springboot에서 폼검증(@Valid) - 개발일기 A[7] (0) | 2018.08.07 |
[Springboot/S3] Spring boot , JSP , AWS S3 에 이미지 업로드하기! - 개발일기 A[6] (0) | 2018.08.05 |
[Springboot] SSL 인증 구현하기 - 개발일기 A[5] (0) | 2018.08.05 |
[AWS/S3/Spring boot] Spring boot와 S3를 연동하여 이미지를 다운로드 받아보자 (0) | 2018.08.01 |