๋ณด๋ฆ„๋‹ฌ ๐ŸŒ #3.2 Development - NUGU PlayBuilder (ENG)

21613 ๋‹จ์–ด ENGENG

1. Role Distribution

NameRole
Kim JeonginApplication Backend, NUGU backend proxy
Kim JinaApplication Frontend, NUGU playbuilder
Jung SihyunApplication Backend, NUGU backend proxy
TheophileApplication Backend - Machine Learning

2. Structure

ย ย ย ย NUGU Play Builder is a development tool that can easily create AI services which can be used in SKT NUGU devices and applications with simple code definition and example sentence input.ย ย ย ย The picture above is NUGU play structure of ๋ณด๋ฆ„๋‹ฌ.

3. Function

1) Emotional Converstaion


2) Health Tip


3) Analgesic Recommendation


4) Woman Health Self-check

# case 1

# case 2


5) Ask Mean Period


6) Ask Real Menstruation


7) Input Real Menstruation


8) Ask Predicted Menstruation


4. NUGU Playbuilder

1) Emotional Converstaion

  • Intent : ask.Mood

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œํž˜๋“ค์–ด
    ์‚ฌ์šฉ์žEntityMOOD
  • Action : ask.Mood

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๊ฐ€๋”์€ ํ„ธ์–ด๋†“๋Š” ๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜๋„ ์žˆ์–ด์š” ...
    NUGU--

2) Health Tip

  • Intet : ask.Tip

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ฐฐ๊ฐ€ ์•„ํŒŒ
    ์‚ฌ์šฉ์žEntityTIP
  • Action : ask.Tip

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ €๋ฅผ ๋”ฐ๋ผ ์‹ฌํ˜ธํก์„ ํ•ด๋ณด์„ธ์š” ...
    NUGU--

3) Woman Health Self-check

  • Intent : ask.selfTest

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ž๊ฐ€์ง„๋‹จํ• ๋ž˜
    ์‚ฌ์šฉ์ž--
  • Action : answer.selfTest

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์–ด๋–ค ์ž๊ฐ€์ง„๋‹จ์„ ์›ํ•˜์„ธ์š”? ์ƒ๋ฆฌํ˜ˆ ์ƒํƒœ ์ž๊ฐ€์ง„๋‹จ์€ 1๋ฒˆ, ์ƒ๋ฆฌํ˜ˆ ์ƒ‰๊น” ์ž๊ฐ€์ง„๋‹จ์€ 2๋ฒˆ์ด๋ผ๊ณ  ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
    NUGU--

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1๋ฒˆ
    ์‚ฌ์šฉ์žEntityNUMBER
    • check.bleedState : NUMBER === 1๋ฒˆ

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌํ˜ˆ ์ƒํƒœ ์ž๊ฐ€์ง„๋‹จ์„ ์‹œ์ž‘ํ• ๊ฒŒ์š”. ์ƒ๋ฆฌ๋Œ€ ์–‘์œผ๋กœ ๋”ฐ์ ธ๋ณด๋ฉด, ํ•˜๋ฃจ์— ์ƒ๋ฆฌ๋Œ€ 5๊ฐœ ์ •๋„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •์ƒ์ ์ธ ์ƒ๋ฆฌ์˜ ์–‘์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋ฆฌ๋Ÿ‰์ด ๊ฐ‘์ž๊ธฐ ๋งŽ์•„์กŒ์œผ๋ฉด 1๋ฒˆ, ์ƒ๋ฆฌ๋Ÿ‰์ด ๋„ˆ๋ฌด ์ ์œผ๋ฉด 2๋ฒˆ, ์ƒ๋ฆฌํ•  ๋•Œ ํ•๋ฉ์–ด๋ฆฌ๊ฐ€ ๋‚˜์˜ค๋ฉด 3๋ฒˆ์ด๋ผ๊ณ  ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
      NUGU--

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1๋ฒˆ
      ์‚ฌ์šฉ์žEntityNUMBER
      • check.bleedState_large : NUMBER === 1๋ฒˆ

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌ๋Ÿ‰์ด ๊ฐ‘์ž๊ธฐ ๋Š˜์—ˆ์„ ๊ฒฝ์šฐ, "์ŠคํŠธ๋ ˆ์Šค๊ฐ€ ํ‰์†Œ๋ณด๋‹ค ๊ณผํ–ˆ๊ตฐ." ํ•˜๊ณ  ๋„˜์–ด๊ฐ€์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค! ์ƒ๋ฆฌ๋Ÿ‰์ด ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๋งŽ์ด ๋Š˜์—ˆ๋‹ค๋ฉด, ์ž๊ถ๊ทผ์ข…์„ ์˜์‹ฌํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋„˜๊ฒผ๋‹ค๊ฐ€ ๋ณ‘์„ ํ‚ค์šธ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ, ๊ผญ ์‚ฐ๋ถ€์ธ๊ณผ์— ๋ฐฉ๋ฌธํ•˜์—ฌ ๊ฒ€์‚ฌ๋ฅผ ๋ฐ›์•„๋ณด์‹œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค!
        NUGU--
      • check.bleedState_small : NUMBER === 2๋ฒˆ

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ฐฐ๋ž€๊ธฐ๊ฐ€ ์ง€๋‚˜๋ฉด ์ž๊ถ๋‚ด๋ง‰์˜ ๋‘๊ป˜๋Š” 8mm ์ด์ƒ์œผ๋กœ ๋‘๊บผ์›Œ์ ธ์•ผ ํ•˜๋Š”๋ฐ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์ƒ๋ฆฌ๋Ÿ‰์ด ์ ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ž๊ถ๋‚ด๋ง‰์ด 8mm ์ด์ƒ์œผ๋กœ ์„ฑ์žฅํ•˜์ง€ ์•Š์œผ๋ฉด ์ˆ˜์ • ํ›„ ์ฐฉ์ƒ์— ์ง€์žฅ์„ ์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž„์‹ ์— ์•ˆ ์ข‹์€ ์˜ํ–ฅ์„ ๋ผ์น  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ผญ ๊ธฐ์–ตํ•ด ์ฃผ์„ธ์š”!
        NUGU--
      • check.bleedState_mass : NUMBER === 3๋ฒˆ

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌํ•  ๋•Œ ๋‚˜์˜ค๋Š” ํ”ผ์˜ ๋ฉ์–ด๋ฆฌ๋ฅผ ํ•œ๋ฐฉ์—์„œ๋Š” ์–ดํ˜ˆ์ด๋ผ๊ณ  ๋ถˆ๋Ÿฌ์š”. ์‹ฌํ•œ ์ŠคํŠธ๋ ˆ์Šค ๋“ฑ์œผ๋กœ, ํ˜ˆ์•ก๊ณผ ๊ธฐ ์ˆœํ™˜์ด ์ž˜ ๋˜์ง€ ์•Š์•„์„œ์ƒ๊ธฐ๋Š” ๊ฒƒ์œผ๋กœ ํ•๋ฉ์ด๊ฐ€ ๋งŽ์ด ๋‚˜์˜ค๋Š” ๋ถ„๋“ค์€ ํ•˜๋ณต๋ƒ‰์ฆ์ด๋‚˜ ์ƒ๋ฆฌํ†ต์ด ์‹ฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ปค์š”. ๋ชธ์„ ๋”ฐ๋œปํ•˜๊ฒŒ ํ•ด์ฃผ๊ณ  ํ˜ˆ์•ก์ˆœํ™˜์ด ์ž˜ ๋˜๋„๋ก ์ŠคํŠธ๋ ˆ์นญ์ด๋‚˜ ๊ฐ€๋ฒผ์šด ์‚ฐ์ฑ… ๋“ฑ ๊ทœ์น™์ ์œผ๋กœ ์šด๋™ํ•˜๋Š” ๊ฒƒ์ด ์ž๊ถ๊ฑด๊ฐ•๊ณผ ๋‚ด ๋ชธ ๊ฑด๊ฐ•์— ์ข‹์•„์š”!
        NUGU--
    • check.bleedColor : NUMBER === 2๋ฒˆ

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌํ˜ˆ ์ƒ‰๊น” ์ž๊ฐ€์ง„๋‹จ์„ ์‹œ์ž‘ํ• ๊ฒŒ์š”. ์ƒ๋ฆฌํ˜ˆ ์ƒ‰๊น”์ด ์„ ๋ช…ํ•œ ๋ถ„ํ™์ƒ‰์ด๋ฉด 1๋ฒˆ, ๋ฐ์€ ๋นจ๊ฐ„์ƒ‰์ด๋ฉด 2๋ฒˆ, ์–ด๋‘์šด ์ž์ฃผ์ƒ‰์ด๋ฉด 3๋ฒˆ, ์ฃผํ™ฉ๋น›์ด๋ฉด 4๋ฒˆ, ์ง„ํ•œ ๊ฐˆ์ƒ‰์ด๋ฉด 5๋ฒˆ, ๊ฒ€์€์ƒ‰์ด๋ฉด 6๋ฒˆ์ด๋ผ๊ณ  ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
      NUGU--

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1๋ฒˆ
      ์‚ฌ์šฉ์žEntityNUMBER
      • check.bleedColor_PINK

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌ ์ดˆ๊ธฐ์—๋Š” ์ƒ๋ฆฌํ˜ˆ์ด ์„ ๋ถ„ํ™์ƒ‰์„ ๋Œ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ƒ๋ฆฌ ๊ธฐ๊ฐ„ ์ค‘ ํ•‘ํฌ๋น›์„ ๋ณด์ธ๋‹ค๋ฉด ๋‚ด๋ถ€์†์ƒ, ์„ฑ๋ณ‘ ๋˜๋Š” ํ˜ธ๋ฅด๋ชฌ ๋ณ€ํ™” ๋“ฑ ๊ฑด๊ฐ• ์ƒ์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฐ๋ถ€์ธ๊ณผ ์ง„๋‹จ์ด ํ•„์š”ํ•ด์š”. ๋˜ํ•œ, ์ƒ๋ฆฌ ๊ธฐ๊ฐ„ ์™ธ์— ์ด๋Ÿฌํ•œ ์ถœํ˜ˆ์ด ์žˆ๋‹ค๋ฉด ์ž๊ถ์—ผ์ฆ ํ˜น์€ ์ž„์‹  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ์ •ํ™•ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด ๋ณ‘์›์„ ๊ผญ ๋ฐฉ๋ฌธํ•ด์ฃผ์„ธ์š”!
        NUGU--
      • check.bleedColor_RED

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œํ”ํ•œ ์ƒ๋ฆฌํ˜ˆ ์ƒ‰๊น”๋กœ, ํ˜ธ๋ฅด๋ชฌ ์ˆ˜์น˜๊ฐ€ ์ ๋‹นํ•˜๋ฉฐ ํ˜ˆ์•ก์ˆœํ™˜์ด ์›ํ™œํ•  ๊ฒฝ์šฐ ๋ฐ์€ ๋นจ๊ฐ„์ƒ‰์˜ ์ƒ๋ฆฌํ˜ˆ์ด ๋‚˜ํƒ€๋‚˜์š”. ๊ทธ๋Ÿฌ๋‚˜ ์ง€๋‚˜์น˜๊ฒŒ ๋ฐ์€ ๋ถ„ํ™๋น›์„ ๋ˆ๋‹ค๋ฉด ์—์ŠคํŠธ๋กœ๊ฒ ์ˆ˜์น˜์˜ ๋ฌธ์ œ์ผ์ˆ˜๋„ ์žˆ์–ด์š”. ๋‹ค์ด์–ดํŠธ, ๋˜ํ•œ ๊ณผ๋„ํ•œ ์•Œ์ฝ”์˜ฌ ์„ญ์ทจ๋กœ๋„ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์–ด์š”.
        NUGU--
      • check.bleedColor_PURPLE

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌ๋Ÿ‰์ด ๋งŽ์„ ๊ฒฝ์šฐ ์–ด๋‘์šด ์ž์ฃผ์ƒ‰์˜ ๋ฉ์–ด๋ฆฌ ํ˜ˆ์ด ๋ณด์ผ ์ˆ˜ ์žˆ์–ด์š”. ๊ทธ๋Ÿฌ๋‚˜, ํƒ€์ธ๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์ž์ฃผ ์ƒ๋ฆฌ๋Œ€๋ฅผ ๊ต์ฒดํ•ด์•ผ ํ•  ์ •๋„๋กœ ์ƒ๋ฆฌํ˜ˆ์ด ๋ฐฐ์ถœ๋œ๋‹ค๋ฉด ์ž๊ถ๊ทผ์ข…, ์ž๊ถ์„ ๊ทผ์ฆ ๋“ฑ ์—ฌ์„ฑ ์งˆํ™˜์˜ ์‹ ํ˜ธ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์ฃผ์„ธ์š”!
        NUGU--
      • check.bleedColor_ORANGE

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์งˆ์—ผ์— ๊ฐ์—ผ๋˜์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์–ด์š”. ์งˆ์—ผ์€ ํ”ํ•œ ์งˆ๋ณ‘์ด์ง€๋งŒ, ๋ฐฉ์น˜ํ•˜๊ฒŒ ๋˜๋ฉด ๋” ํฐ ์งˆ๋ณ‘ ๋˜๋Š” ๋‹ค๋ฅธ ์งˆ๋ณ‘์„ ์•ผ๊ธฐํ•˜๊ณ  ํ™•๋Œ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค! ์งˆ์—ผ์ด ์‹ฌ๊ฐํ•˜์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€๋ณ๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ  ์ดˆ๊ธฐ์— ๋ณ‘์›์„ ์ฐพ๋Š” ๊ฒƒ์ด ์ข‹์•„์š”.
        NUGU--
      • check.bleedColor_BROWN

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์˜ค๋ž˜๋œ ์ƒ๋ฆฌํ˜ˆ์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ƒ๋ฆฌ ์ฒซ๋‚  ๋˜๋Š” ๋์ž๋ฝ ์ฆˆ์Œ์ด๋ผ๋ฉด, ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ผ์š”! ๊ทธ๋Ÿฌ๋‚˜ ์ƒ๋ฆฌ ๊ธฐ๊ฐ„ ์ค‘ ์ง„ํ•œ ๊ฐˆ์ƒ‰์˜ ์ƒ๋ฆฌํ˜ˆ์ด ๋‚˜์˜จ๋‹ค๋ฉด, ์ด๋Š” ๋ถ€์ • ์ถœํ˜ˆ๋กœ ์ž๊ถ๊ทผ์ข… ๋˜๋Š” ์ž๊ถ๋‚ด๋ง‰์ฆ ์ผ ์ˆ˜ ์žˆ์–ด์š”!
        NUGU--
      • check.bleedColor_BLACK

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌ ๋ ๋ฌด๋ ต, ๋˜๋Š” ์ƒ๋ฆฌ์–‘์ด ๋งŽ์€ ์‚ผ์ผ์—์„œ ์‚ฌ์ผ ๊ฒฝ์—, ๊ฒ€์€์ƒ‰์„ ๋„๋Š” ์ƒ๋ฆฌํ˜ˆ์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์–ด์š”. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ƒํƒœ๊ฐ€ ์˜ค๋ž˜ ์ง€์†๋œ๋‹ค๋ฉด ์ž๊ถ๊ทผ์ข…์„ ์˜์‹ฌํ•ด ๋ณผ ์ˆ˜ ์žˆ์–ด์š”.
        NUGU--

4) Analgesic Recommendation

  • Intent : ask.pill

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์•ฝ์ถ”์ฒœํ•ด์ค˜
    ์‚ฌ์šฉ์žEntityPILL-
  • Action : check.userID2

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ์˜ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์žˆ๋Š” ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค์•„์ด๋””๋ฅผ ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
    NUGU--

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1
    ์‚ฌ์šฉ์žEntityuser_ID
    • answer.pill

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1๋‹˜์˜ ์ •๋ณด๋ฅผ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”.
      NUGUEntityuser_ID-

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๊ทธ๋ž˜
      ์‚ฌ์šฉ์žEntityYON

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์•ฝ์„ ์ถ”์ฒœํ•ด๋“œ๋ฆด๊ฒŒ์š”. ๊ฒŒ๋ณด๋ฆฐ๊ณผ ํŽœ์ž˜ํ๋ฅผ ๋ณต์šฉํ•˜์„ธ์š”.
      NUGUBackend ParameterpillPredict
      * answer.noPill : No symptoms exist in the database
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ž…๋ ฅ๋œ ์ฆ์ƒ์ด ์—†์–ด์„œ ์ถ”์ฒœํ•ด๋“œ๋ฆด ์ˆ˜ ์—†์–ด์š”. ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ์—์„œ ์ฆ์ƒ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
      NUGU--
      * answer.wrongID3 : No id exists in the database
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์กด์žฌํ•˜๋Š” ์•„์ด๋””๊ฐ€ ์—†์–ด์š”. ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค ์•„์ด๋””๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
      NUGU--
      * answer.WRONG3 : YON is not '์˜ˆ'
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ์„ ์ข…๋ฃŒํ• ๊ฒŒ์š”.
      NUGU--

5) Ask Mean Period

  • Intent : ask.meanCycle

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ฃผ๊ธฐ์•Œ๋ ค์ค˜
    ์‚ฌ์šฉ์žEntityMEANCYCLE-
  • Action : check.userID1

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ์˜ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์žˆ๋Š” ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค์•„์ด๋””๋ฅผ ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
    NUGU--

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1
    ์‚ฌ์šฉ์žEntityuser_ID

    • answer.meanCycle

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1๋‹˜์˜ ์ •๋ณด๋ฅผ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”.
      NUGUEntityuser_ID-

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๊ทธ๋ž˜
      ์‚ฌ์šฉ์žEntityYON

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œํšŒ์›๋‹˜์˜ ์ฃผ๊ธฐ๋Š”30์ผ ์ž…๋‹ˆ๋‹ค.
      NUGUBackend Parameter-meanCycle-

      *  answer.noMeanCycle : No meanPeriod exists in the database, not enough data to calculate meanPeriod 
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ž…๋ ฅ๋œ ์ถฉ๋ถ„ํ•œ ์ฃผ๊ธฐ๊ฐ€ ์—†๋„ค์š”. ์–ดํ”Œ์—์„œ ์ฃผ๊ธฐ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
      NUGU--

      * answer.wrongID3 : No id exists in the database.
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์กด์žฌํ•˜๋Š” ์•„์ด๋””๊ฐ€ ์—†์–ด์š”. ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค ์•„์ด๋””๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
      NUGU--
      * answer.WRONG3 : YON is not '์˜ˆ'
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ์„ ์ข…๋ฃŒํ• ๊ฒŒ์š”.
      NUGU--

