๊ตฌ๊ธ ์ด์์คํดํธ ์ฑ์ https://console.actions.google.com/ ๊ตฌ๊ธ ์จ ์ก์ ์์ ๋ง๋ ๋ค
๊ตฌ๊ธ ์จ ์ก์ ์์ DialogFlow์ ์ฐ๋ํ๋ฉด ํธํ๋ค
DialogFlow์์ Response ๊ธฐ๋ฅ์ ์์ฒด๊ธฐ๋ฅ์ ์ฐ๋ฉด ์๋๊ณ , Fulfillment๋ก ๋ฐ๋ก ๊ตฌํํด์ผํ๋ค
Fulfillment์์ Firebase Function์ ์ฐ๋ฉด ์๋๋ค. Firebase Function์ ์ธ๋ถ๋ก Requst๋ฅผ ๋ณด๋ผ ์ ์๋ค. ์ฆ Firebase Function๋ก ํ์ฑ์ ํด์ฌ ์ ์๋ค๋๊ฑฐ๋ค.
์ธ๋ถ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด HTTPS๋ก ์ฐ๊ฒฐ๋์ด์ผํ๋ค. HTTPS๋ Heroku๊ฐ ์ง์ํ๋, Heroku์ ์๋ฒ๋ฅผ ๋ง๋ค๋ฉด ๋ ...๊ฒ๊ฐ์ง๋ง Heroku๋ ์ค๋ซ๋์ ์ฌ์ฉ์ ํ์ง ์์ผ๋ฉด ์ฌ๋ฆฝ์ ๋น ์ง๋ค. ์ด ์ฌ๋ฆฝ์ ๊นจ์ฐ๋๋ฐ๋ ์๊ฐ์ด ์์๋๋๋ฐ, ์ฝ 30์ด์ ๋ ์์๋๋ค. ๊ฐ๋ Assistant๊ฐ ์๋ฒ ์๋ต์ด ์๋์ค์๊ณ ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฌ๋ ์ฌํ๊ฐ ๋ฐ์ํจ์ผ๋ก, Heroku๋ฅผ ์ฌ์ฉํ ๊ฑฐ๋ฉด ์ ๋ฃ ์๊ธ์ ๋ฅผ ์ฌ์ฉํ๋๋ก ํ์.
ํ์๋ Naver Cloud Platform์ ๋ฌด๋ฃ์๋ฒ๋ฅผ ์ด์ฉํ๋ค. NCP ๋ฌด๋ฃ์๋ฒ๋ ๊ฝค ์ธ๋งํ ์๋๊ฐ ๋์จ๋ค. ๊ฐ๋ฐ์ฉ ๋ฐ ์ฐ์ต์ฉ์ผ๋ก๋ ๋ํ ๋์ ์์ด ์ข๋ค. ํ์ง๋ง ๋ฌธ์ ๊ฐ ์๋ค๋ฉด, GUI๋ฅผ ์ค์น์์ ๊ฝค ๋ง์ด ๋๋ฆฌ๋ค.
์ ๋ฃ ์๋ฒ๋ ์ฒซ๋ฒ์งธ๋ก ๋ฐ๋ฅธํด๋ผ์ฐ๋๋ฅผ ์ถ์ฒํ๋ค. ๋ฐ๋ฅธํด๋ผ์ฐ๋์ ๊ฐ๋ฐ์์ฉ ์๊ธ์ ๋ ์ต์ 4000์๋ถํฐ ์์ํ๋ค. ์ฌ์์ ๋จ1GB, ์ ์ฅ๊ณต๊ฐ 50GB, ๋๋ฉ์ธ barun.cloud๋ฅผ ์ ๊ณตํ๋ค. OS๋ ์๋์ฐ๋ฅผ ์ง์ํ๋ค. ํ ์ธํ์ฌ๋ฅผ ์์ฃผํ๋ ํ ์ธ์ ๋
ธ๋ ค๋ณด์.
๋๋ฒ์งธ๋ก๋ ์คํ์ด๋ท์ ์ถ์ฒํ๋ค. ์คํ์ด๋ท์ ๋ฐ๋ฅธํด๋ผ์ฐ๋๋ณด๋ค๋ ์ด์ง ๋น์ธ์ง๋ง ๊ทธ๋งํผ ์์ ๊ฐ์ด ์๋ค.
Node.js๋ก ์๋ฒ๋ฅผ ๋ง๋๋๊ฒฝ์ฐ NPM์ k-lunch ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๊ฒ์ ์ถ์ฒํ๋ค. k-lunch ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๊ต ์ด๋ฆ๊ณผ ์ด๋ฑํ๊ต, ์คํ๊ต, ๊ณ ๋ฑํ๊ต์ธ์ง์ ๋ ์ง๋ง ์ ๋ ฅํด์ฃผ๋ฉด ์์์ ๋ณด์ ์๋จ์ด JSON์ผ๋ก ์ข ๋์จ๋ค. ํ์ฑ์ ๊ฐ ํ๊ต๊ฐ ์์๋์ด์๋ ๊ต์ก์ฒญ์์ ๋ฐ์์ค๋๋ฏํ๋ค. ๋ด๊ฐ ํด๋ณด๊ฒ ๋ค๊ณ ๋ณ ์์ผ๋ฅผ ๋ถ๋ฆฌ์ง ๋ง๊ณ , ๊ทธ๋ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ์. NPM ์ฌ๋ํด์
์ด๋ ๊ฒ ๋ง๋ค์ด๋์ผ๋ฉด ์์ง์ ์ผ๋ฐ์ธ์๊ฒ ๊ณต๊ฐ๋์ง ์์์ง๋ง '์นด์นด์คi ์คํ๋น๋'๋ ํจ๊ป ์ฐ๋์ํฌ ์ ์์๊ฒ๊ฐ๋ค. ์ ์ถ๋ ์นด์นด์คi ๋์๋ง์ ๋ณด๋ฉด ๋ค์ด์ผ๋ก๊ทธํ๋ก์ฐ์ ๋งค์ฐ ๋น์ทํ๋ค.
๋ถ๋ ์๋ ๊ธ์๋ง ์๋ ค์ฃผ๊ณ ๋๊ฐ์ง๋ ๋ด์ ๋ง๋๋ ค๋ฉด Default Welcome Intent์์ Fulfillment๋ฅผ ์ค์ ํ๊ณ Set This Intent as end of conversation์ ์ค์ ํ๋ฉด ๋๋ค.
์๋๋ fulfillment ์ธ๋ถ์๋ฒ์ ๊ธฐ๋ณธ ํ ํ๋ฆฟ์ด๋ค
const express = require('express')
const app = express()
app.post('/', (req, res) => {
res.json({
fulfillmentText: '๋ต์ฅ'
})
})
์ด๊ฒ์ '๋ต์ฅ'์ด๋ผ๋ ๋ง๋ง ํ๋ ์๋ฒ์ด๋ค. ์๋ฌด๊ฒ๋ ๋ชปํ๋ค.
DialogFlow์ธก์์ ๋ณด๋ธ POST ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ ค๋ฉด body-parser๊ฐ ํ์ํ๋ค
npm i --save body-parser
Body-parser๋ฅผ Express์ธก์์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด '๋ body-parser ์ฌ์ฉํ ๊ฑฐ์ผ'๋ผ๊ณ Expressํํ
๋งํด์ผํ๋ค.
const express = require('express')
const app = express()
app.use(bodyParser.json())
app.post('/', (req, res) => {
res.json({
fulfillmentText: '๋ต์ฅ'
})
})
POST ๋ฐ์ดํฐ๋ req.body์ ๋ด๊ฒจ์๋ค.
๋ฐ์ดํฐ๋ ๊ฐ๊ฐ ๋ค์์ ์์น์ ์๋ค
Intent ์ ๋ณด: req.body.queryResult.intent.displayName
Entity ์ ๋ณด: req.body.queryResult.parameters
์ํ๊น๊ฒ๋, ๋ชจ๋ ์ธํ ํธ๊ฐ ํ๋์ Fulfillment๋ฅผ ์ฌ์ฉํ๋ค. ๊ณ ๋ก ์ธํ ํธ ๋ถ๊ธฐ๋ req.body.queryResult.intent.displayName๋ก ํด์ผํ๋ค.