Skip to content

NailAgent/agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

119 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Reservia

Image

๊ณ ๊ฐ์˜ ๋น„์ •ํ˜• ์˜ˆ์•ฝ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ์˜ˆ์•ฝ ๋ฌธ์˜, ๋ณ€๊ฒฝ, ์ทจ์†Œ, ๊ฒฐ์ œ ํ™•์ธ, ์ผ์ • ๋“ฑ๋ก๊นŒ์ง€ ์ž๋™ ์ฒ˜๋ฆฌํ•˜๋Š”
๋„ค์ผ์ƒต ์‚ฌ์žฅ๋‹˜์„ ์œ„ํ•œ AI ์˜ˆ์•ฝ ์‘๋Œ€ ๋งค๋‹ˆ์ €

Team Nailgent
ยท 26-1 ๋ฐ์ดํ„ฐ์ข…ํ•ฉ๋ถ„์„ ์บก์Šคํ†ค ํ”„๋กœ์ ํŠธ
ยท ๐Ÿ† 2026 Low-Code AI Challenge Hackathon 3rd place

Team Nailgent

Role Name GitHub
AI / Agent ๊น€๋ฏธ์ง€ @miji0
AI / Agent ๊น€์ง€์ˆ˜ @sallysooo
Backend / Infra ๋‚จ๋ฏผ์„œ @minseo0313
Frontend / Design ์ •๊ต์€ @kyooonnnggg

1. Project Overview

Introducing Reservia

Reservia๋Š” 1์ธ ๋„ค์ผ์ƒต๊ณผ ์†Œ๊ทœ๋ชจ ์˜ˆ์•ฝ ๊ธฐ๋ฐ˜ ์—…์ข…์˜ ์‚ฌ์žฅ๋‹˜๋“ค์„ ์œ„ํ•œ AI ์˜ˆ์•ฝ ์ž๋™ํ™” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๊ณ ๊ฐ์€ ์นด์นด์˜คํ†ก์ด๋‚˜ ์›น ์ฑ„ํŒ…์—์„œ ํ‰์†Œ์ฒ˜๋Ÿผ ์ž์œ ๋กญ๊ฒŒ ๋ฌธ์˜ํ•˜๊ณ , ์‹œ์Šคํ…œ์€ ํ•ด๋‹น ๋ฉ”์‹œ์ง€์—์„œ ์˜ˆ์•ฝ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ, ๋ˆ„๋ฝ ์ •๋ณด ์žฌ์งˆ๋ฌธ, ์˜ˆ์•ฝ๊ธˆ ๊ฒฐ์ œ ํ™•์ธ, Google Calendar ๋“ฑ๋ก, ์˜ˆ์•ฝ ๋ณ€๊ฒฝ ๋ฐ ์ทจ์†Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ์˜ˆ์•ฝ ์„œ๋น„์Šค๋Š” ์ •ํ•ด์ง„ ์ž…๋ ฅ ์–‘์‹์— ๋งž์ถฐ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ๋„ค์ผ์ƒต ์˜ˆ์•ฝ ๋ฌธ์˜๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ํ›จ์”ฌ ์ž์œ ๋กญ๊ณ  ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

๋‚ด์ผ ์˜คํ›„ 3์‹œ์— ์ ค ์ œ๊ฑฐํ•˜๊ณ  ์ ค๋„ค์ผ ๊ฐ€๋Šฅํ•ด์š”?
์ฒซ๋ฐฉ๋ฌธ์ด๊ณ  ์ด๋ฆ„์€ ๊น€์ง€์ˆ˜์˜ˆ์š”.

Reservia๋Š” ์ด๋Ÿฐ ์ž์—ฐ์–ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐํ™”๋œ ์ •๋ณด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{
  "intent": "booking",
  "slots": {
    "name": "๊น€์ง€์ˆ˜",
    "reserve_date": "2026-05-30",
    "reserve_time": "15:00",
    "service_code": "GEL_NAIL",
    "off_removal": true,
    "past_visit": false
  },
  "missing_fields": ["phone_num"],
  "next_action": "ask_missing_field"
}

๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ๊ณ ๊ฐ์—๊ฒŒ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์งˆ๋ฌธํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ๊น€์ง€์ˆ˜ ๊ณ ๊ฐ๋‹˜ ๐Ÿ˜Š
์˜ˆ์•ฝ์„ ๋„์™€๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ „ํ™”๋ฒˆํ˜ธ๋„ ํ•จ๊ป˜ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์–ด์š”?

2. Problem Statement

