ΠΠΌΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π΅ Π½Π° 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 ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ)
- Bitrix webhooks (ΠΎΠΏΡΠΎΡΡΠ΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° REST API)
ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
ΠΠ° ΡΡΡΠ²ΡΡ ΡΡΡ Asterisk ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΡΠ΅Π± ΡΡΡΠ²ΡΡ (ΠΏΡΠΈ Π½Π°Ρ Π΅ nginx+php-fpm), supervisor ΠΈ 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, Π½Π΅ΠΊΠ° ΡΠΈΡΡΠΎΠ²Π°ΠΌΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°.
ΠΠΊΠΎ ΡΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ Π²ΡΠΈΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, ΡΠΎΠ³Π°Π²Π° ΠΊΠ°ΡΠΎ ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ Π²ΡΡΠ·ΠΊΠ°ΡΠ°, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Bitrix24
ΠΠ΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π΄Π²Π΅ ΡΠ΅Π±ΠΊΡΠΊΠΈΡΠΊΠΈ.
ΠΡ ΠΎΠ΄ΡΡΠ° ΡΠ΅Π±ΠΊΡΠΊΠΈΡΠΊΠ°.
ΠΠΎΠ΄ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠΈΡ Π°ΠΊΠ°ΡΠ½Ρ (Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ 1) ΡΠ»Π΅Π΄Π²Π°ΠΉΡΠ΅ ΠΏΡΡΡ: ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ -> Webhooks -> Add webhook -> Incoming webhook
ΠΠΎΠΏΡΠ»Π½Π΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° Π²Ρ
ΠΎΠ΄ΡΡΠΈΡ webhook, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Π΅ΠΊΡΠ°Π½Π½ΠΈΡΠ΅ ΡΠ½ΠΈΠΌΠΊΠΈ:
Π ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ
Ρ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅.
Π‘Π»Π΅Π΄ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Bitrix24 ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ URL Π°Π΄ΡΠ΅ΡΠ° Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡ webhook, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ°ΠΏΠ°Π·Π΅ΡΠ΅ Π²Π°ΡΠ°ΡΠ° URL Π²Π΅ΡΡΠΈΡ Π±Π΅Π· ΠΊΡΠ°ΠΉΠ½ΠΈΡ /ΠΏΡΠΎΡΠΈΠ»/ ββ- ΡΠΎΠΉ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π²Ρ
ΠΎΠ΄ΡΡΠΈ ΠΎΠ±Π°ΠΆΠ΄Π°Π½ΠΈΡ.
ΠΈΠΌΠ°ΠΌ ΡΠΎΠ²Π° https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/
ΠΠ·Ρ ΠΎΠ΄ΡΡΠ° ΡΠ΅Π±ΠΊΡΠΊΠΈΡΠΊΠ°.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ -> Webhooks -> Add webhook -> Outgoing webhook
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈΡΠ΅ ΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ Π½Π° Π΅ΠΊΡΠ°Π½Π½ΠΈΡΠ΅ ΡΠ½ΠΈΠΌΠΊΠΈ:
ΠΠ°ΠΏΠ°Π·Π΅ΡΠ΅ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° Π·Π° ΠΎΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
ΠΈΠΌΠ°ΠΌ ΡΠΎΠ²Π° xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6
. Π’ΡΡΠ±Π²Π° ΡΡΡΠΎ Π΄Π° Π³ΠΎ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ Π·Π° ΡΠ΅Π±Π΅ ΡΠΈ; ΡΡΡΠ±Π²Π° Π²ΠΈ, Π·Π° Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΠΈΠ·Ρ
ΠΎΠ΄ΡΡΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΆΠ½ΠΎ!
SSL ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Π½Π° ΡΡΡΠ²ΡΡΠ° Bitrix24 (ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ letsencrypt), Π² ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ API Π½Π° Bitrix Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΎΠ±Π»Π°ΡΠ½Π° Π²Π΅ΡΡΠΈΡ, Π½Π΅ ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΠΉΡΠ΅ - ΡΡ Π²Π΅ΡΠ΅ ΠΈΠΌΠ° ssl.
ΠΠ°ΠΆΠ½ΠΎ!
ΠΠΎΠ»Π΅ΡΠΎ βΠΠ΄ΡΠ΅Ρ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°β ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ΄ΡΡΠΆΠ° Π°Π΄ΡΠ΅Ρ, Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΎΡ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ!
Π ΠΊΠ°ΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π΅Π½ ΡΡΠΈΡ , Π½Π΅ΠΊΠ° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡ CallMeOut ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΈ (ΡΠ°ΠΊΠ° ΡΠ΅ ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° PBX, ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° Π·Π°ΠΏΠΎΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ° ΡΠ΅ ΠΈΠ·ΡΠ΅Π·Π½Π΅).
Π ΠΌΠ΅Π½ΡΡΠΎ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅: ΠΡΠ΅ -> Π’Π΅Π»Π΅ΡΠΎΠ½ΠΈΡ -> ΠΡΠ΅ -> ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ, Π·Π°Π΄Π°ΠΉΡΠ΅ Π² βΠΠΎΠΌΠ΅Ρ Π·Π° ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅β ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: CallMeOut ΠΈ Π½Π°ΡΠΈΡΠ½Π΅ΡΠ΅ βΠΠ°ΠΏΠ°Π·Π²Π°Π½Π΅β
ΠΠ°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ Π½Π° Π·Π²Π΅Π·Π΄ΠΈΡΠΊΠ°
ΠΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Asterisk ΠΈ Bitrix24 ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ AMI user 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});
}
};
ΠΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ ΠΎΡΠ½Π°ΡΠ°Π»ΠΎ: Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ.
ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ² URLΠΠΠΠΠ‘Π ΡΡΡ ΡΠ°Π½ΡΠ²Π° 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 ΡΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ 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());
Π’Ρ ΠΊΠ°Π·Π²Π° Π½Π° PBX Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° Caller ID (ΠΈΠΌΠ΅) ΡΠ°Π²Π½ΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° CallMeCallerIDName.
Π‘Π°ΠΌΠ°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° CallMeCallerIDName ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΡΠ΅ Π·Π°Π΄Π°Π²Π° ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ CallMe (Π°ΠΊΠΎ Bitrix24 ΠΈΠΌΠ° ΠΏΡΠ»Π½ΠΎ ΠΈΠΌΠ΅ Π·Π° Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΠΎΠ±Π°ΠΆΠ΄Π°ΡΠΈΡ ΡΠ΅, Π·Π°Π΄Π°ΠΉΡΠ΅ Π³ΠΎ ΠΊΠ°ΡΠΎ Caller ID (ΠΈΠΌΠ΅), Π½Π΅ - Π½ΡΠΌΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π½ΠΈΡΠΎ).
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
Π€Π°ΠΉΠ» Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ - /var/www/pbx.vistep.ru/config.php
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ:
- CallMeDEBUG β Π°ΠΊΠΎ 1, Π²ΡΠΈΡΠΊΠΈ ΡΡΠ±ΠΈΡΠΈΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅ Π±ΡΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π² Π»ΠΎΠ³ ΡΠ°ΠΉΠ»Π°, 0 β Π½Π΅ ΠΏΠΈΡΠ΅ΠΌ Π½ΠΈΡΠΎ
- ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ - SIP/PJSIP/IAX/ΠΈ Π΄Ρ
- authToken β Π’ΠΎΠΊΠ΅Π½ Π·Π° ΠΎΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° Bitrix24, ΠΊΠΎΠ΄ Π·Π° ΠΎΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄ΡΡ webhook
- bitrixApiUrl β URL Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡ webhook, Π±Π΅Π· ΠΏΡΠΎΡΠΈΠ»/
- ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ β ΡΠΏΠΈΡΡΠΊ Ρ Π²ΡΠ½ΡΠ½ΠΈ Π½ΠΎΠΌΠ΅ΡΠ°
- ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ β ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅
- ΡΠ»ΡΡΠ°ΡΠ΅Π»_ΡΠ°ΠΉΠΌΠ°ΡΡ β ΡΠΊΠΎΡΠΎΡΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠ±ΠΈΡΠΈΡ ΠΎΡ Π·Π²Π΅Π·Π΄ΠΈΡΠΊΠ°
- Π·Π²Π΅Π·Π΄ΠΈΡΠΊΠ° β ΠΌΠ°ΡΠΈΠ² Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ Π·Π²Π΅Π·Π΄ΠΈΡΠΊΠ°ΡΠ°:
- Π΄ΠΎΠΌΠ°ΠΊΠΈΠ½ β 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
);
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΡΡΠΏΠ΅ΡΠ²Π°ΠΉΠ·ΡΡ
Supervisor ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠ±ΠΈΡΠΈΡ ΠΎΡ 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