Skip to content

hjjo/chatbot-sample

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

27 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

IBM Watson을 ν™œμš©ν•œ AI λΉ„μ„œ - μΊ˜λ¦°λ”λ΄‡

Read this in other languages: English.

이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ IBM Watson Conversation을 ν™œμš©ν•˜κ³ μž ν•˜λŠ” 개발자λ₯Ό μœ„ν•΄ κ°œλ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ "였늘 λ­ν•˜μ§€?" λΌλŠ” λ‹¨μˆœν•œ μ§ˆλ¬Έμ— λŒ€ν•œ μ•„μ΄λ””μ–΄μ—μ„œ μ‹œμž‘ν•˜μ˜€μœΌλ©° IBM Watson Natural language Understanding 및 The Weather Company Dataλ₯Ό ν™œμš©ν•˜μ—¬ μ‚¬μš©μžμ˜ 졜근 μ•‘ν‹°λΉ„ν‹°, 날씨 정보 등을 기반으둜 μ‚¬μš©μžμ—κ²Œ 였늘 ν•  수 μžˆλŠ” ν™œλ™μ„ μΆ”μ²œν•©λ‹ˆλ‹€.

이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ Conversation Simple을 기반으둜 μˆ˜μ •ν•˜μ—¬ κ°œλ°œν–ˆμœΌλ©° 데λͺ¨ λ§ν¬μ—μ„œ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν˜Ήμ€ μΉ΄μΉ΄μ˜€ν†‘ ν”ŒλŸ¬μŠ€μΉœκ΅¬ μΊ˜λ¦°λ”λ΄‡μ„ μΆ”κ°€ν•˜μ—¬ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ성을 μ΄ν•΄ν•˜κ³  νŠœν† λ¦¬μ–Όμ„ 마치면 λ‹€μŒμ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • Node.js 기반의 챗봇 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발

  • IBM Watson Conversation을 ν™œμš©ν•˜μ—¬ 챗봇 λΉŒλ“œ

  • IBM Watson Natural Language Undersatanding 및 The Weather Company Data μ„œλΉ„μŠ€λ₯Ό μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ ν™œμš©

  • ꡬ글 μΊ˜λ¦°λ” API 및 tinyurl의 Url Shorten κΈ°λŠ₯을 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©

    아킀텍쳐 및 ν”Œλ‘œμš°

Flow

  1. μ‚¬μš©μžλŠ” λ‹€μ–‘ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μΊ˜λ¦°λ”λ΄‡μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. μ‹€μŠ΅ κ³Όμ •μ—μ„œλŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 μΉ΄μΉ΄μ˜€ν†‘ λ©”μ‹ μ € ν”Œλž«νΌμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  2. λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€λŠ” μ‚¬μš©μžμ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚¬μ΄μ˜ 맀개체 역할을 ν•©λ‹ˆλ‹€. μ‚¬μš©μžμ˜ λ©”μ„Έμ§€λ₯Ό μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ „λ‹¬ν•˜κ³  응닡을 λ‹€μ‹œ μ‚¬μš©μžμ—κ²Œ μ „λ‹¬ν•©λ‹ˆλ‹€.μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ Node.js λŸ°νƒ€μž„ 기반으둜 κ°œλ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν•„μš”ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ μ„œλΉ„μŠ€λ“€μ„ ν˜ΈμΆœν•˜κ±°λ‚˜ 자체적인 λ‘œμ§μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  3. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ‚¬μš©μžκ°€ λ©”μ„Έμ§€λ₯Ό 전솑할 λ•Œλ§ˆλ‹€ Watson Conversation μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•˜μ—¬ 이 λ‹€μŒμ— μˆ˜ν–‰ν•  둜직 및 응닡 λ©”μ„Έμ§€λ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.
  4. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν•„μš”μ— 따라 Natural Language Understanding μ„œλΉ„μŠ€λ₯Ό ν™œμš©ν•˜μ—¬ ν…μŠ€νŠΈλ‘œλΆ€ν„° 메타데이터λ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€. 이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ‚¬μš©μžμ—κ²Œ 였늘 ν•˜λ©΄ 쒋은 μ•‘ν‹°λΉ„ν‹°λ₯Ό μΆ”μ²œν•˜κΈ° μœ„ν•΄ μ‚¬μš©μžμ˜ κ³Όκ±° μΊ˜λ¦°λ” 데이터λ₯Ό 쑰회 및 λΆ„μ„ν•©λ‹ˆλ‹€.
  5. 날씨 데이터λ₯Ό μ–»κΈ° μœ„ν•΄ The Weather Company Dataλ₯Ό ν™œμš©ν•©λ‹ˆλ‹€. μ‚¬μš©μžμ—κ²Œ μ•‘ν‹°λΉ„ν‹°λ₯Ό μΆ”μ²œν•  λ•Œμ— λ‚ μ”¨μ˜ 영ν–₯을 λ°›λŠ” μ•‘ν‹°λΉ„ν‹°λŠ” μ œμ™Έν•˜κΈ° μœ„ν•΄ 날씨 데이터λ₯Ό ν™œμš©ν•©λ‹ˆλ‹€.
  6. μ‚¬μš©μžμ˜ λ¬Έλ§₯ 정보 및 둜그λ₯Ό ν΄λΌμš°λ˜νŠΈμ— μ €μž₯ν•©λ‹ˆλ‹€.
  7. μ‚¬μš©μžμ˜ 일정을 쑰회 및 μƒμ„±ν•˜κΈ° μœ„ν•΄ Google Calendar APIλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  8. λ•Œλ‘œλŠ” Google Calendar APIλ₯Ό μ‚¬μš©ν•  λ•Œμ— λ„ˆλ¬΄ κΈ΄ URL을 μ‚¬μš©μžμ—κ²Œ 보여쀄 ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이 경우λ₯Ό λŒ€λΉ„ν•΄ TinyURL을 μ‚¬μš©ν•˜μ—¬ 짧은 URL을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ€λ‹ˆλ‹€.

ν¬ν•¨λœ ꡬ성 μš”μ†Œ

  • IBM Watson Conversation: μžμ—°μ–΄λ₯Ό μ΄ν•΄ν•˜κ³  기계 ν•™μŠ΅(Machine learning)을 μ‚¬μš©ν•˜μ—¬ 고객과 μ†Œν†΅ν•  λ•Œ μ‚¬λžŒμ΄ ν•˜λŠ” λŒ€ν™” λ°©μ‹μœΌλ‘œ μ‘λ‹΅ν•˜λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ 수 μžˆλ„λ‘ λͺ¨λ“  κΈ°λŠ₯을 μ œκ³΅ν•΄μ£ΌλŠ” μ„œλΉ„μŠ€ μž…λ‹ˆλ‹€.

  • IBM Watson Natural Language Understanding: ν…μŠ€νŠΈλ₯Ό λΆ„μ„ν•˜μ—¬ μ»¨ν…μΈ λ‘œλΆ€ν„° 컨셉, μ—”ν‹°ν‹°, ν‚€μ›Œλ“œ, μΉ΄ν…Œκ³ λ¦¬, 긍뢀정, 감정, 관계 λ“±κ³Ό 같은 메타데이터λ₯Ό μΆ”μΆœν•˜λŠ”λ°μ— ν™œμš©ν•  수 μžˆλŠ” μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.

  • [The Weather Company Data]

μ‚¬μš©λœ 기술

  • Node.js: μžλ°”μŠ€ν¬λ¦½νŠΈ 기반의 λŸ°νƒ€μž„μœΌλ‘œ ν™•μž₯μ„± μžˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • Google Calendar API : ꡬ글 μΊ˜λ¦°λ”μ™€ μ—°λ™ν•˜κΈ° μœ„ν•œ APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

  • tinyurl : κ°„νŽΈν•œ URL Shorten APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

μ‹€μŠ΅

  1. 사전 μ€€λΉ„ 사항을 λ¨Όμ € μ™„λ£Œν•˜μ‹­μ‹œμ˜€.
  2. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ IBM Cloud에 λ°”λ‘œ λ°°ν¬ν•˜κ±°λ‚˜ λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€.
  3. Conversation의 μ›Œν¬μŠ€νŽ˜μ΄μŠ€λ₯Ό μ„€μ •ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— ν•„μš”ν•œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μˆ˜μ •ν•©λ‹ˆλ‹€.
  4. Watson Conversation Tool μ‹€μŠ΅μ„ 톡해 챗봇을 μ™„μ„±ν•©λ‹ˆλ‹€.
  5. 챗봇을 μΉ΄μΉ΄μ˜€ν†‘κ³Ό μ—°λ™ν•©λ‹ˆλ‹€.

사전 μ€€λΉ„ 사항

  • IBM Cloud의 계정을 μƒμ„±ν•©λ‹ˆλ‹€.
    • IBM Cloudμ—μ„œ μƒˆλ‘œμš΄ 계정을 μƒμ„±ν•˜κ±°λ‚˜ κ°–κ³  계신 계정을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. 계정에 256MB의 앱을 μ‹€ν–‰ν•˜κ³  5개 μ΄μƒμ˜ μ„œλΉ„μŠ€λ₯Ό 생성할 수 μžˆλŠ” κ°€μš© 곡간이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • (선택) μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•˜λ €λ©΄ Node.js λŸ°νƒ€μž„ 및 npm νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.:
  • (선택) λ‘œμ»¬μ—μ„œ λ³€κ²½ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ IBM Cloud에 λ°°ν¬ν•˜λ €λ©΄ CLI(Command Line Interface)λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.
  • 이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ Google Calendar APIλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
    • Google API μ½˜μ†”μ—μ„œ ν”„λ‘œμ νŠΈ 생성
      • 계속 λ²„νŠΌμ„ λˆ„λ₯Έ ν›„ μ‚¬μš©μž 인증 μ •λ³΄λ‘œ 이동 λ²„νŠΌ ν΄λ¦­ν•˜λ©΄ μ‚¬μš©μž 인증 μ •λ³΄νŽ˜μ΄μ§€κ°€ μ˜€ν”ˆλ©λ‹ˆλ‹€. 이 ν™”λ©΄μ—μ„œ μ·¨μ†Œ λ²„νŠΌμ„ λˆ„λ¦…λ‹ˆλ‹€.
      • ν™”λ©΄ μƒλ‹¨μ˜ OAuth λ™μ˜ 화면탭을 ν΄λ¦­ν•©λ‹ˆλ‹€. μ‚¬μš©μžμ—κ²Œ ν‘œμ‹œλ˜λŠ” μ œν’ˆ 이름을 μž…λ ₯ν•˜κ³  μ €μž₯ν•©λ‹ˆλ‹€.
      • μ‚¬μš©μž 인증 μ •λ³΄νƒ­μ—μ„œ μ‚¬μš©μž 인증 정보 λ§Œλ“€κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ OAuth ν΄λΌμ΄μ–ΈνŠΈ IDλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
      • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μœ ν˜•μœΌλ‘œ 기타λ₯Ό μ„ νƒν•˜κ³  이름에 Tutorial을 μž…λ ₯ν•©λ‹ˆλ‹€. 생성 λ²„νŠΌμ„ λˆ„λ¦…λ‹ˆλ‹€.
      • νŒμ—…μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈ ID와 Passwordλ₯Ό λ³΅μ‚¬ν•˜μ—¬ κΈ°λ‘ν•΄λ‘‘λ‹ˆλ‹€.
      • νŒμ—…μ„ μ’…λ£Œν•˜κ³  JSON λ‹€μš΄λ‘œλ“œ μ•„μ΄μ½˜μ„ ν΄λ¦­ν•˜μ—¬ JSON을 λ‹€μš΄λ‘œλ“œ ν•©λ‹ˆλ‹€. 이 νŒŒμΌμ„ μ†ŒμŠ€μ½”λ“œμ˜ 루트 폴더에 client_secret.json으둜 μ €μž₯ν•©λ‹ˆλ‹€.
  • μΉ΄μΉ΄μ˜€ν†‘κ³Ό 챗봇을 μ—°λ™ν•˜λ €λ©΄ μΉ΄μΉ΄μ˜€ν†‘ ν”ŒλŸ¬μŠ€μΉœκ΅¬λ₯Ό μƒμ„±ν•˜μ‹­μ‹œμ˜€.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ†ŒμŠ€μ½”λ“œλ₯Ό λ‹€μš΄λ‘œλ“œ ν•©λ‹ˆλ‹€.
    • μ†ŒμŠ€μ½”λ“œ λ ˆνŒŒμ§€ν† λ¦¬μ—μ„œ Clone or download λ²„νŠΌμ„ 톡해 λ‹€μš΄λ‘œλ“œ ν•˜μ‹­μ‹œμ˜€. git μ‚¬μš©μžμ˜ 경우 git clientλ₯Ό 톡해 cloneν•˜κ±°λ‚˜ folkν•©λ‹ˆλ‹€.

1. IBM Cloud에 λ°°ν¬ν•˜κΈ°

이 링크λ₯Ό ν΄λ¦­ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ IBM Cloud에 λ°°ν¬ν•©λ‹ˆλ‹€.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포가 μ‹œμž‘λ˜λ©΄ 3. Conversation의 Workspace 및 IBM Cloud ν™˜κ²½ λ³€μˆ˜ 섀정을 μ‹œμž‘ν•˜μ‹­μ‹œμ˜€.

이 링크λ₯Ό ν†΅ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포에 어렀움이 μžˆλŠ” 경우 2.λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•˜κΈ°μ˜ λ°©λ²•μœΌλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ°°ν¬ν•©λ‹ˆλ‹€.

2. λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•˜κΈ°

(이 λ‹¨κ³„λŠ” 이번 μ‹€μŠ΅ μ„Έμ…˜μ—μ„œλŠ” μ§„ν–‰ν•˜μ§€ μ•ŠμœΌμ…”λ„ λ©λ‹ˆλ‹€. 1λ²ˆμ„ 톡해 배포λ₯Ό μ™„λ£Œν•˜μ‹  경우 3번으둜 κ°€μ‹­μ‹œμ˜€.)

이 앱을 베이슀둜 ν•˜μ—¬ μˆ˜μ • 및 μƒˆλ‘œμš΄ 앱을 κ°œλ°œν•˜κ³ μž ν•˜λŠ” 경우 λ‘œμ»¬μ— μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μˆ˜μ •ν•œ μ•± 버전을 λ‹€μ‹œ IBM Cloud둜 배포할 수 μžˆμŠ΅λ‹ˆλ‹€.

2.1 ν•„μš”ν•œ μ„œλΉ„μŠ€ 생성

IBM Cloud μΉ΄νƒˆλ‘œκ·Έ λ˜λŠ” CLI λͺ…령을 톡해 λ‹€μŒμ˜ μ„œλΉ„μŠ€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μ„œλΉ„μŠ€ 이름은 manifest.yml에 λͺ…μ‹œλ˜μ–΄ μžˆκΈ°μ— λ°˜λ“œμ‹œ 같은 μ΄λ¦„μœΌλ‘œ 생성해야 배포가 κ°€λŠ₯ν•©λ‹ˆλ‹€.

μ„œλΉ„μŠ€ μΉ΄νƒˆλ‘œκ·Έμƒ 이름 μ„œλΉ„μŠ€ νƒ€μž…λͺ… ν”Œλžœ μ„œλΉ„μŠ€ 이름
Conversation conversation free conversation-service
Natural Language Understanding natural-language-understanding free natural-language-understanding-service
Cloudant NoSQL DB cloudantNoSQLDB Lite cloudant-service

μΉ΄νƒˆλ‘œκ·Έ UIμ—μ„œ μ„œλΉ„μŠ€ μƒμ„±ν•˜λŠ” 방법

IBM Cloud μΉ΄νƒˆλ‘œκ·Έμ—μ„œ μ„œλΉ„μŠ€ μΉ΄νƒˆλ‘œκ·Έμƒ μ΄λ¦„μœΌλ‘œ μ„œλΉ„μŠ€λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€. μ„œλΉ„μŠ€ 이름은 λ°˜λ“œμ‹œ ν‘œλ₯Ό μ°Έμ‘°ν•˜μ—¬ μž…λ ₯ν•˜μ‹­μ‹œμ˜€.

CLI λͺ…λ ΉμœΌλ‘œ μ„œλΉ„μŠ€ μƒμ„±ν•˜λŠ” 방법

(μ€‘μš”) μ»€λ§¨λ“œ 창을 μ—΄μ–΄ μ†ŒμŠ€μ½”λ“œμ˜ ν”„λ‘œμ νŠΈ 루트 경둜둜 μ΄λ™ν•©λ‹ˆλ‹€.

CLIλ₯Ό 톡해 μ„œλΉ„μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 경우 λ¨Όμ € λ‹€μŒ λͺ…령을 μ°Έμ‘°ν•˜μ—¬ 둜그인 ν•˜μ‹­μ‹œμ˜€. μžμ„Έν•œ λ‚΄μš©μ€ 링크λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

bx login [-a api_endpoint]

api_endpoint의 url은 λ¦¬μ „λ³„λ‘œ λ‹€λ¦…λ‹ˆλ‹€.

US South : api.ng.bluemix.net
UK : api.eu-gb.bluemix.net
Sydney : api.au-syd.bluemix.net

λ§Œμ•½ US Southλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ λ‹€μŒ λͺ…령을 μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

bx login -a api.ng.bluemix.net

λ‹€μŒ λͺ…령을 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 배포할 쑰직과 슀페이슀λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. ORGμ—λŠ” 쑰직 이름을, SPACEμ—λŠ” 슀페이슀 이름을 μž…λ ₯ν•˜μ‹­μ‹œμ˜€. μžμ„Έν•œ λ‚΄μš©μ€ 링크λ₯Ό ν™•μΈν•˜μ‹­μ‹œμ˜€.

bx target --cf

이제 μ„œλΉ„μŠ€μ™€ μ„œλΉ„μŠ€ ν‚€λ₯Ό 각각 μƒμ„±ν•©λ‹ˆλ‹€.

/scripts/install.sh 슀크립트λ₯Ό ν™œμš©ν•˜μ—¬ ν•œλ²ˆμ— μƒμ„±ν•˜κ±°λ‚˜

sh scripts/install.sh

λ˜λŠ” μ•„λž˜ λͺ…령을 ν™œμš©ν•˜μ—¬ μˆ˜λ™μœΌλ‘œ μƒμ„±ν•˜μ‹­μ‹œμ˜€.

bx service create <μ„œλΉ„μŠ€ νƒ€μž…λͺ…> <ν”Œλžœ> <μ„œλΉ„μŠ€ 이름> bx service key-create <μ„œλΉ„μŠ€ 이름> <ν‚€ 이름>

2.2 λ‘œμ»¬μ—μ„œ μ‹€ν–‰

(이 λ‹¨κ³„λŠ” 이번 μ‹€μŠ΅ μ„Έμ…˜μ—μ„œλŠ” μ§„ν–‰ν•˜μ§€ μ•ŠμœΌμ…”λ„ λ©λ‹ˆλ‹€. 2.1λ²ˆμ„ μ™„λ£Œν•˜μ‹  경우 2.3번으둜 κ°€μ‹­μ‹œμ˜€.)

λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•˜λ €λ©΄ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ…‹νŒ…ν•΄μ•Ό ν•©λ‹ˆλ‹€. 예제 νŒŒμΌλ‘œλΆ€ν„° ν™˜κ²½ λ³€μˆ˜λ₯Ό μ €μž₯ν•  νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.

cp .env.example .env

.env 파일의 ν™˜κ²½λ³€μˆ˜λ₯Ό 각 μ„œλΉ„μŠ€μ˜ Credential κ°’μœΌλ‘œ μ±„μ›Œμ€λ‹ˆλ‹€.

앱을 μ„€μΉ˜ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€.

npm install npm start

2.3 IBM Cloud에 배포

<project_root>/manifest.ymlμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이름을 λ³€κ²½ν•©λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이름은 IBM Cloud λ‚΄μ—μ„œ Uniqueν•œ 값이어야 ν•©λ‹ˆλ‹€. μ•„λž˜μ™€ 같이 λ‚ μ§œμ™€ μ΄λ‹ˆμ…œμ„ 더해 κ²ΉμΉ˜μ§€ μ•Šλ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.

applications:
- name: connectbot-2017-1109-hjjo

λ‹€μŒ λͺ…λ ΉμœΌλ‘œ 앱을 IBM Cloud에 λ°°ν¬ν•©λ‹ˆλ‹€.

bx app push

3. Conversation의 Workspace 및 IBM Cloud ν™˜κ²½ λ³€μˆ˜ μ„€μ •

  1. IBM Cloud의 λŒ€μ‹œλ³΄λ“œμ— μ ‘μ†ν•©λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ°°ν¬μ‹œ μ„€μ •ν–ˆλ˜ Region, Organization 및 Spaceλ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ„ νƒν•©λ‹ˆλ‹€.

  2. μ„œλΉ„μŠ€ λͺ©λ‘μ—μ„œ conversation-serviceλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

  3. Launch Tool λ²„νŠΌμ„ 눌러 Conversation Tool을 μ˜€ν”ˆν•©λ‹ˆλ‹€. 이 링크λ₯Ό κΈ°μ–΅ν•΄ λ‘μ‹­μ‹œμ˜€.

  4. Conversation Toolμ—μ„œ Import a workspace μ•„μ΄μ½˜μ„ μ„ νƒν•˜μ‹­μ‹œμ˜€. μ•„λž˜μ™€ 같이 μƒκ²ΌμŠ΅λ‹ˆλ‹€.

    Icon image to import a workspace

  5. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ†ŒμŠ€μ½”λ“œμ˜ /training/calendar_bot_workspace.json νŒŒμΌμ„ μ„ νƒν•©λ‹ˆλ‹€.

    <project_root>/training/calendar_bot_workspace.json

  6. Everything (Intents, Entities, and Dialog)λ₯Ό μ„ νƒν•˜κ³  Import λ²„νŠΌμ„ 눌러 μ›Œν¬μŠ€νŽ˜μ΄μŠ€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

  7. 쒌츑의 Workspaces μ•„μ΄μ½˜μ„ 눌러 μ›Œν¬μŠ€νŽ˜μ΄μŠ€ λͺ©λ‘μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

    Workspaces icon

  8. μƒμ„±λœ μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ˜ μΉ΄λ“œ 우츑 상단에 μœ„μΉ˜ν•œ μ•„μ΄μ½˜μ„ 눌러 View Detailsλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

    Workspace detail

  9. Workspace IDλ₯Ό λ³΅μ‚¬ν•˜μ—¬ 기둝해 λ‘‘λ‹ˆλ‹€.

  10. IBM Cloud의 λŒ€μ‹œλ³΄λ“œμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„ νƒν•©λ‹ˆλ‹€. ROUTEκ°€ μ•„λ‹Œ NAME 뢀뢄을 ν΄λ¦­ν•˜μ‹­μ‹œμ˜€.

  11. 쒌츑 λ©”λ‰΄μ—μ„œ Runtime을 μ„ νƒν•©λ‹ˆλ‹€.

  12. Environment Variables 탭을 μ„ νƒν•˜κ³  μŠ€ν¬λ‘€μ„ μ•„λž˜λ‘œ λ‚΄λ¦½λ‹ˆλ‹€. User Defind라고 λͺ…μ‹œλœ ν™˜κ²½λ³€μˆ˜ ν•­λͺ©λ“€μ΄ λ³΄μž…λ‹ˆλ‹€. 이 ν•­λͺ©λ“€ μ€‘μ—μ„œ WORKSPACE_ID의 VALUE 값을 μœ„μ—μ„œ 볡사해둔 κ°’μœΌλ‘œ λ³€κ²½ν•©λ‹ˆλ‹€.

3.2 ꡬ글 μΊ˜λ¦°λ” API μ„€μ •

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λŒ€μ‹œλ³΄λ“œμ˜ Runtime νŽ˜μ΄μ§€μ— μžˆλŠ” Environment Variables νƒ­μ—μ„œ 계속 μ§„ν–‰ν•˜μ‹­μ‹œμ˜€.

  1. GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET의 VALUE 값을 사전 μ€€λΉ„μ‚¬ν•­μ—μ„œ 기둝해둔 κ°’μœΌλ‘œ λ³€κ²½ν•©λ‹ˆλ‹€.
  2. μ €μž₯ λ²„νŠΌμ„ 눌러 λ³€κ²½ν•œ ν™˜κ²½λ³€μˆ˜ 값을 μ €μž₯ν•©λ‹ˆλ‹€.

3.3 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μž¬μ‹œμž‘

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λŒ€μ‹œλ³΄λ“œμ—μ„œ λ³€κ²½ν•œ ν™˜κ²½ λ³€μˆ˜λ₯Ό λ°˜μ˜ν•˜κΈ° μœ„ν•΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž¬μ‹œμž‘ ν•˜μ‹­μ‹œμ˜€. μƒλ‹¨μ˜ μž¬μ‹œμž‘ μ•„μ΄μ½˜μ„ 눌러 μž¬μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Restart icon

3.4 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

Routes λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ URL을 ν™•μΈν•˜κ³  λΈŒλΌμš°μ €μ—μ„œ μ ‘μ†ν•©λ‹ˆλ‹€.

4. Watson Conversation Tool μ‹€μŠ΅

μœ„ λ‹¨κ³„μ—μ„œ Importν•œ /training/calendar_bot_workspace.json νŒŒμΌμ€ 이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ£Όμš” κΈ°λŠ₯쀑 ν•˜λ‚˜μΈ schedule μΆ”κ°€ κΈ°λŠ₯을 직접 κ°œλ°œν•˜λ„λ‘ μ˜λ„λœ μ›Œν¬μŠ€νŽ˜μ΄μŠ€ μž…λ‹ˆλ‹€. Importν•œ μ›Œν¬μŠ€νŽ˜μ΄μŠ€λ₯Ό μ‹œμž‘μ μœΌλ‘œ ν•˜μ—¬ μΊ˜λ¦°λ” 봇을 μ™„μ„±ν•΄ λ΄…λ‹ˆλ‹€.

이 λ‹¨κ³„λŠ” Conversation Toolμ—μ„œ μ§„ν–‰ν•©λ‹ˆλ‹€. Conversation Tool을 λ‹€μ‹œ μ˜€ν”ˆν•˜λ €λ©΄ λ‹€μŒ 단계λ₯Ό λ”°λ₯΄μ‹­μ‹œμ˜€. 챗봇 ν”„λ‘œμ νŠΈμ—μ„œ Conversation Tool은 자주 μ‚¬μš©ν•˜κ²Œ λ˜λ―€λ‘œ 링크λ₯Ό 즐겨찾기 ν•˜μ‹­μ‹œμ˜€.

  1. IBM Cloud의 λŒ€μ‹œλ³΄λ“œμ— μ ‘μ†ν•©λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ°°ν¬μ‹œ μ„€μ •ν–ˆλ˜ Region, Organization 및 Spaceλ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ„ νƒν•©λ‹ˆλ‹€.
  2. μ„œλΉ„μŠ€ λͺ©λ‘μ—μ„œ conversation-serviceλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
  3. Launch Tool λ²„νŠΌμ„ 눌러 Conversation Tool을 μ˜€ν”ˆν•©λ‹ˆλ‹€.

Conversation Toolμ—μ„œ μΊ˜λ¦°λ”λ΄‡ μ›Œν¬μŠ€νŽ˜μ΄μŠ€λ₯Ό μ˜€ν”ˆν•©λ‹ˆλ‹€.

4.1 Intent μΆ”κ°€

μΊ˜λ¦°λ”λ΄‡ μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ—μ„œ Intents 탭을 μ„ νƒν•©λ‹ˆλ‹€. Create new λ²„νŠΌμœΌλ‘œ μƒˆλ‘œμš΄ μΈν…νŠΈλ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. csvνŒŒμΌλ‘œλΆ€ν„° Importν•˜κ±°λ‚˜ Exportν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μΊ˜λ¦°λ”λ΄‡μ— schedule_add μΈν…νŠΈλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

  1. μ§κ΄€μ μœΌλ‘œ 일정 μΆ”κ°€ν•΄μ€˜λΌκ³  말할 μˆ˜λ„ 있고 κ°„μ ‘μ μœΌλ‘œ κΈˆμš”μΌμ— μ˜ν™” μ˜ˆλ§€ν•΄λ†¨μ–΄ λ‚¨μΉœμ΄λž‘ 볼꺼야라고 말할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  2. μΊ˜λ¦°λ” 봇은 μ§κ΄€μ μ΄λ˜ κ°„μ ‘μ μ΄λ˜ κ·Έ 말의 λͺ©μ μ΄ μŠ€μΌ€μ€„μ˜ μΆ”κ°€ λ‚΄μ§€ μŠ€μΌ€μ€„μ˜ 기얡이라면 ν•˜λ‚˜μ˜ Intent둜 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ°½λ¬Έ μ’€ λ‹«μ•„μ€˜μ™€ μ’€ μΆ₯μ§€ μ•Šμ•„?λŠ” μ „ν˜€ λ‹€λ₯Έ μ˜λ―Έμ΄μ§€λ§Œ 상황에 λ”°λΌμ„œ 같은 Intentκ°€ 될 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  3. μΈν…νŠΈ μ΄λ¦„μœΌλ‘œ schedule_addλ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€. μ΅œμ†Œ 20개 μ΄μƒμ˜ μ‚¬μš©μž λ©”μ„Έμ§€ μ˜ˆμ‹œλ₯Ό μž…λ ₯ν•˜μ‹­μ‹œμ˜€.
  4. μ˜ˆμ‹œ : * 내일 μ—…μ²΄λž‘ λ―ΈνŒ… μžˆμ–΄ * 일정 μΆ”κ°€ν•΄μ€˜ * μŠ€μΌ€μ€„ μΆ”κ°€ ν•΄μ€˜ * ν† μš”μΌμ— νšŒμ‚¬ μ‚¬λžŒλ“€μ΄λž‘ λ“±μ‚°κ°€ γ… .γ…  * κΈˆμš”μΌ 점심은 μƒλ¬΄λ‹˜μ΄λž‘ 먹기둜 ν–ˆμ–΄ * 내일은 μ—„λ§ˆ, μ•„λΉ λž‘ μ§‘μ—μ„œ 저녁 먹을꺼야 * λ‹€μŒ μ£Ό μˆ˜μš”μΌ μΉœκ΅¬λž‘ 약속 μžˆλŠ”λ° μΆ”κ°€μ’€ * 였늘 저녁에 μ—„λ§ˆλž‘ μ˜ν™” 보기둜 ν–ˆμ–΄ * λ‹€μŒμ£Ό ν† μš”μΌμ— λ™μ°½νšŒκ°€ μž‘ν˜”λ„€
  5. μ‚¬μš©μžμ˜ λ©”μ„Έμ§€λŠ” μ˜€νƒ€κ°€ μžˆμ„ μˆ˜λ„ 있고 띄어 μ“°κΈ°, λ§žμΆ€λ²• 등이 μ •ν™•ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 것듀이 λͺ¨λ‘ ν•™μŠ΅λ˜μ–΄μ•Ό 더 μ •ν™•ν•œ 챗봇이 λ§Œλ“€μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

4.2 Entity μΆ”κ°€

μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ—μ„œ Entities 탭을 μ„ νƒν•©λ‹ˆλ‹€. Create new λ²„νŠΌμœΌλ‘œ μƒˆλ‘œμš΄ μ—”ν‹°ν‹°λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€μΌ€μ€„μ„ μΆ”κ°€ν•  λ•Œμ— μ‚¬μš©ν•˜λŠ” Entity μ€‘μ—μ„œ μž₯μ†Œμ— ν•΄λ‹Ήν•˜λŠ” place μ—”ν‹°ν‹°λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

  1. μ—”ν‹°ν‹° μ΄λ¦„μœΌλ‘œ placeλ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.
  2. 두 κ°€μ§€ λ°©μ‹μœΌλ‘œ μ—”ν‹°ν‹°λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • Value Type으둜 Synonimsλ₯Ό μ„ νƒν•˜λ©΄ ν•΄λ‹Ή μ—”ν‹°ν‹°λ₯Ό κ°€λ¦¬ν‚€λŠ” 단어듀을 μž…λ ₯ν•¨μœΌλ‘œμ¨ μ—”ν‹°ν‹°λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 방식은 λ§Žμ€ Value κ°’κ³Ό Synonim 값을 μΆ”κ°€ ν•΄μ•Ό μ •ν™•λ„μžˆλŠ” μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•  수 μžˆμ§€λ§Œ λ¨Έμ‹ λŸ¬λ‹ κΈ°λ°˜μ΄μ–΄μ„œ 후에 잘λͺ» μΆ”μΆœλ˜κ±°λ‚˜ μΆ”μΆœλ˜μ§€ μ•Šμ„ λ•Œμ— μž¬νŠΈλ ˆμ΄λ‹μ„ ν†΅ν•œ ꡐ정 및 μΆ”κ°€κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • Value Type으둜 Patternsλ₯Ό μ„ νƒν•˜λ©΄ μ •κ·œμ‹μ„ μ‚¬μš©ν•˜μ—¬ μ—”ν‹°ν‹°λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 방식은 적은 λ…Έλ ₯으둜 비ꡐ적 λ§Žμ€ μ—”ν‹°ν‹°λ₯Ό μΆ”μΆœν•  수 μžˆμ§€λ§Œ λ£° 기반의 μΆ”μΆœ 방식이기에 νŠΈλ ˆμ΄λ‹ 및 ꡐ정은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
  3. μš°λ¦¬κ°€ μž₯μ†Œλ₯Ό μ§€μΉ­ν•  λ•Œμ— 자주 μ‚¬μš©ν•˜λŠ” νŒ¨ν„΄μ€ ~μ—μ„œ μž…λ‹ˆλ‹€. 이 νŒ¨ν„΄μ„ μ •κ·œμ‹μœΌλ‘œ μΆ”κ°€ν•©λ‹ˆλ‹€.
    • 예) 이번 μ†‘λ…„νšŒλŠ” κ°•λ‚¨μ—μ„œ ν•œλŒ€
    • Value에 μž₯μ†Œ_νŒ¨ν„΄μ„ μž…λ ₯ν•˜κ³  Type으둜 Patternsλ₯Ό 선택, Add patternsλž€μ—
      [κ°€-힣]+μ—μ„œ
      λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.
  4. ν•˜μ§€λ§Œ ~μ—μ„œ ν‘œν˜„μ„ 항상 μ‚¬μš©ν•˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. 자주 μ‚¬μš©λ  μž₯μ†Œλ₯Ό Synonims λ°©μ‹μœΌλ‘œ μΆ”κ°€ν•΄ μ€λ‹ˆλ‹€.
    • 예) 고등학ꡐ 동창 μ†‘λ…„νšŒ 강남
    • Value에 ν•«ν”Œλ ˆμ΄μŠ€λ₯Ό μž…λ ₯ν•˜κ³  Type으둜 Synonimsλ₯Ό 선택, Add synonimsλž€μ— ν™λŒ€, ν•©μ •, 강남, μ΄νƒœμ›, λͺ…동 등을 μž…λ ₯ν•©λ‹ˆλ‹€.
    • Value에 자주 κ°€λŠ” 곳을 μž…λ ₯ν•˜κ³  Type으둜 Synonimsλ₯Ό 선택, Add synonimsλž€μ— μ§‘, νšŒμ‚¬λ“±μ„ μž…λ ₯ν•©λ‹ˆλ‹€.
  5. μ˜€νƒ€, μ€„μž„λ§λ‘œ μΈν•œ 단어도 μΆ”κ°€ν•˜λ©΄ 정확도λ₯Ό 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

4.3 Dialog μž‘μ„±

μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ—μ„œ Dialog 탭을 μ„ νƒν•©λ‹ˆλ‹€. Add node λ²„νŠΌμœΌλ‘œ μƒˆλ‘œμš΄ λ…Έλ“œλ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ΄μ–Όλ‘œκ·ΈλŠ” μ‚¬μš©μžκ°€ λ©”μ„Έμ§€λ₯Ό λ³΄λƒˆμ„ λ•Œ, μ‚¬μš©μžμ˜ λ©”μ„Έμ§€λ‘œλΆ€ν„° μΈν…νŠΈ 및 μ—”ν‹°ν‹°λ₯Ό μΆ”μΆœν•œ 뒀에 μ±—λ΄‡μ˜ 응닡을 μ„€κ³„ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 이 과정은 λ£° 기반으둜 이루어지며 κ΅¬μ„±λœ λ…Έλ“œλ₯Ό μœ„μ—μ„œ μ•„λž˜λ‘œ, μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ νƒμƒ‰ν•˜λ©΄μ„œ 쑰건(If bot recognizes)이 맞으면 ν•΄λ‹Ή λ…Έλ“œλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

shedule_add μΈν…νŠΈμ— λŒ€ν•΄ μ‘λ‹΅ν•˜λŠ” λ‹€μ΄μ–Όλ‘œκ·Έλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

  1. Add node λ²„νŠΌμœΌλ‘œ μƒˆλ‘œμš΄ λ…Έλ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

  2. If bot recognizes에 #schedule_addλ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€. (#은 μΈν…νŠΈλ₯Ό κ°€λ¦¬ν‚€λŠ” prefixμž…λ‹ˆλ‹€.)

  3. μŠ€μΌ€μ€„μ„ μΆ”κ°€ν•  λ•Œμ— ν•„μš”ν•œ 값듀을 μ‚¬μš©μžλ‘œλΆ€ν„° μ–»κΈ° μœ„ν•΄ Slot을 ν™œμ„±ν™” ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. Slot을 μ‚¬μš©ν•˜λ©΄ ν•„μš”ν•œ 값을 λͺ¨λ‘ μ–»μ—ˆμ„ λ•Œμ— ν•΄λ‹Ή λ…Έλ“œμ˜ Responseλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

    • λ…Έλ“œ ꡬ성 ν™”λ©΄μ˜ 우츑 상단에 μžˆλŠ” Customize λ²„νŠΌμ„ 눌러 Slot을 ν™œμ„±ν™” ν•©λ‹ˆλ‹€. Prompt for everything μ²΄ν¬λ°•μŠ€λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

      Customize Button

    • 응닡을 λ‹€μ–‘ν•˜κ²Œ μ„€μ •ν•˜λ €λ©΄ Multiple responsesλ₯Ό ν™œμ„±ν™” ν•˜μ‹­μ‹œμ˜€.

    • Apply λ²„νŠΌμ„ λˆ„λ¦…λ‹ˆλ‹€.

  4. Then check for에 Slot을 μ„€μ •ν•©λ‹ˆλ‹€.

    • 이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” μŠ€μΌ€μ€„μ„ μΆ”κ°€ν•  λ•Œμ— Contextλ‘œλΆ€ν„° λ‹€μŒμ˜ 값을 μ €μž₯ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.

      ν•„λ“œ 이름 ν•„μˆ˜ μ—¬λΆ€
      $startDate required
      $endDate optional
      $startTime optional
      $endTime optional
      $people required
      $place optional
      $action required
    • μŠ¬λ‘―μ„ λ‹€μŒκ³Ό 같이 μ„€μ •ν•˜μ‹­μ‹œμ˜€. If not present, ask ν•„λ“œλ₯Ό μž…λ ₯ν•˜λ©΄ ν•„μˆ˜ ν•­λͺ©, μž…λ ₯ν•˜μ§€ μ•ŠμœΌλ©΄ 선택 ν•­λͺ©μœΌλ‘œ κ΅¬λΆ„λ©λ‹ˆλ‹€.

      Check for Save it as If not present, ask
      @sys-date $startDate μ–Έμ œ ν•΄λ‹Ή 일정이 μžˆμœΌμ„Έμš”?
      @sys-date $endDate
      @sys-time $startTime
      @sys-time $endTime
      @people_pattern.literal $people μ–΄λ–€ λΆ„κ³Ό λ§Œλ‚˜μ„Έμš”?
      @place.literal $place
      @action.literal $action 뭘 ν•˜μ‹€ μ˜ˆμ •μ΄μ„Έμš”?
  5. 일뢀 μŠ¬λ‘―μ— λŒ€ν•΄μ„œ μ‚¬μš©μžμ—κ²Œ 값을 λ¬Όμ—ˆμ„ λ•Œ μ—”ν‹°ν‹°κ°€ μΆ”μΆœλ˜μ§€ μ•Šλ”λΌλ„ μ‚¬μš©μž λ©”μ„Έμ§€ 전체λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μ €μž₯ν•˜λ„λ‘ μ„€μ •ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€.

    • ν•΄λ‹Ή κΈ°λŠ₯을 μ„€μ •ν•  μŠ¬λ‘―μ€ peopleκ³Ό action μž…λ‹ˆλ‹€. 두 μŠ¬λ‘―μ— λŒ€ν•΄μ„œ λ‹€μŒμ˜ 과정을 λ°˜λ³΅ν•˜μ‹­μ‹œμ˜€.
      • μ„€μ •ν•˜λ €λŠ” 슬둯 μš°μΈ‘μ— μœ„μΉ˜ν•œ μ„€μ • λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€.

        icon-menu

      • νŒμ—… 우츑 상단에 μœ„μΉ˜ν•œ 메뉴 μ•„μ΄μ½˜μ„ μ„ νƒν•˜μ—¬ Enable conditional responsesλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

        icon-menu

      • μŠ€ν¬λ‘€μ„ λ‚΄λ € μ—”ν‹°ν‹°κ°€ μΆ”μΆœλœ κ²½μš°μ™€ μΆ”μΆœλ˜μ§€ μ•Šμ€ κ²½μš°μ— λ‚˜λˆ„μ–΄ 응닡을 μ„€μ •ν•©λ‹ˆλ‹€.

        • Found의 If bot reconizes λž€μ— trueλ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€. Respond with λž€μ— \<? $people ?\> λ§Œλ‚˜μ‹œλŠ”κ΅°μš”.λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€. (aciton μŠ¬λ‘―μ„ μ„€μ •ν•  λ•Œμ—λŠ” \<? $action ?\> ν•  μ˜ˆμ •μ΄μ‹œκ΅°μš”. λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.)
        • Not found의 If bot recognizes λž€μ— trueλ₯Ό μž…λ ₯ν•˜κ³  μš°μΈ‘μ— μœ„μΉ˜ν•œ μ„€μ • μ•„μ΄μ½˜μ„ ν΄λ¦­ν•©λ‹ˆλ‹€. Then respond with:의 μš°μΈ‘μ— μœ„μΉ˜ν•œ 메뉴 λ²„νŠΌμ„ ν΄λ¦­ν•˜κ³  Open JSON editorλ₯Ό μ„ νƒν•©λ‹ˆλ‹€. λ‹€μŒμ˜ JSON을 μž…λ ₯ν•˜μ—¬ μ‚¬μš©μžμ˜ λ©”μ„Έμ§€ 전체λ₯Ό μ»¨ν…μŠ€νŠΈμ— μ €μž₯ν•©λ‹ˆλ‹€.
          • people
                {
                    "conditions": "true",
                    "output": {
                        "text": {
                        "values": [
                            "<? input.text ?> λ§Œλ‚˜μ‹œλŠ” κ΅°μš”."
                        ],
                        "selection_policy": "sequential"
                        }
                    },
                    "context": {
                        "people": "<? input.text ?>"
                    }
                }
            
          • action
                {
                    "conditions": "true",
                    "output": {
                        "text": {
                        "values": [
                            "<? input.text ?> ν•˜μ‹€ μ˜ˆμ •μ΄μ‹œκ΅°μš”."
                        ],
                        "selection_policy": "sequential"
                        }
                    },
                    "context": {
                        "action": "<? input.text ?>"
                    }
                }
            
  6. 이제 전체 λ…Έλ“œμ˜ 응닡을 μ„€κ³„ν•©λ‹ˆλ‹€. 이 응닡은 ν•„μš”ν•œ Slot의 값을 λͺ¨λ‘ μ–»μ—ˆμ„ λ•Œμ— λ¦¬ν„΄λ©λ‹ˆλ‹€. λ…Έλ“œ μ„€μ • ν™”λ©΄μ—μ„œ μŠ€ν¬λ‘€μ„ λ‚΄λ € Then respond with:둜 κ°€μ‹­μ‹œμ˜€. μš°μΈ‘μ— μœ„μΉ˜ν•œ 메뉴 μ•„μ΄μ½˜μ„ ν΄λ¦­ν•©λ‹ˆλ‹€. λ‹€μŒ JSON을 μž…λ ₯ν•˜μ‹­μ‹œμ˜€.

        {
            "context": {
                "command": "add_event"
            },
            "output": {
                "text": {
                    "values": [
                        "$people $place $action 약속 일정 μΊ˜λ¦°λ”μ— μΆ”κ°€ν•˜κ² μŠ΅λ‹ˆλ‹€~"
                    ],
                    "selection_policy": "sequential"
                }
            }
        }
    
  7. And finally λž€μ€ Wait for user input으둜 μœ μ§€ν•˜μ‹­μ‹œμ˜€.

λ…Έλ“œ ν•˜λ‚˜μ˜ μž‘μ„±μ„ λ§ˆμ³€μŠ΅λ‹ˆλ‹€. 전체 λ…Έλ“œμ˜ μ‘λ‹΅μ—μ„œ context의 command κ°’μœΌλ‘œ add_eventλ₯Ό μ €μž₯ν–ˆμŠ΅λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 이 λͺ…령을 ν™•μΈν•˜κ³  μ‹€μ œ μΊ˜λ¦°λ”μ— 이벀트λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ $data.add_event_result에 κ²°κ³Όλ₯Ό μ €μž₯된 μ±„λ‘œ ν•˜μœ„ λ…Έλ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. 이제 ν•˜μœ„ λ…Έλ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

  1. 이전 λ‹¨κ³„μ—μ„œ μž‘μ„±ν•œ λ…Έλ“œμ˜ 메뉴 λ²„νŠΌμ„ 눌러 Add child nodeλ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.
  2. μžμ‹ λ…Έλ“œμ˜ If bot recognizes: λž€μ— $data and $data.add_event_resultλ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.
  3. Then respond with: λž€μ˜ μš°μΈ‘μ— μœ„μΉ˜ν•œ 메뉴 μ•„μ΄μ½˜μ„ 눌러 Open JSON editorλ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.
  4. λ‹€μŒμ˜ JSON을 μž…λ ₯ν•˜μ‹­μ‹œμ˜€.
        {
            "context": {
                "command": "finish"
            },
            "output": {
                "text": {
                "values": [
                    "일정이 μΆ”κ°€λμ–΄μš” ~ <? $data.add_event_result ?>"
                ],
                "selection_policy": "sequential"
                }
            }
        }
    
  5. And finally λž€μ€ Wait for user input으둜 μœ μ§€ν•˜μ‹­μ‹œμ˜€.

λ…Έλ“œ μž‘μ„±μ΄ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

4.4 μ›Œν¬μŠ€νŽ˜μ΄μŠ€ ν…ŒμŠ€νŠΈ

Conversation Tool의 우츑 상단에 μœ„μΉ˜ν•œ λ©”μ„Έμ§€ μ•„μ΄μ½˜μ„ ν΄λ¦­ν•˜λ©΄ μž‘μ„±μ€‘μΈ μ›Œν¬μŠ€νŽ˜μ΄μŠ€λ₯Ό ν…ŒμŠ€νŠΈ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4.5 μΊ˜λ¦°λ”λ΄‡ ν…ŒμŠ€νŠΈ

이전 λ‹¨κ³„μ—μ„œ λ°©λ¬Έν–ˆλ˜ μ•± url을 λ°©λ¬Έν•˜μ—¬ ν…ŒμŠ€νŠΈ ν•˜μ‹­μ‹œμ˜€. μΊ˜λ¦°λ”λ΄‡μ—κ²Œ λ‹€μŒμ˜ μ§ˆλ¬Έμ„ λ˜μ Έλ³΄μ„Έμš”.

  • 였늘 λ­ν•˜μ§€? (μΆ”μ²œ κΈ°λŠ₯은 였늘 μ•„λ¬΄λŸ° 일정도 μ—†λŠ” κ²½μš°μ—λ§Œ μ‹€ν–‰λ©λ‹ˆλ‹€. 이 κΈ°λŠ₯을 ν…ŒμŠ€νŠΈ ν•˜λ €λ©΄ ꡬ글 μΊ˜λ¦°λ”μ˜ 였늘 일정을 λͺ¨λ‘ μ‚­μ œν•˜μ‹  ν›„ μ§„ν–‰ν•˜μ‹­μ‹œμ˜€.)
  • 였늘 일정 μ•Œλ €μ€˜
  • 였늘 저녁에 μ—„λ§ˆλž‘ μ§‘μ—μ„œ ν™ˆμ‡Όν•‘ ν•˜κΈ°λ‘œ ν–ˆμ–΄
  • 였늘 일정 μ•Œλ €μ€˜

5. μΉ΄μΉ΄μ˜€ν†‘κ³Ό μ—°λ™ν•˜κΈ°

이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 이미 μΉ΄μΉ΄μ˜€ν†‘κ³Ό μ—°κ²°ν•˜κΈ° μœ„ν•œ APIλ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μΉ΄μΉ΄μ˜€ν†‘ ν”ŒλŸ¬μŠ€μΉœκ΅¬ κ΄€λ¦¬μžμ„Όν„°μ—μ„œ μ„€μ • κ³Όμ •λ§Œ μ§„ν–‰ν•˜λ©΄ λ©λ‹ˆλ‹€.

  1. ν”ŒλŸ¬μŠ€μΉœκ΅¬ κ΄€λ¦¬μžμ„Όν„°μ—μ„œ μΊ˜λ¦°λ”λ΄‡ 용으둜 μƒμ„±ν•œ 친ꡬλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
  2. 쒌츑 λ©”λ‰΄μ—μ„œ μŠ€λ§ˆνŠΈμ±„νŒ…μ„ μ„ νƒν•©λ‹ˆλ‹€.
  3. APIν˜•μ˜ μ„€μ •ν•˜κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€.
  4. μ•± URL에 {μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 링크}/api/kakaoλ₯Ό μž…λ ₯ν•˜κ³  API ν…ŒμŠ€νŠΈ λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€.
  5. λ‚˜λ¨Έμ§€ ν•­λͺ©μ€ μ μ ˆν•˜κ²Œ μž…λ ₯ν•˜μ‹­μ‹œμ˜€.
  6. APIν˜• μ €μž₯ν•˜κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ μ €μž₯ν•©λ‹ˆλ‹€.
  7. APIν˜•μ˜ μ‹œμž‘ν•˜κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€.

이제 μΉ΄μΉ΄μ˜€ν†‘ λ©”μ‹ μ €λ‘œ μΊ˜λ¦°λ”λ΄‡μ„ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • [주의] : μƒμ„±ν•œ ν”ŒλŸ¬μŠ€μΉœκ΅¬λ₯Ό μΉ΄μΉ΄μ˜€ν†‘ λ©”μ‹ μ €μ—μ„œ κ²€μƒ‰ν•˜μ—¬ 찾으렀면 관리 > 상세섀정 > κ³΅κ°œμ„€μ • μ—μ„œ ν™ˆ 곡개 및 검색 ν—ˆμš©μ„ ν™œμ„±ν™” ν•˜μ‹­μ‹œμ˜€.
  • [주의] : κ΅¬κΈ€μ˜ μΊ˜λ¦°λ” μ ‘κ·Ό κΆŒν•œ ν—ˆμš©μ„ μœ„ν•œ λ§ν¬λŠ” μΉ΄μΉ΄μ˜€ν†‘μ˜ embedded webviewμ—μ„œμ˜ 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 링크λ₯Ό λ³΅μ‚¬ν•˜μ—¬ λ³„λ„μ˜ λΈŒλΌμš°μ €μ—μ„œ μ ‘μ†ν•˜μ‹­μ‹œμ˜€. (λ˜ν•œ λͺ¨λ°”일 ν”„λ Œλ“€λ¦¬ ν•˜μ§€ μ•ŠμœΌλ‹ˆ νœ΄λŒ€ν°μ„ κ°€λ‘œλͺ¨λ“œλ‘œ 놓고 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.)

6. 페이슀뢁 메신저와 μ—°λ™ν•˜κΈ°

아직 μ§€μ›λ˜μ§€ μ•ŠμœΌλ©° 이번 μ‹€μŠ΅μ—μ„œ μ§„ν–‰ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

License

This sample code is licensed under Apache 2.0. Full license text is available in LICENSE.

Contributing

See CONTRIBUTING.

Open Source @ IBM

Find more open source projects on the IBM Github Page.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •