
เบกเบตเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบฅเบงเบก IP-PBX Asterisk เปเบฅเบฐ CRM Bitrix24 เปเบเปเบเบทเบญเบเปเบฒเบ, เปเบเปเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบฑเบเบชเบดเบเปเบเบเบฝเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบญเบ.
เปเบเปเบเปเบเบญเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบกเบฒเบเบเบฐเบเบฒเบ:
- เปเบเบเบเบฒเบเบเบฅเบดเบเปเบชเปเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเปเบเบตเปเบเบฅเบฐเบชเบฑเบเบเบญเบเบฅเบนเบเบเปเบฒเปเบ Bitrix24, Asterisk เปเบเบทเปเบญเบกเบเปเปเบเบปเบงเปเบฅเบเบเบฒเบเปเบเบเบญเบเบเบนเปเปเบเปเบเบตเปเปเบเบฑเบเบเบปเบงเปเบเบเบเบญเบเบเบฒเบเบเบฅเบดเบเบเบฑเบเปเบเบตเปเบเบฅเบฐเบชเบฑเบเบเบญเบเบฅเบนเบเบเปเบฒ. เปเบ Bitrix24, เบเบฑเบเบเบถเบเบเบฒเบเปเบเบเบทเบเบเบฑเบเบเบถเบเปเบฅเบฐเปเบเบเบญเบเบเปเบฒเบเบเบญเบเบเบฒเบเปเบ, เบเบฒเบเบเบฑเบเบเบถเบเบเบฒเบเบชเบปเบเบเบฐเบเบฒเบเบทเบเบเบถเบเบเบถเปเบ.
- Asterisk เปเบเปเบฎเบฑเบเบเบฒเบเปเบเบเบฒเบเบเบฒเบเบเบญเบ - เปเบเบเบฒเบเปเบเปเบเบญเบ Bitrix24 เบเบงเบเปเบฎเบปเบฒเบชเบฐเปเบเบเบเบฑเบเบฅเบนเบเบเปเบฒเปเบซเปเบเบฑเบเบเบฐเบเบฑเบเบเบฒเบเบเบตเปเบกเบตเบเปเบฒเบเบงเบเบเบฒเบเปเบเบเบตเปเบกเบฒเบฎเบญเบ.
เบเปเบฒเบเปเปเบกเบตเบฅเบนเบเบเปเบฒเบเบฑเปเบเบเปเบฒเบง, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบตเบเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเปเบฒเบเบเบนเปเบเปเบฒเปเบซเบกเป.
เบเบฑเบเบเบตเบเบตเปเบเบฒเบเปเบเบชเปเบฒเปเบฅเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฐเบเปเบญเบเปเบซเปเปเบซเบฑเบเบเบตเปเบขเบนเปเปเบเบเบฑเบเปเบฅเบฐเบเบถเบเบเบถเปเบเบเบฑเบเบเบถเบเบเบฒเบเบชเบปเบเบเบฐเบเบฒ.
เบเปเบฒเบเบฅเบธเปเบกเบเบตเปเบเบฒเบเบเบฑเบเบเปเบญเบเบเบฐเบเบญเบเบเปเบฒเบเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบธเบเบขเปเบฒเบเบชเปเบฒเบฅเบฑเบเบเบปเบงเบเปเบฒเบเปเบญเบเปเบฅเบฐเปเบซเปเบเปเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบ github - เปเบกเปเบเปเบฅเปเบง, เปเบกเปเบเปเบฅเปเบง, เปเบญเบปเบฒเบกเบฑเบเปเบฅเบฐเปเบเปเบกเบฑเบ!
เบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเบปเปเบงเปเบ
เบเบงเบเปเบฎเบปเบฒเปเบญเบตเปเบเบงเปเบฒเบเบฒเบเบฅเบงเบกเบเบปเบงเบเบญเบเบเบงเบเปเบฎเบปเบฒ CallMe. CallMe เปเบเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบงเบฑเบเปเบเบเปเบเบฐเบซเบเบฒเบเบเปเบญเบเบเบตเปเบเบฝเบเปเบ PHP.
เปเบเบฑเบโเปเบโเปเบฅโเบเบตโเปเบฅเบฐโเบเบฒเบโเบเปโเบฅเบดโเบเบฒเบโเบเปเบฒโเปเบเปโ
- PHP 5.6
- เบเบฐ
- Nginx + php-fpm
- supervisor
- AMI (Asterisk Manager Interface)
- 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, config เบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบกเปเบเบขเบนเปเปเบ
/etc/nginx/conf.d/pbx.vistep.ru.confserver {
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;
}
}
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบญเบญเบเบเบฒเบ parsing config, เบเบฑเบเบซเบฒเบเบงเบฒเบกเบเบญเบเปเบ, เบเบฒเบเปเบเปเบฎเบฑเบเปเบเบขเบฑเปเบเบขเบทเบเปเบฅเบฐเปเบกเปเบเบฐเบเบฑเปเบเปเบฅเบทเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเปเบงเบฑเบเปเบเบเปเบเบตเปเบขเบนเปเบเบญเบเบเบญเบเปเบเบเบเบญเบเบเบปเบเบเบงเบฒเบก - เบซเบผเบฒเบเปเบเปเบเบทเบเบเบฝเบเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเป. เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเปเปเบกเบตเบเปเปเบเปเบฒเบเบฑเบ, เบกเบฑเบเปเบฎเบฑเบเบงเบฝเบเบซเบผเบฒเบเบเบงเปเบฒ http เปเบฅเบฐ https.
เบเบงเบเปเบฎเบปเบฒเปเบเป https, เปเบซเปเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเปเบเบขเบฑเปเบเบขเบทเบ.
เบเปเบฒเบเปเบฒเบเปเบฎเบฑเบเบเบธเบเบขเปเบฒเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเปเบเบเบเบฒเบเบเบฅเบดเบเปเบชเปเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเปเบฒเบเบเบงเบเปเบซเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบฑเปเบเบเบตเป

เบเบฒเบโเบเบฑเปเบโเบเปเบฒ Bitrix24
เปเบซเปเบชเปเบฒเบเบชเบญเบ webhooks.
webhook เปเบเบปเปเบฒเบกเบฒ.
เบเบฒเบเปเบเปเบเบฑเบเบเบตเบเบนเปเปเบเบดเปเบเปเบเบเบฅเบฐเบเบปเบ (เบกเบต id 1), เบเบฐเบเบดเบเบฑเบเบเบฒเบกเปเบชเบฑเปเบเบเบฒเบ: เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ -> Webhooks -> เปเบเบตเปเบก webhook -> webhook เปเบเบปเปเบฒเบกเบฒ.

เบเบทเปเบกเบเปเปเบกเบนเบเปเบชเปเปเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบญเบ webhook เบเบตเปเปเบเบปเปเบฒเบกเบฒเปเบเบเบฒเบเบซเบเปเบฒเบเป:


เปเบฅเบฐเบเบปเบเบเบฑเบเบเบถเบ.
เบซเบผเบฑเบเบเบฒเบเบเบฑเบเบเบถเบ, Bitrix24 เบเบฐเปเบซเป URL เบเบญเบ webhook เบเบตเปเปเบเบปเปเบฒเบกเบฒ, เบเบปเบงเบขเปเบฒเบ:

เบเบฑเบเบเบถเบเปเบงเบตเบเบฑเบเบเบญเบ URL เบเบญเบเบเปเบฒเบเปเบเบเบเปเปเบกเบต /profile/ เบชเบธเบเบเปเบฒเบ - เบกเบฑเบเบเบฐเบเบทเบเบเปเบฒเปเบเปเปเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเบทเปเบญเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบชเบฒเบเปเบเปเบเบปเปเบฒ.
เบเปเบญเบเบกเบตเบญเบฑเบเบเบตเป https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/
webhook เบเบฒเบญเบญเบ.
เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ -> Webhooks -> เปเบเบตเปเบก webhook -> webhook เบเบฒเบญเบญเบ
เบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบกเปเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบเบขเบนเปเปเบ screenshots:


เบเบฑเบเบเบถเบ เปเบฅเบฐเบฎเบฑเบเบฅเบฐเบซเบฑเบเบเบฒเบเบญเบฐเบเบธเบเบฒเบ

เบเปเบญเบเบกเบตเบญเบฑเบเบเบตเป xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. เบเบญเบเบเบฑเปเบเบเปเบฒเบเบเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบฑเบเบฅเบญเบเบกเบฑเบเบชเปเบฒเบฅเบฑเบเบเบปเบงเบเปเบฒเบเปเบญเบ;
เบชเปเบฒเบเบฑเบ!
เปเบเบขเบฑเปเบเบขเบทเบ SSL เบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเปเบเบตเบเปเบงเบต Bitrix24 (เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเป letsencrypt), เบเปเบฒเบเปเปเบเบฑเปเบเบเบฑเปเบ Bitrix 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
เบเปเปเปเบ, เบกเบตเบซเบผเบฒเบ tricks เบเบตเปเบเบฐเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเบเบเปเบฒเบ 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 เบเบฐเบเบถเบเบเบงเบเปเบเบปเบฒเปเบเบปเปเบฒเปเบเปเบเบเบฑเบเบเบดเบเบเปเป.
เบเปเปเปเบเบเบงเบเปเบฎเบปเบฒเบกเบตเบเบงเบฒเบกเบชเบปเบเปเบเปเบ macro macro เบเบฒเบเบเบฑเบเบเบถเบ.
เบเบตเปเบเบตเป, เบเบญเบเปเบซเบเบทเบญเปเบเบเบฒเบเบเบฒเบเบเบฑเบเบเบถเบเบเบฒเบเบชเบปเบเบเบฐเบเบฒ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบฒเบเบปเบเบเบปเบงเปเบ เบเบทเปเปเบเบฑเบก.
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 เบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเบฐโเบซเบเบฒเบโเบเบตเป (เบกเบฑเบโเบเปเปโเบเปเบฒโเปเบเบฑเบโเบขเบนเปโเบเบตเปโเบเบฑเปเบโ) , เบเปเบฒโเบเบปเบโเปเบงโเบฅเบฒโเบชเบดเปเบโเบชเบธเบโเบเบญเบโเบเบฒเบโเปเบโ, เบเบฒเบโเบเบดเบโเปเบฅเปโเปเบฅโเบเบฐโเปเบงโเบฅเบฒโ, เบเปเบฒโเบซเบฒเบโเบงเปเบฒโเบเบปเบโเบเบญเบโเบเบฒเบโเปเบโเบเปเปโเปเบเปโเบฎเบฑเบโเบฎเบนเป - เบเบฑเปเบ (เบเบปเบงโเบเปเบฝเบโเปเบเบ เปเบเบซเบฒMeDIPOSITION) เปเบฅเบฐ, เบเบฑเปเบเบเบญเบเบชเบธเบเบเปเบฒเบ, เบชเบปเปเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบเบซเบฒ Bitrix เบเปเบฒเบเบฅเบฐเบเบปเบ curl.
เปเบฅเบฐ magic เปเบฅเบฑเบเบเปเบญเบ - เบชเบฒเบเปเบเปเบเบปเปเบฒเบกเบฒ:
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
เบฅเบฒเบโเบฅเบฐโเบญเบฝเบโเบเบญเบโเบเบปเบงโเบเปเบฒโเบเบปเบโเบเบฒเบโเบเปเบฒโเปเบเปโ:
- เปเบเบซเบฒMeDEBUG โ เบเปเบฒโเบซเบฒเบโเบงเปเบฒ 1โ, เบซเบผเบฑเบโเบเบฒเบโเบเบฑเปเบโเบเบดเบโเบเบฐโเบเปเบฒโเบเบฑเบโเบซเบกเบปเบโเบเบตเปโเบเบฐโเบเบดโเบเบฑเบโเปเบเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบเบฐโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบฝเบโเปเบชเปโเปเบเบฅโเปโเบเบฑเบโเบเบถเบโ, 0 โ เบเบงเบโเปเบฎเบปเบฒโเบเปเปโเปเบเปโเบเบฝเบโเบซเบเบฑเบโ.
- เปเบเบฑเบเปเบเปเบฅเบเบต - SIP / PJSIP / IAX / เปเบฅเบฐเบญเบทเปเบเป
- authToken โ เปเบเปเบเบฑเบเบเบฒเบเบญเบฐเบเบธเบเบฒเบ Bitrix24, เบฅเบฐเบซเบฑเบเบเบฒเบเบญเบฐเบเบธเบเบฒเบ webhook เบเบฒเบญเบญเบ
- bitrixApiUrl โ URL เบเบญเบ webhook เบเบตเปเปเบเบปเปเบฒเบกเบฒ, เปเบเบเบเปเปเบกเบตเบเบฒเบ profile/
- เบชเปเบงเบเบเบฐเบซเบเบฒเบ - เบเบฑเบโเบเบตโเบฅเบฒเบโเบเบทเปโเบเบญเบโเบเบปเบงโเปเบฅเบโเบเบฒเบโเบเบญเบโ
- context โ เบชเบฐโเบเบฒเบโเบเบฒเบโเบชเปเบฒโเบฅเบฑเบโเบเบปเปเบโเบเปเบฒโเปเบเบตเบโเบเบฒเบโเปเบโ
- เปเบปเบเปเบงเบฅเบฒเบเบนเปเบเบฑเบ - เบเบงเบฒเบกเปเบงเบเบญเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเปเบซเบเบเบฒเบเบเบฒเบเบเบฒเบง
- เบเบฒเบง โ array เบเบตเปโเบกเบตโเบเบฒเบโเบเบฑเปเบโเบเปเบฒโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเปเบเบทเปเบญเบกโเบเปเปโเบเบฑเบโเบเบฒเบงโเปเบเปโ:
- เปเบเบปเปเบฒเบเบฒเบ โ ip เบซเบผเบทเบเบทเปเปเบฎเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบฒเบง
- เปเบเบเบเบฒเบ - เปเบเบโเบงเบฒเบโเบเบฒเบโเปเบเบทเปเบญเบกโเบเปเป (tcp://, tls://)
- port - เบเบญเบ
- เบเบทเปเบเบนเปเปเบเป - เบเบทเปเบเบนเปเปเบเป
- เบเบงเบฒเบกเบฅเบฑเบ - เบฅเบฐโเบซเบฑเบโเบเปเบฒเบโ
- เปเบเบทเปเบญเบกเบเปเป_เปเบปเบเปเบงเบฅเบฒ - เปเบปเบโเปเบงโเบฅเบฒโเบเบฒเบโเปเบเบทเปเบญเบกโเบเปเปโ
- เบญเปเบฒเบเปเบปเบเปเบงเบฅเบฒ - เบญเปเบฒเบโเบซเบกเบปเบโเปเบงโเบฅเบฒโ
เปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบปเบงเบขเปเบฒเบ:
<?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
);เบเบฑเปเบเบเปเบฒเบเบนเปเบเบธเบกเบเบฒเบ
Supervisor เบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเปเบเบตเบเบเบปเบงเบเบฐเบเบงเบเบเบฒเบเบเบฑเบเบเบฒเบเปเบซเบเบเบฒเบเบเบฒเบ 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เปเบเบตเบโเปเบฅเบฐ restart เบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโ:
supervisorctl start callme
supervisorctl restart callmeเปเบเบดเปเบเบชเบฐเบเบฒเบเบฐเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ:
supervisorctl status callme
callme RUNNING pid 11729, uptime 17 days, 16:58:07เบชเบฐเบซเบฅเบธเบ
เบกเบฑเบเปเบเปเบเบฒเบเปเบเบฑเบเบเบงเบฒเบกเบชเบฑเบเบชเบปเบเบซเบผเบฒเบ, เปเบเปเบเปเบญเบเปเบเปเปเบเบงเปเบฒเบเบนเปเบเปเบฅเบดเบซเบฒเบเบเบตเปเบกเบตเบเบฐเบชเบปเบเบเบฒเบเบเบฐเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเบกเบฑเบเปเบเปเปเบฅเบฐเบเบฐเบฅเบธเบเบฒเบเบนเปเปเบเปเบเบญเบเบฅเบฒเบง.
เบเบฒเบกเบชเบฑเบเบเบฒ, .
เบเปเบฒเบเบฒเบก, เบเปเบฒเปเบเบฐเบเปเบฒ - เบเบฐเบฅเบธเบเบฒเบเปเบญเบเปเบซเปเบเบงเบเปเบเบปเบฒเบขเบนเปเปเบเบเปเบฒเปเบซเบฑเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเปเบฒเบเบชเบปเบเปเบเบงเบดเบเบตเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบเบตเปเปเบ, เบเบฝเบ, เปเบฅเบฐเปเบเบเบปเบเบเบงเบฒเบกเบเปเปเปเบเบเปเบญเบเบเบฐเบเบฐเบเบฒเบเบฒเบกเปเบเบตเบเปเบเบตเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบก.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com
