FreePBX අවබෝධ කර ගැනීම සහ එය Bitrix24 සහ තවත් දේ සමඟ ඒකාබද්ධ කිරීම

Bitrix24 CRM, වැඩ ප්‍රවාහය, ගිණුම්කරණය සහ කළමනාකරුවන් සැබවින්ම කැමති සහ IT කාර්ය මණ්ඩලය සැබවින්ම කැමති නැති බොහෝ දේ ඒකාබද්ධ කරන විශාල සංයෝජනයකි. කුඩා සායන, නිෂ්පාදකයින් සහ රූපලාවන්‍යාගාර ඇතුළු කුඩා හා මධ්‍යම ප්‍රමාණයේ සමාගම් රාශියක් විසින් ද්වාරය භාවිතා කරයි. කළමනාකරුවන් “ආදරය” කරන ප්‍රධාන කාර්යය වන්නේ දුරකථන සහ CRM ඒකාබද්ධ කිරීමයි, ඕනෑම ඇමතුමක් වහාම CRM හි සටහන් වූ විට, සේවාදායක කාඩ්පත් සාදනු ලැබේ, පැමිණෙන විට, සේවාදායකයා පිළිබඳ තොරතුරු දර්ශනය වන අතර ඔබට ඔහු කවුද, ඔහු කුමක්දැයි වහාම දැක ගත හැකිය. විකිණිය හැකි අතර ඔහු කොපමණ මුදලක් ගෙවිය යුතුද යන්න. නමුත් Bitrix24 වෙතින් දුරකථන ඇමතුම් සහ CRM සමඟ ඒකාබද්ධ කිරීම සඳහා මුදල් වැය වේ, සමහර විට ගොඩක්. ලිපියෙහි මම විවෘත මෙවලම් සහ ජනප්රිය IP PBX සමඟ ඒකාබද්ධ කිරීමේ අත්දැකීම ඔබට කියමි freepbx, සහ විවිධ කොටස්වල කාර්යයේ තර්කනය ද සලකා බලන්න

මම IP දුරකථන අලෙවි කරන සහ වින්‍යාස කරන, ඒකාබද්ධ කරන සමාගමක බාහිරින් ලබා ගන්නෙකු ලෙස වැඩ කරමි. Bitrix24 පාරිභෝගිකයන් සතුව ඇති PBX සමඟ මෙන්ම විවිධ VDS සමාගම්වල virtual PBX සමඟ ඒකාබද්ධ කිරීමට අපට මෙයට සහ මෙම සමාගමට යමක් ඉදිරිපත් කළ හැකිද යන්න මගෙන් විමසූ විට, මම Google වෙත ගියෙමි. ඇත්ත වශයෙන්ම ඔහු මට සබැඳියක් ලබා දුන්නේය habr හි ලිපිය, විස්තරයක් ඇති තැන, සහ github, සහ සෑම දෙයක්ම වැඩ කරන බව පෙනේ. නමුත් මෙම විසඳුම භාවිතා කිරීමට උත්සාහ කරන විට, Bitrix24 තවදුරටත් පෙර මෙන් නොවන බවත්, බොහෝ දේ නැවත කළ යුතු බවත් පෙනී ගියේය. මීට අමතරව, FreePBX ඔබට හිස් තරු ලකුණක් නොවේ, මෙහිදී ඔබට භාවිතයේ පහසුව සහ වින්‍යාස ගොනු වල දෘඪ කෝර් ඩයල්ප්ලෑන් එක ඒකාබද්ධ කරන්නේ කෙසේදැයි සිතා බැලිය යුතුය.

අපි කාර්යයේ තර්කනය අධ්යයනය කරමු

එබැවින් ආරම්භකයින් සඳහා, එය සියල්ල ක්රියා කළ යුතු ආකාරය. PBX වෙතින් පිටත සිට ඇමතුමක් ලැබුණු විට (සැපයුම්කරු වෙතින් SIP INVITE සිදුවීම), dialplan සැකසීම (ඩයල් සැලැස්ම, dialplan) ආරම්භ වේ - ඇමතුම සමඟ කළ යුත්තේ කුමක්ද සහ කුමන අනුපිළිවෙලෙහිද යන්න පිළිබඳ නීති. පළමු පැකට්ටුවෙන්, ඔබට බොහෝ තොරතුරු ලබා ගත හැකිය, පසුව නීති රීති භාවිතා කළ හැකිය. SIP හි අභ්‍යන්තර අධ්‍යයනය සඳහා විශිෂ්ට මෙවලමක් වන්නේ විශ්ලේෂකයයි sngrep (සබැඳිය) එය හුදෙක් apt install/yum install හරහා ජනප්‍රිය බෙදාහැරීම් වල ස්ථාපනය කර ඇත, නමුත් එය මූලාශ්‍රයෙන්ද ගොඩනැගිය හැක. අපි බලමු sngrep එකේ call log එක දිහා

FreePBX අවබෝධ කර ගැනීම සහ එය Bitrix24 සහ තවත් දේ සමඟ ඒකාබද්ධ කිරීම

සරල කළ ආකාරයෙන්, dialplan ගනුදෙනු කරන්නේ පළමු පැකට්ටුව සමඟ පමණි, සමහර විට සංවාදය අතරතුර, ඇමතුම් මාරු කරනු ලැබේ, බොත්තම් එබීම (DTMF), FollowMe, RingGroup, IVR සහ වෙනත් රසවත් දේවල්.

Invite Pack එක ඇතුලේ මොනවද තියෙන්නේ

FreePBX අවබෝධ කර ගැනීම සහ එය Bitrix24 සහ තවත් දේ සමඟ ඒකාබද්ධ කිරීම

ඇත්ත වශයෙන්ම, බොහෝ සරල ඩයල්ප්ලාන් පළමු ක්ෂේත්‍ර දෙක සමඟ ක්‍රියා කරයි, සහ සම්පූර්ණ තර්කය DID සහ CallerID වටා කැරකෙයි. DID - අපි අමතන තැන, CallerID - කවුද කතා කරන්නේ.

නමුත් සියල්ලට පසු, අපට ඇත්තේ සමාගමක් මිස එක දුරකථනයක් නොවේ - එයින් අදහස් කරන්නේ PBX හි බොහෝ විට නගර අංක (Ring Group), IVR (Hello, ඔබ ඇමතුවා ... Press) ඇමතුම් කණ්ඩායම් (උපාංග කිහිපයක එකවර / අඛණ්ඩව නාද වීම) ඇති බවයි. එකක් සඳහා ...), පිළිතුරු යන්ත්‍ර ( වාක්‍ය ඛණ්ඩ), කාල කොන්දේසි, වෙනත් අංක වෙත හෝ කොටුවකට යොමු කිරීම (FollowMe, Forward). මෙයින් අදහස් කරන්නේ ඇමතුමක් ඇත්ත වශයෙන්ම ලැබෙන්නේ කාටද සහ ඇමතුමක් පැමිණි විට සංවාදයක් පවත්වන්නේ කවුරුන්ද යන්න නිසැකව තීරණය කිරීම ඉතා අපහසු බවයි. අපගේ ගනුදෙනුකරුවන්ගේ PBX හි සාමාන්‍ය ඇමතුමක ආරම්භයේ උදාහරණයක් මෙන්න

FreePBX අවබෝධ කර ගැනීම සහ එය Bitrix24 සහ තවත් දේ සමඟ ඒකාබද්ධ කිරීම