์†Œ๊ทœ๋ชจ ๋„ค์ผ์ƒต ์‚ฌ์žฅ๋‹˜์€ ์‹œ์ˆ  ์ค‘์—๋„ ๊ณ„์† ๋“ค์–ด์˜ค๋Š” ์˜ˆ์•ฝ ๋ฌธ์˜๋ฅผ ์ง์ ‘ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ ๋ฌธ์˜๋Š” ์นด์นด์˜คํ†ก, ๋„ค์ด๋ฒ„ ํ†กํ†ก, ์ธ์Šคํƒ€๊ทธ๋žจ DM ๋“ฑ ์—ฌ๋Ÿฌ ์ฑ„๋„๋กœ ํฉ์–ด์ ธ ์žˆ๊ณ , ๋ฌธ์˜ ํ˜•์‹๋„ ๋ชจ๋‘ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ์„ค๋ช…
๋น„์ •ํ˜• ๋ฌธ์˜ ๊ณ ๊ฐ์ด ์ •ํ•ด์ง„ ์–‘์‹ ์—†์ด ์ž์œ ๋กญ๊ฒŒ ์˜ˆ์•ฝ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
๋ฐ˜๋ณต ํ™•์ธ ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ, ํฌ๋ง ์‹œ๊ฐ„, ์‹œ์ˆ  ์˜ต์…˜, ์ œ๊ฑฐ ์—ฌ๋ถ€ ๋“ฑ์„ ๋งค๋ฒˆ ๋‹ค์‹œ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์•ฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ ์‚ฌ์žฅ๋‹˜์ด ์ง์ ‘ ์บ˜๋ฆฐ๋”๋ฅผ ๋ณด๊ณ  ๊ฐ€๋Šฅํ•œ ์‹œ๊ฐ„๋Œ€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ณ€๊ฒฝ/์ทจ์†Œ ์ฒ˜๋ฆฌ ๊ธฐ์กด ์˜ˆ์•ฝ์„ ์ฐพ์•„์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€์™€ ์ •์ฑ…์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์„ ์ž…๊ธˆ ํ™•์ธ ์˜ˆ์•ฝ๊ธˆ ์ž…๊ธˆ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ ๋’ค ์ตœ์ข… ์˜ˆ์•ฝ ํ™•์ •์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ •๋ณด ๊ด€๋ฆฌ ์–ด๋ ค์›€ ๊ฐ€๊ฒฉํ‘œ, ์šด์˜์‹œ๊ฐ„, ์˜ˆ์•ฝ ์ •์ฑ…์ด ๋ฐ”๋€Œ๋ฉด ๊ณ ๊ฐ ์‘๋Œ€ ๋‚ด์šฉ๋„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Reservia๋Š” ์ด๋Ÿฌํ•œ ์ˆ˜์ž‘์—…์„ AI์™€ ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์žฅ๋‹˜์˜ ์˜ˆ์•ฝ ์‘๋Œ€ ๋ถ€๋‹ด์„ ์ค„์ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.


3. Target Users

Main Target

  • 1์ธ ๋„ค์ผ์ƒต ์‚ฌ์žฅ๋‹˜
  • ์†Œ๊ทœ๋ชจ ๋„ค์ผ์ƒต ์ง์›
  • ์˜ˆ์•ฝ ๋ฌธ์˜์™€ ์˜ต์…˜ ์„ ํƒ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๋ทฐํ‹ฐ์ƒต ์šด์˜์ž

Future Expansion

Reservia์˜ ๊ตฌ์กฐ๋Š” ๋„ค์ผ์ƒต๋ฟ ์•„๋‹ˆ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ˆ์•ฝ ๊ธฐ๋ฐ˜ ์—…์ข…์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ผ€์ดํฌ์ƒต
  • ๊ฝƒ์ง‘
  • ๊ณต๋ฐฉ ํด๋ž˜์Šค
  • ์—์Šคํ…Œํ‹ฑ / ์†๋ˆˆ์น / ์™์‹ฑ์ƒต
  • ์›๋ฐ์ด ํด๋ž˜์Šค
  • ๋ Œํƒˆ ์ŠคํŠœ๋””์˜ค
  • ๊ธฐํƒ€ ๋งž์ถคํ˜• ์˜ˆ์•ฝ์ด ํ•„์š”ํ•œ ์†Œ์ƒ๊ณต์ธ ์—…์ข…

4. Key Features

4.1 ๋น„์ •ํ˜• ์ž์—ฐ์–ด ์˜ˆ์•ฝ ๋ฌธ์˜ ์ฒ˜๋ฆฌ

๊ณ ๊ฐ์ด ์ •ํ•ด์ง„ ์–‘์‹ ์—†์ด ์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ ๊ณ ๊ฐ ๋ฉ”์‹œ์ง€์—์„œ ์˜ˆ์•ฝ ์˜๋„์™€ ํ•„์š”ํ•œ slot์„ ์ถ”์ถœํ•˜๊ณ , ๋ˆ„๋ฝ๋œ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฉด ์ž๋™์œผ๋กœ ์žฌ์งˆ๋ฌธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

๊ณ ๊ฐ: ๋‚ด์ผ 3์‹œ์— ์ ค ์ œ๊ฑฐํ•˜๊ณ  ์ ค๋„ค์ผ ๊ฐ€๋Šฅํ•ด์š”?
์‹œ์Šคํ…œ: ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด๋“œ๋ฆด๊ฒŒ์š”. ์„ฑํ•จ๊ณผ ์ „ํ™”๋ฒˆํ˜ธ๋„ ํ•จ๊ป˜ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์–ด์š”?

4.2 ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ์‹œ๊ฐ„ ํ™•์ธ ๋ฐ ๋Œ€์ฒด ์‹œ๊ฐ„ ์ œ์•ˆ

๊ณ ๊ฐ์ด ์š”์ฒญํ•œ ์‹œ๊ฐ„์ด ์ด๋ฏธ ์˜ˆ์•ฝ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ์˜์—…์‹œ๊ฐ„๊ณผ ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์˜ˆ์•ฝ ๋ฐ์ดํ„ฐ์™€ Policy Engine์„ ํ†ตํ•ด ๊ฐ€๋Šฅํ•œ ๋Œ€์ฒด ์‹œ๊ฐ„๋Œ€๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

์š”์ฒญํ•˜์‹  ์˜คํ›„ 3์‹œ๋Š” ์ด๋ฏธ ์˜ˆ์•ฝ์ด ์žˆ์–ด์š”.
๋Œ€์‹  ์˜คํ›„ 4์‹œ, 5์‹œ 30๋ถ„, 7์‹œ ์˜ˆ์•ฝ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์›ํ•˜์‹œ๋Š” ์‹œ๊ฐ„๋Œ€๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š” ๐Ÿ˜Š

4.3 ์˜ˆ์•ฝ๊ธˆ ๊ฒฐ์ œ ํ™•์ธ ํ›„ ์ตœ์ข… ์˜ˆ์•ฝ ํ™•์ •

์˜ˆ์•ฝ์€ ๋ฐ”๋กœ ํ™•์ •๋˜์ง€ ์•Š๊ณ , ์˜ˆ์•ฝ๊ธˆ ๊ฒฐ์ œ ํ™•์ธ ์ดํ›„ ์ตœ์ข… ํ™•์ •๋ฉ๋‹ˆ๋‹ค. Toss Payments ์›นํ›… ์—ฐ๋™์„ ํ†ตํ•ด ์ž๋™ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ œ ํ๋ฆ„:

๊ฒฝ๋กœ A โ€” ๊ณ ๊ฐ์ด "๊ฒฐ์ œ ์™„๋ฃŒ" ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹œ (์ฃผ ๊ฒฝ๋กœ)

  1. ์˜ˆ์•ฝ ์ƒ์„ฑ โ†’ booking_id, order_id(booking_{id}_{timestamp}) state ์ €์žฅ โ†’ ๊ฒฐ์ œ ๋งํฌ์™€ ํ•จ๊ป˜ "30๋ถ„ ์ด๋‚ด ๋ฏธ๊ฒฐ์ œ ์‹œ ์ž๋™ ์ทจ์†Œ" ์•ˆ๋‚ด ์ „์†ก
  2. ๊ณ ๊ฐ์ด Toss ๊ฒฐ์ œ ์™„๋ฃŒ ํ›„ "๊ฒฐ์ œ ์™„๋ฃŒ" ๋ฉ”์‹œ์ง€ ์ „์†ก
  3. Toss API ์ง์ ‘ ์กฐํšŒ (GET /v1/payments/orders/{order_id})
  4. status: DONE์ด๋ฉด ๊ฒฐ์ œ ํ™•์ • ์‘๋‹ต
  5. Toss ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ์—†๊ฑฐ๋‚˜ ๋ฏธ๊ฒฐ์ œ๋ฉด ๋ฐฑ์—”๋“œ payment_status ์กฐํšŒ๋กœ fallback
    • PAID โ†’ ๊ฒฐ์ œ ํ™•์ • ์‘๋‹ต
    • CANCELLED (30๋ถ„ ๋‚ด ๋ฏธ๊ฒฐ์ œ๋กœ ์ž๋™ ์ทจ์†Œ๋จ) โ†’ ์ทจ์†Œ ์•ˆ๋‚ด + "์˜ˆ์•ฝ ๋ฌธ์˜"๋กœ ์žฌ์˜ˆ์•ฝ ์œ ๋„
    • ๊ทธ ์™ธ(PENDING) โ†’ "์•„์ง ๊ฒฐ์ œ๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค" ์•ˆ๋‚ด

๊ฒฝ๋กœ B โ€” Toss successUrl ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ (๋ฐฑ์—”๋“œ ์ฒ˜๋ฆฌ)

  1. ๊ณ ๊ฐ์ด Toss ๊ฒฐ์ œ ์™„๋ฃŒ โ†’ successUrl๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ (paymentKey, orderId, amount ํฌํ•จ)
  2. ๋ฐฑ์—”๋“œ successUrl ํ•ธ๋“ค๋Ÿฌ: POST /api/v1/payments/confirm ํ˜ธ์ถœ
  3. Toss ์ตœ์ข… ์Šน์ธ (POST /v1/payments/confirm) โ†’ status: DONE
  4. ๋ฐฑ์—”๋“œ ๊ฒฐ์ œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ (PATCH /api/v1/payments/{id})

๊ฒฝ๋กœ C โ€” Toss ์›นํ›… ์ˆ˜์‹  ์‹œ (๋ณด์กฐ ๊ฒฝ๋กœ)

  1. Toss๊ฐ€ POST /toss/webhook์œผ๋กœ ๊ฒฐ์ œ ์™„๋ฃŒ ์ด๋ฒคํŠธ ์ „์†ก
  2. ์„œ๋ช… ๊ฒ€์ฆ (TOSS_SECRET_KEY ๊ธฐ๋ฐ˜ Basic auth)
  3. Toss API ์žฌ์กฐํšŒ๋กœ ๊ฒฐ์ œ ์ƒํƒœ ํ™•์ธ (status: DONE, ๊ธˆ์•ก ๊ฒ€์ฆ)
  4. ๋ฐฑ์—”๋“œ ๊ฒฐ์ œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ (PATCH /api/v1/payments/{id})
  5. LangGraph ํ•ด๋‹น ์œ ์ € thread ์ƒํƒœ ๊ฐฑ์‹  (booking_status: payment_confirmed)
  6. ์นด์นด์˜ค ์ฑ„๋„ ํ‘ธ์‹œ ๋ฐœ์†ก (๋น„์ฆˆ๋‹ˆ์Šค ์ฑ„๋„ ์ธ์ฆ ํ›„ ํ™œ์„ฑํ™” ์˜ˆ์ •)

4.4 ์˜ˆ์•ฝ ๋ณ€๊ฒฝ ๋ฐ ์ทจ์†Œ / ํ™˜๋ถˆ ์ž๋™ ์ฒ˜๋ฆฌ

๊ณ ๊ฐ์ด ์˜ˆ์•ฝ ๋ณ€๊ฒฝ์ด๋‚˜ ์ทจ์†Œ๋ฅผ ์š”์ฒญํ•˜๋ฉด ๊ธฐ์กด ์˜ˆ์•ฝ์„ ์กฐํšŒํ•˜๊ณ , ์ •์ฑ…์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์˜ˆ์•ฝ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ์• ๋งคํ•œ ๊ฒฝ์šฐ ์‚ฌ์žฅ๋‹˜ ๊ฒ€ํ† ๋กœ ๋„˜๊น๋‹ˆ๋‹ค.

์ทจ์†Œ ์‹œ ๊ฒฐ์ œ ์ƒํƒœ์— ๋”ฐ๋ผ ์ž๋™ ๋ถ„๊ธฐ๋ฉ๋‹ˆ๋‹ค.

  • ๊ฒฐ์ œ ์™„๋ฃŒ(PAID): POST /api/v1/payments/{id}/refund ํ˜ธ์ถœ โ†’ ๋ฐฑ์—”๋“œ๊ฐ€ Toss ํ™˜๋ถˆ ์ฒ˜๋ฆฌ ๋ฐ ์˜ˆ์•ฝ ์‚ญ์ œ
  • ๋ฏธ๊ฒฐ์ œ: DELETE /api/v1/bookings/{id} ํ˜ธ์ถœ โ†’ ์˜ˆ์•ฝ ์‚ญ์ œ
  • ํ™˜๋ถˆ ์™„๋ฃŒ ์‹œ ๊ณ ๊ฐ์—๊ฒŒ "์˜ˆ์•ฝ๊ธˆ์€ 3~5์ผ ๋‚ด ํ™˜๋ถˆ๋ฉ๋‹ˆ๋‹ค. (๊ฒฐ์ œ์‚ฌ์— ๋”ฐ๋ผ ์ƒ์ด)" ์•ˆ๋‚ด

4.5 ๊ธฐํƒ€ ๋ฌธ์˜ ์‘๋Œ€

์šด์˜์‹œ๊ฐ„, ๊ฐ€๊ฒฉ, ์œ„์น˜, ์˜ˆ์•ฝ๊ธˆ, ์‹œ์ˆ  ์˜ต์…˜ ๋“ฑ ์ผ๋ฐ˜ ๋ฌธ์˜๋Š” GET /api/v1/shopinfo๋กœ ๊ฐ€์ ธ์˜จ ์ƒต ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ LLM์ด 1์ฐจ ๋‹ต๋ณ€์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์žฅ๋‹˜์ด ๋“ฑ๋กํ•œ ์ •์ฑ…๊ณผ ๊ฐ€๊ฒฉ ์ •๋ณด๋กœ ๋‹ต๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ฆ‰์‹œ ์‘๋‹ตํ•˜๊ณ , ์ƒต ์ •๋ณด์— ์—†๋Š” ๋‚ด์šฉ์€ SSE๋ฅผ ํ†ตํ•ด ์‚ฌ์žฅ๋‹˜์—๊ฒŒ ์•Œ๋ฆผ์„ ์ „์†กํ•œ ๋’ค ๋Œ€๊ธฐ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

4.6 ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ

์‚ฌ์žฅ๋‹˜์€ ์›น ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๋‹ค์Œ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒต ์ •๋ณด ๊ด€๋ฆฌ
  • ๊ณ ๊ฐ ๋ชฉ๋ก ๊ด€๋ฆฌ
  • ์˜ˆ์•ฝ ๋ชฉ๋ก ๊ด€๋ฆฌ
  • ์ผ์ • ๊ด€๋ฆฌ
  • ์˜ˆ์•ฝ ์ƒํƒœ ํ™•์ธ
  • ๊ฒฐ์ œ ์ƒํƒœ ํ™•์ธ
  • ๊ณ ๊ฐ์ด ์—…๋กœ๋“œํ•œ ๋„ค์ผ ๋””์ž์ธ ์ด๋ฏธ์ง€ ํ™•์ธ

5. System Architecture

Reservia๋Š” ๊ณ ๊ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹จ์ˆœํžˆ LLM์— ์ „๋‹ฌํ•ด ๋‹ต๋ณ€ํ•˜๋Š” ์ฑ—๋ด‡์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ณ ๊ฐ ์ž…๋ ฅ์„ ๊ตฌ์กฐํ™”ํ•˜๊ณ , ์˜ˆ์•ฝ ์—…๋ฌด์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์„ ์—ฐ๊ฒฐํ•˜๋Š” AI workflow automation system์ž…๋‹ˆ๋‹ค.

์ „์ฒด ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

flowchart LR
    A[Customer Message<br/>KakaoTalk] --> B[Kakao Webhook]
    B --> C[FastAPI]
    C --> D[LangGraph]
    D --> E[Intake Agent<br/>GPT-4o]
    E --> F[Router]

    F --> H[Inquiry]
    F --> I[Booking Agent]
    F --> J[Cancel Agent]
    F --> K[Change Agent]
    F --> L[Payment Agent]
    F --> Q[Response]

    I --> M[Reservation API]
    I --> N[Policy Engine]
    I --> O[Toss Payments API]
    J --> M
    K --> M

    H --> Q
    I --> Q
    J --> Q
    K --> Q
    L --> Q

    Q --> R[Customer Reply]
    Q --> S[Owner Dashboard]
Loading

6. Agent Workflow

Reservia Agent Workflow

LangGraph๋Š” Reservia์˜ ํ•ต์‹ฌ ์ž๋™ํ™” ํ๋ฆ„์„ ์—ฐ๊ฒฐํ•˜๋Š” orchestration layer์ž…๋‹ˆ๋‹ค. ๊ณ ๊ฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์นด์นด์˜ค ์›นํ›…์„ ํ†ตํ•ด FastAPI ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋ฉด, LangGraph workflow๊ฐ€ Intake Agent์™€ Router๋ฅผ ๊ฑฐ์ณ ๋ชฉ์ ์— ๋งž๋Š” ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

