728x90

2017/11/21 - [C#.NET/C#] - 카카오 쳇봇 만들기 - 1 (플러스친구 만들기)

2017/11/24 - [C#.NET/C#] - 카카오 쳇봇 만들기 - 2 (C# 서버 만들기)

 

이전 시간에 이어서 응답 가능한 쳇봇을 구성해보겠습니다.

응답가능한 쳇봇은 아래 처럼 구성이 되어야 한다고 나와있습니다.

https://github.com/plusfriend/auto_reply#52-메시지-수신-및-자동응답-api

우선 내 서버로 들어온 미디어 데이터는 내 서버로 바로 오는게 아니라 카카오 서버에 저장되어 넘어옵니다.

하지만 내 서버에서 보낸건 내 서버에만 저장됩니다.

 

위 그림에서 보듯이 사용자가 내 서버로 메세지나 미디어 정보를 보내면 위 처럼 데이터가 담겨서 넘어옵니다.

내 서버로 온 미디어 정보는 카카오 서버에 저장되어 넘어오므로 content url 에 카카오 서버 링크가 보여집니다.

위 정보를 토대로 Post 메서드를 구성해 보면..

주소가 message 로 끝나야하고 POST 메서드 이므로 아래 처럼 기본 구조를 갖습니다.

        [HttpPost]
        [Route("message")]
        public dynamic GetKakao_message([FromBody]dynamic value)
        {
            return null;
        }

json 형태로 넘겨야하기 때문에 그냥 Dynamic 을 리턴 타입으로 했습니다.

이제 value 에 위에서 제시한 user_key, type, content 값이 넘어오게 됩니다.

이제 이정보를 value 에서 꺼내야합니다.

쉽게 꺼내기 위해서 프로젝트에 Nuget 패키지 관리자 를 통해

Newtonsoft.Json 을 설치합니다.

using Newtonsoft.Json; 문을 추가한 후

아래처럼 꺼내올 구조를 정의하고

        public class KakaoModel
        {
            public string user_key { get; set; }
            public string type { get; set; }
            public string content { get; set; }
        }

아래 처럼 코딩하게되면 KakaoModel 에 데이터가 담기게 됩니다.

        [HttpPost]
        [Route("message")]
        public dynamic GetKakao_message([FromBody]dynamic value)
        {
            string valueString = JsonConvert.SerializeObject(value);
            KakaoModel postmodel = JsonConvert.DeserializeObject<KakaoModel>(valueString);
            string result = postmodel.content;

            return result;
        }

이제 사용자가 내 서버로 어떤 정보를 보내는지 알아내는데 까지 완료되었습니다.

이제 응답을 보내야합니다.

 

응답은 message, keyboard 형태로 응답할수 있습니다.

keyboard 는 버튼 형태로 결과를 주는 것으로 이전 포스팅에서 설명이 되었습니다.

여기서는 단순히 메아리 치는 즉 사용자가 보내는 메세지를 그대로 보내보도록 합니다.

        [HttpPost]
        [Route("message")]
        public dynamic GetKakao_message([FromBody]dynamic value)
        {
            string valueString = JsonConvert.SerializeObject(value);

            KakaoModel postmodel = JsonConvert.DeserializeObject<KakaoModel>(valueString);

            var result = new { message = new { text = postmodel.content }, keyboard = new { type = "text" } };

            return result;
        }

message 의 text 항목에 사용자가 보낸 메세지를 그대로 보냈습니다.

더 설명할건 없는것 같네요;

 

테스트 하기위해 폴더로 게시하고 IIS 올린 후

내 플러스친구와 대화를 나눠보면 아래와 같이 메아리? 치게됩니다.

(처음에 선택1,2,3 버튼이 나와 선택1을 선택하고 그 이후 메세지 보냄.)

 

 

728x90
Posted by kjun.kr
,