FreePBX ulertzea eta Bitrix24 eta gehiago integratzea

Bitrix24 CRM, lan-fluxua, kontabilitatea eta kudeatzaileek oso gustuko dituzten eta IT langileek oso gustuko ez dituzten beste hainbat gauza konbinatzen dituen konbinazio erraldoia da. Ataria enpresa txiki eta ertain askok erabiltzen dute, klinika txikiak, fabrikatzaileak eta baita apaindegiak ere. Kudeatzaileek "maite" duten funtzio nagusia telefonia eta CRM integratzea da, edozein dei berehala CRMn grabatzen denean, bezero-txartelak sortzen dira, sarreran, bezeroari buruzko informazioa bistaratzen da eta berehala ikus dezakezu nor den, zer den. sal dezake eta zenbat zor duen. Baina Bitrix24-ren telefonia eta CRM-rekin integratzeak dirua kostatzen du, batzuetan asko. Artikuluan tresna irekiekin eta IP PBX ezagunarekin integratzeko esperientzia kontatuko dizuet Doako PBX, eta hainbat atalen lanaren logika ere kontuan hartu

Saltzen eta konfiguratzen, IP telefonia integratzen duen enpresa batean azpikontratatzaile gisa lan egiten dut. Honi eta enpresa honi zerbait eskain genitzakeen galdetu zidatenean Bitrix24 bezeroek dituzten PBXekin integratzeko, baita VDS enpresa ezberdinetako PBX birtualekin ere, Googlera joan nintzen. Eta, noski, esteka bat eman zidan artikulua habr, non deskribapen bat dago, eta github, eta dena funtzionatzen duela dirudi. Baina irtenbide hau erabiltzen saiatzean, Bitrix24 jada ez dela lehen bezalakoa eta asko berritu behar da. Horrez gain, FreePBX ez da zuretzako izartxo hutsa, hemen pentsatu behar duzu nola konbinatu erraztasuna eta hardcore dialplan bat konfigurazio fitxategietan.

Lanaren logika aztertzen dugu

Beraz, hasteko, nola funtzionatu behar duen guztia. PBXan kanpotik dei bat jasotzen denean (hornitzailearen SIP INVITE gertaera), dialplanaren prozesamendua hasten da (markazio plana, dialplana) deiarekin zer eta zer ordenatan egin behar den arauak. Lehenengo paketetik informazio asko lor dezakezu, eta gero arauetan erabil daiteke. SIParen barneak aztertzeko tresna bikaina analizatzailea da sngrep (link) banaketa ezagunetan instalatzen dena apt install/yum install eta antzekoen bidez, baina iturburutik ere eraiki daiteke. Ikus dezagun sngrep-en deien erregistroa

FreePBX ulertzea eta Bitrix24 eta gehiago integratzea

Forma sinplifikatuan, dialplanak lehen paketearekin bakarrik lantzen du, batzuetan elkarrizketan zehar ere deiak transferitzen dira, botoiak sakatzeak (DTMF), FollowMe, RingGroup, IVR eta beste hainbat gauza interesgarri.

Gonbidatu paketearen barruan dagoena

FreePBX ulertzea eta Bitrix24 eta gehiago integratzea

Egia esan, markatze-plan sinple gehienek lehenengo bi eremuekin funtzionatzen dute, eta logika osoa DID eta CallerID inguruan dabil. DID - nora deitzen ari garen, CallerID - nor deitzen ari den.

Baina azken finean, enpresa bat dugu eta ez telefono bakarra; horrek esan nahi du PBXak ziurrenik dei-taldeak dituela (hainbat gailuren aldibereko/ondoz ondoko dei-jotzea) hiriko zenbakietan (Ring Group), IVR (Kaixo, deitu duzu ... Sakatu). bat...), Erantzungailuak (Esaldiak), Denbora-baldintzak, Beste zenbaki batzuetara edo gelaxka batera birbidaltzea (FollowMe, Forward). Horrek esan nahi du oso zaila dela anbiguotasunik gabe zehaztea dei bat benetan nork jasoko duen eta dei bat iristen denean norekin elkarrizketa bat izango duen. Hona hemen gure bezeroen PBXan dei tipiko baten hasieraren adibide bat

FreePBX ulertzea eta Bitrix24 eta gehiago integratzea

Deia PBX-ra behar bezala sartu ondoren, markatze-planean zehar bidaiatzen du "testuinguru" ezberdinetan. Testuingurua Asterisk-en ikuspuntutik zenbakizko komando multzo bat da, eta bakoitzak markatutako zenbakiaren araberako iragazki bat dauka (exten deritzo, hasierako fasean kanpoko dei baterako exten=DID). Markatze-lerroko komandoak edozein izan daitezke - barne funtzioak (adibidez, deitu barne harpidedun bati - Dial(), jarri telefonoa - Hangup()), baldintza-eragileak (IF, ELSE, ExecIF eta antzekoak), testuinguru honetako beste arau batzuetarako trantsizioak (Goto, GotoIF), beste testuinguru batzuetara trantsizioa funtzio-dei baten moduan (Gosub, Macro). Zuzentarau berezi bat include имя_контекста, uneko testuinguruaren amaierara beste testuinguru bateko aginduak gehitzen dituena. Include bidez sartzen diren komandoak beti exekutatzen dira ondoren egungo testuinguruaren aginduak.

FreePBX-en logika osoa testuinguru desberdinak elkarren artean sartzean eraikitzen da, Gosub, Macro eta Handler kudeatzaileen bidez, besteak beste, deiaren bidez. Demagun FreePBX sarrerako deien testuingurua

FreePBX ulertzea eta Bitrix24 eta gehiago integratzea

Deia testuinguru guztietatik igarotzen da goitik behera txandaka, testuinguru bakoitzean beste testuinguru batzuetarako deiak egon daitezke, hala nola makroak (Makroa), funtzioak (Gosub) edo trantsizio hutsak (Goto), beraz, deitzen denaren zuhaitz erreala bakarrik egin daiteke. erregistroetan jarraipena izan.

PBX tipiko baten konfigurazio-diagrama bat erakusten da behean. Deitzean, DID bilatzen da sarrerako ibilbideetan, aldi baterako baldintzak egiaztatzen dira, dena ondo badago, ahots-menua abiarazten da. Bertatik, 1 botoia edo denbora-muga sakatuta, irten markatze-operadoreen taldera. Deia amaitu ondoren, hangupcall makroa deitzen da, eta horren ondoren ezin da ezer egin dialplanean, kudeatzaile bereziak izan ezik (hangup handler).

FreePBX ulertzea eta Bitrix24 eta gehiago integratzea

Dei-algoritmo honetan non eman behar diogu CRMri deiaren hasierari buruzko informazioa, non hasi grabatzen, non amaitu grabazioa eta bidali deiari buruzko informazioarekin batera CRMra?

Kanpoko sistemekin integratzea

Zer da PBX eta CRM integrazioa? Hauek bi plataforma horien artean datuak eta gertaerak bihurtzen dituzten eta elkarri bidaltzen dituzten ezarpenak eta programak dira. Sistema independenteek komunikatzeko modurik ohikoena APIen bidez da, eta APIetara sartzeko modurik ezagunena HTTP REST da. Baina ez izartxoagatik.

Asterisk barruan dago:

  • AGI - kanpoko programetarako / osagaietarako dei sinkronikoa, markatze-planean erabiltzen dena nagusiki, bezalako liburutegiak daude. phpagi, PAGI

  • AMI - Ekitaldietara harpidetzeko eta testu-komandoak sartzeko printzipioaren arabera funtzionatzen duen TCP socket testua, barrutik SMTP antza duena, gertaerak jarrai ditzake eta deiak kudeatu ditzake, liburutegi bat dago. PAMI - Asterisk-ekin konexioa sortzeko ezagunena

AMI irteera adibidea

Ekitaldia: Kanal berria
Pribilegioa: deitu, guztiak
Kanala: PJSIP/VMS_pjsip-0000078b
Kanalaren egoera: 4
ChannelStateDesc: Ring
Deitzailearen ID zenbakia: 111222
Deitzailearen IDIzena: 111222
ConnectedLineNum:
konektatutako linea izena:
Hizkuntza: eu
kontuaren kodea:
Testuingurua: from-pstn
Luzapena: s
Lehentasuna: 1
Identifikazio bakarra: 1599589046.5244
Linkedid: 1599589046.5244

  • ARI bien nahasketa bat da, dena REST bidez, WebSocket, JSON formatuan - baina liburutegi eta bilgarri berriekin, ez oso ona, eskuz kanpo aurkitu (phparia, phpari) bere garapenean duela 3 urte inguru bihurtu zena.

Dei bat hasten denean ARI irteeraren adibidea

{ "variable":"CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "channel":{ "id »:»1599644315.5334″, «izena»:»PJSIP/VMSpjsip-000007b6″, "state":"Dei", "deitzailea":{ "izena":"111222″, "zenbakia":"111222" }, "konektatua":{ "izena":"", "zenbakia" :"" }, "accountcode":"", "dialplan":{ "context":"from-pstn", "exten":"s", "priority":2, "appname":"Stasis", "appdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"eu" }, "asteriskoid":"48:5b:aa:aa:aa:aa", "aplikazioa":"kaixo mundua"}

Erosotasuna edo eragozpena, API jakin batekin lan egiteko aukera edo ezintasuna konpondu beharreko atazek zehazten dute. CRMrekin integratzeko zereginak hauek dira:

  • Jarraitu deiaren hasiera, non transferitu zen, atera CallerID, DID, hasiera eta amaiera orduak, agian direktorioko datuak (telefonoaren eta CRM erabiltzailearen arteko konexioa bilatzeko)

  • Hasi eta amaitu deiaren grabazioa, gorde nahi duzun formatuan, jakinarazi grabazioaren amaieran non dagoen fitxategia

  • Kanpoko ekitaldi batean dei bat hasi (programatik), deitu barneko zenbaki batera, kanpoko zenbaki batera eta konektatu

  • Aukerakoa: integratu CRM, markatzaile taldeekin eta FollowMErekin deiak automatikoki transferitzeko tokirik ezean (CRMren arabera)

Zeregin hauek guztiak AMI edo ARIren bidez ebatzi daitezke, baina ARIk askoz informazio gutxiago ematen du, ez dago gertaera askorik, AMIk oraindik dituen aldagai asko (adibidez, makro-deiak, makroen barneko aldagaiak ezartzea, deien grabaketa barne) ez dira jarraipena egiten. Horregatik, jarraipen zuzena eta zehatza izateko, aukera dezagun oraingoz AMI (baina ez guztiz). Horrez gain (beno, non egongo litzateke hau gabe, alferrak gara) - jatorrizko lanean (artikulua habr) erabili PAMI. *Ondoren, ARI berridazten saiatu behar duzu, baina ez funtzionatuko duela.

Integrazioa berrasmatzen

Gure FreePBX-ak AMI-ri modu errazean deiaren hasiera, amaiera-ordua, zenbakiak, grabatutako fitxategien izenak jakinarazi ahal izateko, errazena da deiaren iraupena kalkulatzea jatorrizko egileen trikimailu bera erabiliz. - Sartu zure aldagaiak eta analizatu irteera haien presentzia. PAMI-k iragazki funtzio baten bidez egitea iradokitzen du.

Hona hemen deiaren hasierako ordurako zure aldagaia ezartzeko adibide bat (s DID bilaketa hasi AURRETIK egiten den marka-planeko zenbaki berezi bat da)

[ext-did-custom]

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

Lerro honetarako AMI gertaera adibide bat

Ekitaldia: Kanal berria

Pribilegioa: deitu, guztiak

Kanala: PJSIP/VMS_pjsip-0000078b

Kanalaren egoera: 4

ChannelStateDesc: Ring

Deitzailearen ID zenbakia: 111222

Deitzailearen IDIzena: 111222

ConnectedLineNum:

konektatutako linea izena:

Hizkuntza: eu

kontuaren kodea:

Testuingurua: from-pstn

Luzapena: s

Lehentasuna: 1

Identifikazio bakarra: 1599589046.5244

Linkedid: 1599589046.5244

Aplikazioa: Ezarri AppData:

CallStart=1599571046

FreePBX-ek extention.conf eta extention_ fitxategiak gainidazten dituelakoadditional.conf, fitxategia erabiliko dugu luzapena_Ohiko.konf

Extention_custom.conf kode osoa

[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

Jatorrizko artikuluaren egileen jatorrizko marka-planaren ezaugarria eta aldea -

  • Dialplan .conf formatuan, FreePBX-k nahi duen bezala (.ael bai, baina ez bertsio guztiak eta ez da beti komenigarria)

  • Amaiera exten => h bidez prozesatu beharrean, prozesatzea hangup_handler bidez sartu zen, FreePBX dialplanak horrekin bakarrik funtzionatzen zuelako.

  • Script dei-kate finkoa, gehitutako komatxoak eta ExtNum kanpoko dei-zenbakia

  • Prozesatzea _personalizatutako testuinguruetara mugitzen da eta FreePBX konfigurazioak ez ukitzea edo editatzea ahalbidetzen du - [ bidez sartzen dira.ext-did-personalizatu], irteeratik [irteera-guztiak-pertsonalizatu]

  • Zenbakiekin lotu gabe - fitxategia unibertsala da eta biderako eta zerbitzarirako estekarako soilik konfiguratu behar da

Hasteko, script-ak ere exekutatu behar dituzu AMI-n saio-hasiera eta pasahitz bidez; horretarako, FreePBX-ek _custom fitxategi bat ere badu.

manager_custom.conf fitxategia

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

Bi fitxategi hauek /etc/asterisk-en jarri behar dira, ondoren konfigurazioak berriro irakurri (edo berrabiarazi izartxoa)

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

Orain joan gaitezen PHPra

Scriptak hasieratzea eta zerbitzu bat sortzea

Bitrix 24, AMI-ren zerbitzu bat, lan egiteko eskema guztiz sinplea eta gardena ez denez, bereiziki eztabaidatu behar da. Asterisk, AMI aktibatuta dagoenean, portua ireki besterik ez du egiten eta kitto. Bezero bat sartzen denean, baimena eskatzen du, gero bezeroak beharrezko gertaeretara harpidetzen du. Gertaerak testu arruntean datoz, eta PAMIk ​​objektu egituratu bihurtzen ditu eta iragazketa funtzioa interesgarri, eremu, zenbaki eta abarretarako soilik ezartzeko aukera ematen du.

Deia sartu bezain laster, NewExten gertaera guraso [from-pstn] testuingurutik abiatuta abiarazten da, gero gertaera guztiak testuinguruetako lerroen ordenan doaz. _Personalizatutako markaketa-planean zehaztutako CallMeCallerIDName eta CallStart aldagaietatik informazioa jasotzen denean,

  1. Deia iritsi den luzapen-zenbakiari dagokion UserID eskatzeko funtzioa. Zer gertatzen da dial-up taldea bada? Galdera politikoa da, guztiontzat aldi berean dei bat sortu behar al da (denek aldi berean deitzen dutenean) edo txandaka deitzen dutenean deitzen duten moduan sortu? Bezero gehienek Fisrt Available estrategia dute, beraz, ez dago arazorik honekin, bakarrak deitzen du. Baina arazoa konpondu beharra dago.

  2. Bitrix24-n deiak erregistratzeko funtzioa, CallID-a itzultzen duena, eta gero deien parametroen berri emateko eta grabaziorako esteka bat behar du. Luzapen zenbakia edo UserID eskatzen du

FreePBX ulertzea eta Bitrix24 eta gehiago integratzea

Deia amaitu ondoren, erregistroa deskargatzeko funtzioa deitzen da, zeinak aldi berean deia amaitutakoaren egoeraren berri ematen du (Lanpetuta, Erantzunik gabe, Arrakasta), eta erregistroarekin batera mp3 fitxategirako esteka deskargatzen du (baldin badago).

CallMeIn.php moduluak etengabe exekutatu behar duenez, SystemD abiarazte fitxategi bat sortu da horretarako deitu.zerbitzua, /etc/systemd/system/callme.service-n jarri behar dena

[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

scriptaren hasieratzea eta abiaraztea systemctl edo zerbitzuaren bidez gertatzen da

# systemctl enable callme
# systemctl start callme

Zerbitzua behar bezala berrabiaraziko da (matxura gertatuz gero). Sarrera-ontziaren jarraipen-zerbitzuak ez du web zerbitzaririk instalatu behar, php baino ez da behar (FeePBX zerbitzarian dago zalantzarik gabe). Baina Web zerbitzariaren bidez deien erregistroetarako sarbiderik ez dagoenean (https-rekin ere), ezin izango da deien erregistroak entzun.

Orain hitz egin dezagun irteerako deiei buruz. CallMeOut.php script-ak bi funtzio ditu:

  • Dei baten hasiera php script baten eskaera jasotzen denean (Bitrix-eko "Deitu" botoia erabiliz barne). Ez du funtzionatzen web zerbitzaririk gabe, eskaera HTTP POST bidez jasotzen da, eskaerak token bat dauka

  • Deiari, bere parametroei eta erregistroei buruzko mezua Bitrix-en. Asterisk-ek [azpi-call-internal-ended] markatze-planean jaurti du dei bat amaitzen denean

FreePBX ulertzea eta Bitrix24 eta gehiago integratzea

Web zerbitzaria bi gauzatarako bakarrik behar da: Bitrix erregistro-fitxategiak deskargatzeko (HTTPS bidez) eta CallMeOut.php script-a deitzeko. Eraikitako FreePBX zerbitzaria erabil dezakezu, fitxategiak /var/www/html dira, beste zerbitzari bat instala dezakezu edo beste bide bat zehaztu.

Web zerbitzaria

Utz dezagun web zerbitzariaren konfigurazioa azterketa independenterako (tyts, tyts, tyts). Domeinurik ez baduzu, FreeDomain( https://www.freenom.com/ru/index.html), zure IP zuriaren doako izen bat emango dizu (ez ahaztu bideratzailearen bidez 80, 443 atakak birbidaltzea kanpoko helbidea bertan bakarrik badago). DNS domeinu bat sortu berri baduzu, orduan itxaron beharko duzu (15 minututik 48 ordura) zerbitzari guztiak kargatu arte. Etxeko hornitzaileekin lan egiteko esperientziaren arabera - ordu 1etik egun batera.

Instalazioen automatizazioa

Github-en instalatzaile bat garatu da instalazioa are errazagoa izan dadin. Baina paperean leuna izan zen - dena eskuz instalatzen ari garen bitartean, hau guztia moldatu ondoren argi geratu zen zer den norekin lagun, nor doan nora eta nola arazketa. Oraindik ez dago instalatzailerik

Docker

Irtenbidea azkar probatu nahi baduzu - Docker-ekin aukera bat dago - azkar sortu edukiontzi bat, eman atakak kanporantz, irristatu ezarpen-fitxategiak eta saiatu (hau da LetsEncrypt edukiontziaren aukera, dagoeneko ziurtagiria baduzu. , alderantzizko proxya FreePBX web zerbitzarira birbideratu besterik ez duzu behar (beste ataka bat 88 da eman genion), LetsEncrypt docker-en oinarrituta. Artikulu hau

Fitxategia deskargatutako proiektuaren karpetan exekutatu behar duzu (git klonaren ondoren), baina lehenik eta behin sartu izartxoaren konfigurazioetan (asterisko karpetan) eta idatzi erregistroetarako bideak eta zure guneko URLa bertan.

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 fitxategi hau bidez exekutatzen da

docker-compose up -d

Nginx abiarazten ez bada, zerbait gaizki dago nginx/ssl_docker.conf karpetako konfigurazioan

Beste integrazio batzuk

Eta zergatik ez jarri CRM batzuk gidoietan aldi berean, pentsatu genuen. Beste hainbat CRM API aztertu genituen, batez ere doako PBX integratua - ShugarCRM eta Vtiger, eta bai! bai, printzipioa berdina da. Baina hau beste istorio bat da, gero github-era aparte igoko duguna.

Erreferentziak

Lege-oharra: errealitatearekin edozein antza fikziozkoa da eta ez nintzen ni.

Iturria: www.habr.com

Gehitu iruzkin berria