FreePBX begripe en it yntegrearje mei Bitrix24 en mear

Bitrix 24 is in enoarme kombinearje dy't CRM, workflow, boekhâlding en in protte oare dingen kombineart dy't managers echt leuk fine en IT-meiwurkers net echt leuk fine. It portaal wurdt brûkt troch in protte lytse en middelgrutte bedriuwen, ynklusyf lytse kliniken, fabrikanten en sels skientme salons. De wichtichste funksje dy't managers "leafde" is de yntegraasje fan telefoany en CRM, as elke oprop fuortendaliks opnommen wurdt yn CRM, wurde kliïntkaarten oanmakke, by ynkommen wurdt ynformaasje oer de klant werjûn en jo kinne fuortendaliks sjen wa't hy is, wat hy is. kin ferkeapje en hoefolle hy skuld. Mar telefony fan Bitrix24 en har yntegraasje mei CRM kostet jild, soms in protte. Yn it artikel sil ik jo de ûnderfining fertelle fan yntegraasje mei iepen ark en de populêre IP PBX freebx, en beskôgje ek de logika fan it wurk fan ferskate dielen

Ik wurkje as outsourcer yn in bedriuw dat ferkeapet en konfigurearret, yntegrearret IP-telefony. Doe't ik waard frege oft wy wat biede kinne oan dit en dit bedriuw om Bitrix24 te yntegrearjen mei PBX's dy't klanten hawwe, lykas mei firtuele PBX's op ferskate VDS-bedriuwen, gie ik nei Google. En hy joech my fansels in keppeling nei artikel in habr, wêr is in beskriuwing, en github, en alles liket te wurkjen. Mar by it besykjen om dizze oplossing te brûken, die bliken dat Bitrix24 net mear itselde is as earder, en in protte moat opnij makke wurde. Derneist is FreePBX gjin bleate asterisk foar jo, hjir moatte jo tinke oer hoe't jo gebrûksgemak en in hardcore dialplan kinne kombinearje yn konfiguraasjebestannen.

Wy studearje de logika fan wurk

Dus om te begjinnen, hoe't it allegear moat wurkje. As in oprop wurdt ûntfongen fan bûten by de PBX (SIP INVITE-evenemint fan de provider), begjint de ferwurking fan it dialoochplan (dialplan, dialplan) - de regels fan wat en yn hokker folchoarder te dwaan mei de oprop. Fan it earste pakket kinne jo in protte ynformaasje krije, dy't dan brûkt wurde kin yn 'e regels. In poerbêst ark foar it bestudearjen fan de ynterne fan SIP is de analysator sngrep (link) dat is gewoan ynstalleare yn populêre distribúsjes fia apt install / yum install en sa, mar it kin ek boud wurde fan boarne. Litte wy nei it oproplog yn sngrep sjen

FreePBX begripe en it yntegrearje mei Bitrix24 en mear

Yn in ferienfâldige foarm giet it dialplan allinnich oer it earste pakket, soms ek by it petear, wurde petearen trochset, knopdrukken (DTMF), ferskate nijsgjirrige saken lykas FollowMe, RingGroup, IVR en oaren.

Wat is yn it útnoegingspakket

FreePBX begripe en it yntegrearje mei Bitrix24 en mear

Eins wurkje de measte ienfâldige dialplannen mei de earste twa fjilden, en de hiele logika draait om DID en CallerID. DID - wêr't wy belje, CallerID - wa ropt.

Mar ommers, wy hawwe in bedriuw en net ien telefoan - dat betsjut dat de PBX nei alle gedachten hat oprop groepen (simultane / opienfolgjende ringing fan ferskate apparaten) op stêd nûmers (Ring Group), IVR (Hallo, do neamd ... Druk ien foar ...), Antwurdmasines (Sinnen), Tiidsbetingsten, Trochstjoere nei oare nûmers of nei in sel (FollowMe, Foarút). Dat betsjut dat it hiel lestich is om ûndûbelsinnich te bepalen wa't eins in oprop krijt en mei wa in petear ha sil as der in oprop komt. Hjir is in foarbyld fan it begjin fan in typyske oprop yn 'e PBX fan ús kliïnten

FreePBX begripe en it yntegrearje mei Bitrix24 en mear

Nei't de oprop mei súkses de PBX yngiet, reizget it troch it dialoochplan yn ferskate "konteksten". De kontekst út it eachpunt fan Asterisk is in nûmere set fan kommando's, wêrfan elk in filter befettet troch it ynstelde nûmer (it hjit exten, foar in eksterne oprop yn 'e earste faze exten=DID). De kommando's yn 'e dialplan-rigel kinne alles wêze - ynterne funksjes (bygelyks, skilje in ynterne abonnee - Dial(), set de telefoan del - Hangup()), betingsten operators (IF, ELSE, ExecIF en sa), oergongen nei oare regels fan dizze kontekst (Goto, GotoIF), oergong nei oare konteksten yn 'e foarm fan in funksje oprop (Gosub, Makro). In aparte rjochtline include имя_контекста, dy't kommando's fan in oare kontekst tafoegje oan 'e ein fan' e hjoeddeistige kontekst. Kommando's opnommen fia include wurde altyd útfierd после kommando's fan 'e hjoeddeistige kontekst.

De hiele logika fan FreePBX is boud op it opnimmen fan ferskate konteksten yn inoar troch ûnder oaren en oprop fia Gosub, Macro en Handler handlers. Beskôgje de kontekst fan ynkommende FreePBX-oproppen

FreePBX begripe en it yntegrearje mei Bitrix24 en mear

De oprop giet beurtelings troch alle konteksten fan boppe nei ûnderen, yn elke kontekst kinne der oproppen wurde nei oare konteksten lykas makro's (Macro), funksjes (Gosub) of gewoan oergongen (Goto), dus de echte beam fan wat hjit kin allinich wurde folge yn 'e logs.

In typysk opsetdiagram foar in typyske PBX wurdt hjirûnder werjûn. By it roppen wurdt DID socht yn ynkommende rûtes, tydlike betingsten wurde dêrfoar kontrolearre, as alles yn oarder is, wurdt it stimmenu lansearre. Fanôf, troch op knop 1 of timeout te drukken, gean út nei de groep fan beloperators. Nei't de oprop einiget, wurdt de hangupcall-makro neamd, wêrnei't neat dien wurde kin yn it dialplan, útsein spesjale handlers (hangup-handler).

FreePBX begripe en it yntegrearje mei Bitrix24 en mear

Wêr yn dit opropalgoritme moatte wy ynformaasje leverje oer it begjin fan 'e oprop nei CRM, wêr't jo opnimme moatte, wêr't de opname einigje en it tegearre mei ynformaasje oer de oprop nei CRM stjoere?

Yntegraasje mei eksterne systemen

Wat is PBX- en CRM-yntegraasje? Dit binne ynstellingen en programma's dy't gegevens en eveneminten konvertearje tusken dizze twa platfoarms en se nei elkoar stjoere. De meast foarkommende manier foar ûnôfhinklike systemen om te kommunisearjen is fia API's, en de populêrste manier om tagong te krijen ta API's is HTTP REST. Mar net foar asterisk.

Binnen Asterisk is:

  • AGI - syngroane oprop nei eksterne programma's / komponinten, benammen brûkt yn it dialplan, d'r binne biblioteken lykas phpagi, PAGI

  • AMI - in tekst TCP-socket dy't wurket op it prinsipe fan ynskriuwe op eveneminten en it ynfieren fan tekstkommando's, liket fan binnen op SMTP, kin eveneminten folgje en petearen beheare, d'r is in bibleteek PAMI - de populêrste foar it meitsjen fan in ferbining mei Asterisk

Foarbyld fan AMI output

Event: Nij kanaal
Privileezje: belje, allegear
Kanaal: PJSIP/VMS_pjsip-0000078b
Kanaalstatus: 4
ChannelStateDesc: Ring
CallerIDNum: 111222
Namme fan beller: 111222
ConnectedLineNum:
ferbûn linenamme:
Taal: en
akkount koade:
Kontekst: fan-pstn
útwreide: s
Prioriteit: 1
Uniqueid: 1599589046.5244
Keppele: 1599589046.5244

  • ARI is in mingsel fan beide, allegear fia REST, WebSocket, yn JSON-formaat - mar mei frisse bibleteken en wrappers, net heul goed, offhand fûn (phparia, phpari) dy't sawat 3 jier lyn yn har ûntwikkeling waard.

Foarbyld fan ARI útfier as in oprop wurdt inisjearre

{ "variable":"CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "kanaal":{ "id" »:»1599644315.5334″, «namme»:»PJSIP/VMSpjsip-000007b6″, "state":"Ring", "beller":{ "namme":"111222", "nûmer":"111222" }, "ferbûn":{ "namme":"", "nûmer" :"" }, "accountcode":"", "dialplan":{ "context":"fan-pstn", "exten":"s", "priority":2, "appname":"Stasis", "appdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"en" }, "asterisk"id":"48:5b:aa:aa:aa:aa", "application":"hello-world" }

Gemak of ûngemak, de mooglikheid of ûnmooglikheid om te wurkjen mei in bepaalde API wurde bepaald troch de taken dy't moatte wurde oplost. De taken foar yntegraasje mei CRM binne as folget:

  • Folgje it begjin fan 'e oprop, wêr't it waard oerbrocht, lûk CallerID, DID, begjin- en eintiden, miskien gegevens út' e map (om te sykjen nei in ferbining tusken de tillefoan en de CRM-brûker)

  • Begjin en einigje de opname fan 'e oprop, bewarje it yn it winske formaat, ynformearje oan' e ein fan 'e opname wêr't it bestân leit

  • Inisjearje in oprop op in ekstern evenemint (fan it programma), skilje in ynterne nûmer, in ekstern nûmer en ferbine se

  • Fakultatyf: yntegrearje mei CRM, dialergroepen en FollowME foar automatyske oerdracht fan petearen by it ûntbrekken fan in plak (neffens CRM)

Al dizze taken kinne wurde oplost fia AMI of ARI, mar ARI jout folle minder ynformaasje, der binne net folle eveneminten, in protte fariabelen dy't AMI noch hat (Bygelyks, makro calls, ynstelle fariabelen binnen makro, ynklusyf oprop opname) wurde net folge. Litte wy dêrom foar juste en krekte folgjen AMI kieze foar no (mar net folslein). Dêrneist (goed, wêr soe it wêze sûnder dit, wy binne luie minsken) - yn it oarspronklike wurk (artikel in habr) brûke PAMI. *Dan moatte jo besykje te herskriuwen nei ARI, mar net it feit dat it sil wurkje.

Reinventing yntegraasje

Om ús FreePBX op ienfâldige manieren oan AMI te rapportearjen oer it begjin fan 'e oprop, eintiid, nûmers, nammen fan opnommen bestannen, is it it maklikst om de doer fan' e oprop te berekkenjen mei deselde trúk as de orizjinele auteurs - Fier jo fariabelen yn en parse de útfier foar har oanwêzigens. PAMI suggerearret dit gewoan te dwaan fia in filterfunksje.

Hjir is in foarbyld fan it ynstellen fan jo eigen fariabele foar de starttiid fan 'e oprop (s is in spesjaal nûmer yn it dialplan dat wurdt útfierd FOAR't it DID-sykjen begjint)

[ext-did-custom]

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

In foarbyld AMI evenemint foar dizze line

Event: Nij kanaal

Privileezje: belje, allegear

Kanaal: PJSIP/VMS_pjsip-0000078b

Kanaalstatus: 4

ChannelStateDesc: Ring

CallerIDNum: 111222

Namme fan beller: 111222

ConnectedLineNum:

ferbûn linenamme:

Taal: en

akkount koade:

Kontekst: fan-pstn

útwreide: s

Prioriteit: 1

Uniqueid: 1599589046.5244

Keppele: 1599589046.5244

Applikaasje: AppData ynstelle:

CallStart=1599571046

Omdat FreePBX oerskriuwt de extension.conf en extension_ triemmenadditional.conf, sille wy it bestân brûke extension_custom.conf

Folsleine koade fan 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

Funksje en ferskil fan it orizjinele dialoochplan fan 'e auteurs fan it orizjinele artikel -

  • Dialplan yn .conf-formaat, lykas FreePBX it wol (ja, it kin .ael, mar net alle ferzjes en it is net altyd handich)

  • Ynstee fan it ein te ferwurkjen fia exten=>h, waard ferwurking yntrodusearre fia hangup_handler, om't it FreePBX-dialplan der allinich mei wurke

  • Fêste skript-opropstring, tafoege quotes en ekstern opropnûmer ExtNum

  • Ferwurking wurdt ferpleatst nei _oanpaste konteksten en lit jo FreePBX-konfiguraasjes net oanreitsje of bewurkje - ynkommende fia [ext-did-oanpast], útgeande troch [útgeande-allroutes-oanpaste]

  • Gjin bining oan nûmers - it bestân is universeel en moat allinich konfigureare wurde foar it paad en keppele oan de tsjinner

Om te begjinnen moatte jo ek skripts yn AMI útfiere troch oanmelding en wachtwurd - hjirfoar hat FreePBX ek in _custom-bestân

manager_custom.conf triem

;;  это логин
[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

Beide fan dizze bestannen moatte pleatst wurde yn /etc/asterisk, lês dan de konfiguraasjes opnij (of start de asterisk opnij)

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

Litte wy no trochgean nei PHP

Inisjalisearjen fan skripts en it meitsjen fan in tsjinst

Sûnt it skema foar it wurkjen mei Bitrix 24, in tsjinst foar AMI, net hielendal ienfâldich en transparant is, moat it apart besprutsen wurde. Asterisk, as AMI is aktivearre, iepenet gewoan de poarte en dat is it. As in klant bykomt, freget er autorisaasje oan, dan abonnearret de klant him op de nedige eveneminten. Eveneminten komme yn platte tekst, dy't PAMI konvertearret yn strukturearre objekten en biedt de mooglikheid om de filterfunksje allinich yn te stellen foar eveneminten fan belang, fjilden, nûmers, ensfh.

Sadree't de oprop binnenkomt, wurdt it NewExten-evenemint ûntslein fanôf de âlder [fan-pstn] kontekst, dan geane alle eveneminten yn 'e folchoarder fan' e rigels yn 'e konteksten. As ynformaasje wurdt ûntfongen fan de CallMeCallerIDName en CallStart fariabelen spesifisearre yn it _custom dialplan, de

  1. De funksje fan it oanfreegjen fan de UserID dy't oerienkomt mei it tafoegingsnûmer wêr't de oprop kaam. Wat as it in ynbelgroep is? De fraach is polityk, moatte jo in oprop oan elkenien yn ien kear meitsje (as elkenien tagelyk ropt) of meitsje sa't se neame as se beurtelje? De measte kliïnten hawwe de Fisrt Beskikbere strategy, dus d'r is gjin probleem mei dit, mar ien ropt. Mar it probleem moat wurde oplost.

  2. De opropregistraasjefunksje yn Bitrix24, dy't de CallID werombringt, dy't dan ferplicht is om de opropparameters en in keppeling nei de opname te rapportearjen. Fereasket itsij tafoeging nûmer of UserID

FreePBX begripe en it yntegrearje mei Bitrix24 en mear

Nei it ein fan 'e oprop wurdt de rekordynlaadfunksje neamd, dy't tagelyk de status rapporteart fan' e oprop dien is (Drokke, Gjin antwurd, Súkses), en ek in keppeling downloade nei it mp3-bestân mei it rekord (as ien).

Om't de CallMeIn.php-module kontinu rinne moat, is der in SystemD opstarttriem foar makke callme.service, dy't yn /etc/systemd/system/callme.service set wurde moat

[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

inisjalisaasje en lansearring fan it skript bart fia systemctl of tsjinst

# systemctl enable callme
# systemctl start callme

De tsjinst sil himsels opnij starte as nedich (yn gefal fan crashes). De tsjinst foar it folgjen fan postfak fereasket gjin webtsjinner om te ynstallearjen, allinich php is nedich (wat perfoarst op de FeePBX-tsjinner is). Mar by it ûntbrekken fan tagong ta oproprecords fia de webserver (ek mei https), sil it net mooglik wêze om te harkjen nei oproprecords.

Litte wy no prate oer útgeande oproppen. It CallMeOut.php-skript hat twa funksjes:

  • Inisjearje fan in oprop as in fersyk wurdt ûntfongen foar in php-skript (ynklusyf it brûken fan de knop "Rop" yn 'e Bitrix sels). It wurket net sûnder in webserver, it fersyk wurdt ûntfongen fia HTTP POST, it fersyk befettet in token

  • Berjocht oer de oprop, syn parameters en records yn Bitrix. Oanmakke troch Asterisk yn it [sub-oprop-ynterne-beëinige] dialoochplan as in oprop einiget

FreePBX begripe en it yntegrearje mei Bitrix24 en mear

De webserver is allinich nedich foar twa dingen - it downloaden fan Bitrix-recordbestannen (fia HTTPS) en it CallMeOut.php-skript oproppe. Jo kinne de ynboude FreePBX-tsjinner brûke, de bestannen wêrfoar /var/www/html binne, jo kinne in oare server ynstallearje of in oar paad opjaan.

Webtsjinner

Litte wy de opset fan 'e webserver ferlitte foar ûnôfhinklike stúdzje (tyts, tyts, tyts). As jo ​​gjin domein hawwe, kinne jo besykje FreeDomain ( https://www.freenom.com/ru/index.html), dy't jo in fergese namme sil jaan foar jo wite IP (ferjit net de havens 80, 443 troch de router troch te stjoeren as it eksterne adres allinich op it is). As jo ​​​​krekt in DNS-domein makke hawwe, dan moatte jo wachtsje (fan 15 minuten oant 48 oeren) oant alle servers laden binne. Neffens de ûnderfining fan wurkjen mei ynlânske providers - fan 1 oere oant in dei.

Ynstallaasje automatisearring

In ynstallearder is ûntwikkele op github om ynstallaasje noch makliker te meitsjen. Mar it wie glêd op papier - wylst wy it allegear mei de hân ynstallearje, om't nei it tinken mei dit alles it kristal dúdlik waard wat freonen binne mei wa, wa giet wêr en hoe't it te debuggen. D'r is noch gjin ynstallearder

Havenarbeider

As jo ​​​​de oplossing fluch wolle besykje - d'r is in opsje mei Docker - meitsje fluch in kontener, jou it poarte nei bûten, slip de ynstellingsbestannen en besykje (dit is de opsje mei de LetsEncrypt-kontener, as jo al in sertifikaat hawwe , jo moatte gewoan de omkearde proxy trochferwize nei de FreePBX-webserver (wy joegen it in oare poarte is 88), LetsEncrypt yn docker basearre op dit artikel

Jo moatte it bestân útfiere yn 'e ynladen projektmap (nei git-kloon), mar gean earst yn' e asterisk-konfiguraasjes (asterisk-map) en skriuw de paden nei de records en de URL fan jo side dêr

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:

Dit docker-compose.yaml-bestân wurdt útfierd fia

docker-compose up -d

As nginx net begjint, dan is der wat mis mei de konfiguraasje yn de map nginx/ssl_docker.conf

Oare yntegraasjes

En wêrom net tagelyk wat CRM yn skripts sette, tochten wy. Wy studearre ferskate oare CRM API's, benammen de fergese ynboude PBX - ShugarCRM en Vtiger, en ja! ja, it prinsipe is itselde. Mar dit is in oar ferhaal, dat wy letter sille uploade nei de github apart.

referinsjes

Disclaimer: Elke oerienkomst mei de werklikheid is fiktyf en it wie my net.

Boarne: www.habr.com

Add a comment