FreePBX ์ดํ•ด ๋ฐ Bitrix24 ๋“ฑ๊ณผ ํ†ตํ•ฉ

๋น„ํŠธ๋ฆญ์Šค24 CRM, ์›Œํฌํ”Œ๋กœ, ํšŒ๊ณ„ ๋ฐ ๊ด€๋ฆฌ์ž๊ฐ€ ์ •๋ง ์ข‹์•„ํ•˜๊ณ  IT ์ง์›์ด ์ข‹์•„ํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค์„ ๊ฒฐํ•ฉํ•œ ๊ฑฐ๋Œ€ํ•œ ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค. ์ด ํฌํ„ธ์€ ์†Œ๊ทœ๋ชจ ํด๋ฆฌ๋‹‰, ์ œ์กฐ์—…์ฒด, ์‹ฌ์ง€์–ด ๋ฏธ์šฉ์‹ค์„ ํฌํ•จํ•œ ๋งŽ์€ ์ค‘์†Œ๊ธฐ์—…์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๊ฐ€ "์ข‹์•„ํ•˜๋Š”"์ฃผ์š” ๊ธฐ๋Šฅ์€ ์ „ํ™” ํ†ต์‹ ๊ณผ CRM์˜ ํ†ตํ•ฉ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํ†ตํ™”๊ฐ€ CRM์— ์ฆ‰์‹œ ๊ธฐ๋ก๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์นด๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ˆ˜์‹ ์‹œ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋˜๋ฉฐ ๊ทธ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€, ๊ทธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ฆ‰์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ” ์ˆ˜ ์žˆ๊ณ  ๊ทธ๊ฐ€ ๋นš์ง„ ๊ธˆ์•ก. ๊ทธ๋Ÿฌ๋‚˜ Bitrix24์˜ ์ „ํ™” ํ†ต์‹  ๋ฐ CRM๊ณผ์˜ ํ†ตํ•ฉ์—๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๋ฉฐ ๋•Œ๋กœ๋Š” ๋งŽ์€ ๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๊ฐœ๋ฐฉํ˜• ๋„๊ตฌ ๋ฐ ์ธ๊ธฐ์žˆ๋Š” IP PBX์™€์˜ ํ†ตํ•ฉ ๊ฒฝํ—˜์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. FreePBX, ๋˜ํ•œ ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„์˜ ์ž‘์—… ๋…ผ๋ฆฌ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

์ €๋Š” IP ํ…”๋ ˆํฌ๋‹ˆ๋ฅผ ํŒ๋งค ๋ฐ ๊ตฌ์„ฑํ•˜๊ณ  ํ†ตํ•ฉํ•˜๋Š” ํšŒ์‚ฌ์—์„œ ์•„์›ƒ์†Œ์‹ฑ ์—…์ฒด๋กœ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Bitrix24๋ฅผ ๊ณ ๊ฐ์ด ๋ณด์œ ํ•œ PBX ๋ฐ ๋‹ค์–‘ํ•œ VDS ํšŒ์‚ฌ์˜ ๊ฐ€์ƒ PBX์™€ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ๊ณผ ์ด ํšŒ์‚ฌ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์งˆ๋ฌธ์„ ๋ฐ›์•˜์„ ๋•Œ ์ €๋Š” Google๋กœ ๊ฐ”์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก  ๊ทธ๋Š” ๋‚˜์—๊ฒŒ ๋งํฌ๋ฅผ ์ฃผ์—ˆ๋‹ค ํ•˜๋ธŒ๋ฅด ๊ธฐ์‚ฌ์„ค๋ช…๊ณผ github๊ฐ€ ๋ชจ๋‘ ์žˆ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์„ ๋•Œ Bitrix24๋Š” ๋” ์ด์ƒ ์ด์ „๊ณผ ๋™์ผํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋งŽ์€ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ FreePBX๋Š” ๋‹จ์ˆœํ•œ ๋ณ„ํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ ํŽธ์˜์„ฑ๊ณผ ํ•˜๋“œ ์ฝ”์–ด ๋‹ค์ด์–ผ ํ”Œ๋žœ์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ผ์˜ ๋…ผ๋ฆฌ๋ฅผ ์—ฐ๊ตฌํ•ฉ๋‹ˆ๋‹ค

๋”ฐ๋ผ์„œ ์šฐ์„  ๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. PBX(์ œ๊ณต์ž์˜ SIP INVITE ์ด๋ฒคํŠธ)์—์„œ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ „ํ™”๋ฅผ ๋ฐ›์œผ๋ฉด ๋‹ค์ด์–ผํ”Œ๋žœ(๋‹ค์ด์–ผ ํ”Œ๋žœ, ๋‹ค์ด์–ผ ํ”Œ๋žœ) ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ท์—์„œ ๊ทœ์น™์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SIP์˜ ๋‚ด๋ถ€๋ฅผ ์—ฐ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ๋„๊ตฌ๋Š” ๋ถ„์„๊ธฐ์ž…๋‹ˆ๋‹ค. sngrep (๋งํฌ) apt install/yum install ๋“ฑ์„ ํ†ตํ•ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฐํฌํŒ์— ๊ฐ„๋‹จํžˆ ์„ค์น˜๋˜์ง€๋งŒ ์†Œ์Šค์—์„œ ๋นŒ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. sngrep์—์„œ ํ†ตํ™” ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

FreePBX ์ดํ•ด ๋ฐ Bitrix24 ๋“ฑ๊ณผ ํ†ตํ•ฉ

๋‹จ์ˆœํ™”๋œ ํ˜•ํƒœ์—์„œ ๋‹ค์ด์–ผํ”Œ๋žœ์€ ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ท๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ๋•Œ๋กœ๋Š” ๋Œ€ํ™” ์ค‘์— ํ†ตํ™”๊ฐ€ ์ „์†ก๋˜๊ณ  ๋ฒ„ํŠผ ๋ˆ„๋ฆ„(DTMF), FollowMe, RingGroup, IVR ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํฅ๋ฏธ๋กœ์šด ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๋Œ€ ํŒฉ ๋‚ด์šฉ๋ฌผ

FreePBX ์ดํ•ด ๋ฐ Bitrix24 ๋“ฑ๊ณผ ํ†ตํ•ฉ

์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ„๋‹จํ•œ ๋‹ค์ด์–ผ ํ”Œ๋žœ์€ ์ฒ˜์Œ ๋‘ ํ•„๋“œ์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ์ „์ฒด ๋…ผ๋ฆฌ๋Š” DID ๋ฐ CallerID๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. DID - ์šฐ๋ฆฌ๊ฐ€ ์ „ํ™”ํ•˜๋Š” ๊ณณ, CallerID - ์ „ํ™”ํ•˜๋Š” ์‚ฌ๋žŒ.

๊ทธ๋Ÿฌ๋‚˜ ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ์ „ํ™”๊ฐ€ ์•„๋‹Œ ํšŒ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, PBX์—๋Š” ๋„์‹œ ๋ฒˆํ˜ธ (Ring Group), IVR (Hello, you called ... Press)์— ํ†ตํ™” ๊ทธ๋ฃน (์—ฌ๋Ÿฌ ์žฅ์น˜์˜ ๋™์‹œ / ์—ฐ์† ๋ฒจ ์šธ๋ฆผ)์ด์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค ํ•˜๋‚˜๋Š” ...), ์‘๋‹ต๊ธฐ(๋ฌธ๊ตฌ), ์‹œ๊ฐ„ ์กฐ๊ฑด, ๋‹ค๋ฅธ ๋ฒˆํ˜ธ ๋˜๋Š” ์…€๋กœ ์ฐฉ์‹  ์ „ํ™˜(FollowMe, ์ฐฉ์‹  ์ „ํ™˜). ์ฆ‰, ์‹ค์ œ๋กœ ์ „ํ™”๋ฅผ ๋ฐ›์„ ์‚ฌ๋žŒ๊ณผ ์ „ํ™”๊ฐ€ ์™”์„ ๋•Œ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆŒ ์‚ฌ๋žŒ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ฒฐ์ •ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ณ ๊ฐ์˜ PBX์—์„œ ์ผ๋ฐ˜์ ์ธ ํ†ตํ™” ์‹œ์ž‘์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

FreePBX ์ดํ•ด ๋ฐ Bitrix24 ๋“ฑ๊ณผ ํ†ตํ•ฉ

ํ†ตํ™”๊ฐ€ PBX์— ์„ฑ๊ณต์ ์œผ๋กœ ๋“ค์–ด๊ฐ„ ํ›„ ๋‹ค๋ฅธ "์ปจํ…์ŠคํŠธ"์—์„œ ๋‹ค์ด์–ผ ํ”Œ๋žœ์„ ํ†ตํ•ด ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. Asterisk์˜ ๊ด€์ ์—์„œ ์ปจํ…์ŠคํŠธ๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„ ๋ช…๋ น ์ง‘ํ•ฉ์ด๋ฉฐ ๊ฐ ๋ช…๋ น์—๋Š” ์ „ํ™”๋ฅผ ๊ฑด ๋ฒˆํ˜ธ๋ณ„๋กœ ํ•„ํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(exten=DID ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ์™ธ๋ถ€ ํ˜ธ์ถœ์˜ ๊ฒฝ์šฐ exten์ด๋ผ๊ณ  ํ•จ). ๋‹ค์ด์–ผํ”Œ๋žœ ๋ผ์ธ์˜ ๋ช…๋ น์€ ๋ฌด์—‡์ด๋“  ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค - ๋‚ด๋ถ€ ๊ธฐ๋Šฅ(์˜ˆ: ๋‚ด๋ถ€ ๊ฐ€์ž…์ž ํ˜ธ์ถœ - Dial(), ์ „ํ™”๊ธฐ ๋‚ด๋ ค๋†” - Hangup()), ์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์ž(IF, ELSE, ExecIF ๋“ฑ), ์ด ์ปจํ…์ŠคํŠธ์˜ ๋‹ค๋ฅธ ๊ทœ์น™์œผ๋กœ ์ „ํ™˜(Goto, GotoIF), ํ•จ์ˆ˜ ํ˜ธ์ถœ(Gosub, Macro)์˜ ํ˜•ํƒœ๋กœ ๋‹ค๋ฅธ ์ปจํ…์ŠคํŠธ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ์ง€์นจ include ะธะผั_ะบะพะฝั‚ะตะบัั‚ะฐ, ๋‹ค๋ฅธ ์ปจํ…์ŠคํŠธ์˜ ๋ช…๋ น์„ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์˜ ๋์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. include๋ฅผ ํ†ตํ•ด ํฌํ•จ๋œ ๋ช…๋ น์€ ํ•ญ์ƒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ›„ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์˜ ๋ช…๋ น.

FreePBX์˜ ์ „์ฒด ๋…ผ๋ฆฌ๋Š” Gosub, Macro ๋ฐ Handler ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•œ ํฌํ•จ ๋ฐ ํ˜ธ์ถœ์„ ํ†ตํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ์ปจํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋“ค์–ด์˜ค๋Š” FreePBX ํ˜ธ์ถœ์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

FreePBX ์ดํ•ด ๋ฐ Bitrix24 ๋“ฑ๊ณผ ํ†ตํ•ฉ

ํ˜ธ์ถœ์€ ์œ„์—์„œ ์•„๋ž˜๋กœ ์ฐจ๋ก€๋กœ ๋ชจ๋“  ์ปจํ…์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ปจํ…์ŠคํŠธ์—์„œ ๋งคํฌ๋กœ(Macro), ํ•จ์ˆ˜(Gosub) ๋˜๋Š” ์ „ํ™˜(Goto)๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•ญ๋ชฉ์˜ ์‹ค์ œ ํŠธ๋ฆฌ๋Š” ๋กœ๊ทธ์—์„œ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ PBX์˜ ์ผ๋ฐ˜์ ์ธ ์„ค์ • ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ „ํ™”๋ฅผ ๊ฑธ๋ฉด ๋“ค์–ด์˜ค๋Š” ๊ฒฝ๋กœ์—์„œ DID๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ž„์‹œ ์กฐ๊ฑด์„ ํ™•์ธํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ด๋ฉด ์Œ์„ฑ ๋ฉ”๋‰ด๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์—์„œ ๋ฒ„ํŠผ 1์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ์‹œ๊ฐ„ ์ดˆ๊ณผํ•˜์—ฌ ์ „ํ™” ๊ฑธ๊ธฐ ์šด์˜์ž ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๊ฐ‘๋‹ˆ๋‹ค. ํ†ตํ™”๊ฐ€ ๋๋‚˜๋ฉด hangupcall ๋งคํฌ๋กœ๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ๊ทธ ํ›„์—๋Š” ํŠน์ˆ˜ ์ฒ˜๋ฆฌ๊ธฐ(hangup ์ฒ˜๋ฆฌ๊ธฐ)๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‹ค์ด์–ผ ํ”Œ๋žœ์—์„œ ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

FreePBX ์ดํ•ด ๋ฐ Bitrix24 ๋“ฑ๊ณผ ํ†ตํ•ฉ

์ด ํ†ตํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ CRM์— ํ†ตํ™” ์‹œ์ž‘์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋…น์Œ์„ ์‹œ์ž‘ํ•  ์œ„์น˜, ๋…น์Œ์„ ์ข…๋ฃŒํ•˜๊ณ  CRM์— ๋Œ€ํ•œ ํ†ตํ™”์— ๋Œ€ํ•œ ์ •๋ณด์™€ ํ•จ๊ป˜ ์ „์†กํ•ด์•ผ ํ•˜๋Š” ์œ„์น˜๋Š” ์–ด๋””์ž…๋‹ˆ๊นŒ?

์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ

PBX ๋ฐ CRM ํ†ตํ•ฉ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด ๋‘ ํ”Œ๋žซํผ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ์™€ ์ด๋ฒคํŠธ๋ฅผ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋กœ์—๊ฒŒ ์ „์†กํ•˜๋Š” ์„ค์ • ๋ฐ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ๋…๋ฆฝ ์‹œ์Šคํ…œ์ด ํ†ต์‹ ํ•˜๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ API๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ API์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ HTTP REST์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณ„ํ‘œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ๋ณ„ํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • AGI - ๋‹ค์ด์–ผํ”Œ๋žœ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์™ธ๋ถ€ ํ”„๋กœ๊ทธ๋žจ/๊ตฌ์„ฑ ์š”์†Œ์˜ ๋™๊ธฐ์‹ ํ˜ธ์ถœ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ง€, ํŽ˜์ด์ง€

  • AMI - ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ํ…์ŠคํŠธ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๋Š” ์›์น™์— ๋”ฐ๋ผ ์ž‘๋™ํ•˜๋Š” ํ…์ŠคํŠธ TCP ์†Œ์ผ“์œผ๋กœ ๋‚ด๋ถ€์—์„œ SMTP์™€ ์œ ์‚ฌํ•˜๋ฉฐ ์ด๋ฒคํŠธ๋ฅผ ์ถ”์ ํ•˜๊ณ  ํ˜ธ์ถœ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ๋ฏธ - Asterisk์™€์˜ ์—ฐ๊ฒฐ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”

AMI ์ถœ๋ ฅ ์˜ˆ์‹œ

์ด๋ฒคํŠธ: ์ƒˆ ์ฑ„๋„
๊ถŒํ•œ: ํ˜ธ์ถœ, ๋ชจ๋‘
์ฑ„๋„: PJSIP/VMS_pjsip-0000078b
์ฑ„๋„ ์ƒํƒœ: 4
ChannelStateDesc: ๋ง
๋ฐœ์‹ ๋ฒˆํ˜ธ: 111222
๋ฐœ์‹ ๋ฒˆํ˜ธ: 111222
์—ฐ๊ฒฐ๋œ ๋ผ์ธ ๋ฒˆํ˜ธ:
์—ฐ๊ฒฐ๋œ ํšŒ์„  ์ด๋ฆ„:
์–ธ์–ด : English
๊ณ„์ • ์ฝ”๋“œ:
์ปจํ…์ŠคํŠธ: from-pstn
์—ฐ์žฅ: s
์šฐ์„  ์ˆœ์œ„ : 1
๊ณ ์œ  ID: 1599589046.5244
๋งํฌ๋“œID: 1599589046.5244

  • ARI๋Š” ๋ชจ๋‘ REST, WebSocket์„ ํ†ตํ•ด JSON ํ˜•์‹์œผ๋กœ ํ˜ผํ•ฉ๋˜์–ด ์žˆ์ง€๋งŒ ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋ž˜ํผ๊ฐ€ ์žˆ์–ด ๊ทธ๋‹ค์ง€ ์ข‹์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.ํŒŒํŒŒ๋ฆฌ์•„, ํŒŒํŒŒ๋ฆฌ) ์•ฝ 3๋…„ ์ „์— ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ†ตํ™” ์‹œ์ž‘ ์‹œ ARI ์ถœ๋ ฅ์˜ ์˜ˆ

{ "variable":"CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "channel":{ "id ยป:ยป1599644315.5334โ€ณ, ยซ์ด๋ฆ„ยป:ยปPJSIP/VMSpjsip-000007b6โ€ณ, "์ƒํƒœ":"๋ง", "๋ฐœ์‹ ์ž":{ "์ด๋ฆ„":"111222โ€ณ, "๋ฒˆํ˜ธ":"111222โ€ณ }, "์—ฐ๊ฒฐ๋จ":{ "์ด๋ฆ„":"", "๋ฒˆํ˜ธ" :"" }, "accountcode":"", "dialplan":{ "context":"from-pstn", "exten":"s", "priority":2, "์•ฑ์ด๋ฆ„":"์Šคํ…Œ์ด์‹œ์Šค", "์•ฑdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"ko" }, "๋ณ„ํ‘œid":"48:5b:aa:aa:aa:aa", "์‘์šฉ ํ”„๋กœ๊ทธ๋žจ":"hello-world" }

ํŽธ์˜์„ฑ ๋˜๋Š” ๋ถˆํŽธํ•จ, ํŠน์ • API๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. CRM๊ณผ์˜ ํ†ตํ•ฉ ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ†ตํ™” ์‹œ์ž‘, ์ „์†ก๋œ ์œ„์น˜ ์ถ”์ , CallerID, DID, ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ ์‹œ๊ฐ„, ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ(์ „ํ™”์™€ CRM ์‚ฌ์šฉ์ž ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ฒ€์ƒ‰)

  • ํ†ตํ™” ๋…น์Œ ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ, ์›ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์ €์žฅ, ๋…น์Œ ์ข…๋ฃŒ ์‹œ ํŒŒ์ผ ์œ„์น˜ ์•Œ๋ฆผ

  • ํ”„๋กœ๊ทธ๋žจ์—์„œ ์™ธ๋ถ€ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ํ˜ธ์ถœ ์‹œ์ž‘, ๋‚ด๋ถ€ ๋ฒˆํ˜ธ, ์™ธ๋ถ€ ๋ฒˆํ˜ธ ํ˜ธ์ถœ ๋ฐ ์—ฐ๊ฒฐ

  • ์„ ํƒ ๊ณผ๋ชฉ: CRM, ๋‹ค์ด์–ผ๋Ÿฌ ๊ทธ๋ฃน ๋ฐ FollowME์™€ ํ†ตํ•ฉํ•˜์—ฌ ์žฅ์†Œ๊ฐ€ ์—†์„ ๋•Œ ์ž๋™์œผ๋กœ ํ†ตํ™”๋ฅผ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค(CRM์— ๋”ฐ๋ฆ„).

์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ž‘์—…์€ AMI ๋˜๋Š” ARI๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ARI๋Š” ํ›จ์”ฌ ์ ์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ด๋ฒคํŠธ๊ฐ€ ๋งŽ์ง€ ์•Š์œผ๋ฉฐ AMI๊ฐ€ ์—ฌ์ „ํžˆ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋งŽ์€ ๋ณ€์ˆ˜(์˜ˆ: ๋งคํฌ๋กœ ํ˜ธ์ถœ, ๋งคํฌ๋กœ ๋‚ด๋ถ€ ๋ณ€์ˆ˜ ์„ค์ •, ํ˜ธ์ถœ ๋…น์Œ ํฌํ•จ)๊ฐ€ ์ถ”์ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •ํ™•ํ•˜๊ณ  ์ •ํ™•ํ•œ ์ถ”์ ์„ ์œ„ํ•ด ์ง€๊ธˆ์€ AMI๋ฅผ ์„ ํƒํ•ฉ์‹œ๋‹ค(์™„์ „ํ•˜์ง€๋Š” ์•Š์Œ). ๋˜ํ•œ (์Œ, ๊ทธ๊ฒƒ ์—†์ด๋Š” ๊ฒŒ์œผ๋ฅธ ์‚ฌ๋žŒ๋“ค์ž…๋‹ˆ๋‹ค)-์›์ž‘์—์„œ (ํ•˜๋ธŒ๋ฅด ๊ธฐ์‚ฌ) PAMI๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. *๊ทธ๋Ÿฐ ๋‹ค์Œ ARI์— ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•˜์ง€๋งŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ†ตํ•ฉ ์žฌ์ฐฝ์กฐ

FreePBX๊ฐ€ ํ†ตํ™” ์‹œ์ž‘, ์ข…๋ฃŒ ์‹œ๊ฐ„, ๋ฒˆํ˜ธ, ๋…น์Œ ํŒŒ์ผ ์ด๋ฆ„์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ AMI์— ๋ณด๊ณ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด ์›๋ž˜ ์ž‘์„ฑ์ž์™€ ๋™์ผํ•œ ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ†ตํ™” ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์‰ฝ์Šต๋‹ˆ๋‹ค. - ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์กด์žฌ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์ถœ๋ ฅ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. PAMI๋Š” ๋‹จ์ˆœํžˆ ํ•„ํ„ฐ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ํ†ตํ™” ์‹œ์ž‘ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๊ณ ์œ ํ•œ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค(s๋Š” DID ๊ฒ€์ƒ‰์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ˆ˜ํ–‰๋˜๋Š” ๋‹ค์ด์–ผ ํ”Œ๋žœ์˜ ํŠน์ˆ˜ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค).

[ext-did-custom]

exten => s,1,Set(CallStart=${STRFTIME(epoch,,%s)})

์ด ๋ผ์ธ์— ๋Œ€ํ•œ ์˜ˆ์ œ AMI ์ด๋ฒคํŠธ

์ด๋ฒคํŠธ: ์ƒˆ ์ฑ„๋„

๊ถŒํ•œ: ํ˜ธ์ถœ, ๋ชจ๋‘

์ฑ„๋„: PJSIP/VMS_pjsip-0000078b

์ฑ„๋„ ์ƒํƒœ: 4

ChannelStateDesc: ๋ง

๋ฐœ์‹ ๋ฒˆํ˜ธ: 111222

๋ฐœ์‹ ๋ฒˆํ˜ธ: 111222

์—ฐ๊ฒฐ๋œ ๋ผ์ธ ๋ฒˆํ˜ธ:

์—ฐ๊ฒฐ๋œ ํšŒ์„  ์ด๋ฆ„:

์–ธ์–ด : English

๊ณ„์ • ์ฝ”๋“œ:

์ปจํ…์ŠคํŠธ: from-pstn

์—ฐ์žฅ: s

์šฐ์„  ์ˆœ์œ„ : 1

๊ณ ์œ  ID: 1599589046.5244

๋งํฌ๋“œID: 1599589046.5244

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜: AppData ์„ค์ •:

ํ†ตํ™”์‹œ์ž‘=1599571046

FreePBX๋Š” extension.conf ๋ฐ extension_ ํŒŒ์ผ์„ ๋ฎ์–ด ์“ฐ๊ธฐ ๋•Œ๋ฌธ์—additional.conf ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ™•์žฅ์ž_๊ด€์Šต.conf

extension_custom.conf์˜ ์ „์ฒด ์ฝ”๋“œ

[globals]	
;; ะŸั€ะพะฒะตั€ัŒั‚ะต ะฟัƒั‚ะธ ะธ ะฟั€ะฐะฒะฐ ะฝะฐ ะฟะฐะฟะบะธ - ัŽะทะตั€ asterisk ะดะพะปะถะตะฝ ะธะผะตั‚ัŒ ะฟั€ะฐะฒะฐ ะฝะฐ ะทะฐะฟะธััŒ
;; ะกัŽะดะฐ ะฑัƒะดะตั‚ ะฟะธัะฐั‚ัŒัั ั€ะฐะทะณะพะฒะพั€ั‹
WAV=/var/www/html/callme/records/wav 
MP3=/var/www/html/callme/records/mp3

;; ะŸะพ ัั‚ะธะผ ะฟัƒั‚ัะผ ะฑัƒะดะตั‚ ะฒะพัะฟั€ะพะธะทะฒะพะดะธั‚ัั ะธ ัะบะฐั‡ะธะฒะฐั‚ัŒัั ะทะฐะฟะธััŒ
URLRECORDS=https://www.host.ru/callmeplus/records/mp3

;; ะะดั€ะตั ะดะปั ะบะฐะปะฑะตะบะฐ ะฟั€ะธ ะธัั…ะพะดัั‰ะตะผ ะฒั‹ะทะพะฒะต
URLPHP=https://www.host.ru/callmeplus

;; ะ”ะฐ ะฟะธัˆะตะผ ั€ะฐะทะณะพะฒะพั€ั‹
RECORDING=1

;; ะญั‚ะพ ะผะฐะบั€ะพั ะดะปั ะทะฐะฟะธัะธ ั€ะฐะทะณะพะฒะพั€ะพะฒ ะฒ ะฝะฐัˆัƒ ะฟะฐะฟะบัƒ. 
;; ะœะพะถะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะธ ัะธัั‚ะตะผะฝัƒัŽ ะทะฐะฟะธััŒ, ะฝะพ ะฟะพะบะฐ ะฟัƒัั‚ัŒ ะฑัƒะดะตั‚ ัั‚ะฐ - 
;; ะพะฝะฐ ั€ะฐะฑะพั‚ะฐะตั‚
[recording]
exten => ~~s~~,1,Set(LOCAL(calling)=${ARG1})
exten => ~~s~~,2,Set(LOCAL(called)=${ARG2})
exten => ~~s~~,3,GotoIf($["${RECORDING}" = "1"]?4:14)
exten => ~~s~~,4,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called})
exten => ~~s~~,5,Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)})
exten => ~~s~~,6,System(mkdir -p ${MP3}/${datedir})
exten => ~~s~~,7,System(mkdir -p ${WAV}/${datedir})
exten => ~~s~~,8,Set(monopt=nice -n 19 /usr/bin/lame -b 32  --silent "${WAV}/${datedir}/${fname}.wav"  "${MP3}/${datedir}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${datedir}/${fname}.mp3")
exten => ~~s~~,9,Set(FullFname=${URLRECORDS}/${datedir}/${fname}.mp3)
exten => ~~s~~,10,Set(CDR(filename)=${fname}.mp3)
exten => ~~s~~,11,Set(CDR(recordingfile)=${fname}.wav)
exten => ~~s~~,12,Set(CDR(realdst)=${called})
exten => ~~s~~,13,MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt})
exten => ~~s~~,14,NoOp(Finish if_recording_1)
exten => ~~s~~,15,Return()


;; ะญั‚ะพ ะพัะฝะพะฒะฝะพะน ะบะพะฝั‚ะตะบัั‚ ะดะปั ะฝะฐั‡ะฐะปะฐ ั€ะฐะทะณะพะฒะพั€ะฐ
[ext-did-custom]

;; ะญั‚ะพ ั…ัƒะปะธะณะฐะฝัั‚ะฒะพ, ะดะตะปะฐั‚ัŒ ัั‚ะพ ั‚ะฐะบ ะธ ะทะดะตััŒ, ะฝะพ ั€ะฐะฑะพั‚ะฐะตั‚ - ะดะพะฑะฐะฒะปัะตะผ ะบ ะฝะพะผะตั€ัƒ '8'
exten =>  s,1,Set(CALLERID(num)=8${CALLERID(num)})

;; ะขัƒั‚ ะฒััะบะธะต ะฟะตั€ะตะผะตะฝะฝั‹ะต ะดะปั ัะบั€ะธะฟั‚ะฐ
exten =>  s,n,Gosub(recording,~~s~~,1(${CALLERID(number)},${EXTEN}))
exten =>  s,n,ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp())
exten =>  s,n,Set(CallStart=${STRFTIME(epoch,,%s)})
exten =>  s,n,Set(CallMeDISPOSITION=${CDR(disposition)})

;; ะกะฐะผะพะต ะณะปะฐะฒะฝะพะต! ะžะฑั€ะฐะฑะพั‚ั‡ะธะบ ะพะบะพะฝั‡ะฐะฝะธั ั€ะฐะทะณะพะฒะพั€ะฐ. 
;; ะžะฑั‹ั‡ะฝั‹ะต ะฟัƒั‚ะธ ะพะฑั€ะฐะฑะพั‚ะบะธ ะบะพะฝั†ะฐ ั‡ะตั€ะตะท (exten=>h,1,ั‡ั‚ะพั‚ะพั‚ัƒั‚) ะฒ FreePBX ะฝะต ั€ะฐะฑะพั‚ะฐัŽั‚ - Macro(hangupcall,) ะฒัะต ะฟะพั€ั‚ะธั‚. 
;; ะŸะพัั‚ะพะผัƒ ะฒะตัˆะฐะตะผ Hangup_Handler ะฝะฐ ะพะบะพะฝั‡ะฐะฝะธะต ะทะฒะพะฝะบะฐ
exten => s,n,Set(CHANNEL(hangup_handler_push)=sub-call-from-cid-ended,s,1(${CALLERID(num)},${EXTEN}))

;; ะžะฑั€ะฐะฑะพั‚ั‡ะธะบ ะพะบะพะฝั‡ะฐะฝะธั ะฒั…ะพะดัั‰ะตะณะพ ะฒั‹ะทะพะฒะฐ
[sub-call-from-cid-ended]

;; ะกะพะพะฑั‰ะฐะตะผ ะพ ะทะฝะฐั‡ะตะฝะธัั… ะฟั€ะธ ะบะพะฝั†ะต ะทะฒะพะฝะบะฐ
exten => s,1,Set(CDR_PROP(disable)=true)
exten => s,n,Set(CallStop=${STRFTIME(epoch,,%s)})
exten => s,n,Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)})

;; ะกั‚ะฐั‚ัƒั ะฒั‹ะทะพะฒะฐ - ะžั‚ะฒะตั‚, ะฝะต ะพั‚ะฒะตั‚...
exten => s,n,Set(CallMeDISPOSITION=${CDR(disposition)})
exten => s,n,Return


;; ะžะฑั€ะฐะฑะพั‚ั‡ะธะบ ะธัั…ะพะดัั‰ะธั… ะฒั‹ะทะพะฒะพะฒ - ะฒัะต ะฐะฝะฐะปะพะณะธั‡ะตะฝะพ
[outbound-allroutes-custom]

;; ะ—ะฐะฟะธััŒ
exten => _.,1,Gosub(recording,~~s~~,1(${CALLERID(number)},${EXTEN}))
;; ะŸะตั€ะตะผะตะฝะฝั‹ะต
exten => _.,n,Set(__CallIntNum=${CALLERID(num)})
exten => _.,n,Set(CallExtNum=${EXTEN})
exten => _.,n,Set(CallStart=${STRFTIME(epoch,,%s)})
exten => _.,n,Set(CallmeCALLID=${SIPCALLID})

;; ะ’ะตัˆะฐะตะผ Hangup_Handler ะฝะฐ ะพะบะพะฝั‡ะฐะฝะธะต ะทะฒะพะฝะบะฐ
exten => _.,n,Set(CHANNEL(hangup_handler_push)=sub-call-internal-ended,s,1(${CALLERID(num)},${EXTEN}))

;; ะžะฑั€ะฐะฑะพั‚ั‡ะธะบ ะพะบะพะฝั‡ะฐะฝะธั ะธัั…ะพะดัั‰ะตะณะพ ะฒั‹ะทะพะฒะฐ
[sub-call-internal-ended]

;; ะฟะตั€ะตะผะตะฝะฝั‹ะต
exten => s,1,Set(CDR_PROP(disable)=true)
exten => s,n,Set(CallStop=${STRFTIME(epoch,,%s)})
exten => s,n,Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)})
exten => s,n,Set(CallMeDISPOSITION=${CDR(disposition)})

;; ะ’ั‹ะทะพะฒ ัะบั€ะธะฟั‚ะฐ, ะบะพั‚ะพั€ั‹ะน ัะพะพะฑั‰ะธั‚ ะพ ะทะฒะพะฝะบะต ะฒ CRM - ัั‚ะพ ะธัั…ะพะดัั‰ะธะน, 
;; ั‚ะฐะบ ั‡ั‚ะพ ะฟะพ ั„ะฐะบั‚ัƒ ะพะบะพะฝั‡ะฐะฝะธั
exten => s,n,System(curl -s ${URLPHP}/CallMeOut.php --data action=sendcall2b24 --data ExtNum=${CallExtNum} --data call_id=${SIPCALLID} --data-urlencode FullFname='${FullFname}' --data CallIntNum=${CallIntNum} --data CallDuration=${CallMeDURATION} --data-urlencode CallDisposition='${CallMeDISPOSITION}')
exten => s,n,Return

์›๋ฌธ ์ž‘์„ฑ์ž์˜ ์›๋ฌธ ๋‹ค์ด์–ผํ”Œ๋žœ๊ณผ์˜ ํŠน์ง• ๋ฐ ์ฐจ์ด์  -

  • FreePBX๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ .conf ํ˜•์‹์˜ Dialplan(์˜ˆ, .ael์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ชจ๋“  ๋ฒ„์ „์ด ์•„๋‹ˆ๊ณ  ํ•ญ์ƒ ํŽธ๋ฆฌํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค)

  • exten=>h๋ฅผ ํ†ตํ•ด ์ข…๋ฃŒ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  hangup_handler๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด FreePBX ๋‹ค์ด์–ผํ”Œ๋žœ์€ ๊ทธ๊ฒƒ์œผ๋กœ๋งŒ ์ž‘๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • ์Šคํฌ๋ฆฝํŠธ ํ˜ธ์ถœ ๋ฌธ์ž์—ด ์ˆ˜์ •, ๋”ฐ์˜ดํ‘œ ์ถ”๊ฐ€ ๋ฐ ์™ธ๋ถ€ ํ˜ธ์ถœ ๋ฒˆํ˜ธ ExtNum

  • ์ฒ˜๋ฆฌ๊ฐ€ _custom ์ปจํ…์ŠคํŠธ๋กœ ์ด๋™๋˜์–ด FreePBX ๊ตฌ์„ฑ์„ ๊ฑด๋“œ๋ฆฌ๊ฑฐ๋‚˜ ํŽธ์ง‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. [ext-d-custom], [๋ฅผ ํ†ตํ•ด ๋ฐœ์‹ ์•„์›ƒ๋ฐ”์šด๋“œ-allroutes-custom]

  • ์ˆซ์ž์— ๊ตฌ์†๋ ฅ ์—†์Œ - ํŒŒ์ผ์€ ๋ฒ”์šฉ์ด๋ฉฐ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๊ฒฝ๋กœ ๋ฐ ๋งํฌ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ตฌ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธ ๋ฐ ์•”ํ˜ธ๋กœ AMI์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด FreePBX์—๋Š” _custom ํŒŒ์ผ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

manager_custom.conf ํŒŒ์ผ

;;  ัั‚ะพ ะปะพะณะธะฝ
[callmeplus]
;; ัั‚ะพ ะฟะฐั€ะพะปัŒ
secret = trampampamturlala
deny = 0.0.0.0/0.0.0.0

;; ั ั€ะฐะฑะพั‚ะฐัŽ ั ะปะพะบะฐะปัŒะฝะพะน ะผะฐัˆะธะฝะพะน - ะฝะพ ะตัะปะธ ะฝะฐะดะพ, ะผะพะถะฝะพ ะธ ะดั€ัƒะณะธะต ะฟั€ะพะฟะธัะฐั‚ัŒ
permit = 127.0.0.1/255.255.255.255
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,log,verbose,user,config,command,reporting,originate

์ด ๋‘ ํŒŒ์ผ์€ ๋ชจ๋‘ /etc/asterisk์— ๋ฐฐ์น˜ํ•œ ๋‹ค์Œ ๊ตฌ์„ฑ์„ ๋‹ค์‹œ ์ฝ๊ฑฐ๋‚˜ ๋ณ„ํ‘œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# astrisk -rv
  Connected to Asterisk 16.6.2 currently running on freepbx (pid = 31629)
#freepbx*CLI> dialplan reload
     Dialplan reloaded.
#freepbx*CLI> exit

์ด์ œ PHP๋กœ ๋„˜์–ด๊ฐ‘์‹œ๋‹ค.

์Šคํฌ๋ฆฝํŠธ ์ดˆ๊ธฐํ™” ๋ฐ ์„œ๋น„์Šค ์ƒ์„ฑ

AMI์šฉ ์„œ๋น„์Šค์ธ Bitrix 24์™€ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ์‹์€ ์™„์ „ํžˆ ๋‹จ์ˆœํ•˜๊ณ  ํˆฌ๋ช…ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ ๋…ผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„ํ‘œ๋Š” AMI๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ํฌํŠธ๋ฅผ ์—ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ€์ž…ํ•  ๋•Œ ์ธ์ฆ์„ ์š”์ฒญํ•œ ๋‹ค์Œ ํด๋ผ์ด์–ธํŠธ๋Š” ํ•„์š”ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋Š” ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ œ๊ณต๋˜๋ฉฐ PAMI๋Š” ์ด๋ฅผ ๊ตฌ์กฐํ™”๋œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ด€์‹ฌ ์žˆ๋Š” ์ด๋ฒคํŠธ, ํ•„๋“œ, ์ˆซ์ž ๋“ฑ์— ๋Œ€ํ•ด์„œ๋งŒ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ถœ์ด ๋“ค์–ด์˜ค๋ฉด ๋ถ€๋ชจ [from-pstn] ์ปจํ…์ŠคํŠธ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ NewExten ์ด๋ฒคํŠธ๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ๋ชจ๋“  ์ด๋ฒคํŠธ๊ฐ€ ์ปจํ…์ŠคํŠธ์˜ ์ค„ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. _custom ๋‹ค์ด์–ผํ”Œ๋žœ์— ์ง€์ •๋œ CallMeCallerIDName ๋ฐ CallStart ๋ณ€์ˆ˜๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด

  1. ์ „ํ™”๊ฐ€ ์˜จ ๋‚ด์„ ๋ฒˆํ˜ธ์— ํ•ด๋‹นํ•˜๋Š” UserID๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ธฐ๋Šฅ. ์ „ํ™” ์ ‘์† ๊ทธ๋ฃน์ธ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ์งˆ๋ฌธ์€ ์ •์น˜์ ์ž…๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ํ†ตํ™”๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ(๋ชจ๋“  ์‚ฌ๋žŒ์ด ํ•œ ๋ฒˆ์— ํ†ตํ™”ํ•  ๋•Œ) ์•„๋‹ˆ๋ฉด ์ฐจ๋ก€๋Œ€๋กœ ํ†ตํ™”ํ•  ๋•Œ ํ†ตํ™”๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ ํด๋ผ์ด์–ธํŠธ์—๋Š” ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์ „๋žต์ด ์žˆ์œผ๋ฏ€๋กœ ์ด์— ๋Œ€ํ•œ ๋ฌธ์ œ๋Š” ์—†์œผ๋ฉฐ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. CallID๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Bitrix24์˜ ํ†ตํ™” ๋“ฑ๋ก ๊ธฐ๋Šฅ์€ ํ†ตํ™” ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ ๋…น์Œ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋ณด๊ณ ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด์„  ๋ฒˆํ˜ธ ๋˜๋Š” ์‚ฌ์šฉ์ž ID๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

FreePBX ์ดํ•ด ๋ฐ Bitrix24 ๋“ฑ๊ณผ ํ†ตํ•ฉ

ํ†ตํ™” ์ข…๋ฃŒ ํ›„ ๋…น์Œ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ์ด ํ˜ธ์ถœ๋˜์–ด ํ†ตํ™” ์™„๋ฃŒ ์ƒํƒœ(ํ†ตํ™” ์ค‘, ์‘๋‹ต ์—†์Œ, ์„ฑ๊ณต)๋ฅผ ๋™์‹œ์— ๋ณด๊ณ ํ•˜๊ณ  ๋…น์Œ์ด ์žˆ๋Š” mp3 ํŒŒ์ผ(์žˆ๋Š” ๊ฒฝ์šฐ)์— ๋Œ€ํ•œ ๋งํฌ๋„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

CallMeIn.php ๋ชจ๋“ˆ์€ ์ง€์†์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๋ฅผ ์œ„ํ•œ SystemD ์‹œ์ž‘ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝœ๋ฏธ.์„œ๋น„์Šค, /etc/systemd/system/callme.service์— ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[Unit]
Description=CallMe

[Service]
WorkingDirectory=/var/www/html/callmeplus
ExecStart=/usr/bin/php /var/www/html/callmeplus/CallMeIn.php 2>&1 >>/var/log/callmeplus.log
ExecStop=/bin/kill -WINCH ${MAINPID}
KillSignal=SIGKILL

Restart=on-failure
RestartSec=10s

#ั‚ัƒั‚ ะฝะฐะดะพ ัะผะพั‚ั€ะตั‚ัŒ,ะบะฐะบะธะต ะฟั€ะฐะฒะฐ ะฝะฐ ะฟะฐะฟะบะธ
#User=www-data  #Ubuntu - debian
#User=nginx #Centos

[Install]
WantedBy=multi-user.target

์Šคํฌ๋ฆฝํŠธ์˜ ์ดˆ๊ธฐํ™” ๋ฐ ์‹คํ–‰์€ systemctl ๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

# systemctl enable callme
# systemctl start callme

์„œ๋น„์Šค๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ž์ฒด์ ์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค(์ถฉ๋Œ ์‹œ). ๋ฐ›์€ ํŽธ์ง€ํ•จ ์ถ”์  ์„œ๋น„์Šค๋Š” ์›น ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ PHP๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(FeePBX ์„œ๋ฒ„์— ์žˆ์Œ). ๊ทธ๋Ÿฌ๋‚˜ ์›น ์„œ๋ฒ„(๋˜ํ•œ https ์‚ฌ์šฉ)๋ฅผ ํ†ตํ•ด ํ†ตํ™” ๊ธฐ๋ก์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์œผ๋ฉด ํ†ตํ™” ๊ธฐ๋ก์„ ๋“ค์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋ฐœ์‹  ํ†ตํ™”์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. CallMeOut.php ์Šคํฌ๋ฆฝํŠธ์—๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • php ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์š”์ฒญ์ด ์ˆ˜์‹ ๋˜๋ฉด ํ†ตํ™” ์‹œ์ž‘(Bitrix ์ž์ฒด์˜ "ํ†ตํ™”" ๋ฒ„ํŠผ ์‚ฌ์šฉ ํฌํ•จ). ์›น ์„œ๋ฒ„ ์—†์ด๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์š”์ฒญ์€ HTTP POST๋ฅผ ํ†ตํ•ด ์ˆ˜์‹ ๋˜๋ฉฐ ์š”์ฒญ์—๋Š” ํ† ํฐ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ํ†ตํ™”, ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ Bitrix์˜ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ํ†ตํ™” ์ข…๋ฃŒ ์‹œ [sub-call-internal-ended] ๋‹ค์ด์–ผํ”Œ๋žœ์˜ Asterisk์— ์˜ํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

