Ny fahatakarana ny FreePBX sy ny fampidirana azy amin'ny Bitrix24 sy ny maro hafa

Bitrix24 dia mitambatra goavana izay manambatra ny CRM, ny workflow, ny kaonty ary ny zavatra maro hafa izay tena tian'ny mpitantana ary tsy tena tian'ny mpiasan'ny IT. Ny vavahadin-tserasera dia ampiasain'ny orinasa madinika sy salantsalany maro, ao anatin'izany ny toeram-pitsaboana kely, mpanamboatra ary na dia ny salon hatsaran-tarehy aza. Ny tena asa izay "tia" mpitantana dia ny fampidirana ny telephony sy ny CRM, rehefa misy antso voarakitra avy hatrany ao amin'ny CRM, ny mpanjifa karatra dia noforonina, rehefa tonga, ny vaovao momba ny mpanjifa dia aseho ary ho hitanao avy hatrany hoe iza izy, inona izy. afaka mivarotra ary ohatrinona ny trosany. Fa ny telefaona avy amin'ny Bitrix24 sy ny fampidirana azy amin'ny CRM dia mandany vola, indraindray be. Ao amin'ny lahatsoratra dia hilaza aminao ny traikefa amin'ny fampidirana amin'ny fitaovana misokatra sy ny IP PBX malaza aho freepbx, ary diniho koa ny lojikan'ny asan'ny faritra samihafa

Miasa toy ny outsourcer aho amin'ny orinasa mivarotra sy manamboatra, mampiditra IP telephony. Rehefa nanontaniana aho raha afaka manolotra zavatra ho an'ity sy ity orinasa ity izahay mba hampidirana ny Bitrix24 amin'ny PBX izay ananan'ny mpanjifa, ary koa amin'ny PBX virtoaly amin'ny orinasa VDS isan-karazany, dia nankany amin'ny Google aho. Ary mazava ho azy fa nomeny rohy mankany aho lahatsoratra amin'ny habr, izay misy famaritana, ary github, ary toa mandeha ny zava-drehetra. Saingy rehefa nanandrana nampiasa an'io vahaolana io dia hita fa tsy mitovy amin'ny teo aloha intsony ny Bitrix24, ary maro no mila averina. Fanampin'izany, FreePBX dia tsy asterisk miboridana ho anao, eto dia mila mieritreritra ny fomba hanambatra mora ny fampiasana sy ny hardcore dialplan amin'ny config rakitra.

Mandalina ny lojikan'ny asa isika