ඇමතුම සාර්ථකව PBX වෙත ඇතුළු වූ පසු, එය විවිධ "සන්දර්භයන්" තුළ dialplan හරහා ගමන් කරයි. Asterisk හි දෘෂ්ටිකෝණයෙන් සන්දර්භය යනු අංකිත විධාන කට්ටලයක් වන අතර, ඒ සෑම එකක්ම ඩයල් කරන ලද අංකයෙන් පෙරනයක් අඩංගු වේ (එය exten ලෙස හැඳින්වේ, ආරම්භක අදියරේදී බාහිර ඇමතුමක් සඳහා exten=DID). dialplan රේඛාවේ විධාන ඕනෑම දෙයක් විය හැකිය - අභ්යන්තර කාර්යයන් (උදාහරණයක් ලෙස, අභ්යන්තර ග්රාහකයෙකු අමතන්න - Dial(), දුරකථනය බිම තබන්න - Hangup()), කොන්දේසි සහිත ක්රියාකරුවන් (IF, ELSE, ExecIF සහ ඒ හා සමාන), මෙම සන්දර්භයේ වෙනත් නීති වලට මාරු වීම (Goto, GotoIF), ශ්‍රිත ඇමතුමක (Gosub, Macro) ආකාරයෙන් වෙනත් සන්දර්භයන් වෙත සංක්‍රමණය වීම. වෙනම නියෝගයක් include имя_контекста, එය වත්මන් සන්දර්භයේ අවසානයට වෙනත් සන්දර්භයකින් විධාන එකතු කරයි. ඇතුළත් හරහා ඇතුළත් කර ඇති විධාන සෑම විටම ක්‍රියාත්මක වේ после වත්මන් සන්දර්භයේ විධාන.

FreePBX හි සම්පූර්ණ තර්කය ගොඩනඟා ඇත්තේ Gosub, Macro සහ Handler හසුරුවන්නන් හරහා විවිධ සන්දර්භයන් එකිනෙකට ඇතුළත් කිරීම සහ ඇතුළත් කිරීම මත ය. එන FreePBX ඇමතුම්වල සන්දර්භය සලකා බලන්න

FreePBX අවබෝධ කර ගැනීම සහ එය Bitrix24 සහ තවත් දේ සමඟ ඒකාබද්ධ කිරීම

ඇමතුම ඉහළ සිට පහළට සියලු සන්දර්භ හරහා ගමන් කරයි, එක් එක් සන්දර්භය තුළ මැක්‍රෝ (මැක්‍රෝ), ශ්‍රිත (ගොසුබ්) හෝ සංක්‍රාන්ති (ගෝටෝ) වැනි වෙනත් සන්දර්භවලට ඇමතුම් තිබිය හැකිය, එබැවින් හැඳින්වෙන දෙයෙහි සැබෑ ගසට පමණක් කළ හැකිය. ලඝු-සටහන් වල නිරීක්ෂණය කළ යුතුය.

සාමාන්‍ය PBX සඳහා සාමාන්‍ය සැකසුම් රූප සටහනක් පහත දැක්වේ. ඇමතීමේදී, පැමිණෙන මාර්ගවල DID සොයනු ලැබේ, එය සඳහා තාවකාලික කොන්දේසි පරීක්ෂා කරනු ලැබේ, සෑම දෙයක්ම පිළිවෙලට තිබේ නම්, හඬ මෙනුව දියත් කරනු ලැබේ. එයින්, බොත්තම 1 එබීමෙන් හෝ කල් ඉකුත්වීමෙන්, ඇමතුම් ක්‍රියාකරුවන්ගේ කණ්ඩායමට පිටවන්න. ඇමතුම අවසන් වූ පසු, hangupcall මැක්‍රෝ කැඳවනු ලැබේ, ඉන්පසු විශේෂ හසුරුවන්න (hangup හසුරුවන්න) හැර ඩයල්ප්ලෑන් තුළ කිසිවක් කළ නොහැක.

FreePBX අවබෝධ කර ගැනීම සහ එය Bitrix24 සහ තවත් දේ සමඟ ඒකාබද්ධ කිරීම

මෙම ඇමතුම් ඇල්ගොරිතමයේ අපි CRM වෙත ඇමතුමේ ආරම්භය, පටිගත කිරීම ආරම්භ කළ යුත්තේ කොතැනින්ද, පටිගත කිරීම අවසන් කළ යුත්තේ කොතැනින්ද යන්න සහ CRM වෙත ඇමතුම පිළිබඳ තොරතුරු සමඟ එය යැවිය යුත්තේ කොතැනින්ද?

බාහිර පද්ධති සමඟ ඒකාබද්ධ වීම

PBX සහ CRM ඒකාබද්ධ කිරීම යනු කුමක්ද? මේවා මෙම වේදිකා දෙක අතර දත්ත සහ සිදුවීම් පරිවර්තනය කර ඒවා එකිනෙකට යවන සැකසුම් සහ වැඩසටහන් වේ. ස්වාධීන පද්ධති සඳහා සන්නිවේදනය සඳහා වඩාත් පොදු මාර්ගය API හරහා වන අතර API වෙත ප්‍රවේශ වීමට වඩාත් ජනප්‍රිය ක්‍රමය වන්නේ HTTP REST වේ. නමුත් තරු ලකුණ සඳහා නොවේ.

ඇතුළත තරු ලකුණ වන්නේ:

  • AGI - බාහිර වැඩසටහන්/සංරචකවල සමමුහුර්ත ඇමතුම, ප්‍රධාන වශයෙන් dialplan හි භාවිතා වේ, වැනි පුස්තකාල තිබේ phpagi, PAGI

  • AMI - සිදුවීම් වලට දායක වීමේ සහ පෙළ විධාන ඇතුළත් කිරීමේ මූලධර්මය මත ක්‍රියා කරන පෙළ TCP සොකට් එකක්, ඇතුළත සිට SMTP වලට සමාන වේ, සිදුවීම් නිරීක්ෂණය කිරීමට සහ ඇමතුම් කළමනාකරණය කිරීමට හැකිය, පුස්තකාලයක් ඇත PAMI - Asterisk සමඟ සම්බන්ධතාවයක් නිර්මාණය කිරීම සඳහා වඩාත් ජනප්රියයි

AMI ප්රතිදාන උදාහරණය

සිදුවීම: නව නාලිකාව
වරප්රසාද: අමතන්න, සියල්ල
නාලිකාව: PJSIP/VMS_pjsip-0000078b
නාලිකා තත්ත්වය: 4
ChannelStateDesc: නාද කරන්න
ඇමතුම් අංකය: 111222
අමතන්නාගේ නම: 111222
ConnectedLineNum:
සම්බන්ධිත රේඛා නාමය:
භාෂාව: en
ගිණුම් කේතය:
සන්දර්භය: සිට-pstn
දිග: එස්
ප්‍රමුඛතාවය: 1
අද්විතීය: 1599589046.5244
Linkedid: 1599589046.5244

  • ARI යනු JSON ආකෘතියෙන් REST, WebSocket හරහා යන දෙකෙහිම මිශ්‍රණයකි - නමුත් නැවුම් පුස්තකාල සහ දවටන සමඟ, ඉතා හොඳ නැත, අතින් සොයා ගත නොහැක (phparia, phpari) වසර 3 කට පමණ පෙර ඔවුන්ගේ සංවර්ධනය බවට පත් විය.

ඇමතුමක් ආරම්භ කරන විට ARI ප්‍රතිදානයේ උදාහරණය

{ "variable":"CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "channel":{ "id" »:»1599644315.5334″, «නම»:»PJSIP/VMSpjsip-000007b6″, "state":"Ring", "Caller":{ "name":"111222″, "number":"111222″ }, "සම්බන්ධයි":{ "name":"", "number" :"" }, "ගිණුම් කේතය":"", "dialplan":{ "context":"from-pstn", "exten":"s", "priority":2, "appනම":"Stasis", "යෙදුමදත්ත":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"en" }, "asteriskid":"48:5b:aa:aa:aa:aa", "යෙදුම":"hello-world" }

පහසුව හෝ අපහසුතාවය, විශේෂිත API සමඟ වැඩ කිරීමේ හැකියාව හෝ නොහැකියාව තීරණය කරනු ලබන්නේ විසඳිය යුතු කාර්යයන් මගිනි. CRM සමඟ ඒකාබද්ධ කිරීම සඳහා වන කාර්යයන් පහත පරිදි වේ:

  • ඇමතුමේ ආරම්භය ලුහුබඳින්න, එය මාරු කළ ස්ථානය, ඇමතුම් ID, DID, ආරම්භක සහ අවසන් වේලාවන්, සමහරවිට නාමාවලියෙන් දත්ත (දුරකථනය සහ CRM පරිශීලකයා අතර සම්බන්ධතාවයක් සෙවීමට)

  • ඇමතුමේ පටිගත කිරීම ආරම්භ කර අවසන් කරන්න, එය අපේක්ෂිත ආකෘතියෙන් සුරකින්න, ගොනුව පිහිටා ඇති පටිගත කිරීම අවසානයේ දැනුම් දෙන්න

  • බාහිර සිදුවීමක් මත ඇමතුමක් ආරම්භ කරන්න (වැඩසටහනෙන්), අභ්යන්තර අංකයක්, බාහිර අංකයක් අමතන්න සහ ඒවා සම්බන්ධ කරන්න

  • විකල්ප: ස්ථානයක් නොමැති විට (CRM අනුව) ඇමතුම් ස්වයංක්‍රීයව මාරු කිරීම සඳහා CRM, ඩයලර් කණ්ඩායම් සහ FollowME සමඟ ඒකාබද්ධ වන්න

මෙම සියලු කාර්යයන් AMI හෝ ARI හරහා විසඳිය හැක, නමුත් ARI සපයන්නේ බොහෝ අඩු තොරතුරු, බොහෝ සිදුවීම් නොමැත, AMI සතුව තවමත් ඇති බොහෝ විචල්‍යයන් (උදාහරණයක් ලෙස, සාර්ව ඇමතුම්, මැක්‍රෝ තුළ විචල්‍ය සැකසීම, ඇමතුම් පටිගත කිරීම ඇතුළුව) නිරීක්ෂණය නොකෙරේ. එබැවින්, නිවැරදි සහ නිවැරදි ලුහුබැඳීම සඳහා, අපි දැනට AMI තෝරා ගනිමු (නමුත් සම්පූර්ණයෙන්ම නොවේ). ඊට අමතරව (හොඳයි, මෙය නොමැතිව කොහෙද, අපි කම්මැලි මිනිසුන්) - මුල් කෘතියේ (habr හි ලිපිය) 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

ConnectedLineNum:

සම්බන්ධිත රේඛා නාමය:

භාෂාව: en

ගිණුම් කේතය:

සන්දර්භය: සිට-pstn

දිග: එස්

ප්‍රමුඛතාවය: 1

අද්විතීය: 1599589046.5244

Linkedid: 1599589046.5244

යෙදුම: AppData සකසන්න:

CallStart=1599571046

මක්නිසාද යත් FreePBX විසින් widthion.conf සහ lengthion_ ගොනු නැවත ලියයිඅතිරේක.conf, අපි ගොනුව භාවිතා කරන්නෙමු දිග හැරීම_චාරිත්රයක්.conf

lengthion_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

  • සැකසීම _අභිරුචි සන්දර්භ වෙත ගෙන යන අතර ඔබට FreePBX වින්‍යාසයන් ස්පර්ශ කිරීමට හෝ සංස්කරණය කිරීමට ඉඩ නොදේ - [ හරහා එනext-did-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 සමඟ වැඩ කිරීමේ යෝජනා ක්රමය සම්පූර්ණයෙන්ම සරල හා විනිවිද පෙනෙන නොවන බැවින්, එය වෙනම සාකච්ඡා කළ යුතුය. Asterisk, AMI ක්‍රියාත්මක වූ විට, සරලව වරාය විවෘත කරයි, එපමණයි. සේවාදායකයකු සම්බන්ධ වූ විට, එය අවසරය ඉල්ලා සිටින අතර, පසුව සේවාලාභියා අවශ්ය සිදුවීම් සඳහා දායක වේ. සිදුවීම් සරල පෙළකින් පැමිණේ, PAMI විසින් ව්‍යුහගත වස්තු බවට පරිවර්තනය කරන අතර උනන්දුවක් දක්වන සිදුවීම්, ක්ෂේත්‍ර, අංක ආදිය සඳහා පමණක් පෙරීමේ කාර්යය සැකසීමේ හැකියාව සපයයි.

ඇමතුම පැමිණි විගස, NewExten සිදුවීම මාපිය [from-pstn] සන්දර්භයෙන් ආරම්භ වේ, එවිට සියලුම සිදුවීම් සන්දර්භය තුළ ඇති රේඛා අනුපිළිවෙලට යයි. _custom dialplan හි නිශ්චිතව දක්වා ඇති CallMeCallerIDName සහ CallStart විචල්‍ය වලින් තොරතුරු ලැබුණු විට,

  1. ඇමතුම පැමිණි දිගු අංකයට අනුරූප පරිශීලක හැඳුනුම්පත ඉල්ලීමේ කාර්යය. එය ඩයල්-අප් කණ්ඩායමක් නම් කුමක් කළ යුතුද? ප්‍රශ්නය දේශපාලනිකයි, ඔබ සැමට එකවර ඇමතුමක් සෑදීමට අවශ්‍යද (සියල්ලන්ම එකවර අමතන විට) නැතහොත් අනෙක් අතට ඇමතුමක් ගන්නා විට ඔවුන් අමතන ආකාරයට නිර්මාණය කළ යුතුද? බොහෝ සේවාලාභීන් සතුව Fisrt Available උපාය මාර්ගය ඇත, එබැවින් මෙහි කිසිදු ගැටළුවක් නොමැත, එක් ඇමතුමක් පමණි. නමුත් ප්‍රශ්නය විසඳිය යුතුයි.

  2. Bitrix24 හි ඇමතුම් ලියාපදිංචි කිරීමේ කාර්යය, CallID ආපසු ලබා දෙන අතර, පසුව ඇමතුම් පරාමිති වාර්තා කිරීමට සහ පටිගත කිරීමට සබැඳියක් අවශ්‍ය වේ. දිගු අංකය හෝ පරිශීලක හැඳුනුම්පත අවශ්‍ය වේ

FreePBX අවබෝධ කර ගැනීම සහ එය Bitrix24 සහ තවත් දේ සමඟ ඒකාබද්ධ කිරීම

ඇමතුම අවසන් වූ පසු, වාර්තා බාගත කිරීමේ කාර්යය කැඳවනු ලැබේ, එය ඇමතුම සම්පූර්ණ කිරීමේ තත්ත්වය එකවර වාර්තා කරයි (කාර්යබහුල, පිළිතුරක් නැත, සාර්ථකත්වය), සහ වාර්තාව සමඟ mp3 ගොනුවට සබැඳියක් බාගත කරයි (ඇත්නම්).

CallMeIn.php මොඩියුලය අඛණ්ඩව ක්‍රියාත්මක විය යුතු නිසා, ඒ සඳහා SystemD ආරම්භක ගොනුවක් නිර්මාණය කර ඇත. callme.service, එය /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 ස්ක්‍රිප්ට් සඳහා ඉල්ලීමක් ලැබුණු විට ඇමතුමක් ආරම්භ කිරීම (බිට්‍රික්ස් හි ඇති "ඇමතුම්" බොත්තම භාවිතා කිරීම ඇතුළුව). එය වෙබ් සේවාදායකයක් නොමැතිව ක්‍රියා නොකරයි, ඉල්ලීම HTTP POST හරහා ලැබේ, ඉල්ලීමෙහි ටෝකනයක් ඇත

  • Bitrix හි ඇමතුම, එහි පරාමිතීන් සහ වාර්තා පිළිබඳ පණිවිඩය. ඇමතුමක් අවසන් වූ විට [උප-ඇමතුම්-අභ්‍යන්තර-අවසන්] ඩයල්ප්ලෑන් එකෙහි තරු ලකුණ මගින් වෙඩි තබන ලදී

FreePBX අවබෝධ කර ගැනීම සහ එය Bitrix24 සහ තවත් දේ සමඟ ඒකාබද්ධ කිරීම

වෙබ් සේවාදායකය අවශ්‍ය වන්නේ කරුණු දෙකක් සඳහා පමණි - Bitrix වාර්තා ගොනු බාගත කිරීම (HTTPS හරහා) සහ CallMeOut.php ස්ක්‍රිප්ට් ඇමතීම. ඔබට ගොඩනඟන ලද FreePBX සේවාදායකය භාවිතා කළ හැකිය, /var/www/html වන ගොනු, ඔබට වෙනත් සේවාදායකයක් ස්ථාපනය කිරීමට හෝ වෙනත් මාර්ගයක් සඳහන් කිරීමට හැකිය.

වෙබ් සේවාදායකය

ස්වාධීන අධ්‍යයනය සඳහා වෙබ් සේවාදායක සැකසුම අත්හැර දමමු (ටයිට්ස්, ටයිට්ස්, ටයිට්ස්) ඔබට වසමක් නොමැති නම්, ඔබට FreeDomain උත්සාහ කළ හැකිය( https://www.freenom.com/ru/index.html), එය ඔබට ඔබේ සුදු IP සඳහා නොමිලේ නමක් ලබා දෙනු ඇත (බාහිර ලිපිනය පමණක් තිබේ නම් රවුටරය හරහා වරාය 80, 443 යොමු කිරීමට අමතක නොකරන්න). ඔබ දැන් DNS වසමක් නිර්මාණය කළේ නම්, සියලුම සේවාදායකයන් පූරණය වන තෙක් ඔබට (මිනිත්තු 15 සිට පැය 48 දක්වා) රැඳී සිටීමට සිදුවේ. ගෘහස්ථ සැපයුම්කරුවන් සමඟ වැඩ කිරීමේ අත්දැකීම් අනුව - පැය 1 සිට දිනකට.

ස්ථාපන ස්වයංක්රීයකරණය

ස්ථාපනය වඩාත් පහසු කිරීම සඳහා github මත ස්ථාපකයක් සංවර්ධනය කර ඇත. නමුත් එය කඩදාසි මත සුමට විය - අපි ඒ සියල්ල අතින් ස්ථාපනය කරන අතරතුර, මේ සියල්ල සමඟ ටින්කර් කිරීමෙන් පසු මිතුරන් යනු කුමක්ද, කවුද යන්නේ කොහේද සහ එය නිදොස් කරන්නේ කෙසේද යන්න පැහැදිලි විය. තවම ස්ථාපකයක් නොමැත

Docker

ඔබට ඉක්මනින් විසඳුම උත්සාහ කිරීමට අවශ්‍ය නම් - ඩොකර් සමඟ විකල්පයක් තිබේ - ඉක්මනින් බහාලුමක් සාදා, එයට පිටතින් වරායන් ලබා දෙන්න, සැකසුම් ගොනු ලිස්සා ගොස් උත්සාහ කරන්න (ඔබට දැනටමත් සහතිකයක් තිබේ නම්, LetsEncrypt කන්ටේනරය සමඟ විකල්පය මෙයයි. , ඔබට අවශ්‍ය වන්නේ ප්‍රතිලෝම ප්‍රොක්සිය FreePBX වෙබ් සේවාදායකය වෙත හරවා යැවීමට පමණි (අපි එයට තවත් වරාය 88 ක් ලබා දුන්නා), ඩොකර් හි LetsEncrypt මත පදනම්ව මෙම ලිපිය

ඔබට බාගත කළ ව්‍යාපෘති ෆෝල්ඩරය තුළ ගොනුව ධාවනය කිරීමට අවශ්‍ය වේ (ගිට් ක්ලෝනයෙන් පසුව), නමුත් පළමුව තරු ලකුණු වින්‍යාසයට (තරු ලකුණු ෆෝල්ඩරය) ඇතුළු වී ඔබේ වෙබ් අඩවියේ වාර්තා සහ 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 වෙත වෙන වෙනම උඩුගත කරමු.

යොමු

වියාචනය: යථාර්ථයට යම් සමානකමක් මනඃකල්පිත වන අතර එය මා නොවේ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න