
ΠΠΎΡΡΠΎΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°ΡΠ΅ Π½Π° IP-PBX Asterisk ΠΈ CRM Bitrix24 Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°, Π½ΠΎ ΡΠ΅ΠΏΠ°ΠΊ ΡΠ΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌΠ΅ ΡΠ²ΠΎΡΠ°.
ΠΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ°, ΡΓ¨ Π΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ:
- Π‘ΠΎ ΠΊΠ»ΠΈΠΊΠ½ΡΠ²Π°ΡΠ΅ Π½Π° Π²ΡΡΠΊΠ° ΡΠΎ ΡΠ΅Π»Π΅ΡΠΎΠ½ΡΠΊΠΈ Π±ΡΠΎΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ Π²ΠΎ Bitrix24, Asterisk Π³ΠΎ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π° Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈΠΎΡ Π±ΡΠΎΡ Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ Π²ΠΎ ΡΠΈΠ΅ ΠΈΠΌΠ΅ Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ ΠΊΠ»ΠΈΠΊΠ½ΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠΎ ΡΠ΅Π»Π΅ΡΠΎΠ½ΡΠΊΠΈΠΎΡ Π±ΡΠΎΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ. ΠΠΎ Bitrix24, ΡΠ΅ ΡΠ½ΠΈΠΌΠ° Π·Π°ΠΏΠΈΡ ΠΎΠ΄ ΠΏΠΎΠ²ΠΈΠΊΠΎΡ ΠΈ Π½Π° ΠΊΡΠ°ΡΠΎΡ ΠΎΠ΄ ΠΏΠΎΠ²ΠΈΠΊΠΎΡ, ΡΠ΅ ΠΏΠΎΠ²Π»Π΅ΠΊΡΠ²Π° ΡΠ½ΠΈΠΌΠΊΠ° ΠΎΠ΄ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΎΡ.
- Π
Π²Π΅Π·Π΄ΠΈΡΠΊΠ°ΡΠ° Π΄ΠΎΠ±ΠΈΠ²Π° ΠΏΠΎΠ²ΠΈΠΊ ΠΎΠ΄Π½Π°Π΄Π²ΠΎΡ - Π²ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΎΡ Bitrix24 ΡΠ° ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°ΠΌΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°ΡΠ° ΠΊΠ°ΡΡΠΈΡΠΊΠ° Π½Π° Π²ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈΠΎΡ Π½Π° ΡΠΈΡ Π±ΡΠΎΡ ΠΏΡΠΈΡΡΠΈΠ³Π½Π° ΠΎΠ²ΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ.
ΠΠΎΠΊΠΎΠ»ΠΊΡ Π½Π΅ΠΌΠ° ΡΠ°ΠΊΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ, ΡΠ΅ ΡΠ° ΠΎΡΠ²ΠΎΡΠΈΠΌΠ΅ ΠΊΠ°ΡΡΠΈΡΠΊΠ°ΡΠ° Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ Π½Π° Π½ΠΎΠ²ΠΎ Π²ΠΎΠ΄ΡΡΠ²ΠΎ.
Π¨ΡΠΎΠΌ ΠΏΠΎΠ²ΠΈΠΊΠΎΡ Π΅ Π·Π°Π²ΡΡΠ΅Π½, Π³ΠΎ ΠΎΠ΄ΡΠ°Π·ΡΠ²Π°ΠΌΠ΅ ΠΎΠ²Π° Π½Π° ΠΊΠ°ΡΡΠΈΡΠΊΠ°ΡΠ° ΠΈ ΠΏΠΎΠ²Π»Π΅ΠΊΡΠ²Π°ΠΌΠ΅ ΡΠ½ΠΈΠΌΠΊΠ° ΠΎΠ΄ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΎΡ.
ΠΠΎΠ΄ ΡΠ΅ΡΠ΅ΡΠ΅ΡΠΎ ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΓ¨ Π·Π° ΡΠ΅Π±Π΅ ΠΈ ΡΠ΅ Π²ΠΈ Π΄Π°Π΄Π°ΠΌ Π»ΠΈΠ½ΠΊ Π΄ΠΎ github - Π΄Π°, Π΄Π°, Π·Π΅ΠΌΠ΅ΡΠ΅ Π³ΠΎ ΠΈ ΠΈΡΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π³ΠΎ!
ΠΠΏΡΡ ΠΎΠΏΠΈΡ
ΠΠ° Π½Π°ΡΠ΅ΠΊΠΎΠ²ΠΌΠ΅ Π½Π°ΡΠ°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° CallMe. CallMe Π΅ ΠΌΠ°Π»Π° Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π²ΠΎ PHP.
ΠΠΎΡΠΈΡΡΠ΅Π½ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΡΡΠ»ΡΠ³ΠΈ
- PHP 5.6
- ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΡ
- 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.confserver {
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, Π°ΡΠ΄Π΅ Π΄Π° Π³ΠΎ ΡΠΈΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ.
ΠΠΊΠΎ ΡΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»Π΅ ΡΓ¨ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, ΡΠΎΠ³Π°Ρ ΡΠΎ ΠΊΠ»ΠΈΠΊΠ½ΡΠ²Π°ΡΠ΅ Π½Π° Π²ΡΡΠΊΠ°ΡΠ° ΡΡΠ΅Π±Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π²Π°ΠΊΠ²ΠΎ Π½Π΅ΡΡΠΎ

ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° Bitrix24
ΠΡΠ΄Π΅ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Π΄Π²Π΅ Π²Π΅Π±-ΠΊΡΠΊΠΈ.
ΠΠΎΡΠ΄ΠΎΠ²Π½Π° Π²Π΅Π±-ΠΊΡΠΊΠ°.
ΠΠΎΠ΄ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠ°ΡΠ° ΡΠΌΠ΅ΡΠΊΠ° (ΡΠΎ id 1), ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΡΠ° ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ°: ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ -> ΠΠ΅Π±-ΠΊΡΠΊΠΈ -> ΠΠΎΠ΄Π°Ρ Π²Π΅Π±-ΠΊΡΠΊΠ° -> ΠΠΎΡΠ΄ΠΎΠ²Π½Π° Π²Π΅Π±-ΠΊΡΠΊΠ°

ΠΠΎΠΏΠΎΠ»Π½Π΅ΡΠ΅ Π³ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° Π΄ΠΎΡΠ΄ΠΎΠ²Π½Π°ΡΠ° Π²Π΅Π±-ΠΊΡΠΊΠ° ΠΊΠ°ΠΊΠΎ Π½Π° ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΠΎΠ΄ Π΅ΠΊΡΠ°Π½ΠΎΡ:


Π ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π·Π°ΡΡΠ²Π°Ρ.
ΠΠΎ Π·Π°ΡΡΠ²ΡΠ²Π°ΡΠ΅ΡΠΎ, Bitrix24 ΡΠ΅ ΡΠ° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ URL-ΡΠΎ Π½Π° Π΄ΠΎΡΠ΄ΠΎΠ²Π½Π°ΡΠ° Π²Π΅Π±-ΠΊΡΠΊΠ°, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ:

ΠΠ°ΡΡΠ²Π°ΡΡΠ΅ ΡΠ° Π²Π°ΡΠ°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° URL-ΡΠΎ Π±Π΅Π· ΠΊΠΎΠ½Π΅ΡΠ½ΠΈΠΎΡ /ΠΏΡΠΎΡΠΈΠ»/ ββ- ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Π΄ΠΎΡΠ΄ΠΎΠ²Π½ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ.
ΠΠ°Ρ Π³ΠΎ ΠΈΠΌΠ°ΠΌ ΠΎΠ²Π° https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/
ΠΠΎΡΠ΄ΠΎΠ²Π½Π° Π²Π΅Π±-ΠΊΡΠΊΠ°.
ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ -> ΠΠ΅Π±-ΠΊΡΠΊΠΈ -> ΠΠΎΠ΄Π°Ρ Π²Π΅Π±-ΠΊΡΠΊΠ° -> ΠΠΎΡΠ΄ΠΎΠ²Π½Π° Π²Π΅Π±-ΠΊΡΠΊΠ°
ΠΠ΅ΡΠ°Π»ΠΈΡΠ΅ ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π½Π° ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΠΎΠ΄ Π΅ΠΊΡΠ°Π½ΠΎΡ:


ΠΠ°ΡΡΠ²Π°ΡΡΠ΅ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π³ΠΎ ΠΊΠΎΠ΄ΠΎΡ Π·Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡΠ°

ΠΠ°Ρ Π³ΠΎ ΠΈΠΌΠ°ΠΌ ΠΎΠ²Π° xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. ΠΡΡΠΎ ΡΠ°ΠΊΠ°, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ Π·Π° ΡΠ΅Π±Π΅;
ΠΠ°ΠΆΠ½ΠΎ!
ΠΠΎΡΠ° Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° SSL ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Bitrix24 (ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ letsencrypt), ΠΈΠ½Π°ΠΊΡ Bitrix api Π½Π΅ΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΎΠ±Π»Π°ΠΊ Π²Π΅ΡΠ·ΠΈΡΠ°, Π½Π΅ Π³ΡΠΈΠΆΠ΅ΡΠ΅ ΡΠ΅ - ΡΠ°Π° Π²Π΅ΡΠ΅ ΠΈΠΌΠ° ssl.
ΠΠ°ΠΆΠ½ΠΎ!
ΠΠΎΠ»Π΅ΡΠΎ βΠΠ΄ΡΠ΅ΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡβ ΠΌΠΎΡΠ° Π΄Π° ΡΠΎΠ΄ΡΠΆΠΈ Π°Π΄ΡΠ΅ΡΠ° Π΄ΠΎΡΡΠ°ΠΏΠ½Π° ΠΎΠ΄ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ!
Π ΠΊΠ°ΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π΅Π½ Π΄ΠΎΠΏΠΈΡ, Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΠΎΡ CallMeOut ΠΊΠ°ΠΊΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° ΠΎΡΡΠ²Π°ΡΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ²ΠΈΡΠΈ (ΡΠ°ΠΊΠ° ΡΡΠΎ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π½Π° Π±ΡΠΎΡΠΎΡ Π½Π° PBX, ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠΎΡ ΡΠ΅ ΠΎΠ΄Π»Π΅ΡΠ°).
ΠΠΎ ΠΌΠ΅Π½ΠΈΡΠΎ, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅: ΠΠΎΠ²Π΅ΡΠ΅ -> Π’Π΅Π»Π΅ΡΠΎΠ½ΠΈΡΠ° -> ΠΠΎΠ²Π΅ΡΠ΅ -> ΠΠΎΡΡΠ°Π²ΠΊΠΈ, ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ Π²ΠΎ βΠ‘ΡΠ°Π½Π΄Π°ΡΠ΄Π΅Π½ Π±ΡΠΎΡ Π·Π° ΠΏΠΎΡΠ΄ΠΎΠ²Π΅Π½ ΠΏΠΎΠ²ΠΈΠΊβ ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°: CallMeOut ΠΈ ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ βΠΠ°ΡΡΠ²Π°Ρβ

ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠ²Π΅Π·Π΄ΠΈΡΠΊΠ°
ΠΠ° ΡΡΠΏΠ΅ΡΠ½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΠΏΠΎΠΌΠ΅ΡΡ Asterisk ΠΈ Bitrix24, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈΠΎΡ callme Π½Π° AMI Π½Π° manager.conf:
[callme]
secret = JD3clEB8_f23r-3ry84gJ
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.0
permit= 10.100.111.249/255.255.255.255
permit = 192.168.254.0/255.255.255.0
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,log,verbose,user,config,command,reporting,originate
Π‘Π»Π΅Π΄Π½ΠΎ, ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΡΠΈΠΊΠΎΠ²ΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π°Ρ ΠΏΡΠ΅ΠΊΡ dialplan (Π·Π° Π½Π°Ρ ΠΎΠ²Π° Π΅ extensions.ael).
ΠΠ΅ ΡΠ° Π΄Π°Π΄Π°ΠΌ ΡΠ΅Π»Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, Π° ΠΏΠΎΡΠΎΠ° ΡΠ΅ Π΄Π°Π΄Π°ΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π°ΡΠ΅:
globals {
WAV=/var/www/pbx.vistep.ru/callme/records/wav; //ΠΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ WAV
MP3=/var/www/pbx.vistep.ru/callme/records/mp3; //ΠΡΠ΄Π° Π²ΡΠ³ΡΡΠΆΠ°ΡΡ mp3 ΡΠ°ΠΉΠ»Ρ
URLRECORDS=https://pbx.vistep.ru/callme/records/mp3;
RECORDING=1; // ΠΠ°ΠΏΠΈΡΡ, 1 - Π²ΠΊΠ»ΡΡΠ΅Π½Π°.
};
macro recording(calling,called) {
if ("${RECORDING}" = "1"){
Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)});
System(mkdir -p ${MP3}/${datedir});
System(mkdir -p ${WAV}/${datedir});
Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${datedir}/${fname}.wav" "${MP3}/${datedir}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${datedir}/${fname}.mp3");
Set(FullFname=${URLRECORDS}/${datedir}/${fname}.mp3);
Set(CDR(filename)=${fname}.mp3);
Set(CDR(recordingfile)=${fname}.wav);
Set(CDR(realdst)=${called});
MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt});
};
};
context incoming {
888999 => {
&recording(${CALLERID(number)},${EXTEN});
Answer();
ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp()); // Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ CallerID Π΅ΡΠ»ΠΈ ΡΠ·Π½Π°Π»ΠΈ Π΅Π³ΠΎ Ρ ΠΠΈΡΡΠΈΠΊΡ24
Set(CallStart=${STRFTIME(epoch,,%s)});
Queue(Q1,tT);
Set(CallMeDISPOSITION=${CDR(disposition)});
Hangup();
}
h => {
Set(CDR_PROP(disable)=true);
Set(CallStop=${STRFTIME(epoch,,%s)});
Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)});
ExecIF(${ISNULL(${CallMeDISPOSITION})}?Set(CallMeDISPOSITION=${CDR(disposition)}):NoOP(=== CallMeDISPOSITION already was set ===));
}
}
context default {
_X. => {
Hangup();
}
};
context dial_out {
_[1237]XX => {
&recording(${CALLERID(number)},${EXTEN});
Set(__CallIntNum=${CALLERID(num)})
Set(CallStart=${STRFTIME(epoch,,%s)});
Dial(SIP/${EXTEN},,tTr);
Hangup();
}
_11XXX => {
&recording(${CALLERID(number)},${EXTEN});
Set(CallStart=${STRFTIME(epoch,,%s)});
Set(__CallIntNum=${CALLERID(num)});
Dial(SIP/${EXTEN:2}@toOurAster,,t);
Hangup();
}
_. => {
&recording(${CALLERID(number)},${EXTEN});
Set(__CallIntNum=${CALLERID(num)})
Set(CallStart=${STRFTIME(epoch,,%s)});
Dial(SIP/${EXTEN}@toOurAster,,t);
Hangup();
}
h => {
Set(CDR_PROP(disable)=true);
Set(CallStop=${STRFTIME(epoch,,%s)});
Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)});
if(${ISNULL(${CallMeDISPOSITION})}) {
Set(CallMeDISPOSITION=${CDR(disposition)});
}
System(curl -s http://pbx.vistep.ru/CallMeOut.php --data action=sendcall2b24 --data call_id=${CallMeCALL_ID} --data-urlencode FullFname=${FullFname} --data CallIntNum=${CallIntNum} --data CallDuration=${CallMeDURATION} --data-urlencode CallDisposition=${CallMeDISPOSITION});
}
};
ΠΠ° ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ ΠΎΠ΄ ΠΏΠΎΡΠ΅ΡΠΎΠΊ: Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° Π³Π»ΠΎΠ±ΡΠ»ΠΈ.
ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π£Π Π-Π ΠΠΠΠ ΠΠ ΡΠ° ΡΠΊΠ»Π°Π΄ΠΈΡΠ° URL-ΡΠΎ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π·Π° ΡΠ½ΠΈΠΌΠ°ΡΠ΅ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΈ, ΡΠΏΠΎΡΠ΅Π΄ ΠΊΠΎΠΈ 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 Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ID Π½Π° ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°Ρ (ΠΈΠΌΠ΅) Π΅Π΄Π½Π°ΠΊΠ²Π° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° CallMeCallerIDName.
Π‘Π°ΠΌΠ°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° CallMeCallerIDName, ΠΏΠ°ΠΊ, Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½Π° ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° CallMe (Π°ΠΊΠΎ Bitrix24 ΠΈΠΌΠ° ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΈΠΌΠ΅ Π·Π° Π±ΡΠΎΡΠΎΡ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΡΠΎΡ, ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ ΠΊΠ°ΠΊΠΎ ID Π½Π° ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°Ρ (ΠΈΠΌΠ΅), Π½Π΅ - Π½Π΅ΠΌΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ Π½ΠΈΡΡΠΎ).
ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°
ΠΠ°ΡΠΎΡΠ΅ΠΊΠ° Π·Π° ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° - /var/www/pbx.vistep.ru/config.php
ΠΠΏΠΈΡ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°:
- CallMeDEBUG β Π°ΠΊΠΎ 1, ΡΠΎΠ³Π°Ρ ΡΠΈΡΠ΅ Π½Π°ΡΡΠ°Π½ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ°, 0 β Π½Π΅ ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ Π½ΠΈΡΡΠΎ
- ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ° - SIP/PJSIP/IAX/ΠΈΡΠ½
- 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ΠΠ°ΠΊΠ»ΡΡΠΎΠΊ
Π‘Π΅ ΠΈΡΠΏΠΎΡΡΠ°Π²ΠΈ Π΄Π΅ΠΊΠ° Π΅ Π΄ΠΎΡΡΠ° ΠΊΠΎΠΌΠΏΠ»ΠΈΡΠΈΡΠ°Π½ΠΎ, Π½ΠΎ ΡΠΈΠ³ΡΡΠ΅Π½ ΡΡΠΌ Π΄Π΅ΠΊΠ° ΠΈΡΠΊΡΡΠ΅Π½ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΡΠΏΡΠΎΠ²Π΅Π΄Π΅ ΠΈ Π΄Π° Π³ΠΈ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΠΈ ΡΠ²ΠΎΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ.
ΠΠ°ΠΊΠΎ ΡΡΠΎ Π΅ Π²Π΅ΡΠ΅Π½ΠΎ, .
ΠΡΠ°ΡΠ°ΡΠ°, ΠΏΡΠ΅Π΄Π»ΠΎΠ·ΠΈ - Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΈ Π²ΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ. ΠΡΡΠΎ ΡΠ°ΠΊΠ°, Π΄ΠΎΠΊΠΎΠ»ΠΊΡ Π²Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ° ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠΌΠΈΠ½Π° ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° ΠΎΠ²Π°Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ°, ΠΏΠΈΡΠ΅ΡΠ΅, Π° Π²ΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π°ΠΌ Π΄Π° Π²ΠΈ ΠΎΡΠΊΡΠΈΡΠ°ΠΌ ΡΠ΅ ΠΏΠΎΠ΄Π΅ΡΠ°Π»Π½ΠΎ.
ΠΠ·Π²ΠΎΡ: www.habr.com
