FreePBX-i başa düşmək və onu Bitrix24 və daha çoxu ilə inteqrasiya etmək

Bitrix24 CRM, iş axını, mühasibat uçotu və menecerlərin həqiqətən bəyəndiyi və İT işçilərinin bəyənmədiyi bir çox başqa şeyləri birləşdirən nəhəng bir kombindir. Portaldan bir çox kiçik və orta şirkətlər, o cümlədən kiçik klinikalar, istehsalçılar və hətta gözəllik salonları istifadə edir. Menecerlərin "sevdiyi" əsas funksiya telefoniya və CRM-in inteqrasiyasıdır, istənilən zəng dərhal CRM-də qeydə alındıqda, müştəri kartları yaradılır, daxil olanda müştəri haqqında məlumat göstərilir və siz onun kim olduğunu, nə olduğunu dərhal görə bilərsiniz. sata bilər və nə qədər borcu var. Ancaq Bitrix24-dən telefoniya və onun CRM ilə inteqrasiyası pula, bəzən çox baha başa gəlir. Məqalədə sizə açıq alətlər və populyar IP PBX ilə inteqrasiya təcrübəsini izah edəcəyəm PulsuzPBX, həm də müxtəlif hissələrin işinin məntiqini nəzərdən keçirin

İP telefoniya satan və konfiqurasiya edən, inteqrasiya edən şirkətdə autsorser kimi işləyirəm. Məndən bu və bu şirkətə Bitrix24-ü müştərilərin sahib olduğu ATS-lərə, eləcə də müxtəlif VDS şirkətlərində virtual ATS-lərə inteqrasiya etmək üçün bir şey təklif edə biləcəyimizi soruşduqda, Google-a getdim. Və əlbəttə ki, mənə bir link verdi habr-da məqalə, burada təsvir və github var və hər şey işləyir. Lakin bu həlli istifadə etməyə çalışarkən məlum oldu ki, Bitrix24 artıq əvvəlki kimi deyil və çox şey yenidən düzəltmək lazımdır. Bundan əlavə, FreePBX sizin üçün çılpaq ulduz deyil, burada istifadə rahatlığı və konfiqurasiya fayllarında sərt dialplanı necə birləşdirəcəyinizi düşünməlisiniz.

Biz işin məntiqini öyrənirik

Beləliklə, yeni başlayanlar üçün hamısı necə işləməlidir. PBX-dən kənardan zəng qəbul edildikdə (provayderdən SIP INVITE hadisəsi) dialplanın (sifariş planı, dialplan) işlənməsi başlayır - zənglə nə və hansı qaydada edilməsi qaydaları. Birinci paketdən siz çoxlu məlumat əldə edə bilərsiniz, sonradan qaydalarda istifadə oluna bilər. SIP-in daxili hissələrini öyrənmək üçün əla vasitə analizatordur sngrep (əlaqə) apt install/yum install və sair vasitəsilə məşhur paylamalarda quraşdırılır, lakin mənbədən də tikilə bilər. Gəlin sngrep-də zəng qeydinə baxaq

FreePBX-i başa düşmək və onu Bitrix24 və daha çoxu ilə inteqrasiya etmək

Sadələşdirilmiş formada dialplan yalnız birinci paketlə məşğul olur, bəzən söhbət zamanı da zənglər ötürülür, düymələrə basılır (DTMF), FollowMe, RingGroup, IVR və başqaları kimi müxtəlif maraqlı şeylər.

Dəvət Paketinin içərisində nə var

FreePBX-i başa düşmək və onu Bitrix24 və daha çoxu ilə inteqrasiya etmək

Əslində, ən sadə dialplanlar ilk iki sahə ilə işləyir və bütün məntiq DID və CallerID ətrafında fırlanır. DID - zəng etdiyimiz yer, CallerID - kim zəng edir.

Ancaq bütün bunlardan sonra bir şirkətimiz var və bir telefonumuz yoxdur - bu o deməkdir ki, ATS-də çox güman ki, şəhər nömrələrində (Ring Group), IVR (Salam, zəng etdiniz) zəng qrupları (bir neçə cihazın eyni vaxtda / ardıcıl zəngi) var ... Mətbuat biri ... üçün), Cavab verən maşınlar ( İfadələr), Vaxt Şərtləri, Digər nömrələrə və ya hüceyrəyə yönləndirmə (FollowMe, Forward). Bu o deməkdir ki, zəngi həqiqətən kimin qəbul edəcəyini və zəng gələndə kiminlə söhbət edəcəyini birmənalı şəkildə müəyyən etmək çox çətindir. Müştərilərimizin ATS-lərində tipik zənglərin başlamasına dair bir nümunə

FreePBX-i başa düşmək və onu Bitrix24 və daha çoxu ilə inteqrasiya etmək

Zəng ATS-ə uğurla daxil olduqdan sonra müxtəlif “kontekstlərdə” dialplandan keçir. Ulduz nöqteyi-nəzərindən kontekst nömrələnmiş əmrlər toplusudur, onların hər birində yığılmış nömrəyə görə filtr var (buna exten deyilir, ilkin mərhələdə xarici zəng üçün exten=DID). Dialplan xəttindəki əmrlər istənilən ola bilər - daxili funksiyalar (məsələn, daxili abunəçiyə zəng edin - Dial(), telefonu yerə qoyun - Hangup()), şərti operatorlar (IF, ELSE, ExecIF və buna bənzər), bu kontekstin digər qaydalarına keçid (Goto, GotoIF), funksiya çağırışı (Gosub, Macro) şəklində digər kontekstlərə keçid. Ayrı bir direktiv include имя_контекста, cari kontekstin sonuna başqa kontekstdən əmrlər əlavə edən. Daxiletmə vasitəsilə daxil edilən əmrlər həmişə yerinə yetirilir sonra cari kontekstin əmrləri.

FreePBX-in bütün məntiqi Gosub, Macro və Handler işləyiciləri vasitəsilə daxil və zəng vasitəsilə müxtəlif kontekstlərin bir-birinə daxil edilməsi üzərində qurulub. Daxil olan FreePBX zənglərinin kontekstini nəzərdən keçirin

FreePBX-i başa düşmək və onu Bitrix24 və daha çoxu ilə inteqrasiya etmək

Zəng növbə ilə yuxarıdan aşağıya bütün kontekstlərdən keçir, hər bir kontekstdə makrolar (Makro), funksiyalar (Gosub) və ya sadəcə keçidlər (Goto) kimi digər kontekstlərə zənglər ola bilər, ona görə də deyilənlərin əsl ağacı yalnız jurnallarda izlənilməlidir.

Tipik bir ATS üçün tipik quraşdırma diaqramı aşağıda göstərilmişdir. Zəng edərkən daxil olan marşrutlarda DID axtarılır, onun üçün müvəqqəti şərtlər yoxlanılır, hər şey qaydasındadırsa, səs menyusu işə salınır. Ondan, 1 düyməsini və ya vaxt aşımını basaraq, yığım operatorları qrupuna çıxın. Zəng başa çatdıqdan sonra hangupcall makrosu çağırılır, bundan sonra dialplanda xüsusi işləyicilərdən (hangup handler) başqa heç nə etmək mümkün deyil.

FreePBX-i başa düşmək və onu Bitrix24 və daha çoxu ilə inteqrasiya etmək

Bu zəng alqoritmində biz CRM-ə zəngin başlanğıcı haqqında məlumat verməliyik, qeydi haradan başlamaq lazımdır, qeydi harada bitirmək və onu CRM-ə zəng haqqında məlumatla birlikdə göndərmək lazımdır?

Xarici sistemlərlə inteqrasiya

PBX və CRM inteqrasiyası nədir? Bunlar bu iki platforma arasında məlumat və hadisələri çevirən və onları bir-birinə göndərən parametrlər və proqramlardır. Müstəqil sistemlərin ünsiyyət qurmasının ən ümumi yolu API-lərdir və API-lərə daxil olmağın ən populyar yolu HTTP REST-dir. Ancaq ulduz üçün deyil.

Ulduz işarəsinin içərisində:

  • AGI - xarici proqramların/komponentlərin sinxron çağırışı, əsasən dialplanda istifadə olunur, kimi kitabxanalar var. phpagi, PAGI

  • AMI - hadisələrə abunə olmaq və mətn əmrlərini daxil etmək prinsipi ilə işləyən mətn TCP yuvası, daxildən SMTP-yə bənzəyir, hadisələri izləyə və zəngləri idarə edə bilər, kitabxana var PAMI - Asterisk ilə əlaqə yaratmaq üçün ən populyar

AMI çıxış nümunəsi

Hadisə: Yeni kanal
Üstünlük: zəng edin, hamısı
Kanal: PJSIP/VMS_pjsip-0000078b
Kanal vəziyyəti: 4
ChannelStateDesc: Zəng
Zəng edənin nömrəsi: 111222
Zəng edənin adı: 111222
ConnectedLineNum:
bağlı xətt adı:
Dil: az
hesab kodu:
Kontekst: from-pstn
Uzatmaq: s
Prioritet: 1
Unikal: 1599589046.5244
Linkedid: 1599589046.5244

  • ARI hər ikisinin qarışığıdır, hamısı REST, WebSocket vasitəsilə, JSON formatında - lakin təzə kitabxanalar və sarğılarla, çox yaxşı deyil, təsadüfən tapıldı (phparia, phpari) onların inkişafı təxminən 3 il əvvəl olmuşdur.

Zəng başlandıqda ARI çıxışının nümunəsi

{ "dəyişən":"CallMeCallerIDName", "dəyər":"111222", "növ":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "kanal":{ "id" »:»1599644315.5334″, «ad»:»PJSIP/VMSpjsip-000007b6″, "state":"Zəng", "zəng edən":{ "ad":"111222", "nömrə":"111222" }, "qoşulub":{ "ad":"", "nömrə" :"" }, "hesab kodu":"", "dialplan":{ "kontekst":"from-pstn", "exten":"s", "priority":2, "tətbiqad":"Stasis", "tətbiqdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"az" }, "asterisk"id":"48:5b:aa:aa:aa:aa", "application":"salam-dünya" }

Rahatlıq və ya narahatlıq, müəyyən bir API ilə işləmək imkanı və ya qeyri-mümkünlüyü həll edilməli olan vəzifələrlə müəyyən edilir. CRM ilə inteqrasiya üçün tapşırıqlar aşağıdakılardır:

  • Zəngin başlanğıcını, harada köçürüldüyünü izləyin, Zəng edənin nömrəsini, DID-i, başlanğıc və bitmə vaxtını, bəlkə də kataloqdan məlumatları çıxarın (telefon və CRM istifadəçisi arasında əlaqə axtarmaq üçün)

  • Zəngin yazılmasına başlamaq və bitirmək, onu istədiyiniz formatda saxlamaq, qeydin sonunda faylın harada yerləşdiyini bildirmək

  • Xarici hadisəyə (proqramdan) zəng etməyə başlayın, daxili nömrəyə, xarici nömrəyə zəng edin və onları birləşdirin

  • İstəyə görə: yer olmadıqda zənglərin avtomatik ötürülməsi üçün CRM, yığım qrupları və FollowME ilə inteqrasiya edin (CRM-ə görə)

Bütün bu tapşırıqlar AMI və ya ARI vasitəsilə həll edilə bilər, lakin ARI daha az məlumat verir, çoxlu hadisələr yoxdur, AMI-də hələ də mövcud olan bir çox dəyişənlər (məsələn, makro çağırışlar, makroların daxilində dəyişənlərin qurulması, o cümlədən zəng qeydi) izlənilmir. Ona görə də düzgün və dəqiq izləmə üçün indilik AMI-ni seçək (amma tam yox). Bundan əlavə (yaxşı, bunsuz harda olardı, biz tənbəl insanlarıq) - orijinal əsərdə (habr-da məqalə) PAMI istifadə edin. *Sonra ARI-yə yenidən yazmağa çalışmaq lazımdır, amma bunun işləyəcəyi faktı yox.

İnteqrasiyanı yenidən kəşf etmək

FreePBX-mizin AMI-yə zəngin başlanğıcı, bitmə vaxtı, nömrələri, qeydə alınmış faylların adları haqqında sadə yollarla məlumat verə bilməsi üçün orijinal müəlliflərlə eyni hiylədən istifadə edərək zəngin müddətini hesablamaq asandır. - dəyişənlərinizi daxil edin və onların mövcudluğu üçün çıxışı təhlil edin. PAMI bunu sadəcə filtr funksiyası vasitəsilə etməyi təklif edir.

Zəngin başlama vaxtı üçün öz dəyişəninizi təyin etməyin bir nümunəsidir (s dialplanda DID axtarışına başlamazdan ƏVVƏL yerinə yetirilən xüsusi nömrədir)

[ext-did-custom]

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

Bu xətt üçün nümunə AMI hadisəsi

Hadisə: Yeni kanal

Üstünlük: zəng edin, hamısı

Kanal: PJSIP/VMS_pjsip-0000078b

Kanal vəziyyəti: 4

ChannelStateDesc: Zəng

Zəng edənin nömrəsi: 111222

Zəng edənin adı: 111222

ConnectedLineNum:

bağlı xətt adı:

Dil: az

hesab kodu:

Kontekst: from-pstn

Uzatmaq: s

Prioritet: 1

Unikal: 1599589046.5244

Linkedid: 1599589046.5244

Tətbiq: AppData qurmaq:

CallStart=1599571046

Çünki FreePBX extention.conf və extention_ fayllarının üzərinə yazırƏlavə.conf, biz fayldan istifadə edəcəyik uzadılma_adət.konf

extention_custom.conf tam kodu

[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

Orijinal məqalənin müəlliflərinin orijinal dialplanından xüsusiyyət və fərq -

  • FreePBX-in istədiyi kimi .conf formatında yığın (bəli, .ael ola bilər, lakin bütün versiyalarda deyil və həmişə rahat deyil)

  • Sonu exten=>h vasitəsilə emal etmək əvəzinə, emal hangup_handler vasitəsilə təqdim edildi, çünki FreePBX dialplanı yalnız onunla işləyirdi.

  • Sabit skript zəng sətri, əlavə sitatlar və xarici zəng nömrəsi ExtNum

  • Emal _xüsusi kontekstlərə köçürülür və FreePBX konfiqurasiyalarına toxunmamağa və ya redaktə etməyə imkan verir - daxil olan [ext-ed-customer], gedən [ vasitəsiləoutbound-allroutes-custom]

  • Rəqəmlərlə əlaqə yoxdur - fayl universaldır və yalnız serverə yol və keçid üçün konfiqurasiya edilməlidir

Başlamaq üçün siz həmçinin AMI-də skriptləri giriş və şifrə ilə işlətməlisiniz - bunun üçün FreePBX də _custom faylına malikdir.

manager_custom.conf faylı

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

Bu faylların hər ikisi /etc/asterisk-ə yerləşdirilməlidir, sonra konfiqurasiyaları yenidən oxuyun (və ya ulduzu yenidən başladın)

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

İndi PHP-yə keçək

Skriptlərin işə salınması və xidmət yaradılması

AMI üçün xidmət olan Bitrix 24 ilə işləmə sxemi tamamilə sadə və şəffaf olmadığı üçün ayrıca müzakirə edilməlidir. Ulduz, AMI aktivləşdirildikdə, sadəcə portu açır və bu qədərdir. Müştəri qoşulduqda avtorizasiya tələb edir, sonra müştəri lazımi tədbirlərə abunə olur. Hadisələr PAMI-nin strukturlaşdırılmış obyektlərə çevirdiyi və yalnız maraq doğuran hadisələr, sahələr, nömrələr və s. üçün filtrləmə funksiyasını təyin etmək imkanı verən düz mətnlə gəlir.

Zəng daxil olan kimi, NewExten hadisəsi əsas [from-pstn] kontekstindən başlayaraq işə salınır, sonra bütün hadisələr kontekstlərdəki sətirlərin ardıcıllığı ilə gedir. _xüsusi yığım planında göstərilən CallMeCallerIDName və CallStart dəyişənlərindən məlumat alındıqda,

  1. Zəngin gəldiyi əlavə nömrəyə uyğun olan İstifadəçi ID-sini tələb etmək funksiyası. Əgər bu dial-up qrupudursa? Sual siyasidir, hamıya bir anda (hamı birdən zəng edəndə) zəng yaratmaq lazımdır, yoxsa növbə ilə zəng edəndə onların zəng etdiyi kimi yaratmaq lazımdır? Əksər müştərilərdə Fisrt Available strategiyası var, ona görə də bununla bağlı heç bir problem yoxdur, yalnız bir zəng edir. Amma məsələni həll etmək lazımdır.

  2. Bitrix24-də zəng qeydiyyatı funksiyası, sonra zəng parametrlərini və qeydə keçidi bildirmək üçün tələb olunan CallID-i qaytarır. Artırma nömrəsi və ya UserID tələb olunur

FreePBX-i başa düşmək və onu Bitrix24 və daha çoxu ilə inteqrasiya etmək

Zəng başa çatdıqdan sonra qeyd yükləmə funksiyası çağırılır ki, bu da eyni vaxtda zəngin tamamlanma statusu haqqında məlumat verir (Məşğul, Cavab yoxdur, Müvəffəqiyyət), həmçinin qeydlə (əgər varsa) mp3 faylına keçid yükləyir.

CallMeIn.php modulunun davamlı işləməsi lazım olduğundan onun üçün SystemD başlanğıc faylı yaradılmışdır callme.service, /etc/systemd/system/callme.service-ə qoyulmalıdır

[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

skriptin işə salınması və işə salınması systemctl və ya xidmət vasitəsilə baş verir

# systemctl enable callme
# systemctl start callme

Xidmət lazım olduqda özünü yenidən işə salacaq (qəza halında). Gələnlər qutusunu izləmə xidməti veb serverin quraşdırılmasını tələb etmir, yalnız php lazımdır (bu mütləq FeePBX serverindədir). Lakin Web server vasitəsilə (həmçinin https ilə) zəng qeydlərinə giriş olmadıqda, zəng qeydlərinə qulaq asmaq mümkün olmayacaq.

İndi gedən zənglər haqqında danışaq. CallMeOut.php skriptinin iki funksiyası var:

  • php skripti üçün sorğu qəbul edildikdə zəngin başlanması (o cümlədən Bitrix-in özündə "Zəng et" düyməsinin istifadəsi). Veb-serversiz işləmir, sorğu HTTP POST vasitəsilə qəbul edilir, sorğuda token var

  • Zəng, onun parametrləri və Bitrix-də qeydlər haqqında mesaj. Zəng sona çatdıqda [alt zəng-daxili sonlu] dial planında Ulduz işarəsi ilə işə salındı

FreePBX-i başa düşmək və onu Bitrix24 və daha çoxu ilə inteqrasiya etmək

Veb server yalnız iki şey üçün lazımdır - Bitrix qeyd fayllarını yükləmək (HTTPS vasitəsilə) və CallMeOut.php skriptini çağırmaq. Siz daxili FreePBX serverindən istifadə edə bilərsiniz, faylları /var/www/html, başqa server quraşdıra və ya başqa bir yol göstərə bilərsiniz.

Veb server

Gəlin veb-server quraşdırmasını müstəqil öyrənməyə buraxaq (tyts, tyts, tyts). Əgər domeniniz yoxdursa, FreeDomain-i sınaya bilərsiniz( https://www.freenom.com/ru/index.html), bu sizə ağ IP-niz üçün pulsuz ad verəcək (xarici ünvan yalnız onun üzərindədirsə, marşrutlaşdırıcı vasitəsilə 80, 443 portlarını yönləndirməyi unutmayın). Əgər yenicə DNS domeni yaratmısınızsa, bütün serverlər yüklənənə qədər (15 dəqiqədən 48 saata qədər) gözləməlisiniz. Yerli provayderlərlə iş təcrübəsinə görə - 1 saatdan günə qədər.

Quraşdırma avtomatlaşdırılması

Quraşdırmanı daha da asanlaşdırmaq üçün github-da quraşdırıcı hazırlanmışdır. Ancaq kağız üzərində hamar idi - biz hamısını əl ilə quraşdırarkən, bütün bunları seçdikdən sonra kiminlə dostluq etdiyi, kimin hara getdiyi və onu necə düzəldəcəyi aydın oldu. Hələ quraşdırıcı yoxdur

yükvuran

Əgər həlli tez sınamaq istəyirsinizsə - Docker ilə bir seçim var - tez bir konteyner yaradın, ona portlar verin, parametr fayllarını sürüşdürün və cəhd edin (artıq sertifikatınız varsa, LetsEncrypt konteynerində bu seçimdir. , sadəcə olaraq əks proxy-ni FreePBX veb serverinə yönləndirmək lazımdır (biz ona başqa bir port verdik 88), LetsEncrypt docker-də bu yazı

Faylı yüklənmiş layihə qovluğunda (git clone-dan sonra) işə salmalısınız, lakin əvvəlcə ulduz konfiqurasiyasına (ulduz qovluğuna) daxil olun və orada qeydlərə gedən yolları və saytınızın URL-ni yazın.

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:

Bu docker-compose.yaml faylı vasitəsilə idarə olunur

docker-compose up -d

Əgər nginx başlamazsa, o zaman nginx/ssl_docker.conf qovluğundakı konfiqurasiyada nəsə səhvdir

Digər inteqrasiyalar

Və niyə eyni zamanda bəzi CRM-ləri skriptlərə qoymayaq, düşündük. Biz bir neçə digər CRM API-lərini, xüsusən pulsuz quraşdırılmış ATS-ni - ShugarCRM və Vtiger-i öyrəndik və bəli! bəli, prinsip eynidir. Ancaq bu, daha sonra github-a ayrıca yükləyəcəyimiz başqa bir hekayədir.

References

İmtina: Reallıqla hər hansı oxşarlıq uydurmadır və mən deyildim.

Mənbə: www.habr.com

Добавить комментарий