เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเดฟเตฝ IP-PBX เดเดธเตเดฑเตเดฑเดฑเดฟเดธเตเดเต, CRM Bitrix24 เดเดจเตเดจเดฟเดต เดธเดเดฏเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดเดชเตเดทเดจเตเดเตพ เดเดฃเตเดเต, เดชเดเตเดทเต เดเดเตเดเตพ เดเดชเตเดชเตเดดเตเด เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เดเดดเตเดคเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต.
เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเดฒเตเดฒเดพเด เดธเตเดฑเตเดฑเดพเตปเดกเตเตผเดกเต เดเดฃเต:
- Bitrix24-เดฒเต เดเดฐเต เดเตเดฒเดฏเดจเตเดฑเดฟเตปเดฑเต เดซเตเตบ เดจเดฎเตเดชเดฑเตเดณเตเดณ เดเดฐเต เดฒเดฟเดเตเดเดฟเตฝ เดเตเดฒเดฟเดเตเดเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเตเดเต, เดเดธเตเดฑเตเดฑเดฑเดฟเดธเตเดเต เดเดชเดฏเตเดเตเดคเดพเดตเดฟเดจเตเดฑเต เดเดจเตเดคเดฐเดฟเด เดจเดฎเตเดชเดฑเดฟเดจเต เดเตเดฒเดฏเดจเตเดฑเต เดซเตเตบ เดจเดฎเตเดชเดฑเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต. Bitrix24-เตฝ, เดเตเดณเดฟเดจเตเดฑเต เดเดฐเต เดฑเตเดเตเดเตเตผเดกเต เดฐเตเดเดชเตเดชเตเดเตเดคเตเดคเตเดเดฏเตเด, เดเตเดณเดฟเดจเตเดฑเต เด เดตเดธเดพเดจเด, เดธเดเดญเดพเดทเดฃเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เดฑเตเดเตเดเตเตผเดกเดฟเดเดเต เดเดฏเตผเดคเตเดคเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
- Asterisk-เดจเต เดชเตเดฑเดคเตเดคเต เดจเดฟเดจเตเดจเต เดเดฐเต เดเตเตพ เดฒเดญเดฟเดเตเดเตเดจเตเดจเต - Bitrix24 เดเดจเตเดฑเตผเดซเตเดธเดฟเตฝ เดเดเตเดเตพ เดเตเดฒเดฏเดจเตเดฑเต เดเดพเตผเดกเต เดเดฐเตเดเต เดจเดฎเตเดชเดฑเดฟเดฒเตเดเตเดเต เด เดเตเตพ เดตเดจเตเดจ เดเตเดตเดจเดเตเดเดพเดฐเดจเต เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเต.
เด เดคเตเดคเดฐเดฎเตเดฐเต เดเตเดฒเดฏเดจเตเดฑเต เดเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดเดฐเต เดชเตเดคเดฟเดฏ เดฒเตเดกเต เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดพเตผเดกเต เดเดเตเดเตพ เดคเตเดฑเดเตเดเตเด.
เดเตเตพ เดชเตเตผเดคเตเดคเดฟเดฏเดพเดฏ เดเดเตป, เดเดเตเดเตพ เดเดคเต เดเดพเตผเดกเดฟเตฝ เดชเตเดฐเดคเดฟเดซเดฒเดฟเดชเตเดชเดฟเดเตเดเตเดเดฏเตเด เดธเดเดญเดพเดทเดฃเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เดฑเตเดเตเดเตเตผเดกเดฟเดเดเต เดเดเตเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด.
เดจเดฟเดเตเดเตพเดเตเดเดพเดฏเดฟ เดเดฒเตเดฒเดพเด เดเดเตเดเดจเต เดธเดเตเดเตเดเดฐเดฟเดเตเดเดพเดฎเตเดจเตเดจเตเด เดเดฟเดคเตเดคเดฌเดฟเดฒเตเดเตเดเตเดณเตเดณ เดเดฐเต เดฒเดฟเดเตเดเต เดจเตฝเดเดพเดฎเตเดจเตเดจเตเด เดเดเตเดเดฟเดจเต เดคเดพเดดเต เดเดพเตป เดจเดฟเดเตเดเดณเตเดเต เดชเดฑเดฏเตเด - เด
เดคเต, เด
เดคเต, เด
เดคเต เดเดเตเดคเตเดคเต เดเดชเดฏเตเดเดฟเดเตเดเตเด!
เดชเตเดคเตเดตเดพเดฏ เดตเดฟเดตเดฐเดฃเด
เดเดเตเดเดณเตเดเต เดธเดเดฏเตเดเดจเดคเตเดคเต เดเดเตเดเตพ CallMe เดเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเต. PHP-เดฏเดฟเตฝ เดเดดเตเดคเดฟเดฏ เดเดฐเต เดเตเดฑเดฟเดฏ เดตเตเดฌเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเดพเดฃเต CallMe.
เดเดชเดฏเตเดเดฟเดเตเด เดธเดพเดเตเดเตเดคเดฟเดเดตเดฟเดฆเตเดฏเดเดณเตเด เดธเตเดตเดจเดเตเดเดณเตเด
- PHP 5.6
PHP AMI เดฒเตเดฌเตเดฐเดฑเดฟ - เดเดฎเตเดชเตเดพเดธเตเดเตเดฏเตเดฏเตเดจเตเดจเดฏเดพเตพ
- Nginx + php-fpm
- เดธเตเดชเตเดชเตผเดตเตเดธเตผ
- AMI (เดเดธเตเดฑเตเดฑเดฑเดฟเดธเตเดเต เดฎเดพเดจเตเดเตผ เดเดจเตเดฑเตผเดซเตเดธเต)
- Bitrix webhooks (เดฒเดณเดฟเดคเดฎเดพเดเตเดเดฟเดฏ REST API เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตฝ)
เดฎเตเตปเดเตเดเตเดเดฟ เดเตเดฐเดฎเตเดเดฐเดฃเด
เดเดธเตเดฑเตเดฑเดฑเดฟเดธเตเดเต เดเดณเตเดณ เดเดฐเต เดธเตเตผเดตเดฑเดฟเตฝ, เดจเดฟเดเตเดเตพ เดเดฐเต เดตเตเดฌเต เดธเตเตผเดตเตผ (เดเดเตเดเตพเดเตเดเต เดเดคเต nginx+php-fpm เดเดฃเต), เดธเตเดชเตเดชเตผเดตเตเดธเตผ, เดเดฟเดฑเตเดฑเต เดเดจเตเดจเดฟเดต เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเตเดฃเตเดเดคเตเดฃเตเดเต.
เดเตปเดธเตเดฑเตเดฑเดฒเตเดทเตป เดเดฎเดพเตปเดกเต (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 เดเดณเตเดณเดคเต), เดชเดพเดค เดชเดฟเดจเตเดคเตเดเดฐเตเด: เด เดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเตพ -> เดตเตเดฌเตโเดนเตเดเตเดเตเดเตพ -> เดตเตเดฌเตโเดนเตเดเตเดเต เดเตเตผเดเตเดเตเด -> เดเตปเดเดฎเดฟเดเดเต เดตเตเดฌเตโเดนเตเดเตเดเต
เดธเตเดเตเดฐเตเตปเดทเตเดเตเดเตเดเดณเดฟเดฒเตเดคเตเดชเตเดฒเต เดเตปเดเดฎเดฟเดเดเต เดตเตเดฌเตเดนเตเดเตเดเดฟเดจเตเดฑเต เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ เดชเตเดฐเดฟเดชเตเดชเดฟเดเตเดเตเด:
เดเดชเตเดชเด เดธเตเดตเต เดเตเดฒเดฟเดเตเดเต เดเตเดฏเตเดฏเตเด.
เดธเดเดฐเดเตเดทเดฟเดเตเดเดคเดฟเดจเต เดถเตเดทเด, เดเตปเดเดฎเดฟเดเดเต เดตเตเดฌเตโเดนเตเดเตเดเดฟเดจเตเดฑเต URL Bitrix24 เดจเตฝเดเตเด, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:
เด
เดจเตเดคเดฟเดฎ /เดชเตเดฐเตเดซเตเตฝ/ เดเดฒเตเดฒเดพเดคเต URL-เดจเตเดฑเต เดจเดฟเดเตเดเดณเตเดเต เดชเดคเดฟเดชเตเดชเต เดธเดเดฐเดเตเดทเดฟเดเตเดเตเด - เดเตปเดเดฎเดฟเดเดเต เดเตเดณเตเดเตพเดเตเดเตเดชเตเดชเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป เดเดคเต เด
เดชเตเดฒเดฟเดเตเดเตเดทเดจเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเตเด.
เดเดจเดฟเดเตเดเต เดเดคเต เดเดฃเตเดเต https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/
เดเดเตเดเตเดเตเดฏเดฟเดเดเต เดตเตเดฌเตเดนเตเดเตเดเต.
เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเตพ -> Webhooks -> webhook เดเตเตผเดเตเดเตเด -> Outgoing webhook
เดตเดฟเดถเดฆเดพเดเดถเดเตเดเตพ เดตเตเดฃเตเดเตเด เดธเตเดเตเดฐเตเตปเดทเตเดเตเดเตเดเดณเดฟเตฝ เดเดฃเตเดเต:
เด
เดเดเตเดเตเดค เดเตเดกเต เดธเดเดฐเดเตเดทเดฟเดเตเดเต เดธเตเดตเตเดเดฐเดฟเดเตเดเตเด
เดเดจเดฟเดเตเดเต เดเดคเต เดเดฃเตเดเต xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6
. เดจเดฟเดเตเดเตพ เด
เดคเต เดจเดฟเดเตเดเตพเดเตเดเดพเดฏเดฟ เดชเดเตผเดคเตเดคเตเดเดฏเตเด เดตเตเดฃเด; เดเดเตเดเตโเดเตเดฏเดฟเดเดเต เดเตเดณเตเดเตพ เดเตเดฏเตเดฏเดพเตป เดจเดฟเดเตเดเตพเดเตเดเดคเต เดเดตเดถเตเดฏเดฎเดพเดฃเต.
เดชเตเดฐเดงเดพเดจเดชเตเดชเตเดเตเดเดคเต!
เดเดฐเต SSL เดธเตผเดเตเดเดฟเดซเดฟเดเตเดเดฑเตเดฑเต Bitrix24 เดธเตเตผเดตเดฑเดฟเตฝ เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดคเดฟเดฐเดฟเดเตเดเดฃเด (เดจเดฟเดเตเดเตพเดเตเดเต letsencrypt เดเดชเดฏเตเดเดฟเดเตเดเดพเด), เด เดฒเตเดฒเตเดเตเดเดฟเตฝ Bitrix api เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดฟเดฒเตเดฒ. เดจเดฟเดเตเดเตพเดเตเดเต เดเดฐเต เดเตเดฒเตเดกเต เดชเดคเดฟเดชเตเดชเต เดเดฃเตเดเตเดเตเดเดฟเตฝ, เดตเดฟเดทเดฎเดฟเดเตเดเตเดฃเตเด - เดเดคเดฟเดจเต เดเดคเดฟเดจเดเด ssl เดเดฃเตเดเต.
เดชเตเดฐเดงเดพเดจเดชเตเดชเตเดเตเดเดคเต!
"เดชเตเดฐเตเดธเดธเตผ เดตเดฟเดฒเดพเดธเด" เดซเตเตฝเดกเดฟเตฝ เดเดจเตเดฑเตผเดจเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดเตเดธเดธเต เดเตเดฏเตเดฏเดพเดตเตเดจเตเดจ เดเดฐเต เดตเดฟเดฒเดพเดธเด เดเดฃเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเดฃเด!
เด เดตเดธเดพเดจ เดธเตเดชเตผเดถเดฎเตเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ, เดเตเดณเตเดเตพ เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฐเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเดพเดฏเดฟ เดจเดฎเตเดเตเดเต CallMeOut เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเดพเด (เด เดคเดฟเดจเดพเตฝ เดจเดฟเดเตเดเตพ PBX-เดฒเต เดจเดฎเตเดชเดฑเดฟเตฝ เดเตเดฒเดฟเดเตเดเตเดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ, เดเตเตพ เดเดคเตเดญเดตเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฎเดพเตปเดกเต เดชเดฑเดจเตเดจเตเดชเตเดเตเด).
เดฎเตเดจเตเดตเดฟเตฝ, เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด: เดเตเดเตเดคเตฝ -> เดเตเดฒเดฟเดซเตเดฃเดฟ -> เดเตเดเตเดคเตฝ -> เดเตเดฐเดฎเตเดเดฐเดฃเดเตเดเตพ, "เดกเตเดซเตเตพเดเตเดเต เดเดเตเดเตโเดเตเดฏเดฟเดเดเต เดเตเตพ เดจเดฎเตเดชเตผ" เดเดจเตเดจเดคเดฟเตฝ เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเด เดเดชเตเดฒเดฟเดเตเดเตเดทเตป: CallMeOut เดคเตเดเตผเดจเตเดจเต "เดธเตเดตเต" เดเตเดฒเดฟเดเตเดเต เดเตเดฏเตเดฏเตเด
เดจเดเตเดทเดคเตเดฐเดเดฟเดนเตเดจเด เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต
Asterisk เดเด Bitrix24 เดเด เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเดฟเดเดฏเดเดฐเดฎเดพเดฏ เดเดเดชเตเดเดฒเดฟเดจเต, Manager.conf เดเดจเตเดจเดคเดฟเดฒเตเดเตเดเต เดเดเตเดเตพ AMI เดเดชเดฏเตเดเตเดคเดพเดตเดฟเดจเต callme เดเตเตผเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต:
[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เดฐเตเดเดเตพ เดธเดเดญเดพเดทเดฃ เดฑเตเดเตเดเตเตผเดกเดฟเดเดเต เดซเดฏเดฒเตเดเดณเดฟเดฒเตเดเตเดเต 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 เดเตเดฌเดฟเดณเดฟเดฒเตเดเตเดเตเดณเตเดณ เดชเตเดฐเดตเตเดถเดจเด เด เดชเตเดฐเดพเดชเตเดคเดฎเดพเดเตเดเตเด (เด เดคเต เด เดตเดฟเดเต เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ), เดเตเดณเดฟเดจเตเดฑเต เด เดตเดธเดพเดจ เดธเดฎเดฏเด เดธเดเตเดเดฎเดพเดเตเดเตเด, เดเตเดณเดฟเดจเตเดฑเต เดซเดฒเด เด เดฑเดฟเดฏเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ เดฆเตเตผเดเตเดฏเด เดเดฃเดเตเดเดพเดเตเดเตเด - เดธเดเตเดเดฎเดพเดเตเดเตเด (เดตเตเดฐเดฟเดฏเดฌเดฟเตพ เดเตเตพเดฎเตเดกเดฟเดธเตเดชเตเดธเดฟเดทเตป) เดเตเดเดพเดคเต, เด เดตเดธเดพเดจ เดเดเตเดเด, เดธเดฟเดธเตเดฑเตเดฑเด เดเตเดฐเตเดณเดฟเดฒเตเดเต เดเดฒเตเดฒเดพเด เดฌเดฟเดเตเดฐเดฟเดเตเดธเดฟเดฒเตเดเตเดเต เด เดฏเดฏเตเดเตเดเตเด.
เดเตเดฑเดเตเดเตเดเตเดเดฟ เดฎเดพเดเดฟเดเต - เดเดฐเต เดเตปเดเดฎเดฟเดเดเต เดเตเตพ:
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
เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเดณเตเดเต เดตเดฟเดตเดฐเดฃเด:
- CallMeDEBUG - 1 เดเดฃเตเดเตเดเดฟเตฝ, เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดค เดเดฒเตเดฒเดพ เดเดตเดจเตเดฑเตเดเดณเตเด เดฒเตเดเต เดซเดฏเดฒเดฟเดฒเตเดเตเดเต เดเดดเตเดคเดชเตเดชเตเดเตเด, 0 - เดเดเตเดเตพ เดเดจเตเดจเตเด เดเดดเตเดคเตเดจเตเดจเดฟเดฒเตเดฒ
- เดเตเดเต - SIP/PJSIP/IAX/ etc
- authToken โ Bitrix24 เด เดเดเตเดเดพเดฐ เดเตเดเตเดเตบ, เดเดเตเดเตโเดเตเดฏเดฟเดเดเต เดตเตเดฌเตโเดนเตเดเตเดเต เด เดเดเตเดเดพเดฐ เดเตเดกเต
- bitrixApiUrl โ เดชเตเดฐเตเดซเตเตฝ เดเดฒเตเดฒเดพเดคเต เดเตปเดเดฎเดฟเดเดเต เดตเตเดฌเตเดนเตเดเตเดเดฟเดจเตเดฑเต URL/
- เดตเดฟเดชเตเดฒเตเดเดฐเดฃเดเตเดเตพ - เดฌเดพเดนเตเดฏ เดธเดเดเตเดฏเดเดณเตเดเต เดชเดเตเดเดฟเด
- เดธเดจเตเดฆเตผเดญเด - เดเดฐเต เดเตเตพ เดเดคเตเดญเดตเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดธเดจเตเดฆเตผเดญเด
- เดฒเดฟเดธเดฃเตผ_เดเตเดฎเตเดเตเดเต - เดจเดเตเดทเดคเตเดฐเดเดฟเดนเตเดจเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเดตเดจเตเดฑเต เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเดฟเดจเตเดฑเต เดตเตเดเดค
- เดจเดเตเดทเดคเตเดฐเดเดฟเดนเตเดจเด โ เดจเดเตเดทเดคเตเดฐเดเดฟเดนเตเดจเดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเตเดฐเดฎเตเดเดฐเดฃเดเตเดเดณเตเดณเตเดณ เดเดฐเต เด เดฑเต:
- เดนเตเดพเดธเตเดฑเตเดฑเต โ ip เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดเดธเตเดฑเตเดฑเดฑเดฟเดธเตเดเต เดธเตเตผเดตเดฑเดฟเดจเตเดฑเต เดนเตเดธเตเดฑเตเดฑเตเดจเดพเดฎเด
- เดธเตเดเตเด - เดเดฃเดเตเดทเตป เดกเดฏเดเตเดฐเด (tcp://, tls://)
- เดคเตเดฑเดฎเตเดเด - เดคเตเดฑเดฎเตเดเด
- เดเดชเดฏเตเดพเดเตเดคเตเดจเดพเดฎเด - เดเดชเดฏเตเดเตเดคเตเดจเดพเดฎเด
- เดฐเดนเดธเตเดฏ - password
- connect_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
);
เดธเตเดชเตเดชเตผเดตเตเดธเตผ เดธเดเตเดเตเดเดฐเดฃเด
เดเตปเดเดฎเดฟเดเดเต เดเตเดณเตเดเตพ เดจเดฟเดฐเตเดเตเดทเดฟเดเตเดเตเดเดฏเตเด Bitrix24 (เดเดพเตผเดกเต เดเดพเดฃเดฟเดเตเดเตเด, เดเดพเตผเดกเต เดฎเดฑเดฏเตเดเตเดเตเด เดฎเตเดคเดฒเดพเดฏเดต) เดฎเดพเดฏเดฟ เดธเดเดตเดฆเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจ Asterisk CallMeIn.php-เตฝ เดจเดฟเดจเตเดจเต เดเดตเดจเตเดฑเต เดนเดพเตปเดกเตโเดฒเตผ เดชเตเดฐเตเดธเดธเตเดธเต เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเดพเตป เดธเตเดชเตเดชเตผเดตเตเดธเตผ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต.
เดธเตเดทเตเดเดฟเดเตเดเตเดฃเตเด เดเตเดฐเดฎเตเดเดฐเดฃ เดซเดฏเตฝ:
/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