Pali zosankha zosiyanasiyana zophatikizira IP-PBX Asterisk ndi CRM Bitrix24 pa netiweki, komabe tidaganiza zolemba zathu.
Pankhani ya magwiridwe antchito, zonse ndizokhazikika:
- Podina ulalo wokhala ndi nambala yafoni ya kasitomala ku Bitrix24, Asterisk imalumikiza nambala yamkati ya wogwiritsa ntchito yemwe kudina kwake kudapangidwa ndi nambala yafoni ya kasitomala. Mu Bitrix24, mbiri yakuyimbayimba imajambulidwa ndipo, kumapeto kwa kuyimba, kujambula kwa zokambirana kumakokedwa.
- Nyenyezi imalandira foni kuchokera kunja - mu mawonekedwe a Bitrix24 tikuwonetsa khadi la kasitomala kwa wogwira ntchito yemwe nambala yake idafika.
Ngati palibe kasitomala wotere, tidzatsegula khadi kuti tipange chitsogozo chatsopano.
Kuyitanako kukangotha, timawonetsa izi pa khadi ndikukweza kujambula kwa zokambiranazo.
Pansi pa odulidwawo ndikuuzani momwe mungadzikhazikitsire nokha ndikukupatsani ulalo wa github - inde, inde, tengani ndikugwiritseni ntchito!
Kulongosola kwachidule
Tinatcha kuphatikiza kwathu CallMe. CallMe ndi pulogalamu yaying'ono yapaintaneti yolembedwa mu PHP.
Tekinoloje ndi ntchito zomwe zimagwiritsidwa ntchito
- PHP 5.6
PHP AMI library - Wopeka
- Nginx + php-fpm
- woyang'anira
- AMI (Asterisk Manager Interface)
- Bitrix webhooks (kusintha kwa REST API)
kukhazikitsa
Pa seva yokhala ndi Asterisk, muyenera kukhazikitsa seva yapaintaneti (kwa ife ndi nginx + php-fpm), woyang'anira ndi git.
Lamulo lokhazikitsa (CentOS):
yum install nginx php-fpm supervisor git
Timapita ku chikwatu chomwe chikupezeka pa seva yapaintaneti, kokerani pulogalamuyi kuchokera ku Git ndikuyika ufulu wofunikira pafoda:
cd /var/www
git clone https://github.com/ViStepRU/callme.git
chown nginx. -R callme/
Kenako, tiyeni tikonze nginx, config yathu ili mkati
/etc/nginx/conf.d/pbx.vistep.ru.conf
server {
server_name www.pbx.vistep.ru pbx.vistep.ru;
listen *:80;
rewrite ^ https://pbx.vistep.ru$request_uri? permanent;
}
server {
# listen *:80;
# server_name pbx.vistep.ru;
access_log /var/log/nginx/pbx.vistep.ru.access.log main;
error_log /var/log/nginx/pbx.vistep.ru.error.log;
listen 443 ssl http2;
server_name pbx.vistep.ru;
resolver 8.8.8.8;
ssl_stapling on;
ssl on;
ssl_certificate /etc/letsencrypt/live/pbx.vistep.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pbx.vistep.ru/privkey.pem;
ssl_dhparam /etc/nginx/certs/dhparam.pem;
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:2m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000;";
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";
root /var/www/callme;
index index.php;
location ~ /. {
deny all; # Π·Π°ΠΏΡΠ΅Ρ Π΄Π»Ρ ΡΠΊΡΡΡΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ²
}
location ~* /(?:uploads|files)/.*.php$ {
deny all; # Π·Π°ΠΏΡΠ΅Ρ Π΄Π»Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΡΠΊΡΠΈΠΏΡΠΎΠ²
}
location ~* ^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off;
log_not_found off;
expires max; # ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΠΊΠΈ
}
location ~ .php {
root /var/www/callme;
index index.php;
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
# fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
Ndisiya kugawa zosintha, zovuta zachitetezo, kupeza satifiketi komanso kusankha seva yapaintaneti kunja kwa nkhaniyo - zambiri zalembedwa za izi. Pulogalamuyi ilibe zoletsa, imagwira ntchito pa http ndi https.
Timagwiritsa ntchito https, tiyeni tilembe satifiketi.
Ngati mwachita zonse molondola, ndiye podina ulalo muyenera kuwona chonga ichi
Kukhazikitsa Bitrix24
Tiyeni tipange ma webhooks awiri.
Webhook yobwera.
Pansi pa akaunti ya woyang'anira (ndi id 1), tsatirani njira: Mapulogalamu -> Webhooks -> Onjezani webhook -> Webhook yomwe ikubwera
Lembani magawo a webhook yomwe ikubwera monga pazithunzi:
Ndipo dinani Save.
Mukasunga, Bitrix24 ipereka ulalo wa webhook yomwe ikubwera, mwachitsanzo:
Sungani mtundu wanu wa ulalo wopanda chomaliza / mbiri/ - idzagwiritsidwa ntchito mu pulogalamuyo kuti mugwire ntchito ndi mafoni omwe akubwera.
Ndili ndi izi https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/
Webhook yotuluka.
Mapulogalamu -> Webhook -> Onjezani webhook -> Webhook yotuluka
Zambiri zilinso pazithunzi:
Sungani ndikulandila nambala yololeza
Ndili ndi izi xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6
. Muyeneranso kuzikopera nokha; muyenera kuyimba mafoni otuluka.
Zofunika!
Satifiketi ya SSL iyenera kukhazikitsidwa pa seva ya Bitrix24 (mutha kugwiritsa ntchito letsencrypt), apo ayi Bitrix api sigwira ntchito. Ngati muli ndi mtundu wamtambo, musadandaule - ili ndi ssl.
Zofunika!
Gawo la "Processor Address" liyenera kukhala ndi adilesi yopezeka pa intaneti!
Ndipo monga kukhudza komaliza, tiyeni tiyike CallMeOut yathu ngati pulogalamu yoyimba mafoni (kotero kuti mukadina pa nambala yomwe ili pa PBX, lamulo loyambitsa kuyimbako liwuluke).
Mu menyu, sankhani: Zambiri -> Telephony -> Zambiri -> Zokonda, khalani mu "Nambala yoyimba yotuluka" Ntchito: CallMeOut ndikudina "Sungani"
Kupanga asterisk
Kuti tichite bwino pakati pa Asterisk ndi Bitrix24, tifunika kuwonjezera callme ya AMI ku manager.conf:
[callme]
secret = JD3clEB8_f23r-3ry84gJ
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.0
permit= 10.100.111.249/255.255.255.255
permit = 192.168.254.0/255.255.255.0
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,log,verbose,user,config,command,reporting,originate
Kenako, pali zidule zingapo zomwe zidzafunikire kukhazikitsidwa kudzera pa dialplan (kwa ife iyi ndi extensions.ael).
Ndipereka fayilo yonse, kenako ndikufotokozerani:
globals {
WAV=/var/www/pbx.vistep.ru/callme/records/wav; //ΠΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ WAV
MP3=/var/www/pbx.vistep.ru/callme/records/mp3; //ΠΡΠ΄Π° Π²ΡΠ³ΡΡΠΆΠ°ΡΡ mp3 ΡΠ°ΠΉΠ»Ρ
URLRECORDS=https://pbx.vistep.ru/callme/records/mp3;
RECORDING=1; // ΠΠ°ΠΏΠΈΡΡ, 1 - Π²ΠΊΠ»ΡΡΠ΅Π½Π°.
};
macro recording(calling,called) {
if ("${RECORDING}" = "1"){
Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)});
System(mkdir -p ${MP3}/${datedir});
System(mkdir -p ${WAV}/${datedir});
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");
Set(FullFname=${URLRECORDS}/${datedir}/${fname}.mp3);
Set(CDR(filename)=${fname}.mp3);
Set(CDR(recordingfile)=${fname}.wav);
Set(CDR(realdst)=${called});
MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt});
};
};
context incoming {
888999 => {
&recording(${CALLERID(number)},${EXTEN});
Answer();
ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp()); // Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ CallerID Π΅ΡΠ»ΠΈ ΡΠ·Π½Π°Π»ΠΈ Π΅Π³ΠΎ Ρ ΠΠΈΡΡΠΈΠΊΡ24
Set(CallStart=${STRFTIME(epoch,,%s)});
Queue(Q1,tT);
Set(CallMeDISPOSITION=${CDR(disposition)});
Hangup();
}
h => {
Set(CDR_PROP(disable)=true);
Set(CallStop=${STRFTIME(epoch,,%s)});
Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)});
ExecIF(${ISNULL(${CallMeDISPOSITION})}?Set(CallMeDISPOSITION=${CDR(disposition)}):NoOP(=== CallMeDISPOSITION already was set ===));
}
}
context default {
_X. => {
Hangup();
}
};
context dial_out {
_[1237]XX => {
&recording(${CALLERID(number)},${EXTEN});
Set(__CallIntNum=${CALLERID(num)})
Set(CallStart=${STRFTIME(epoch,,%s)});
Dial(SIP/${EXTEN},,tTr);
Hangup();
}
_11XXX => {
&recording(${CALLERID(number)},${EXTEN});
Set(CallStart=${STRFTIME(epoch,,%s)});
Set(__CallIntNum=${CALLERID(num)});
Dial(SIP/${EXTEN:2}@toOurAster,,t);
Hangup();
}
_. => {
&recording(${CALLERID(number)},${EXTEN});
Set(__CallIntNum=${CALLERID(num)})
Set(CallStart=${STRFTIME(epoch,,%s)});
Dial(SIP/${EXTEN}@toOurAster,,t);
Hangup();
}
h => {
Set(CDR_PROP(disable)=true);
Set(CallStop=${STRFTIME(epoch,,%s)});
Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)});
if(${ISNULL(${CallMeDISPOSITION})}) {
Set(CallMeDISPOSITION=${CDR(disposition)});
}
System(curl -s http://pbx.vistep.ru/CallMeOut.php --data action=sendcall2b24 --data call_id=${CallMeCALL_ID} --data-urlencode FullFname=${FullFname} --data CallIntNum=${CallIntNum} --data CallDuration=${CallMeDURATION} --data-urlencode CallDisposition=${CallMeDISPOSITION});
}
};
Tiyeni tiyambe kuyambira pachiyambi: malangizo padziko lonse lapansi.
Zosiyanasiyana URLRECORDS imasunga ulalo ku mafayilo ojambulira zokambirana, malinga ndi zomwe Bitrix24 iwakokera mumakhadi olumikizana nawo.
Kenako timachita chidwi ndi macro macro Zojambula.
Pano, kuwonjezera pa kujambula zokambirana, tidzakhazikitsa kusintha FullFname.
Set(FullFname=${URLRECORDS}/${datedir}/${fname}.mp3);
Imasunga ulalo wathunthu ku fayilo inayake (macro amatchedwa paliponse).
Tiyeni tiwunikenso kuyimba komwe kumatuluka:
_. => {
&recording(${CALLERID(number)},${EXTEN});
Set(__CallIntNum=${CALLERID(num)})
Set(CallStart=${STRFTIME(epoch,,%s)});
Dial(SIP/${EXTEN}@toOurAster,,t);
Hangup();
}
h => {
Set(CDR_PROP(disable)=true);
Set(CallStop=${STRFTIME(epoch,,%s)});
Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)});
if(${ISNULL(${CallMeDISPOSITION})}) {
Set(CallMeDISPOSITION=${CDR(disposition)});
}
System(curl -s http://pbx.vistep.ru/CallMeOut.php --data action=sendcall2b24 --data call_id=${CallMeCALL_ID} --data-urlencode FullFname=${FullFname} --data CallIntNum=${CallIntNum} --data CallDuration=${CallMeDURATION} --data-urlencode CallDisposition=${CallMeDISPOSITION});
}
Tinene kuti tikuyimba 89991234567, choyamba tifika apa:
&recording(${CALLERID(number)},${EXTEN});
izo. Nkhani yojambulira macro imatchedwa ndipo zosintha zofunika zimayikidwa.
anapitiriza
Set(__CallIntNum=${CALLERID(num)})
Set(CallStart=${STRFTIME(epoch,,%s)});
Timalemba yemwe adayambitsa kuyimba ndikujambulitsa nthawi yoyimba.
Ndipo akamaliza, mu nkhani yapadera h
h => {
Set(CDR_PROP(disable)=true);
Set(CallStop=${STRFTIME(epoch,,%s)});
Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)});
if(${ISNULL(${CallMeDISPOSITION})}) {
Set(CallMeDISPOSITION=${CDR(disposition)});
}
System(curl -s http://pbx.vistep.ru/CallMeOut.php --data action=sendcall2b24 --data call_id=${CallMeCALL_ID} --data-urlencode FullFname=${FullFname} --data CallIntNum=${CallIntNum} --data CallDuration=${CallMeDURATION} --data-urlencode CallDisposition=${CallMeDISPOSITION});
}
zimitsani kulowa patebulo la CDR pakukulitsa uku (sikufunikira pamenepo), ikani nthawi yomaliza ya kuyimba, kuwerengera nthawi, ngati zotsatira za kuyimba sizidziwika - khazikitsani (zosinthika). CallMeDISPOSITION) ndipo, sitepe yotsiriza, tumizani chirichonse ku Bitrix kudzera mu curl dongosolo.
Ndipo matsenga ochulukirapo - kuyimba foni:
888999 => {
&recording(${CALLERID(number)},${EXTEN});
Answer();
ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp()); // Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ CallerID Π΅ΡΠ»ΠΈ ΡΠ·Π½Π°Π»ΠΈ Π΅Π³ΠΎ Ρ ΠΠΈΡΡΠΈΠΊΡ24
Set(CallStart=${STRFTIME(epoch,,%s)}); // Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΎΡΡΡΠ΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π²ΠΎΠ½ΠΊΠ°
Queue(Q1,tT);
Set(CallMeDISPOSITION=${CDR(disposition)});
Hangup();
}
Pano tikungofuna mzere umodzi wokha.
ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp());
Amauza PBX kukhazikitsa CallerID(dzina) zofanana ndi kusintha CallMeCallerIDName.
CallMeCallerIDName yosinthika yokha, nayonso, imayikidwa ndi CallMe application (ngati Bitrix24 ili ndi dzina lonse la nambala ya woyimbirayo, ikani ngati CallerID(dzina), ayi - sitingachite chilichonse).
Kukonzekera kwa pulogalamu
Fayilo yosinthira ntchito - /var/www/pbx.vistep.ru/config.php
Kufotokozera kwa magawo ogwiritsira ntchito:
- CallMeDEBUG - ngati 1, ndiye kuti zochitika zonse zomwe zikugwiritsidwa ntchito zidzalembedwa ku fayilo ya log, 0 - sitilemba kalikonse
- chatekinoloje - SIP/PJSIP/IAX/etc
- authToken - Chizindikiro chovomerezeka cha Bitrix24, code yovomerezeka ya webhook yotuluka
- bitrixApiUrl - URL ya webhook yomwe ikubwera, yopanda mbiri/
- zowonjezera - mndandanda wa manambala akunja
- nkhani - nkhani yoyambira kuyimba
- omvera_timeout - Kuthamanga kwa zochitika kuchokera ku asterisk
- asterisk - mndandanda wokhala ndi zoikamo zolumikizira nyenyezi:
- khamu - ip kapena dzina la alendo la seva ya asterisk
- ndondomeko - chithunzi cholumikizira (tcp://, tls://)
- doko - doko
- lolowera - Dzina lolowera
- chinsinsi - password
- connect_timeout - kugwirizana kwatha
- read_timeout - werengani nthawi yomaliza
Fayilo yachitsanzo:
<?php
return array(
'CallMeDEBUG' => 1, // Π΄Π΅Π±Π°Π³ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π»ΠΎΠ³Π΅: 1 - ΠΏΠΈΡΠ΅ΠΌ, 0 - Π½Π΅ ΠΏΠΈΡΠ΅ΠΌ
'tech' => 'SIP',
'authToken' => 'xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6', //ΡΠΎΠΊΠ΅Π½ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π±ΠΈΡΡΠΈΠΊΡΠ°
'bitrixApiUrl' => 'https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/', //url ΠΊ api Π±ΠΈΡΡΠΈΠΊΡΠ° (Π²Ρ
ΠΎΠ΄ΡΡΠΈΠΉ Π²Π΅Π±Ρ
ΡΠΊ)
'extentions' => array('888999'), // ΡΠΏΠΈΡΠΎΠΊ Π²Π½Π΅ΡΠ½ΠΈΡ
Π½ΠΎΠΌΠ΅ΡΠΎΠ², ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ
'context' => 'dial_out', //ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°ΡΠΈΠΈ Π·Π²ΠΎΠ½ΠΊΠ°
'asterisk' => array( // Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π°ΡΡΠ΅ΡΠΈΡΠΊΡ
'host' => '10.100.111.249',
'scheme' => 'tcp://',
'port' => 5038,
'username' => 'callme',
'secret' => 'JD3clEB8_f23r-3ry84gJ',
'connect_timeout' => 10000,
'read_timeout' => 10000
),
'listener_timeout' => 300, //ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΎΡ asterisk
);
Kupanga kwa woyang'anira
Woyang'anira amagwiritsidwa ntchito poyambitsa ndondomeko yothandizira zochitika kuchokera ku Asterisk CallMeIn.php, yomwe imayang'anira mafoni omwe akubwera ndikuyanjana ndi Bitrix24 (khadi lowonetsera, khadi lobisala, etc.).
Fayilo yokonzekera kuti ipangidwe:
/etc/supervisord.d/callme.conf
[program:callme]
command=/usr/bin/php CallMeIn.php
directory=/var/www/pbx.vistep.ru
autostart=true
autorestart=true
startretries=5
stderr_logfile=/var/www/pbx.vistep.ru/logs/daemon.log
stdout_logfile=/var/www/pbx.vistep.ru/logs/daemon.log
Yambitsani ndikuyambitsanso pulogalamuyi:
supervisorctl start callme
supervisorctl restart callme
Kuwona momwe pulogalamuyo ikugwirira ntchito:
supervisorctl status callme
callme RUNNING pid 11729, uptime 17 days, 16:58:07
Pomaliza
Zinakhala zovuta kwambiri, koma ndikutsimikiza kuti woyang'anira wodziwa bwino azitha kugwiritsa ntchito ndikusangalatsa ogwiritsa ntchito ake.
Monga momwe analonjezera,
Mafunso, malingaliro - chonde asiye mu ndemanga. Komanso, ngati muli ndi chidwi ndi momwe chitukuko cha kuphatikiza uku chinayendera, lembani, ndipo m'nkhani yotsatira ndidzayesa kuwulula zonse mwatsatanetsatane.
Source: www.habr.com