FreePBX-i mõistmine ja selle integreerimine Bitrix24 ja muuga

Bitrix24 on tohutu kombain, mis ühendab endas CRM-i, töövoo, raamatupidamise ja palju muud, mis juhtidele väga meeldib ja IT-töötajatele tegelikult ei meeldi. Portaali kasutavad paljud väikesed ja keskmise suurusega ettevõtted, sealhulgas väikesed kliinikud, tootjad ja isegi ilusalongid. Peamine funktsioon, mida juhid armastavad, on telefoni ja CRM-i integreerimine, kui kõik kõned salvestatakse kohe CRM-is, luuakse kliendikaardid, sissetulemisel kuvatakse teave kliendi kohta ja näete kohe, kes ta on, mida ta on. saab müüa ja kui palju ta võlgneb. Kuid Bitrix24 telefoniside ja selle integreerimine CRM-iga maksab raha, mõnikord palju. Artiklis räägin teile avatud tööriistade ja populaarse IP PBX-iga integreerimise kogemusest FreePBXja arvestage ka erinevate osade töö loogikaga

Töötan allhankena ettevõttes, mis müüb ja seadistab, integreerib IP-telefoni. Kui minult küsiti, kas me saaksime sellele ja sellele ettevõttele midagi pakkuda, et integreerida Bitrix24 klientidel olevate PBX-idega, samuti erinevate VDS-ettevõtete virtuaalsete PBX-idega, pöördusin Google'i poole. Ja loomulikult andis ta mulle lingi artikkel habr, kus on kirjeldus ja github ning kõik tundub toimivat. Kuid proovides seda lahendust kasutada, selgus, et Bitrix24 ei ole enam sama, mis varem ja palju on vaja ümber teha. Lisaks pole FreePBX teie jaoks tühipaljas tärn, siin peate mõtlema, kuidas ühendada konfiguratsioonifailides kasutusmugavus ja kõva sissehelistamisplaan.

Uurime töö loogikat

Alustuseks, kuidas see kõik toimima peaks. Kui PBX-is saabub kõne väljastpoolt (SIP INVITE sündmus pakkujalt), algab sissehelistamisplaani (valimisplaani, valimisplaani) töötlemine - reeglid, mida ja mis järjekorras kõnega teha. Esimesest paketist saab palju infot, mida siis reeglites kasutada. Suurepärane tööriist SIP-i sisemuse uurimiseks on analüsaator sngrep (link), mis installitakse populaarsetesse distributsioonidesse lihtsalt apt install/yum install jms kaudu, kuid seda saab ehitada ka lähtekoodist. Vaatame sngrepis kõnelogi

FreePBX-i mõistmine ja selle integreerimine Bitrix24 ja muuga

Lihtsustatud kujul käsitleb dialplan ainult esimest paketti, vahel ka vestluse ajal, kõnede edastamine, nupuvajutused (DTMF), erinevad huvitavad asjad nagu FollowMe, RingGroup, IVR jt.

Mis on kutsepaketis

FreePBX-i mõistmine ja selle integreerimine Bitrix24 ja muuga

Tegelikult töötab enamik lihtsaid valimisplaane kahe esimese väljaga ja kogu loogika keerleb DID ja CallerID ümber. DID - kuhu me helistame, CallerID - kes helistab.

Aga lõppude lõpuks on meil firma ja mitte üks telefon – mis tähendab, et PBX-il on suure tõenäosusega kõnegrupid (mitme seadme samaaegne / järjestikune helin) linnanumbritel (Ring Group), IVR (Tere, helistasite ... Vajutage üks ...), Automaatvastajad (Fraasid), Ajatingimused, Edastamine teistele numbritele või lahtrisse (FollowMe, Forward). See tähendab, et väga raske on üheselt kindlaks teha, kes kõne saabudes tegelikult kõne vastu võtab ja kellega vestlema hakkab. Siin on näide tüüpilise kõne algusest meie klientide PBX-is

FreePBX-i mõistmine ja selle integreerimine Bitrix24 ja muuga

Pärast seda, kui kõne edukalt PBX-i siseneb, liigub see läbi valimisplaani erinevates "kontekstides". Tärni seisukohast on kontekstiks nummerdatud käskude komplekt, millest igaüks sisaldab valitud numbri filtrit (seda nimetatakse exteniks, väliskõne puhul algstaadiumis exten=DID). Valimisplaani rea käsud võivad olla mis tahes - sisemised funktsioonid (näiteks helistage siseabonendile - Dial(), pane telefon käest - Hangup()), tingimuslikud operaatorid (IF, ELSE, ExecIF jms), üleminekud selle konteksti teistele reeglitele (Goto, GotoIF), üleminek muudesse kontekstidesse funktsioonikutse kujul (Gosub, Macro). Eraldi direktiiv include имя_контекста, mis lisab praeguse konteksti lõppu käsud teisest kontekstist. Käsud, mis sisalduvad kaasamise kaudu, täidetakse alati pärast praeguse konteksti käsud.

Kogu FreePBX-i loogika põhineb erinevate kontekstide kaasamisel üksteisesse kaasamise ja kõne kaudu Gosubi, makro ja Handleri töötlejate kaudu. Mõelge sissetulevate FreePBX-kõnede kontekstile

FreePBX-i mõistmine ja selle integreerimine Bitrix24 ja muuga

Kõne läbib kordamööda kõik kontekstid ülalt alla, igas kontekstis võivad olla väljakutsed muudesse kontekstidesse, nagu makrod (Makro), funktsioonid (Gosub) või lihtsalt üleminekud (Goto), nii et tegelik puu, mida nimetatakse, saab ainult logides jälgida.

Allpool on näidatud tüüpilise PBX-i tüüpiline seadistusskeem. Helistades otsitakse sissetulevatelt marsruutidelt DID-d, kontrollitakse selle jaoks ajutisi tingimusi, kui kõik on korras, käivitatakse häälmenüü. Sellelt, vajutades nuppu 1 või aegumist, väljuge helistamisoperaatorite rühma. Pärast kõne lõppu kutsutakse välja hangupcall makro, mille järel ei saa sissehelistamisplaanis midagi teha, välja arvatud spetsiaalsed töötlejad (hangup handler).

FreePBX-i mõistmine ja selle integreerimine Bitrix24 ja muuga

Kuhu selles kõnealgoritmis peaksime andma teabe CRM-i kõne alguse kohta, kust alustada salvestamist, kuhu salvestamine lõpetada ja saata see koos teabega CRM-ile kõne kohta?

Integratsioon väliste süsteemidega

Mis on PBX-i ja CRM-i integratsioon? Need on seaded ja programmid, mis teisendavad andmeid ja sündmusi nende kahe platvormi vahel ning saadavad need üksteisele. Kõige tavalisem viis sõltumatute süsteemide suhtlemiseks on API-de kaudu ja kõige populaarsem viis API-dele juurdepääsuks on HTTP REST. Kuid mitte tärni jaoks.

Tärni sees on:

  • AGI - väliste programmide/komponentide sünkroonne väljakutse, kasutatakse peamiselt valimisplaanis, seal on teeke nagu phpagi, PAGI

  • AMI - teksti TCP pesa, mis töötab sündmuste tellimise ja tekstikäskude sisestamise põhimõttel, meenutab seest SMTP-d, saab jälgida sündmusi ja hallata kõnesid, olemas on raamatukogu PAMI - kõige populaarsem Asteriskiga ühenduse loomiseks

AMI väljundi näide

Sündmus: uus kanal
Privileeg: helistage, kõik
Kanal: PJSIP/VMS_pjsip-0000078b
Kanali olek: 4
ChannelStateDesc: helin
Helistaja IDNum: 111222
Helistaja IDName: 111222
ConnectedLineNum:
ühendatud liininimi:
Keel: en
konto kood:
Kontekst: from-pstn
Laius: s
Prioriteet: 1
Unikaalne: 1599589046.5244
Linkedid: 1599589046.5244

  • ARI on segu mõlemast, kõik RESTi, WebSocketi kaudu, JSON-vormingus – kuid värskete teekide ja ümbristega, mitte eriti hea, leitud (phparia, phpari), mis sai nende arengus umbes 3 aastat tagasi.

Näide ARI väljundist kõne algatamisel

{ "muutuja":"CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "channel":{ "id »:»1599644315.5334", «nimi»:»PJSIP/VMSpjsip-000007b6", "state":"Helin", "helistaja":{ "nimi":"111222", "number":"111222" }, "ühendatud":{ "nimi":", "number" :"" }, "accountcode":"", "dialplan":{ "context":"from-pstn", "exten":"s", "priority":2, "appnimi":"Stasis", "rakendusdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"et" }, "tähtid":"48:5b:aa:aa:aa:aa", "rakendus":"tere-maailm" }

Konkreetse API-ga töötamise mugavuse või ebamugavuse, võimaluse või võimatuse määravad lahendamist vajavad ülesanded. CRM-iga integreerimise ülesanded on järgmised:

  • Jälgige kõne algust, kuhu see edastati, tõmmake välja CallerID, DID, algus- ja lõppajad, võib-olla andmed kataloogist (telefoni ja CRM-i kasutaja vahelise ühenduse otsimiseks)

  • Alustage ja lõpetage kõne salvestamine, salvestage see soovitud vormingus, andke salvestuse lõpus teada, kus fail asub

  • Algatage kõne välisele sündmusele (programmist), helistage sisenumbril, välisnumbril ja ühendage need

  • Valikuline: integreerige CRM-i, helistamisrühmade ja FollowME-ga kõnede automaatseks edastamiseks koha puudumisel (vastavalt CRM-ile)

Kõiki neid ülesandeid saab lahendada AMI või ARI kaudu, kuid ARI annab palju vähem infot, sündmusi pole palju, paljusid muutujaid, mis AMI-l veel alles on (näiteks makrokutsed, makrode sees muutujate seadistus, sh kõnede salvestamine) ei jälgita. Seetõttu valime õigeks ja täpseks jälgimiseks praegu (kuid mitte täielikult) AMI. Lisaks (noh, kus see ilma selleta oleks, me oleme laisad inimesed) - originaalteoses (artikkel habr) kasuta PAMI-d. *Siis peate proovima ARI-sse ümber kirjutada, kuid mitte seda, et see toimiks.

Integratsiooni taasleiutamine

Selleks, et meie FreePBX saaks AMI-le lihtsal viisil aru anda kõne algusest, lõpuajast, numbritest, salvestatud failide nimedest, on kõige lihtsam arvutada kõne kestus sama nipi abil, mida algsed autorid - sisestage oma muutujad ja analüüsige väljundit nende olemasolu tuvastamiseks. PAMI soovitab seda teha lihtsalt filtrifunktsiooni kaudu.

Siin on näide oma muutuja määramisest kõne algusaja jaoks (s on spetsiaalne number valimisplaanis, mis tehakse ENNE DID-otsingu alustamist)

[ext-did-custom]

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

Selle rea AMI-sündmuse näide

Sündmus: uus kanal

Privileeg: helistage, kõik

Kanal: PJSIP/VMS_pjsip-0000078b

Kanali olek: 4

ChannelStateDesc: helin

Helistaja IDNum: 111222

Helistaja IDName: 111222

ConnectedLineNum:

ühendatud liininimi:

Keel: en

konto kood:

Kontekst: from-pstn

Laius: s

Prioriteet: 1

Unikaalne: 1599589046.5244

Linkedid: 1599589046.5244

Rakendus: määrake AppData:

CallStart=1599571046

Kuna FreePBX kirjutab üle failid extendion.conf ja extension_extra.conf, kasutame faili pikendus_tava.conf

Täielik kood extendion_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

Funktsioon ja erinevus originaalartikli autorite esialgsest valimisplaanist -

  • Dialplan .conf-vormingus, nagu FreePBX seda soovib (jah, see võib olla .ael, kuid mitte kõik versioonid ja see pole alati mugav)

  • Selle asemel, et töödelda lõppu läbi exten=>h, viidi töötlemine sisse hangup_handleri kaudu, kuna FreePBX-i valimisplaan töötas ainult sellega

  • Parandatud skripti kõnestring, lisatud hinnapakkumised ja väliskõne number ExtNum

  • Töötlemine viiakse _kohandatud kontekstidesse ja see võimaldab teil mitte puudutada ega redigeerida FreePBX-i konfiguratsioone – sissetulevad [ekst-tegi-kohandatud], väljuv läbi [outbound-allroutes-custom]

  • Numbritega sidumine puudub – fail on universaalne ja seda tuleb konfigureerida ainult serveri tee ja lingi jaoks

Alustuseks tuleb AMI-s käivitada ka skriptid sisselogimise ja parooliga – selleks on FreePBX-il ka _custom fail

manager_custom.conf fail

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

Mõlemad failid tuleb paigutada kausta /etc/asterisk, seejärel lugege uuesti konfiguratsioonid (või taaskäivitage tärn)

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

Liigume nüüd PHP juurde

Skriptide lähtestamine ja teenuse loomine

Kuna AMI teenuse Bitrix 24-ga töötamise skeem pole päris lihtne ja läbipaistev, tuleb seda eraldi arutada. Tärn, kui AMI on aktiveeritud, avab lihtsalt pordi ja kõik. Kui klient liitub, küsib ta autoriseerimist, seejärel tellib klient vajalikud sündmused. Sündmused tulevad lihttekstina, mille PAMI teisendab struktureeritud objektideks ja annab võimaluse seada filtreerimisfunktsiooni ainult huvipakkuvate sündmuste, väljade, numbrite jms jaoks.

Niipea kui kõne saabub, käivitatakse NewExteni sündmus, alustades emakontekstist [from-pstn], seejärel lähevad kõik sündmused konteksti ridade järjekorras. Kui _custom dialplanis määratud CallMeCallerIDName ja CallStart muutujatelt saadakse teavet,

  1. Funktsioon, mille abil küsitakse kasutajatunnust, mis vastab laienduse numbrile, kust kõne tuli. Mis siis, kui see on sissehelistamisrühm? Küsimus on poliitiline, kas tuleb luua kõne kõigile korraga (kui kõik helistavad korraga) või helistades kordamööda nii, nagu nad helistavad? Enamikul klientidel on Fisrt Available strateegia, seega pole sellega probleeme, vaid üks kõne. Kuid probleem tuleb lahendada.

  2. Kõne registreerimise funktsioon Bitrix24-s, mis tagastab kõne ID, mis on seejärel vajalik kõne parameetrite ja salvestuse lingi edastamiseks. Nõuab kas laienduse numbrit või kasutajatunnust

FreePBX-i mõistmine ja selle integreerimine Bitrix24 ja muuga

Pärast kõne lõppu kutsutakse välja kirje allalaadimise funktsioon, mis teavitab samaaegselt kõne lõpetamise olekut (Hõivatud, Pole vastust, Edu) ja laadib alla ka lingi kirjega mp3-failile (kui see on olemas).

Kuna CallMeIn.php moodul peab pidevalt töötama, on selle jaoks loodud SystemD käivitusfail callme.service, mis tuleb panna kausta /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

skripti initsialiseerimine ja käivitamine toimub systemctli või teenuse kaudu

# systemctl enable callme
# systemctl start callme

Teenus taaskäivitub vastavalt vajadusele (krahhide korral). Postkasti jälgimisteenus ei nõua veebiserveri paigaldamist, vaja on ainult php-d (mis on kindlasti FeePBX serveris). Kuid kui veebiserveri kaudu (ka https-iga) pole juurdepääsu kõnekirjetele, pole kõnekirjeid võimalik kuulata.

Räägime nüüd väljaminevatest kõnedest. CallMeOut.php skriptil on kaks funktsiooni:

  • Kõne algatamine php-skripti päringu vastuvõtmisel (sh Bitrixi enda nupu "Helista" kasutamine). Ilma veebiserverita ei tööta, päring võetakse vastu HTTP POST-i kaudu, päring sisaldab tokenit

  • Sõnum kõne, selle parameetrite ja Bitrixi kirjete kohta. Käivitab [sub-call-internal-ended] valimisplaanis tärn, kui kõne lõpeb

FreePBX-i mõistmine ja selle integreerimine Bitrix24 ja muuga

Veebiserverit on vaja ainult kahe asja jaoks – Bitrixi kirjefailide allalaadimiseks (läbi HTTPS-i) ja CallMeOut.php skripti kutsumiseks. Võite kasutada sisseehitatud FreePBX-serverit, mille failid on /var/www/html, saate installida teise serveri või määrata muu tee.

veebiserver

Jätame veebiserveri seadistamise iseseisvaks õppimiseks (tyts, tyts, tyts). Kui teil pole domeeni, võite proovida FreeDomain( https://www.freenom.com/ru/index.html), mis annab teie valgele IP-le tasuta nime (ärge unustage ruuteri kaudu porte 80, 443 edastada, kui välisaadress on ainult sellel). Kui lõite just DNS-i domeeni, peate ootama (15 minutit kuni 48 tundi), kuni kõik serverid on laaditud. Vastavalt kodumaiste pakkujatega töötamise kogemusele - 1 tunnist päevani.

Paigaldamise automatiseerimine

Paigaldamise veelgi lihtsamaks muutmiseks on Githubis välja töötatud installer. Kuid paberil oli see sujuv - samal ajal kui me seda kõike käsitsi installime, kuna pärast kõige selle kallal nokitsemist sai kristallselgeks, kes kellega sõber on, kes kuhu läheb ja kuidas seda siluda. Installijat veel pole

laevalaadija

Kui soovite lahendust kiiresti proovida – Dockeriga on võimalus – looge kiiresti konteiner, andke sellele pordid väljapoole, libistage seadete failid ja proovige (see on valik LetsEncrypt konteineriga, kui teil on juba sertifikaat , peate lihtsalt pöördpuhverserveri ümber suunama FreePBX veebiserverisse (me andsime sellele teise pordi 88), LetsEncrypt dockeris põhineb selle artikli

Peate käivitama faili allalaaditud projekti kaustas (pärast git clone), kuid esmalt sisenege tärniga seadistustesse (tärnide kaust) ja kirjutage sinna kirjete teed ja oma saidi 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:

Seda faili docker-compose.yaml käitatakse selle kaudu

docker-compose up -d

Kui nginx ei käivitu, on kaustas nginx/ssl_docker.conf konfiguratsiooniga midagi valesti

Muud integratsioonid

Ja miks mitte panna osa CRM-i skriptidesse samal ajal, mõtlesime. Uurisime mitmeid teisi CRM-i API-sid, eriti tasuta sisseehitatud PBX-i - ShugarCRM ja Vtiger, ja jah! jah, põhimõte on sama. Aga see on juba teine ​​lugu, mille me hiljem eraldi githubi üles laadime.

Viited

Kohustustest loobumine: igasugune sarnasus reaalsusega on väljamõeldud ja see polnud mina.

Allikas: www.habr.com

Lisa kommentaar