6) ์‹ค์ œ ์ƒ๋ฆฌ ์ฃผ๊ธฐ ์กฐํšŒ

  • Intent : ask.cycle

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ด๋ฒˆ ์ƒ๋ฆฌ์–ธ์ œ ๋๋‚˜?
    ์‚ฌ์šฉ์žEntityCYCLE_STATE-
  • Action : check.userID3

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ์˜ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์žˆ๋Š” ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค์•„์ด๋””๋ฅผ ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
    NUGU--

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1
    ์‚ฌ์šฉ์žEntityuser_ID
    • answer.cycle

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1๋‹˜์˜ ์ •๋ณด๋ฅผ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”.
      NUGUEntityuser_ID-

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๊ทธ๋ž˜
      ์‚ฌ์šฉ์žEntityYON

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œํšŒ์›๋‹˜์˜ ์ด๋ฒˆ ์ƒ๋ฆฌ ์‹œ์ž‘์ผ์€2020-12-3์ด๊ณ , ์ข…๋ฃŒ์ผ์€2020-12-9์ž…๋‹ˆ๋‹ค.
      NUGUBackend Parameter-cycleStart-cycleEnd-
      * answer.noCycle : No real cycle exists in the database
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ž…๋ ฅ๋œ ์ฃผ๊ธฐ๊ฐ€ ์—†๋„ค์š”. ์–ดํ”Œ์—์„œ ์ฃผ๊ธฐ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
      NUGU--
      * answer.wrongID1 : NO id exists in the database
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์กด์žฌํ•˜๋Š” ์•„์ด๋””๊ฐ€ ์—†์–ด์š”. ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค ์•„์ด๋””๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
      NUGU--
      * answer.WRONG1 : YON is no '์˜ˆ'
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ์„ ์ข…๋ฃŒํ• ๊ฒŒ์š”.
      NUGU--

