Asterisk เจ…เจคเฉ‡ Bitrix24 เจฆเจพ เจเจ•เฉ€เจ•เจฐเจฃ

Asterisk เจ…เจคเฉ‡ Bitrix24 เจฆเจพ เจเจ•เฉ€เจ•เจฐเจฃ
เจจเฉˆเฉฑเจŸเจตเจฐเจ• 'เจคเฉ‡ IP-PBX Asterisk เจ…เจคเฉ‡ CRM Bitrix24 เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจตเฉฑเจ–-เจตเฉฑเจ– เจตเจฟเจ•เจฒเจช เจนเจจ, เจชเจฐ เจ…เจธเฉ€เจ‚ เจซเจฟเจฐ เจตเฉ€ เจ†เจชเจฃเจพ เจฒเจฟเจ–เจฃ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจนเฉˆเฅค

เจ•เจพเจฐเจœเจธเจผเฉ€เจฒเจคเจพ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจนเจฐ เจšเฉ€เจœเจผ เจฎเจฟเจ†เจฐเฉ€ เจนเฉˆ:

  • Bitrix24 เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ•เจฒเจพเจ‡เฉฐเจŸ เจฆเฉ‡ เจซเจผเฉ‹เจจ เจจเฉฐเจฌเจฐ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฒเจฟเฉฐเจ• 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจจ เจฆเฉเจ†เจฐเจพ, Asterisk เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจจเฉฐเจฌเจฐ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆ เจœเจฟเจธเจฆเฉ€ เจคเจฐเจซเจผเฉ‹เจ‚ เจ•เจฒเจพเจ‡เฉฐเจŸ เจฆเฉ‡ เจซเจผเฉ‹เจจ เจจเฉฐเจฌเจฐ เจจเจพเจฒ เจ•เจฒเจฟเฉฑเจ• เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค Bitrix24 เจตเจฟเฉฑเจš, เจ•เจพเจฒ เจฆเจพ เจ‡เฉฑเจ• เจฐเจฟเจ•เจพเจฐเจก เจฐเจฟเจ•เจพเจฐเจก เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ•เจพเจฒ เจฆเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš, เจ—เฉฑเจฒเจฌเจพเจค เจฆเฉ€ เจ‡เฉฑเจ• เจฐเจฟเจ•เจพเจฐเจกเจฟเฉฐเจ— เจ–เจฟเฉฑเจšเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค
  • Asterisk เจจเฉ‚เฉฐ เจฌเจพเจนเจฐเฉ‹เจ‚ เจ‡เฉฑเจ• เจ•เจพเจฒ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ - Bitrix24 เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ‰เจธ เจ•เจฐเจฎเจšเจพเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เจฒเจพเจ‡เฉฐเจŸ เจ•เจพเจฐเจก เจฆเจฟเจ–เจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจฆเฉ‡ เจจเฉฐเจฌเจฐ 'เจคเฉ‡ เจ‡เจน เจ•เจพเจฒ เจ†เจˆ เจธเฉ€เฅค
    เจœเฉ‡เจ•เจฐ เจ…เจœเจฟเจนเจพ เจ•เฉ‹เจˆ เจ—เจพเจนเจ• เจจเจนเฉ€เจ‚ เจนเฉˆ, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจจเจตเฉ€เจ‚ เจฒเฉ€เจก เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เจพเจฐเจก เจ–เฉ‹เจฒเฉเจนเจพเจ‚เจ—เฉ‡เฅค
    เจœเจฟเจตเฉ‡เจ‚ เจนเฉ€ เจ•เจพเจฒ เจชเฉ‚เจฐเฉ€ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ•เจพเจฐเจก 'เจคเฉ‡ เจชเฉเจฐเจคเฉ€เจฌเจฟเฉฐเจฌเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ—เฉฑเจฒเจฌเจพเจค เจฆเฉ€ เจฐเจฟเจ•เจพเจฐเจกเจฟเฉฐเจ— เจ–เจฟเฉฑเจš เจฒเฉˆเจ‚เจฆเฉ‡ เจนเจพเจ‚เฅค

ะŸะพะด ะบะฐั‚ะพะผ ั€ะฐััะบะฐะถัƒ ะบะฐะบ ะฒัะต ะฝะฐัั‚ั€ะพะธั‚ัŒ ัƒ ัะตะฑั ะธ ะดะฐะผ ะปะธะฝะบ ะฝะฐ github โ€” ะดะฐ-ะดะฐ, ะทะฐะฑะธั€ะฐะนั‚ะต ะธ ะฟะพะปัŒะทัƒะนั‚ะตััŒ!

เจ†เจฎ เจตเจฐเจฃเจจ

เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจเจ•เฉ€เจ•เจฐเจฃ เจจเฉ‚เฉฐ CallMe เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚เฅค CallMe PHP เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ€ เจ‡เฉฑเจ• เจ›เฉ‹เจŸเฉ€ เจตเฉˆเฉฑเจฌ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจนเฉˆเฅค

เจคเจ•เจจเจพเจฒเฉ‹เจœเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจตเจฐเจคเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ

  • PHP 5.6
  • PHP AMI เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€
  • เจ•เฉฐเจชเฉ‹เจœเจผเจฐ
  • Nginx + php-fpm
  • เจธเฉเจชเจฐเจตเจพเจˆเจœเจผเจฐ
  • AMI (Asterisk Manager Interface)
  • เจฌเจฟเจŸเฉเจฐเจฟเจ•เจธ เจตเฉˆเจฌเจนเฉเฉฑเจ• (เจธเจฐเจฒเฉ€เจ•เฉเจฐเจฟเจค REST API เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ)

เจชเฉเจฐเฉ€-เจธเฉˆเจŸเจฟเฉฐเจ—

Asterisk เจตเจพเจฒเฉ‡ เจธเจฐเจตเจฐ 'เจคเฉ‡, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเฉˆเฉฑเจฌ เจธเจฐเจตเจฐ (เจธเจพเจกเฉ‡ เจฒเจˆ เจ‡เจน nginx+php-fpm เจนเฉˆ), เจธเฉเจชเจฐเจตเจพเจˆเจœเจผเจฐ เจ…เจคเฉ‡ git เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจ•เจฎเจพเจ‚เจก (CentOS):

yum install nginx php-fpm supervisor git

เจ…เจธเฉ€เจ‚ เจตเฉˆเจฌ เจธเจฐเจตเจฐ เจคเฉฑเจ• เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ 'เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจพเจ‚, Git เจคเฉ‹เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจ–เจฟเฉฑเจšเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจซเฉ‹เจฒเจกเจฐ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจ…เจงเจฟเจ•เจพเจฐ เจธเฉˆเจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:


cd /var/www
git clone https://github.com/ViStepRU/callme.git
chown nginx. -R callme/

เจ…เฉฑเจ—เฉ‡, เจ†เจ“ nginx เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจ•เจฐเฉ€เจ, เจธเจพเจกเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเฉฑเจš เจธเจฅเจฟเจค เจนเฉˆ

/etc/nginx/conf.d/pbx.vistep.ru.conf

server {
	server_name www.pbx.vistep.ru pbx.vistep.ru;
	listen *:80;
	rewrite ^  https://pbx.vistep.ru$request_uri? permanent;
}

server {
#        listen *:80;
#	server_name pbx.vistep.ru;


	access_log /var/log/nginx/pbx.vistep.ru.access.log main;
        error_log /var/log/nginx/pbx.vistep.ru.error.log;

    listen 443 ssl http2;
    server_name pbx.vistep.ru;
    resolver 8.8.8.8;
    ssl_stapling on;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/pbx.vistep.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pbx.vistep.ru/privkey.pem;
    ssl_dhparam /etc/nginx/certs/dhparam.pem;
    ssl_session_timeout 24h;
    ssl_session_cache shared:SSL:2m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security "max-age=31536000;";
    add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";
	
	root /var/www/callme;
	index  index.php;
        location ~ /. {
                deny all; # ะทะฐะฟั€ะตั‚ ะดะปั ัะบั€ั‹ั‚ั‹ั… ั„ะฐะนะปะพะฒ
        }

        location ~* /(?:uploads|files)/.*.php$ {
                deny all; # ะทะฐะฟั€ะตั‚ ะดะปั ะทะฐะณั€ัƒะถะตะฝะฝั‹ั… ัะบั€ะธะฟั‚ะพะฒ
        }

        location ~* ^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
                access_log off;
                log_not_found off;
                expires max; # ะบะตัˆะธั€ะพะฒะฐะฝะธะต ัั‚ะฐั‚ะธะบะธ
        }

	location ~ .php {
		root /var/www/callme;
		index  index.php;
		fastcgi_pass unix:/run/php/php5.6-fpm.sock;
	#	fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
		include /etc/nginx/fastcgi_params;
		}
}

เจฎเฉˆเจ‚ เจธเฉฐเจฐเจšเจจเจพ, เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฎเฉเฉฑเจฆเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจชเจพเจฐเจธ เจ•เจฐเจจ, เจ‡เฉฑเจ• เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจฒเฉ‡เจ– เจฆเฉ‡ เจฆเจพเจ‡เจฐเฉ‡ เจคเฉ‹เจ‚ เจฌเจพเจนเจฐ เจ‡เฉฑเจ• เจตเฉˆเจฌ เจธเจฐเจตเจฐ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจจเฉ‚เฉฐ เจ›เฉฑเจก เจฆเจฟเจ†เจ‚เจ—เจพ - เจ‡เจธ เจฌเจพเจฐเฉ‡ เจฌเจนเฉเจค เจ•เฉเจ เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ. เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเจฟเฉฑเจš เจ•เฉ‹เจˆ เจชเจพเจฌเฉฐเจฆเฉ€เจ†เจ‚ เจจเจนเฉ€เจ‚ เจนเจจ, เจ‡เจน http เจ…เจคเฉ‡ https เจฆเฉ‹เจตเจพเจ‚ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ https เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ†เจ“ เจชเฉเจฐเจฎเจพเจฃ เจชเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจธเจญ เจ•เฉเจ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจ•เฉ€เจคเจพ เจนเฉˆ, เจคเจพเจ‚ เจฒเจฟเฉฐเจ• 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจ•เฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ…เจœเจฟเจนเจพ เจ•เฉเจ เจฆเฉ‡เจ–เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ

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 ะฝะฐะผ ะฝัƒะถะฝะพ ะดะพะฑะฐะฒะธั‚ัŒ AMI-ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั callme ะฒ 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

เจ…เฉฑเจ—เฉ‡, เจ‡เฉฑเจฅเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจšเจพเจฒเจพเจ‚ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจกเจพเจ‡เจฒเจชเจฒเจพเจจ เจฆเฉเจ†เจฐเจพ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€ (เจธเจพเจกเฉ‡ เจฒเจˆ เจ‡เจน 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});
}

เจ‡เจธ เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ เจฒเจˆ เจธเฉ€เจกเฉ€เจ†เจฐ เจŸเฉ‡เจฌเจฒ เจตเจฟเฉฑเจš เจเจ‚เจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ…เจธเจฎเจฐเฉฑเจฅ เจ•เจฐเฉ‹ (เจ‰เฉฑเจฅเฉ‡ เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ), เจ•เจพเจฒ เจฆเจพ เจ…เฉฐเจค เจธเจฎเจพเจ‚ เจธเฉˆเฉฑเจŸ เจ•เจฐเฉ‹, เจฎเจฟเจ†เจฆ เจฆเฉ€ เจ—เจฃเจจเจพ เจ•เจฐเฉ‹, เจœเฉ‡เจ•เจฐ เจ•เจพเจฒ เจฆเจพ เจจเจคเฉ€เจœเจพ เจชเจคเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ - เจธเฉˆเฉฑเจŸ (เจตเฉ‡เจฐเฉ€เจเจฌเจฒ) CallMeDISPOSITION) เจ…เจคเฉ‡, เจ†เจ–เจฐเฉ€ เจชเฉœเจพเจ…, เจธเจฟเจธเจŸเจฎ เจ•เจฐเจฒ เจฐเจพเจนเฉ€เจ‚ เจฌเจฟเจŸเจฐเจฟเจ•เจธ เจจเฉ‚เฉฐ เจธเจญ เจ•เฉเจ เจญเฉ‡เจœเฉ‹เฅค

เจ…เจคเฉ‡ เจฅเฉ‹เฉœเจพ เจนเฉ‹เจฐ เจœเจพเจฆเฉ‚ - เจ‡เฉฑเจ• เจ†เจ‰เจฃ เจตเจพเจฒเฉ€ เจ•เจพเจฒ:

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 เจจเฉ‚เฉฐ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจ เจฒเจˆ เจ•เจนเจฟเฉฐเจฆเฉ€ เจนเฉˆ เจ•เจพเจฒเจฐเจ†เจˆเจกเฉ€(เจจเจพเจฎ) เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ CallMeCallerIDName.

CallMeCallerIDName เจตเฉ‡เจฐเฉ€เจเจฌเจฒ, เจฌเจฆเจฒเฉ‡ เจตเจฟเฉฑเจš, CallMe เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉเจ†เจฐเจพ เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ (เจœเฉ‡เจ•เจฐ Bitrix24 เจ•เฉ‹เจฒ เจ•เจพเจฒเจฐ เจฆเฉ‡ เจจเฉฐเจฌเจฐ เจฒเจˆ เจชเฉ‚เจฐเจพ เจจเจพเจฎ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจธเฉˆเฉฑเจŸ เจ•เจฐเฉ‹ เจ•เจพเจฒเจฐเจ†เจˆเจกเฉ€(เจจเจพเจฎ), ะฝะตั‚ โ€” ะฝะธั‡ะตะณะพ ะฝะต ะฑัƒะดะตะผ ะดะตะปะฐั‚ัŒ).

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ€ เจธเจฅเจพเจชเจจเจพ เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจธเฉˆเจŸเจฟเฉฐเจ—เจœเจผ เจซเจพเจˆเจฒ - /var/www/pbx.vistep.ru/config.php

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฆเจพ เจตเฉ‡เจฐเจตเจพ:

  • เจ•เจพเจฒMeDEBUG โ€” เจœเฉ‡เจ•เจฐ 1, เจคเจพเจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉเจ†เจฐเจพ เจธเฉฐเจธเจพเจงเจฟเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจ˜เจŸเจจเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉŒเจ— เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจœเจพเจตเฉ‡เจ—เจพ, 0 โ€” เจ…เจธเฉ€เจ‚ เจ•เฉเจ เจจเจนเฉ€เจ‚ เจฒเจฟเจ–เจฆเฉ‡
  • เจคเจ•เจจเฉ€เจ•เฉ€ โ€” SIP/PJSIP/IAX/etc
  • authToken - Bitrix24 เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจŸเฉ‹เจ•เจจ, เจ†เจŠเจŸเจ—เฉ‹เจ‡เฉฐเจ— เจตเฉˆเจฌเจนเฉเฉฑเจ• เจชเฉเจฐเจฎเจพเจฃเฉ€เจ•เจฐเจจ เจ•เฉ‹เจก
  • bitrixApiUrl - เจ†เจ‰เจฃ เจตเจพเจฒเฉ‡ เจตเฉˆเจฌเจนเฉเฉฑเจ• เจฆเจพ URL, เจฌเจฟเจจเจพเจ‚ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ/
  • เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจเจพเจ‚ - เจฌเจพเจนเจฐเฉ€ เจธเฉฐเจ–เจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€
  • เจชเฉเจฐเจธเฉฐเจ— - เจ‡เฉฑเจ• เจ•เจพเจฒ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจฒเจˆ เจธเฉฐเจฆเจฐเจญ
  • listener_timeout - เจคเจพเจฐเฉ‡ เจคเฉ‹เจ‚ เจ‡เจตเฉˆเจ‚เจŸ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฆเฉ€ เจ—เจคเฉ€
  • เจคเจพเจฐเฉ‡ - เจคเจพเจฐเฉ‡ เจจเจพเจฒ เจœเฉเฉœเจจ เจฒเจˆ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจพเจฒเฉ€ เจ‡เฉฑเจ• เจเจฐเฉ‡:
  • เจนเฉ‹เจธเจŸ - เจคเจพเจฐเจพ เจธเจฐเจตเจฐ เจฆเจพ ip เจœเจพเจ‚ เจฎเฉ‡เจœเจผเจฌเจพเจจ เจจเจพเจ‚
  • เจธเจ•เฉ€เจฎ - เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจšเจฟเฉฑเจคเจฐ (tcp://, tls://)
  • เจชเฉ‹เจฐเจŸ - เจชเฉ‹เจฐเจŸ
  • เจ‰เจชเจญเฉ‹เจ—เฉ€ - เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเจพเจฎ
  • เจ—เฉเจชเจค - เจชเจพเจธเจตเจฐเจก
  • connect_timeout - เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจธเจฎเจพเจ‚ เจธเจฎเจพเจชเจค
  • read_timeout - เจธเจฎเจพเจ‚ เจธเจฎเจพเจชเจค เจชเฉœเฉเจนเฉ‹

เจ‰เจฆเจพเจนเจฐเจจ เจธเฉˆเจŸเจฟเฉฐเจ— เจซเจพเจˆเจฒ:

 <?php
return array(

        'CallMeDEBUG' => 1, // ะดะตะฑะฐะณ ัะพะพะฑั‰ะตะฝะธั ะฒ ะปะพะณะต: 1 - ะฟะธัˆะตะผ, 0 - ะฝะต ะฟะธัˆะตะผ
        'tech' => 'SIP',
        'authToken' => 'xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6', //ั‚ะพะบะตะฝ ะฐะฒั‚ะพั€ะธะทะฐั†ะธะธ ะฑะธั‚ั€ะธะบัะฐ
        'bitrixApiUrl' => 'https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/', //url ะบ api ะฑะธั‚ั€ะธะบัะฐ (ะฒั…ะพะดัั‰ะธะน ะฒะตะฑั…ัƒะบ)
        'extentions' => array('888999'), // ัะฟะธัะพะบ ะฒะฝะตัˆะฝะธั… ะฝะพะผะตั€ะพะฒ, ั‡ะตั€ะตะท ะทะฐะฟัั‚ัƒัŽ
        'context' => 'dial_out', //ะธัั…ะพะดัั‰ะธะน ะบะพะฝั‚ะตะบัั‚ ะดะปั ะพั€ะธะณะธะฝะฐั†ะธะธ ะทะฒะพะฝะบะฐ
        'asterisk' => array( // ะฝะฐัั‚ั€ะพะนะบะธ ะดะปั ะฟะพะดะบะปัŽั‡ะตะฝะธั ะบ ะฐัั‚ะตั€ะธัะบัƒ
                    'host' => '10.100.111.249',
                    'scheme' => 'tcp://',
                    'port' => 5038,
                    'username' => 'callme',
                    'secret' => 'JD3clEB8_f23r-3ry84gJ',
                    'connect_timeout' => 10000,
                    'read_timeout' => 10000
                ),
        'listener_timeout' => 300, //ัะบะพั€ะพัั‚ัŒ ะพะฑั€ะฐะฑะพั‚ะบะธ ัะพะฑั‹ั‚ะธะน ะพั‚ asterisk

);

เจธเฉเจชเจฐเจตเจพเจˆเจœเจผเจฐ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช

เจธเฉเจชเจฐเจตเจพเจˆเจœเจผเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ Asterisk CallMeIn.php เจคเฉ‹เจ‚ เจ‡เจตเฉˆเจ‚เจŸ เจนเฉˆเจ‚เจกเจฒเจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจœเฉ‹ เจ†เจ‰เจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจ•เจพเจฒเจพเจ‚ เจฆเฉ€ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ Bitrix24 (เจธเจผเฉ‹เจ… เจ•เจพเจฐเจก, เจนเจพเจˆเจก เจ•เจพเจฐเจก, เจ†เจฆเจฟ) เจจเจพเจฒ เจ‡เฉฐเจŸเจฐเฉˆเจ•เจŸ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค

เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจซเจพเจˆเจฒ:

/etc/supervisord.d/callme.conf

[program:callme]
command=/usr/bin/php CallMeIn.php
directory=/var/www/pbx.vistep.ru
autostart=true
autorestart=true
startretries=5
stderr_logfile=/var/www/pbx.vistep.ru/logs/daemon.log
stdout_logfile=/var/www/pbx.vistep.ru/logs/daemon.log

ะ—ะฐะฟัƒัะบ ะธ ั€ะตัั‚ะฐั€ั‚ ะฟั€ะธะปะพะถะตะฝะธั:

supervisorctl start callme
supervisorctl restart callme

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ€ เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจตเฉ‡เจ–เจฃเจพ:

supervisorctl status callme
callme                           RUNNING   pid 11729, uptime 17 days, 16:58:07

เจธเจฟเฉฑเจŸเจพ

เจ‡เจน เจ•เจพเจซเจผเฉ€ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจธเจพเจฌเจค เจนเฉ‹เจ‡เจ†, เจชเจฐ เจฎเฉˆเจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• เจคเจœเจฐเจฌเฉ‡เจ•เจพเจฐ เจชเฉเจฐเจฌเฉฐเจงเจ• เจ‡เจธเจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‰เจธเจฆเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจ–เฉเจธเจผ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹เจตเฉ‡เจ—เจพ.

เจตเจพเจ…เจฆเฉ‡ เจฎเฉเจคเจพเจฌเจ•, github เจจเจพเจฒ เจฒเจฟเฉฐเจ•.

เจธเจตเจพเจฒ, เจธเฉเจเจพเจ… - เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจ›เฉฑเจกเฉ‹เฅค เจจเจพเจฒ เจนเฉ€, เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจ‡เจธ เจเจ•เฉ€เจ•เจฐเจฃ เจฆเจพ เจตเจฟเจ•เจพเจธ เจ•เจฟเจตเฉ‡เจ‚ เจนเฉ‹เจ‡เจ†, เจคเจพเจ‚ เจฒเจฟเจ–เฉ‹, เจ…เจคเฉ‡ เจ…เจ—เจฒเฉ‡ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ เจนเจฐ เจšเฉ€เจœเจผ เจจเฉ‚เฉฐ เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจชเฉเจฐเจ—เจŸ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจพเจ‚เจ—เจพ.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