블로그 이미지
* Microsoft MVP - Windows Development 2014 ~ 2019 5ring * LINE : kaki104 * facebook : https://www.facebook.com/kaki104 https://www.facebook.com/groups/w10app/ kaki104

카테고리

List All (550)
Xamarin Forms (4)
Bot Framework (18)
Azure (9)
Windows 10 (35)
Facebook News & Tips (158)
Windows App(Universa.. (83)
Windows 8&8.1 (113)
Windows Phone 8 (42)
Silverlight (37)
HTML5 & MVC4 (16)
WPF (1)
Portable Class Library (2)
Uncategorised Tips a.. (3)
Kinect for Windows (2)
ETC (12)
kaki104 Scrap (4)
App News (11)
Total519,087
Today51
Yesterday98

새로운 뉴스가 나왔는지 확인하려고 MSN 뉴스를 보다가 Bot Framework가 Facebook 메신저를 지원한다는 뉴스를 보게되니 관심이 생기네요 그래서 시작했습니다.

 

Build 2016에서 공개한 Bot Framework을 이용해서 채팅 봇을 만드는 방법을 Getting Start 페이지의 내용을 따라하면서 배워 보도록 해요~ 현재 Bot Framework은 Preview버전으로 자세한 사항은 봇 프레임웍 메인 페이지를 참고합니다.

 

Part1 : Bot Framework 시작하기

Part2 : Azure에 배포하고, Bot Framework에 등록하기

Part3 : Facebook 메신저와 연동하기

Part4 : 다이얼로그 처리

Part5 : 카키 샌드위치 주문하기

Part6 : 향상된 카키 샌드위치 주문하기

 

 

1. 참고 페이지

http://docs.botframework.com/connector/getstarted/#getting-started-in-net

 

봇 프레임웍 메인

https://dev.botframework.com/#/bots

 

 

2. 개요

 

Microsoft Bot Framework Connector는 다양한 통신 채널(GroupMe, SMS, Email)로 봇(Bot)을 연결하는 데 도움이 되는 통신 서비스입니다. 만약, 당신이 인터넷에 노출되어있는 봇 프레임 워크에 대화를 입력하면, 커넥터는 사용자에게 봇의 메시지를 전달하게 됩니다.

 

봇 프레임 웍을 이용하기 위해서는 다음이 필요합니다.

 

1) 마이크로소프트 계정 : 당신이 만든 봇을 등록

2) Connector service 콜백가능한 Azure에 접근할 수 있는 REST endpoint.

* Azure 계정이 반드시 필요 합니다. 오프라인 모임 때 일반 IIS로도 가능하지 않겠느냐고 했는데..않될 듯하네요.. 컨넥터가 하는 일이 메시지 라우트, 상태 관리, 봇 등록, 세션 추척, 기타 서비스 등을 사용해야 하기 때문인 듯합니다.

3) 당신의 봇이 커뮤니케이션 할 수 있는 하나나 다수의 커뮤니케이션 서비스(Skype같은)의 개발자 계정, Facebook은 좀 마니 복잡하고, Telegram은 무지 쉽습니다.

 

 

음..간단하게 필요한 항목들을 살펴 보았으니, 이제 직접 만들어 보도록 하죠.

 

 

** .NET으로 시작하기

 

3. 필요한 소프트웨어 받기

. Visual Studio 2015 최신 버전(Update2)이 필요하며, community 버전은 무료로 사용이 가능하다.(5인 이하 개발사, 개인 개발자, 오픈 소스진영 등)

. 모든 VS extension을 업데이트를 받아야 하는데, 시간이 없는 경우 Azure SDK만 최신으로 받아도 될 듯 합니다. (Tools -> Extensions and Updates -> Updates)

 

 

4. 봇 어플리케이션 템플릿을 다운 받고 템플릿 폴더에 넣기

. 봇 템플릿 다운로드 : http://aka.ms/bf-bc-vstemplate

. zip파일(압축을 풀지 않고)을 “%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#" 경로에 복사해서 붙여 넣는다.

예) C:\Users\kaki1\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#

 

 

5. 비주얼 스튜디오 시작

 

 

6. 봇 어플리케이션 템플릿으로 프로젝트를 생성

아래와 같이 선택할 수 있어야 있으면 다음으로 진행 합니다.

 

 

템플릿은 사용자의 택스트를 취하고 결과를 반환하는 에코 봇이며, 실행하기 위해서는 최종 적으로 다음의 작업이 필요합니다.

 

1) Bot Connector에 봇 등록 과정 진행

2) 제작한 봇을 Publish하기 전에 반드시 Bot Framework 등록 페이지에 APPId와 AppSecret를 복사해서, web.config에 입력해야 합니다.

3) 웹에 게시해야 합니다. 게시후 url 주소를 복사해서 bot connector쪽에 입력해 주어야 합니다.

 

 

7. 봇 빌드

 

