เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24
เบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบก IP-PBX Asterisk เปเบฅเบฐ CRM Bitrix24 เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ‚เบฝเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡.

เปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™:

  • เป‚เบ”เบเบเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบšเบตเป‚เบ—เบฅเบฐเบชเบฑเบšเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเปƒเบ™ Bitrix24, Asterisk เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ•เบปเบงเป€เบฅเบเบžเบฒเบเปƒเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบเบฒเบ™เบ„เบฅเบดเบเบเบฑเบšเป€เบšเบตเป‚เบ—เบฅเบฐเบชเบฑเบšเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒ. เปƒเบ™ Bitrix24, เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป‚เบ—เบ–เบทเบเบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฒเบ™เป‚เบ—, เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบ–เบทเบเบ”เบถเบ‡เบ‚เบถเป‰เบ™.
  • Asterisk เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป‚เบ—เบˆเบฒเบเบžเบฒเบเบ™เบญเบ - เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš Bitrix24 เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเปเบ”เบ‡เบšเบฑเบ”เบฅเบนเบเบ„เป‰เบฒเปƒเบซเป‰เบเบฑเบšเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เป‚เบ—เบ™เบตเป‰เบกเบฒเบฎเบญเบ”.
    เบ–เป‰เบฒเบšเปเปˆเบกเบตเบฅเบนเบเบ„เป‰เบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบ›เบตเบ”เบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบœเบนเป‰เบ™เปเบฒเปƒเบซเบกเปˆ.
    เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบเบฒเบ™เป‚เบ—เบชเปเบฒเป€เบฅเบฑเบ”, เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบšเบฑเบ”เปเบฅเบฐเบ”เบถเบ‡เบ‚เบถเป‰เบ™เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒ.

เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบเบฒเบ™เบ•เบฑเบ”เบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบธเบเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡เปเบฅเบฐเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš github - เปเบกเปˆเบ™เปเบฅเป‰เบง, เปเบกเปˆเบ™เปเบฅเป‰เบง, เป€เบญเบปเบฒเบกเบฑเบ™เปเบฅเบฐเปƒเบŠเป‰เบกเบฑเบ™!

เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ—เบปเปˆเบงเป„เบ›

เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เบฅเบงเบกเบ•เบปเบงเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ CallMe. CallMe เป€เบ›เบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ—เบตเปˆเบ‚เบฝเบ™เปƒเบ™ PHP.

เป€เบ•เบฑเบโ€‹เป‚เบ™โ€‹เป‚เบฅโ€‹เบŠเบตโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเปˆเบงเบ‡เปœเป‰เบฒ

เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบกเบต 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.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;
		}
}

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบญเบญเบเบˆเบฒเบ parsing config, เบšเบฑเบ™เบซเบฒเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž, เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เปเบฅเบฐเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เป€เบฅเบทเบญเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒเบ—เบตเปˆเบขเบนเปˆเบ™เบญเบเบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก - เบซเบผเบฒเบเป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰. เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบšเปเปˆเบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”, เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบซเบผเบฒเบเบเบงเปˆเบฒ http เปเบฅเบฐ https.

เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ https, เปƒเบซเป‰เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบ”เบเบเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบซเบฑเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24

เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ Bitrix24

เปƒเบซเป‰เบชเป‰เบฒเบ‡เบชเบญเบ‡ webhooks.

webhook เป€เบ‚เบปเป‰เบฒเบกเบฒ.

เบžเบฒเบเปƒเบ•เป‰เบšเบฑเบ™เบŠเบตเบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เบฅเบฐเบšเบปเบš (เบกเบต id 1), เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡: เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ -> Webhooks -> เป€เบžเบตเปˆเบก webhook -> webhook เป€เบ‚เบปเป‰เบฒเบกเบฒ.

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24

เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเปƒเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ‚เบญเบ‡ webhook เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™เบžเบฒเบšเบซเบ™เป‰เบฒเบˆเป:

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24

เปเบฅเบฐเบเบปเบ”เบšเบฑเบ™เบ—เบถเบ.

เบซเบผเบฑเบ‡เบˆเบฒเบเบšเบฑเบ™เบ—เบถเบ, Bitrix24 เบˆเบฐเปƒเบซเป‰ URL เบ‚เบญเบ‡ webhook เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒ, เบ•เบปเบงเบขเปˆเบฒเบ‡:

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24

เบšเบฑเบ™เบ—เบถเบเป€เบงเบตเบŠเบฑเบ™เบ‚เบญเบ‡ URL เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเบšเปเปˆเบกเบต /profile/ เบชเบธเบ”เบ—เป‰เบฒเบ - เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบชเบฒเบเป‚เบ—เป€เบ‚เบปเป‰เบฒ.

เบ‚เป‰เบญเบเบกเบตเบญเบฑเบ™เบ™เบตเป‰ https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/

webhook เบ‚เบฒเบญเบญเบ.

เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ -> Webhooks -> เป€เบžเบตเปˆเบก webhook -> webhook เบ‚เบฒเบญเบญเบ

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เปเบกเปˆเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบขเบนเปˆเปƒเบ™ screenshots:

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24

เบšเบฑเบ™เบ—เบถเบ เปเบฅเบฐเบฎเบฑเบšเบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24

เบ‚เป‰เบญเบเบกเบตเบญเบฑเบ™เบ™เบตเป‰ xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ„เบฑเบ”เบฅเบญเบเบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡;

เบชเปเบฒเบ„เบฑเบ™!

เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™ SSL เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™เป€เบŠเบตเบšเป€เบงเบต Bitrix24 (เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ letsencrypt), เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ Bitrix api เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเป€เบงเบตเบŠเบฑเบ™เบ„เบฅเบฒเบง, เบขเปˆเบฒเบเบฑเบ‡เบงเบปเบ™ - เบกเบฑเบ™เบกเบต ssl เปเบฅเป‰เบง.

เบชเปเบฒเบ„เบฑเบ™!

เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™ "เบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบ•เบปเบงเบ›เบฐเบกเบงเบ™เบœเบปเบ™" เบ•เป‰เบญเบ‡เบกเบตเบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เบˆเบฒเบเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”!

เปเบฅเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบชเปเบฒเบžเบฑเบ”เบชเบธเบ”เบ—เป‰เบฒเบ, เปƒเบซเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡ CallMeOut เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบ— (เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆเบˆเปเบฒเบ™เบงเบ™ PBX, เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบ•เบปเป‰เบ™เบเปเบฒเป€เบ™เบตเบ”เบเบฒเบ™เป‚เบ—เบˆเบฐเบšเบดเบ™เป„เบ›).

เปƒเบ™เป€เบกเบ™เบน, เป€เบฅเบทเบญเบ: เป€เบžเบตเปˆเบกเป€เบ•เบตเบก -> เป‚เบ—เบฅเบฐเบชเบฑเบš -> เป€เบžเบตเปˆเบกเป€เบ•เบตเบก -> เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ "เบซเบกเบฒเบเป€เบฅเบเป‚เบ—เบญเบญเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™" เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ: CallMeOut เปเบฅเบฐเปƒเบซเป‰เบ„เบฅเบดเบเปƒเบชเปˆ "เบšเบฑเบ™เบ—เบถเบ"

เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Asterisk เปเบฅเบฐ Bitrix24

เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบ”เบฒเบง

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡ 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

เบชเบฐเบซเบฅเบธเบš

เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ, เปเบ•เปˆเบ‚เป‰เบญเบเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบœเบนเป‰เบšเปเบฅเบดเบซเบฒเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบปเบšเบเบฒเบ™เบˆเบฐเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เป„เบ”เป‰เปเบฅเบฐเบเบฐเบฅเบธเบ™เบฒเบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เบฅเบฒเบง.

เบ•เบฒเบกเบชเบฑเบ™เบเบฒ, เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš github.

เบ„เปเบฒเบ–เบฒเบก, เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ - เบเบฐเบฅเบธเบ™เบฒเบ›เปˆเบญเบเปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบขเบนเปˆเปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบปเบ™เปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบ™เบตเป‰เป„เบ›, เบ‚เบฝเบ™, เปเบฅเบฐเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ•เปเปˆเป„เบ›เบ‚เป‰เบญเบเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเป€เบ›เบตเบ”เป€เบœเบตเบเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster