SlideShare a Scribd company logo
1 of 22
Download to read offline
[튜토리얼]	
Watson	Conversation으로 쉽게
만드는 챗봇
IBM	Developer	Outreach	Team
Contact	Us
#building-with-watson
#watson-korea
facebook.com/groups/BluemixStud
y
wdc-slack-inviter.mybluemix.net
http://stackoverflow.com/questio
ns/tagged/watson-conversation
https://developer.ibm.com/answer
s/topics/watson-conversation.html
Watson	Conversation	관련 문서 목록
Watson	Conversation	소개 문서
https://www.ibm.com/watson/developercloud/doc/conversation/index.html
API	문서
https://www.ibm.com/watson/developercloud/conversation/api/v1/#introduction
API	테스트
https://watson-api-explorer.mybluemix.net/apis/conversation-v1
개발 툴,	SDK,	Starter	Kit
https://www.ibm.com/watson/developercloud/developer-tools.html
튜토리얼
https://developer.ibm.com/kr/cloud/bluemix/watsonservice/2017/01/13/watsonchatbot-1-
watson-conversation/
샘플 코드
https://github.com/watson-developer-cloud/conversation-simple
https://developer.ibm.com/kr
튜토리얼 소개
1. WCS 시작하
기
2. 메신저와 연동
하기
3. 질문 수집하
기
4. Intent 분류하
고 학습시키기
5. Entity와
Dialog 설정하
기
6.	Backend 서비
스와 연동하기
사용자
인터페이스
어플리케이션
워크스페이스
Conversation
Service 백엔드 시스템
Architecture
사전 준비 사항
Bluemix Account	생성 및 CLI	설치1 2
3 GIT	설치
Node.js 설치
https://github.com/cloudfoundry/cli#do
wnloads
https://console.ng.mybluemix.net https://nodejs.org/en/#d
ownload
https://git-
scm.com/book/ko/v1/%EC%8B%9
C%EC%9E%91%ED%95%98%EA%B
8%B0-Git-
%EC%84%A4%EC%B9%98
목차
1. WCS	시작하기
• Bluemix에서 WCS(Watson	Conversation	Service) 인스턴스 생성하기
• WCS 툴에 접근하기
• 내 Workspace 생성하기
• 내 Credential 정보 확인하기
• #Greeting 작성하기
2. 챗봇 노출하기
• Web	Client로 노출하기 (필수)
• 카카오톡으로 노출하기 (선택)
• 텔레그램으로 노출하기 (선택)
3. 질문 수집하기
4. Intent 분류하고 학습시키기
5. Entity와 Dialog 설정하기
6. Backend	서비스와 연동하기
튜토리얼 1.	WCS 시작하기
Watson	Conversation	Service (이하 WCS)는 Bluemix(IBM	PaaS	Platform)을 통해서 제공되는 클라우드 서비스
입니다. Bluemix에서 WCS 인스턴스를 생성하여 사용할 수 있습니다.
이 튜토리얼은 Bluemix의 가입 과정은 생략합니다.
1) bluemix.net 에 접속합니다.
2) Catalog에서 Conversation 서비스를 작성합니다. 왼쪽 카테고리에서 Watson을 선택하면 서비스를 더
빨리 찾을 수 있습니다.
3) 서비스를 작성하면 아래와 같은 화면이 나타납니다. 다른 메뉴로 이동했다가 다시 이 화면을 보려면
좌측 상단의 햄버거 버튼을 눌러 Service/Dashboard를 선택 하고 작성한 Conversation 인스턴스를 클릭
합니다.
4) Launch	Tool 버튼을 눌러 WCS 툴로 이동합니다.
5) Conversation	Tool의 URL을 편의를 위해 북마크에 추가합니다. 브라우저별 방법은 상이합니다.
6) Create 버튼을 눌러 Workspace를 생성합니다. Workspace는 챗봇을 빌드하기 위해 Intent 등을 트레이닝
시키기 위한 단위입니다.	우측에 Import 버튼이 있습니다. 추 후에 Workspace 단위로 Import/Export 할
수도 있음을 참조하십시오.
7) Name 필드에 자유롭게 이름을 입력하고, Language로 English를 선택하십시오.
8) Workspace가 생성되었습니다 !
9) 마지막으로 앞으로 어플리케이션 연동에 필요한 Credential 정보를 확인합니다. 좌측 상단에 있는 햄
버거 메뉴를 누른 후 Deploy	>	Credentials 메뉴를 클릭합니다.
10) Username,	Password 및 Workspace	ID를 선호하는 에디터에 Copy합니다.
Workspace는 어플리케이션이 사용하는 단위입니다.	하나의 Watson	Conversation	Service	인스턴스 안에 여러
Workspace를 생성할 수 있습니다.	Workspace는 다음과 같은 타입의 artifact로 이루어집니다.
• Intent	:	Intent는 사용자가 하려는 말의 목적을 의미합니다.	따라서 우리는 서비스에서 제공하고자 하는
요청의 모든 타입을 Intent로 정의하게 됩니다.	예를들어 회의실 예약은 하나의 Intent가 될 수 있습니다.	
Watson	Conversation에서 Intent를 지칭할 때에는 #을 prefix로 사용합니다.	Intent를 정의할 때에는 사용자가
이 Intent를 목적으로 말을 할 때 사용할 가능성이 있는 최대한 많은 예시를 제공하는 것이 좋습니다.	예를
들어 회의실 예약이라는 Intent에는 “회의실 예약해주세요.”,	“지금 빈 회의실이 있나요?”	등의 예시를
제공할 수 있습니다.
• Entity :	Entity는 Intent와 관련된 용어 또는 목적어를 의미합니다.	Entity는 Intent에 대해 구체적인
문맥(Context)을 제공하는데에 쓰입니다.	예를 들어 회의실 예약이라는 Intent를 사용하기 위해서는 회의실
이라는 Entity를 정의할 수 있습니다.	회의실 Entity에는 실제로 보유중인 회의실 이름을 담으면 됩니다.	
이렇게 Entity를 정의하면 사용자가 “진달래 회의실 지금 비어 있어?”	라고 했을 때 회의실 Entity의 값이
“진달래”로 리턴되게 됩니다.
• Dialog :	Dialog는 대화의 흐름을 분기하는 것으로 어플리케이션이 정의된 Intent와 Entity를 인식했을 때
어떠한 응답을 할 것인지를 정의합니다.	다시 말하면 사용자가 대화를 시도했을 때 이 대화의 Intent와
Entity를 파악한 후 어떠한 응답을 할 것인지를 정의합니다.
11) 첫번째 Intent로 #Greeting을 작성해 보겠습니다. 상단의 메뉴에서 Intents를 클릭하여 이동합니다.
12) Create	new 버튼을 클릭하여 인텐트를 작성합니다.
13) 작성 후에 Create 버튼을 클릭합니다.
14) Watson의 첫번째 응답 메세지를 작성해 보겠습니다. 상단 메뉴에서 Dialog로 이동합니다.
15) Create 버튼을 눌러 Dialog 작성을 시작합니다.	먼저 Welcome 메세지를 작성합니다. Trigger 조건에
conversation_start를 입력하면 나오는 드롭다운 메뉴에서 create	new	condition을 클릭합니다.
16) 노드의 이름에 Welcome을 입력합니다.
17) 다음과 같이 Response를 입력합니다.
Good	to	see	you	!	I	can	help	you	book	or	manage	your	meeting	room.
18) Welcome 노드 하위의 + 버튼을 눌러 새 노드를 작성합니다.
19) 아래와 같이 노드를 작성합니다.
20) 지금까지 작성한 챗봇을 테스트 해 보겠습니다. 우측 상단에 위치한 메세지 아이콘을 선택합니다.
21) 대화창을 이용하여 테스트합니다. Watson이 예측한 Intent가 맞지 않는 경우 바로 보정할 수 있습니다.
튜토리얼 1. WCS 시작하기를 모두 마치셨습니다 ! J
튜토리얼 2.	챗봇 노출하기
두번째 단계로, 내 챗봇을 어플리케이션을 통해 외부로 노출하는단계입니다.
2.1 웹 어플리케이션으로 노출하기 (필수)
웹 어플리케이션으로 노출하기 위해 먼저 아래 튜토리얼을 따르십시오.
https://developer.ibm.com/kr/cloud/bluemix/watsonservice/2017/01/20/watsonchatbot-2-watson-
conversation/
- 텔테그램 또는 카카오톡에서 Context를 저장하기 위해 Cloudant를 사용합니다.
2.1에서 어플리케이션을 블루믹스에 올릴 때 Cloudant 인스턴스가 생성되었을 것입니다.
블루믹스의 대쉬보드에서 생성된 Cloudant 서비스를 선택하고 “Service	Credentials” 탭에서 url을 복사하여
어플리케이션의 .env 에 CLOUDANT_URL	값으로 복사합니다.
2.2 카카오톡으로 노출하기 (선택, 옐로아이디가 이미 있는 경우에만 !)
카카오톡으로 노출하기 위해 아래 튜토리얼을 따르십시오. 단, tutorial4를 checkout하지 않고, 2.1 에서 작
업하신 내용에 이어서 작성합니다.
https://developer.ibm.com/kr/cloud/bluemix/watsonservice/2017/02/19/watsonchatbot-4-watson-
conversation/
2.3 텔레그램으로 노출하기 (선택)
1) 아래 튜토리얼의 1번 과정(1. 텔레그램에 Bot	생성하기)을 따라하여 텔레그램 bot	token을 얻습니다.
https://developer.ibm.com/kr/developer-%EA%B8%B0%EC%88%A0-
%ED%8F%AC%EB%9F%BC/2017/03/11/node-js-
%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-
%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8%EA%B3%BC-
%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0/
2) 다음 명령을 사용하여 api 모듈을 설치합니다.
3) .env 파일에 다음 환경변수를 추가합니다.
4) /api 밑에 telegram	폴더를 생성하고 message.js를 생성합니다.
>	npm install	–save	node-telegram-bot
#	Telegram
TELEGRAM_TOKEN=376884728:AAH0EcH3tPqBZ6G30tI8nEZCrchXXXXXXXX
chatbot-tutorial	
- api
- telegram	
- message.js
5) /api/telegram/message.js를 통해 텔레그램 메신저와 대화 서비스를 연동합니다.	먼저 필요한 모듈 및
값을 가져옵니다.
'use	strict';
const conversation	=	require('../message');
const config =	require('../../util/config');
const cloudant =	require('../../util/db');
const TelegramBot =	require('node-telegram-bot');
const db =	cloudant.db;
const token	=	process.env.TELEGRAM_TOKEN;
6) 발급받은 token으로 Telegram	bot을 생성합니다.
let	bot	=	new	TelegramBot({		
'token'	:	token
});
7) bot.on 이벤트를 생성합니다.
bot.on('message',	msg =>	{	
let	user_key =	msg.chat.id;
let	content	=	{
text	:	msg.text
};
db.get(user_key).then(doc	=>{
conversation.getConversationResponse(content,	doc.context).then(data	=>	{	
db.insert(Object.assign(doc,	{
'context':	Object.assign(data.context,	{
'timezone'	:	"Asia/Seoul”
}),
}));	
bot.sendMessage({
'chat_id':	user_key,
'text':	getOutputText(data)
});
}).catch(err => {
bot.sendMessage({
'chat_id':	user_key,
'text':	JSON.stringify(err.message)
});
});
}).catch(err	=>	{				//	first	communication
conversation.getConversationResponse(content,	{}).then(data	=>	{	
db.insert({
'_id'	:	user_key+"",	//	cloudant의 doc	id는 반드시 string	타입이어야 합니다.								
'user_key'	:	user_key+"",
'context':	data.context,
'type'	:	'telegram’
});
bot.sendMessage({
'chat_id':	user_key,
'text':	getOutputText(data)
});
}).catch(err	=>	{
bot.sendMessage({
'chat_id':	user_key,
'text':	JSON.stringify(err.message)
});
});
});
});
bot.start()
function	getOutputText(data){
var output	=	data.output;
if(output.text &&	Array.isArray(output.text)){
return	output.text.join('n');
}else	if(output.text){	
return	output.text;
}		else	return	"";
}
8)		/api/Index.js 에 텔레그램 코드를 추가합니다.
const telegram_bot =	require('./telegram/message');
9) 어플리케이션을 로컬에서 테스트하고 에러가 없으면 블루믹스로 push합니다.
10) 텔레그램으로 테스트합니다.
>	npm start
>	cf push
튜토리얼 3.	질문 수집하기
카카오톡에서
친구 추가하여 영문으로 회의실 예약을 진행해주세요.
@camomile_bot
튜토리얼 4.	Intent 분류하고 학습시키기
1) https://meetup23th.eu-gb.mybluemix.net/csv/questions	에 접속하여 엑셀을 다운로드 합니다.
2) 엑셀을 열어 두번째 Column에 아래 표를 참조하여 Intent 값을 명시합니다.
3) Comma(‘,’)	separated 형식으로 저장해야 WCS 툴에 바로 업로드 할 수 있습니다 !!
Intent Example
Greeting Hi
Reservation Would	you	reserve	a	room	for	me	tomorrow?
Positive	Answer Yes
기타 기타
튜토리얼 5.	Entity와 Dialog 설정하기
2.1		System	Entity 사용하기
1) WCS	툴의 상단 메뉴에서 Entities를 선택합니다.
2) System	entities를 사용하도록 설정합니다.	System	entities는 날짜,	숫자,	통화 등을 핸들링 할때 매우
유용합니다.	회의실 예약시에는 날짜와 시간이 필요합니다.	따라서 이 두 Entity를 Enable합니다.
2.2 Dialog 설정하기
이 단계에서는 사용자와의 대화에서 Watson이 어떻게 대답할 것인지를 결정하고 분기하게 됩니다.	Dialog
는 Intent와 Entity를 사용하여 사용자 인풋을 분석하며 정보를 수집하고 유용한 대답을 하게 만듭니다.	
Dialog는 트리 형태를 가지는데 각 인텐트를 최상위 노드로 놓고 가지를 치며 적절한 대답을 할 수 있도록
유도하면 됩니다.	이 Recipe에서는 아래 그림처럼 4개의 최상위 노드를 만들 것이며 Reservation	노드가 가
장 중요한 비즈니스 역할을 할 것입니다.
1) WCS	툴의 상단 메뉴에서 Dialog를 클릭하고 Create 버튼을 클릭합니다.
노드를 생성하기 앞서 Dialog에서 사용하는 용어를 설명드리겠습니다.
• 노드(Node)	:	노드는 Dialog를 구성하는 요소입니다.	사용자와의 대화에서 1번의 상호작용을 의미합니
다.
• 컨디션(Condition)	:	노드를 구성하는 요소로 사용자의 인풋 등을 바탕으로 조건에 맞는 경우 해당 내용
을 응답합니다.
• 응답(Response)	:	노드를 구성하는 요소로 사용자의 인풋이 컨디션에 매치되면 활성화됩니다.	간단한
문자열을 리턴할 수도 있고 좀 더 복잡한 프로세스를 실행시킬 수도 있습니다.
• 브랜치(Branch)	:	사용자와의 대화를 의미한 일련의 Dialog	Node를 브랜치라고 합니다.	사용자의 인풋이
기본 노드의 컨디션에 맞을 때 브랜치가 사용되게 됩니다.
• 턴(Turn)	:	사용자가 인풋을 하고 이에 응답하는 하나의 사이클을 턴이라고 합니다.	브랜치는 하나 이상
의 턴을 가질 수 있습니다.
• 기본 노드(Base	node)	:	브랜치의 최 상위 노드(첫 번째 노드)를 기본 노드라고 합니다.
• 자식 노드(Child	node)	:	기본 노드가 아닌 노드를 자식 노드라고 합니다.	자식 노드는 이전 노드가 최종
응답을 주기 위해 더 많은 사용자 인풋 또는 프로세스를 필요로 할 때 사용됩니다.
• 동기 노드 또는 자매 노드(Peer	node	or	Sibling	node)	:	다른 노드의 대안책이 되는 노드입니다.	모든 기본
노드는 다른 기본 노드의 동기 노드입니다.
• 노드 메뉴(Node	menu)	:	노드를 구성하느 요소로 노드를 지우거나 기능을 추가할 수 있도록 해줍니다.
노드를 작성할 때에는 SpEL(Spring	Expression	Language)을 사용합니다.	자세한 사용법은 Watson	
Conversation에서 사용하는 Expression	Language를 참조하세요.
2) 4개의 최상위 노드를 아래와 같이 작성합니다.
3) #Reservation 노드의 하위노드로 아래와 같이 작성합니다.
Index Triggered	by
Response	
Condition
Response Jump	to
1 conversation_start Welcome!
2 #Greeting
Hi,	what	can	I	do	for	you?,
Hey,	what	can	I	do	for	you?
3 #Reservation
{	"context":	{	"dates":	null,	
"rooms":	null,	"times":	null	},	
"output":	{}	}	
3-1	Condition
4 anything_else
I’m	sorry,	I	don’t	understand.	
Please	try	again.
Index Triggered	by
Response	
Condition
Response Jump	to
3-1	 NOT	$user
{	"context":	{	"user":	{	"id":	
"hjjo@kr.ibm.com",	"name":	
"HyeonJeong	Jo",	"email":	
"hjjo@kr.ibm.com",	"phone":	
"01031229436"	}	},	"output":	{}	}		
3-2	Condition
3-2	 $user
{	"context":	{	"dates":	"<?	@sys-
date?:$dates ?>",	"rooms":	"<?	
@Room?:$rooms ?>",	"times":	
"<?	@sys-time?:$times ?>"	},	
"output":	{}	}		
3-2-1	Condition
3-2-1	 NOT	$dates
{	"context":	{	"repeat":	1	},	
"output":	{	"text":	{	"values":	[	
"When	do	you	want	to	have	a	
meeting?"	],	"selection_policy":	
"sequential"	}	}	}	
3-2-1-1	 @sys-date 3-2	Condition
3-2-1-2	 true
I’m	sorry.	Please	tell	me	the	dates	
that	you	want	to	book	a	room.	For	
example,	you	can	say	in	format	
“mm/dd/yyyy”
3-2-1-2-1	 @sys-date 3-2	Condition
3-2-1-2-2	 $repeat	<	3
{	"context":	{	"repeat":	"<?	
$repeat	+	1	?>"	},	"output":	{}	}	
3-2-1-2	Condition	
3-2-1-2-3	 true
I’m	sorry.	I	can’t	understand	you.	
Please	start	again.
3-2-2	 NOT	$times
{	"context":	{	"repeat":	1	},	
"output":	{	"text":	{	"values":	[	
"What	time	do	you	prefer?"	],	
"selection_policy":	"sequential"	}	}	
}	
3-2-2-1	 @sys-time 3-2	Condition
3-2-2-2	 true
I’m	sorry.	Please	tell	me	the	times.	
You	can	tell	me	like	this.	“From	
13:00	To	14:00”
3-2-2-2-1	 @sys-time 3-2	Condition
3-2-2-2-2	 $repeat	<	3
{	"context":	{	"repeat":	"<?	
$repeat	+	1	?>"	},	"output":	{}	}	
3-2-2-2	Condition	
3-2-2-2-3	 true
I’m	sorry.	I	can’t	understand	you.	
Please	start	again.
3-2-3	 true
{	"context":	{	"action":	{	
"command":	"check-availability",	
"dates":	"$dates",	"times":	
"$times"	}	},	"output":	{	"text":	{	
"values":	[	"$user.name,	OK	I	will	
check	the	availabilty of	room.	
$dates,	$times,	$rooms"	],	
"selection_policy":	"sequential"	}	}	
}	
3-2-3-1	 #PositiveAnswer
{	"context":	{	"action":	{	"dates":	
"$dates",	"times":	"$times",	
"command":	"confirm-
reservation"	}	},	"output":	{	"text":	
{	"values":	[	"OK.	<?	context.room
?>	at	<	?	
context.times.get(0).value	?>,	<?	
context.dates ?>	is	reserved	for	
you."	],	"selection_policy":	
"sequential"	}	}	}	
3-2-3-2	 true
{	"context":	{	"action":	null	},	
"output":	{	"text":	{	"values":	[	
"Canceled.	please	start	again."	],	
"selection_policy":	"sequential"	}	}	
}	
3-3	 true
I’m	sorry.	You’re	not	a	registered	
user	in	our	system.
튜토리얼 6.	Backend	시스템과 연동하기
https://developer.ibm.com/kr/cloud/bluemix/watsonservice/2017/02/12/watsonchatbot-3-watson-con
versation/

More Related Content

What's hot

휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치Juneyoung Oh
 
Chatbot Extension 개요 및 Chatbot Builder 사용법
Chatbot Extension 개요 및 Chatbot Builder 사용법Chatbot Extension 개요 및 Chatbot Builder 사용법
Chatbot Extension 개요 및 Chatbot Builder 사용법Clova Platform
 
Kakao Bot(Plus friend)
Kakao Bot(Plus friend)Kakao Bot(Plus friend)
Kakao Bot(Plus friend)SeongSik Choi
 
챗봇 시작해보기
챗봇 시작해보기챗봇 시작해보기
챗봇 시작해보기성일 한
 
Chatbot Extension 개요 및 사용법
Chatbot Extension 개요 및 사용법Chatbot Extension 개요 및 사용법
Chatbot Extension 개요 및 사용법Clova Platform
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?Kyoung Up Jung
 
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안Clova Platform
 
Clova extension A to Z
Clova extension A to ZClova extension A to Z
Clova extension A to ZClova Platform
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
Django in Production
Django in ProductionDjango in Production
Django in ProductionHyun-woo Park
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게Sungju Jin
 
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기Kwangyoun Jung
 
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기Clova Platform
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기Kyoung Up Jung
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃Kwangyoun Jung
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTYoung D
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Kyoung Up Jung
 

What's hot (20)

휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치
 
Chatbot Extension 개요 및 Chatbot Builder 사용법
Chatbot Extension 개요 및 Chatbot Builder 사용법Chatbot Extension 개요 및 Chatbot Builder 사용법
Chatbot Extension 개요 및 Chatbot Builder 사용법
 
Kakao Bot(Plus friend)
Kakao Bot(Plus friend)Kakao Bot(Plus friend)
Kakao Bot(Plus friend)
 
챗봇 시작해보기
챗봇 시작해보기챗봇 시작해보기
챗봇 시작해보기
 
Chatbot Extension 개요 및 사용법
Chatbot Extension 개요 및 사용법Chatbot Extension 개요 및 사용법
Chatbot Extension 개요 및 사용법
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?
 
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
 
Clova extension A to Z
Clova extension A to ZClova extension A to Z
Clova extension A to Z
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
Django in Production
Django in ProductionDjango in Production
Django in Production
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게
 
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
 
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 

Similar to Bluemix 23th meetup 실습 자료

Ibm bluemix cloud 에서 chatbot 만들기
Ibm bluemix cloud 에서 chatbot 만들기Ibm bluemix cloud 에서 chatbot 만들기
Ibm bluemix cloud 에서 chatbot 만들기Shaun LEE
 
Sources와 Sinks를 Confluent Cloud에 원활하게 연결
Sources와 Sinks를 Confluent Cloud에 원활하게 연결Sources와 Sinks를 Confluent Cloud에 원활하게 연결
Sources와 Sinks를 Confluent Cloud에 원활하게 연결confluent
 
C#강좌
C#강좌C#강좌
C#강좌e12g
 
프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)Devgear
 
Project TIMAT - infrastructure as code
Project TIMAT - infrastructure as codeProject TIMAT - infrastructure as code
Project TIMAT - infrastructure as codeJesang Yoon
 
나의 첫 윈도우/맥 애플리케이션 개발하기
나의 첫 윈도우/맥 애플리케이션 개발하기나의 첫 윈도우/맥 애플리케이션 개발하기
나의 첫 윈도우/맥 애플리케이션 개발하기Devgear
 
[애플리케이션 현대화 및 개발] 파트너 세션 | 모던 인프라스트럭쳐 아키텍쳐 - 서호석 이사, 영우디지탈
[애플리케이션 현대화 및 개발] 파트너 세션 | 모던 인프라스트럭쳐 아키텍쳐 - 서호석 이사, 영우디지탈 [애플리케이션 현대화 및 개발] 파트너 세션 | 모던 인프라스트럭쳐 아키텍쳐 - 서호석 이사, 영우디지탈
[애플리케이션 현대화 및 개발] 파트너 세션 | 모던 인프라스트럭쳐 아키텍쳐 - 서호석 이사, 영우디지탈 Amazon Web Services Korea
 
Vue guide v0.1
Vue guide v0.1Vue guide v0.1
Vue guide v0.1DataUs
 
기업용 협업 메신저 - Meet Talk 서비스 소개서
기업용 협업 메신저 - Meet Talk 서비스 소개서기업용 협업 메신저 - Meet Talk 서비스 소개서
기업용 협업 메신저 - Meet Talk 서비스 소개서KJ Park
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리봉조 김
 
[AWS Builders] 손쉽게 만드는 AWS기반 한국어 챗봇 빌더 서비스
[AWS Builders] 손쉽게 만드는 AWS기반 한국어 챗봇 빌더 서비스[AWS Builders] 손쉽게 만드는 AWS기반 한국어 챗봇 빌더 서비스
[AWS Builders] 손쉽게 만드는 AWS기반 한국어 챗봇 빌더 서비스Amazon Web Services Korea
 
31기 고지웅 "구글오픈소스"
31기 고지웅 "구글오픈소스"31기 고지웅 "구글오픈소스"
31기 고지웅 "구글오픈소스"hyu_jaram
 
멀티티어 애플리케이션 개발과 배포
멀티티어 애플리케이션 개발과 배포멀티티어 애플리케이션 개발과 배포
멀티티어 애플리케이션 개발과 배포Devgear
 
센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012Daum DNA
 
[1주차] 알파 유저를 위한 AWS 스터디
[1주차] 알파 유저를 위한 AWS 스터디[1주차] 알파 유저를 위한 AWS 스터디
[1주차] 알파 유저를 위한 AWS 스터디Amazon Web Services Korea
 
『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기복연 이
 
제품소개서 (Pastel editor)
제품소개서 (Pastel editor)제품소개서 (Pastel editor)
제품소개서 (Pastel editor)Kevin Hyun
 
제품소개서( Pastel Editor)
제품소개서( Pastel Editor)제품소개서( Pastel Editor)
제품소개서( Pastel Editor)Kevin Hyun
 
AWS DevDay 실습 가이드 - Rekognition 기반 Twitter봇
AWS DevDay 실습 가이드 - Rekognition 기반 Twitter봇AWS DevDay 실습 가이드 - Rekognition 기반 Twitter봇
AWS DevDay 실습 가이드 - Rekognition 기반 Twitter봇Amazon Web Services Korea
 

Similar to Bluemix 23th meetup 실습 자료 (20)

Ibm bluemix cloud 에서 chatbot 만들기
Ibm bluemix cloud 에서 chatbot 만들기Ibm bluemix cloud 에서 chatbot 만들기
Ibm bluemix cloud 에서 chatbot 만들기
 
Sources와 Sinks를 Confluent Cloud에 원활하게 연결
Sources와 Sinks를 Confluent Cloud에 원활하게 연결Sources와 Sinks를 Confluent Cloud에 원활하게 연결
Sources와 Sinks를 Confluent Cloud에 원활하게 연결
 
C#강좌
C#강좌C#강좌
C#강좌
 
프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)
 
Project TIMAT - infrastructure as code
Project TIMAT - infrastructure as codeProject TIMAT - infrastructure as code
Project TIMAT - infrastructure as code
 
병렬처리
병렬처리병렬처리
병렬처리
 
나의 첫 윈도우/맥 애플리케이션 개발하기
나의 첫 윈도우/맥 애플리케이션 개발하기나의 첫 윈도우/맥 애플리케이션 개발하기
나의 첫 윈도우/맥 애플리케이션 개발하기
 
[애플리케이션 현대화 및 개발] 파트너 세션 | 모던 인프라스트럭쳐 아키텍쳐 - 서호석 이사, 영우디지탈
[애플리케이션 현대화 및 개발] 파트너 세션 | 모던 인프라스트럭쳐 아키텍쳐 - 서호석 이사, 영우디지탈 [애플리케이션 현대화 및 개발] 파트너 세션 | 모던 인프라스트럭쳐 아키텍쳐 - 서호석 이사, 영우디지탈
[애플리케이션 현대화 및 개발] 파트너 세션 | 모던 인프라스트럭쳐 아키텍쳐 - 서호석 이사, 영우디지탈
 
Vue guide v0.1
Vue guide v0.1Vue guide v0.1
Vue guide v0.1
 
기업용 협업 메신저 - Meet Talk 서비스 소개서
기업용 협업 메신저 - Meet Talk 서비스 소개서기업용 협업 메신저 - Meet Talk 서비스 소개서
기업용 협업 메신저 - Meet Talk 서비스 소개서
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리
 
[AWS Builders] 손쉽게 만드는 AWS기반 한국어 챗봇 빌더 서비스
[AWS Builders] 손쉽게 만드는 AWS기반 한국어 챗봇 빌더 서비스[AWS Builders] 손쉽게 만드는 AWS기반 한국어 챗봇 빌더 서비스
[AWS Builders] 손쉽게 만드는 AWS기반 한국어 챗봇 빌더 서비스
 
31기 고지웅 "구글오픈소스"
31기 고지웅 "구글오픈소스"31기 고지웅 "구글오픈소스"
31기 고지웅 "구글오픈소스"
 
멀티티어 애플리케이션 개발과 배포
멀티티어 애플리케이션 개발과 배포멀티티어 애플리케이션 개발과 배포
멀티티어 애플리케이션 개발과 배포
 
센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012
 
[1주차] 알파 유저를 위한 AWS 스터디
[1주차] 알파 유저를 위한 AWS 스터디[1주차] 알파 유저를 위한 AWS 스터디
[1주차] 알파 유저를 위한 AWS 스터디
 
『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기
 
제품소개서 (Pastel editor)
제품소개서 (Pastel editor)제품소개서 (Pastel editor)
제품소개서 (Pastel editor)
 
제품소개서( Pastel Editor)
제품소개서( Pastel Editor)제품소개서( Pastel Editor)
제품소개서( Pastel Editor)
 
AWS DevDay 실습 가이드 - Rekognition 기반 Twitter봇
AWS DevDay 실습 가이드 - Rekognition 기반 Twitter봇AWS DevDay 실습 가이드 - Rekognition 기반 Twitter봇
AWS DevDay 실습 가이드 - Rekognition 기반 Twitter봇
 

Bluemix 23th meetup 실습 자료

  • 2. Contact Us #building-with-watson #watson-korea facebook.com/groups/BluemixStud y wdc-slack-inviter.mybluemix.net http://stackoverflow.com/questio ns/tagged/watson-conversation https://developer.ibm.com/answer s/topics/watson-conversation.html Watson Conversation 관련 문서 목록 Watson Conversation 소개 문서 https://www.ibm.com/watson/developercloud/doc/conversation/index.html API 문서 https://www.ibm.com/watson/developercloud/conversation/api/v1/#introduction API 테스트 https://watson-api-explorer.mybluemix.net/apis/conversation-v1 개발 툴, SDK, Starter Kit https://www.ibm.com/watson/developercloud/developer-tools.html 튜토리얼 https://developer.ibm.com/kr/cloud/bluemix/watsonservice/2017/01/13/watsonchatbot-1- watson-conversation/ 샘플 코드 https://github.com/watson-developer-cloud/conversation-simple https://developer.ibm.com/kr
  • 3. 튜토리얼 소개 1. WCS 시작하 기 2. 메신저와 연동 하기 3. 질문 수집하 기 4. Intent 분류하 고 학습시키기 5. Entity와 Dialog 설정하 기 6. Backend 서비 스와 연동하기 사용자 인터페이스 어플리케이션 워크스페이스 Conversation Service 백엔드 시스템 Architecture
  • 4. 사전 준비 사항 Bluemix Account 생성 및 CLI 설치1 2 3 GIT 설치 Node.js 설치 https://github.com/cloudfoundry/cli#do wnloads https://console.ng.mybluemix.net https://nodejs.org/en/#d ownload https://git- scm.com/book/ko/v1/%EC%8B%9 C%EC%9E%91%ED%95%98%EA%B 8%B0-Git- %EC%84%A4%EC%B9%98
  • 5. 목차 1. WCS 시작하기 • Bluemix에서 WCS(Watson Conversation Service) 인스턴스 생성하기 • WCS 툴에 접근하기 • 내 Workspace 생성하기 • 내 Credential 정보 확인하기 • #Greeting 작성하기 2. 챗봇 노출하기 • Web Client로 노출하기 (필수) • 카카오톡으로 노출하기 (선택) • 텔레그램으로 노출하기 (선택) 3. 질문 수집하기 4. Intent 분류하고 학습시키기 5. Entity와 Dialog 설정하기 6. Backend 서비스와 연동하기
  • 6. 튜토리얼 1. WCS 시작하기 Watson Conversation Service (이하 WCS)는 Bluemix(IBM PaaS Platform)을 통해서 제공되는 클라우드 서비스 입니다. Bluemix에서 WCS 인스턴스를 생성하여 사용할 수 있습니다. 이 튜토리얼은 Bluemix의 가입 과정은 생략합니다. 1) bluemix.net 에 접속합니다. 2) Catalog에서 Conversation 서비스를 작성합니다. 왼쪽 카테고리에서 Watson을 선택하면 서비스를 더 빨리 찾을 수 있습니다. 3) 서비스를 작성하면 아래와 같은 화면이 나타납니다. 다른 메뉴로 이동했다가 다시 이 화면을 보려면 좌측 상단의 햄버거 버튼을 눌러 Service/Dashboard를 선택 하고 작성한 Conversation 인스턴스를 클릭 합니다. 4) Launch Tool 버튼을 눌러 WCS 툴로 이동합니다.
  • 7. 5) Conversation Tool의 URL을 편의를 위해 북마크에 추가합니다. 브라우저별 방법은 상이합니다. 6) Create 버튼을 눌러 Workspace를 생성합니다. Workspace는 챗봇을 빌드하기 위해 Intent 등을 트레이닝 시키기 위한 단위입니다. 우측에 Import 버튼이 있습니다. 추 후에 Workspace 단위로 Import/Export 할 수도 있음을 참조하십시오. 7) Name 필드에 자유롭게 이름을 입력하고, Language로 English를 선택하십시오.
  • 8. 8) Workspace가 생성되었습니다 ! 9) 마지막으로 앞으로 어플리케이션 연동에 필요한 Credential 정보를 확인합니다. 좌측 상단에 있는 햄 버거 메뉴를 누른 후 Deploy > Credentials 메뉴를 클릭합니다. 10) Username, Password 및 Workspace ID를 선호하는 에디터에 Copy합니다. Workspace는 어플리케이션이 사용하는 단위입니다. 하나의 Watson Conversation Service 인스턴스 안에 여러 Workspace를 생성할 수 있습니다. Workspace는 다음과 같은 타입의 artifact로 이루어집니다. • Intent : Intent는 사용자가 하려는 말의 목적을 의미합니다. 따라서 우리는 서비스에서 제공하고자 하는 요청의 모든 타입을 Intent로 정의하게 됩니다. 예를들어 회의실 예약은 하나의 Intent가 될 수 있습니다. Watson Conversation에서 Intent를 지칭할 때에는 #을 prefix로 사용합니다. Intent를 정의할 때에는 사용자가 이 Intent를 목적으로 말을 할 때 사용할 가능성이 있는 최대한 많은 예시를 제공하는 것이 좋습니다. 예를 들어 회의실 예약이라는 Intent에는 “회의실 예약해주세요.”, “지금 빈 회의실이 있나요?” 등의 예시를 제공할 수 있습니다. • Entity : Entity는 Intent와 관련된 용어 또는 목적어를 의미합니다. Entity는 Intent에 대해 구체적인 문맥(Context)을 제공하는데에 쓰입니다. 예를 들어 회의실 예약이라는 Intent를 사용하기 위해서는 회의실 이라는 Entity를 정의할 수 있습니다. 회의실 Entity에는 실제로 보유중인 회의실 이름을 담으면 됩니다. 이렇게 Entity를 정의하면 사용자가 “진달래 회의실 지금 비어 있어?” 라고 했을 때 회의실 Entity의 값이 “진달래”로 리턴되게 됩니다. • Dialog : Dialog는 대화의 흐름을 분기하는 것으로 어플리케이션이 정의된 Intent와 Entity를 인식했을 때 어떠한 응답을 할 것인지를 정의합니다. 다시 말하면 사용자가 대화를 시도했을 때 이 대화의 Intent와 Entity를 파악한 후 어떠한 응답을 할 것인지를 정의합니다.
  • 9. 11) 첫번째 Intent로 #Greeting을 작성해 보겠습니다. 상단의 메뉴에서 Intents를 클릭하여 이동합니다. 12) Create new 버튼을 클릭하여 인텐트를 작성합니다. 13) 작성 후에 Create 버튼을 클릭합니다.
  • 10. 14) Watson의 첫번째 응답 메세지를 작성해 보겠습니다. 상단 메뉴에서 Dialog로 이동합니다. 15) Create 버튼을 눌러 Dialog 작성을 시작합니다. 먼저 Welcome 메세지를 작성합니다. Trigger 조건에 conversation_start를 입력하면 나오는 드롭다운 메뉴에서 create new condition을 클릭합니다. 16) 노드의 이름에 Welcome을 입력합니다. 17) 다음과 같이 Response를 입력합니다. Good to see you ! I can help you book or manage your meeting room.
  • 11. 18) Welcome 노드 하위의 + 버튼을 눌러 새 노드를 작성합니다. 19) 아래와 같이 노드를 작성합니다. 20) 지금까지 작성한 챗봇을 테스트 해 보겠습니다. 우측 상단에 위치한 메세지 아이콘을 선택합니다. 21) 대화창을 이용하여 테스트합니다. Watson이 예측한 Intent가 맞지 않는 경우 바로 보정할 수 있습니다. 튜토리얼 1. WCS 시작하기를 모두 마치셨습니다 ! J
  • 12. 튜토리얼 2. 챗봇 노출하기 두번째 단계로, 내 챗봇을 어플리케이션을 통해 외부로 노출하는단계입니다. 2.1 웹 어플리케이션으로 노출하기 (필수) 웹 어플리케이션으로 노출하기 위해 먼저 아래 튜토리얼을 따르십시오. https://developer.ibm.com/kr/cloud/bluemix/watsonservice/2017/01/20/watsonchatbot-2-watson- conversation/ - 텔테그램 또는 카카오톡에서 Context를 저장하기 위해 Cloudant를 사용합니다. 2.1에서 어플리케이션을 블루믹스에 올릴 때 Cloudant 인스턴스가 생성되었을 것입니다. 블루믹스의 대쉬보드에서 생성된 Cloudant 서비스를 선택하고 “Service Credentials” 탭에서 url을 복사하여 어플리케이션의 .env 에 CLOUDANT_URL 값으로 복사합니다. 2.2 카카오톡으로 노출하기 (선택, 옐로아이디가 이미 있는 경우에만 !) 카카오톡으로 노출하기 위해 아래 튜토리얼을 따르십시오. 단, tutorial4를 checkout하지 않고, 2.1 에서 작 업하신 내용에 이어서 작성합니다. https://developer.ibm.com/kr/cloud/bluemix/watsonservice/2017/02/19/watsonchatbot-4-watson- conversation/ 2.3 텔레그램으로 노출하기 (선택) 1) 아래 튜토리얼의 1번 과정(1. 텔레그램에 Bot 생성하기)을 따라하여 텔레그램 bot token을 얻습니다. https://developer.ibm.com/kr/developer-%EA%B8%B0%EC%88%A0- %ED%8F%AC%EB%9F%BC/2017/03/11/node-js- %EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98- %ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8%EA%B3%BC- %EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0/ 2) 다음 명령을 사용하여 api 모듈을 설치합니다. 3) .env 파일에 다음 환경변수를 추가합니다. 4) /api 밑에 telegram 폴더를 생성하고 message.js를 생성합니다. > npm install –save node-telegram-bot # Telegram TELEGRAM_TOKEN=376884728:AAH0EcH3tPqBZ6G30tI8nEZCrchXXXXXXXX chatbot-tutorial - api - telegram - message.js
  • 13. 5) /api/telegram/message.js를 통해 텔레그램 메신저와 대화 서비스를 연동합니다. 먼저 필요한 모듈 및 값을 가져옵니다. 'use strict'; const conversation = require('../message'); const config = require('../../util/config'); const cloudant = require('../../util/db'); const TelegramBot = require('node-telegram-bot'); const db = cloudant.db; const token = process.env.TELEGRAM_TOKEN; 6) 발급받은 token으로 Telegram bot을 생성합니다. let bot = new TelegramBot({ 'token' : token });
  • 14. 7) bot.on 이벤트를 생성합니다. bot.on('message', msg => { let user_key = msg.chat.id; let content = { text : msg.text }; db.get(user_key).then(doc =>{ conversation.getConversationResponse(content, doc.context).then(data => { db.insert(Object.assign(doc, { 'context': Object.assign(data.context, { 'timezone' : "Asia/Seoul” }), })); bot.sendMessage({ 'chat_id': user_key, 'text': getOutputText(data) }); }).catch(err => { bot.sendMessage({ 'chat_id': user_key, 'text': JSON.stringify(err.message) }); }); }).catch(err => { // first communication conversation.getConversationResponse(content, {}).then(data => { db.insert({ '_id' : user_key+"", // cloudant의 doc id는 반드시 string 타입이어야 합니다. 'user_key' : user_key+"", 'context': data.context, 'type' : 'telegram’ }); bot.sendMessage({ 'chat_id': user_key, 'text': getOutputText(data) }); }).catch(err => { bot.sendMessage({ 'chat_id': user_key, 'text': JSON.stringify(err.message) }); }); }); }); bot.start() function getOutputText(data){ var output = data.output; if(output.text && Array.isArray(output.text)){ return output.text.join('n'); }else if(output.text){ return output.text; } else return ""; }
  • 15. 8) /api/Index.js 에 텔레그램 코드를 추가합니다. const telegram_bot = require('./telegram/message'); 9) 어플리케이션을 로컬에서 테스트하고 에러가 없으면 블루믹스로 push합니다. 10) 텔레그램으로 테스트합니다. > npm start > cf push
  • 16. 튜토리얼 3. 질문 수집하기 카카오톡에서 친구 추가하여 영문으로 회의실 예약을 진행해주세요. @camomile_bot
  • 17. 튜토리얼 4. Intent 분류하고 학습시키기 1) https://meetup23th.eu-gb.mybluemix.net/csv/questions 에 접속하여 엑셀을 다운로드 합니다. 2) 엑셀을 열어 두번째 Column에 아래 표를 참조하여 Intent 값을 명시합니다. 3) Comma(‘,’) separated 형식으로 저장해야 WCS 툴에 바로 업로드 할 수 있습니다 !! Intent Example Greeting Hi Reservation Would you reserve a room for me tomorrow? Positive Answer Yes 기타 기타
  • 18. 튜토리얼 5. Entity와 Dialog 설정하기 2.1 System Entity 사용하기 1) WCS 툴의 상단 메뉴에서 Entities를 선택합니다. 2) System entities를 사용하도록 설정합니다. System entities는 날짜, 숫자, 통화 등을 핸들링 할때 매우 유용합니다. 회의실 예약시에는 날짜와 시간이 필요합니다. 따라서 이 두 Entity를 Enable합니다.
  • 19. 2.2 Dialog 설정하기 이 단계에서는 사용자와의 대화에서 Watson이 어떻게 대답할 것인지를 결정하고 분기하게 됩니다. Dialog 는 Intent와 Entity를 사용하여 사용자 인풋을 분석하며 정보를 수집하고 유용한 대답을 하게 만듭니다. Dialog는 트리 형태를 가지는데 각 인텐트를 최상위 노드로 놓고 가지를 치며 적절한 대답을 할 수 있도록 유도하면 됩니다. 이 Recipe에서는 아래 그림처럼 4개의 최상위 노드를 만들 것이며 Reservation 노드가 가 장 중요한 비즈니스 역할을 할 것입니다. 1) WCS 툴의 상단 메뉴에서 Dialog를 클릭하고 Create 버튼을 클릭합니다. 노드를 생성하기 앞서 Dialog에서 사용하는 용어를 설명드리겠습니다. • 노드(Node) : 노드는 Dialog를 구성하는 요소입니다. 사용자와의 대화에서 1번의 상호작용을 의미합니 다. • 컨디션(Condition) : 노드를 구성하는 요소로 사용자의 인풋 등을 바탕으로 조건에 맞는 경우 해당 내용 을 응답합니다. • 응답(Response) : 노드를 구성하는 요소로 사용자의 인풋이 컨디션에 매치되면 활성화됩니다. 간단한 문자열을 리턴할 수도 있고 좀 더 복잡한 프로세스를 실행시킬 수도 있습니다. • 브랜치(Branch) : 사용자와의 대화를 의미한 일련의 Dialog Node를 브랜치라고 합니다. 사용자의 인풋이 기본 노드의 컨디션에 맞을 때 브랜치가 사용되게 됩니다. • 턴(Turn) : 사용자가 인풋을 하고 이에 응답하는 하나의 사이클을 턴이라고 합니다. 브랜치는 하나 이상 의 턴을 가질 수 있습니다. • 기본 노드(Base node) : 브랜치의 최 상위 노드(첫 번째 노드)를 기본 노드라고 합니다. • 자식 노드(Child node) : 기본 노드가 아닌 노드를 자식 노드라고 합니다. 자식 노드는 이전 노드가 최종 응답을 주기 위해 더 많은 사용자 인풋 또는 프로세스를 필요로 할 때 사용됩니다. • 동기 노드 또는 자매 노드(Peer node or Sibling node) : 다른 노드의 대안책이 되는 노드입니다. 모든 기본 노드는 다른 기본 노드의 동기 노드입니다. • 노드 메뉴(Node menu) : 노드를 구성하느 요소로 노드를 지우거나 기능을 추가할 수 있도록 해줍니다. 노드를 작성할 때에는 SpEL(Spring Expression Language)을 사용합니다. 자세한 사용법은 Watson Conversation에서 사용하는 Expression Language를 참조하세요.
  • 20. 2) 4개의 최상위 노드를 아래와 같이 작성합니다. 3) #Reservation 노드의 하위노드로 아래와 같이 작성합니다. Index Triggered by Response Condition Response Jump to 1 conversation_start Welcome! 2 #Greeting Hi, what can I do for you?, Hey, what can I do for you? 3 #Reservation { "context": { "dates": null, "rooms": null, "times": null }, "output": {} } 3-1 Condition 4 anything_else I’m sorry, I don’t understand. Please try again. Index Triggered by Response Condition Response Jump to 3-1 NOT $user { "context": { "user": { "id": "hjjo@kr.ibm.com", "name": "HyeonJeong Jo", "email": "hjjo@kr.ibm.com", "phone": "01031229436" } }, "output": {} } 3-2 Condition 3-2 $user { "context": { "dates": "<? @sys- date?:$dates ?>", "rooms": "<? @Room?:$rooms ?>", "times": "<? @sys-time?:$times ?>" }, "output": {} } 3-2-1 Condition 3-2-1 NOT $dates { "context": { "repeat": 1 }, "output": { "text": { "values": [ "When do you want to have a meeting?" ], "selection_policy": "sequential" } } } 3-2-1-1 @sys-date 3-2 Condition 3-2-1-2 true I’m sorry. Please tell me the dates that you want to book a room. For example, you can say in format “mm/dd/yyyy” 3-2-1-2-1 @sys-date 3-2 Condition 3-2-1-2-2 $repeat < 3 { "context": { "repeat": "<? $repeat + 1 ?>" }, "output": {} } 3-2-1-2 Condition 3-2-1-2-3 true I’m sorry. I can’t understand you. Please start again.
  • 21. 3-2-2 NOT $times { "context": { "repeat": 1 }, "output": { "text": { "values": [ "What time do you prefer?" ], "selection_policy": "sequential" } } } 3-2-2-1 @sys-time 3-2 Condition 3-2-2-2 true I’m sorry. Please tell me the times. You can tell me like this. “From 13:00 To 14:00” 3-2-2-2-1 @sys-time 3-2 Condition 3-2-2-2-2 $repeat < 3 { "context": { "repeat": "<? $repeat + 1 ?>" }, "output": {} } 3-2-2-2 Condition 3-2-2-2-3 true I’m sorry. I can’t understand you. Please start again. 3-2-3 true { "context": { "action": { "command": "check-availability", "dates": "$dates", "times": "$times" } }, "output": { "text": { "values": [ "$user.name, OK I will check the availabilty of room. $dates, $times, $rooms" ], "selection_policy": "sequential" } } } 3-2-3-1 #PositiveAnswer { "context": { "action": { "dates": "$dates", "times": "$times", "command": "confirm- reservation" } }, "output": { "text": { "values": [ "OK. <? context.room ?> at < ? context.times.get(0).value ?>, <? context.dates ?> is reserved for you." ], "selection_policy": "sequential" } } } 3-2-3-2 true { "context": { "action": null }, "output": { "text": { "values": [ "Canceled. please start again." ], "selection_policy": "sequential" } } } 3-3 true I’m sorry. You’re not a registered user in our system.