Би IP телефонийг борлуулдаг, тохируулдаг, нэгтгэдэг компанид аутсорсероор ажилладаг. Bitrix24-ийг хэрэглэгчдэд байдаг PBX-тэй, мөн янз бүрийн VDS компаниудын виртуаль PBX-уудтай нэгтгэхийн тулд бид энэ болон энэ компанид ямар нэг зүйл санал болгож болох уу гэж надаас асуухад би Google-д очсон. Тэгээд мэдээж тэр надад холбоос өгсөн
Бид ажлын логикийг судалдаг
Тиймээс эхлэгчдэд энэ бүхэн хэрхэн ажиллах ёстой вэ. PBX-ийн гаднаас дуудлага хүлээн авах үед (үйлчилгээ үзүүлэгчээс SIP INVITE үйл явдал) залгах төлөвлөгөөг боловсруулах (залгах төлөвлөгөө, залгах төлөвлөгөө) эхэлдэг - дуудлагад юу, ямар дарааллаар хийх дүрмүүд. Эхний багцаас та маш их мэдээлэл авах боломжтой бөгөөд дараа нь дүрэмд ашиглаж болно. SIP-ийн дотоод байдлыг судлах маш сайн хэрэгсэл бол анализатор юм sngrep (
Хялбаршуулсан хэлбэрээр залгах төлөвлөгөө нь зөвхөн эхний пакеттай, заримдаа ярианы үеэр дуудлага дамжуулж, товчлуурыг дарах (DTMF), FollowMe, RingGroup, IVR болон бусад сонирхолтой зүйлсийг харуулдаг.
Урилгын багц дотор юу байна
Үнэндээ ихэнх энгийн залгах төлөвлөгөөнүүд эхний хоёр талбартай ажилладаг бөгөөд бүх логик нь DID болон CallerID-ийн эргэн тойронд эргэлддэг. DID - бидний залгаж байгаа газар, CallerID - хэн залгаж байна.
Эцсийн эцэст бид нэг компанитай бөгөөд нэг утас биш - энэ нь PBX нь хотын дугаар (Ring Group), IVR (Сайн уу, та залгасан ... Хэвлэл) дээр дуудлагын бүлгүүд (хэд хэдэн төхөөрөмжийн нэгэн зэрэг / дараалан дуугарах) байдаг гэсэн үг юм. нэг нь ...), Хариулах машин ( Үг хэллэг), Цагийн нөхцөл, Бусад тоо эсвэл нүд рүү дамжуулах (FollowMe, Forward). Энэ нь дуудлага ирэхэд хэн нь дуудлага хүлээн авах, хэнтэй харилцахыг хоёрдмол утгагүй тодорхойлоход маш хэцүү гэсэн үг юм. Манай үйлчлүүлэгчдийн PBX-д ердийн дуудлагын эхлэлийн жишээ энд байна
Дуудлага PBX-д амжилттай орсны дараа өөр өөр "контекст"-д залгах төлөвлөгөөгөөр дамждаг. Оддын үүднээс контекст нь дугаарлагдсан командуудын багц бөгөөд тус бүр нь залгасан дугаарын шүүлтүүрийг агуулдаг (энэ нь эхний шатанд гадаад дуудлагын хувьд exten = DID гэж нэрлэгддэг). Залгах шугам дахь командууд нь юу ч байж болно - дотоод функцууд (жишээлбэл, дотоод захиалагч руу залгах - Dial()
, утсаа тавь - Hangup()
), нөхцөлт операторууд (IF, ELSE, ExecIF
гэх мэт), энэ агуулгын бусад дүрэмд шилжих (Goto, GotoIF
), функцийн дуудлагын хэлбэрээр бусад контекст руу шилжих (Gosub, Macro). Тусдаа заавар include имя_контекста
, Энэ нь одоогийн контекстийн төгсгөлд өөр контекстээс тушаалуудыг нэмдэг. Include-ээр орсон командууд үргэлж биелэгддэг после одоогийн контекстийн командууд.
FreePBX-ийн бүх логик нь Gosub, Macro болон Handler зохицуулагчаар дамжуулан оруулах, дуудах замаар өөр өөр контекстүүдийг бие биедээ оруулах дээр суурилдаг. Ирж буй FreePBX дуудлагын контекстийг анхаарч үзээрэй
Дуудлага нь бүх контекстийг дээрээс доош ээлжлэн дамждаг бөгөөд контекст бүрт макро (Макро), функцууд (Gosub) эсвэл зүгээр л шилжилтүүд (Goto) гэх мэт бусад контекст руу залгах боломжтой тул дуудагдсан зүйлийн жинхэнэ мод нь зөвхөн боломжтой. бүртгэлд бүртгэнэ.
Ердийн PBX-ийн ердийн тохиргооны диаграммыг доор үзүүлэв. Дуудлага хийх үед DID-г ирж буй чиглэлд хайж, түр зуурын нөхцөлийг шалгаж, бүх зүйл эмх цэгцтэй байвал дуут цэсийг ажиллуулна. Үүнээс 1 товчлуур эсвэл завсарлага дээр дарж залгах операторуудын бүлэгт гарна уу. Дуудлага дууссаны дараа hangupcall макро дуудагдах ба дараа нь залгах төлөвлөгөөнд тусгай зохицуулагчаас (гацаа зохицуулагч) өөр юу ч хийх боломжгүй.
Энэ дуудлагын алгоритмын хаана нь бид CRM руу дуудлагын эхлэл, хаана бичиж эхлэх, бичлэгийг хаана дуусгах, CRM руу дуудлагын талаарх мэдээллийн хамт илгээх ёстой вэ?
Гадаад системтэй нэгтгэх
PBX болон CRM интеграци гэж юу вэ? Эдгээр нь эдгээр хоёр платформын хооронд өгөгдөл, үйл явдлуудыг хөрвүүлж, бие биедээ илгээдэг тохиргоо, програмууд юм. Бие даасан системүүдийн харилцах хамгийн түгээмэл арга бол API-ууд бөгөөд API-д хандах хамгийн түгээмэл арга бол HTTP REST юм. Гэхдээ одны хувьд биш.
Дотор од нь:
-
AGI - гадаад програмууд / бүрэлдэхүүн хэсгүүдэд синхрон дуудлага хийх, голчлон залгах төлөвлөгөөнд ашигладаг, гэх мэт сангууд байдаг.
phpagi ,PAGI -
AMI - үйл явдалд бүртгүүлэх, текст команд оруулах зарчмаар ажилладаг текстийн TCP залгуур, дотроос SMTP-тэй төстэй, үйл явдлыг хянах, дуудлагыг удирдах боломжтой, номын сан байдаг.
ПАМИ - одтой холболт үүсгэх хамгийн алдартай
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", "утга":"111222", "төрөл":"ChannelVarset", "timestamp":"2020-09-09T09:38:36.269+0000", "суваг":{ "id" »:»1599644315.5334″, «нэр»:»PJSIP/VMSpjsip-000007b6″, "төлөв":"Ring", "дуудагч":{ "нэр":"111222″, "тоо":"111222″ }, "холбогдсон":{ "нэр":"", "тоо" :"" }, "дансны код":"", "dialplan":{ "контекст":"from-pstn", "exten":"s", "priority":2, "appнэр":"Stasis", "appdata":"hello-world" }, "creationtime":"2020-09-09T09:38:35.926+0000", "хэл":"en" }, "од"id":"48:5b:aa:aa:aa:aa", "application":"hello-world" }
Тохиромжтой эсвэл тохиромжгүй байдал, тодорхой API-тай ажиллах боломж эсвэл боломжгүй байдал нь шийдвэрлэх шаардлагатай ажлуудаар тодорхойлогддог. CRM-тэй нэгтгэх даалгаврууд нь дараах байдалтай байна.
-
Дуудлагын эхэн үе, хаана шилжүүлсэн, дуудлагын ID, DID, эхлэх, дуусах цаг, магадгүй лавлахаас өгөгдөл гаргаж аваарай (утас болон CRM хэрэглэгчийн хоорондох холболтыг хайх)
-
Дуудлагын бичлэгийг эхлүүлэх, дуусгах, хүссэн форматаар хадгалах, бичлэгийн төгсгөлд файл хаана байгааг мэдэгдэх.
-
Гадны үйл явдал (хөтөлбөрөөс) дээр дуудлага эхлүүлэх, дотоод дугаар, гадаад дугаар руу залгаж, тэдгээрийг холбох
-
Нэмэлт: газар байхгүй үед дуудлагыг автоматаар дамжуулахын тулд CRM, залгах бүлгүүд болон FollowME-тэй нэгтгэх (CRM-ийн дагуу)
Эдгээр бүх ажлыг AMI эсвэл ARI-ээр дамжуулан шийдэж болох боловч ARI нь маш бага мэдээлэл өгдөг, олон үйл явдал байдаггүй, AMI-д байгаа олон хувьсагчдыг (жишээ нь, макро дуудлага, макро доторх хувьсагчдыг тохируулах, дуудлагын бичлэг гэх мэт) хянадаггүй. Тиймээс зөв, үнэн зөв хянахын тулд одоохондоо AMI-г сонгоцгооё (гэхдээ бүрэн биш). Нэмж дурдахад (энэгүйгээр хаана байх байсан бэ, бид залхуу хүмүүс) - анхны бүтээлд (
Интеграцчлалыг сэргээж байна
Манай FreePBX нь дуудлагын эхлэл, дуусах цаг, дугаар, бичигдсэн файлын нэрсийн талаар AMI-д энгийн байдлаар мэдээлэх боломжтой байхын тулд анхны зохиогчдын нэгэн адил заль мэхийг ашиглан дуудлагын үргэлжлэх хугацааг тооцоолоход хялбар байдаг. - хувьсагчаа оруулаад гаралтыг тэдгээрийн байгаа эсэхийг шинжлэх. PAMI үүнийг шүүлтүүрийн функцээр дамжуулан хийхийг санал болгож байна.
Дуудлагын эхлэх цагийг өөрийн хувьсагчаар тохируулах жишээ энд байна (s нь 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
Програм: AppData тохируулах:
CallStart=1599571046
Учир нь FreePBX өргөтгөл.conf болон өргөтгөл_ файлуудыг дарж бичдэгнэмэлт.conf, бид файлыг ашиглах болно өргөтгөл_өөрчлөн.conf
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
Анхны нийтлэлийн зохиогчдын анхны залгах төлөвлөгөөний онцлог, ялгаа -
-
FreePBX-ийн хүссэнээр .conf форматаар залгах (тиймээ, энэ нь .ael байж болно, гэхдээ бүх хувилбарт биш бөгөөд энэ нь үргэлж тохиромжтой биш юм)
-
Төгсгөлийг exten=>h-ээр боловсруулахын оронд hangup_handler-ээр дамжуулан боловсруулалтыг нэвтрүүлсэн, учир нь FreePBX залгах төлөвлөгөө зөвхөн түүнтэй ажилладаг байсан.
-
Тогтмол скрипт дуудлагын мөр, нэмэгдсэн ишлэл болон гадаад дуудлагын дугаар ExtNum
-
Боловсруулалт нь _custom contexts руу шилжиж, FreePBX тохиргоонд хүрэх эсвэл засварлахгүй байх боломжийг олгодог - орж ирж буй [ext-did-customized], [-ээр дамжуулж байна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 руу шилжье
Скриптүүдийг эхлүүлэх, үйлчилгээ үүсгэх
AMI-д зориулсан үйлчилгээ болох Bitrix 24-тэй ажиллах схем нь тийм ч энгийн бөгөөд ил тод биш тул үүнийг тусад нь хэлэлцэх ёстой. Од, AMI идэвхжсэн үед портыг нээгээд л болоо. Үйлчлүүлэгч нэгдэх үед зөвшөөрөл хүсч, дараа нь үйлчлүүлэгч шаардлагатай арга хэмжээнд бүртгүүлдэг. Үйл явдлууд нь энгийн текст хэлбэрээр ирдэг бөгөөд үүнийг PAMI нь бүтэцлэгдсэн объект болгон хувиргадаг бөгөөд зөвхөн сонирхолтой үйл явдал, талбар, тоо гэх мэт шүүлтүүрийн функцийг тохируулах боломжийг олгодог.
Дуудлага ирсэн даруйд NewExten үйл явдал нь эх [from-pstn] контекстээс эхлэн идэвхжиж, дараа нь бүх үйл явдал контекст дэх мөрүүдийн дарааллаар явагдана. Тусгай залгах төлөвлөгөөнд заасан CallMeCallerIDName болон CallStart хувьсагчдаас мэдээлэл хүлээн авах үед
-
Дуудлага ирсэн өргөтгөлийн дугаарт тохирох Хэрэглэгчийн ID-г хүсэх функц. Хэрэв энэ нь dial-up групп байвал яах вэ? Асуулт нь улс төрийн шинжтэй байна, та бүгдэд нэг дор (бүгд нэгэн зэрэг залгахад) дуудлага үүсгэх шаардлагатай юу эсвэл ээлжлэн залгах үед тэдний дууддаг шиг үүсгэх шаардлагатай юу? Ихэнх үйлчлүүлэгчид Fisrt Available стратеги байдаг тул үүнд ямар ч асуудал байхгүй, зөвхөн нэг л дуудлага ирдэг. Гэхдээ асуудлыг шийдэх хэрэгтэй.
-
Bitrix24 дахь дуудлагын бүртгэлийн функц нь CallID-г буцаадаг бөгөөд энэ нь дуудлагын параметрүүд болон бичлэгийн холбоосыг мэдээлэх шаардлагатай. Өргөтгөлийн дугаар эсвэл UserID шаардлагатай
Дуудлага дууссаны дараа бичлэгийг татаж авах функц дуудагддаг бөгөөд энэ нь дуудлага дууссаны төлөвийг нэгэн зэрэг мэдээлдэг (Завгүй, Хариултгүй, Амжилттай), мөн бичлэгийн хамт 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 скриптийн хүсэлтийг хүлээн авах үед дуудлага хийх (Битрикс өөрөө "Дуудлага" товчлуурыг ашиглах гэх мэт). Энэ нь вэб сервергүйгээр ажиллахгүй, хүсэлтийг HTTP POST-ээр хүлээн авдаг, хүсэлт нь токен агуулдаг
-
Дуудлага, түүний параметрүүд болон Bitrix дээрх бичлэгүүдийн тухай мессеж. Дуудлага дуусах үед [дотоод дуудлагын дэд дуудлагын] залгах төлөвлөгөөнд Од тэмдэг тавьсан
Вэб сервер нь Bitrix бичлэгийн файлуудыг татаж авах (HTTPS-ээр) болон CallMeOut.php скриптийг дуудах гэсэн хоёр зүйлд л хэрэгтэй. Та суулгасан FreePBX серверийг ашиглаж болно, файлууд нь /var/www/html, та өөр сервер суулгах эсвэл өөр замыг зааж өгч болно.
Вэб сервер
Вэб серверийн тохиргоог бие даан судлахаар үлдээцгээе (
Суурилуулалтын автоматжуулалт
Суулгацыг илүү хялбар болгох үүднээс github дээр суулгагчийг боловсруулсан. Гэхдээ энэ нь цаасан дээр гөлгөр байсан - бид бүгдийг гараар суулгаж байх үед энэ бүх зүйлийг сайтар судалсны дараа хэнтэй найзалж, хэн хаана очиж, хэрхэн дибаг хийх нь тодорхой болсон. Одоогоор суулгагч байхгүй байна
Docker
Хэрэв та шийдлийг хурдан туршиж үзэхийг хүсвэл - Docker-ийн сонголт байгаа - савыг хурдан үүсгэж, гаднаас нь портуудыг өгөөд, тохиргооны файлуудыг хайгаад үзээрэй (энэ бол LetsEncrypt контейнерийн сонголт, хэрэв танд гэрчилгээ байгаа бол та зүгээр л урвуу проксиг FreePBX вэб сервер рүү дахин чиглүүлэх хэрэгтэй (бид түүнд өөр порт өгсөн 88), LetsEncrypt нь докер дээр суурилсан.
Та татаж авсан төслийн хавтсанд (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-ийг нэгэн зэрэг скрипт болгон оруулж болохгүй гэж бид бодсон. Бид бусад хэд хэдэн CRM API-г, ялангуяа үнэгүй суурилуулсан PBX - ShugarCRM болон Vtiger-ийг судалж үзсэн, тийм ээ! тиймээ, зарчим нь адилхан. Гэхдээ энэ бол өөр түүх бөгөөд бид дараа нь github-д тусад нь оруулах болно.
лавлагаа
-
Код нь өөрөө github дээр байгаа -
https://github.com/CrezZ/bitrix24-freepbx-php -
Үрийн эх сурвалж нийтлэл
https://habr.com/ru/post/349316/
Анхааруулга: Бодит байдалтай төстэй зүйл нь зохиомол бөгөөд би биш байсан.
Эх сурвалж: www.habr.com