6.1 Workflow Summary

Step Component Role
1 Kakao Webhook ๊ณ ๊ฐ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ 
2 FastAPI + LangGraph ๋ฉ”์‹œ์ง€ ํŒŒ์‹ฑ ๋ฐ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰
3 Intake Agent (GPT-4o) ์˜๋„ ๋ถ„๋ฅ˜, slot ์ถ”์ถœ, ๊ธฐ์กด ๊ณ ๊ฐ DB ๋ณด์™„
4 Router Inquiry, Booking, Cancel, Change, Payment ๋…ธ๋“œ๋กœ ๋ถ„๊ธฐ (๊ทธ ์™ธ intent๋Š” Response๋กœ ์งํ–‰)
5 Inquiry Agent ๊ฐ€๊ฒฉ, ์šด์˜์‹œ๊ฐ„, ์ •์ฑ… ๋“ฑ ๊ธฐํƒ€ ๋ฌธ์˜ ์‘๋Œ€ โ†’ ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€ ์‹œ SSE๋กœ ์‚ฌ์žฅ๋‹˜ ์•Œ๋ฆผ
6 Booking Agent ์‹ ๊ทœ ์˜ˆ์•ฝ ๋“ฑ๋ก ๋ฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ + ๊ฒฐ์ œ ๋งํฌ ์ƒ์„ฑ
7 Policy Engine DB ๊ธฐ๋ฐ˜ ์˜์—…์‹œ๊ฐ„ยทํœด๋ฌด์ผยท์‹œ์ˆ  ์†Œ์š”์‹œ๊ฐ„ ๊ฒ€์ฆ, ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํŒ๋‹จ
8 Payments Flow ์˜ˆ์•ฝ ์ƒ์„ฑ ์‹œ ๊ฒฐ์ œ ๋งํฌ ๋ฐœ์†ก โ†’ successUrl ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ โ†’ Toss confirm โ†’ ๊ฒฐ์ œ ํ™•์ • โ†’ ๋ฐฑ์—”๋“œ DB ์—…๋ฐ์ดํŠธ
9 Cancel / Change Agent ๊ธฐ์กด ์˜ˆ์•ฝ ์กฐํšŒ ํ›„ ์ทจ์†Œ ๋˜๋Š” ๋ณ€๊ฒฝ ์ฒ˜๋ฆฌ
10 Response ๊ณ ๊ฐ์—๊ฒŒ ์ตœ์ข… ์‘๋‹ต ๋ฐ˜ํ™˜ (Greeting/Unknown ๋“ฑ fallback intent์˜ ๊ณ ์ • ์‘๋‹ต ํฌํ•จ)

6.2 Shared State

LangGraph workflow์—์„œ๋Š” ๊ณ ๊ฐ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํƒœ๊ฐ’์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Field Description
kakao_user_id ์นด์นด์˜ค ์‚ฌ์šฉ์ž ์‹๋ณ„์ž
user_input ๊ณ ๊ฐ์˜ ์›๋ณธ ๋ฉ”์‹œ์ง€
intent ์˜ˆ์•ฝ, ๋ฌธ์˜, ๋ณ€๊ฒฝ, ์ทจ์†Œ ๋“ฑ ๊ณ ๊ฐ ์˜๋„
slots ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ, ๋‚ ์งœ, ์‹œ๊ฐ„, ์‹œ์ˆ  ์˜ต์…˜ ๋“ฑ ์ถ”์ถœ๋œ ์ •๋ณด
missing_fields ์˜ˆ์•ฝ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ์ •๋ณด
is_bookable ํ˜„์žฌ ์š”์ฒญ์ด ์˜ˆ์•ฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€
booking_status ์˜ˆ์•ฝ ์ƒํƒœ
booking_id ์˜ˆ์•ฝ ์ƒ์„ฑ ํ›„ ์ €์žฅ๋˜๋Š” ์˜ˆ์•ฝ ID (๊ฒฐ์ œ ํ™•์ธ์— ์‚ฌ์šฉ)
order_id Toss ๊ฒฐ์ œ ์กฐํšŒ์šฉ ์ฃผ๋ฌธ๋ฒˆํ˜ธ (booking_{id}_{timestamp}, ๊ฒฐ์ œ ํ™•์ธ์— ์‚ฌ์šฉ)
policy_check_results ์ •์ฑ… ๊ฒ€์ฆ ๊ฒฐ๊ณผ ๋ฐ ์กฐํšŒ๋œ ์˜ˆ์•ฝ ์ •๋ณด
next_action ๋‹ค์Œ์— ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…
response_draft ๊ณ ๊ฐ์—๊ฒŒ ๋ณด๋‚ผ ์‘๋‹ต ์ดˆ์•ˆ

7. Core Agents

7.1 Intake Agent

Intake Agent๋Š” ๋ชจ๋“  ๊ณ ๊ฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์ฒ˜์Œ ๋„์ฐฉํ•˜๋Š” ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ์—ญํ• :

  • ๊ณ ๊ฐ ์˜๋„ ๋ถ„๋ฅ˜
  • ์˜ˆ์•ฝ ๊ด€๋ จ slot ์ถ”์ถœ
  • ๋ˆ„๋ฝ ์ •๋ณด ๊ฐ์ง€
  • ๊ธฐ์กด ๊ณ ๊ฐ ์—ฌ๋ถ€ ํ™•์ธ
  • ๋‹ค์Œ workflow ๋ถ„๊ธฐ ๊ฒฐ์ •

7.2 Greeting (intent)

