แฅแกแแแก แแฅแแก IP-PBX Asterisk-แแกแ แแ CRM Bitrix24-แแก แแแขแแแ แแชแแแก แกแฎแแแแแกแฎแแ แแแ แแแแขแแแ, แแแแ แแ แฉแแแ, แแแฃแฎแแแแแแ แแแแกแ, แแแแแแฌแงแแแขแแ แกแแแฃแแแ แ แแแแแก แแแฌแแ แ.
แคแฃแแฅแชแแแแแแฃแ แแ, แงแแแแแคแแ แ แกแขแแแแแ แขแฃแแแ:
- Bitrix24-แจแ แแแแแแขแแก แขแแแแคแแแแก แแแแ แแก แแแฃแแแ แแแฌแแแแฃแแแแแ, Asterisk แแแแแจแแ แแแก แแแแฎแแแ แแแแแก แจแแแ แแแแแ แก, แ แแแแแก แกแแฎแแแแแแช แแก แแแฌแแแแฃแแแแ แแแแฎแแ แชแแแแแ แแแแแแขแแก แขแแแแคแแแแก แแแแแ แแแ. Bitrix24-แจแ แฉแแแฌแแ แแแ แแแ แแก แฉแแแแฌแแ แ, แฎแแแ แแแ แแก แแแกแแกแ แฃแแก, แกแแฃแแ แแก แฉแแแแฌแแ แ แแแแฆแแแฃแแแ.
- Asterisk-แแ แแแ แ แแแแแก แแแ แแแแ - Bitrix24 แแแขแแ แคแแแกแจแ แแแแแแขแแก แแแ แแแก แแฃแฉแแแแแแ แแแแแแจแ แแแแแก, แ แแแแแก แแแแแ แแแช แแก แแแ แ แแแแแแ.
แแฃ แแกแแแ แแแแแแขแ แแ แแ แแก, แแแฎแกแแแแ แแแ แแแ แแฎแแแ แแแแแ แแก แจแแกแแฅแแแแแแ.
แ แแแแ แช แแ แแแ แ แแแกแ แฃแแแแแ, แฉแแแ แแแแก แแกแแฎแแแ แแแ แแแจแ แแ แแแฆแแแ แกแแฃแแ แแก แฉแแแแฌแแ แก.
แญแ แแก แฅแแแจ, แแ แแแขแงแแแ, แแฃ แ แแแแ แฃแแแ แแแแงแแแแ แงแแแแแคแแ แ แแฅแแแแแแแก แแ แแแแชแแ แแแฃแแ github-แแ - แแแแฎ, แแแแฎ, แแแฆแแ แแ แแแแแแงแแแแ แแแ!
แแแแแแ แแฆแฌแแ แ
แฉแแแ แแแแแ แฅแแแ แฉแแแแก แแแขแแแ แแชแแแก CallMe. CallMe แแ แแก แแแขแแ แ แแแ แแแแแแแชแแ แแแฌแแ แแแ PHP-แแ.
แแแแแงแแแแแฃแแ แขแแฅแแแแแแแแแ แแ แกแแ แแแกแแแ
- PHP 5.6
PHP AMI แแแแแแแแแแ - แแแแแแแแแฅแขแแแแก
- nginx + php fpm
- แแแแแแฎแแแแแแแก
- AMI (แแกแขแแ แแแแก แแแแแฏแแ แแก แแแขแแ แคแแแกแ)
- Bitrix webhooks (แแแแแ แขแแแแแฃแแ REST API แแแแแ แแแ)
แฌแแแแกแฌแแ แแแงแแแแแ
แกแแ แแแ แแ Asterisk-แแ แฃแแแ แแแแแแกแขแแแแ แแ แแแ แกแแ แแแ แ (แแแแฅแแก nginx + php-fpm), แแแแแแฎแแแแแแ แแ git.
แแแกแขแแแแชแแแก แแ แซแแแแแ (CentOS):
yum install nginx php-fpm supervisor git
แฉแแแ แแแแแแชแแแ แแแ แกแแ แแแ แแ แฎแแแแแกแแฌแแแแ แแแ แแฅแขแแ แแแก, แแแฆแแแ แแแแแแแชแแแก git-แแแ แแ แแแงแแแแแ แกแแญแแ แ แฃแคแแแแแแก แกแแฅแแฆแแแแแแ:
cd /var/www
git clone https://github.com/ViStepRU/callme.git
chown nginx. -R callme/
แจแแแแแแ, แแแแแแแคแแแฃแ แแ แแ nginx, แกแแแแช แฉแแแแ แแแแคแแแฃแ แแชแแ แแแแแแ แแแแก
/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;
}
}
แแแแคแแแฃแ แแชแแแก แแแแแแแก, แฃแกแแคแ แแฎแแแแแก แกแแแแแฎแแแก, แกแแ แแแคแแแแขแแก แแแแแแแแแก แแ แแแ แกแแ แแแ แแก แแ แฉแแแแก แแ แกแขแแขแแแก แคแแ แแแแแก แแแ แแ แแแแขแแแแ - แแแแก แจแแกแแฎแแ แแแแ แ แแแแฌแแ แ. แแแแแแแชแแแก แแ แแฅแแก แจแแแฆแฃแแแแแ, แแฃแจแแแแก แ แแแแ แช http-แแ, แแกแแแ https-แแ.
แฉแแแ แแแแฅแแก https, แแแแแ แแแแจแแคแ แแ แกแแ แขแแคแแแแขแ.
แแฃ แงแแแแแคแแ แ แกแฌแแ แแ แแแแแแแ, แแแจแแ แแแฃแแแ แแแญแแ แแ แฃแแแ แแแฎแแ แแกแแแแกแ แ แแ
Bitrix24-แแก แแแงแแแแแ
แแแแแ แจแแแฅแแแแ แแ แ แแแแฐแฃแแ.
แจแแแแแแแแแ webhook.
แแแแแแแกแขแ แแขแแ แแก แแแแแ แแจแแก แฅแแแจ (ID 1-แแ) แแแแแ แแ แแแ: แแแแแแแชแแแแ -> แแแแฐแฃแแแแ -> แแแแฐแฃแแแก แแแแแขแแแ -> แจแแแแแแแแแ แแแแฐแฃแแ
แจแแแแกแแ แจแแแแแแแแแ webhook-แแก แแแ แแแแขแ แแแ, แ แแแแ แช แแแ แแแแก แกแฃแ แแแแแจแ:
แแ แแแแญแแ แแ แจแแแแฎแแแก.
แจแแแแฎแแแก แจแแแแแ, Bitrix24 แแแแแฌแแแแ แจแแแแแแแแแ แแแแฐแฃแแแก URL-แก, แแแแแแแแแ:
แจแแแแแฎแแ URL-แแก แแฅแแแแ แแแ แกแแ แแแแ /แแ แแคแแแแก/ แแแ แแจแ - แแก แแแแแงแแแแแฃแแ แแฅแแแแ แแแแแแแชแแแจแ แจแแแแแแแแ แแแ แแแแแ แแฃแจแแแแแกแแแแก.
แแแฅแแก https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/
แแแแแแแแ webhook.
แแ แแแ แแแแแ -> Webhooks -> แแแแแขแแแ Webhook -> Outgoing Webhook
แแแขแแแแแ แแแชแแแฃแแแ แแแ แแแแก แกแฃแ แแแแแแ:
แจแแแแแฎแแ แแ แแแแฆแแ แแแขแแ แแแแชแแแก แแแแ
แแแฅแแก xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6
. แแฅแแแ แแกแแแ แฃแแแ แแแแแแแแ แแ แแแ แกแแแฃแแแ แแแแก, แกแแญแแ แแ แแแแแแแแ แแแ แแแแก แแแแกแแฎแแ แชแแแแแแแแ.
แแแแจแแแแแแแแแแ!
ssl แกแแ แแแคแแแแขแ แฃแแแ แแงแแก แแแแคแแแฃแ แแ แแแฃแแ Bitrix24 แกแแ แแแ แแ (แจแแแแซแแแแ แแแแแแงแแแแ letsencrypt), แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ BitrixXNUMX api แแ แแแฃแจแแแแแก. แแฃ แแฅแแแ แแแฅแแ แฆแ แฃแแแแแแแ แแแ แกแแ, แแ แแแแ แแแฃแแแ - ssl แฃแแแ แแ แกแแแแแก.
แแแแจแแแแแแแแแแ!
"แแ แแชแแกแแ แแก แแแกแแแแ แแ" แแแแจแ แฃแแแ แแงแแก แแแแแแแแฃแแ แแแขแแ แแแขแแแแ แฎแแแแแกแแฌแแแแแ แแแกแแแแ แแ!
แแ แกแแแแแแ แจแแฎแแแแ, แแแแแ แแแแแแแกแขแแแแ แแ แฉแแแแ CallMeOut, แ แแแแ แช แแแ แแก แแแแฎแแ แชแแแแแแแก แแแแแแแชแแ (แแกแ แ แแ PBX-แแ แแแแแ แแ แแแฌแแแแฃแแแแแ, แแแ แแก แฌแแ แแแจแแแแก แแ แซแแแแแ แแแแแแ).
แแแแแฃแจแ แแแ แฉแแแ: แแแขแ -> แขแแแแคแแแ -> แแแขแ -> แแแ แแแแขแ แแแ, แแแแงแแแแ "แแแแแ แ แแแแแแแแ แแแ แแแแกแแแแก แแแแฃแแแกแฎแแแแแ" แแแแแแแชแแ: CallMeOut แแ แแแแญแแ แแ "แจแแแแฎแแแก"
แแแ แกแแแแแแแก แแแงแแแแแ
Asterisk-แกแ แแ Bitrix24-แก แจแแ แแก แฌแแ แแแขแแแฃแแ แฃแ แแแแ แแฅแแแแแแแกแแแแก, แฉแแแ แฃแแแ แแแแแแแขแแ callme AMI แแแแฎแแแ แแแแแ 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
แจแแแแแแ, แแ แแก แ แแแแแแแแ แฎแ แแแ, แ แแแแแแช แฃแแแ แแแแฎแแ แชแแแแแแก dialplan-แแก แแแแแงแแแแแแ (แฉแแแ แแแแฅแแก extensions.ael).
แแแแแแ แคแแแแก แแแแแงแแแ แแ แจแแแแแ แแแแแแ แขแแแแแก แแแแชแแ:
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});
}
};
แแแแแฌแงแแ แแแแแแแ: แแแ แแฅแขแแแ แแแแแแแแ.
แชแแแแแแแแ URL แฉแแแแฌแแ แแแ แแแแฎแแแก แกแแฃแแ แแก แฉแแแฌแแ แ แคแแแแแแแก URL-แก, แ แแแแแก แแแฎแแแแแแแช Bitrix24 แแแแงแแแแก แแแ แกแแแแแขแแฅแขแ แแแ แแแจแ.
แจแแแแแแ, แฉแแแ แแแแแแขแแ แแกแแแก แแแแ แ แแแแ แ แฉแแฌแแ แ.
แแฅ, แกแแฃแแ แแแแก แฉแแฌแแ แแก แแแ แแ, แฉแแแ แแแแแงแแแแแ แชแแแแแก FullFname.
Set(FullFname=${URLRECORDS}/${datedir}/${fname}.mp3);
แแก แแแแฎแแแก แกแ แฃแ URL-แก แแแแแ แแขแฃแ แคแแแแแ (แแแแ แ แงแแแแแแ แแฌแแแแแ).
แแแแแ แแแแแแแแแแแแ แแแแแแแแ แแแ แ:
_. => {
&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});
}
แแแแฃแจแแแ, แ แแ แแแแฃแ แแแแ 89991234567, แแแ แแแแ แ แแกแแช แแฅ แแแแแฆแแแ:
&recording(${CALLERID(number)},${EXTEN});
แแแแ. แแแแแแซแแฎแแแ แแแ แแก แฉแแฌแแ แแก แแแแ แ แแ แแแงแแแแแฃแแแ แกแแญแแ แ แชแแแแแแแ.
แจแแแแแแแ
Set(__CallIntNum=${CALLERID(num)})
Set(CallStart=${STRFTIME(epoch,,%s)});
แฉแแแ แฉแแแฌแแ แ แแแ แฌแแแแแฌแงแ แแแ แ แแ แฉแแแฌแแ แ แแแ แแก แแแฌแงแแแแก แแ แแก.
แแ แแแกแ แแแกแ แฃแแแแแก แจแแแแแ, แกแแแชแแแแฃแ แแแแขแแฅแกแขแจแ 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});
}
แแแแแ แแแ แฉแแแแฌแแ แ CDR แชแฎแ แแแจแ แแ แแแคแแ แแแแแแกแแแแก (แแก แแ แแ แแก แกแแญแแ แ แแฅ), แแแแงแแแแ แแแ แแก แแแกแ แฃแแแแแก แแ แ, แแแแแแแแแแ แฎแแแแ แซแแแแแแ, แแฃ แแแ แแก แจแแแแแ แฃแชแแแแแ - แแแแงแแแแ (แชแแแแแ แแแแแ แแแ DISPOSITION) แแ, แแแแ แแแแแฏแ, แแแฃแแแแแแ แงแแแแแคแแ แ Bitrix-แก แกแแกแขแแแแก curl-แแก แแแจแแแแแแ.
แแ แชแแขแ แแแขแ แแแแแ - แจแแแแแแแแแ แแแ แ:
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();
}
แแฅ แฉแแแ แแฎแแแแ แแ แแ แฎแแแ แแแแแแขแแ แแกแแแก.
ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp());
แแก แแแแแแก PBX-แแก แแแงแแแแแ แแแแแแแขแแก ID (แกแแฎแแแ) แชแแแแแ CallMeCallerIDName.
แแแแแ CallMeCallerIDName แชแแแแแ, แแแแแก แแฎแ แแ, แแแงแแแแแฃแแแ CallMe แแแแแแแชแแแก แแแแ (แแฃ Bitrix24-แก แแฅแแก แแแแแแแขแแก แแแแ แแก แกแ แฃแแ แกแแฎแแแ, แฉแแแ แแแแแงแแแแแ แแแก, แ แแแแ แช แแแแแแแขแแก ID (แกแแฎแแแ), แแ แ - แแ แแคแแ แก แแแแแแแแแแ).
แแแแแแแชแแแก แแแงแแแแแ
แแแแแแแชแแแก แแแ แแแแขแ แแแแก แคแแแแ - /var/www/pbx.vistep.ru/config.php
แแแแแชแฎแแแแก แแแ แแแแขแ แแแแก แแฆแฌแแ แ:
- CallMeDEBUG - แแฃ 1, แแแจแแ แแแแแแแชแแแก แแแแ แแแแฃแจแแแแแฃแแ แงแแแแ แแแแแแแ แฉแแแฌแแ แแแ แแฃแ แแแแแก แคแแแแจแ, 0 - แฉแแแ แแ แแคแแ แก แแฌแแ แ
- Tech SIP/PJSIP/IAX/แ.แจ
- authToken โ Bitrix24 แแแขแแ แแแแชแแแก แแแขแแแ, แแแแแแแแ webhook แแแขแแ แแแแชแแแก แแแแ
- bitrixApiUrl โ แจแแแแแแแแแ webhook-แแก URL, แแ แแคแแแแก แแแ แแจแ/
- แแแคแแ แแแแแแแ - แแแ แ แแแแ แแแแก แกแแ
- แแแแขแแฅแกแขแจแ - แแแ แแก แฌแแ แแแจแแแแก แแแแขแแฅแกแขแ
- listener_timeout - แแแแแแแแก แแแแฃแจแแแแแแก แกแแฉแฅแแ แ แแแ แกแแแแแแแแแ
- แแแ แกแแแแแแ - แแแกแแแ แแแ แกแแแแแแแแ แแแแจแแ แแก แแแ แแแแขแ แแแแ:
- แแแกแแแแซแแแ - แแแ แกแแแแแแแก แกแแ แแแ แแก ip แแ แฐแแกแขแแก แกแแฎแแแ
- แกแฅแแแ - แแแแจแแ แแก แแแแแ แแแ (tcp://, tls://)
- แแแ แขแ - แแแ แขแ
- แแแแฎแแแ แแแแแก แกแแฎแแแ - แแแแฎแแแ แแแแแก แกแแฎแแแ
- แกแแแแฃแแแ - แแแ แแแ
- connect_timeout - แแแแจแแ แแก แแ แ แแแแแฌแฃแ แ
- read_timeout - แฌแแแแแแฎแแ แแ แ
แแแ แแแแขแ แแแแก แคแแแแแก แแแแแแแแ:
<?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
);
แแแแแแฎแแแแแแแก แแแงแแแแแ
แแแแแแฎแแแแแแ แแแแแแงแแแแแ Asterisk CallMeIn.php แฆแแแแกแซแแแแแก แแแแแฃแจแแแแแแแก แแ แแชแแกแแก แแแกแแจแแแแแ, แ แแแแแแช แแแแแขแ แแแแแก แจแแแแแแแแ แแแ แแแก แแ แฃแ แแแแ แแฅแแแแแแก Bitrix24-แแแ (แแฉแแแแ แแแ แแแ, แแแแแแ แแแ แแแ แแ แ.แจ.).
แแแ แแแแขแ แแแแก แคแแแแ แจแแกแแฅแแแแแแ:
/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
แแแแแแแชแแแก แแแฌแงแแแ แแ แแแแแขแแแ แแแ:
supervisorctl start callme
supervisorctl restart callme
แแฎแแแแ แแแแแชแฎแแแแก แกแขแแขแฃแกแ:
supervisorctl status callme
callme RUNNING pid 11729, uptime 17 days, 16:58:07
แแแกแแแแ
แกแแแแแแ แ แแฃแแ แแฆแแแฉแแแ, แแแแ แแ แแแ แฌแแฃแแแแฃแแ แแแ , แ แแ แแแแแชแแแแ แแแแแแแกแขแ แแขแแ แ แจแแซแแแแก แแแแแ แแแก แแ แแแแฎแแ แแก แแแแแกแ แแแแฎแแแ แแแแแแ.
แ แแแแ แช แแแแแ แแ,
แแแแฎแแแแ, แฌแแแแแแแแแแแ - แแแฎแแแ แแแแแแขแแ แแแจแ. แแกแแแ, แแฃ แแแแแขแแ แแกแแแ แ แแแแ แฌแแ แแแแ แแ แแ แแแขแแแ แแชแแแก แแแแแแแแ แแแ, แแแฌแแ แแ แแ แจแแแแแ แกแขแแขแแแจแ แแแชแแแแ แฃแคแ แ แแแขแแแฃแ แแ แแแแแแฎแแแแ แงแแแแแคแแ แ.
แฌแงแแ แ: www.habr.com