mangrupakeun gabungan badag anu ngagabungkeun CRM, workflow, akuntansi jeung loba hal séjén anu manajer bener resep tur staf IT teu bener resep. Portal dianggo ku seueur perusahaan alit sareng sedeng, kalebet klinik alit, pabrik bahkan salon kageulisan. Fungsi utama anu "cinta" manajer nyaéta integrasi teleponi sareng CRM, nalika telepon naon waé langsung dirékam dina CRM, kartu klien didamel, nalika lebet, inpormasi ngeunaan klien ditampilkeun sareng anjeun tiasa langsung ningali saha anjeunna, naon anjeunna. tiasa ngajual sareng sabaraha hutangna. Tapi telephony ti Bitrix24 sarta integrasi na kalawan CRM waragad duit, kadang loba. Dina tulisan kuring bakal nyaritakeun pangalaman ngahijikeun sareng alat kabuka sareng IP PBX populér , sarta ogé mertimbangkeun logika karya rupa-rupa bagian
Kuring gawe salaku outsourcer dina parusahaan nu sells na configures, integrates IP telephony. Nalika kuring ditaros upami urang tiasa nawiskeun hal ieu sareng perusahaan ieu pikeun ngahijikeun Bitrix24 sareng PBX anu para nasabah, kitu ogé sareng PBX maya dina sababaraha perusahaan VDS, kuring angkat ka Google. Sarta tangtu anjeunna masihan kuring link ka , dimana aya pedaran, sarta github, sarta sagalana sigana jalan. Tapi nalika nyobian nganggo solusi ieu, tétéla yén Bitrix24 henteu deui sami sareng sateuacanna, sareng seueur anu kedah didamel deui. Sajaba ti éta, FreePBX teu tanda bintang bulistir pikeun anjeun, didieu anjeun kudu mikir ngeunaan kumaha carana ngagabungkeun betah pamakéan sarta dialplan hardcore dina file config.
Urang diajar logika karya
Janten pikeun ngamimitian, kumaha sadayana kedah dianggo. Nalika telepon ditampi ti luar PBX (acara SIP Ujang ti panyadia), pamrosésan dialplan (rencana dial, dialplan) dimimitian - aturan naon jeung naon urutan pikeun nelepon. Tina pakét anu munggaran, anjeun tiasa nampi seueur inpormasi, anu teras tiasa dianggo dina aturan. Alat anu saé pikeun diajar internal SIP nyaéta analisa sngrep () nu ngan saukur dipasang dina distribusi populér via apt install / yum install jeung kawas, tapi ogé bisa diwangun ti sumber. Hayu urang tingali log telepon di sngrep

Dina bentuk saderhana, dialplan ngan ukur nganggo pakét anu munggaran, sakapeung ogé nalika paguneman, telepon ditransfer, pencét tombol (DTMF), sababaraha hal anu pikaresepeun sapertos FollowMe, RingGroup, IVR sareng anu sanésna.
Naon anu aya di jero Pek Ujang

Sabenerna, paling dialplans basajan dianggo kalayan dua widang munggaran, sarta sakabeh logika revolves sabudeureun DID na CallerID. DID - dimana urang nelepon, CallerID - anu nelepon.
Tapi sanggeus kabeh, urang boga parusahaan jeung teu hiji telepon - nu hartina PBX paling dipikaresep boga grup panggero (simultaneous / ringing padeukeut sababaraha alat) dina nomer kota (Ring Grup), IVR (Halo, anjeun disebut ... Pencét hiji keur ...), Mesin ngajawaban ( Frasa ), Kaayaan Waktos, Neraskeun ka nomer séjén atawa ka sél (FollowMe, Forward). Ieu ngandung harti yén éta téh hésé pisan pikeun unambiguously nangtukeun saha nu sabenerna bakal nampa telepon jeung saha nu bakal ngobrol jeung lamun telepon datang. Ieu mangrupikeun conto awal telepon umum dina PBX klien kami

Saatos sauran suksés asup kana PBX, éta ngalangkungan rencana dial dina "konteks" anu béda. Kontéks tina sudut pandang Asterisk nyaéta sakumpulan paréntah anu wilanganana, anu masing-masing ngandung saringan ku nomer anu dipencét (disebut exten, pikeun telepon éksternal dina tahap awal exten=DID). Paréntah dina garis dialplan tiasa naon waé - fungsi internal (contona, nelepon palanggan internal - Dial(), nempatkeun telepon - Hangup()), operator kondisional (IF, ELSE, ExecIF jeung sajabana), transisi ka aturan séjén tina konteks ieu (Goto, GotoIF), transisi ka konteks séjén dina bentuk panggero fungsi (Gosub, Macro). A diréktif misah include имя_контекста, nu nambahkeun paréntah ti konteks sejen ka tungtung konteks ayeuna. Paréntah kaasup via kaasup sok dieksekusi после paréntah tina konteks ayeuna.
Sakabeh logika FreePBX diwangun dina citakan tina konteks béda kana silih ngaliwatan kaasup jeung nelepon ngaliwatan Gosub, Macro jeung Handler pawang. Mertimbangkeun konteks telepon FreePBX asup

Telepon ngalangkungan sadaya kontéks ti luhur ka handap, dina unggal kontéks tiasa aya telepon kana kontéks anu sanés sapertos makro (Makro), fungsi (Gosub) atanapi ngan ukur transisi (Goto), janten tangkal nyata naon anu disebut ngan ukur tiasa. dilacak dina log.
Diagram setelan has pikeun PBX has dipidangkeun di handap. Nalika nelepon, DID ditéang dina rute anu asup, kaayaan samentawis dipariksa pikeun éta, upami sadayana beres, ménu sora diluncurkeun. Ti dinya, ku mencét tombol 1 atawa timeout, kaluar ka grup operator nelepon. Saatos panggero réngsé, hangupcall makro disebut, nu satutasna nanaon bisa dipigawé di dialplan nu, iwal pawang husus (hangup Handler).

Dimana dina algoritma panggero ieu urang kudu nyadiakeun informasi ngeunaan awal panggero pikeun CRM, dimana ngamimitian ngarekam, dimana mungkas rékaman sarta ngirimkeunana babarengan jeung informasi ngeunaan panggero ka CRM?
Integrasi jeung sistem éksternal
Naon integrasi PBX sareng CRM? Ieu mangrupikeun setélan sareng program anu ngarobih data sareng acara antara dua platform ieu sareng ngirimkeunana. Cara anu paling umum pikeun komunikasi sistem mandiri nyaéta ngalangkungan API, sareng cara anu paling populér pikeun ngaksés API nyaéta HTTP REST. Tapi henteu pikeun tanda bintang.
Di jero Asterisk nyaéta:
AGI - panggero sinkron program éksternal / komponén, dipaké utamana dina dialplan nu, aya perpustakaan kawas ,
AMI - soket TCP téks anu dianggo dina prinsip ngalanggan acara sareng ngalebetkeun paréntah téks, nyarupaan SMTP ti jero, tiasa ngalacak acara sareng ngatur telepon, aya perpustakaan. - anu pang populerna pikeun nyiptakeun sambungan sareng Asterisk
conto kaluaran AMI
Acara: Saluran anyar
Kaistimewaan: nelepon, sadayana
Saluran: PJSIP/VMS_pjsip-0000078b
Kaayaan Saluran: 4
ChannelStateDesc: ngirining
Nomer Telepon: 111222
CallerIDName: 111222
ConnectedLineNum:
ngaran garis disambungkeun:
Basa: en
kode akun:
Konteks: ti-pstn
Ngalegaan: s
Prioritas: 1
Unik: 1599589046.5244
Linkedid: 1599589046.5244
ARI mangrupakeun campuran duanana, sadayana via REST, WebSocket, dina format JSON - tapi kalawan perpustakaan seger jeung wrappers, teu pisan alus, offhand kapanggih (, ) nu janten dina ngembangkeun maranéhanana ngeunaan 3 taun ka tukang.
Conto kaluaran ARI nalika telepon dimimitian
{ "variabel": "CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "channel":{ "id »:»1599644315.5334″, «ngaran»:»PJSIP/VMSpjsip-000007b6″, "state": "Ring", "nélépon":{ "name":"111222″, "nomer":"111222″}, "connected":{ "name":"", "nomer" :"" }, "accountcode":"", "dialplan":{ "context":"ti-pstn", "exten":"s", "prioritas":2, "appname": "Stasis", "appdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "basa":"en" }, "asteriskid":"48:5b:aa:aa:aa:aa", "aplikasi":"hello-world" }
Kaseueuran atanapi kasulitan, kamungkinan atanapi imposibilitas damel sareng API khusus ditangtukeun ku tugas anu kedah direngsekeun. Tugas pikeun integrasi sareng CRM nyaéta kieu:
Lacak awal telepon, dimana éta ditransfer, tarik CallerID, DID, waktos ngamimitian sareng akhir, panginten data tina diréktori (pikeun milarian sambungan antara telepon sareng pangguna CRM)
Mimitian sareng mungkas ngarékam sauran, simpen dina format anu dipikahoyong, wartosan dina tungtung rékaman dimana filena aya.
Mimitian panggero dina acara éksternal (tina program), nelepon hiji nomer internal, hiji angka éksternal tur sambungkeun aranjeunna
Pilihan: ngahijikeun sareng CRM, grup dialer sareng FollowME pikeun nransfer telepon otomatis upami henteu aya tempat (nurutkeun CRM)
Sadaya pancén ieu bisa direngsekeun ngaliwatan AMI atanapi ARI, tapi ARI nyadiakeun loba informasi kirang, aya teu loba acara, loba variabel nu AMI masih mibanda (Contona, panggero makro, netepkeun variabel jero makro, kaasup rekaman panggero) teu dilacak. Ku alatan éta, pikeun tracking bener jeung akurat, hayu urang milih AMI pikeun ayeuna (tapi teu lengkep). Sajaba ti éta (ogé, dimana éta tanpa ieu, urang geus puguh) - dina karya aslina () ngagunakeun PAMI. *Teras anjeun kedah nyobian nyerat deui ka ARI, tapi sanés kanyataan yén éta bakal jalan.
Reinventing integrasi
Supados FreePBX urang tiasa ngalaporkeun ka AMI ku cara saderhana ngeunaan awal telepon, waktos tungtung, nomer, nami file anu dirékam, panggampangna pikeun ngitung durasi telepon nganggo trik anu sami sareng pangarang asli. - asupkeun variabel anjeun sarta parse kaluaran pikeun ayana maranéhna. PAMI nyarankeun ngalakukeun ieu ngan ukur nganggo fungsi saringan.
Ieu conto netepkeun variabel anjeun sorangan pikeun waktos ngamimitian telepon (s nyaéta nomer khusus dina rencana telepon anu dilakukeun sateuacan ngamimitian milarian DID)
[ext-did-custom]
exten => s,1,Set(CallStart=${STRFTIME(epoch,,%s)})Hiji conto acara AMI pikeun garis ieu
Acara: Saluran anyar
Kaistimewaan: nelepon, sadayana
Saluran: PJSIP/VMS_pjsip-0000078b
Kaayaan Saluran: 4
ChannelStateDesc: ngirining
Nomer Telepon: 111222
CallerIDName: 111222
ConnectedLineNum:
ngaran garis disambungkeun:
Basa: en
kode akun:
Konteks: ti-pstn
Ngalegaan: s
Prioritas: 1
Unik: 1599589046.5244
Linkedid: 1599589046.5244
Aplikasi: Set AppData:
CallStart=1599571046
Kusabab FreePBX nimpa file extention.conf sareng extention_additional.conf, urang bakal make file extension_adat.conf
Kode lengkep extention_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,ReturnFitur sareng bédana tina rencana telepon asli panulis artikel asli -
Dialplan dina format .conf, sakumaha FreePBX hayang eta (enya, eta bisa .ael, tapi teu kabeh versi na teu salawasna merenah)
Gantina ngolah tungtung ngaliwatan exten => h, pamrosésan diwanohkeun ngaliwatan hangup_handler, sabab dialplan FreePBX gawéna ngan jeung eta.
Maneuh skrip panggero string, ditambahkeun tanda petik jeung nomer telepon éksternal ExtNum
Processing dipindahkeun ka _konteks custom sarta ngidinan Anjeun pikeun teu noél atawa ngédit FreePBX configs - asup ngaliwatan [ext-did-custom], kaluar ngaliwatan [outbound-allroutes-custom]
Henteu aya hubunganana sareng nomer - filena universal sareng ngan ukur kedah dikonpigurasikeun pikeun jalur sareng tautan ka server
Pikeun ngamimitian, anjeun ogé kedah ngajalankeun skrip dina AMI ku login sareng kecap akses - pikeun ieu, FreePBX ogé gaduh file _custom.
file manager_custom.conf
;; это логин
[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,originateKadua file ieu kedah disimpen dina /etc/asterisk, teras baca deui konfigurasi (atanapi balikan deui tanda bintang)
# astrisk -rv
Connected to Asterisk 16.6.2 currently running on freepbx (pid = 31629)
#freepbx*CLI> dialplan reload
Dialplan reloaded.
#freepbx*CLI> exitAyeuna hayu urang ngalih ka PHP
Inisialisasi skrip sareng nyiptakeun jasa
Kusabab skéma pikeun gawé bareng Bitrix 24, layanan pikeun AMI, teu sagemblengna basajan tur transparan, éta kudu dibahas misah. Asterisk, nalika AMI diaktipkeun, kantun muka port sareng éta. Nalika klien ngagabung, éta nyuhunkeun otorisasina, teras klien ngalanggan kana acara anu diperyogikeun. Kajadian datangna dina téks polos, nu PAMI ngarobah kana objék terstruktur sarta nyadiakeun kamampuhan pikeun ngeset fungsi nyaring ngan pikeun acara dipikaresep, widang, angka, jsb.
Pas panggero asup, acara NewExten dipecat mimitian ti indungna [ti-pstn] konteks, lajeng sagala acara balik dina urutan garis dina konteks. Nalika inpormasi ditampi tina variabel CallMeCallerIDName sareng CallStart anu ditangtukeun dina _custom dialplan,
Fungsi requesting UserID pakait jeung nomer extension dimana nelepon datang. Kumaha upami éta grup dial-up? Patarosanna nyaéta politis, naha anjeun kedah ngadamel telepon ka sadayana sakaligus (nalika sadayana nelepon sakaligus) atanapi nyiptakeun nalika aranjeunna nelepon nalika nelepon? Paling klien boga strategi Fisrt Sadia, jadi teu aya masalah jeung ieu, ngan hiji panggero. Tapi masalahna kedah direngsekeun.
Fungsi pendaptaran panggero dina Bitrix24, nu mulih CallID, nu lajeng diperlukeun ngalaporkeun parameter panggero jeung tumbu ka rekaman. Merlukeun nomer extension atawa UserID

Saatos tungtung telepon, fungsi undeuran rékaman disebut, anu sakaligus ngalaporkeun status parantosan telepon (Sibuk, Teu aya jawaban, Sukses), sareng ogé ngaunduh tautan kana file mp3 sareng rékaman (upami aya).
Kusabab modul CallMeIn.php kudu ngajalankeun terus, file ngamimitian SystemD geus dijieun pikeun eta callme.service, nu kudu nempatkeun dina /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.targetinisialisasi sareng peluncuran naskah lumangsung ngaliwatan systemctl atanapi service
# systemctl enable callme
# systemctl start callmeLadenan bakal balikan deui upami diperyogikeun (upami kacilakaan). Ladenan tracking koropak teu merlukeun web server dipasang, ngan php diperlukeun (anu pasti dina server FeePBX). Tapi dina henteuna aksés ka rékaman panggero ngaliwatan server Wéb (ogé kalawan HTTPS), éta moal mungkin ngadangukeun rékaman panggero.
Ayeuna hayu urang ngobrol ngeunaan telepon kaluar. Skrip CallMeOut.php ngagaduhan dua fungsi:
Inisiasi telepon nalika pamundut katampi pikeun naskah php (kaasup ngagunakeun tombol "Telepon" dina Bitrix sorangan). Teu dianggo tanpa web server, pamundut ieu ditampi via HTTP POST, pamundut ngandung token a
Pesen ngeunaan telepon, parameter sareng rékamanna dina Bitrix. Dipecat ku Asterisk dina dialplan [sub-panggero-internal-réngsé] nalika sauran réngsé

Pangladén wéb ngan ukur diperyogikeun pikeun dua hal - ngaunduh file catetan Bitrix (via HTTPS) sareng nelepon skrip CallMeOut.php. Anjeun tiasa nganggo server FreePBX anu diwangun, file anu aya /var/www/html, anjeun tiasa masang server anu sanés atanapi netepkeun jalur anu béda.
Pangladén wéb
Hayu urang tinggalkeun setelan pangladén wéb pikeun diajar mandiri (, , ). Upami anjeun teu gaduh domain, anjeun tiasa nyobian FreeDomain( ), anu bakal masihan anjeun nami gratis pikeun IP bodas anjeun (ulah hilap neraskeun palabuhan 80, 443 ngalangkungan router upami alamat éksternal ngan ukur aya). Upami anjeun nembé nyiptakeun domain DNS, maka anjeun kedah ngantosan (tina 15 menit dugi ka 48 jam) dugi ka sadaya server dimuat. Numutkeun pangalaman gawé bareng panyadia domestik - ti 1 jam ka sapoé.
automation pamasangan
Pamasang parantos dikembangkeun dina github pikeun ngagampangkeun pamasangan. Tapi éta lancar dina kertas - bari urang masang eta sadayana ku cara manual, saprak sanggeus tinkering kalayan sagala ieu janten kristal jelas naon babaturan sareng saha, saha mana jeung kumaha carana debug eta. Teu acan aya pamasangan
Docker
Upami anjeun hoyong gancang nyobian solusi - aya pilihan sareng Docker - gancang ngadamel wadahna, pasihan palabuhan ka luar, lebetkeun file setélan sareng cobian (ieu mangrupikeun pilihan sareng wadah LetsEncrypt, upami anjeun parantos ngagaduhan sertipikat. , Anjeun ngan perlu alihan proxy sabalikna ka web server FreePBX (urang masihan eta port sejen nyaeta 88), LetsEncrypt di docker dumasar kana
Anjeun kedah ngajalankeun file dina folder proyék anu diunduh (sanggeus git clone), tapi mimiti asup kana konfigurasi asterisk (folder asterisk) sareng nyerat jalur kana rékaman sareng URL situs anjeun di dinya.
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 file ieu dijalankeun via
docker-compose up -d
Upami nginx henteu ngamimitian, maka aya anu lepat sareng konfigurasi dina folder nginx/ssl_docker.conf
integrasi séjén
Sareng naha henteu nempatkeun sababaraha CRM kana naskah dina waktos anu sami, panginten urang. Urang diajar sababaraha API CRM séjén, utamana bebas diwangun-di PBX - ShugarCRM na Vtiger, na enya! enya, prinsipna sarua. Tapi ieu mangrupikeun carita anu sanés, anu engké urang unggah kana github nyalira.
rujukan
Kodeu sorangan aya dina github -
Artikel sumber pikeun bibit
Bantahan: Sakur kasaruaan sareng kanyataan mangrupikeun fiktif sareng sanés kuring.
sumber: www.habr.com
