Фаҳмидани FreePBX ва ҳамгироии он бо Bitrix24 ва ғайра

Bitrix24 комбинати азимест, ки CRM, ҷараёни корӣ, ҳисобдорӣ ва бисёр чизҳои дигареро дар бар мегирад, ки ба менеҷерҳо воқеан маъқуланд ва ба кормандони IT писанд нестанд. Порталро бисёр ширкатҳои хурд ва миёна, аз ҷумла клиникаҳои хурд, истеҳсолкунандагон ва ҳатто салонҳои зебоӣ истифода мебаранд. Вазифаи асосие, ки менеҷерҳо "дӯст" медоранд, ин ҳамгироии телефония ва CRM мебошад, вақте ки ҳама гуна занг фавран дар CRM сабт мешавад, кортҳои муштарӣ сохта мешаванд, ҳангоми ворид шудан, маълумот дар бораи муштарӣ намоиш дода мешавад ва шумо метавонед фавран бубинед, ки ӯ кист, чӣ гуна аст. фурухта метавонад ва чй кадар карздор аст. Аммо телефония аз Bitrix24 ва ҳамгироии он бо CRM пул, баъзан хеле зиёдро талаб мекунад. Дар мақола ман ба шумо таҷрибаи ҳамгироӣ бо асбобҳои кушода ва маъмули IP PBX нақл мекунам freepbx, инчунин мантиқи кори қисмҳои гуногунро баррасӣ кунед

Ман ҳамчун аутсорсер дар ширкате кор мекунам, ки телефонияи IP-ро мефурӯшад ва танзим мекунад. Вақте аз ман пурсиданд, ки оё мо метавонем ба ин ва ин ширкат чизе пешниҳод кунем, то Bitrix24-ро бо PBXҳое, ки муштариён доранд, инчунин бо PBX-ҳои виртуалӣ дар ширкатҳои гуногуни VDS ҳамгиро кунем, ман ба Google рафтам. Ва албатта ӯ ба ман пайванде дод мақола дар habr, ки дар он тавсиф аст, ва github, ва ҳама чиз ба назар мерасад, ки кор. Аммо ҳангоми кӯшиши истифодаи ин ҳалли он маълум шуд, ки Bitrix24 дигар мисли пештара нест ва бисёр чизҳоро бояд аз нав анҷом дод. Илова бар ин, FreePBX барои шумо ситорачаи бараҳна нест, дар ин ҷо шумо бояд дар бораи он фикр кунед, ки чӣ гуна осонии истифода ва нақшаи рақамии хардкорро дар файлҳои конфигуратсия якҷоя кардан мумкин аст.

Мо мантиқи корро меомӯзем

Пас, барои шурӯъкунандагон, он чӣ гуна бояд кор кунад. Вақте ки занг аз берун дар АТС қабул карда мешавад (ҳодисаи SIP INVITE аз провайдер), коркарди нақшаи рақамӣ (нақшаи рақамӣ, рақами рақамӣ) оғоз мешавад - қоидаҳои бо чӣ ва бо кадом тартиб анҷом додани занг. Аз бастаи аввал шумо метавонед маълумоти зиёде гиред, ки баъдан онҳоро дар қоидаҳо истифода бурдан мумкин аст. Воситаи олиҷаноб барои омӯзиши дохилии SIP анализатор мебошад sngrep (Садо Ояндасоз). Биёед ба сабти зангҳо дар sngrep назар кунем

Фаҳмидани FreePBX ва ҳамгироии он бо Bitrix24 ва ғайра

Дар шакли соддакардашуда, нақшаи рақамӣ танҳо бо бастаи аввал сарукор дорад, баъзан инчунин ҳангоми сӯҳбат, зангҳо интиқол дода мешаванд, пахш кардани тугмаҳо (DTMF), чизҳои гуногуни ҷолиб ба монанди FollowMe, RingGroup, IVR ва ғайра.

Чӣ дар дохили бастаи даъват

Фаҳмидани FreePBX ва ҳамгироии он бо Bitrix24 ва ғайра

Дар асл, аксари нақшаҳои оддии рақамӣ бо ду майдони аввал кор мекунанд ва тамоми мантиқ дар атрофи DID ва CallerID давр мезанад. DID - он ҷое ки мо занг мезанем, CallerID - кӣ занг мезанад.

Аммо дар ниҳоят, мо як ширкат дорем, на як телефон - ин маънои онро дорад, ки PBX эҳтимол дорад гурӯҳҳои зангҳо (зангҳои ҳамзамон / пайдарпайи якчанд дастгоҳ) дар рақамҳои шаҳр (Ring Group), IVR (Салом, шумо занг задед ... Матбуот яке барои ...), Мошинҳои ҷавобдиҳанда (Ибораҳо), Шароити вақт, Интиқол ба рақамҳои дигар ё ячейка (FollowMe, Forward). Ин маънои онро дорад, ки ба таври дақиқ муайян кардани кӣ зангро воқеан қабул мекунад ва ҳангоми расидани занг бо кӣ сӯҳбат хоҳад кард, хеле душвор аст. Ин аст мисоли оғози занги маъмулӣ дар АТС-и мизоҷони мо

Фаҳмидани FreePBX ва ҳамгироии он бо Bitrix24 ва ғайра

Пас аз бомуваффақият ворид шудани занг ба АТС, он тавассути телефон дар "контекстҳо"-и гуногун мегузарад. Контекст аз нуқтаи назари ситорача маҷмӯи фармонҳои рақамгузорӣшуда мебошад, ки ҳар яки онҳо филтрро аз рӯи рақами чидашуда дар бар мегирад (онро васеъ меноманд, барои занги беруна дар марҳилаи ибтидоӣ exten=DID). Фармонҳо дар сатри рақамӣ метавонанд ҳама чиз бошанд - функсияҳои дохилӣ (масалан, ба муштарии дохилӣ занг занед - Dial(), телефонро ба поён гузоред - Hangup()), операторҳои шартӣ (IF, ELSE, ExecIF ва монанди инҳо), гузариш ба қоидаҳои дигари ин контекст (Goto, GotoIF), гузариш ба контекстҳои дигар дар шакли занги функсия (Gosub, Macro). Директиваи алоҳида include имя_контекста, ки фармонҳоро аз контексти дигар ба охири контексти ҷорӣ илова мекунад. Фармонҳое, ки тавассути дохил дохил мешаванд, ҳамеша иҷро мешаванд после фармонҳои контексти ҷорӣ.

Тамоми мантиқи FreePBX аз ворид кардани контекстҳои гуногун ба ҳамдигар тавассути дохил кардан ва занг задан тавассути коркардкунандагони Gosub, Macro ва Handler сохта шудааст. Контексти зангҳои воридотии FreePBX-ро баррасӣ кунед

Фаҳмидани FreePBX ва ҳамгироии он бо Bitrix24 ва ғайра

Занг бо навбат аз боло ба поён аз тамоми контекстҳо мегузарад, дар ҳар як контекст метавонад ба контекстҳои дигар ба монанди макросҳо (Макро), функсияҳо (Gosub) ё танҳо гузаришҳо (Goto) занг занад, бинобар ин дарахти воқеии он чизе, ки номида мешавад, метавонад танҳо дар гузоришҳо пайгирӣ карда шаванд.

Диаграммаи муқаррарии танзимот барои PBX маъмулӣ дар зер нишон дода шудааст. Ҳангоми занг задан, DID дар хатсайрҳои воридотӣ ҷустуҷӯ карда мешавад, барои он шароити муваққатӣ тафтиш карда мешавад, агар ҳама чиз дуруст бошад, менюи овозӣ оғоз мешавад. Аз он, бо пахш кардани тугмаи 1 ё вақти тамомшавӣ ба гурӯҳи операторҳои рақамзанӣ баромад кунед. Пас аз ба охир расидани занг, макроси hangupcall даъват карда мешавад, ки пас аз он дар нақша ҳеҷ кор кардан мумкин нест, ба истиснои коркардкунандагони махсус (мантихани hangup).

Фаҳмидани FreePBX ва ҳамгироии он бо Bitrix24 ва ғайра

Дар куҷо дар ин алгоритми занг мо бояд маълумотро дар бораи оғози занг ба CRM пешниҳод кунем, сабтро аз куҷо оғоз кунем, сабтро дар куҷо анҷом диҳем ва онро бо маълумот дар бораи занг ба CRM ирсол кунем?

Интегратсия бо системаҳои беруна

Интегратсияи PBX ва CRM чист? Инҳо танзимот ва барномаҳое мебошанд, ки маълумот ва рӯйдодҳоро байни ин ду платформа табдил медиҳанд ва онҳоро ба ҳамдигар мефиристанд. Роҳи маъмултарини муоширати системаҳои мустақил тавассути APIҳо мебошад ва маъмултарин роҳи дастрасӣ ба APIҳо HTTP REST мебошад. Аммо на барои ситорача.

Дар дохили ситорача ин аст:

  • AGI - занги синхронӣ ба барномаҳо / ҷузъҳои беруна, ки асосан дар нақша истифода мешаванд, китобхонаҳо мавҷуданд phpagi, ПАГИ

  • AMI - васлаки матнии TCP, ки аз рӯи принсипи обуна ба рӯйдодҳо ва ворид кардани фармонҳои матнӣ кор мекунад, аз дарун ба SMTP шабоҳат дорад, метавонад рӯйдодҳоро пайгирӣ кунад ва зангҳоро идора кунад, китобхона мавҷуд аст. ПАМИ - маъмултарин барои эҷоди пайвастшавӣ бо Asterisk

Намунаи баромади AMI

Ҳодиса: Канали нав
Имтиёз: занг занед, ҳама
Канал: PJSIP/VMS_pjsip-0000078b
Ҳолати канал: 4
ChannelStateDesc: Ринг
Рақами занг: 111222
Номи занг: 111222
ConnectedLineNum:
Номи хати пайваст:
Забон: en
рамзи ҳисоб:
Контекст: from-pstn
Давом: с
Афзалият: 1
Ягона: 1599589046.5244
Linkedid: 1599589046.5244

  • ARI омехтаи ҳарду аст, ҳама тавассути REST, WebSocket, дар формати JSON - аммо бо китобхонаҳои тару тоза ва бастабандӣ, на он қадар хуб, ғайриоддӣ ёфт (phparia, phpari) ки дар инкишофи онхо такрибан 3 сол пеш шуда буданд.

Намунаи баромади ARI ҳангоми оғоз кардани занг

{ "variable":"CallMeCallerIDName", "value":"111222", "type":"ChannelVarset", "timestamp":"2020-09-09:09:38+36.269", "канал":{ "id" »:»0000″, «ном»:»PJSIP/VMSpjsip-000007b6″, "state":"Занг", "зангкунанда":{ "ном":"111222", "рақам":"111222" }, "пайваст":{ "ном":"", "рақам" :"" }, "коди ҳисоб":"", "dialplan":{ "контекст":"from-pstn", "exten":"s", "priority":2, "барноманом":"Stasis", "барномаdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "language":"ru" }, "asterisk"id":"48:5b:aa:aa:aa:aa", "ариза":"салом-ҷаҳон" }

Бароҳатӣ ё нороҳатӣ, имкон ё имконнопазирии кор бо API-и мушаххас аз рӯи вазифаҳое муайян карда мешаванд, ки бояд ҳал карда шаванд. Вазифаҳо барои ҳамгироӣ бо CRM инҳоянд:

  • Оғози зангро, ки дар куҷо интиқол дода шудааст, пайгирӣ кунед, CallerID, DID, вақти оғоз ва анҷоми зангро берун кунед, шояд маълумот аз директория (барои ҷустуҷӯи пайвастшавӣ байни телефон ва корбари CRM)

  • Сабти зангро оғоз ва анҷом диҳед, онро дар формати дилхоҳ захира кунед, дар охири сабт дар куҷо ҷойгир будани файлро хабар диҳед

  • Оғози занг ба рӯйдодҳои беруна (аз барнома), ба рақами дохилӣ, рақами беруна занг занед ва онҳоро пайваст кунед

  • Ихтиёрӣ: ҳамгироӣ бо CRM, гурӯҳҳои рақамкунанда ва FollowME барои интиқоли автоматии зангҳо дар сурати набудани ҷой (тибқи CRM)

Ҳамаи ин вазифаҳоро тавассути AMI ё ARI ҳал кардан мумкин аст, аммо ARI маълумоти хеле кам медиҳад, воқеаҳои зиёд нестанд, бисёр тағирёбандаҳое, ки AMI то ҳол доранд (масалан, зангҳои макрос, танзими тағирёбандаҳо дар дохили макросҳо, аз ҷумла сабти зангҳо) пайгирӣ карда намешаванд. Аз ин рӯ, барои пайгирии дуруст ва дақиқ, биёед ҳоло AMI-ро интихоб кунем (вале на пурра). Илова бар ин (хайр, бе ин куҷо мешуд, мо танбал ҳастем) - дар асари аслӣ (мақола дар habr) PAMI-ро истифода баред. *Пас шумо бояд кӯшиш кунед, ки ба ARI аз нав нависед, аммо на ин ки он кор хоҳад кард.

Бозсозии интегратсия

Барои он ки FreePBX-и мо тавонист ба AMI бо роҳҳои оддӣ дар бораи оғози занг, вақти анҷом, рақамҳо, номи файлҳои сабтшуда гузориш диҳад, ҳисоб кардани давомнокии занг бо ҳамон ҳиллаест, ки муаллифони аслӣ доранд. - тағирёбандаҳои худро ворид кунед ва натиҷаро барои ҳузури онҳо таҳлил кунед. PAMI ин корро танҳо тавассути функсияи филтр пешниҳод мекунад.

Ин аст мисоли муқаррар кардани тағирёбандаи шахсии шумо барои вақти оғози занг (дар рақами махсус дар нақшаи рақамӣ, ки ПЕШ АЗ оғоз кардани ҷустуҷӯи DID анҷом дода мешавад)

[ext-did-custom]

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

Намунаи ҳодисаи AMI барои ин сатр

Ҳодиса: Канали нав

Имтиёз: занг занед, ҳама

Канал: PJSIP/VMS_pjsip-0000078b

Ҳолати канал: 4

ChannelStateDesc: Ринг

Рақами занг: 111222

Номи занг: 111222

ConnectedLineNum:

Номи хати пайваст:

Забон: en

рамзи ҳисоб:

Контекст: from-pstn

Давом: с

Афзалият: 1

Ягона: 1599589046.5244

Linkedid: 1599589046.5244

Ариза: Set AppData:

CallStart = 1599571046

Зеро FreePBX файлҳои extention.conf ва extention_-ро аз нав менависадextra.conf, мо файлро истифода мебарем тамдид_урфу одат.conf

Рамзи пурраи 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,Return

Хусусият ва фарқият аз диалплани аслии муаллифони мақолаи аслӣ -

  • Dialplan дар формати .conf, тавре ки FreePBX мехоҳад (бале, он метавонад .ael бошад, аммо на ҳама версияҳо ва на ҳамеша қулай аст)

  • Ба ҷои коркарди ниҳоӣ тавассути exten=>h, коркард тавассути hangup_handler ҷорӣ карда шуд, зеро нақшаи рақамии FreePBX танҳо бо он кор мекард

  • Сатри занги собит скрипт, иловашуда нохунакҳо ва рақами занги беруна ExtNum

  • Коркард ба _контекстҳои фармоишӣ интиқол дода мешавад ва ба шумо имкон медиҳад, ки ба конфигуратсияҳои FreePBX даст нарасонед ё таҳрир накунед - тавассути [одати пештара], баромад тавассути [outbound-allroutes-custom]

  • Ба рақамҳо ҳатмӣ нест - файл универсалӣ аст ва танҳо бояд барои роҳ ва пайванд ба сервер танзим карда шавад

Барои оғоз кардан, шумо инчунин бояд скриптҳоро дар AMI бо логин ва парол иҷро кунед - барои ин, FreePBX инчунин файли _custom дорад.

файли 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

Ҳардуи ин файлҳо бояд дар /etc/asterisk ҷойгир карда шаванд, пас конфигуратсияҳоро дубора хонед (ё ситорачаро аз нав оғоз кунед)

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

Акнун биёед ба PHP гузарем

Оғоз кардани скриптҳо ва эҷоди хидмат

Азбаски нақшаи кор бо Bitrix 24, хидмати AMI, комилан оддӣ ва шаффоф нест, он бояд алоҳида баррасӣ карда шавад. Ситорача, вақте ки AMI фаъол карда мешавад, танҳо портро мекушояд ва тамом. Вақте ки муштарӣ ҳамроҳ мешавад, он иҷозат талаб мекунад, пас муштарӣ ба рӯйдодҳои зарурӣ обуна мешавад. Ҳодисаҳо дар матни оддӣ ворид мешаванд, ки PAMI онҳоро ба объектҳои сохторӣ табдил медиҳад ва имкон медиҳад, ки функсияи филтрро танҳо барои рӯйдодҳои ҷолиб, майдонҳо, рақамҳо ва ғайра муқаррар кунад.

Ҳамин ки занг ворид мешавад, ҳодисаи NewExten аз контексти волидайн [from-pstn] оғоз мешавад, пас ҳама рӯйдодҳо бо тартиби сатрҳо дар контекстҳо мераванд. Вақте ки маълумот аз тағирёбандаҳои CallMeCallerIDName ва CallStart, ки дар нақшаи рақами фармоишии _муштарӣ зикр шудаанд, гирифта мешавад,

  1. Функсияи дархости ID-и UserID, ки ба рақами васеъшавие, ки занг ворид шудааст, мувофиқ аст. Чӣ мешавад, агар он як гурӯҳи рақамӣ бошад? Савол сиёсӣ аст, оё ба шумо лозим аст, ки якбора ба ҳама занг занед (вақте ки ҳама якбора занг мезананд) ё ҳангоми занг задан дар навбати худ ҳамон гуна эҷод кунед? Аксари мизоҷон стратегияи Fisrt Available доранд, бинобар ин дар ин кор мушкиле нест, танҳо як занг мезанад. Вале масъаларо хал кардан лозим аст.

  2. Функсияи сабти занг дар Bitrix24, ки CallID-ро бармегардонад, ки пас аз он барои гузориш додани параметрҳои занг ва истинод ба сабт талаб карда мешавад. Рақами васеъ ё ID UserID талаб мекунад

Фаҳмидани FreePBX ва ҳамгироии он бо Bitrix24 ва ғайра

Пас аз анҷоми занг, функсияи зеркашии сабт даъват карда мешавад, ки ҳамзамон дар бораи ҳолати анҷоми занг (банд, Ҷавоб нест, Муваффақият) хабар медиҳад ва инчунин истиноди файли mp3-ро бо сабт (агар мавҷуд бошад) зеркашӣ мекунад.

Азбаски модули CallMeIn.php бояд пайваста кор кунад, барои он файли оғози SystemD сохта шудааст callme.service, ки бояд дар /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

оғоз ва оғози скрипт тавассути systemctl ё хидмат сурат мегирад

# systemctl enable callme
# systemctl start callme

Хизматрасонӣ дар ҳолати зарурӣ худашро аз нав оғоз мекунад (дар ҳолати садамаҳо). Хидмати пайгирии паёмдонҳо насб кардани веб-серверро талаб намекунад, танҳо php лозим аст (ки бешубҳа дар сервери FeePBX ҷойгир аст). Аммо дар сурати мавҷуд набудани дастрасӣ ба сабтҳои занг тавассути веб-сервер (инчунин бо https), гӯш кардани сабтҳои занг имконнопазир хоҳад буд.

Акнун биёед дар бораи зангҳои содиротӣ сӯҳбат кунем. Скрипти CallMeOut.php ду вазифа дорад:

  • Оғози занг ҳангоми қабули дархост барои скрипти php (аз ҷумла бо истифода аз тугмаи "Занг" дар худи Bitrix). Он бе сервери веб кор намекунад, дархост тавассути HTTP POST қабул карда мешавад, дархост аломат дорад

  • Паём дар бораи занг, параметрҳо ва сабтҳои он дар Bitrix. Ҳангоми ба охир расидани занг аз ҷониби Asterisk дар нақшаи занги [зағирҳои дохилии анҷомшуда] оғоз карда мешавад

Фаҳмидани FreePBX ва ҳамгироии он бо Bitrix24 ва ғайра

Веб-сервер танҳо барои ду чиз лозим аст - зеркашии файлҳои сабти Bitrix (тавассути HTTPS) ва занг задан ба скрипти CallMeOut.php. Шумо метавонед сервери дарунсохтаи FreePBX-ро истифода баред, ки файлҳои онҳо /var/www/html мебошанд, шумо метавонед сервери дигарро насб кунед ё роҳи дигарро муайян кунед.

Веб-сервер

Биёед танзимоти веб-серверро барои омӯзиши мустақил гузорем (тайт, тайт, тайт). Агар шумо домен надошта бошед, шумо метавонед FreeDomain-ро санҷед( https://www.freenom.com/ru/index.html), ки ба шумо номи ройгони IP-и сафеди шуморо медиҳад (фаромӯш накунед, ки портҳои 80, 443-ро тавассути роутер интиқол диҳед, агар суроғаи беруна танҳо дар он бошад). Агар шумо танҳо як домени DNS эҷод карда бошед, пас шумо бояд интизор шавед (аз 15 дақиқа то 48 соат) то ҳама серверҳо бор карда шаванд. Мувофиқи таҷрибаи кор бо провайдерҳои ватанӣ - аз 1 соат то як рӯз.

Автоматикунонии насб

Дар github насбкунанда таҳия шудааст, то насбро боз ҳам осонтар кунад. Аммо он дар рӯи коғаз ҳамвор буд - дар ҳоле ки мо ҳама онро дастӣ насб карда истодаем, зеро пас аз коркарди ин ҳама маълум шуд, ки бо кӣ дӯстӣ дорад, кӣ ба куҷо меравад ва чӣ гуна онро ислоҳ кардан лозим аст. Ҳанӯз насбкунанда нест

Доктор

Агар шумо хоҳед, ки ҳалли худро зуд санҷед - бо Docker имкон вуҷуд дорад - зуд контейнер созед, ба он портҳо диҳед, файлҳои танзимотро лағжонед ва кӯшиш кунед (ин вариант бо контейнери LetsEncrypt аст, агар шумо аллакай сертификат дошта бошед, шумо танҳо лозим аст, ки прокси баръаксро ба веб-сервери FreePBX равона кунед (мо ба он порти дигар додем, ки 88 аст), LetsEncrypt дар docker дар асоси ин мақола

Шумо бояд файлро дар папкаи лоиҳаи зеркашидашуда иҷро кунед (пас аз git clone), аммо аввал ба танзимоти ситорача (папкаи ситорача) ворид шавед ва роҳҳоро ба сабтҳо ва URL-и сайти худро дар он ҷо нависед.

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 тавассути

docker-compose up -d

Агар nginx оғоз нашавад, пас дар конфигуратсия дар ҷузвдони nginx/ssl_docker.conf чизе нодуруст аст

Интегратсияҳои дигар

Ва чаро дар як вақт баъзе CRM-ро ба скриптҳо нагузоред, мо фикр кардем. Мо якчанд API-ҳои дигари CRM-ро омӯхтем, махсусан PBX-и ройгони дарунсохт - ShugarCRM ва Vtiger, ва ҳа! бале, принцип як аст. Аммо ин як ҳикояи дигар аст, ки мо баъдтар ба github алоҳида бор хоҳем кард.

мурожиат

Радди масъулият: Ҳама гуна монандӣ ба воқеият афсонавӣ аст ва он ман набудам.

Манбаъ: will.com

Илова Эзоҳ