เชจเซเชเชตเชฐเซเช เชชเชฐ IP-PBX Asterisk เช
เชจเซ CRM Bitrix24 เชจเซ เชเชเซเชเซเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชตเชฟเชตเชฟเชง เชตเชฟเชเชฒเซเชชเซ เชเซ, เชชเชฐเชเชคเซ เช
เชฎเซ เชนเชเซ เชชเชฃ เช
เชฎเชพเชฐเซเช เชชเซเชคเชพเชจเซเช เชฒเชเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช เชเซ.
เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพเชจเชพ เชธเชเชฆเชฐเซเชญเชฎเชพเช, เชฌเชงเซเช เชชเซเชฐเชฎเชพเชฃเชญเซเชค เชเซ:
- Bitrix24 เชฎเชพเช เชเซเชฒเชพเชฏเชเชเชจเชพ เชซเซเชจ เชจเชเชฌเชฐ เชธเชพเชฅเซเชจเซ เชฒเชฟเชเช เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซเชจเซ, Asterisk เช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเชพ เชเชเชคเชฐเชฟเช เชจเชเชฌเชฐเชจเซ เชเซเชกเซ เชเซ เชเซเชจเชพ เชตเชคเซ เชเซเชฒเชพเชฏเชจเซเชเชจเชพ เชซเซเชจ เชจเชเชฌเชฐ เชธเชพเชฅเซ เชเซเชฒเชฟเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช. Bitrix24 เชฎเชพเช, เชเซเชฒเชจเซ เชฐเซเชเซเชฐเซเชก เชฐเซเชเซเชฐเซเชก เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช เชจเซ, เชเซเชฒเชจเชพ เช เชเชคเซ, เชตเชพเชคเชเซเชคเชจเซเช เชฐเซเชเซเชฐเซเชกเชฟเชเช เชเซเชเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
- เชซเซเชฆเชกเซเชจเซ เชฌเชนเชพเชฐเชฅเซ เชเซเชฒ เชเชตเซ เชเซ - Bitrix24 เชเชจเซเชเชฐเชซเซเชธเชฎเชพเช เช
เชฎเซ เชคเซ เชเชฐเซเชฎเชเชพเชฐเซเชจเซ เชเซเชฒเชพเชฏเชเช เชเชพเชฐเซเชก เชฌเชคเชพเชตเซเช เชเซเช เชเซเชจเชพ เชจเชเชฌเชฐ เชชเชฐ เช เชเซเชฒ เชเชตเซเชฏเซ เชนเชคเซ.
เชเซ เชเชตเซ เชเซเช เชเซเชฒเชพเชฏเชจเซเช เชจ เชนเซเชฏ, เชคเซ เช เชฎเซ เชจเชตเซ เชฒเซเชก เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชเชพเชฐเซเชก เชเซเชฒเซเชถเซเช.
เชเชฒเชฆเซ เชเซเชฒ เชชเซเชฐเซเชฃ เชฅเชพเชฏ เชเซ, เช เชฎเซ เชคเซเชจเซ เชเชพเชฐเซเชก เชชเชฐ เชชเซเชฐเชคเชฟเชฌเชฟเชเชฌเชฟเชค เชเชฐเซเช เชเซเช เช เชจเซ เชตเชพเชคเชเซเชคเชจเซเช เชฐเซเชเซเชฐเซเชกเชฟเชเช เชเซเชเชเซเช เชเซเช.
เชเชเชจเซ เชจเซเชเซ เชนเซเช เชคเชฎเชจเซ เชเชนเซเชถ เชเซ เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชฌเชงเซเช เชเซเชตเซ เชฐเซเชคเซ เชธเซเช เชเชฐเชตเซเช เช
เชจเซ เชคเชฎเชจเซ เชเซเชฅเชฌเชจเซ เชฒเชฟเชเช เชเชชเชตเซ - เชนเชพ, เชนเชพ, เชคเซ เชฒเซ เช
เชจเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ!
เชธเชพเชฎเชพเชจเซเชฏ เชตเชฐเซเชฃเชจ
เช เชฎเซ เช เชฎเชพเชฐเชพ เชเชเซเชเชฐเชฃเชจเซ CallMe เชเชนเซ เชเซ. CallMe เช PHP เชฎเชพเช เชฒเชเซเชฒเซ เชเช เชจเชพเชจเซ เชตเซเชฌ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเซ.
เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเซ เชเซเชเซเชจเซเชฒเซเชเซ เช เชจเซ เชธเซเชตเชพเช
- PHP, 5.6
PHP AMI เชชเซเชธเซเชคเชเชพเชฒเชฏ - เชฐเชเชฏเชฟเชคเชพ
- Nginx + php-fpm
- เชธเซเชชเชฐเชตเชพเชเชเชฐ
- AMI (เชเชธเซเชเซเชฐเชฟเชธเซเช เชฎเซเชจเซเชเชฐ เชเชจเซเชเชฐเชซเซเชธ)
- Bitrix เชตเซเชฌเชนเซเชเซเชธ (เชธเชฐเชณ REST API เช เชฎเชฒเซเชเชฐเชฃ)
เชชเซเชฐเซเชธเซเชเซเชเช
Asterisk เชธเชพเชฅเซเชจเชพ เชธเชฐเซเชตเชฐ เชชเชฐ, เชคเชฎเชพเชฐเซ เชตเซเชฌ เชธเชฐเซเชตเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ (เช เชฎเชพเชฐเชพ เชฎเชพเชเซ เชคเซ nginx+php-fpm เชเซ), เชธเซเชชเชฐเชตเชพเชเชเชฐ เช เชจเซ git.
เชเชจเซเชธเซเชเซเชฒเซเชถเชจ เชเชฆเซเชถ (CentOS):
yum install nginx php-fpm supervisor 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 เชธเซเช เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ
เชเชพเชฒเซ เชฌเซ เชตเซเชฌเชนเซเช เชฌเชจเชพเชตเซเช.
เชเชจเชเชฎเชฟเชเช เชตเซเชฌเชนเซเช.
เชเชกเชฎเชฟเชจเชฟเชธเซเชเซเชฐเซเชเชฐ เชเชเชพเชเชจเซเช เชนเซเช เชณ (เชเชเชกเซ 1 เชธเชพเชฅเซ), เชชเชพเชฅเชจเซ เช เชจเซเชธเชฐเซ: เชเชชเซเชฒเชฟเชเซเชถเชจเซเชธ -> เชตเซเชฌเชนเซเชเซเชธ -> เชตเซเชฌเชนเซเช เชเชฎเซเชฐเซ -> เชเชจเชเชฎเชฟเชเช เชตเซเชฌเชนเซเช
เชธเซเชเซเชฐเซเชจเชถเซเชเซเชธเชจเซ เชเซเชฎ เชเชจเชเชฎเชฟเชเช เชตเซเชฌเชนเซเชเชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ เชญเชฐเซ:
เช
เชจเซ เชธเซเชต เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซ.
เชธเชพเชเชตเซเชฏเชพ เชชเชเซ, Bitrix24 เชเชจเชเชฎเชฟเชเช เชตเซเชฌเชนเซเชเชจเซเช URL เชชเซเชฐเชฆเชพเชจ เชเชฐเชถเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ:
เชคเชฎเชพเชฐเชพ URL เชจเชพ เชธเชเชธเซเชเชฐเชฃเชจเซ เช
เชเชคเชฟเชฎ /profile/ เชตเชฟเชจเชพ เชธเชพเชเชตเซ - เชคเซเชจเซ เชเชชเชฏเซเช เชเชจเชเชฎเชฟเชเช เชเซเชฒเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชฎเชพเช เชฅเชถเซ.
เชฎเชพเชฐเซ เชชเชพเชธเซ เช เชเซ https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/
เชเชเชเชเซเชเชเช เชตเซเชฌเชนเซเช.
เชเชชเซเชฒเชฟเชเซเชถเชจเซเชธ -> เชตเซเชฌเชนเซเช -> เชตเซเชฌเชนเซเช เชเชฎเซเชฐเซ -> เชเชเชเชเซเชเชเช เชตเซเชฌเชนเซเช
เชตเชฟเชเชคเซ เชซเชฐเซเชฅเซ เชธเซเชเซเชฐเซเชจเชถเซเช เชชเชฐ เชเซ:
เช
เชงเชฟเชเซเชคเชคเชพ เชเซเชก เชธเชพเชเชตเซ เช
เชจเซ เชชเซเชฐเชพเชชเซเชค เชเชฐเซ
เชฎเชพเชฐเซ เชชเชพเชธเซ เช เชเซ xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6
. เชคเชฎเชพเชฐเซ เชคเซเชจเซ เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชชเชฃ เชเซเชชเชฟ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ; เชคเชฎเชพเชฐเซ เชเชเชเชเซเชเชเช เชเซเชฒเซเชธ เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซเชจเซ เชเชฐเซเชฐ เชเซ.
เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ!
SSL เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ Bitrix24 เชธเชฐเซเชตเชฐ เชชเชฐ เชเซเช เชตเซเชฒเซเช เชนเซเชตเซเช เชเซเชเช (เชคเชฎเซ letsencrypt เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ), เช เชจเซเชฏเชฅเชพ Bitrix api เชเชพเชฎ เชเชฐเชถเซ เชจเชนเซเช. เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ เชเซเชฒเชพเชเชก เชตเชฐเซเชเชจ เชเซ, เชคเซ เชเชฟเชเชคเชพ เชเชฐเชถเซ เชจเชนเซเช - เชคเซเชฎเชพเช เชชเชนเซเชฒเซเชฅเซ เช ssl เชเซ.
เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ!
"เชชเซเชฐเซเชธเซเชธเชฐ เชธเชฐเชจเชพเชฎเซเช" เชซเซเชฒเซเชกเชฎเชพเช เชเชจเซเชเชฐเชจเซเช เชชเชฐเชฅเซ เชเชเซเชธเซเชธ เชเชฐเซ เชถเชเชพเชฏ เชคเซเชตเซเช เชธเชฐเชจเชพเชฎเซเช เชนเซเชตเซเช เชเชตเชถเซเชฏเช เชเซ!
เช เชจเซ เช เชเชคเชฟเชฎ เชธเซเชชเชฐเซเชถ เชคเชฐเซเชเซ, เชเชพเชฒเซ เชเซเชฒ เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชคเชฐเซเชเซ เช เชฎเชพเชฐเชพ CallMeOut เชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเช (เชเซเชฅเซ เชเซเชฏเชพเชฐเซ เชคเชฎเซ PBX เชชเชฐเชจเชพ เชจเชเชฌเชฐ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชเซเชฒ เชถเชฐเซ เชเชฐเชตเชพเชจเซ เชเชฆเซเชถ เชฆเซเชฐ เชฅเช เชเชถเซ).
เชฎเซเชจเซเชฎเชพเช, เชชเชธเชเชฆ เชเชฐเซ: เชตเชงเซ -> เชเซเชฒเชฟเชซเซเชจเซ -> เชตเชงเซ -> เชธเซเชเชฟเชเชเซเชธ, "เชกเชฟเชซเซเชฒเซเช เชเชเชเชเซเชเชเช เชเซเชฒ เชจเชเชฌเชฐ" เชเชชเซเชฒเชฟเชเซเชถเชจเชฎเชพเช เชธเซเช เชเชฐเซ: CallMeOut เช เชจเซ "เชธเชพเชเชตเซ" เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซ.
เชซเซเชฆเชกเซ เชธเซเชฏเซเชเชฟเชค เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
Asterisk เช เชจเซ Bitrix24 เชตเชเซเชเซ เชธเชซเชณ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชฎเชพเชเซ, เช เชฎเชพเชฐเซ manager.conf เชฎเชพเช AMI เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ callme เชเชฎเซเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
[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
เชเชเชณ, เชคเซเชฏเชพเช เชเชฃเซ เชฏเซเชเซเชคเชฟเช เชเซ เชเซเชจเซ เช เชฎเชฒ เชกเชพเชฏเชฒเชชเซเชฒเชพเชจ เชฆเซเชตเชพเชฐเชพ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ (เช เชฎเชพเชฐเชพ เชฎเชพเชเซ เช 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});
}
};
เชเชพเชฒเซ เชถเชฐเซเชเชคเชฅเซ เชถเชฐเซ เชเชฐเซเช: เชจเชฟเชฐเซเชฆเซเชถเช เชเซเชฒเซเชฌเชฒเซเชธ.
เชเชฒ URLRECORDS URL เชจเซ เชตเชพเชฐเซเชคเชพเชฒเชพเชช เชฐเซเชเซเชฐเซเชกเชฟเชเช เชซเชพเชเชฒเซเชฎเชพเช เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเซ เชเซ, เชเซ เชฎเซเชเชฌ Bitrix24 เชคเซเชฎเชจเซ เชธเชเชชเชฐเซเช เชเชพเชฐเซเชกเชฎเชพเช เชเซเชเชเซ เชฒเซเชถเซ.
เชเชเชณ เชเชชเชฃเซ เชฎเซเชเซเชฐเซ เชฎเซเชเซเชฐเซเชฎเชพเช เชฐเชธ เชงเชฐเชพเชตเซเช เชเซเช เชฐเซเชเซเชฐเซเชกเชฟเชเช.
เช เชนเซเช, เชตเชพเชคเชเซเชค เชฐเซเชเซเชฐเซเชก เชเชฐเชตเชพ เชเชชเชฐเชพเชเชค, เช เชฎเซ เชเชฒ เชธเซเช เชเชฐเซเชถเซเช เชชเซเชฐเซเชฃ เชจเชพเชฎ.
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 เชเซเชทเซเชเชเชฎเชพเช เชฐเซเชเซเชฐเซเชกเชฟเชเชเชจเซ เช เชเซเชทเชฎ เชเชฐเซ (เชคเซเชฏเชพเช เชคเซเชจเซ เชเชฐเซเชฐ เชจเชฅเซ), เชเซเชฒเชจเซ เช เชเชคเชฟเชฎ เชธเชฎเชฏ เชธเซเช เชเชฐเซ, เชธเชฎเชฏเชเชพเชณเชพเชจเซ เชเชฃเชคเชฐเซ เชเชฐเซ, เชเซ เชเซเชฒเชจเซเช เชชเชฐเชฟเชฃเชพเชฎ เชเชพเชฃเซเชคเซเช เชจ เชนเซเชฏ เชคเซ - เชธเซเช เชเชฐเซ (เชเชฒ CallMeDISPOSITION) เช เชจเซ, เชเซเชฒเซเชฒเซเช เชชเชเชฒเซเช, เชธเชฟเชธเซเชเชฎ เชเชฐเซเชฒ เชฆเซเชตเชพเชฐเชพ เชฌเชงเซเช Bitrix เชจเซ เชฎเซเชเชฒเซ.
เช เชจเซ เชฅเซเชกเซ เชตเชงเซ เชเชพเชฆเซ - เชเช เชเชจเชเชฎเชฟเชเช เชเซเชฒ:
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 เชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เชเชนเซ เชเซ CallerID(เชจเชพเชฎ) เชเชฒ เชธเชฎเชพเชจ CallMeCallerIDName.
CallMeCallerIDName เชเชฒ, เชฌเชฆเชฒเชพเชฎเชพเช, CallMe เชเชชเซเชฒเชฟเชเซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชธเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ (เชเซ Bitrix24 เชชเชพเชธเซ เชเซเชฒเชฐเชจเชพ เชจเชเชฌเชฐ เชฎเชพเชเซ เชชเซเชฐเซเช เชจเชพเชฎ เชนเซเชฏ, เชคเซ เชคเซเชจเซ เช เชฐเซเชคเซ เชธเซเช เชเชฐเซ CallerID(เชจเชพเชฎ), เชจเชพ - เช เชฎเซ เชเชเช เชเชฐเซเชถเซเช เชจเชนเซเช).
เชเชชเซเชฒเชฟเชเซเชถเชจ เชธเซเช เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ
เชเชชเซเชฒเชฟเชเซเชถเชจ เชธเซเชเชฟเชเชเซเชธ เชซเชพเชเชฒ - /var/www/pbx.vistep.ru/config.php
เชเชชเซเชฒเชฟเชเซเชถเชจ เชชเชฐเชฟเชฎเชพเชฃเซเชจเซเช เชตเชฐเซเชฃเชจ:
- เชเซเชฒเชฎเซเชกเซเชฌเช โ เชเซ 1 เชนเซเชฏ, เชคเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชพเชฏเซเชฒเซ เชฌเชงเซ เชเชเชจเชพเช เชฒเซเช เชซเชพเชเชฒเชฎเชพเช เชฒเชเชตเชพเชฎเชพเช เชเชตเชถเซ, 0 โ เช เชฎเซ เชเชเชเชชเชฃ เชฒเชเชคเชพ เชจเชฅเซ
- เชเซเช - SIP/PJSIP/IAX/etc
- authToken - Bitrix24 เช เชงเชฟเชเซเชคเชคเชพ เชเซเชเชจ, เชเชเชเชเซเชเชเช เชตเซเชฌเชนเซเช เช เชงเชฟเชเซเชคเชคเชพ เชเซเชก
- bitrixApiUrl - เชเชจเชเชฎเชฟเชเช เชตเซเชฌเชนเซเชเชจเซเช URL, เชชเซเชฐเซเชซเชพเชเชฒ เชตเชฟเชจเชพ/
- เชตเชฟเชธเซเชคเชฐเชฃ - เชฌเชพเชนเซเชฏ เชธเชเชเซเชฏเชพเชเชจเซ เชธเซเชเชฟ
- เชธเชเชฆเชฐเซเชญ - เชเซเชฒเชจเซ เชถเชฐเซเชเชค เชฎเชพเชเซ เชธเชเชฆเชฐเซเชญ
- เชถเซเชฐเซเชคเชพ_เชธเชฎเชฏเชธเชฎเชพเชชเซเชค - เชซเซเชฆเชกเซเชฎเชพเชเชฅเซ เชเชตเซเชจเซเช เชชเซเชฐเซเชธเซเชธเชฟเชเชเชจเซ เชเชกเชช
- เชคเชพเชฐเชพเชฎเชเชกเชณ - เชซเซเชฆเชกเซ เชธเชพเชฅเซ เชเชจเซเชเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชธเซเชเชฟเชเชเซเชธ เชธเชพเชฅเซเชจเซ เชเชฐเซ:
- เชฏเชเชฎเชพเชจ - เชเชธเซเชเชฐเชฟเชธเซเช เชธเชฐเซเชตเชฐเชจเซเช ip เช เชฅเชตเชพ เชนเซเชธเซเชเชจเชพเชฎ
- เชฏเซเชเชจเชพ - เชเชจเซเชเซเชถเชจ เชกเชพเชฏเชพเชเซเชฐเชพเชฎ (tcp://, tls://)
- เชชเซเชฐเซเช - เชฌเชเชฆเชฐ
- เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชจเชพเชฎ - เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชจเชพเชฎ
- เชเซเชชเซเชค - เชชเชพเชธเชตเชฐเซเชก
- เชเชจเซเชเซเช_เชเชพเชเชฎเชเชเช - เชเซเชกเชพเชฃ เชธเชฎเชฏเชธเชฎเชพเชชเซเชคเชฟ
- เชตเชพเชเชเชจ_เชธเชฎเชฏเชธเชฎเชพเชชเซเชค - เชธเชฎเชฏเชธเชฎเชพเชชเซเชค เชตเชพเชเชเซ
เชเชฆเชพเชนเชฐเชฃ เชธเซเชเชฟเชเชเซเชธ เชซเชพเชเชฒ:
<?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