봇 템플릿의 핵심 기능은 Controllers\MessagesController.cs안에 Post 함수에 있다. 코드가 사용자의 메시지 텍스트를 얻어야 하는 경우, CreateReplyMessage 함수를 이용해서 응답 메시지를 만들게 됩니다. 메소드에 붙어 있는[BotAuthentication]은 Bot Connector 자격 증명의 유효성을 검사하는데 사용한다. 만약 HTTP를 통해 제공되는 서비스라면 해당 내용을 삭제해야 한다.

 

포스트에서는 메소드에 속성이 붙어있지만, 실제 템플릿을 이용해서 프로젝트를 생성하면 아래와 같이 클래스에 붙어 있는 것을 알 수 있다.

 

    [BotAuthentication]
    public class MessagesController : ApiController
    {
        /// <summary>
        /// POST: api/Messages
        /// Receive a message from a user and reply to it
        /// </summary>
        public async Task<Message> Post([FromBody]Message message)
        {
            if (message.Type == "Message")
            {
                // calculate something for us to return
                int length = (message.Text ?? string.Empty).Length;

                // return our reply to the user
                return message.CreateReplyMessage($"You sent {length} characters");
            }
            else
            {
                return HandleSystemMessage(message);
            }
        }

        private Message HandleSystemMessage(Message message)
        {
            if (message.Type == "Ping")
            {
                Message reply = message.CreateReplyMessage();
                reply.Type = "Ping";
                return reply;
            }
            else if (message.Type == "DeleteUserData")
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == "BotAddedToConversation")
            {
            }
            else if (message.Type == "BotRemovedFromConversation")
            {
            }
            else if (message.Type == "UserAddedToConversation")
            {
            }
            else if (message.Type == "UserRemovedFromConversation")
            {
            }
            else if (message.Type == "EndOfConversation")
            {
            }

            return null;
        }
    }

 

 

8. Bot Framework 에뮬레이터를 이용한 봇 어플리케이션 테스트

 

Bot Framework Emulator

http://download.botframework.com/botconnector/tools/emulator/publish.htm

 

Install 버튼을 눌러서 설치 합니다.

 

 

 

인스톨이 완료된 후 프로젝트를 Microsoft Edge를 이용해서 실행한다.

 

 

 

 

 

기본 페이지는 Default.htm 파일이며, 원하는데로 수정해서 사용할 수 있지만..뭐 중요한 화면은 아니니..

 

봇 에뮬레이터를 이용해서 테스트를 하려면, 응용프로그램의 port 번호를 맞춰줘야 한다. 음..그런데 기본 3978번으로 고정이 되어 있는 듯하니 이 부분은 넘어가고 계속 진행합니다.

 

봇 응용프로그램과 에뮬레이터가 상호 작용하기 전에 도구에서 몇가지 항목을 설정해야 하는데..기본적으로 되어있는 내용을 사용해도 무관합니다.

 

1) URL 항목에 기본 주소뒤에 /api/messages를 추가해 줘야한다.

2) AppId를 입력해 줘야한다.(생략 가능)

3) AppSecret를 입력해 줘야한다.(생략 가능)

 

템플릿을 실행했을 때는 2,3은 아직 없고 1번은 이미 에뮬레이터에 입력되어있으니 따로 지정하지 않는다.

** 2,3번을 입력하려면 아직 한~참 남았으니 느긋하게 함께 해용

 

에뮬레이터 텍스트 입력하는 곳에 메시지를 입력하면  아래와 같은 회신이 오는 것을 알 수 있습니다.

 

 

 

템플릿에는 기본 응답메시지가 출력되는데 응답 메시지를 아래와 같이 수정 합니다.

 

MessageController.cs

 

public async Task<Message> Post([FromBody]Message message)
{
    if (message.Type == "Message")
    {
        // fetch our state associated with a user in a conversation. If we don't have state, we get default(T)
        var counter = message.GetBotPerUserInConversationData<int>("counter");

        // create a reply message  
        Message replyMessage = message.CreateReplyMessage($"[{++counter}] {message.Text}라고 했지 말입니다");

        // save our new counter by adding it to the outgoing message
        replyMessage.SetBotPerUserInConversationData("counter", counter);

        // return our reply to the user
        return replyMessage;
    }
    else
    {
        return HandleSystemMessage(message);
    }
}

 

수정한 내용에 대해 설명하면, 사용자와의 세션에 원하는 데이터를 넣어놓고, 불러와서 사용하는 것입니다. SetBotPerUserInConversationData를 이용해서 데이터를 저장하고, GetBotPerUserInConversationData를 이용해서 데이터를 불러 옵니다.

 

태후가 끝나도 말투는 남아있는..쿨럭;;

 

 

 

다음에는 Azure서비스에 등록하는 부분부터 이어서 진행하도록 합니다.

 

Posted by MVP kaki104

티스토리 툴바