Google์ด ๋ฏธ๊ตญ์์ Pixel ํด๋ํฐ์ ์ถ์ํ ํตํ ์ ๋ณ ๊ธฐ๋ฅ์ ๋ํด ๋ฃ๊ฑฐ๋ ์ฝ์ด๋ณด์
จ์ ๊ฒ์
๋๋ค. ์์ด๋์ด๋ ํ๋ฅญํฉ๋๋ค. ์์ ์ ํ๋ฅผ ๋ฐ์ผ๋ฉด ๊ฐ์ ๋น์๊ฐ ํต์ ์ ์์ํ๊ณ ์ฑํ
ํ์์ผ๋ก ์ด ๋ํ๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ ์ธ์ ๋ ์ง ๋น์ ๋์ ๋งํ๊ธฐ๋ฅผ ์์ํ ์ ์์ต๋๋ค. ์์ฆ ๊ฑฐ์ ์ด๋ด ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๊ตฌ์กฐ
Voximplant์ Dialogflow์ ์๋ ๋ฐฉ์์ ์ค๋ช ํ๋ ๋ฐ ์๊ฐ์ ๋ญ๋นํ์ง ๋ง๊ณ ์ํ ๊ฒฝ์ฐ ์ธํฐ๋ท์์ ์ฝ๊ฒ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ์ด์ Call Screening์ ๊ฐ๋ ์ ๋ํด ์์ ๋ณด๊ฒ ์ต๋๋ค.
๋งค์ผ ์ฌ์ฉํ๊ณ ์ค์ํ ์ ํ๋ฅผ ๋ฐ๋ ํน์ ์ ํ๋ฒํธ๊ฐ ์ด๋ฏธ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ฐํธ, ๋ช
ํจ, ์จ๋ผ์ธ ์์ ์์ฑ ๋ฑ ๋ชจ๋ ๊ณณ์ ํ์๋๋ ๋ ๋ฒ์งธ ๋ฒํธ๊ฐ ํ์ํฉ๋๋ค. ์ด ๋ฒํธ๋ ์์ฐ์ด ์ฒ๋ฆฌ ์์คํ
(์ด ๊ฒฝ์ฐ Dialogflow)์ ์ฐ๊ฒฐ๋๋ฉฐ ๊ทํ๊ฐ ์ํ๋ ๊ฒฝ์ฐ์๋ง ๊ธฐ๋ณธ ๋ฒํธ๋ก ์ ํ๋ฅผ ์ ๋ฌํฉ๋๋ค. ๋ค์ด์ด๊ทธ๋จ ํ์์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค(๊ทธ๋ฆผ์ ํด๋ฆญํ ์ ์์).
์ํคํ
์ฒ๋ฅผ ์ดํดํ๋ฉด ๊ตฌํ์ ๋งก์ ์ ์์ง๋ง ํ ๊ฐ์ง ์ฃผ์ํ ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ด๋ํ๋ Dialogflow์ ์์ ํธ์ถ์ ๊ฐ์ ๋ํ๋ฅผ ํ์ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค๋ ค๋ฉด ๊ฐ๋จํ ์น-ํตํ ์ ๋ณ ์๋ ๋ฐฉ์์ ๋ช
ํํ๊ฒ ๋ณด์ฌ์ฃผ๋ ๋ํ ๋ ๋๋ฌ๊ฐ ํฌํจ๋ ์ ํ๋ฆฌ์ผ์ด์
์
๋๋ค. ์ด ์ ํ๋ฆฌ์ผ์ด์
์๋ ๊ฐ์
๋ฒํผ์ด ์์ผ๋ฉฐ, ์ด ๋ฒํผ์ ๋๋ฅด๋ฉด Voximplant๊ฐ ์์ ๊ฐ์
์๋ฅผ ์ ํ๋ฅผ ๊ฑด ๊ฐ์
์์ ์ฐ๊ฒฐํฉ๋๋ค(ํ์๊ฐ ์ค์ค๋ก ๋ํํ๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒฝ์ฐ).
ะ ะตะฐะปะธะทะฐัะธั
๋ก๊ทธ์ธ
์ด์ด ๋ผ.
๋ค์์ผ๋ก ์ฌ์ฌ ์ ์ฒญ์์ '๋ฒํธ' ์น์
'์ฌ์ฉ ๊ฐ๋ฅ' ํญ์ผ๋ก ์ด๋ํ์ธ์. ์ฌ๊ธฐ์ ๋ฐฉ๊ธ ๊ตฌ๋งคํ ๋ฒํธ๊ฐ ํ์๋ฉ๋๋ค. "์ฒจ๋ถ" ๋ฒํผ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฐ๊ฒฐํฉ๋๋ค. ๋ํ๋๋ ์ฐฝ์์ ๋ชจ๋ ๊ธฐ๋ณธ๊ฐ์ ๊ทธ๋๋ก ๋๊ณ "์ฒจ๋ถ"๋ฅผ ํด๋ฆญํฉ๋๋ค.
์์ฉ ํ๋ก๊ทธ๋จ ๋ด๋ถ์์ "์คํฌ๋ฆฝํธ" ํญ์ผ๋ก ์ด๋ํ์ฌ myscreening ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ญ๋๋ค. ์ฌ๊ธฐ์๋ ๊ธฐ์ฌ์ ์ฝ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฃผ์: ์๋ฒ ๋ณ์์ ๊ฐ์ ngrok ์๋ฒ์ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค(ngrok์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋์ ์์). ๋ํ 31ํ์ ๊ฐ์ ๋์ฒดํ์ญ์์ค. ์ฌ๊ธฐ์ ์ ํ๋ฒํธ๋ ๊ธฐ๋ณธ ๋ฒํธ(์: ๊ฐ์ธ ํด๋ํฐ)์ด๊ณ , voximplant ๋ฒํธ๋ ์ต๊ทผ ๊ตฌ์ ํ ๋ฒํธ์ ๋๋ค.
outbound_call = VoxEngine.callPSTN(โYOUR PHONE NUMBERโ, โVOXIMPLANT NUMBERโ)
ํตํPSTN ํตํ๋ ๋ํ์ ์ฐธ์ฌํ์ฌ ๋ค์ด์ค๋ ๊ฐ์ ์์ ๊ฐ์ธ์ ์ผ๋ก ๋ํํ๊ธฐ๋ก ๊ฒฐ์ ํ ์๊ฐ์ ๋ฐ์ํฉ๋๋ค.
์คํฌ๋ฆฝํธ๋ฅผ ์ ์ฅํ ํ ๊ตฌ๋งคํ ๋ฒํธ์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ "๋ผ์ฐํ " ํญ์ผ๋ก ์ด๋ํ์ฌ ์ ๊ท์น(์ค๋ฅธ์ชฝ ์๋จ์ ์๋ "์ ๊ท์น" ๋ฒํผ)์ ๋ง๋ญ๋๋ค. ์ด๋ฆ(์: allcalls)์ ์ ๊ณตํ๊ณ ๊ธฐ๋ณธ ๋ง์คํฌ(.* - ๋ชจ๋ ์์ ์ ํ๊ฐ ์ด ๊ท์น์ ๋ํด ์ ํ๋ ์คํฌ๋ฆฝํธ์ ์ํด ์ฒ๋ฆฌ๋จ์ ์๋ฏธ)๋ฅผ ๊ทธ๋๋ก ๋๊ณ myscreening ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ํฉ๋๋ค.
๊ท์น์ ์ ์ฅํฉ๋๋ค.
์ด์ ๋ถํฐ ์ ํ๋ฒํธ๊ฐ ์คํฌ๋ฆฝํธ์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ํด์ผ ํ ์ผ์ ๋ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด 'Dialogflow ์ปค๋ฅํฐ' ํญ์ผ๋ก ์ด๋ํ์ฌ ์ค๋ฅธ์ชฝ ์๋จ์ ์๋ 'Dialogflow ์์ด์ ํธ ์ถ๊ฐ' ๋ฒํผ์ ํด๋ฆญํ๊ณ Dialogflow ์์ด์ ํธ์ JSON ํ์ผ์ ์ ๋ก๋ํ์ธ์.
์์/ํ
์คํธ๋ฅผ ์ํ ์์ด์ ํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ค์ ๋งํฌ์์ ์์ด์ ํธ๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
NodeJS์ ๊ฐ๋จํ ๋ฐฑ์๋
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ๋
ธ๋์ ๊ฐ๋จํ ๋ฐฑ์๋๋ฅผ ๋ฐฐํฌํด ๋ณด๊ฒ ์ต๋๋ค.
์ด๋ ๋ ๊ฐ์ ๋ช ๋ น๋ง ์คํํ๋ฉด ๋๋ ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
npm install
node index.js
์๋ฒ๋ ์์คํ
์ ํฌํธ 3000์์ ์คํ๋๋ฏ๋ก Voximplant ํด๋ผ์ฐ๋์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ngrok ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ค์นํ ๋
ngrok http 3000
ngrok์ด ๋ก์ปฌ ์๋ฒ์ ๋ํด ์์ฑํ ๋๋ฉ์ธ ์ด๋ฆ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ณต์ฌํ์ฌ ์๋ฒ ๋ณ์์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
ํด๋ผ์ด์ธํธ
ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ฑํ
์ฒ๋ผ ๋ณด์
๋๋ค.
๋ชจ๋ ํ์ผ์ ์น ์๋ฒ์ ์ผ๋ถ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํ๋ฉด ์๋ํฉ๋๋ค. script.js ํ์ผ์์ ์๋ฒ ๋ณ์๋ฅผ ngrok ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๊ณ , ์์ ์ ๋ณ์๋ฅผ ๊ตฌ๋งคํ ๋ฒํธ๋ก ๋ฐ๊พธ์ธ์. ํ์ผ์ ์ ์ฅํ๊ณ ๋ธ๋ผ์ฐ์ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ์์ด๋ฉด ๊ฐ๋ฐ์ ํจ๋์ WebSocket ์ฐ๊ฒฐ์ด ํ์๋ฉ๋๋ค.
ะะตะผะพ
์ด ๋น๋์ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค์ ๋ก ์๋ํ๋ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค.
PS ๊ฐ์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ฐ์ ์๋ ๋ด ์ ํ๋ฒํธ๋ก ์ฐ๊ฒฐ๋๊ณ , ์ฐ๊ฒฐ ๋๊ธฐ๋ฅผ ํด๋ฆญํ๋ฉด...? ๊ทธ๋ ๊ตฐ์. ํตํ๊ฐ ๋์ด์ง๋๋ค.
์ถ์ฒ : habr.com