7) Input Real Menstruation

1 - relative date
  • Intent : input.cycle

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋‚˜์˜ค๋Š˜์ƒ๋ฆฌ์‹œ์ž‘ํ–ˆ์–ด
    ์‚ฌ์šฉ์žEntity-DATE-CYCLE-
  • Action : check.userID5

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ์˜ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์žˆ๋Š” ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค์•„์ด๋””๋ฅผ ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
    NUGU--

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1
    ์‚ฌ์šฉ์žEntityuser_ID
    • output.cycleStart

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1๋‹˜์˜ ์ •๋ณด์— ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
      NUGUEntityuser_ID-

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๊ทธ๋ž˜
      ์‚ฌ์šฉ์žEntityYON

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌ ์‹œ์ž‘์ผ์„ ์ž…๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.
      NUGU--
      * answer.wrongID5_1 : No id exists in the database
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์กด์žฌํ•˜๋Š” ์•„์ด๋””๊ฐ€ ์—†์–ด์š”. ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค ์•„์ด๋””๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
      NUGU--
      * answer.WRONG5_1 : YON is not ์˜ˆ'
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ์„ ์ข…๋ฃŒํ• ๊ฒŒ์š”.
      NUGU--
    • output.cycleEnd

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1๋‹˜์˜ ์ •๋ณด์— ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
      NUGUEntityuser_ID-

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๊ทธ๋ž˜
      ์‚ฌ์šฉ์žEntityYON

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌ ์ข…๋ฃŒ์ผ์„ ์ž…๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.
      NUGU--
      - answer.wrongID5_2 : No id eixstis in the database
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์กด์žฌํ•˜๋Š” ์•„์ด๋””๊ฐ€ ์—†์–ด์š”. ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค ์•„์ด๋””๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
      NUGU--
      - answer.WRONG5_2 : YON is not '์˜ˆ'
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ์„ ์ข…๋ฃŒํ• ๊ฒŒ์š”.
      NUGU--
2 - absolute date
  • Intent : input.pastCycleStart

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ2020๋…„12์›”9์ผ์—์ƒ๋ฆฌ ์‹œ์ž‘ํ–ˆ์–ด
    ์‚ฌ์šฉ์žEntitySTART_YEARSTART_MONTHSTART_DATE-PAST_CYCLE_START-
  • Action : add.pastPeriod

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌ ์‹œ์ž‘์„ ์ž…๋ ฅํ•˜์…จ์Šต๋‹ˆ๋‹ค. ์ƒ๋ฆฌ๋ฅผ ๋ฉฐ์น  ๋™์•ˆ ํ•˜์…จ๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”. ์ดํ‹€ ๋™์•ˆ ํ•˜์…จ๋‹ค๋ฉด, 2์ผ์ด๋ผ๊ณ  ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
    NUGU--

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ2์ผ
    ์‚ฌ์šฉ์žEntityPAST_PERIOD-
    • check.userID6

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ์˜ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์žˆ๋Š” ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค์•„์ด๋””๋ฅผ ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
      NUGU--

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1
      ์‚ฌ์šฉ์žEntityuser_ID
      • output.pastCycle

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1๋‹˜์˜ ์ •๋ณด์— ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
        NUGUEntityuser_ID-

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๊ทธ๋ž˜
        ์‚ฌ์šฉ์žEntityYON

        ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌ ์ข…๋ฃŒ์ผ์„ ์ž…๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.
        NUGU--

        - answer.wrongID6 : No id exists in the database
        - answer.WRONG6 : YON is not '์˜ˆ'


8) Input Predicted Menstruation

  • Intent : ask.predictCycle

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ƒ๋ฆฌ ์˜ˆ์ •์ผ์•Œ๋ ค์ค˜
    ์‚ฌ์šฉ์žEntityCYCLE_STATE-
  • Action : check.userID4

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ์˜ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์žˆ๋Š” ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค์•„์ด๋””๋ฅผ ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
    NUGU--

    ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1
    ์‚ฌ์šฉ์žEntityuser_ID
    • answer.predictBleed

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ1๋‹˜์˜ ์ •๋ณด๋ฅผ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”.
      NUGUEntityuser_ID-

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๊ทธ๋ž˜
      ์‚ฌ์šฉ์žEntityYON

      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œํšŒ์›๋‹˜์˜ ๋‹ค์Œ ์ƒ๋ฆฌ๋Š”2020-1-3์— ์‹œ์ž‘ํ•ด์„œ2020-1-9์— ๋๋‚  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
      NUGUBackend Parameter-predictStart-predictEnd-
      * answer.NoPredictBleed : No previous cycle data exists, canno predict future cycle
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์ž…๋ ฅ๋œ ์ฃผ๊ธฐ๊ฐ€ ์—†๋„ค์š”. ์–ดํ”Œ์—์„œ ์ฃผ๊ธฐ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
      NUGU--
      * answer.wrongID4 : No id exists in the database
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ์กด์žฌํ•˜๋Š” ์•„์ด๋””๊ฐ€ ์—†์–ด์š”. ๋ณด๋ฆ„๋‹ฌ ์–ดํ”Œ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ๋ˆ„๊ตฌ ์Šคํ”ผ์ปค ์•„์ด๋””๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
      NUGU--
      * answer.WRONG4 : YON is not '์˜ˆ'
      ์ฃผ์ฒด๋ฐœํ™” ์˜ˆ์‹œ๋ณด๋ฆ„๋‹ฌ์„ ์ข…๋ฃŒํ• ๊ฒŒ์š”.
      NUGU--]

5. Backend Proxy

ย ย ย ย Backend proxy is server used when NUGU playbuilder external data to answer a question.
ย ย ย  Accorind to the NUGU developers guide, version, resultCode, output are mandatory. We made responseController moudle in accordance with sample format.

const resSample = function () {
  let resSample = {
    version: "2.0",
    resultCode: "OK",
    output: {},
  };
  return resSample;
};

module.exports = { resSample };

ย ย ย ย To differentiate application backend and backend proxy, we did routing at teh proxyIndex file, and made functions at teh proxyControllers directory.
ย ย ย Each contoller makes function and returns in accordance with responseController format.

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