ํ๋ ๊ธฐ์
์ ์ ์ ์ ํ๋ฅผ ์ค๋๋ ๊ธฐ์ ๋ก ์ธ์ํฉ๋๋ค. ์
๋ฃฐ๋ฌ ํต์ ์ ์ง์์ ์ด๋์ฑ๊ณผ ์ง์์ ์ธ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๋ฉฐ ์์
๋คํธ์ํฌ์ ์ธ์คํดํธ ๋ฉ์ ์ ๋ ๋ ์ฝ๊ณ ๋น ๋ฅธ ํต์ ์ฑ๋์
๋๋ค. ๊ฒฝ์์
์ฒด๋ฅผ ๋ฐ๋ผ์ก๊ธฐ ์ํด ์ฌ๋ฌด์ค PBX๋ ์ ์ ๋ ์ ์ฌํด์ง๊ณ ์์ต๋๋ค. ์ฆ, ํด๋ผ์ฐ๋๋ก ์ด๋ํ๊ณ ์น ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ด๋ฆฌํ๋ฉฐ API๋ฅผ ํตํด ๋ค๋ฅธ ์์คํ
๊ณผ ํตํฉ๋๊ณ ์์ต๋๋ค. ์ด ๊ฒ์๋ฌผ์์๋ Rostelecom ๊ฐ์ PBX API์ ๊ธฐ๋ฅ๊ณผ ์ด๋ฅผ ํตํด ๊ฐ์ PBX์ ์ฃผ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค.
Rostelecom ๊ฐ์ PBX API์ ์ฃผ์ ์์
์ CRM ๋๋ ํ์ฌ ์น ์ฌ์ดํธ์์ ์ํธ ์์ฉ์
๋๋ค. ์๋ฅผ ๋ค์ด, API๋ WordPress, Bitrix, OpenCart์ ๊ฐ์ ์ฃผ์ ๊ด๋ฆฌ ์์คํ
์ ๋ํ "์ฝ๋ฐฑ" ๋ฐ "์ฌ์ดํธ์์ ํธ์ถ" ์์ ฏ์ ๊ตฌํํฉ๋๋ค. API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ ๋ณด ์์ , ์ํ ์๋ฆผ, ์ธ๋ถ ์์คํ ์์ฒญ ์ ์ ํ ๊ฑธ๊ธฐ
- ๋ํ๋ฅผ ๋ น์ํ๋ ค๋ฉด ์์ ๋งํฌ๋ฅผ ๋ฐ์ผ์ธ์.
- ์ฌ์ฉ์๋ก๋ถํฐ ์ ํ ๋งค๊ฐ๋ณ์๋ฅผ ๊ด๋ฆฌํ๊ณ ์์ ํฉ๋๋ค.
- ๊ฐ์ PBX ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ต๋๋ค.
- ํตํ ์ด์ฒด ๋ฐ ์๊ธ ๋ด์ญ์ ์์ฒญํฉ๋๋ค.
- ํตํ ๊ธฐ๋ก์ ์ ๋ก๋ํฉ๋๋ค.
API ์๋ ๋ฐฉ์
ํตํฉ API์ ์ธ๋ถ ์์คํ ์ HTTP ์์ฒญ์ ์ฌ์ฉํ์ฌ ์๋ก ์ํธ ์์ฉํฉ๋๋ค. ๊ฐ์ธ ๊ณ์ ์์ ๊ด๋ฆฌ์๋ API์ ๋ํ ์์ฒญ์ด ๋์ฐฉํด์ผ ํ๋ ์ฃผ์์ API์ ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ ์ฃผ์๋ฅผ ์ค์ ํฉ๋๋ค. ์ธ๋ถ ์์คํ ์๋ SSL ์ธ์ฆ์๊ฐ ์ค์น๋ ์ธํฐ๋ท์์ ์ก์ธ์คํ ์ ์๋ ๊ณต์ฉ ์ฃผ์๊ฐ ์์ด์ผ ํฉ๋๋ค.
๋ํ ๊ฐ์ธ ๊ณ์ ์์ ๋๋ฉ์ธ ๊ด๋ฆฌ์๋ IP๋ฅผ ํตํด API์ ์ก์ธ์คํ ๋ ์์ฒญ ์์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
๊ฐ์ PBX ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ์ต๋๋ค.
์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน ๋ชฉ๋ก์ ์ป์ผ๋ ค๋ฉด ๋ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ PBX์ ์์ฒญ์ ๋ณด๋ด์ผ ํฉ๋๋ค. /์ฌ์ฉ์_์ ๋ณด.
{
"domain":"example.ru"
}
์ด์ ๋ํ ์๋ต์ผ๋ก ์ ์ฅํ ์ ์๋ ๋ชฉ๋ก์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
{
"result":0,
"resultMessage":"",
"users":[
{
"display_name":"test_user_1",
"name":"admin",
"pin":^_^quotสquot^_^,
"is_supervisor":true,
"is_operator":false,
"email":"[email protected]","recording":1
},
{
"display_name":"test_user_2",
"name":"test",
"pin":^_^quotสฟquot^_^,
"is_supervisor":true,
"is_operator":false,
"email":"",
"recording":1
}
],
"groups":
[
{
"name":"testAPI",
"pin":^_^quotวดquot^_^,
"email":"[email protected]",
"distribution":1,
"users_list":[^_^quotสquot^_^,^_^quotสฟquot^_^]
}
]
์ด ๋ฉ์๋๋ ๋ ๊ฐ์ ๋ฐฐ์ด์ ์ ๋ฌํฉ๋๋ค. ํ๋๋ ๋๋ฉ์ธ ์ฌ์ฉ์์ด๊ณ ๋ค๋ฅธ ํ๋๋ ๋๋ฉ์ธ ๊ทธ๋ฃน์ ๋๋ค. ๊ทธ๋ฃน์ ์์ฒญ์ ํฌํจ๋์ด ์ ์ก๋ ์ด๋ฉ์ผ์ ์ง์ ํ ์๋ ์์ต๋๋ค.
์์ ์ ํ์ ๋ํ ์ ๋ณด ์ฒ๋ฆฌ
๊ธฐ์ ์ ํ ํต์ ์ ๋ค์ํ CRM ์์คํ ์ ์ฐ๊ฒฐํ๋ฉด ๊ณ ๊ฐ๊ณผ ์ํธ ์์ฉํ๋ ์ง์์ ์๊ฐ์ด ์ ์ฝ๋๊ณ ์์ ํตํ ์ฒ๋ฆฌ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ ๊ณ ๊ฐ์ผ๋ก๋ถํฐ ์ ํ๊ฐ ์ค๋ฉด CRM์ ์์ ์ ์นด๋๋ฅผ ์ด ์ ์๊ณ CRM์์ ๊ณ ๊ฐ์๊ฒ ์ ํ๋ฅผ ๊ฑธ์ด ์ง์๊ณผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
API ํธ์ถ์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ผ๋ ค๋ฉด ๋ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. /get_number_info, ํตํ๊ฐ ๋ถ๋ฐฐ๋๋ ๊ทธ๋ฃน์ ๋ํ ์ ๋ณด์ ํจ๊ป ํตํ ๋ชฉ๋ก์ ์์ฑํฉ๋๋ค. ๊ฐ์ PBX ๋ฒํธ๊ฐ 1234567890๋ฒ์์ ๊ฑธ๋ ค์ค๋ ์ ํ๋ฅผ ๋ฐ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ PBX๋ ๋ค์ ์์ฒญ์ ๋ณด๋ ๋๋ค.
{
"session_id":"SDsnZugDFmTW7Sec",
"timestamp":"2019-12-27 15:34:44.461",
"type":"incoming",
"state":"new",
"from_number":"sip:</i^_^gt๏ฟฝlt&i;gt^_^@192.168.0.1",
"from_pin":"",
"request_number":"sip:</i^_^gt๏ฟฝlt&i;gt^_^@1192.168.0.1",
"request_pin":^_^quotษquot^_^,
"disconnect_reason":"",
"is_record":""
}
๋ค์์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. /get_number_info. ํตํ๊ฐ ๋ผ์ฐํ ๋๊ธฐ ์ ์ ์์ ํตํ๊ฐ ์์ ํ์ ์ ๋์ฐฉํ๋ฉด ์์ฒญ์ด ์คํ๋์ด์ผ ํฉ๋๋ค. ์์ฒญ์ ๋ํ ์๋ต์ด ์ง์ ๋ ์๊ฐ ๋ด์ ์์ ๋์ง ์์ผ๋ฉด ๋๋ฉ์ธ์ ์ค์ ๋ ๊ท์น์ ๋ฐ๋ผ ํตํ๊ฐ ๋ผ์ฐํ ๋ฉ๋๋ค.
CRM ์ธก ํธ๋ค๋ฌ์ ์.
if ($account) {
$data = [
'result' => 0,
'resultMessage' => 'ะะฑะพะฝะตะฝั ะฝะฐะนะดะตะฝ',
'displayName' => $account->name,
//'PIN' => $crm_users,
];
}
else
{
$data = [
'result' => 0,
'resultMessage' => 'ะะฑะพะฝะตะฝั ะฝะต ะฝะฐะนะดะตะฝ',
'displayName' => 'ะะตะธะทะฒะตััะฝัะน ะฐะฑะพะฝะตะฝั '.$contact,
//'PIN' => crm_users,
];
}
return $data;
ํธ๋ค๋ฌ์ ์๋ต์ ๋๋ค.
{
"result":0,
"resultMessage":"ะะฑะพะฝะตะฝั ะฝะฐะนะดะตะฝ",
"displayName":"ะะฒะฐะฝะพะฒ ะะฒะฐะฝ ะะฒะฐะฝะพะฒะธั +1</i> 234-56-78-90<i>"
}
์ํ๋ฅผ ์ถ์ ํ๊ณ ํตํ ๋ น์์ ๋ค์ด๋ก๋ํฉ๋๋ค.
Rostelecom์ ๊ฐ์ PBX์์๋ ๊ฐ์ธ ๊ณ์ ์์ ํตํ ๋ น์์ด ํ์ฑํ๋ฉ๋๋ค. API๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๊ธฐ๋ฅ์ ์ํ๋ฅผ ์ถ์ ํ ์ ์์ต๋๋ค. ํตํ ์ข ๋ฃ๋ฅผ ์ฒ๋ฆฌํ ๋ call_events ๊น๋ฐ์ ๋ณผ ์ ์์ด์ 'is_record', ์ฌ์ฉ์์๊ฒ ํญ๋ชฉ ์ํ๋ฅผ ์๋ ค์ค๋๋ค. ์ฐธ๋ ๋ ์ฌ์ฉ์์ ํตํ ๋ น์ ๊ธฐ๋ฅ์ด ํ์ฑํ๋์์์ ์๋ฏธํฉ๋๋ค.
๋
น์์ ๋ค์ด๋ก๋ํ๋ ค๋ฉด ํตํ ์ธ์
ID๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. session_id ์๊ฒ ์์ฒญ์ ๋ณด๋ด๋ค api.cloudpbx.rt.ru/get_record.
{
"session_id":"SDsnZugDFmTW7Sec"
}
์ด์ ๋ํ ์๋ต์ผ๋ก ๋ํ ๋ด์ฉ์ด ๋ น์๋ ํ์ผ์ ๋ค์ด๋ก๋ํ ์ ์๋ ์์ ๋งํฌ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค.
{
"result": ^_^quot๏ฟฝquot^_^,
"resultMessage": "ะะฟะตัะฐัะธั ะฒัะฟะพะปะฝะตะฝะฐ ััะฟะตัะฝะพ",
"url": "https://api.cloudpbx.rt.ru/records_new_scheme/record/download/501a8fc4a4aca86eb35955419157921d/188254033036"
}
ํ์ผ ์ ์ฅ ์๊ฐ์ ๊ฐ์ธ ๊ณ์ ์ค์ ์์ ์ค์ ๋ฉ๋๋ค. ๊ทธ ํ์๋ ํ์ผ์ด ์ญ์ ๋ฉ๋๋ค.
ํต๊ณ ๋ฐ ๋ณด๊ณ
๋ณ๋์ ํ์ด์ง์ ์๋ ๊ฐ์ธ ๊ณ์ ์์ ๋ชจ๋ ํตํ์ ๋ํ ํต๊ณ ๋ฐ ๋ณด๊ณ ๋ฅผ ํ์ธํ๊ณ ์ํ ๋ฐ ์๊ฐ๋ณ๋ก ํํฐ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. API๋ฅผ ํตํด ๋จผ์ ๋ฉ์๋๋ก ํธ์ถ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. /call_events:
{
"session_id":"SDsnZugDFmTW7Sec",
"timestamp":"2019-12-27 15:34:59.349",
"type":"incoming",
"state":"end",
"from_number":"sip:</i^_^gt๏ฟฝlt&i;gt^_^@192.168.0.1",
"from_pin":"",
"request_number":"sip:</i^_^gt๏ฟฝlt&i;gt^_^@192.168.0.1",
"request_pin":^_^quotสquot^_^,
"disconnect_reason":"",
"is_record":"true"
}
๊ทธ๋ฐ ๋ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ญ์์ค. call_info ๋ฐฐ์ด์ ์ฒ๋ฆฌํ๊ณ CRM ์์คํ ์ ํตํ๋ฅผ ํ์ํฉ๋๋ค.
{
"session_id":"SDsnZugDFmTW7Sec"
}
์ด์ ๋ํ ์๋ต์ผ๋ก CRM ๋ก๊ทธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
{
"result":0,
"resultMessage":"",
"info":
{
"call_type":1,
"direction":1,
"state":1,
"orig_number":"sip:</i^_^gt๏ฟฝlt&i;gt^_^@192.168.0.1",
"orig_pin":null,
"dest_number":"sip:</i^_^gt๏ฟฝlt&i;gt^_^@192.168.0.1",
"answering_sipuri":"[email protected]",
"answering_pin":^_^quotษquot^_^,
"start_call_date":^_^quot๏ฟฝquot^_^,
"duration":14,
"session_log":"0:el:123456789;0:ru:admin;7:ct:admin;9:cc:admin;14:cd:admin;",
"is_voicemail":false,
"is_record":true,
"is_fax":false,
"status_code":^_^quot๏ฟฝquot^_^,
"status_string":""
}
}
๊ธฐํ ์ ์ฉํ ๊ฐ์ PBX ๊ธฐ๋ฅ
API ์ธ์๋ ๊ฐ์ PBX์๋ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ์ ์ฉํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ํํ ์์ฑ ๋ฉ๋ด์ ์ ๋ฃฐ๋ฌ ๋ฐ ๊ณ ์ ํต์ ์ ํตํฉ์ ๋๋ค.
IVR(๋ํํ ์์ฑ ์๋ต)์ ์ฌ๋์ด ์๋ตํ๊ธฐ ์ ์ ํธ๋์ ์์ ๋ฃ๋ ๊ฒ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ ์ ํ๋ฅผ ํด๋น ๋ถ์๋ก ๋ฆฌ๋๋ ์ ํ๊ณ ์ผ๋ถ ์ง๋ฌธ์ ์๋์ผ๋ก ๋ต๋ณํ๋ ์ ์ ๊ตํ์์ ๋๋ค. ๊ณง API๋ฅผ ํตํด IVR๋ก ์์ ํ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ํ์ฌ IVR์ ํตํด ํตํ ์งํ ์ํฉ์ ์ถ์ ํ๊ณ ๊ฐ์ ์๊ฐ ์์ฑ ๋ฉ๋ด์ ์์ ๋ ํฐ์นํค ํค ์ ๋ ฅ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์๋ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐ ์ค์ ๋๋ค.
๊ธฐ์ ์ ํ๋ฅผ ํด๋ํฐ์ผ๋ก ์ ํํ๋ ค๋ฉด ์ํํธํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๊ฑฐ๋ FMC(Fixed Mobile Convergence) ์๋น์ค๋ฅผ ๋ณ๋๋ก ํ์ฑํํ๋ฉด ๋ฉ๋๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๋คํธ์ํฌ ๋ด ํตํ๋ ๋ฌด๋ฃ์ด๋ฉฐ ์งง์ ๋ฒํธ๋ก ์์ ์ด ๊ฐ๋ฅํ๋ฉฐ ํตํ๋ฅผ ๋ น์ํ๊ณ ์ผ๋ฐ ํต๊ณ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
์ฐจ์ด์ ์ ์ํํธํฐ์ ํต์ ์ ์ํด ์ธํฐ๋ท์ด ํ์ํ์ง๋ง ์ด์์์๊ฒ ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๋ฐ๋ฉด, FMC๋ ํน์ ์ด์์์๊ฒ ์ฐ๊ฒฐ๋์ด ์์ง๋ง ๊ตฌํ ํธ์ ๋ฒํผ ์ ํ๊ธฐ์์๋ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
์ถ์ฒ : habr.com