오늘은 카카오 오픈빌더의 "스킬"을  사용해 카카오톡에 말풍선리스트를 출력해보도록 하겠습니다.

아래와 같은 모습으로 출력을 해보도록 하겠습니다.

 

지난 포스팅에서 활용한 웹서버 구성을 활용해 보도록 하겠습니다.

https://vmpo.tistory.com/94

 

카카오 오픈빌더 -3 : 스킬사용 단순응답(웹서버에서 요청/응답)

카카오 오픈빌더에서 제공하는 플랫폼을 활용해 카카오톡에서 사용자가 발화를 입력하면, 해당 내용이 웹서버로 전달되고 발화내용에 따른 로직처리를 한 후 응답내용을 사용자게에 전달 할 수 있습니다. '스킬'..

vmpo.tistory.com

 

JSON규격확인


JSON형태는 간단합니다.

기존 TEMPLATE OUTPUTS영역에, quickReplies 리스트 타입을 추가해주기만 하면 됩니다.

{
"version": "2.0",
  "template": {
    "outputs": [
      {
        "simpleText": {
          "text": "토트넘 선수 리스트입니다."
        }
      }
    ],
    "quickReplies": [
      {
        "messageText": "손흥민",
        "action": "message",
        "label": "손흥민"
      },
      {
        "messageText": "헤리케인",
        "action": "message",
        "label": "헤리케인"
      },
      {
        "messageText": "에릭센",
        "action": "message",
        "label": "에릭센"
      },
      {
        "messageText": "요리스",
        "action": "message",
        "label": "요리스"
      }
    ]
  }
}

 

JSON파싱 코드


json스트링을 만들기 위한 코드 입니다.

이해하기 쉽게 하나의 함수 내에 전체 json파싱 작업을 다 확인 할 수 있도록 코드를 작성했습니다.

그럼 아래 api를 스킬로 등록하고, 특정 입력이 들어올때 리턴하도록 해보겠습니다.

 

"토트넘"이라는 단어가 입력될때 리턴되도록 하겠습니다.

    @RequestMapping(value = "/kkoChat/v2" , method= {RequestMethod.POST , RequestMethod.GET },headers = {"Accept=application/json"})
    public HashMap<String,Object> kkov2(@RequestBody Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {

        HashMap<String, Object> resultJson = new HashMap<>();

        try{

            ObjectMapper mapper = new ObjectMapper();
            String jsonInString = mapper.writeValueAsString(params);
            System.out.println(jsonInString);

            /* 발화 들어온거 확인하기 * */
            HashMap<String,Object> userRequest =  (HashMap<String,Object>)params.get("userRequest");
            String utter = userRequest.get("utterance").toString().replace("\n","");

            List<HashMap<String,Object>> outputs = new ArrayList<>();
            HashMap<String,Object> template = new HashMap<>();
            HashMap<String, Object> simpleText = new HashMap<>();
            HashMap<String, Object> text = new HashMap<>();

            List<HashMap<String,Object>> quickReplies = new ArrayList<>();
            HashMap<String,Object> quickRepl = new HashMap<>();
            quickRepl.put("action","message");
            quickRepl.put("label","손흥민");
            quickRepl.put("messageText","손흥민");
            quickReplies.add(quickRepl);

            HashMap<String,Object> quickRepl2 = new HashMap<>();
            quickRepl2.put("action","message");
            quickRepl2.put("label","헤리케인");
            quickRepl2.put("messageText","헤리케인");
            quickReplies.add(quickRepl2);

            HashMap<String,Object> quickRepl3 = new HashMap<>();
            quickRepl3.put("action","message");
            quickRepl3.put("label","에릭센");
            quickRepl3.put("messageText","에릭센");
            quickReplies.add(quickRepl3);

            HashMap<String,Object> quickRepl4 = new HashMap<>();
            quickRepl4.put("action","message");
            quickRepl4.put("label","요리스");
            quickRepl4.put("messageText","요리스");
            quickReplies.add(quickRepl4);

            text.put("text","토트넘 선수 리스트입니다.");
            simpleText.put("simpleText",text);
            outputs.add(simpleText);

            template.put("outputs",outputs);
            template.put("quickReplies",quickReplies);

            resultJson.put("version","2.0");
            resultJson.put("template",template);


        }catch (Exception e){

        }

        return resultJson;
    }

 

 

스킬등록하기


아래와 같이 스킬메뉴에서 방금 작성한 API를 등록해줍니다.

 

아래와같이 시나리오 메뉴에 들어가

토트넘 블록을 생성하고 사용자 발화에는 토트넘을 입력해줍니다.

그리고, 토트넘이라는 단어가 들어올때 스킬 API를 호출하도록 위에서 등록한 토트넘스킬을 등록해주고,

응답을 리턴 할 수 있도록 봇응답을 스킬데이터 사용으로 해줍니다.

 

그리고 배포를 한 번 해줍니다.

 

테스트


챗봇 대화방에 가서, 토트넘이라고 입력해보겠습니다.

아래와 같이 위에서 설정한 4개의 바로가기응답 말풍선이 노출되는 것을 확인 할 수 있습니다.

여기서 손흥민 말풍선을 눌러보면,

 

손흥민이라고 발화를 입력한 것과 동일한 효과를 주는 것을 알 수 있습니다.

위에서 messageText 값을 어떻게 주느냐에 따라, 카톡방에서 전달되는 발화의 내용이 달라질 수 있습니다.

messageText = "발화내용" 이라고 보시면 됩니다.

 

LIST
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기