Noho izany, ho an'ny fanombohana, ny fomba tokony hiasana rehetra. Rehefa misy antso voaray avy any ivelany ao amin'ny PBX (SIP INVITE hetsika avy amin'ny mpamatsy), dia manomboka ny fanodinana ny dialplan (dial plan, dialplan) - ny fitsipiky ny inona sy ny tokony hatao amin'ny antso. Avy amin'ny fonosana voalohany dia afaka mahazo fampahalalana be dia be ianao, izay azo ampiasaina amin'ny fitsipika. Ny fitaovana tsara indrindra amin'ny fandalinana ny anatiny SIP dia ny analyzer sngrep (rohy) izay apetraka fotsiny amin'ny fizarana malaza amin'ny alΓ lan'ny apt install/yum install sy ny toy izany, fa azo amboarina avy amin'ny loharano ihany koa. Andeha hojerentsika ny log in sngrep

Ny fahatakarana ny FreePBX sy ny fampidirana azy amin'ny Bitrix24 sy ny maro hafa

Amin'ny endrika tsotra, ny dialplan dia tsy miresaka afa-tsy amin'ny fonosana voalohany, indraindray mandritra ny resaka ihany koa, dia afindra ny antso, fanindriana bokotra (DTMF), zavatra mahaliana isan-karazany toa ny FollowMe, RingGroup, IVR sy ny hafa.

Inona no ao anatin'ny Invite Pack

Ny fahatakarana ny FreePBX sy ny fampidirana azy amin'ny Bitrix24 sy ny maro hafa

Raha ny marina, ny ankamaroan'ny dialplans tsotra dia miasa miaraka amin'ireo saha roa voalohany, ary ny lojika manontolo dia mihodina manodidina ny DID sy CallerID. DID - izay iantsoanay, CallerID - iza no miantso.

Fa na izany na tsy izany, manana orinasa izahay fa tsy telefaona iray - izay midika fa ny PBX dia mety manana vondrona fiantsoana (marika / misesy amin'ny fitaovana maromaro) amin'ny laharan'ny tanΓ na (Ring Group), IVR (Manahoana, niantso anao ... Press iray ho an'ny ...), milina famaliana ( Andian-teny), fepetran'ny fotoana, fandefasana amin'ny isa hafa na amin'ny sela (Araho aho, mandroso). Midika izany fa sarotra be ny mamaritra mazava tsara hoe iza no tena handray antso ary iza no hifampiresaka rehefa tonga ny antso. Ity misy ohatra iray amin'ny fiandohan'ny antso mahazatra amin'ny PBX an'ny mpanjifanay

Ny fahatakarana ny FreePBX sy ny fampidirana azy amin'ny Bitrix24 sy ny maro hafa

Rehefa tafiditra soa aman-tsara ao amin'ny PBX ny antso dia mandeha amin'ny alΓ lan'ny dialplan amin'ny "contexte" samihafa. Ny teny manodidina avy amin'ny fomba fijerin'ny Asterisk dia andian-baiko voaisa, izay samy misy sivana amin'ny laharana nalaina (antsoina hoe exten, ho an'ny antso ivelany amin'ny dingana voalohany exten=DID). Ny baiko ao amin'ny tsipika dialplan dia mety ho na inona na inona - fiasa anatiny (ohatra, miantsoa mpanjifa anatiny - Dial(), apetraho ny telefaona - Hangup()), mpandraharaha misy fepetra (IF, ELSE, ExecIF sy ny toy izany), fifindrana amin'ny fitsipika hafa amin'ity contexte ity (Goto, GotoIF), fifindrana mankany amin'ny toe-javatra hafa amin'ny endrika antso (Gosub, Macro). Directive misaraka include имя_контСкста, izay manampy baiko avy amin'ny contexte hafa mankany amin'ny faran'ny contexte ankehitriny. Ny baiko tafiditra amin'ny alalan'ny fampidirana dia tanterahina foana послС baikon'ny contexte ankehitriny.

Ny lojika manontolo amin'ny FreePBX dia naorina amin'ny fampidirana ireo toe-javatra samihafa amin'ny tsirairay amin'ny alΓ lan'ny fampidirana sy antso amin'ny alΓ lan'ny Gosub, Macro ary Handler. Diniho ny tontolon'ny antso FreePBX miditra

Ny fahatakarana ny FreePBX sy ny fampidirana azy amin'ny Bitrix24 sy ny maro hafa

Ny antso dia mamakivaky ny contexte rehetra avy any ambony ka hatrany ambany, isaky ny contexte dia mety misy antso amin'ny contexte hafa toy ny macros (Macro), functions (Gosub) na transitions fotsiny (Goto), ka ny tena hazo amin'ilay antsoina dia afaka ihany. hojerena ao amin'ny logs.

Ny kisary fanaingoana mahazatra ho an'ny PBX mahazatra dia aseho eto ambany. Rehefa miantso ny DID dia karohina amin'ny lalana ho avy, ny fepetra vonjimaika no jerena, raha milamina ny zava-drehetra, dia alefa ny menio feo. Avy eo, amin'ny alΓ lan'ny fanindriana ny bokotra 1 na ny fiafaran'ny fotoana, mivoaha mankany amin'ny vondron'ny mpandraharaha miantso. Rehefa tapitra ny antso, dia antsoina ny macro hangupcall, ary aorian'izay dia tsy misy azo atao ao amin'ny dialplan, afa-tsy ireo mpitantana manokana (hangup handler).

Ny fahatakarana ny FreePBX sy ny fampidirana azy amin'ny Bitrix24 sy ny maro hafa

Aiza amin'ity algorithm antso ity no tokony hanome vaovao momba ny fiandohan'ny antso ho an'ny CRM, aiza no hanombohana firaketana, aiza no hamarana ny fandraisam-peo ary handefa izany miaraka amin'ny fampahalalana momba ny antso amin'ny CRM?

Fampidirana amin'ny rafitra ivelany

Inona no atao hoe PBX sy CRM integration? Ireo dia fandrindrana sy programa izay mamadika angona sy hetsika eo amin'ireo sehatra roa ireo ary mandefa azy ireo. Ny fomba mahazatra indrindra amin'ny rafitra tsy miankina dia amin'ny alΓ lan'ny API, ary ny fomba malaza indrindra hidirana amin'ny API dia ny HTTP REST. Fa tsy ho an'ny asterisk.

Ao anatin'ny Asterisk dia:

  • AGI - antso an-tariby amin'ny programa / singa ivelany, ampiasaina indrindra amin'ny dialplan, misy tranomboky toy ny phpagi, PAGI

  • AMI - socket TCP text izay miasa amin'ny fitsipiky ny famandrihana hetsika sy fampidirana baiko an-tsoratra, mitovy amin'ny SMTP avy ao anatiny, afaka manara-maso ny hetsika sy mitantana antso, misy tranomboky. PAMI - ny malaza indrindra amin'ny famoronana fifandraisana amin'ny Asterisk

Ohatra avy amin'ny AMI

Hetsika: Fantsona vaovao
Tombontsoa: miantso, rehetra
Channel: PJSIP/VMS_pjsip-0000078b
Fanjakana Channel: 4
ChannelStateDesc: Ring
Antsoy: 111222
Anaran'ny mpiantso: 111222
ConnectedLineNum:
anarana andalana mifandray:
Fiteny: mg
kaonty kaonty:
Toe-javatra: avy-pstn
Exten : s
Laharam-pahamehana: 1
Ny tokana: 1599589046.5244
Loharano: 1599589046.5244

  • Ny ARI dia fifangaroan'ny roa tonta, amin'ny alΓ lan'ny REST, WebSocket, amin'ny endrika JSON - fa miaraka amin'ny tranomboky sy fonosana vaovao, tsy dia tsara loatra, tsy hita (phparia, phpari) izay lasa teo amin'ny fivoarany tokony ho 3 taona lasa izay.

Ohatra amin'ny famoahana ARI rehefa misy antso

{ "variable": "CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "channel":{ "id Β»:Β»1599644315.5334β€³, Β«anaranaΒ»:Β»PJSIP/VMSpjsip-000007b6β€³, "state": "Ring", "caller":{ "name":"111222β€³, "number":"111222β€³ }, "connected":{ "name":"", "numero" :"" }, "accountcode":"", "dialplan":{ "context":"from-pstn", "exten":"s", "priority":2, "appanarana":"Stasis", "appdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"en" }, "asteriskid":"48:5b:aa:aa:aa:aa", "application":"hello-world" }

Ny fahasahiranana na ny fahasahiranana, ny mety na ny tsy fahafahana miasa amin'ny API manokana dia voafaritra amin'ny asa tokony hovahana. Ny asa ho an'ny fampidirana amin'ny CRM dia toy izao manaraka izao:

  • Araho ny fiandohan'ny antso, izay nafindrany, esory CallerID, DID, fanombohana sy fiafarana, angamba angona avy amin'ny lahatahiry (hikarohana fifandraisana eo amin'ny telefaona sy ny mpampiasa CRM)

  • Atombohy ary farano ny firaketana ny antso, tehirizo amin'ny endrika irina, ampahafantaro amin'ny faran'ny fandraketana ny toerana misy ny rakitra

  • Manomboha antso amin'ny hetsika ivelany (avy amin'ny fandaharana), miantsoa laharana anatiny, laharana ivelany ary mampifandray azy ireo

  • tsy voatery: ampifandraiso amin'ny CRM, vondrona dialer ary FollowME ho an'ny famindrana antso ho azy raha tsy misy toerana (araka ny CRM)

Ireo asa rehetra ireo dia azo vahana amin'ny alΓ lan'ny AMI na ARI, fa ny ARI dia manome fampahalalana kely kokoa, tsy dia misy hetsika maro, maro ny variables izay mbola ananan'ny AMI (ohatra, ny antso an-tariby, ny fametrahana ny fari-pahaizana ao anatin'ny macro, anisan'izany ny firaketana an-tsoratra) dia tsy arahina. Noho izany, ho an'ny fanaraha-maso marina sy marina, andao hifidy AMI amin'izao fotoana izao (fa tsy tanteraka). Fanampin'izany (eny, aiza ho aiza raha tsy misy an'ity, kamo isika) - amin'ny asa tany am-boalohany (lahatsoratra amin'ny habr) mampiasa PAMI. *Avy eo ianao dia mila miezaka ny manoratra indray amin'ny ARI, fa tsy ny zava-misy fa hiasa.

Reinventing integration

Mba hahafahan'ny FreePBX afaka mitatitra amin'ny AMI amin'ny fomba tsotra momba ny fiandohan'ny antso, ny ora farany, ny isa, ny anaran'ireo rakitra voarakitra, dia mora indrindra ny manao kajy ny faharetan'ny antso amin'ny fampiasana fitaka mitovy amin'ireo mpanoratra tany am-boalohany. - ampidiro ny fari-piainanao ary zarao ny vokatra ho an'ny fisiany. Manoro hevitra ny PAMI hanao izany amin'ny alΓ lan'ny fanivanana tsotra.

Ity misy ohatra iray amin'ny fametrahana ny fari-piainanao manokana amin'ny ora fanombohan'ny antso (s dia isa manokana ao amin'ny dialplan izay atao alohan'ny hanombohana ny fikarohana DID)

[ext-did-custom]

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

Hetsika AMI ohatra ho an'ity andalana ity

Hetsika: Fantsona vaovao

Tombontsoa: miantso, rehetra

Channel: PJSIP/VMS_pjsip-0000078b

Fanjakana Channel: 4

ChannelStateDesc: Ring

Antsoy: 111222

Anaran'ny mpiantso: 111222

ConnectedLineNum:

anarana andalana mifandray:

Fiteny: mg

kaonty kaonty:

Toe-javatra: avy-pstn

Exten : s

Laharam-pahamehana: 1

Ny tokana: 1599589046.5244

Loharano: 1599589046.5244

Fampiharana: Mametraha AppData:

CallStart=1599571046

Satria ny FreePBX dia misolo ny rakitra extention.conf sy extention_fanampiny.conf, hampiasainay ny rakitra fanitarana_fanao.conf

Kaody feno amin'ny extention_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

Ny endri-javatra sy ny fahasamihafan'ny drafitra dial tany am-boalohany an'ny mpanoratra ny lahatsoratra tany am-boalohany -

  • Dialplan amin'ny endrika .conf, araka izay irin'ny FreePBX (eny, afaka .ael, fa tsy ny dikan-teny rehetra ary tsy mety foana)

  • Raha tokony ho fanodinana ny farany amin'ny alalan'ny exten => h, ny fanodinana dia nampidirina tamin'ny alalan'ny hangup_handler, satria ny FreePBX dialplan dia niasa tamin'izany ihany.

  • Tady fiantsoana script raikitra, teny nindramina fanampiny ary laharan'ny antso ivelany ExtNum

  • Ny fanodinana dia afindra amin'ny _contexte custom ary mamela anao tsy hikasika na hanova ny config FreePBX - miditra amin'ny [ext-did-custom], mivoaka amin'ny [outbound-allroutes-custom]

  • Tsy mifamatotra amin'ny isa - ny rakitra dia manerana izao rehetra izao ary mila amboarina ho an'ny lalana sy rohy mankany amin'ny mpizara ihany

Raha vao manomboka dia mila mandefa script ao amin'ny AMI ihany koa ianao amin'ny alΓ lan'ny fidirana sy ny tenimiafina - ho an'ity, FreePBX dia manana rakitra _custom ihany koa.

manager_custom.conf rakitra

;;  это Π»ΠΎΠ³ΠΈΠ½
[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

Ireo rakitra roa ireo dia tsy maintsy apetraka ao amin'ny /etc/asterisk, dia avereno vakiana ny configs (na avereno indray ny asterisk)

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

Andeha isika hifindra amin'ny PHP

Mamorona script ary mamorona serivisy

Satria tsy tsotra sy mangarahara tanteraka ny drafitra hiarahana amin'ny Bitrix 24, serivisy ho an'ny AMI, dia tsy maintsy resahina misaraka. Asterisk, rehefa mihetsika ny AMI dia sokafy fotsiny ny seranan-tsambo dia izay. Rehefa miditra ny mpanjifa dia mangataka fanomezan-dΓ lana izy, avy eo ny mpanjifa dia misoratra anarana amin'ny hetsika ilaina. Ny hetsika dia tonga amin'ny lahatsoratra tsotra, izay avadika ho zavatra voarafitra ny PAMI ary manome ny fahafahana mametraka ny fanivanana ho an'ny hetsika mahaliana, saha, isa, sns.

Raha vantany vao tonga ny antso, ny hetsika NewExten dia alefa manomboka amin'ny parent [avy amin'ny-pstn] context, avy eo ny hetsika rehetra dia mandeha amin'ny filaharan'ny andalana ao amin'ny contextes. Rehefa voaray ny fampahalalana avy amin'ny fari-pahaizan'ny CallMeCallerIDName sy CallStart voatondro ao amin'ny _drafi-peonina mahazatra, dia

  1. Ny asan'ny fangatahana ny UserID mifanaraka amin'ny laharan'ny fanitarana izay nahatongavan'ny antso. Ahoana raha vondrona dial-up? Politika ny fanontaniana, mila mamorona antso ho an'ny rehetra indray ve ianao (rehefa miantso ny rehetra) sa mamorona araka ny antsony rehefa miantso? Ny ankamaroan'ny mpanjifa dia manana ny paikady Fisrt Available, noho izany dia tsy misy olana amin'izany fa iray ihany no miantso. Mila vahana anefa ny olana.

  2. Ny asa fisoratana anarana amin'ny antso ao amin'ny Bitrix24, izay mamerina ny CallID, izay takiana amin'ny tatitra ny mari-pamantarana antso sy rohy mankany amin'ny fandraisam-peo. Mila isa fanitarana na UserID

Ny fahatakarana ny FreePBX sy ny fampidirana azy amin'ny Bitrix24 sy ny maro hafa

Aorian'ny fiafaran'ny antso dia antsoina ny asa fampidinana rakitsoratra, izay mitatitra ny satan'ny fahavitan'ny antso (Busy, Tsy misy valiny, Fahombiazana), ary misintona rohy mankany amin'ny rakitra mp3 miaraka amin'ny rakitsoratra (raha misy).

Satria mila mandeha tsy an-kijanona ny maody CallMeIn.php, dia noforonina ho azy ny rakitra fanombohana SystemD callme.service, izay tsy maintsy apetraka ao amin'ny /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

Ny fanombohana sy ny fandefasana ny script dia mitranga amin'ny systemctl na serivisy

# systemctl enable callme
# systemctl start callme

Hanomboka indray ny serivisy raha ilaina (raha misy fianjerana). Ny serivisy fanaraha-maso ny boaty dia tsy mitaky mpizara tranonkala hapetraka, php ihany no ilaina (izay azo antoka fa ao amin'ny mpizara FeePBX). Saingy raha tsy misy ny fidirana amin'ny firaketana antso amin'ny alΓ lan'ny mpizara Web (miaraka amin'ny https ihany koa), dia tsy azo atao ny mihaino ny firaketana antso.

Andeha isika hiresaka momba ny antso mivoaka. Ny script CallMeOut.php dia manana fiasa roa:

  • Fanombohana antso rehefa voaray ny fangatahana script php (anisan'izany ny fampiasana ny bokotra "Call" ao amin'ny Bitrix mihitsy). Tsy mandeha raha tsy misy mpizara tranonkala, voaray amin'ny HTTP POST ny fangatahana, misy marika ny fangatahana

  • Hafatra momba ny antso, ny mari-pamantarana ary ny firaketana ao amin'ny Bitrix. Notifirin'ny Asterisk tao amin'ny planina [sub-call-internal-ended] rehefa tapitra ny antso

Ny fahatakarana ny FreePBX sy ny fampidirana azy amin'ny Bitrix24 sy ny maro hafa

Zavatra roa ihany no ilaina ny mpizara tranonkala - ny fampidinana ny rakitra firaketana Bitrix (amin'ny alΓ lan'ny HTTPS) ary ny fiantsoana ny script CallMeOut.php. Azonao atao ny mampiasa ny mpizara FreePBX naorina, ny rakitra misy azy dia /var/www/html, azonao atao ny mametraka mpizara hafa na manondro lalana hafa.

Mpizara tranonkala

Andao hiala amin'ny fametrahana ny mpizara tranonkala mba hianatra tsy miankina (tyts, tyts, tyts). Raha tsy manana sehatra ianao dia afaka manandrana FreeDomain( https://www.freenom.com/ru/index.html), izay hanome anarana maimaim-poana ho an'ny IP fotsy anao (aza adino ny mandefa ports 80, 443 amin'ny alΓ lan'ny router raha toa ka eo amin'io ihany ny adiresy ivelany). Raha vao namorona sehatra DNS ianao dia tsy maintsy miandry (15 minitra ka hatramin'ny 48 ora) mandra-pahatongan'ny mpizara rehetra. Araka ny traikefan'ny fiaraha-miasa amin'ny mpamatsy an-trano - hatramin'ny adiny 1 ka hatramin'ny iray andro.

Fametrahana automation

Nisy installer novolavolaina tao amin'ny github mba hanamora kokoa ny fametrahana azy. Saingy nilamina teo amin'ny taratasy izany - raha nametraka azy rehetra tamin'ny tanana izahay, satria taorian'ny nandinihana an'izany rehetra izany dia nanjary mazava tsara hoe inona no namana miaraka amin'iza, iza no mandeha any ary ahoana no hanaisotra azy. Tsy mbola misy installer

Docker

Raha te hanandrana haingana ny vahaolana ianao - misy safidy miaraka amin'i Docker - mamorona container haingana, omeo seranana any ivelany izy io, aforeto ny fisie ary andramo (io no safidy miaraka amin'ny container LetsEncrypt, raha efa manana taratasy fanamarinana ianao , mila mamindra fotsiny ny proxy mifamadika amin'ny mpizara tranonkala FreePBX ianao (nomenay seranana hafa izy io dia 88), LetsEncrypt amin'ny docker mifototra amin'ny Ity lahatsoratra ity

Mila mihazakazaka ny rakitra ao amin'ny lahatahiry tetikasa alaina ianao (aorian'ny git clone), fa midira ao amin'ny asterisk configs (folder asterisk) ary soraty ny lalana mankany amin'ny firaketana sy ny URL an'ny tranokalanao.

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:

Ity rakitra docker-compose.yaml ity dia mandeha amin'ny

docker-compose up -d

Raha tsy manomboka ny nginx, dia misy zavatra tsy mety amin'ny fanamafisana ao amin'ny lahatahiry nginx/ssl_docker.conf

Fampidirana hafa

Ary maninona raha mametraka CRM ao anaty script miaraka amin'izay, hoy izahay. Nianatra API CRM hafa izahay, indrindra fa ny PBX naorina maimaim-poana - ShugarCRM sy Vtiger, ary eny! eny, mitovy ny fitsipika. Saingy tantara iray hafa ity, izay halefantsika misaraka amin'ny github.

soratra masina

Disclaimer: Ny fitoviana amin'ny zava-misy rehetra dia foronina ary tsy izaho.

Source: www.habr.com

Add a comment