Verstaan ​​FreePBX en integreer dit met Bitrix24 en meer

Bitrix24 is 'n groot kombinasie wat CRM, werkvloei, rekeningkunde en baie ander dinge kombineer waarvan bestuurders regtig hou en IT-personeel nie regtig hou nie. Die portaal word deur baie klein en mediumgrootte maatskappye gebruik, insluitend klein klinieke, vervaardigers en selfs skoonheidsalonne. Die hooffunksie waarvan bestuurders “liefde” is, is die integrasie van telefonie en CRM, wanneer enige oproep onmiddellik in CRM opgeneem word, word kliëntkaarte geskep, wanneer inkomende inligting oor die kliënt vertoon word en jy kan dadelik sien wie hy is, wat hy kan verkoop en hoeveel hy skuld. Maar telefonie van Bitrix24 en die integrasie daarvan met CRM kos geld, soms baie. In die artikel sal ek jou vertel van die ervaring van integrasie met oop gereedskap en die gewilde IP PBX GratisPBX, en oorweeg ook die logika van die werk van verskeie dele

Ek werk as 'n uitkontrakteerder in 'n maatskappy wat IP-telefonie verkoop en konfigureer, integreer. Toe ek gevra is of ons iets aan hierdie en hierdie maatskappy kan bied om Bitrix24 te integreer met PBX's wat kliënte het, asook met virtuele PBX's op verskeie VDS-maatskappye, het ek na Google gegaan. En natuurlik het hy vir my 'n skakel gegee na artikel in habr, waar daar 'n beskrywing is, en github, en alles blyk te werk. Maar toe ons hierdie oplossing probeer gebruik, het dit geblyk dat Bitrix24 nie meer dieselfde is as voorheen nie, en baie moet oorgedoen word. Boonop is FreePBX nie 'n blote asterisk vir jou nie, hier moet jy dink oor hoe om gebruiksgemak en 'n harde-kern-skakelplan in konfigurasielêers te kombineer.

Ons bestudeer die logika van werk

So om mee te begin, hoe dit alles moet werk. Wanneer 'n oproep van buite die PBX (SIP INVITE-geleentheid van die verskaffer af) ontvang word, begin die verwerking van die skakelplan (skakelplan, skakelplan) - die reëls van wat en in watter volgorde om met die oproep te doen. Vanaf die eerste pakkie kan jy baie inligting kry, wat dan in die reëls gebruik kan word. 'n Uitstekende hulpmiddel om die interne van SIP te bestudeer, is die ontleder sngrep (skakel) wat eenvoudig in gewilde verspreidings geïnstalleer word via apt install/yum install en dies meer, maar dit kan ook vanaf die bron gebou word. Kom ons kyk na die oproeplog in sngrep

Verstaan ​​FreePBX en integreer dit met Bitrix24 en meer

In 'n vereenvoudigde vorm handel die skakelplan net oor die eerste pakkie, soms ook tydens die gesprek, word oproepe oorgeplaas, knoppie druk (DTMF), verskeie interessante dinge soos FollowMe, RingGroup, IVR en ander.

Wat is in die uitnodigingspakket

Verstaan ​​FreePBX en integreer dit met Bitrix24 en meer

Eintlik werk die meeste eenvoudige skakelplanne met die eerste twee velde, en die hele logika draai om DID en CallerID. DID - waar ons bel, CallerID - wie bel.

Maar ons het immers 'n maatskappy en nie een foon nie - wat beteken dat die PBX heel waarskynlik oproepgroepe (gelyktydige / opeenvolgende lui van verskeie toestelle) op stadnommers (Ring Group), IVR (Hallo, jy het gebel ... Druk een vir ...), Antwoordmasjiene ( Frases), Tydstoestande, Aanstuur na ander nommers of na 'n sel (FollowMe, Forward). Dit beteken dat dit baie moeilik is om ondubbelsinnig te bepaal wie werklik 'n oproep sal ontvang en met wie 'n gesprek sal voer wanneer 'n oproep kom. Hier is 'n voorbeeld van die begin van 'n tipiese oproep in die PBX van ons kliënte

Verstaan ​​FreePBX en integreer dit met Bitrix24 en meer

Nadat die oproep suksesvol die PBX binnegekom het, beweeg dit deur die skakelplan in verskillende "kontekste". Die konteks vanuit die oogpunt van Asterisk is 'n genommerde stel opdragte, wat elkeen 'n filter bevat volgens die geskakelde nommer (dit word exten genoem, vir 'n eksterne oproep in die aanvanklike stadium exten=DID). Die opdragte in die skakelplanlyn kan enigiets wees - interne funksies (byvoorbeeld, bel 'n interne intekenaar - Dial(), sit die telefoon neer - Hangup()), voorwaardelike operateurs (IF, ELSE, ExecIF en dies meer), oorgange na ander reëls van hierdie konteks (Goto, GotoIF), oorgang na ander kontekste in die vorm van 'n funksie-oproep (Gosub, Makro). 'n Afsonderlike opdrag include имя_контекста, wat opdragte uit 'n ander konteks byvoeg tot die einde van die huidige konteks. Opdragte ingesluit via include word altyd uitgevoer na bevele van die huidige konteks.

Die hele logika van FreePBX is gebou op die insluiting van verskillende kontekste in mekaar deur insluit en oproep deur Gosub, Makro en Hanteerder hanteerders. Oorweeg die konteks van inkomende FreePBX-oproepe

Verstaan ​​FreePBX en integreer dit met Bitrix24 en meer

Die oproep gaan om die beurt deur alle kontekste van bo na onder, in elke konteks kan daar oproepe wees na ander kontekste soos makros (Makro), funksies (Gosub) of net oorgange (Goto), so die regte boom van wat genoem word kan slegs in die logboeke opgespoor word.

'n Tipiese opstellingsdiagram vir 'n tipiese PBX word hieronder getoon. Wanneer daar gebel word, word DID in inkomende roetes gesoek, tydelike toestande word daarvoor nagegaan, as alles in orde is, word die stemkieslys geloods. Van dit, deur knoppie 1 of time-out te druk, gaan na die groep skakeloperateurs. Nadat die oproep beëindig is, word die hangupcall-makro geroep, waarna niks in die skakelplan gedoen kan word nie, behalwe vir spesiale hanteerders (hangup-hanteerder).

Verstaan ​​FreePBX en integreer dit met Bitrix24 en meer

Waar in hierdie oproepalgoritme moet ons inligting verskaf oor die begin van die oproep na CRM, waar om op te neem, waar om die opname te beëindig en dit saam met inligting oor die oproep na CRM te stuur?

Integrasie met eksterne stelsels

Wat is PBX- en CRM-integrasie? Dit is instellings en programme wat data en gebeure tussen hierdie twee platforms omskakel en na mekaar stuur. Die mees algemene manier vir onafhanklike stelsels om te kommunikeer is deur API's, en die gewildste manier om toegang te verkry tot API's is HTTP REST. Maar nie vir asterisk nie.

Binne asterisk is:

  • AGI - sinchroniese oproep van eksterne programme/komponente, hoofsaaklik gebruik in die skakelplan, daar is biblioteke soos phpagi, PAGI

  • AMI - 'n teks TCP-sok wat werk op die beginsel om in te teken op gebeurtenisse en teksopdragte in te voer, lyk soos SMTP van binne, kan gebeure opspoor en oproepe bestuur, daar is 'n biblioteek PAMI - die gewildste vir die skep van 'n verbinding met Asterisk

AMI uitset voorbeeld

Gebeurtenis: Nuwe kanaal
Voorreg: bel, almal
Kanaal: PJSIP/VMS_pjsip-0000078b
Kanaalstaat: 4
ChannelStateDesc: Ring
Beller-IDNum: 111222
Beller-ID Naam: 111222
ConnectedLineNum:
gekoppelde lynnaam:
Taal: en
rekening kode:
Konteks: vanaf-pstn
Uitbreiding: s
Prioriteit: 1
Uniek: 1599589046.5244
Geskakel: 1599589046.5244

  • ARI is 'n mengsel van albei, alles via REST, WebSocket, in JSON-formaat - maar met vars biblioteke en omhulsels, nie baie goed nie, dadelik gevind (phparia, phpari) wat sowat 3 jaar gelede in hul ontwikkeling geword het.

Voorbeeld van ARI-uitvoer wanneer 'n oproep geïnisieer word

{ "variable":"CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "kanaal":{ "id" »:»1599644315.5334″, «naam»:»PJSIP/VMSpjsip-000007b6″, "state":"Ring", "beller":{ "naam":"111222", "nommer":"111222″ }, "gekoppel":{ "naam":"", "nommer" :"" }, "accountcode":"", "dialplan":{ "context":"van-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-wêreld" }

Gerief of ongerief, die moontlikheid of onmoontlikheid om met 'n bepaalde API te werk, word bepaal deur die take wat opgelos moet word. Die take vir integrasie met CRM is soos volg:

  • Volg die begin van die oproep, waarheen dit oorgedra is, trek CallerID, DID, begin- en eindtye uit, miskien data uit die gids (om te soek na 'n verbinding tussen die foon en die CRM-gebruiker)

  • Begin en beëindig die opname van die oproep, stoor dit in die verlangde formaat, laat weet aan die einde van die opname waar die lêer geleë is

  • Inisieer 'n oproep op 'n eksterne gebeurtenis (van die program), bel 'n interne nommer, 'n eksterne nommer en verbind hulle

  • Opsioneel: integreer met CRM, skakelgroepe en FollowME vir outomatiese oordrag van oproepe in die afwesigheid van 'n plek (volgens CRM)

Al hierdie take kan deur AMI of ARI opgelos word, maar ARI verskaf baie minder inligting, daar is nie baie gebeure nie, baie veranderlikes wat AMI nog het (byvoorbeeld, makro-oproepe, stel veranderlikes binne makros, insluitend oproepopname) word nie nagespoor nie. Daarom, vir korrekte en akkurate opsporing, kom ons kies AMI vir nou (maar nie heeltemal nie). Daarbenewens (wel, waar sou dit wees sonder hierdie, ons is lui mense) - in die oorspronklike werk (artikel in habr) gebruik PAMI. *Dan moet jy probeer om te herskryf na ARI, maar nie die feit dat dit sal werk nie.

Herontdek integrasie

Om ons FreePBX op eenvoudige maniere aan AMI te kan rapporteer oor die begin van die oproep, eindtyd, nommers, name van aangetekende lêers, is dit die maklikste om die duur van die oproep te bereken met dieselfde truuk as die oorspronklike outeurs - voer jou veranderlikes in en ontleed die uitset vir hul teenwoordigheid. PAMI stel voor om dit bloot deur 'n filterfunksie te doen.

Hier is 'n voorbeeld van die instel van jou eie veranderlike vir die begintyd van die oproep (s is 'n spesiale nommer in die skakelplan wat uitgevoer word VOORDAT die DID-soektog begin word)

[ext-did-custom]

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

'n Voorbeeld AMI-gebeurtenis vir hierdie lyn

Gebeurtenis: Nuwe kanaal

Voorreg: bel, almal

Kanaal: PJSIP/VMS_pjsip-0000078b

Kanaalstaat: 4

ChannelStateDesc: Ring

Beller-IDNum: 111222

Beller-ID Naam: 111222

ConnectedLineNum:

gekoppelde lynnaam:

Taal: en

rekening kode:

Konteks: vanaf-pstn

Uitbreiding: s

Prioriteit: 1

Uniek: 1599589046.5244

Geskakel: 1599589046.5244

Toepassing: Stel AppData:

CallStart=1599571046

Omdat FreePBX die extension.conf en extension_ lêers oorskryfadditional.conf, sal ons die lêer gebruik uitbreiding_persoonlike.conf

Volledige kode van 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

Kenmerk en verskil van die oorspronklike skakelplan van die skrywers van die oorspronklike artikel -

  • Dialplan in .conf-formaat, soos FreePBX dit wil hê (ja, dit kan .ael, maar nie alle weergawes nie en dit is nie altyd gerieflik nie)

  • In plaas daarvan om die einde deur exten=>h te verwerk, is verwerking deur hangup_handler ingestel, omdat die FreePBX-skakelplan net daarmee gewerk het

  • Vaste skrif-oproepstring, bygevoegde kwotasies en eksterne oproepnommer ExtNum

  • Verwerking word na _pasgemaakte kontekste geskuif en laat jou toe om nie FreePBX-konfigurasies aan te raak of te wysig nie - inkomende via [ext-het-pasgemaak], uitgaande deur [uitgaande-allroutes-pasgemaak]

  • Geen binding aan nommers nie - die lêer is universeel en hoef slegs gekonfigureer te word vir die pad en skakel na die bediener

Om te begin, moet jy ook skrifte in AMI laat loop deur aanmelding en wagwoord - hiervoor het FreePBX ook 'n _custom lêer

manager_custom.conf lêer

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

Albei hierdie lêers moet in /etc/asterisk geplaas word, lees dan weer die konfigurasies (of herbegin die asterisk)

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

Kom ons gaan nou oor na PHP

Inisialiseer skrifte en skep 'n diens

Aangesien die skema vir werk met Bitrix 24, 'n diens vir AMI, nie heeltemal eenvoudig en deursigtig is nie, moet dit apart bespreek word. Asterisk, wanneer AMI geaktiveer is, maak eenvoudig die poort oop en dit is dit. Wanneer 'n kliënt aansluit, versoek dit magtiging, dan teken die kliënt in op die nodige gebeurtenisse. Gebeurtenisse kom in gewone teks, wat PAMI omskakel in gestruktureerde voorwerpe en bied die vermoë om die filterfunksie slegs vir gebeurtenisse van belang, velde, getalle, ens.

Sodra die oproep inkom, word die NewExten-gebeurtenis afgevuur vanaf die ouer [van-pstn] konteks, dan gaan alle gebeurtenisse in die volgorde van die lyne in die kontekste. Wanneer inligting ontvang word vanaf die CallMeCallerIDName en CallStart veranderlikes gespesifiseer in die _custom dialplan, die

  1. Die funksie om die Gebruiker-ID aan te vra wat ooreenstem met die uitbreidingsnommer waar die oproep gekom het. Wat as dit 'n inbelgroep is? Die vraag is polities, moet jy 'n oproep aan almal op een slag skep (wanneer almal tegelyk bel) of skep soos hulle noem wanneer jy om die beurt bel? Die meeste kliënte het die Fisrt Available-strategie, so daar is geen probleem hiermee nie, net een bel. Maar die kwessie moet opgelos word.

  2. Die oproepregistrasiefunksie in Bitrix24, wat die CallID terugstuur, wat dan vereis word om die oproepparameters en 'n skakel na die opname te rapporteer. Vereis óf uitbreidingsnommer óf UserID

Verstaan ​​FreePBX en integreer dit met Bitrix24 en meer

Na die einde van die oproep word die rekordaflaaifunksie geroep, wat terselfdertyd die status van die oproepvoltooiing rapporteer (Besig, Geen antwoord, Sukses), en ook 'n skakel aflaai na die mp3-lêer met die rekord (indien enige).

Omdat die CallMeIn.php-module voortdurend moet loop, is 'n SystemD-opstartlêer daarvoor geskep callme.diens, wat in /etc/systemd/system/callme.service geplaas moet word

[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

inisialisering en bekendstelling van die skrip vind plaas deur systemctl of diens

# systemctl enable callme
# systemctl start callme

Die diens sal homself herbegin soos nodig (in geval van ineenstortings). Die inkassie-opsporingsdiens vereis nie dat 'n webbediener geïnstalleer word nie, slegs php is nodig (wat beslis op die FeePBX-bediener is). Maar in die afwesigheid van toegang tot oproeprekords deur die webbediener (ook met https), sal dit nie moontlik wees om na oproeprekords te luister nie.

Kom ons praat nou oor uitgaande oproepe. Die CallMeOut.php-skrip het twee funksies:

  • Begin van 'n oproep wanneer 'n versoek vir 'n php-skrip ontvang word (insluitend die gebruik van die "Bel"-knoppie in die Bitrix self). Dit werk nie sonder 'n webbediener nie, die versoek word via HTTP POST ontvang, die versoek bevat 'n teken

  • Boodskap oor die oproep, sy parameters en rekords in Bitrix. Geskiet deur Asterisk in die [sub-oproep-intern-beëindigde] skakelplan wanneer 'n oproep eindig

Verstaan ​​FreePBX en integreer dit met Bitrix24 en meer

Die webbediener word slegs vir twee dinge benodig - die aflaai van Bitrix-rekordlêers (via HTTPS) en die oproep van die CallMeOut.php-skrip. U kan die ingeboude FreePBX-bediener gebruik, die lêers waarvoor /var/www/html is, u kan 'n ander bediener installeer of 'n ander pad spesifiseer.

Webbediener

Kom ons laat die webbedieneropstelling vir onafhanklike studie (tyts, tyts, tyts). As jy nie 'n domein het nie, kan jy FreeDomain ( https://www.freenom.com/ru/index.html), wat jou 'n gratis naam vir jou wit IP sal gee (moenie vergeet om poorte 80, 443 deur die router aan te stuur as die eksterne adres net daarop is nie). As u sopas 'n DNS-domein geskep het, moet u wag (van 15 minute tot 48 uur) totdat alle bedieners gelaai is. Volgens die ervaring van werk met huishoudelike verskaffers - van 1 uur tot 'n dag.

Installasie outomatisering

'n Installeerder is op github ontwikkel om installasie nog makliker te maak. Maar dit was glad op papier - terwyl ons dit alles met die hand installeer, want nadat u hiermee gepeuter het, het dit glashelder geword wat vriende is met wie, wie gaan waarheen en hoe om dit te ontfout. Daar is nog geen installeerder nie

Docker

As jy die oplossing vinnig wil probeer - daar is 'n opsie met Docker - skep vinnig 'n houer, gee dit poorte buite, skuif die instellingslêers en probeer (dit is die opsie met die LetsEncrypt-houer, as jy reeds 'n sertifikaat het, kan jy hoef net die omgekeerde instaanbediener na die FreePBX-webbediener te herlei (ons het dit 'n ander poort gegee is 88), LetsEncrypt in docker gebaseer op Hierdie artikel

Jy moet die lêer in die afgelaaide projeklêer (na git clone) laat loop, maar gaan eers in die asterisk configs (asterisk folder) en skryf die paaie na die rekords en die URL van jou werf daar neer

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:

Hierdie docker-compose.yaml-lêer word uitgevoer via

docker-compose up -d

As nginx nie begin nie, is daar iets fout met die konfigurasie in die nginx/ssl_docker.conf-lêergids

Ander integrasies

En hoekom nie 'n bietjie CRM op dieselfde tyd in skrifte sit nie, het ons gedink. Ons het verskeie ander CRM API's bestudeer, veral die gratis ingeboude PBX - ShugarCRM en Vtiger, en ja! ja, die beginsel is dieselfde. Maar dit is 'n ander storie, wat ons later afsonderlik na die github sal oplaai.

verwysings

Vrywaring: Enige ooreenkoms met die werklikheid is fiktief en dit was nie ek nie.

Bron: will.com

Voeg 'n opmerking