springboot 프로젝트에 dialogflow 연결하기 (webhook 사용)

SH·2022년 5월 29일
1

한이음 ICT

목록 보기
4/8

spring boot 세팅

https://start.spring.io/ 에서 다음과 같이 설정

일단 sdk가 11이라 자바 11로 함 인텔리제이에서 sdk 설정은 11 (3)로 하셈

+) mysql쓸거면 implementation 'mysql:mysql-connector-java' 추가

mongodb로 써야되는데.. 일단 이렇게 해보자

dialogflow 세팅

  1. intent -> fulfillment 창에서 둘 다 enable로 설정
    모든 intent에서 설정해준다


  1. fulfillment 창에서 webhook은 enable, inline editor은 disable해줌

headers는 아래처럼 세팅

url은 ngrok를 사용해서 서버 url을 받아와야됨


ngrok 처음 시작 - https://ssjeong.tistory.com/entry/ngrok-%EB%A1%9C%EC%BB%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%9D%98-%ED%84%B0%EB%84%90-%EC%97%B4%EA%B8%B0%EB%A1%9C%EC%BB%AC-PC-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95

ngrok 사용법 - https://velog.io/@kya754/ngrok-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0#%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0


url을 dialogflow와 연결하기 - https://medium.com/@nitam/google-dialogflow-spring-boot-angular-mqtt-esp8266-anything-42d8e19dedec
중간에 저 그림 나오는데 설명 있음


  1. 코드 설정

src/main/java/chatbot_ex/chatbot_ex/dialogflow/DialogFlowRest.java


@RestController
@RequestMapping("/orchid/api")
public class DialogFlowRest {

    private static JacksonFactory jacksonFactory = JacksonFactory.getDefaultInstance();

    @RequestMapping(method = RequestMethod.POST, value = "/dialogFlowWebHook")
    public ResponseEntity<?> dialogFlowWebHook(@RequestBody String requestStr, HttpServletRequest servletRequest) throws IOException {

        try {

            GoogleCloudDialogflowV2WebhookResponse response = new GoogleCloudDialogflowV2WebhookResponse(); // response 객체
            GoogleCloudDialogflowV2WebhookRequest request = jacksonFactory.createJsonParser(requestStr).parse(GoogleCloudDialogflowV2WebhookRequest.class); // request 객체에서 파싱

            Map<String,Object> params = request.getQueryResult().getParameters(); // 파라미터 받아서 map에다 저장
            
            if (params.size() > 0) {
                System.out.println(params);
                response.setFulfillmentText("다음과 같은 파라미터가 나왔습니다 " + params.toString());
            }
            else {
                response.setFulfillmentText("Sorry you didn't send enough to process");
            }

            return new ResponseEntity<GoogleCloudDialogflowV2WebhookResponse>(response, HttpStatus.OK);
        }
        catch (Exception ex) {
            return new ResponseEntity<Object>(ex.getMessage(),HttpStatus.BAD_REQUEST); // 에러 발생 시 bad request 보내줌
        }
    }
}

아래 참고

https://github.com/adnirjhar/orchid-backend/blob/master/src/main/java/com/orchid/server/dialogflow/DialogFlowREST.java


+) 테스트하는 방법
Postman에서 하셈

method - POST
url - 다이얼로그 fulfillment에서 지정해준거
headers - 다이얼로그 fulfillment에서 지정해준 헤더 전부 넣었음(Content-Type, username, password)
body - 다이얼로그에서 개별 인텐트 하나 들어가면 우측 하단에 Diagnostic info가 있음 그거 클릭
Fulfillment request 복붙해서 body에 넣어주면 됨

profile
블로그 정리안하는 J개발자

0개의 댓글