Fêmkirina FreePBX û yekkirina wê bi Bitrix24 û bêtir

Bitrix24 berhevokek mezin e ku CRM, karûbar, hesabkirin û gelek tiştên din ên ku rêvebir bi rastî jê hez dikin û karmendên IT-ê bi rastî jê hez nakin, bi hev re dike. Portal ji hêla gelek pargîdaniyên piçûk û navîn ve, di nav de klînîkên piçûk, hilberîner û tewra salonên bedewiyê jî tê bikar anîn. Fonksiyona sereke ya ku rêveber "hez dikin" yekbûna têlefonî û CRM-ê ye, gava ku her bangek tavilê di CRM-ê de tê tomar kirin, qertên xerîdar têne afirandin, dema ku tê de agahdariya li ser xerîdar tê xuyang kirin û hûn tavilê dikarin bibînin ka ew kî ye, ew çi ye. dikare bifroşe û çiqas deyndar e. Lê têlefoniya ji Bitrix24 û entegrasyona wê bi CRM re drav dike, carinan pir. Di gotarê de ez ê ezmûna yekbûna bi amûrên vekirî û PBX-ya IP-ya populer re vebêjim freepbx, û di heman demê de mantiqa xebata beşên cihêreng jî binirxînin

Ez di pargîdaniyek ku difroşe û mîheng dike, têlefoniya IP-yê yek dike, wekî dervekêşkar dixebitim. Gava ku ji min hat pirsîn gelo em dikarin tiştek ji vê û vê pargîdaniyê re pêşkêş bikin da ku Bitrix24 bi PBX-ên ku xerîdar hene, û hem jî bi PBX-yên virtual li ser pargîdaniyên cihêreng ên VDS-ê re yek bikin, ez çûm Google. Û bê guman wî girêdanek da min gotara di habr, li ku derê şirove, û github heye, û her tişt xuya dike ku kar dike. Lê dema ku hewl da ku vê çareseriyê bikar bîne, derket holê ku Bitrix24 êdî ne wekî berê ye, û pêdivî ye ku pir tişt were çêkirin. Wekî din, FreePBX ji bo we ne stêrkek bêkêmasî ye, li vir hûn hewce ne ku bifikirin ka meriv çawa di pelên mîhengê de karanîna hêsan û plansaziyek hişk bihevre bike.

Em mantiqa xebatê dixwînin

Ji ber vê yekê ji bo destpêkê, divê ew hemî çawa bixebite. Gava ku bangek ji derveyî PBX-ê tê wergirtin (bûyera SIP INVITE ji pêşkêşkerê), pêvajokirina plansaziya dialplanê (plana dial, dialplan) dest pê dike - qaîdeyên çi û bi çi rêzê bi bangê re bikin. Ji pakêta yekem, hûn dikarin gelek agahdarî bistînin, ku paşê dikarin di rêbazan de bikar bînin. Amûrek hêja ji bo xwendina hundurên SIP-ê analîzker e sngrep (pirtûk) ya ku bi hêsanî di nav belavokên populer de bi navgîniya apt install/yum install û mîna wan tê saz kirin, lê ew dikare ji çavkaniyê jî were çêkirin. Ka em li têketina banga li sngrep binêrin

Fêmkirina FreePBX û yekkirina wê bi Bitrix24 û bêtir

Di formek hêsan de, dialplan tenê bi pakêta yekem re mijûl dibe, carinan jî di dema axaftinê de, bang têne veguheztin, pêlên bişkojkê (DTMF), tiştên cihêreng ên balkêş ên wekî FollowMe, RingGroup, IVR û yên din.

Di hundurê Pakêta Vexwendinê de çi heye

Fêmkirina FreePBX û yekkirina wê bi Bitrix24 û bêtir

Bi rastî, pirê dialplanên hêsan bi her du zeviyên yekem re dixebitin, û tevahiya mantiq li dora DID û CallerID dizivire. DID - cihê ku em gazî dikin, CallerID - kî gazî dike.

Lê ji ber vê yekê, me pargîdaniyek heye û ne yek têlefon - ev tê vê wateyê ku PBX bi îhtîmalek mezin komên bangê (zengila hevdem / li pey hev a çend cîhazan) li ser hejmarên bajêr (Ring Group), IVR (Silav, we gazî kir ... Çapemenî yek ji bo ...), Makîneyên bersivdanê (Pêvek), Mercên Demjimêr, Pêşkêşkirina hejmarên din an jî hucreyek (FollowMe, Forward). Ev tê wê wateyê ku pir dijwar e ku meriv bi eşkereyî diyar bike ka dê bi rastî ji kê re têlefonek werbigire û dê bi kê re dema ku têlefonek tê de biaxive. Li vir mînakek destpêka bangek tîpîk di PBX-ya xerîdarên me de ye

Fêmkirina FreePBX û yekkirina wê bi Bitrix24 û bêtir

Piştî ku bang bi serfirazî têkeve PBX-ê, ew bi navgîniya dialplanê di "çarçoveyên" cûda de derbas dibe. Têkilî ji hêla Asterisk ve komek fermanên bi jimare ye, ku her yek ji wan parzûnek ji hêla hejmarê hatî veqetandin vedihewîne (ji bo bangek derveyî di qonaxa destpêkê de jê re exten tê gotin exten=DID). Fermanên di xeta dialplan de dikarin her tişt bin - fonksiyonên hundurîn (mînakî, gazî aboneyek navxweyî bikin - Dial(), têlefonê danî - Hangup()), operatorên şertî (IF, ELSE, ExecIF û yên wekî), veguhertina qaîdeyên din ên vê çarçoveyê (Goto, GotoIF), di forma bangek fonksiyonê de (Gosub, Macro) veguhezîne çarçoveyên din. Dîrektîfek cuda include имя_контекста, ku fermanên ji çarçoveyek din li dawiya rewşa heyî zêde dike. Fermanên ku bi navgîniyê ve girêdayî ne her dem têne bicîh kirin после fermanên rewşa heyî.

Tevahiya mantiqê FreePBX li ser tevlêkirina çarçoveyên cihêreng di nav hevûdu de bi navgîn û bangkirina bi navgînên Gosub, Macro û Handler ve hatî çêkirin. Di çarçoveya bangên FreePBX yên hatinî de binihêrin

Fêmkirina FreePBX û yekkirina wê bi Bitrix24 û bêtir

Bang ji serî ber bi jêr ve di nav hemî çarçoweyan re derbas dibe, di her çarçoveyek de dikare bang li çarçoveyên din ên mîna makro (Makro), fonksiyonan (Gosub) an tenê veguheztinê (Goto) hebe, ji ber vê yekê dara rastîn a ku jê re tê gotin tenê dikare di qeydan de bên şopandin.

Diagramek sazkirinê ya tîpîk ji bo PBX-ya tîpîk li jêr tê nîşandan. Dema ku bang dikin, DID di rêyên hatinê de tê gerîn, şertên demkî ji bo wê têne kontrol kirin, heke her tişt bi rêkûpêk be, menuya deng tê destpêkirin. Ji wê, bi tikandina bişkojka 1 an jî dema derbasbûnê, derkeve koma operatorên jimartinê. Piştî ku bang diqede, makroya hangupcall tê gotin, piştî ku di plansaziya dialplanê de tiştek nayê kirin, ji bilî guhezkarên taybetî (hangup handler).

Fêmkirina FreePBX û yekkirina wê bi Bitrix24 û bêtir

Di vê algorîtmaya bangê de divê em agahdarî li ser destpêka bangê ji CRM re peyda bikin, li ku derê dest bi tomarkirinê bikin, li ku derê tomarkirinê bi dawî bikin û bi agahdariya bangê re ji CRM re bişînin?

Entegrasyona bi sîstemên derve

Yekbûna PBX û CRM çi ye? Ev mîheng û bername ne ku dane û bûyeran di navbera van her du platforman de vediguherînin û ji hev re dişînin. Awayê herî gelemperî ji bo pergalên serbixwe ji bo danûstendinê bi API-yê ve ye, û riya herî populer a gihîştina API-yê HTTP REST e. Lê ne ji bo stêrkê.

Inside Asterisk ev e:

  • AGI - banga hevdem a bernameyên / pêkhateyên derveyî, ku bi giranî di plansaziyê de têne bikar anîn, pirtûkxaneyên mîna phpagi, PAGI

  • AMI - soketek TCP-ê ya nivîsê ku li ser prensîba endambûna bûyeran û têketina fermanên nivîsê dixebite, ji hundurê SMTP-ê dişibihe, dikare bûyeran bişopîne û bangan birêve bibe, pirtûkxaneyek heye PAMI - ya herî populer ji bo afirandina têkiliyek bi Asterisk re

Mînaka derketina AMI

Bûyer: Kanala nû
Taybetmendî: bang, hemî
Kanal: PJSIP/VMS_pjsip-0000078b
Rewşa kanalê: 4
ChannelStateDesc: Ring
Hejmara Bangdêr: 111222
Navê Navdêr: 111222
ConnectedLineNum:
Navê rêza girêdayî:
Ziman: en
koda hesabê:
Têkilî: ji-pstn
Berfirehkirin: s
Pêşîn: 1
Yekane: 1599589046.5244
Girêdayî: 1599589046.5244

  • ARI tevliheviyek ji herduyan e, hemî bi riya REST, WebSocket, di formata JSON de - lê bi pirtûkxane û pêçanên nû, ne pir baş, ne diyar e (phparia, phpari) ya ku nêzî 3 sal berê di pêşveçûna wan de bû.

Mînaka derketina ARI dema ku bangek tê destpêkirin

{ "guherbar":"CallMeCallerIDName", "nirx":"111222", "cure":"ChannelVarset", "demjimêr":"2020-09-09T09:38:36.269+0000", "kanal":{ "id »:»1599644315.5334″, «nav»:»PJSIP/VMSpjsip-000007b6″, "dewlet":"Zeng", "bangkar":{ "nav":"111222″, "hejmar":"111222″ }, "girêdayî":{ "nav":"", "hejmar" :"" }, "code hesab":"", "dialplan":{ "context":"from-pstn", "exten":"s", "priority":2, "appnav":"Stasis", "appdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "ziman":"ku" }, "stêrkid":"48:5b:aa:aa:aa:aa", "sepan":"silav-cîhan"}

Rehetî an nerehetî, îmkan an ne gengaziya xebata bi API-yek taybetî re ji hêla karên ku divê bêne çareser kirin têne destnîşankirin. Karên ji bo entegrasyonê bi CRM re wiha ne:

  • Destpêka bangê, cihê ku lê hatî veguheztin, bişopînin, CallerID, DID, demên destpêk û bidawîbûnê, belkî daneya ji pelrêçê derxînin (ji bo lêgerîna têkiliyek di navbera têlefon û bikarhênerê CRM de)

  • Tomarkirina bangê dest pê bikin û biqedînin, wê di forma xwestinê de hilînin, di dawiya tomarê de agahdar bikin ku pel li ku ye

  • Li ser bûyerek derveyî (ji bernameyê) bangek bidin destpêkirin, jimareyek navxweyî, jimareyek derveyî bang bikin û wan girêdin

  • Bixwe: bi CRM, komên dialer û FollowME re ji bo veguheztina otomatîkî ya bangan di nebûna cîh de (li gorî CRM) re yek bikin

Hemî van peywiran dikarin bi AMI an ARI ve werin çareser kirin, lê ARI agahdariya pir hindiktir peyda dike, ne pir bûyer hene, gelek guhêrbarên ku AMI hîn jî hene (mînak, bangên makro, danîna guhêrbarên di hundurê makroyan de, tevî tomarkirina bangê) nayên şopandin. Ji ber vê yekê, ji bo şopandina rast û rast, em ji bo niha AMI hilbijêrin (lê ne bi tevahî). Wekî din (baş e, dê li ku be bêyî vê yekê, em mirovên tembel in) - di xebata orîjînal de (gotara di habr) PAMI bikar bînin. *Dûv re hûn hewce ne ku hewl bidin ku ARI ji nû ve binivîsin, lê ne rastiya ku ew ê bixebite.

Ji nû ve peydakirina entegrasyonê

Ji bo ku FreePBX-ya me bikaribe bi awayên hêsan di derbarê destpêka bangê, dema dawiyê, hejmar, navên pelên tomarkirî de ji AMI re rapor bike, herî hêsan e ku meriv dirêjahiya bangê bi karanîna heman hîlekarê wekî nivîskarên orîjînal hesab bike. - guhêrbarên xwe binivîsin û derketinê ji bo hebûna wan parsek bikin. PAMI pêşniyar dike ku vê yekê bi hêsanî bi fonksiyonek fîlterê bikin.

Li vir mînakek danîna guhêrbara xwe ya ji bo dema destpêkirina bangê heye (s jimareyek taybetî ye di plansaziyê de ku BERÊ destpêkirina lêgerîna DID-ê tê kirin)

[ext-did-custom]

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

Bûyerek mînakek AMI ji bo vê xetê

Bûyer: Kanala nû

Taybetmendî: bang, hemî

Kanal: PJSIP/VMS_pjsip-0000078b

Rewşa kanalê: 4

ChannelStateDesc: Ring

Hejmara Bangdêr: 111222

Navê Navdêr: 111222

ConnectedLineNum:

Navê rêza girêdayî:

Ziman: en

koda hesabê:

Têkilî: ji-pstn

Berfirehkirin: s

Pêşîn: 1

Yekane: 1599589046.5244

Girêdayî: 1599589046.5244

Serlêdan: Daneyên Appê saz bikin:

CallStart=1599571046

Ji ber ku FreePBX pelên extension.conf û extendion_ dinivîseAdditional.conf, em ê pelê bikar bînin extension_hûnbunî.conf

Koda tevahî ya 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

Taybetmendî û cûdahiya ji dialplana orîjînal a nivîskarên gotara orîjînal -

  • Dialplan di forma .conf de, wekî ku FreePBX dixwaze (erê, ew dikare .ael bike, lê ne hemî guhertoyên û ew her gav ne rehet e)

  • Li şûna ku dawiya bi exten=>h were xebitandin, pêvajo bi navgîniya hangup_handler ve hate destnîşan kirin, ji ber ku dialplana FreePBX tenê bi wê re xebitî.

  • Rêza banga skrîptê rast kir, binavên lêzêdekirî û jimareya banga derveyî ExtNum

  • Pêvajokirin ber bi şertên _custom ve tê veguheztin û destûrê dide te ku hûn dest nedin veavakirinên FreePBX an biguherînin - bi rêya [ext-kir-adet], bi rêya [outbound-allroutes-custom]

  • Girêdana hejmaran tune - pel gerdûnî ye û tenê pêdivî ye ku ji bo rê û girêdana serverê were mîheng kirin

Ji bo ku hûn dest pê bikin, hûn jî hewce ne ku li AMI-yê bi têketin û şîfreyê nivîsan bimeşînin - ji bo vê yekê, FreePBX jî pelek _custom heye.

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,originate

Divê van her du pelan di /etc/asterisk de bêne danîn, dûv re veavakirinan ji nû ve bixwînin (an stêrkê ji nû ve bidin destpêkirin)

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

Naha em werin ser PHP-ê

Destpêkirina nivîsan û afirandina karûbarek

Ji ber ku nexşeya xebata bi Bitrix 24, karûbarek ji bo AMI, bi tevahî ne hêsan û zelal e, divê ew ji hev cuda were nîqaş kirin. Asterisk, dema ku AMI tê çalak kirin, tenê portê vedike û ew e. Dema ku xerîdar tevlî dibe, ew destûrnameyê daxwaz dike, wê hingê xerîdar beşdarî bûyerên pêwîst dibe. Bûyer di nivîsa sade de têne, ku PAMI diguhezîne tiştên birêkûpêk û jêhatîbûnê peyda dike ku fonksiyona fîlterkirinê tenê ji bo bûyerên berjewendî, zevî, hejmar, hwd.

Hema ku bang tê, bûyera NewExten ji çarçoweya dêûbav [ji-pstn] dest pê dike, paşê hemî bûyer bi rêza rêzikên di çarçoveyan de diçin. Dema ku agahdarî ji guhêrbarên CallMeCallerIDName û CallStart ku di plansaziya _custom de hatine destnîşan kirin têne wergirtin,

  1. Fonksiyona daxwaza Nasnameya Bikarhêner a ku li gorî jimareya dirêjkirinê ya ku lê têlefon tê de têkildar e. Ger ew grûpek dial-up be? Pirs siyasî ye, gelo hûn hewce ne ku hûn bi yekcarî bangek ji her kesî re çêbikin (gava ku her kes bi yekcarî bang dike) an dema ku bi dorê bang dikin wekî ku ew bang dikin biafirînin? Pir xerîdar xwedan stratejiya Fisrt Available ne, ji ber vê yekê pirsgirêk tune, tenê yek bang dike. Lê divê pirsgirêk bê çareserkirin.

  2. Fonksiyona qeydkirina bangê di Bitrix24 de, ku CallID vedigerîne, ku dûv re pêdivî ye ku pîvanên bangê û girêdanek tomarê rapor bike. Jimara dirêjkirinê an ID bikarhêner hewce dike

Fêmkirina FreePBX û yekkirina wê bi Bitrix24 û bêtir

Piştî bidawîbûna bangê, fonksiyona dakêşana tomarê tê gazî kirin, ku di heman demê de rewşa bidawîbûna bangê radigihîne (Xebitî, Bê bersiv, Serkeftin), û di heman demê de girêdanek pelê mp3 bi tomarê (heke hebe) dakêşîne.

Ji ber ku pêdivî ye ku modula CallMeIn.php bi domdarî bixebite, pelê destpêkê ya SystemD ji bo wê hate afirandin callme.service, ku divê li /etc/systemd/system/callme.service were danîn

[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

destpêkirin û destpêkirina skrîptê bi systemctl an karûbarê pêk tê

# systemctl enable callme
# systemctl start callme

Karûbar dê li gorî hewcedariyê ji nû ve dest pê bike (di bûyera qezayê de). Karûbarê şopandina inboxê hewce nake ku serverek malperê were saz kirin, tenê php hewce ye (ku bê guman li ser servera FeePBX ye). Lê di nebûna gihîştina tomarên bangê de bi riya servera Webê (di heman demê de bi https-ê re jî), dê guh nede tomarên bangê.

Naha em li ser bangên derketinê biaxivin. Skrîpta CallMeOut.php du fonksiyon hene:

  • Dema ku daxwazek ji bo skrîptek php-ê tê wergirtin destpêkirina bangekê (tevî karanîna bişkoja "Gal" di Bitrix bixwe de). Ew bêyî serverek webê naxebite, daxwaz bi HTTP POST tê wergirtin, daxwazî ​​nîşanek heye

  • Di Bitrix de di derbarê bangê, pîvan û tomarên wê de peyam. Dema ku bangek diqede ji hêla Asterisk ve di plansaziya dengdanê ya [bin-banga-navxweyî-dawî]

Fêmkirina FreePBX û yekkirina wê bi Bitrix24 û bêtir

Pêşkêşkara malperê tenê ji bo du tiştan hewce ye - dakêşana pelên tomarên Bitrix (bi rêya HTTPS) û gazîkirina skrîpta CallMeOut.php. Hûn dikarin servera FreePBX ya çêkirî bikar bînin, pelên ku /var/www/html ne, hûn dikarin serverek din saz bikin an rêyek cûda diyar bikin.

Pêşkêşkara malperê

Ka em sazkirina servera malperê ji bo lêkolîna serbixwe bihêlin (tyts, tyts, tyts). Ger domainek we tune, hûn dikarin FreeDomain biceribînin( https://www.freenom.com/ru/index.html), ya ku dê ji bo IP-ya weya spî navek belaş bide (heke navnîşana derveyî tenê li ser be, ji bîr nekin ku portên 80, 443 bi riya routerê bişînin). Ger we tenê domainek DNS çêkir, wê hingê pêdivî ye ku hûn li bendê bin (ji 15 hûrdem heya 48 demjimêran) heya ku hemî pêşkêşker werin barkirin. Li gorî ezmûna xebata bi pêşkêşkerên navxweyî - ji 1 saetê heya rojekê.

Otomasyona sazkirinê

Sazkerek li ser github hatî pêşve xistin da ku sazkirinê hê hêsantir bike. Lê ew li ser kaxezê xweş bû - dema ku em hemî bi destan saz dikin, ji ber ku piştî guheztina van hemîyan zelal bû ka heval bi kê re çi ye, kî diçe ku derê û çawa wê jêbirin. Hîn sazker tune

Docker

Ger hûn dixwazin zû çareseriyê biceribînin - vebijarkek bi Docker re heye - zû konteynirek biafirînin, porteyan bidin derve, pelên mîhengan bişkînin û biceribînin (ev vebijarka bi konteynera LetsEncrypt re ye, heke we berê sertîfîkayek heye. , hûn tenê hewce ne ku proxy berevajî beralî servera webê ya FreePBX bikin (me portek din 88 e), LetsEncrypt di docker de li ser bingeha vê gotarê

Pêdivî ye ku hûn pelê di peldanka projeya dakêşandî de bimeşînin (piştî git clone), lê pêşî têkevin nav mîhengên stêrk (peldanka stêrk) û rêyên tomar û URL-ya malpera xwe li wir binivîsin.

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:

Ev pelê docker-compose.yaml bi rê ve tê xebitandin

docker-compose up -d

Ger nginx dest pê neke, wê hingê tiştek di veavakirina peldanka nginx/ssl_docker.conf de xelet e.

Yekbûnên din

Û çima em di heman demê de hin CRM nexin nav senaryoyan, em difikirin. Me çend API-yên din ên CRM, nemaze PBX-ya çêkirî ya belaş - ShugarCRM û Vtiger lêkolîn kir, û erê! erê, prensîb yek e. Lê ev çîrokek din e, ku em ê paşê li github-ê ji hev veqetînin.

references

Daxuyanî: Her hevahengiya rastiyê xeyalî ye û ne ez bûm.

Source: www.habr.com

Add a comment