FreePBX ์ดํ•ด ๋ฐ Bitrix24 ๋“ฑ๊ณผ ํ†ตํ•ฉ

์›น ์„œ๋ฒ„๋Š” Bitrix ๋ ˆ์ฝ”๋“œ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ(HTTPS๋ฅผ ํ†ตํ•ด) ๋ฐ CallMeOut.php ์Šคํฌ๋ฆฝํŠธ ํ˜ธ์ถœ์˜ ๋‘ ๊ฐ€์ง€์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด /var/www/html์ธ ๋‚ด์žฅ FreePBX ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ์„œ๋ฒ„

๋…๋ฆฝ์ ์ธ ํ•™์Šต์„ ์œ„ํ•ด ์›น ์„œ๋ฒ„ ์„ค์ •์„ ๋‚จ๊ฒจ๋‘ก์‹œ๋‹ค(tyts, tyts, tyts). ๋„๋ฉ”์ธ์ด ์—†์œผ๋ฉด FreeDomain( https://www.freenom.com/ru/index.html), ํ™”์ดํŠธ IP์— ๋Œ€ํ•œ ๋ฌด๋ฃŒ ์ด๋ฆ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(์™ธ๋ถ€ ์ฃผ์†Œ๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ผ์šฐํ„ฐ๋ฅผ ํ†ตํ•ด ํฌํŠธ 80, 443์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค). ๋ฐฉ๊ธˆ DNS ๋„๋ฉ”์ธ์„ ๋งŒ๋“  ๊ฒฝ์šฐ ๋ชจ๋“  ์„œ๋ฒ„๊ฐ€ ๋กœ๋“œ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค(15๋ถ„์—์„œ 48์‹œ๊ฐ„). ๊ตญ๋‚ด ๊ณต๊ธ‰์ž์™€์˜ ์ž‘์—… ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด-1 ์‹œ๊ฐ„์—์„œ ํ•˜๋ฃจ.

์„ค์น˜ ์ž๋™ํ™”

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

๋„์ปค

์†”๋ฃจ์…˜์„ ๋น ๋ฅด๊ฒŒ ์‹œ๋„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Docker ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ์™ธ๋ถ€์— ํฌํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์„ค์ • ํŒŒ์ผ์„ ๋ฐ€์–ด๋„ฃ๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค(LetsEncrypt ์ปจํ…Œ์ด๋„ˆ์˜ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ์ธ์ฆ์„œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ FreePBX ์›น ์„œ๋ฒ„๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค(๋‹ค๋ฅธ ํฌํŠธ๋Š” 88๋กœ ์ง€์ •). Docker์—์„œ LetsEncrypt๋Š” ๋‹ค์Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ

๋‹ค์šด๋กœ๋“œํ•œ ํ”„๋กœ์ ํŠธ ํด๋”(git clone ํ›„)์—์„œ ํŒŒ์ผ์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜์ง€๋งŒ ๋จผ์ € ๋ณ„ํ‘œ ๊ตฌ์„ฑ(๋ณ„ํ‘œ ํด๋”)์— ๋“ค์–ด๊ฐ€ ๋ ˆ์ฝ”๋“œ ๊ฒฝ๋กœ์™€ ์‚ฌ์ดํŠธ URL์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

version: '3.3'
services:
  nginx:
    image: nginx:1.15-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/ssl_docker.conf:/etc/nginx/conf.d/ssl_docker.conf
  certbot:
    image: certbot/certbot
  freepbx:
    image: flaviostutz/freepbx
    ports:
      - 88:80 # ะดะปั ะฝะฐัั‚ั€ะพะนะบะธ
      - 5060:5060/udp
      - 5160:5160/udp
      - 127.0.0.1:5038:5038 # ะดะปั CallMeOut.php
#      - 3306:3306
      - 18000-18100:18000-18100/udp
    restart: always
    environment:
      - ADMIN_PASSWORD=admin123
    volumes:
      - backup:/backup
      - recordings:/var/spool/asterisk/monitor
      - ./callme:/var/www/html/callme
      - ./systemd/callme.service:/etc/systemd/system/callme.conf
      - ./asterisk/manager_custom.conf:/etc/asterisk/manager_custom.conf
      - ./asterisk/extensions_custom.conf:/etc/asterisk/extensions_custom.conf
#      - ./conf/startup.sh:/startup.sh

volumes:
  backup:
  recordings:

์ด docker-compose.yaml ํŒŒ์ผ์€ ๋‹ค์Œ์„ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

docker-compose up -d

nginx๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์œผ๋ฉด nginx/ssl_docker.conf ํด๋”์˜ ๊ตฌ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐํƒ€ ํ†ตํ•ฉ

๊ทธ๋ฆฌ๊ณ  ๋™์‹œ์— ์ผ๋ถ€ CRM์„ ์Šคํฌ๋ฆฝํŠธ์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–จ๊นŒ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ CRM API, ํŠนํžˆ ๋ฌด๋ฃŒ ๋‚ด์žฅ PBX์ธ ShugarCRM ๋ฐ Vtiger๋ฅผ ์—ฐ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„ค, ์›๋ฆฌ๋Š” ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ด๋ฉฐ, ๋‚˜์ค‘์— ๋ณ„๋„๋กœ github์— ์—…๋กœ๋“œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฐธ์กฐ

๋ฉด์ฑ… ์กฐํ•ญ: ํ˜„์‹ค๊ณผ ๋‹ฎ์€ ์ ์€ ํ—ˆ๊ตฌ์ด๋ฉฐ ์ œ๊ฐ€ ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€