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을 선택하고 그 이후 메세지 보냄.)

 

 

2017/11/21 - [C#.NET/C#] - 카카오 쳇봇 만들기 - 1

 

이전시간에 이어 카카오 쳇봇 두번째 시간에는 서버를 만들어보겠습니다.

비쥬얼 스튜디오를 일단 열고

새 프로젝트를 만들어 아래와 같이 좌측목록에서 을 선택하고 우측에서 ASP.NET 웹 응용 프로그램 을 선택합니다.

아래와 같은 화면이 나오게 되는데 비어 있음 을 선택하고 Web API 는 체크하여 확인합니다.

그럼 아래처럼 프로젝트가 구성됩니다.

이제 카카오가 제시하는 호출 형식으로 웹서비스를 제공해야합니다.

아래처럼 Controllers 폴더 아래에 컨트롤러를 추가합니다.

읽기/쓰기 동작이 표함된 Web API 2 컨트롤러 를 선택하면 예시 코드를 볼수있어서

작성하는데 도움이 많이 됩니다.

도움이 필요없다면 Web API 런트롤러 - 비어있음 을 자신있게 선택하세요!!

컨트롤러가 추가되면 아래처럼 기본적인 Get Post Put Delete 메서드가 구현되어있습니다.

일단 이것을 참고하여 카카도톡이 제시한 http(s)://:your_server_url/keyboard 형식의 GET Method 를 구현해야합니다.

아래 설명에도 나와있지만 keyboard 는 채팅을 처음 시작할때 보여주는 메세지나 버튼을 처리하도록 합니다.

https://github.com/plusfriend/auto_reply#51-home-keyboard-api

GET 방식이므로 기본적으로 아래처럼 작성됩니다.

        [HttpGet]
        public dynamic GetKakao()
        {

            return null;
        }

json 형식을 처리하기위해 dynamic 으로 리턴처리가 되도록 하였습니다.

여기서 중요한건 http(s)://:your_server_url/keyboard 이런형태로 keyboard 로 주소가 끝나게 하여 호출이 되도록 해야합니다.

이를 위해선 [Route("keyboard")] 가 필요합니다.

        [HttpGet]
        [Route("keyboard")]
        public dynamic GetKakao()
        {

            return null;
        }

위처럼 하면 주소에 keyboard 로 호출하게되면 위 메서드가 타게됩니다.

이제 리턴을 아래 json 형태로 전달해야합니다.

{
    "type" : "buttons",
    "buttons" : ["선택 1", "선택 2", "선택 3"]
}

dynamic 을 이용해 위 형태를 만들어 보내면됩니다.

위 내용을 표현한다면 아래처럼 코딩하면됩니다.

            var result = new { type = "buttons", buttons = new List<string>() { "선택1", "선택2", "선택3" } };
            return result;

전체적으로 보면

        [HttpGet]
        [Route("keyboard")]
        public dynamic GetKakao()
        {
            var result = new { type = "buttons", buttons = new List<string>() { "선택1", "선택2", "선택3" } };
            return result;
        }

위처럼 됩니다.

이대로 IIS 올리게되면 플러스친구와 1:1 채팅을 하여 대화방이 열리면 버튼1,2,3 이 나타나게됩니다.

IIS 에 올리는 방법은 우선 빌드한 후 아래와 같이 프로젝트 우클릭 메뉴에서 게시 를 선택합니다.

IIS 에 바로 올릴수도 있지만 전 폴더로 빼서 직접 올렸습니다. 그래서 폴더를 선택하고

게시 버튼을 누르게 되면 게시가 진행됩니다.

게시가 완료되면 해당 경로에 아래처럼 파일이 생성됩니다.

이 파일을 그대로 IIS 에 올리면 됩니다.

IIS 올린 후

https://center-pf.kakao.com/login

으로 이동하여 이전에 추가했던 플러스 친구로 들어가서

좌측의 스마트채팅으로 들어간 후 우측의 API 형 의 설정하기 버튼을 클릭합니다.


아래와 같은 화면에서 API 테스트를 진행해야합니다.

IIS 주소를 넣고 API 테스트 버튼을 클릭하여 아래와 같이 OK 가 떨어져야 제대로 셋팅이 된것입니다.

이제 플러스 친구와 1:1 채팅을 하면 아래와 같이 버튼이 나타나게됩니다.

직접하면 시간이 길지 않은데 포스팅하니 글이 길어지는군요;;;

다음 시간에는 응답형 API 를 이용해 응답처리를 하는것을 해보도록 하겠습니다.

프로젝트 파일을 첨부하고 싶었으나 용량이 커서 안되는군요 ㅜㅠ

카카오 쳇봇을 하나 만들었습니다.

만드는 과정을 적어봅니다.

쳇봇을 하려면 서버도 필요하지만 먼저 카카오톡플러스친구 를 만들어야합니다

예전에는 옐로우 ID 였는데 바뀐것 같네요.

아래 링크로 접속합니다.

https://center-pf.kakao.com/login

플러스 친구 만들기 를 선택합니다.

카카오 계정으로 로그인합니다.

계정이 없다면 만들어야합니다. 간혹 전화번호만 가지고 사용하는 분들도 있더군요..

처음 사용하는거라 가져올 필요가 없습니다;

예전의 옐로 아이디와의 연동을 위한것 같습니다.

필요없으니 다시보지않기 체크 하고 닫기.

 

로그인이 완료되니 아래처럼 옐로우 아이디 시절에 만들었던게 하나 있었네요;;

일단 새로 만들꺼니 새 플러스친구 만들기 버튼을 클릭합니다.

 

플러스 친구 개설하기에서 추가할 쳇봇 관련 정보를 적습니다.

검색을 허용등을 설정하고 확인하여 완료합니다.

아래처럼 플러스 친구가 하나 만들어졌네요.

 

이제 왼쪽메뉴중에 스마트 채팅이라는 메뉴로 접근하여 API 형을 설정하게되면

내 서버로 수신을 받고 응답을 사용자에게 보낼 수 있게 됩니다.

 

설정하기 버튼을 누르면 아래처럼 앱 URL  란에 자신의 서버 주소를 넣어야합니다.

https://github.com/plusfriend/auto_reply

위 링크가 API 의 구성을 나타냅니다.

링크에 맞게 서버를 구성하면됩니다.

서버구성은 다음시간에~^^

 

+ Recent posts