Π ΡΠ΅ΡΠΈ Π΅ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ IP-ΠΠ’Π‘ Asterisk ΠΈ CRM ΠΠΈΡΡΠΈΠΊΡ24, Π½ΠΎ ΠΌΡ, Π²ΡΠ΅ ΡΠ°ΠΊΠΈ, ΡΠ΅ΡΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΡ.
ΠΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Ρ Π²ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎ:
- ΠΠ»ΠΈΠΊΠΎΠΌ Π½Π° ΡΡΡΠ»ΠΊΡ Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΠ΅Π»Π΅ΡΠΎΠ½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π² ΠΠΈΡΡΠΈΠΊΡ24, Asterisk ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎ ΠΊΠ»ΠΈΠΊ ΡΠΎΠ²Π΅ΡΡΠ΅Π½, Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΠ΅Π»Π΅ΡΠΎΠ½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. β¨Π ΠΠΈΡΡΠΈΠΊΡ24 ΡΠΈΠΊΡΠΈΡΡΠ΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ ΠΎ Π·Π²ΠΎΠ½ΠΊΠ΅ ΠΈ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°.
- ΠΠ° Asterisk ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Π·Π²ΠΎΠ½ΠΎΠΊ ΠΈΠ·Π²Π½Π΅ β Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΠΈΡΡΠΈΠΊΡ24 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΊΠ°ΡΡΠΎΡΠΊΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΎΠΌΡ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΡ, Π½Π° Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΡ Π·Π²ΠΎΠ½ΠΎΠΊ ΠΏΡΠΈΠ»Π΅ΡΠ΅Π».
ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π΅Ρ, ΠΎΡΠΊΡΠΎΠ΅ΠΌ ΠΊΠ°ΡΡΠΎΡΠΊΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΠ΄Π°.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π·Π²ΠΎΠ½ΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ΅Π½, ΠΎΡΡΠ°ΠΆΠ°Π΅ΠΌ ΡΡΠΎ Π² ΠΊΠ°ΡΡΠΎΡΠΊΠ΅ ΠΈ ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°.
ΠΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΊΠ°ΠΊ Π²ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΡΠ΅Π±Ρ ΠΈ Π΄Π°ΠΌ Π»ΠΈΠ½ΠΊ Π½Π° github β Π΄Π°-Π΄Π°, Π·Π°Π±ΠΈΡΠ°ΠΉΡΠ΅ ΠΈ ΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ!
ΠΠ±ΡΠ΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
Π‘Π²ΠΎΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΌΡ Π½Π°Π·Π²Π°Π»ΠΈ CallMe. CallMe β ΡΡΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π½Π° PHP.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ
- PHP 5.6
PHP AMI-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° - Composer
- Nginx + php-fpm
- supervisor
- AMI (Asterisk Manager Interface)
- ΠΠ΅Π±Ρ ΡΠΊΠΈ Bitrix (ΡΠΏΡΠΎΡΠ΅Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ REST API)
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Ρ Asterisk Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ web-ΡΠ΅ΡΠ²Π΅Ρ (Ρ Π½Π°Ρ ΡΡΠΎ nginx+php-fpm), supervisor ΠΈ 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;
}
}
Π Π°Π·Π±ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³Π°, Π²ΠΎΠΏΡΠΎΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΠΈ Π΄Π°ΠΆΠ΅ Π²ΡΠ±ΠΎΡ web-ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ ΠΎΡΡΠ°Π²Π»Ρ Π·Π° ΡΠ°ΠΌΠΊΠ°ΠΌΠΈ ΡΡΠ°ΡΡΠΈ β ΠΎΠ± ΡΡΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ. Π£ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ ΠΏΠΎ http ΠΈ ΠΏΠΎ https.
Π£ Π½Π°Ρ β https, ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ let’s encrypt.
ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Ρ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π΅ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΠΈΡΡΠΈΠΊΡ24
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π²Π° Π²Π΅Π±Ρ ΡΠΊΠ°.
ΠΡ ΠΎΠ΄ΡΡΠΈΠΉ Π²Π΅Π±Ρ ΡΠΊ.
ΠΠΎΠ΄ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° (Ρ id 1) ΠΈΠ΄Π΅ΠΌ ΠΏΠΎ ΠΏΡΡΠΈ: ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ -> ΠΠ΅Π±Ρ ΡΠΊΠΈ -> ΠΠΎΠ±Π°Π²ΠΈΡΡ Π²Π΅Π±Ρ ΡΠΊ -> ΠΡ ΠΎΠ΄ΡΡΠΈΠΉ Π²Π΅Π±Ρ ΡΠΊ
ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²Ρ
ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π²Π΅Π±Ρ
ΡΠΊΠ° ΠΊΠ°ΠΊ Π½Π° ΡΠΊΡΠΈΠ½Π°Ρ
:
Π ΠΆΠΌΠ΅ΠΌ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ.
ΠΠΎΡΠ»Π΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΠΈΡΡΠΈΠΊΡ24 ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ URL Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π²Π΅Π±Ρ ΡΠΊΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅Π±Π΅ Π²Π°Ρ Π²Π°ΡΠΈΠ°Π½Ρ URL Π±Π΅Π· Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅Π³ΠΎ /profile/ β ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠΌΠΈ Π·Π²ΠΎΠ½ΠΊΠ°ΠΌΠΈ.
Π£ ΠΌΠ΅Π½Ρ ΡΡΠΎ https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/
ΠΡΡ ΠΎΠ΄ΡΡΠΈΠΉ Π²Π΅Π±Ρ ΡΠΊ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ -> ΠΠ΅Π±Ρ ΡΠΊΠΈ -> ΠΠΎΠ±Π°Π²ΠΈΡΡ Π²Π΅Π±Ρ ΡΠΊ -> ΠΡΡ ΠΎΠ΄ΡΡΠΈΠΉ Π²Π΅Π±Ρ ΡΠΊ
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠ½ΠΎΠ²Π° Π½Π° ΡΠΊΡΠΈΠ½Π°Ρ :
Π‘ΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ΄ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
Π£ ΠΌΠ΅Π½Ρ ΡΡΠΎ xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6
. ΠΠ³ΠΎ ΡΠΎΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π±Π΅, ΠΎΠ½ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΡ
Π·Π²ΠΎΠ½ΠΊΠΎΠ².
ΠΠ°ΠΆΠ½ΠΎ!
ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΠΈΡΡΠΈΠΊΡ24 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½ ssl-ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ letsencrypt), ΠΈΠ½Π°ΡΠ΅ api Π±ΠΈΡΡΠΈΠΊΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΠΎΠ±Π»Π°ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ Π²ΠΎΠ»Π½ΠΎΠ²Π°ΡΡΡΡ β ΡΠ°ΠΌ ΡΠΆΠ΅ Π΅ΡΡΡ ssl.
ΠΠ°ΠΆΠ½ΠΎ!
Π ΠΏΠΎΠ»Π΅ Β«ΠΠ΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°Β» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ ΠΈΠ· ΡΠ΅ΡΠΈ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ Π°Π΄ΡΠ΅Ρ!
Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΡΡΠΈΡ ΠΎΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π½Π°Ρ CallMeOut Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΠΈΡ Π·Π²ΠΎΠ½ΠΊΠΎΠ² (ΡΡΠΎΠ±Ρ ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡ Π½Π° Π½ΠΎΠΌΠ΅Ρ Π½Π° ΠΠ’Π‘ ΡΠ»Π΅ΡΠ°Π»Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°ΡΠΈΠΈ Π·Π²ΠΎΠ½ΠΊΠ°).
Π ΠΌΠ΅Π½Ρ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ: ΠΡΠ΅ -> Π’Π΅Π»Π΅ΡΠΎΠ½ΠΈΡ -> ΠΡΠ΅ -> ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ, ΡΡΠ°Π²ΠΈΠΌ Π² Β«ΠΠΎΠΌΠ΅Ρ Π΄Π»Ρ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π·Π²ΠΎΠ½ΠΊΠ° ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡΒ» ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: CallMeOut ΠΈ ΠΆΠΌΠ΅ΠΌ Β«Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡΒ»
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° asterisk
ΠΠ»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ 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});
}
};
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π°: Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° globals.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ URLRECORDS Ρ ΡΠ°Π½ΠΈΡ Π² ΡΠ΅Π±Π΅ URL ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΎΠ², ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Bitrix24 Π±ΡΠ΄Π΅Ρ ΠΈΡ ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°ΡΡ Π² ΠΊΠ°ΡΡΠΎΡΠΊΡ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ°.
ΠΠ°Π»Π΅Π΅ Π½Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡ ΠΌΠ°ΠΊΡΠΎΡ recording.
ΠΠ΄Π΅ΡΡ, ΠΏΠΎΠΌΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΎΠ², ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ FullFname.
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) ΠΈ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ°Π³ΠΎΠΌ, ΡΠ»Π΅ΠΌ Π²ΡΠ΅ Π±ΠΈΡΡΠΈΠΊΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ curl.
Π Π΅ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π³ΠΈΠΈ β Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ:
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());
ΠΠ½Π° Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΠ’Π‘ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ CallerID(name) ΡΠ°Π²Π½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ CallMeCallerIDName.
Π‘Π°ΠΌΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ CallMeCallerIDName, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ CallMe (Π΅ΡΠ»ΠΈ Π² Bitrix24 Π΅ΡΡΡ Π€ΠΠ Π΄Π»Ρ Π½ΠΎΠΌΠ΅ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΠ²ΡΠ΅Π³ΠΎ β ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ CallerID(name), Π½Π΅Ρ β Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ).
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π€Π°ΠΉΠ» Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β /var/www/pbx.vistep.ru/config.php
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
- CallMeDEBUG β Π΅ΡΠ»ΠΈ 1, ΡΠΎ Π² Π»ΠΎΠ³ ΡΠ°ΠΉΠ» Π±ΡΠ΄ΡΡ ΠΏΠΈΡΠ°ΡΡΡΡ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, 0 β Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΈΡΠ΅ΠΌ
- tech β SIP/PJSIP/IAX/etc
- authToken β ΡΠΎΠΊΠ΅Π½ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π±ΠΈΡΡΠΈΠΊΡ24, ΠΊΠΎΠ΄ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π²Π΅Π±Ρ ΡΠΊΠ°
- bitrixApiUrl β URL Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π²Π΅Π±Ρ ΡΠΊΠ°, Π±Π΅Π· profile/
- extentions β ΡΠΏΠΈΡΠΎΠΊ Π²Π½Π΅ΡΠ½ΠΈΡ Π½ΠΎΠΌΠ΅ΡΠΎΠ²
- context β ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°ΡΠΈΠΈ Π·Π²ΠΎΠ½ΠΊΠ°
- listener_timeout β ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΎΡ asterisk
- asterisk β ΠΌΠ°ΡΡΠΈΠ² Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π°ΡΡΠ΅ΡΠΈΡΠΊΡ:
- host β ip ΠΈΠ»ΠΈ hostname ΡΠ΅ΡΠ²Π΅ΡΠ° Π°ΡΡΠ΅ΡΠΈΡΠΊ
- scheme β ΡΡ Π΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (tcp://, tls://)
- port β ΠΏΠΎΡΡ
- username β ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
- secret β ΠΏΠ°ΡΠΎΠ»Ρ
- 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
);
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° supervisor
Supervisor ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ°-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ ΠΎΡ Asterisk CallMeIn.php, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π·Π²ΠΎΠ½ΠΊΠΈ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΠΈΡΡΠΈΠΊΡ24 (ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΊΠ°ΡΡΠΎΡΠΊΡ, ΡΠΊΡΡΡΡ ΠΊΠ°ΡΡΠΎΡΠΊΡ ΠΈ Ρ.Π΄.).
Π€Π°ΠΉΠ» Π½Π°ΡΡΡΠΎΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ:
/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
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΡΠ²Π΅ΡΠ΅Π½ β ΠΎΠΏΡΡΠ½ΡΠΉ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΡΡΠΌΠ΅Π΅Ρ Π²Π½Π΅Π΄ΡΠΈΡΡ Ρ ΡΠ΅Π±Ρ ΠΈ ΠΏΠΎΡΠ°Π΄ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠ°ΠΊ ΠΎΠ±Π΅ΡΠ°Π»,
ΠΠΎΠΏΡΠΎΡΡ, ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡ β ΠΏΡΠΎΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΡ. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΊΠ°ΠΊ ΡΠ»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ, Π½Π°ΠΏΠΈΡΠΈΡΠ΅, Π° Π² ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ ΡΠ°ΡΠΊΡΡΡΡ Π²ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com