Skip to content

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

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages