Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ

Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ
เชจเซ‡เชŸเชตเชฐเซเช• เชชเชฐ 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 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช, เชšเชพเชฒเซ‹ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ‡ เชเชจเซเช•เซเชฐเชฟเชชเซเชŸ เช•เชฐเซ€เช.

เชœเซ‹ เชคเชฎเซ‡ เชฌเชงเซเช‚ เชฌเชฐเชพเชฌเชฐ เช•เชฐเซเชฏเซเช‚ เช›เซ‡, เชคเซ‹ เชชเช›เซ€ เชฒเชฟเช‚เช• เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ€เชจเซ‡ เชคเชฎเชพเชฐเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เชœเซ‹เชตเซเช‚ เชœเซ‹เชˆเช

Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ

Bitrix24 เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชšเชพเชฒเซ‹ เชฌเซ‡ เชตเซ‡เชฌเชนเซเช• เชฌเชจเชพเชตเซ€เช.

เช‡เชจเช•เชฎเชฟเช‚เช— เชตเซ‡เชฌเชนเซ‚เช•.

เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชŸเชฐ เชเช•เชพเช‰เชจเซเชŸ เชนเซ‡เช เชณ (เช†เชˆเชกเซ€ 1 เชธเชพเชฅเซ‡), เชชเชพเชฅเชจเซ‡ เช…เชจเซเชธเชฐเซ‹: เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ -> เชตเซ‡เชฌเชนเซเช•เซเชธ -> เชตเซ‡เชฌเชนเซ‚เช• เช‰เชฎเซ‡เชฐเซ‹ -> เช‡เชจเช•เชฎเชฟเช‚เช— เชตเซ‡เชฌเชนเซ‚เช•

Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ

เชธเซเช•เซเชฐเซ€เชจเชถเซ‰เชŸเซเชธเชจเซ€ เชœเซ‡เชฎ เช‡เชจเช•เชฎเชฟเช‚เช— เชตเซ‡เชฌเชนเซ‚เช•เชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชญเชฐเซ‹:

Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ

Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ

เช…เชจเซ‡ เชธเซ‡เชต เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹.

เชธเชพเชšเชตเซเชฏเชพ เชชเช›เซ€, Bitrix24 เช‡เชจเช•เชฎเชฟเช‚เช— เชตเซ‡เชฌเชนเซ‚เช•เชจเซเช‚ URL เชชเซเชฐเชฆเชพเชจ เช•เชฐเชถเซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡:

Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ

เชคเชฎเชพเชฐเชพ URL เชจเชพ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‡ เช…เช‚เชคเชฟเชฎ /profile/ เชตเชฟเชจเชพ เชธเชพเชšเชตเซ‹ - เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช‡เชจเช•เชฎเชฟเช‚เช— เช•เซ‹เชฒเซเชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เชฅเชถเซ‡.

เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช† เช›เซ‡ https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/

เช†เช‰เชŸเช—เซ‹เช‡เช‚เช— เชตเซ‡เชฌเชนเซ‚เช•.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ -> เชตเซ‡เชฌเชนเซ‚เช• -> เชตเซ‡เชฌเชนเซ‚เช• เช‰เชฎเซ‡เชฐเซ‹ -> เช†เช‰เชŸเช—เซ‹เช‡เช‚เช— เชตเซ‡เชฌเชนเซ‚เช•

เชตเชฟเช—เชคเซ‹ เชซเชฐเซ€เชฅเซ€ เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸ เชชเชฐ เช›เซ‡:

Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ

Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ

เช…เชงเชฟเช•เซƒเชคเชคเชพ เช•เซ‹เชก เชธเชพเชšเชตเซ‹ เช…เชจเซ‡ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ‹

Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ

เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช† เช›เซ‡ xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชชเชฃ เช•เซ‰เชชเชฟ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡; เชคเชฎเชพเชฐเซ‡ เช†เช‰เชŸเช—เซ‹เช‡เช‚เช— เช•เซ‰เชฒเซเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ!

SSL เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ Bitrix24 เชธเชฐเซเชตเชฐ เชชเชฐ เช—เซ‹เช เชตเซ‡เชฒเซเช‚ เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช (เชคเชฎเซ‡ letsencrypt เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹), เช…เชจเซเชฏเชฅเชพ Bitrix api เช•เชพเชฎ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚. เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช•เซเชฒเชพเช‰เชก เชตเชฐเซเชเชจ เช›เซ‡, เชคเซ‹ เชšเชฟเช‚เชคเชพ เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚ - เชคเซ‡เชฎเชพเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ ssl เช›เซ‡.

เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ!

"เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เชธเชฐเชจเชพเชฎเซเช‚" เชซเซ€เชฒเซเชกเชฎเชพเช‚ เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เชชเชฐเชฅเซ€ เชเช•เซเชธเซ‡เชธ เช•เชฐเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เชธเชฐเชจเชพเชฎเซเช‚ เชนเซ‹เชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡!

เช…เชจเซ‡ เช…เช‚เชคเชฟเชฎ เชธเซเชชเชฐเซเชถ เชคเชฐเซ€เช•เซ‡, เชšเชพเชฒเซ‹ เช•เซ‰เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชคเชฐเซ€เช•เซ‡ เช…เชฎเชพเชฐเชพ CallMeOut เชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช (เชœเซ‡เชฅเซ€ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ PBX เชชเชฐเชจเชพ เชจเช‚เชฌเชฐ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เช•เซ‰เชฒ เชถเชฐเซ‚ เช•เชฐเชตเชพเชจเซ‹ เช†เชฆเซ‡เชถ เชฆเซ‚เชฐ เชฅเชˆ เชœเชถเซ‡).

เชฎเซ‡เชจเซเชฎเชพเช‚, เชชเชธเช‚เชฆ เช•เชฐเซ‹: เชตเชงเซ -> เชŸเซ‡เชฒเชฟเชซเซ‹เชจเซ€ -> เชตเชงเซ -> เชธเซ‡เชŸเชฟเช‚เช—เซเชธ, "เชกเชฟเชซเซ‹เชฒเซเชŸ เช†เช‰เชŸเช—เซ‹เช‡เช‚เช— เช•เซ‰เชฒ เชจเช‚เชฌเชฐ" เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เชธเซ‡เชŸ เช•เชฐเซ‹: CallMeOut เช…เชจเซ‡ "เชธเชพเชšเชตเซ‹" เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹.

Asterisk เช…เชจเซ‡ Bitrix24เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ

เชซเซ‚เชฆเชกเซ€ เชธเซเชฏเซ‹เชœเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