형관봇
[C#]Syn(SIML) Bot을 이용한 텔레그램 챗봇 만들기 본문
챗봇의 구조는 크게 2가지로 나눌 수 있습니다.
열린대화 와 닫힌대화
SNS상에 이 구조를 쉽게 풀어쓴 글이 있어서 링크를 걸어놨습니다.
https://brunch.co.kr/@gentlepie/7
아래 그림은 이분께서 쓰신 내용중 2가지 대화의 구조화입니다.
그럼 간단하게, Syn Bot이란 API를 써서 닫힌 대화를 만들어 보겠습니다.
닫힌 대화중, 텔레그램 봇 부터 시작합니다.
http://hkbot.tistory.com/22 : [C#] 트위터 형태소 분석기
http://developer.syn.co.in/ : syn bot 홈페이지
http://simlbot.com/ : SIML 페이지 및 Syn Bot Studio 다운로드 페이지
Synthetic Intelligence Markup Language 라고 설명하네요
http://developer.syn.co.in/tutorial/bot-assistant/telegram-assistant.html : 텔레그램 봇 개발방법
위 3가지 링크에 모든 개발문서, API문서, Quick Start자료 등이 상세하게 설명되어 있습니다.
우선, Syn Bot Studio를 설치 해보겠습니다.
설치 후 새 프로젝트를 생성합니다.
프로젝트를 만들었으면,
[Project] -> [Hello Bot]을 오픈해서 기본셋팅을 확인해보겠습니다.
Model태그 안에 Pattern과 Response태그가 있습니다.
보기쉽고 이해하기 쉬운 구조로 되어있습니다.
HELLO BOT을 입력했을때 Hello User!라고 대답하는 것 같네요.
그럼 실행 해보겠습니다.
우선 F5를 눌러서 Build Project를 실행합니다.
Console 탭으로 가서 hello bot이라고 입력해보겠습니다.
소문자로 hello bot이라고 입력했음에도 잘 대답해주네요.
몇가지 패턴만 만들고 바로 텔레그램과 연동시켜보겠습니다.
Hello Bot.siml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <Siml> <Concept Name="Introduction"> <Model> <Pattern> <Item>/start</Item> <Item>안녕 %</Item> <Item>하이 %</Item> <Item>헬로우 %</Item> <Item>헬로 %</Item> <Item>hi %</Item> <Item>hello %</Item> <Item>안녕하세요 %</Item> </Pattern> <Response> <Random> <Item>안녕하세요. 형관봇입니다.</Item> <Item>안녕하세요. 반갑습니다.</Item> <Item>환영합니다.</Item> </Random> </Response> </Model> </Concept> </Siml> | cs |
Bot-Settings.siml
1 2 3 4 5 6 7 8 9 10 11 | <Siml> <BotSettings> <!--Response that is added if No internal response is generated--> <Variable Name="Empty-Response" Value="죄송합니다. 아직 학습중입니다." /> <!--Used to Separate variables in listed formats example 1, 2, 3--> <Variable Name="List-Separator" Value=", " /> <!--Adds a delimiter when a List is requested example 1, 2, 3 AND 4--> <Variable Name="List-End" Value=" and " /> <!--Culture: Is used to let SIML Bot know what environment culture is to be used.--> ... ... | cs |
텔레그램을 실행 하여 BotFather를 검색하고, 봇을 만들어 달라고 부탁해보겠습니다.
HTTP API키를 발급 받았으니, 서버프로그램을 만들어 보겠습니다.
콘솔 응용 프로그램으로 만들고, NuGet을 통해 Syn.Bot.Assistant 를 설치합니다.
Program.cs 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | using Syn.Bot.Assistant.Telegram; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TelegramBotServer { class Program { static void Main(string[] args) { var telegramAssistant = new TelegramAssistant("281861335:~EWvpyX4cS8"); telegramAssistant.Bot.PackageManager.LoadFromString(File.ReadAllText("Bot.simlpk")); telegramAssistant.Client.StartReceiving(); Console.WriteLine($"Your Telegram Bot is now Online: {DateTime.Now}"); Console.ReadLine(); telegramAssistant.Client.StopReceiving(); } } } | cs |
텔레그램에서 발급받은 API키를 넣어주시고, Bot.simlpk 파일은 Syn Bot Studio 에서 추출합니다.
[PROJECT] -> [Export to Package] -> 콘솔프로그램 bin\Debug 폴더에 저장
프로젝트를 실행해보겠습니다.
텔레그램에서 HKDoor_bot 을 검색해여 말을 걸어보겠습니다.
간단한 챗봇이 구현 되었네요.
SIML 코드를 이용하여, 어설픈 AI챗봇보다 더 좋은 챗봇을 만들 수 있을것 같습니다.
활용할 수 있는 SIML Elements 들도 많구요~
다음엔 좀더 심도있는 SIML을 다뤄보겠습니다.