Asterisk рд░ Bitrix24 рдХреЛ рдПрдХреАрдХрд░рдг

Asterisk рд░ Bitrix24 рдХреЛ рдПрдХреАрдХрд░рдг
рдиреЗрдЯрд╡рд░реНрдХрдорд╛ IP-PBX Asterisk рд░ CRM Bitrix24 рд▓рд╛рдИ рдПрдХреАрдХреГрдд рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЫрдиреН, рддрд░ рд╣рд╛рдореАрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдЖрдлреНрдиреИ рд▓реЗрдЦреНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВред

рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛, рд╕рдмреИ рдорд╛рдирдХ рдЫ:

  • Bitrix24 рдорд╛ рдЧреНрд░рд╛рд╣рдХрдХреЛ рдлреЛрди рдирдореНрдмрд░ рднрдПрдХреЛ рд▓рд┐рдЩреНрдХрдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реЗрд░, Asterisk рд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдЖрдиреНрддрд░рд┐рдХ рдирдореНрдмрд░ рдЬрдбрд╛рди рдЧрд░реНрджрдЫ рдЬрд╕рдХреЛ рддрд░реНрдлрдмрд╛рдЯ рдЧреНрд░рд╛рд╣рдХрдХреЛ рдлреЛрди рдирдореНрдмрд░рд╕рдБрдЧ рдХреНрд▓рд┐рдХ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред Bitrix24 рдорд╛, рдХрд▓рдХреЛ рд░реЗрдХрд░реНрдб рд░реЗрдХрд░реНрдб рдЧрд░рд┐рдиреНрдЫ рд░ рдХрд▓рдХреЛ рдЕрдиреНрддреНрдпрдорд╛, рдХреБрд░рд╛рдХрд╛рдиреАрдХреЛ рд░реЗрдХрд░реНрдбрд┐рдЩ рддрд╛рдирд┐рдиреНрдЫред
  • Asterisk рд▓реЗ рдмрд╛рд╣рд┐рд░рдмрд╛рдЯ рдХрд▓ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫ - 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

рд╣рд╛рдореА рд╡реЗрдм рд╕рд░реНрднрд░рдорд╛ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдЬрд╛рдиреНрдЫреМрдВ, 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 рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

рджреБрдИ рд╡реЗрдмрд╣реБрдХрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред

рдЖрдЧрдорди рд╡реЗрдмрд╣реБрдХред

рдкреНрд░рд╢рд╛рд╕рдХ рдЦрд╛рддрд╛ рдЕрдиреНрддрд░реНрдЧрдд (рдЖрдИрдбреА рез рдХреЛ рд╕рд╛рде), рдорд╛рд░реНрдЧ рдкрдЫреНрдпрд╛рдЙрдиреБрд╣реЛрд╕реН: рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ -> рд╡реЗрдмрд╣реБрдХрд╣рд░реВ -> рд╡реЗрдмрд╣реБрдХ рдердкреНрдиреБрд╣реЛрд╕реН -> рдЖрдЧрдорди рд╡реЗрдмрд╣реБрдХ

Asterisk рд░ Bitrix24 рдХреЛ рдПрдХреАрдХрд░рдг

рд╕реНрдХреНрд░рд┐рдирд╕рдЯрд╣рд░реВрдорд╛ рдЬрд╕реНрддреИ рдЖрдЧрдорди рд╡реЗрдмрд╣реБрдХрдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рднрд░реНрдиреБрд╣реЛрд╕реН:

Asterisk рд░ Bitrix24 рдХреЛ рдПрдХреАрдХрд░рдг

Asterisk рд░ Bitrix24 рдХреЛ рдПрдХреАрдХрд░рдг

рд░ рдмрдЪрдд рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдмрдЪрдд рдЧрд░реЗрдкрдЫрд┐, Bitrix24 рд▓реЗ рдЖрдЧрдорди рд╡реЗрдмрд╣реБрдХрдХреЛ URL рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐:

Asterisk рд░ Bitrix24 рдХреЛ рдПрдХреАрдХрд░рдг

рдЕрдиреНрддрд┐рдо / рдкреНрд░реЛрдлрд╛рдЗрд▓ / рдмрд┐рдирд╛ рдиреИ URL рдХреЛ рдЖрдлреНрдиреЛ рд╕рдВрд╕реНрдХрд░рдг рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН - рдпреЛ рдЖрдЧрдорди рдХрд▓рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫред

рдорд╕рдБрдЧ рдпреЛ рдЫ 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

рдЕрд░реНрдХреЛ, рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдЪрд╛рд▓рд╣рд░реВ рдЫрдиреН рдЬреБрди 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});
}

};

рд╕реБрд░реБрдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реМрдВ: рдирд┐рд░реНрджреЗрд╢рди рдЧреНрд▓реЛрдмрд▓рд╣рд░реВ.

рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ 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 рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдпрд╕рд▓рд╛рдИ рддреНрдпрд╣рд╛рдБ рдЖрд╡рд╢реНрдпрдХ рдЫреИрди), рдХрд▓рдХреЛ рдЕрдиреНрддреНрдп рд╕рдордп рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЕрд╡рдзрд┐ рдЧрдгрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдпрджрд┐ рдХрд▓рдХреЛ рдкрд░рд┐рдгрд╛рдо рдерд╛рд╣рд╛ рдЫреИрди рднрдиреЗ - рд╕реЗрдЯ (рдЪрд░ рдХрд▓MeDISPOSITION) рд░, рдЕрдиреНрддрд┐рдо рдЪрд░рдг, рдкреНрд░рдгрд╛рд▓реА рдХрд░реНрд▓ рдорд╛рд░реНрдлрдд 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 рд▓рд╛рдИ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рднрдиреНрдЫрд┐рдиреН рдХрд▓рд░рдЖрдИрдбреА(рдирд╛рдо) рдЪрд░ рдмрд░рд╛рдмрд░ CallMeCallerIDName.

CallMeCallerIDName рдЪрд░ рдЖрдлреИрдВ, CallMe рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ (рдпрджрд┐ Bitrix24 рдХрд▓рд░рдХреЛ рдирдореНрдмрд░рдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░рд╛ рдирд╛рдо рдЫ рднрдиреЗ, рдпрд╕рд▓рд╛рдИ рдпрд╕ рд░реВрдкрдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдХрд▓рд░рдЖрдИрдбреА(рдирд╛рдо), рд╣реЛрдЗрди - рд╣рд╛рдореА рдХреЗрд╣рд┐ рдЧрд░реНрджреИрдиреМрдВ)ред

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

рдЖрд╡реЗрджрди рд╕реЗрдЯрд┐рдЩ рдлрд╛рдЗрд▓ - /var/www/pbx.vistep.ru/config.php

рдЖрд╡реЗрджрди рдорд╛рдкрджрдгреНрдбрд╣рд░реВрдХреЛ рд╡рд┐рд╡рд░рдг:

  • рдХрд▓MeDEBUG - рдпрджрд┐ 1, рддрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░рд┐рдПрдХрд╛ рд╕рдмреИ рдШрдЯрдирд╛рд╣рд░реВ рд▓рдЧ рдлрд╛рдЗрд▓рдорд╛ рд▓реЗрдЦрд┐рдиреЗрдЫ, 0 - рд╣рд╛рдореА рдХреЗрд╣рд┐ рд▓реЗрдЦреНрджреИрдиреМрдВред
  • рдкреНрд░рд╡рд┐рдзреА - SIP/PJSIP/IAX/etc
  • authToken - Bitrix24 рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЯреЛрдХрди, рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреЗ рд╡реЗрдмрд╣реБрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб
  • bitrixApiUrl - рдЖрдЧрдорди рд╡реЗрдмрд╣реБрдХрдХреЛ URL, рдмрд┐рдирд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓/
  • рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВ - рдмрд╛рд╣реНрдп рд╕рдВрдЦреНрдпрд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреА
  • рд╕рдиреНрджрд░реНрдн - рдХрд▓ рдЙрддреНрдкрддреНрддрд┐рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдиреНрджрд░реНрдн
  • рд╢реНрд░реЛрддрд╛_рдЯрд╛рдЗрдордЖрдЙрдЯ - рддрд╛рд░рд╛рдВрдХрдирдмрд╛рдЯ рдШрдЯрдирд╛ рдкреНрд░рд╢реЛрдзрдирдХреЛ рдЧрддрд┐
  • asterisk - рддрд╛рд░рд╛рдВрдХрдирдорд╛ рдЬрдбрд╛рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдХреЛ рд╕рд╛рде рдПрд░реНрд░реЗ:
  • рдкрд╛рд╣реБрдирд╛ - рддрд╛рд░рд╛рдВрдХрди рд╕рд░реНрднрд░рдХреЛ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди