FreePBX verstoen an et mat Bitrix24 a méi integréieren

Bitrix 24 ass eng rieseg Kombinatioun déi CRM, Workflow, Comptabilitéit a vill aner Saachen kombinéiert déi Manager wierklech gär hunn an IT Personal net wierklech gär hunn. De Portal gëtt vu villen klengen a mëttelgrousse Firmen benotzt, dorënner kleng Kliniken, Hiersteller a souguer Schéinheetssalonen. D'Haaptfunktioun déi d'Manager "Léift" ass d'Integratioun vun Telefonie a CRM, wann all Uruff direkt am CRM opgeholl gëtt, Clientskaarte ginn erstallt, wann se erakommen, gëtt Informatioun iwwer de Client ugewisen an Dir kënnt direkt gesinn wien hien ass, wat hien ass. ka verkafen a wéi vill hie schëlleg ass. Awer Telefonie vu Bitrix24 a seng Integratioun mam CRM kascht Geld, heiansdo vill. Am Artikel soen ech Iech d'Erfahrung vun der Integratioun mat oppenen Tools an der populärer IP PBX Gratis PBX, a betruecht och d'Logik vun der Aarbecht vun verschiddenen Deeler

Ech schaffen als Outsourcer an enger Firma déi verkeeft a konfiguréiert, integréiert IP Telefonie. Wéi ech gefrot gi sinn, ob mir dës an dëser Firma eppes kéinte bidden fir Bitrix24 mat PBXen ze integréieren déi Clienten hunn, souwéi mat virtuelle PBXen op verschiddene VDS-Firmen, sinn ech op Google gaang. An natierlech huet hien mech e Link op Artikel in habr, wou et eng Beschreiwung ass, an github, an alles schéngt ze schaffen. Awer wann Dir probéiert dës Léisung ze benotzen, huet sech erausgestallt datt Bitrix24 net méi d'selwecht ass wéi virdrun, a vill muss nei gemaach ginn. Zousätzlech ass FreePBX net e bloen Asterisk fir Iech, hei musst Dir nodenken wéi Dir d'Benotzerfrëndlechkeet an en Hardcore Dialplan an Configuratiounsdateien kombinéiere kënnt.

Mir studéieren d'Logik vun der Aarbecht

Also fir Ufänger, wéi et alles soll funktionnéieren. Wann en Uruff vun ausserhalb der PBX (SIP INVITE Event vum Provider) kritt gëtt, fänkt d'Veraarbechtung vum Dialplan (Dialplan, Dialplan) un - d'Regele vu wat a wéi eng Uerdnung mam Uruff ze maachen. Vum éischte Paket kënnt Dir vill Informatioun kréien, déi dann an de Regele benotzt ka ginn. En exzellent Tool fir d'Internal vu SIP ze studéieren ass den Analyser sngrep (ze verschécken) déi einfach a populäre Verdeelungen iwwer apt install/yum install an dergläiche installéiert ass, awer et kann och aus der Quell gebaut ginn. Loosst eis den Uruffprotokoll am sngrep kucken

FreePBX verstoen an et mat Bitrix24 a méi integréieren

An enger vereinfachter Form beschäftegt den Dialplan nëmme mam éischte Paket, heiansdo och während dem Gespréich, Uriff ginn transferéiert, Knäppchendréckt (DTMF), verschidde interessant Saachen wéi FollowMe, RingGroup, IVR an anerer.

Wat ass am Invite Pack

FreePBX verstoen an et mat Bitrix24 a méi integréieren

Eigentlech funktionnéieren déi meescht einfach Dialpläng mat den éischten zwee Felder, an déi ganz Logik dréint sech ëm DID an CallerID. DID - wou mir uruffen, CallerID - wien rufft.

Awer schliisslech hu mir eng Firma an net een Telefon - dat heescht datt de PBX héchstwahrscheinlech Uruffgruppen huet (simultan / konsekutiv Réng vu verschiddenen Apparater) op Stadnummeren (Ring Group), IVR (Moien, Dir hutt ugeruff ... Press eent fir ...), Äntwertmaschinnen (Sätz), Zäitbedéngungen, Forwarden op aner Zuelen oder an eng Zell (FollowMe, Forward). Dëst bedeit datt et ganz schwéier ass, eendeiteg ze bestëmmen, wien tatsächlech en Uruff kritt a mat wiem e Gespréich wäert hunn wann en Uruff ukomm ass. Hei ass e Beispill vum Ufank vun engem typesche Uruff an der PBX vun eise Clienten

FreePBX verstoen an et mat Bitrix24 a méi integréieren

Nodeems den Uruff erfollegräich an de PBX erakënnt, reest et duerch den Dialplan a verschiddene "Kontexter". De Kontext aus der Siicht vun der Asterisk ass eng nummeréiert Set vu Befehle, déi all e Filter vun der gewielter Nummer enthält (et gëtt exten genannt, fir en externen Uruff an der éischter Etapp exten=DID). D'Befehle an der Dialplan Linn kënnen alles sinn - intern Funktiounen (zum Beispill en internen Abonnent ruffen - Dial(), setzt den Telefon erof - Hangup()), bedingte Betreiber (IF, ELSE, ExecIF an dergläichen), Iwwergäng op aner Regele vun dësem Kontext (Goto, GotoIF), Iwwergank zu anere Kontexter a Form vun engem Funktiounsopruff (Gosub, Macro). Eng separat Direktiv include имя_контекста, déi Kommandoen aus engem anere Kontext zum Enn vum aktuelle Kontext bäidréit. Kommandoen abegraff via include ginn ëmmer ausgefouert после Kommandoen vum aktuelle Kontext.

Déi ganz Logik vu FreePBX ass op d'Inklusioun vu verschiddene Kontexter anenee gebaut duerch Inkludéieren an Uruff duerch Gosub, Macro an Handler Handler. Betruecht de Kontext vun erakommen FreePBX Appellen

FreePBX verstoen an et mat Bitrix24 a méi integréieren

Den Uruff geet duerch all Kontexter vun uewe bis ënnen am Tour, an all Kontext kann et Uruff un aner Kontexter wéi Makroen (Macro), Funktiounen (Gosub) oder just Iwwergäng (Goto), sou datt de richtege Bam vun deem wat genannt gëtt kann nëmmen an de Logbicher verfollegt ginn.

En typesche Setupdiagramm fir eng typesch PBX gëtt hei ënnen gewisen. Wann Dir rufft, gëtt DID an erakommende Strecken gesicht, temporär Konditioune ginn dofir gepréift, wann alles an der Rei ass, gëtt de Stëmmmenü gestart. Vun et, andeems Dir Knäppchen 1 oder Timeout dréckt, gitt op d'Grupp vun den Operateuren. Nodeems den Uruff eriwwer ass, gëtt den Hangupcall Makro genannt, no deem näischt am Dialplan ka gemaach ginn, ausser fir speziell Handler (hangup Handler).

FreePBX verstoen an et mat Bitrix24 a méi integréieren

Wou an dësem Uruff Algorithmus solle mir Informatiounen iwwert den Ufank vum Uruff un CRM liwweren, wou opzehuelen ufänken, wou d'Opnahmen Enn an et zesumme mat Informatiounen iwwert den Uruff un CRM schécken?

Integratioun mat externen Systemer

Wat ass PBX an CRM Integratioun? Dëst sinn Astellungen a Programmer déi Daten an Eventer tëscht dësen zwou Plattformen konvertéieren an se unenee schécken. De stäerkste gemeinsam Manéier fir onofhängeg Systemer ze kommunizéieren ass duerch APIen, an de beléifste Manéier APIen Zougang ass HTTP REST. Awer net fir Asterisk.

Bannen Asterisk ass:

  • AGI - Synchron Uruff vun externen Programmer / Komponenten, haaptsächlech am Dialplan benotzt, et gi Bibliothéike wéi phpagi, PAGI

  • AMI - en Text TCP Socket deen um Prinzip funktionnéiert fir op Eventer ze abonnéieren an Textbefehl aginn, gläicht SMTP vu bannen, kann Eventer verfollegen an Uriff verwalten, et gëtt eng Bibliothéik PAMI - déi beléifste fir eng Verbindung mat Asterisk ze kreéieren

AMI Ausgang Beispill

Event: Neie Kanal
Privileg: ruffen, all
Kanal: PJSIP/VMS_pjsip-0000078b
Kanal Staat: 4
ChannelStateDesc: Ring
Uruffer-IDNum: 111222
Uruffer-ID Numm: 111222
ConnectedLineNum:
verbonne Linnnumm:
Sprooch: en
Kont Code:
Kontext: vun-pstn
Verlängerung: s
Prioritéit: 1
Uniqueid: 1599589046.5244
Linkedid: 1599589046.5244

  • ARI ass eng Mëschung vu béiden, alles iwwer REST, WebSocket, am JSON Format - awer mat frësche Bibliothéiken a Wrapper, net ganz gutt, offhand fonnt (phparia, phpari) déi virun ongeféier 3 Joer an hirer Entwécklung ginn.

Beispill vun ARI Output wann en Uruff initiéiert gëtt

{ "variable":"CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "channel":{ "id »:»1599644315.5334″, «Numm»:»PJSIP/VMSpjsip-000007b6″, "state":"Ring", "Uruffer":{ "Numm":"111222", "Nummer":"111222" }, "verbonne":{ "Numm":"", "Nummer" :"" }, "accountcode":"", "dialplan":{ "context":"vun-pstn", "exten":"s", "priority":2, "appname":"Stasis", "appdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"en" }, "asteriskid":"48:5b:aa:aa:aa:aa", "application":"Hallo-Welt" }

D'Bequemlechkeet oder d'Onbequemlechkeet, d'Méiglechkeet oder d'Onméiglechkeet fir mat enger bestëmmter API ze schaffen ginn festgeluecht vun den Aufgaben déi geléist musse ginn. D'Aufgabe fir d'Integratioun mam CRM sinn wéi follegt:

  • Verfollegt den Ufank vum Uruff, wou et transferéiert gouf, zitt CallerID, DID, Start- an Ennzäiten eraus, vläicht Daten aus dem Verzeichnis (fir no enger Verbindung tëscht dem Telefon an dem CRM Benotzer ze sichen)

  • Start an Enn den Opnahmen vum Uruff, späichert et am gewënschten Format, informéiert um Enn vun der Opnam wou d'Datei läit

  • Initiate engem Opruff op engem externen Event (vum Programm), ruffen eng intern Nummer, eng extern Nummer a Verbindung hinnen

  • Optional: Integréiert mat CRM, Dialergruppen a FollowME fir automatesch Urufftransfer an der Verontreiung vun enger Plaz (geméiss CRM)

All dës Aufgaben kënnen duerch AMI oder ARI geléist ginn, awer ARI liwwert vill manner Informatioun, et ginn net vill Eventer, vill Variabelen déi AMI nach ëmmer huet (Zum Beispill, Makro-Uriff, Verännerlechen an Makroen astellen, dorënner Opruffopnam) ginn net verfollegt. Dofir, fir richteg a korrekt Tracking, loosst eis AMI fir elo wielen (awer net komplett). Zousätzlech (gutt, wou wier et ouni dëst, mir si faul Leit) - am Original Wierk (Artikel in habr) benotzen PAMI. *Da musst Dir probéieren op ARI ze schreiwen, awer net d'Tatsaach datt et funktionnéiert.

Integratioun nei erfannen

Fir datt eis FreePBX fäeg ass AMI op einfache Weeër iwwer den Ufank vum Uruff, Ennzäit, Zuelen, Nimm vun opgeholle Dateien ze mellen, ass et am einfachsten d'Dauer vum Uruff mam selwechten Trick wéi d'Original Autoren ze berechnen. - gitt Är Variabelen a parséiert den Ausgang fir hir Präsenz. PAMI proposéiert dëst einfach duerch eng Filterfunktioun ze maachen.

Hei ass e Beispill fir Är eege Variabel fir d'Startzäit vum Uruff ze setzen (s ass eng speziell Nummer am Dialplan deen ausgefouert gëtt IER Dir d'DID Sich starten)

[ext-did-custom]

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

E Beispill AMI Event fir dës Linn

Event: Neie Kanal

Privileg: ruffen, all

Kanal: PJSIP/VMS_pjsip-0000078b

Kanal Staat: 4

ChannelStateDesc: Ring

Uruffer-IDNum: 111222

Uruffer-ID Numm: 111222

ConnectedLineNum:

verbonne Linnnumm:

Sprooch: en

Kont Code:

Kontext: vun-pstn

Verlängerung: s

Prioritéit: 1

Uniqueid: 1599589046.5244

Linkedid: 1599589046.5244

Applikatioun: Set AppData:

CallStart=1599571046

Well FreePBX iwwerschreift d'Extension.conf an Extension_ Dateienadditional.conf, wäerte mir d'Datei benotzen Erweiderung_Mooss.conf

Voll Code vun 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

Feature an Ënnerscheed vum ursprénglechen Dialplan vun den Autoren vum ursprénglechen Artikel -

  • Dialplan am .conf Format, wéi FreePBX et wëllt (jo, et kann .ael, awer net all Versiounen an et ass net ëmmer bequem)

  • Amplaz d'Enn duerch exten=>h ze veraarbecht, gouf d'Veraarbechtung duerch hangup_handler agefouert, well de FreePBX Dialplan nëmme mat him geschafft huet

  • Fixed Skript Call String, bäigefüügt Zitater an extern Uruffnummer ExtNum

  • D'Veraarbechtung gëtt op _custom Kontexter geplënnert an erlaabt Iech net FreePBX Konfiguratiounen ze beréieren oder z'änneren - erakomm iwwer [ext-huet-personaliséiert], erausgaang duerch [outbound-allroutes-custom]

  • Keng Bindung un Zuelen - d'Datei ass universell a muss nëmme fir de Wee a Link op de Server konfiguréiert ginn

Fir unzefänken, musst Dir och Scripten am AMI duerch Login a Passwuert lafen - dofir huet FreePBX och eng _custom Datei

manager_custom.conf Datei

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

Béid vun dëse Dateien mussen an /etc/asterisk plazéiert ginn, da liest d'Konfiguratioun nei (oder start d'Asterisk nei)

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

Loosst eis elo op PHP weidergoen

Scripten initialiséieren an e Service erstellen

Well de Schema fir mat Bitrix 24 ze schaffen, e Service fir AMI, net ganz einfach an transparent ass, muss et separat diskutéiert ginn. Asterisk, wann AMI aktivéiert ass, mécht einfach den Hafen op an dat ass et. Wann e Client bäitrieden, freet en Autorisatioun, dann abonnéiert de Client op déi néideg Eventer. Eventer kommen am Kloertext, deen PAMI a strukturéiert Objete konvertéiert a bitt d'Fäegkeet fir d'Filterfunktioun nëmme fir Eventer vun Interesse, Felder, Zuelen, etc.

Soubal den Uruff erakënnt, gëtt den NewExten Event ofgeléist aus dem Elterendeel [vun-pstn] Kontext, da ginn all Eventer an der Reiefolleg vun de Linnen an de Kontexter. Wann Informatioun aus den CallMeCallerIDName an CallStart Variabelen, déi am _custom Dialplan spezifizéiert sinn, kritt gëtt,

  1. D'Funktioun fir d'UserID ze froen, déi der Verlängerungsnummer entsprécht wou den Uruff koum. Wat ass wann et eng Dial-up Grupp ass? D'Fro ass politesch, musst Dir jidderengem gläichzäiteg en Uruff kreéieren (wann jidderee gläichzäiteg rifft) oder erstellen wéi se ruffen wann se am Tour ruffen? Déi meescht Clienten hunn d'Fisrt Available Strategie, also gëtt et kee Problem mat dësem, nëmmen een rifft. Mä de Problem muss geléist ginn.

  2. D'Uruffregistrierungsfunktioun an Bitrix24, déi d'CallID zréckginn, déi dann erfuerderlech ass fir d'Uruffparameter an e Link op d'Opnahm ze berichten. Erfuerdert entweder Extensiounsnummer oder UserID

FreePBX verstoen an et mat Bitrix24 a méi integréieren

Nom Enn vum Uruff gëtt d'Rekord-Downloadfunktioun genannt, déi gläichzäiteg de Status vum Uruff ofgeschloss bericht (Beschäftegt, Keng Äntwert, Erfolleg), an och e Link op d'MP3-Datei mam Rekord eroflueden (wann iwwerhaapt).

Well de CallMeIn.php Modul muss kontinuéierlech lafen, ass eng SystemD Startupdatei dofir erstallt callme.service, déi muss an /etc/systemd/system/callme.service gesat ginn

[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

Initialiséierung a Start vum Skript geschitt duerch Systemctl oder Service

# systemctl enable callme
# systemctl start callme

De Service wäert sech selwer nei starten wéi néideg (am Fall vu Crashen). Den Inbox Tracking Service erfuerdert kee Webserver fir installéiert ze ginn, nëmmen php ass gebraucht (wat definitiv um FeePBX Server ass). Awer an der Verontreiung vun Zougang zu Uruffrecords iwwer de Webserver (och mat https), ass et net méiglech op Uruffrecords ze lauschteren.

Elo schwätze mer iwwer erausginn Uriff. De CallMeOut.php Skript huet zwou Funktiounen:

  • Initiatioun vun engem Uruff wann eng Ufro fir e php Skript kritt gëtt (och mat der "Call" Knäppchen an der Bitrix selwer). Et funktionnéiert net ouni Webserver, d'Ufro gëtt iwwer HTTP POST kritt, d'Ufro enthält en Token

  • Message iwwer den Uruff, seng Parameteren an records an Bitrix. Entlooss vum Asterisk am [sub-call-intern-end] Dialplan wann en Uruff endet

FreePBX verstoen an et mat Bitrix24 a méi integréieren

De Webserver ass nëmme fir zwou Saache gebraucht - Bitrix Rekorddateien eroflueden (iwwer HTTPS) an de CallMeOut.php Skript ruffen. Dir kënnt den agebaute FreePBX Server benotzen, d'Dateien fir déi /var/www/html sinn, Dir kënnt en anere Server installéieren oder en anere Wee spezifizéieren.

Webserver

Loosst eis de Webserver Setup fir onofhängeg Etude verloossen (Flitter, Flitter, Flitter). Wann Dir keen Domain hutt, kënnt Dir FreeDomain ( https://www.freenom.com/ru/index.html), wat Iech e gratis Numm fir Är wäiss IP gëtt (vergiesst net d'Ports 80, 443 duerch de Router weiderzebréngen wann déi extern Adress nëmmen drop ass). Wann Dir just en DNS Domain erstallt hutt, da musst Dir waarden (vu 15 Minutten bis 48 Stonnen) bis all Server gelueden sinn. No der Erfahrung vun schaffen mat Gewalt Provider - vun 1 Stonn op engem Dag.

Installatioun Automatisatioun

En Installateur gouf op github entwéckelt fir d'Installatioun nach méi einfach ze maachen. Awer et war glat op Pabeier - wärend mir alles manuell installéieren, well nodeems se mat all deem geknackt hunn, gouf glaskloer wat Frënn mat wiem ass, wien geet wou a wéi et debuggen. Et gëtt nach keen Installateur

Docker

Wann Dir d'Léisung séier wëllt probéieren - et gëtt eng Optioun mam Docker - erstellt séier e Container, gitt et Ports no baussen, rutscht d'Astellungsdateien a probéiert (dëst ass d'Optioun mam LetsEncrypt Container, wann Dir schonn e Certificat hutt , Dir musst just de Reverse Proxy op de FreePBX Webserver redirectéieren (mir hunn et en aneren Hafen ginn ass 88), LetsEncrypt am Docker baséiert op vun dësem Artikel

Dir musst d'Datei am erofgeluede Projet Dossier lafen (no Git Klon), awer fir d'éischt an d'Asterisk Configs (Asterisk Dossier) a schreift d'Weeër op d'Records an d'URL vun Ärem Site do

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:

Dës docker-compose.yaml Datei gëtt iwwer

docker-compose up -d

Wann nginx net ufänkt, dann ass eppes falsch mat der Konfiguratioun am nginx/ssl_docker.conf Dossier

Aner Integratiounen

A firwat net e puer CRM gläichzäiteg a Scripten setzen, hu mir geduecht. Mir hunn e puer aner CRM APIen studéiert, besonnesch déi gratis agebaute PBX - ShugarCRM a Vtiger, an jo! jo, de Prinzip ass déi selwecht. Awer dëst ass eng aner Geschicht, déi mir spéider op de github separat eropluede wäerten.

Referenze

Verzichterklärung: All Ähnlechkeet mat der Realitéit ass fiktiv an et war net ech.

Source: will.com

Setzt e Commentaire