FreePBX:n ymmärtäminen ja sen integrointi Bitrix24:ään ja muihin

Bitrix24 on valtava yhdistelmä, joka yhdistää CRM:n, työnkulun, kirjanpidon ja monia muita asioita, joista johtajat todella pitävät ja IT-henkilöstö ei todellakaan pidä. Portaalia käyttävät monet pienet ja keskisuuret yritykset, mukaan lukien pienet klinikat, valmistajat ja jopa kauneushoitolat. Päätoiminto, jota johtajat rakastavat, on puhelimen ja CRM:n integrointi, kun kaikki puhelut tallennetaan välittömästi CRM:ään, luodaan asiakaskortteja, kun saapuvat, tiedot asiakkaasta näytetään ja näet heti, kuka hän on, mitä hän on. voi myydä ja kuinka paljon hän on velkaa. Mutta Bitrix24:n puhelut ja sen integrointi CRM:ään maksavat rahaa, joskus paljon. Artikkelissa kerron sinulle kokemuksen integroimisesta avoimien työkalujen ja suositun IP PBX:n kanssa Ilmainen PBXja harkitse myös eri osien työn logiikkaa

Työskentelen ulkoistajana yrityksessä, joka myy ja konfiguroi, integroi IP-puhelinta. Kun minulta kysyttiin, voisimmeko tarjota tälle ja tälle yritykselle jotain Bitrix24:n integroimiseksi asiakkaiden käytössä oleviin PBX:eihin sekä eri VDS-yritysten virtuaalisiin vaihteisiin, menin Googleen. Ja tietysti hän antoi minulle linkin artikkeli julkaisussa habr, jossa on kuvaus ja github, ja kaikki näyttää toimivan. Mutta kun yritettiin käyttää tätä ratkaisua, kävi ilmi, että Bitrix24 ei ole enää sama kuin ennen, ja paljon on tehtävä uudelleen. Lisäksi FreePBX ei ole sinulle pelkkä tähti, tässä sinun täytyy miettiä, kuinka yhdistää helppokäyttöisyys ja kova puhelinlinja konfigurointitiedostoissa.

Tutkimme työn logiikkaa

Joten aluksi, kuinka sen kaiken pitäisi toimia. Kun PBX:ssä tulee puhelu ulkopuolelta (SIP INVITE -tapahtuma palveluntarjoajalta), alkaa soittosuunnitelman (soittosuunnitelma, soittosuunnitelma) käsittely - säännöt siitä, mitä ja missä järjestyksessä puhelulle tehdään. Ensimmäisestä paketista saat paljon tietoa, jota voidaan sitten käyttää säännöissä. Analysaattori on erinomainen työkalu SIP:n sisäisten ominaisuuksien tutkimiseen sngrep (linkki), joka asennetaan yksinkertaisesti suosittuihin jakeluihin apt install/yum install ja vastaavilla, mutta se voidaan rakentaa myös lähdekoodista. Katsotaanpa puhelulokia sngrepissä

FreePBX:n ymmärtäminen ja sen integrointi Bitrix24:ään ja muihin

Yksinkertaistetussa muodossa soittosuunnitelma käsittelee vain ensimmäistä pakettia, joskus myös keskustelun aikana, puheluita siirretään, napinpainalluksia (DTMF), erilaisia ​​mielenkiintoisia asioita kuten FollowMe, RingGroup, IVR ja muut.

Mitä kutsupaketin sisällä on

FreePBX:n ymmärtäminen ja sen integrointi Bitrix24:ään ja muihin

Itse asiassa useimmat yksinkertaiset soittosuunnitelmat toimivat kahden ensimmäisen kentän kanssa, ja koko logiikka pyörii DID:n ja CallerID:n ympärillä. DID - minne soitamme, Soittajan ID - kuka soittaa.

Mutta loppujen lopuksi meillä on yritys eikä yksi puhelin - mikä tarkoittaa, että PBX:ssä on todennäköisesti puheluryhmiä (samanaikainen / peräkkäinen useiden laitteiden soitto) kaupunkinumeroissa (Ring Group), IVR (Hei, soitit ... Paina yksi ...), puhelinvastaajat (lauseet), aikaehdot, edelleenlähetys muihin numeroihin tai soluun (FollowMe, Forward). Tämä tarkoittaa, että on erittäin vaikeaa yksiselitteisesti määrittää, kuka todella vastaanottaa puhelun ja kenen kanssa keskustellaan puhelun saapuessa. Tässä on esimerkki tyypillisen puhelun alusta asiakkaidemme PBX:ssä

FreePBX:n ymmärtäminen ja sen integrointi Bitrix24:ään ja muihin

Kun puhelu on saapunut PBX:ään, se kulkee soittosuunnitelman läpi eri "konteksteissa". Konteksti Asteriskin näkökulmasta on numeroitu komentojoukko, joista jokainen sisältää suodattimen valitun numeron mukaan (sitä kutsutaan exteniksi, ulkopuhelulle alkuvaiheessa exten=DID). Dialplan-rivin komennot voivat olla mitä tahansa - sisäisiä toimintoja (esim. kutsu sisäiselle tilaajalle - Dial(), laita puhelin alas - Hangup()), ehdolliset operaattorit (IF, ELSE, ExecIF ja vastaavat), siirtyy muihin tämän kontekstin sääntöihin (Goto, GotoIF), siirtyminen muihin yhteyksiin funktiokutsun muodossa (Gosub, Macro). Erillinen direktiivi include имя_контекста, joka lisää komennot toisesta kontekstista nykyisen kontekstin loppuun. Komennot, jotka sisältyvät include kautta, suoritetaan aina jälkeen nykyisen kontekstin komennot.

FreePBX:n koko logiikka perustuu erilaisten kontekstien sisällyttämiseen toisiinsa Gosub-, Macro- ja Handler-käsittelijöiden kautta. Harkitse saapuvien FreePBX-puheluiden kontekstia

FreePBX:n ymmärtäminen ja sen integrointi Bitrix24:ään ja muihin

Kutsu kulkee kaikki kontekstit ylhäältä alas vuorotellen, kussakin kontekstissa voi olla kutsuja muihin yhteyksiin, kuten makroihin (Macro), funktioihin (Gosub) tai vain siirtymiin (Goto), joten kutsutun todellinen puu voi vain seurataan lokeissa.

Tyypillinen asetuskaavio tyypilliselle PBX:lle on esitetty alla. Soitettaessa DID etsitään saapuvista reiteistä, sille tarkistetaan väliaikaiset olosuhteet, jos kaikki on kunnossa, äänivalikko avautuu. Poistu siitä painamalla painiketta 1 tai aikakatkaisua operaattorin soittoryhmään. Puhelun päätyttyä kutsutaan hangupcall-makro, jonka jälkeen soittosuunnitelmassa ei voi tehdä mitään, paitsi erikoiskäsittelijöille (hangup handler).

FreePBX:n ymmärtäminen ja sen integrointi Bitrix24:ään ja muihin

Mihin tässä puhelualgoritmissa pitäisi antaa tiedot puhelun alkamisesta CRM:lle, mistä aloittaa tallennus, mihin lopettaa tallennus ja lähettää se yhdessä puhelutietojen kanssa CRM:lle?

Integrointi ulkoisiin järjestelmiin

Mitä on PBX- ja CRM-integraatio? Nämä ovat asetuksia ja ohjelmia, jotka muuntavat tietoja ja tapahtumia näiden kahden alustan välillä ja lähettävät ne toisilleen. Yleisin tapa itsenäisille järjestelmille kommunikoida on API:iden kautta, ja suosituin tapa käyttää API:ita on HTTP REST. Mutta ei tähdellä.

Asteriskin sisällä on:

  • AGI - synkroninen kutsu ulkoisille ohjelmille / komponenteille, käytetään pääasiassa soittosuunnitelmassa, on kirjastoja, kuten phpagi, PAGI

  • AMI - teksti-TCP-pistoke, joka toimii tapahtumien tilaamisen ja tekstikomentojen syöttämisen periaatteella, muistuttaa sisältä SMTP:tä, voi seurata tapahtumia ja hallita puheluita, siellä on kirjasto PAMI - suosituin yhteyden luomiseen Asteriskin kanssa

Esimerkki AMI-lähdöstä

Tapahtuma: Uusi kanava
Etuoikeus: soita, kaikki
Kanava: PJSIP/VMS_pjsip-0000078b
Kanavan tila: 4
ChannelStateDesc: Soi
Soittajan IDNum: 111222
Soittajan IDName: 111222
ConnectedLineNum:
yhdistetty linjanimi:
Kieli: fi
tilikoodi:
Konteksti: from-pstn
Laajuus: s
Prioriteetti: 1
Yksilöllinen numero: 1599589046.5244
Linkedid: 1599589046.5244

  • ARI on sekoitus molempia, kaikki RESTin, WebSocketin kautta, JSON-muodossa - mutta tuoreilla kirjastoilla ja kääreillä, ei kovin hyvä, löydetty käsin (phparia, phpari), joka kehittyi noin 3 vuotta sitten.

Esimerkki ARI-lähdöstä, kun puhelu aloitetaan

{ "muuttuja":"CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "channel":{ "id »:»1599644315.5334", «nimi»:»PJSIP/VMSpjsip-000007b6", "tila":"Soitto", "soittaja":{ "nimi":"111222", "numero":"111222″ }, "yhdistetty":{ "nimi":", "numero" :"" }, "accountcode":"", "dialplan":{ "context":"from-pstn", "exten":"s", "priority":2, "appnimi":"Stasis", "appdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"fi" }, "tähtiid":"48:5b:aa:aa:aa:aa", "sovellus":"hello-world" }

Mukavuus tai haitallisuus, mahdollisuus tai mahdottomuus työskennellä tietyn API:n kanssa määräytyy ratkaistavien tehtävien perusteella. CRM-integroinnin tehtävät ovat seuraavat:

  • Seuraa puhelun alkua, minne se siirrettiin, vedä esiin CallerID, DID, aloitus- ja lopetusajat, ehkä tiedot hakemistosta (etsimään yhteyttä puhelimen ja CRM-käyttäjän välillä)

  • Aloita ja lopeta puhelun tallennus, tallenna se haluttuun muotoon, ilmoita tallennuksen lopussa missä tiedosto sijaitsee

  • Soita puhelu ulkoiseen tapahtumaan (ohjelmasta), soita sisäiseen numeroon, ulkoiseen numeroon ja yhdistä ne

  • Valinnainen: integroi CRM:n, soittajaryhmien ja FollowME:n kanssa puheluiden automaattista siirtämistä varten paikan puuttuessa (CRM:n mukaan)

Kaikki nämä tehtävät voidaan ratkaista AMI:n tai ARI:n kautta, mutta ARI antaa paljon vähemmän tietoa, tapahtumia ei ole paljon, monia AMI:llä edelleen olevia muuttujia (esim. makrokutsut, makrojen sisällä olevat muuttujat, mukaan lukien puhelun tallennus) ei seurata. Siksi oikeaa ja tarkkaa seurantaa varten valitaan toistaiseksi AMI (mutta ei kokonaan). Lisäksi (no, missä se olisi ilman tätä, olemme laiskoja ihmisiä) - alkuperäisessä teoksessa (artikkeli julkaisussa habr) käytä PAMIa. *Sitten sinun on yritettävä kirjoittaa uudelleen ARI: hen, mutta ei sitä tosiasiaa, että se toimii.

Integraation keksiminen uudelleen

Jotta FreePBX voisi raportoida AMI:lle yksinkertaisella tavalla puhelun alkamisesta, päättymisajasta, numeroista, tallennettujen tiedostojen nimistä, on helpointa laskea puhelun kesto käyttämällä samaa temppua kuin alkuperäiset kirjoittajat - syötä muuttujasi ja jäsennä tulos niiden läsnäolon varalta. PAMI ehdottaa, että tämä tehdään yksinkertaisesti suodatintoiminnon kautta.

Tässä on esimerkki oman muuttujan asettamisesta puhelun alkamisajalle (s on erityinen numero soittosuunnitelmassa, joka suoritetaan ENNEN DID-haun aloittamista)

[ext-did-custom]

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

Esimerkki AMI-tapahtumasta tälle riville

Tapahtuma: Uusi kanava

Etuoikeus: soita, kaikki

Kanava: PJSIP/VMS_pjsip-0000078b

Kanavan tila: 4

ChannelStateDesc: Soi

Soittajan IDNum: 111222

Soittajan IDName: 111222

ConnectedLineNum:

yhdistetty linjanimi:

Kieli: fi

tilikoodi:

Konteksti: from-pstn

Laajuus: s

Prioriteetti: 1

Yksilöllinen numero: 1599589046.5244

Linkedid: 1599589046.5244

Sovellus: Aseta AppData:

CallStart=1599571046

Koska FreePBX korvaa extendion.conf- ja extension_-tiedostotextra.conf, käytämme tiedostoa laajennus_asiakassuhde.conf

Täysi laajennus_custom.conf-koodi

[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

Ominaisuus ja ero alkuperäisen artikkelin tekijöiden alkuperäiseen valintatauluun -

  • Dialplan .conf-muodossa, kuten FreePBX haluaa (kyllä, se voi olla .ael, mutta ei kaikki versiot, eikä se ole aina kätevä)

  • Sen sijaan, että loppu olisi käsitelty läpi exten=>h, prosessointi otettiin käyttöön hangup_handlerin kautta, koska FreePBX-soittosuunnitelma toimi vain sen kanssa

  • Korjattu komentosarjan kutsumerkkijono, lisätty lainausmerkit ja ulkoinen puhelinnumero ExtNum

  • Käsittely siirretään _mukautettuihin yhteyksiin ja sallii sinun olla koskematta tai muokkaamatta FreePBX-asetuksia - saapuvat [ext-muokattu], lähtevä kautta [outbound-allroutes-custom]

  • Ei sidotusta numeroihin - tiedosto on yleinen ja se tarvitsee vain määrittää polun ja linkin palvelimeen

Aloitaksesi sinun on myös suoritettava komentosarjat AMI:ssä sisäänkirjautumisen ja salasanan avulla - tätä varten FreePBX:ssä on myös _custom-tiedosto

manager_custom.conf-tiedosto

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

Molemmat tiedostot on sijoitettava kansioon /etc/asterisk ja luettava sitten asetukset uudelleen (tai käynnistettävä asteriski uudelleen)

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

Siirrytään nyt PHP:hen

Skriptien alustus ja palvelun luominen

Koska AMI:n palvelun Bitrix 24:n kanssa työskentelysuunnitelma ei ole täysin yksinkertainen ja läpinäkyvä, siitä on keskusteltava erikseen. Asterisk, kun AMI on aktivoitu, avaa vain portin ja se on siinä. Kun asiakas liittyy, se pyytää valtuutusta, jonka jälkeen asiakas tilaa tarvittavat tapahtumat. Tapahtumat tulevat pelkkänä tekstinä, jonka PAMI muuntaa strukturoiduiksi objekteiksi ja tarjoaa mahdollisuuden asettaa suodatustoiminnon vain kiinnostaville tapahtumille, kentälle, numeroille jne.

Heti kun kutsu tulee, NewExten-tapahtuma käynnistyy alkaen ylätason [from-pstn]-kontekstista, sitten kaikki tapahtumat menevät kontekstien rivien järjestyksessä. Kun tiedot vastaanotetaan _custom dialplan -kohdassa määritetyistä CallMeCallerIDName- ja CallStart-muuttujista,

  1. Toiminto, jossa pyydetään käyttäjätunnusta, joka vastaa alanumeroa, johon puhelu tuli. Entä jos se on puhelinverkkoyhteys? Kysymys on poliittinen, pitääkö luoda puhelu kaikille kerralla (kun kaikki soittavat kerralla) vai vuorollaan soittamalla soittamalla? Useimmilla asiakkailla on Fisrt Available -strategia, joten tässä ei ole ongelmaa, vain yksi puhelu. Mutta ongelma on ratkaistava.

  2. Bitrix24:n puhelun rekisteröintitoiminto, joka palauttaa CallID:n, jota sitten tarvitaan raportoimaan puheluparametrit ja linkki tallenteeseen. Vaatii joko alanumeron tai käyttäjätunnuksen

FreePBX:n ymmärtäminen ja sen integrointi Bitrix24:ään ja muihin

Puhelun päätyttyä kutsutaan tietueen lataustoiminto, joka raportoi samanaikaisesti puhelun valmistumisen tilan (Varattu, Ei vastausta, Onnistui) ja lataa myös linkin tietueen mp3-tiedostoon (jos sellainen on).

Koska CallMeIn.php-moduulin on oltava käynnissä jatkuvasti, sille on luotu SystemD-käynnistystiedosto callme.service, joka on asetettava kansioon /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

komentosarjan alustus ja käynnistys tapahtuu systemctl:n tai palvelun kautta

# systemctl enable callme
# systemctl start callme

Palvelu käynnistyy tarvittaessa uudelleen (jos kaatuu). Saapuneiden postilaatikon seurantapalvelu ei vaadi web-palvelimen asentamista, tarvitaan vain php (joka on ehdottomasti FeePBX-palvelimella). Mutta jos puhelutietueisiin ei ole pääsyä Web-palvelimen kautta (myös https-yhteydellä), puhelutietueita ei voi kuunnella.

Puhutaanpa nyt lähtevistä puheluista. CallMeOut.php-skriptillä on kaksi toimintoa:

  • Puhelun aloittaminen, kun vastaanotetaan pyyntö php-skriptille (mukaan lukien itse Bitrixin "Soita"-painikkeen käyttäminen). Se ei toimi ilman verkkopalvelinta, pyyntö vastaanotetaan HTTP POST:n kautta, pyyntö sisältää tunnuksen

  • Viesti puhelusta, sen parametreista ja tietueista Bitrixissä. Asteriskin laukaisee [sub-call-internal-ended] -valintataulussa, kun puhelu päättyy

FreePBX:n ymmärtäminen ja sen integrointi Bitrix24:ään ja muihin

Web-palvelinta tarvitaan vain kahteen asiaan - Bitrix-tietuetiedostojen lataamiseen (HTTPS:n kautta) ja CallMeOut.php-skriptin kutsumiseen. Voit käyttää sisäänrakennettua FreePBX-palvelinta, jonka tiedostot ovat /var/www/html, voit asentaa toisen palvelimen tai määrittää toisen polun.

verkkopalvelin

Jätetään verkkopalvelimen asennus itsenäiseen opiskeluun (tyts, tyts, tyts). Jos sinulla ei ole verkkotunnusta, voit kokeilla FreeDomain( https://www.freenom.com/ru/index.html), joka antaa sinulle ilmaisen nimen valkoiselle IP-osoitteellesi (älä unohda välittää portteja 80, 443 reitittimen kautta, jos ulkoinen osoite on vain siinä). Jos loit juuri DNS-toimialueen, sinun on odotettava (15 minuutista 48 tuntiin), kunnes kaikki palvelimet on ladattu. Kotimaisten palveluntarjoajien kanssa työskentelyn kokemuksen mukaan - 1 tunnista päivään.

Asennusautomaatio

Githubiin on kehitetty asennusohjelma, joka tekee asennuksesta entistä helpompaa. Mutta paperilla se oli sujuvaa - kun asennamme kaiken manuaalisesti, koska kaiken tämän kanssa puuhastelun jälkeen kävi kristallinkirkkaaksi, mikä on ystävä kenen kanssa, kuka menee minne ja miten virheenkorjaus. Asentajaa ei vielä ole

Satamatyöläinen

Jos haluat kokeilla ratkaisua nopeasti - Dockerissa on vaihtoehto - luo nopeasti kontti, anna sille portit ulkopuolelta, liu'uta asetustiedostot ja kokeile (tämä on vaihtoehto LetsEncrypt-säilön kanssa, jos sinulla on jo varmenne, täytyy vain ohjata käänteinen välityspalvelin FreePBX-verkkopalvelimeen (annoimme sille toisen portin on 88), LetsEncrypt dockerissa perustuen tässä artikkelissa

Sinun on suoritettava tiedosto ladatussa projektikansiossa (git kloonin jälkeen), mutta mene ensin tähtiasetuksiin (tähtikansio) ja kirjoita sinne tietueiden polut ja sivustosi URL-osoite.

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:

Tämä docker-compose.yaml-tiedosto suoritetaan kautta

docker-compose up -d

Jos nginx ei käynnisty, jokin on vialla kansion nginx/ssl_docker.conf asetuksissa

Muut integraatiot

Ja miksi et laittaisi CRM:ää skripteihin samaan aikaan, ajattelimme. Tutkimme useita muita CRM-sovellusliittymiä, erityisesti ilmaista sisäänrakennettua PBX:ää - ShugarCRM ja Vtiger, ja kyllä! kyllä ​​periaate on sama. Mutta tämä on toinen tarina, jonka lataamme myöhemmin githubiin erikseen.

viittaukset

Vastuuvapauslauseke: Kaikki yhtäläisyys todellisuuden kanssa on kuvitteellista, enkä se ollut minä.

Lähde: will.com

Lisää kommentti