๋ณ„๋„์˜ LangGraph ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ, Intake Agent๊ฐ€ ๋นˆ ๋ฉ”์‹œ์ง€(์˜ˆ: ์นด์นด์˜คํ†ก ์ฑ„๋„ ์ถ”๊ฐ€ ์‹œ ์ตœ์ดˆ ์ง„์ž…)๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ๋ถ„๋ฅ˜ํ•˜๋Š” intent์ž…๋‹ˆ๋‹ค. Router๋ฅผ ๊ฑฐ์ณ Response ๋…ธ๋“œ๋กœ ๋ฐ”๋กœ ์ „๋‹ฌ๋˜์–ด ๊ณ ์ •๋œ ํ™˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์—ญํ• :

  • ์‹ ๊ทœ ๊ณ ๊ฐ ํ™˜์˜ ๋ฉ”์‹œ์ง€ ์ œ๊ณต
  • ๊ธฐ๋ณธ ์˜ˆ์•ฝ ์ ˆ์ฐจ ์•ˆ๋‚ด
  • ํ•„์š”ํ•œ ์ •๋ณด ์ž…๋ ฅ ์œ ๋„

7.3 Inquiry Agent

์˜ˆ์•ฝ ์™ธ์˜ ์ผ๋ฐ˜ ๋ฌธ์˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. GET /api/v1/shopinfo๋กœ ์ƒต ์ •๋ณด๋ฅผ ์กฐํšŒํ•œ ๋’ค LLM์ด ๋‹ต๋ณ€ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์—ญํ• :

  • "๊ธฐํƒ€", "๋ฌธ์˜์š”", "๊ถ๊ธˆํ•œ๊ฑฐ ์žˆ์–ด์š”" ๋“ฑ ํŠธ๋ฆฌ๊ฑฐ ์ž…๋ ฅ ๊ฐ์ง€(LLM ํŒ๋‹จ) โ†’ ์‹ค์ œ ์งˆ๋ฌธ ์œ ๋„
  • ์ƒต ์ •๋ณด ๊ธฐ๋ฐ˜ LLM 1์ฐจ ๋‹ต๋ณ€ ์‹œ๋„, ๊ฐ€๋Šฅ ์‹œ ์ฆ‰์‹œ ์‘๋‹ต
  • ์ƒต ์ •๋ณด์— ์—†๋Š” ๋‚ด์šฉ์€ notify_owner() SSE ์•Œ๋ฆผ ์ „์†ก ํ›„ ๋Œ€๊ธฐ ์•ˆ๋‚ด (human-in-the-loop)

7.4 Booking Agent

์‹ ๊ทœ ์˜ˆ์•ฝ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์—ญํ• :

  • ์˜ˆ์•ฝ slot ๊ฒ€์ฆ
  • ์‹œ์ˆ  ์˜ต์…˜ ํ™•์ธ
  • ์ƒต ์šด์˜์‹œ๊ฐ„ ํ™•์ธ
  • ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ์‹œ๊ฐ„ ์กฐํšŒ
  • ์˜ˆ์•ฝ draft ์ƒ์„ฑ
  • ์˜ˆ์•ฝ๊ธˆ ๊ฒฐ์ œ ๋Œ€๊ธฐ ์ƒํƒœ ์ฒ˜๋ฆฌ
  • ๊ฒฐ์ œ ํ™•์ธ ํ›„ ์˜ˆ์•ฝ ํ™•์ •

7.5 Cancel Agent

๊ณ ๊ฐ์˜ ์˜ˆ์•ฝ ์ทจ์†Œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์—ญํ• :

  • kakao_user_id ๊ธฐ๋ฐ˜ ๊ธฐ์กด ๊ณ ๊ฐ DB ์กฐํšŒ๋กœ ์ด๋ฆ„ ์ž๋™ ๋ณด์™„
  • ์ด๋ฆ„์œผ๋กœ ๋ฏธ๋ž˜ ์˜ˆ์•ฝ ์ค‘ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ƒ์„ฑ๋œ 1๊ฑด ์ž๋™ ์„ ํƒ
  • ์˜ˆ์•ฝ ํ™•์ธ ๋ฉ”์‹œ์ง€ ํ›„ ๊ณ ๊ฐ ์‘๋‹ต(๋งž์•„์š”/์•„๋‹ˆ์š”)์œผ๋กœ ๋ถ„๊ธฐ
  • ๋งž์•„์š” โ†’ ๊ฒฐ์ œ ์™„๋ฃŒ(PAID)๋ฉด ํ™˜๋ถˆ ์ฒ˜๋ฆฌ, ๋ฏธ๊ฒฐ์ œ๋ฉด ์˜ˆ์•ฝ ์‚ญ์ œ / ์•„๋‹ˆ์š” โ†’ ๋‚ ์งœ/์‹œ๊ฐ„ ์žฌ์š”์ฒญ

7.6 Change Agent

๊ณ ๊ฐ์˜ ์˜ˆ์•ฝ ๋ณ€๊ฒฝ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์—ญํ• :

  • kakao_user_id ๊ธฐ๋ฐ˜ ๊ธฐ์กด ๊ณ ๊ฐ DB ์กฐํšŒ๋กœ ์ด๋ฆ„ ์ž๋™ ๋ณด์™„
  • ์ด๋ฆ„์œผ๋กœ ๋ฏธ๋ž˜ ์˜ˆ์•ฝ ์ค‘ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ƒ์„ฑ๋œ 1๊ฑด ์ž๋™ ์„ ํƒ
  • ์˜ˆ์•ฝ ์ฐพ์œผ๋ฉด ์ƒˆ ๋‚ ์งœ/์‹œ๊ฐ„๋งŒ ์š”์ฒญ (์ด๋ฆ„/์ „ํ™”๋ฒˆํ˜ธ ์žฌ์š”์ฒญ ์—†์Œ)
  • ์ƒˆ ์‹œ๊ฐ„๋Œ€ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ ํ›„ ์˜ˆ์•ฝ ์ •๋ณด ์ˆ˜์ •

7.7 Exception Handling (cross-cutting)

๋ณ„๋„์˜ Exception Handler ๋…ธ๋“œ๋Š” ์—†์œผ๋ฉฐ, ์˜ˆ์™ธ ์ƒํ™ฉ์€ ๊ฐ ๋…ธ๋“œ ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

  • ๋ชจํ˜ธํ•œ ์š”์ฒญ (unknown intent): Router๊ฐ€ Response๋กœ ์งํ–‰ โ†’ ๊ณ ์ • ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜ + notify_owner()๋กœ ์‚ฌ์žฅ๋‹˜์—๊ฒŒ SSE ์•Œ๋ฆผ
  • ์˜ˆ์•ฝ ์ •์ฑ…๊ณผ ์ถฉ๋Œ / ์š”์ฒญ ์‹œ๊ฐ„ ๋ถˆ๊ฐ€: BookingยทChange Agent๊ฐ€ ๋Œ€์ฒด ์‹œ๊ฐ„๋Œ€๋ฅผ ์ œ์•ˆ
  • backend error ๋ฐœ์ƒ: ๊ฐ Agent๊ฐ€ booking_status: backend_error์™€ next_action: human_review(๋˜๋Š” retry_or_human_review)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ณ ๊ฐ์—๊ฒŒ๋Š” "ํ™•์ธ ํ›„ ์•ˆ๋‚ด๋“œ๋ฆด๊ฒŒ์š”" ์•ˆ๋‚ด
  • ๊ธฐ์กด ์˜ˆ์•ฝ์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ: CancelยทChange Agent๊ฐ€ ๋‚ ์งœ/์‹œ๊ฐ„ ์žฌ์งˆ๋ฌธ์œผ๋กœ ์žฌ์š”์ฒญ
  • ์ด๋ฏธ์ง€/๋””์ž์ธ ์š”์ฒญ: ์นด์นด์˜ค IMAGE_UPLOAD ํŠธ๋ฆฌ๊ฑฐ ์‹œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐฑ์—”๋“œ์— ์—…๋กœ๋“œํ•ด ์˜ˆ์•ฝ์— ์ฒจ๋ถ€

์ž๋™์œผ๋กœ ํ™•์ •ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์€ ์‚ฌ์žฅ๋‹˜ ๊ฒ€ํ† ๋กœ ๋„˜๊น๋‹ˆ๋‹ค.


8. Frontend Dashboard

Reservia๋Š” ๊ณ ๊ฐ ์‘๋Œ€ ์ž๋™ํ™”๋ฟ ์•„๋‹ˆ๋ผ, ์‚ฌ์žฅ๋‹˜์ด ์˜ˆ์•ฝ๊ณผ ์ƒต ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” dashboard๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”— https://reservia-five.vercel.app/

8.1 Shop Info Management

์‚ฌ์žฅ๋‹˜์€ ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ง์ ‘ ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์šด์˜์‹œ๊ฐ„
  • ์˜ˆ์•ฝ๊ธˆ
  • ๊ฐ€๊ฒŒ ์œ„์น˜
  • ์˜ˆ์•ฝ ์–‘์‹
  • ๋Œ€ํ‘œ ๊ฐ€๊ฒฉ
  • ์˜ˆ์•ฝ ๋ฉ˜ํŠธ
  • ์ •์ฑ… ์•ˆ๋‚ด
  • ๊ฐ€๊ฒฉํ‘œ/์•ˆ๋‚ด๋ฌธ ์ด๋ฏธ์ง€

8.2 Customer Management

๊ณ ๊ฐ ํƒญ์—์„œ๋Š” ๊ณ ๊ฐ ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ, ์˜ˆ์•ฝ ์ด๋ ฅ, ๋…ธ์‡ผ ์—ฌ๋ถ€ ๋“ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8.3 Reservation Management

์˜ˆ์•ฝ ํƒญ์—์„œ๋Š” ์˜ˆ์•ฝ ๋ชฉ๋ก๊ณผ ์˜ˆ์•ฝ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ •๋ณด ์˜ˆ์‹œ:

  • ๊ณ ๊ฐ๋ช…
  • ์‹œ์ˆ ๋ช…
  • ์˜ˆ์•ฝ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„
  • ์˜ˆ์•ฝ๊ธˆ ์ƒํƒœ
  • ์˜ˆ์•ฝ ์ƒํƒœ
  • ๊ณ ๊ฐ์ด ์—…๋กœ๋“œํ•œ ๋„ค์ผ ๋””์ž์ธ ์ด๋ฏธ์ง€

8.4 Schedule Management

์ผ์ • ํƒญ์—์„œ๋Š” Google Calendar์™€ ์—ฐ๋™๋œ ์˜ˆ์•ฝ ์ผ์ •์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ •๋œ ์˜ˆ์•ฝ์€ ์บ˜๋ฆฐ๋”์— ์ž๋™ ๋“ฑ๋ก๋˜์–ด ์‚ฌ์žฅ๋‹˜์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8.5 ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ (SSE)

Agent๊ฐ€ ์ž๋™์œผ๋กœ ์‘๋‹ตํ•˜๊ธฐ ์–ด๋ ค์šด ์ƒํ™ฉ(์ƒต ์ •๋ณด๋กœ ๋‹ต๋ณ€ ๋ถˆ๊ฐ€ํ•œ ๊ธฐํƒ€ ๋ฌธ์˜, ์˜๋„๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”์‹œ์ง€ ๋“ฑ)์ด ๋ฐœ์ƒํ•˜๋ฉด POST /api/v1/sse/notify๋ฅผ ํ˜ธ์ถœํ•ด ๋ฐฑ์—”๋“œ์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ๋Š” ์ด๋ฅผ SSE๋กœ ๋Œ€์‹œ๋ณด๋“œ์— pushํ•˜์—ฌ, ์‚ฌ์žฅ๋‹˜์ด ๋ณ„๋„ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด "ooo ๊ณ ๊ฐ์ด ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค" ์•Œ๋ฆผ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์ง์ ‘ ์‘๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (human-in-the-loop).


9. Backend & Integrations

Reservia๋Š” ๋‹ค์Œ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™๋ฉ๋‹ˆ๋‹ค.

Integration Purpose
Kakao Webhook ๊ณ ๊ฐ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ 
OpenAI GPT-4o ์ž์—ฐ์–ด ์ดํ•ด ๋ฐ slot ์ถ”์ถœ
Customer DB ๊ณ ๊ฐ ์ •๋ณด ๋ฐ ๊ธฐ์กด ์˜ˆ์•ฝ ์กฐํšŒ
Reservation API ์˜ˆ์•ฝ ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์ทจ์†Œ
Policy Engine ์˜์—…์‹œ๊ฐ„, ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€, ์˜ˆ์™ธ ์กฐ๊ฑด ํŒ๋‹จ
Toss Payments API ์˜ˆ์•ฝ๊ธˆ ๊ฒฐ์ œ ํ™•์ธ
Google Calendar API ํ™•์ • ์˜ˆ์•ฝ ์ผ์ • ๋“ฑ๋ก
SSE Notification ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€/๋ชจํ˜ธํ•œ ๋ฌธ์˜ ๋ฐœ์ƒ ์‹œ ์‚ฌ์žฅ๋‹˜์—๊ฒŒ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ
Frontend Dashboard ์‚ฌ์žฅ๋‹˜์šฉ ๊ด€๋ฆฌ ํ™”๋ฉด ์ œ๊ณต

10. MVP Scope

In Scope

  • ์นด์นด์˜คํ†ก/์›น ๊ธฐ๋ฐ˜ ๊ณ ๊ฐ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ 
  • ์ž์—ฐ์–ด ์˜๋„ ๋ถ„๋ฅ˜
  • ์˜ˆ์•ฝ slot ์ถ”์ถœ
  • ๋ˆ„๋ฝ ์ •๋ณด ์žฌ์งˆ๋ฌธ
  • ์‹ ๊ทœ ์˜ˆ์•ฝ ์ฒ˜๋ฆฌ
  • ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ์‹œ๊ฐ„ ํ™•์ธ
  • ๋Œ€์ฒด ์‹œ๊ฐ„๋Œ€ ์ œ์•ˆ
  • ์˜ˆ์•ฝ๊ธˆ ๊ฒฐ์ œ ํ™•์ธ
  • Google Calendar ๋“ฑ๋ก
  • ์˜ˆ์•ฝ ๋ณ€๊ฒฝ/์ทจ์†Œ ์ฒ˜๋ฆฌ
  • ๊ฐ€๊ฒฉํ‘œ/์šด์˜์ •๋ณด ๊ธฐ๋ฐ˜ ๊ธฐํƒ€ ๋ฌธ์˜ ์‘๋Œ€
  • ์‚ฌ์žฅ๋‹˜์šฉ ๊ด€๋ฆฌ์ž ํ™”๋ฉด

Out of Scope for Current MVP

  • ๋ณต์ˆ˜ ๋””์ž์ด๋„ˆ ์ตœ์  ๋ฐฐ์ •
  • ๊ณ ๋‚œ๋„ ๋„ค์ผ ๋””์ž์ธ ์ด๋ฏธ์ง€ ์ž๋™ ํŒ๋ณ„
  • ์—ฌ๋Ÿฌ ์ง€์  ๋™์‹œ ์šด์˜
  • ๋ชจ๋“  ์—…์ข…์— ๋Œ€ํ•œ ์™„์ „ ์ผ๋ฐ˜ํ™”

11. Future Work

  • ๋„ค์ผ์ƒต ์™ธ ์˜ˆ์•ฝ ์—…์ข… ํ™•์žฅ
  • ์—…์ข…๋ณ„ ์ •์ฑ… ํ…œํ”Œ๋ฆฟ ์ œ๊ณต
  • ๊ณ ๊ฐ ์žฌ๋ฐฉ๋ฌธ/๋…ธ์‡ผ ์ด๋ ฅ ๊ธฐ๋ฐ˜ ์˜ˆ์•ฝ ์ •์ฑ… ๊ณ ๋„ํ™”
  • ๊ฐ€๊ฒฉํ‘œ/์•ˆ๋‚ด๋ฌธ ์ž๋™ ํŒŒ์‹ฑ ์ •ํ™•๋„ ๊ฐœ์„ 
  • ๊ณ ๊ฐ ๋งž์ถคํ˜• ์ถ”์ฒœ ์‘๋‹ต ์ƒ์„ฑ
  • ๋ณต์ˆ˜ ์ง์›/๋””์ž์ด๋„ˆ ์Šค์ผ€์ค„๋ง ์ง€์›
  • CRM ๋ฐ ๋งˆ์ผ€ํŒ… ์ž๋™ํ™” ์—ฐ๋™

About

LangGraph-based multi-agent AI operation system

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages