{"id":284170,"date":"2017-03-30T14:05:02","date_gmt":"2017-03-30T10:05:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=284170"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=284170","title":{"rendered":"Asterisk. \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 amoCRM, step-by-step guid"},"content":{"rendered":"<p>\u0412 \u0441\u0435\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u0435\u043c\u0435 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043d\u043e\u0439 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0430\u0442\u044c\u0438, \u043d\u043e \u0434\u0430\u0436\u0435 \u0441\u043e\u0431\u0440\u0430\u0432 \u0438\u0445 \u0432\u0441\u0435 \u0432\u043e\u0435\u0434\u0438\u043d\u043e, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u044b\u0435 \u0440\u0443\u043a\u0438, \u043d\u0430\u043f\u0438\u043b\u044c\u043d\u0438\u043a \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0440\u043f\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0436\u0435\u043b\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u0440\u0441\u0438\u0441\u0430.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/144\/746\/d7c\/144746d7c370456dbfb47c50a2007b3a.png\"\/><\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f Asterisk \u043a amoCRM \u0432 \u0432\u0438\u0434\u0435 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043e\u0441\u0432\u0435\u0442\u0438\u0432 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f ssl-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 web-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0432\u044f\u0437\u043a\u0438.<\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u0412\u0432\u043e\u0434\u043d\u044b\u0435<\/h3>\n<p>  \u041d\u0430 \u043d\u0430\u0448\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0441\u0442\u0435\u043d\u0434\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b:  <\/p>\n<ul>\n<li>\u041e\u0421 Debian <br \/> \n<pre><code class=\"bash\">lsb_release -a No LSB modules are available. Distributor ID:\tDebian Description:\tDebian GNU\/Linux 8.7 (jessie) Release:\t8.7 Codename:\tjessie<\/code><\/pre>\n<p>   <\/li>\n<li>IP PBX Asterisk<br \/> \n<pre><code class=\"bash\">*CLI&gt; core show version  Asterisk 13.14.0 built by root @ asterisk.vistep.ru on a x86_64 running Linux on 2017-03-29 05:47:19 UTC<\/code><\/pre>\n<p>   <\/li>\n<li>web-\u0441\u0435\u0440\u0432\u0435\u0440 NGINX<br \/> \n<pre><code class=\"bash\">sudo nginx -v nginx version: nginx\/1.10.3<\/code><\/pre>\n<p>   <\/li>\n<li>PHP-FPM<br \/> \n<pre><code class=\"bash\">php5-fpm -v PHP 5.6.30-0+deb8u1 (fpm-fcgi) (built: Feb  8 2017 08:51:18) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies     with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies<\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0430<br \/> \n<pre><code class=\"bash\">tawny-owl:~$ dig +short asterisk.vistep.ru 138.201.164.52 <\/code><\/pre>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c ssl-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442<\/h3>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0433\u0430\u0439\u0434\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043e\u0442 Let\u2019s Encrypt.<br \/>  <i>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c StartSSL \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 \u0442\u0430\u043c, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0438\u0445 \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0438 \u043e\u0434\u0438\u043d \u0431\u0440\u0430\u0443\u0437\u0435\u0440. <\/i><br \/>  \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430, \u043d\u043e \u044f \u0432\u0441\u0435 \u0436\u0435 \u043e\u043f\u0438\u0448\u0443 \u0435\u0435 \u043f\u043e \u0448\u0430\u0433\u0430\u043c.  <\/p>\n<ol>\n<li>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u0430\u0439\u0442 <a href=\"https:\/\/letsencrypt.org\/\">letsencrypt.org<\/a> \u0438 \u0436\u043c\u0435\u043c \u00abGet Started\u00bb<br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0441\u043a\u0440\u0438\u043d<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f31\/c20\/275\/f31c20275f7b46d5b5a4e6263534a778.png\"\/>  <\/div>\n<\/div>\n<p>  <\/li>\n<li>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b With Shell Access, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u043d\u0430\u0439\u0434\u0435\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0441\u043a\u0440\u0438\u043d<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d7e\/a5e\/937\/d7ea5e937ac74acf84313334f4ad8011.png\"\/>  <\/div>\n<\/div>\n<\/li>\n<li>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 <a href=\"https:\/\/certbot.eff.org\/\">certbot.eff.org<\/a> \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u041f\u041e<br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0441\u043a\u0440\u0438\u043d<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8bb\/311\/98c\/8bb31198c9f64558bef8fc110ba0906f.png\"\/>  <\/div>\n<\/div>\n<\/li>\n<li>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c<br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434 \u0432 \u043a\u043e\u0441\u043d\u043e\u043b\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\"> echo &quot;deb http:\/\/ftp.debian.org\/debian jessie-backports main&quot; &gt;&gt; \/etc\/apt\/sources.list apt-get update apt-get install certbot -t jessie-backports <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<\/li>\n<li>\u0417\u0430\u0442\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b certbot.<br \/>  \u042f \u043f\u043e\u0448\u0435\u043b \u043f\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438:<br \/>  \u0432\u0431\u0438\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443<br \/> \n<pre><code class=\"bash\">certbot certonly<\/code><\/pre>\n<p>  \u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b \u044d\u0442\u0430\u043f\u0430\u043c \u043c\u0430\u0441\u0442\u0435\u0440\u0430, \u0433\u0434\u0435 \u0443\u043a\u0430\u0437\u0430\u043b \u0441\u0432\u043e\u0439 email, \u043f\u0443\u0442\u044c \u043a webroot, \u0438\u043c\u044f \u0434\u043e\u043c\u0435\u043d\u0430 \u0438 \u043f\u0440.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0441\u043a\u0440\u0438\u043d\u044b<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a08\/649\/962\/a086499624aa4c07863e28187c84c166.png\"\/><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/7cc\/4de\/dab\/7cc4dedabfea444da396eca43e3cc808.png\"\/><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/625\/7eb\/a96\/6257eba9678e403eb227d8265dc23c32.png\"\/><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e45\/a6b\/916\/e45a6b9161ae48d9b6830342dac1166a.png\"\/><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/3a3\/a53\/a52\/3a3a53a52392444aacf91234303da2c8.png\"\/>  <\/div>\n<\/div>\n<\/li>\n<li>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0432\u0438\u0434\u0438\u043c\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0437\u0430\u0432\u0435\u0442\u043d\u043e\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">IMPORTANT NOTES:  - Congratulations! Your certificate and chain have been saved at    \/etc\/letsencrypt\/live\/asterisk.vistep.ru\/fullchain.pem. Your cert    will expire on 2017-06-27. To obtain a new or tweaked version of    this certificate in the future, simply run certbot again. To    non-interactively renew *all* of your certificates, run &quot;certbot    renew&quot;  - If you like Certbot, please consider supporting our work by:     Donating to ISRG \/ Let's Encrypt:   https:\/\/letsencrypt.org\/donate    Donating to EFF:                    https:\/\/eff.org\/donate-le <\/code><\/pre>\n<\/div>\n<\/div>\n<\/li>\n<li>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0432 \u043c\u0435\u0441\u0442\u0430 \u0438\u0445 \u0434\u0438\u0441\u043b\u043e\u043a\u0430\u0446\u0438\u0438<br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\"> cp \/etc\/letsencrypt\/live\/asterisk.vistep.ru\/privkey.pem \/etc\/nginx\/certs\/vistep.ru.key cp \/etc\/letsencrypt\/live\/asterisk.vistep.ru\/fullchain.pem \/etc\/nginx\/certs\/vistep.ru.pem <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/li>\n<\/ol>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 web-\u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h3>\n<p>  \u041a\u0430\u043a \u0438 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u043e \u0432\u0432\u043e\u0434\u043d\u043e\u0439, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c web-\u0441\u0435\u0440\u0432\u0435\u0440 NGINX.<br \/>  \u041d\u0435 \u0441\u0442\u0430\u043d\u0443 \u0440\u0430\u0437\u0432\u043e\u0434\u0438\u0442\u044c hollywar&#8217;\u043e\u0432 \u0438 \u043a\u0430\u043a-\u0442\u043e \u043c\u043e\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440, \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0443 \u043d\u0430\u0441 \u0441\u0442\u043e\u0438\u0442 NGINX \u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e.<br \/>  \u041e\u0441\u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u043b\u0430 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f <a href=\"https:\/\/habrahabr.ru\/users\/dimasmirnov\/\" class=\"user_link\">DimaSmirnov<\/a> <a href=\"https:\/\/habrahabr.ru\/post\/252821\/\">\u00abNginx \u0438 https. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441 \u0410+\u00bb<\/a>, \u0437\u0430 \u0447\u0442\u043e \u0435\u043c\u0443, \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0441\u043b\u0443\u0447\u0430\u0435\u043c, \u0432\u044b\u0440\u0430\u0436\u0430\u044e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b web-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434 (\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0434\u0430\u043d\u044b \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435):  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\/etc\/nginx\/conf.d\/asterisk.vistep.ru.conf<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"nginx\">server {     server_name asterisk.vistep.ru;     listen 138.201.164.52:80;     rewrite ^  https:\/\/asterisk.vistep.ru$request_uri? permanent; } server {     access_log \/var\/log\/nginx\/asterisk.vistep.ru.access.log;     error_log \/var\/log\/nginx\/asterisk.vistep.ru.error.log;     listen 443 ssl;     server_name asterisk.vistep.ru;     resolver 8.8.8.8;     ssl_stapling on;     ssl on;     ssl_certificate \/etc\/nginx\/certs\/vistep.ru.pem;     ssl_certificate_key \/etc\/nginx\/certs\/vistep.ru.key;     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 &quot;max-age=31536000;&quot;;     add_header Content-Security-Policy-Report-Only &quot;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&quot;; \troot \/var\/www\/asterisk; \tindex index.php index.html index.htm index.nginx-debian.html;      location records\/ {     autoindex off;     allow 89.108.120.223;         allow 89.108.122.9;         allow 95.213.171.78;         allow 95.213.156.46;         allow 209.160.27.20;         allow 89.189.163.20; # \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u044b\u0448\u0435 - \u0430\u0434\u0440\u0435\u0441\u0430 amoCRM \u0438 \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b, \u0430 \u044d\u0442\u043e\u0442 - \u043c\u043e\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 ;) \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u043e\u0432 - https:\/\/www.amocrm.ru\/security\/iplist.txt     deny all; }   \tlocation \/ { \t\ttry_files $uri $uri\/ =404;         allow 89.108.120.223;          allow 89.108.122.9;         allow 95.213.171.78;         allow 95.213.156.46;         allow 209.160.27.20;         allow 89.189.163.20; # \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u044b\u0448\u0435 - \u0430\u0434\u0440\u0435\u0441\u0430 amoCRM \u0438 \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b, \u0430 \u044d\u0442\u043e\u0442 - \u043c\u043e\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 ;) \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u043e\u0432 - https:\/\/www.amocrm.ru\/security\/iplist.txt \tdeny all; \t} \tlocation ~ \\.php$ { \t        fastcgi_pass unix:\/var\/run\/php5-fpm.sock; \t       \tfastcgi_index index.php; \t        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; \t        include fastcgi_params; \t\tfastcgi_buffers 16 16k;  \t\tfastcgi_buffer_size 32k; \t} } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u043f\u0430\u043f\u043a\u0435 \/var\/www\/asterisk\/ (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435) \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0438\u043c\u043b\u0438\u043d\u043a \u043d\u0430 \u043f\u0430\u043f\u043a\u0443, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 (\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0438\u0436\u0435)  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">cd \/var\/www\/asterisk\/<br \/>  ln -s \/var\/calls\/ records  <\/div>\n<\/div>\n<p>  \u0415\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0432 \u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u0445.<br \/>  \u041f\u043e\u043c\u0438\u043c\u043e \u0443\u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 vistep.ru.key \u0438 vistep.ru.pem, \u043d\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f dhparam.pem.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0433\u043e<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">openssl dhparam -out \/etc\/nginx\/certs\/dhparam.pem 4096 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0430 \u0441\u0438\u043c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 NGINX \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 Asterisk.<\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 IP PBX Asterisk<\/h3>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b amoCRM \u043c\u043e\u0433\u043b\u0430 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0430\u0448\u0435\u0439 Asterisk, manager.conf \u0438 http.conf \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0432\u0438\u0434\u0443:   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">manager.conf<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\"> [general] enabled = yes port = 5038 bindaddr = 0.0.0.0 webenabled = yes httptimeout = 60 debug = on  [amocrm] secret = JD3clEB8f4-_3ry84gJ deny = 0.0.0.0\/0.0.0.0 permit = 127.0.0.1\/255.255.255.0 read = cdr,reporting,originate write = reporting,originate <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">http.conf<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\"> [general] enabled=yes enablestatic=yes bindaddr=0.0.0.0 bindport=8088 prefix=asterisk <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c Asterisk \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432\u0441\u0435 \u043b\u0438 \u043f\u043e\u0434\u043d\u044f\u043b\u043e\u0441\u044c \u043a\u0430\u043a \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0432\u044b\u0445\u043b\u043e\u043f<\/b><\/p>\n<div class=\"spoiler_text\"><code>asterisk*CLI&gt; http show status<br \/>  HTTP Server Status:<br \/>  Prefix: \/asterisk<br \/>  Server: Asterisk\/13.14.0<br \/>  Server Enabled and Bound to 0.0.0.0:8088<\/p>\n<p>  Enabled URI's:<br \/>  \/asterisk\/httpstatus =&gt; Asterisk HTTP General Status<br \/>  \/asterisk\/phoneprov\/... =&gt; Asterisk HTTP Phone Provisioning Tool<br \/>  \/asterisk\/amanager =&gt; HTML Manager Event Interface w\/Digest authentication<br \/>  \/asterisk\/arawman =&gt; Raw HTTP Manager Event Interface w\/Digest authentication<br \/>  \/asterisk\/manager =&gt; HTML Manager Event Interface<br \/>  \/asterisk\/rawman =&gt; Raw HTTP Manager Event Interface<br \/>  \/asterisk\/static\/... =&gt; Asterisk HTTP Static Delivery<br \/>  \/asterisk\/amxml =&gt; XML Manager Event Interface w\/Digest authentication<br \/>  \/asterisk\/mxml =&gt; XML Manager Event Interface<br \/>  \/asterisk\/ari\/... =&gt; Asterisk RESTful API<br \/>  \/asterisk\/ws =&gt; Asterisk HTTP WebSocket<\/p>\n<p>  Enabled Redirects:<br \/>   None.<br \/>  asterisk*CLI&gt; manager show settings<\/p>\n<p>  Global Settings:<br \/>  ----------------<br \/>   Manager (AMI): Yes <br \/>   Web Manager (AMI\/HTTP): Yes <br \/>   TCP Bindaddress: 0.0.0.0:5038 <br \/>   HTTP Timeout (minutes): 60 <br \/>   TLS Enable: No <br \/>   TLS Bindaddress: Disabled <br \/>   TLS Certfile: asterisk.pem <br \/>   TLS Privatekey: <br \/>   TLS Cipher: <br \/>   Allow multiple login: Yes <br \/>   Display connects: Yes <br \/>   Timestamp events: No <br \/>   Channel vars: <br \/>   Debug: Yes <\/code>   <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u0438\u0430\u043b\u043f\u043b\u0430\u043d\u0430 (\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e ael, \u043d\u043e \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432 lua \u0438\u043b\u0438 conf \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438):  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">extensions.ael<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">globals {     WAV=\/var\/calls; \/\/\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 WAV     MP3=\/var\/calls; \/\/\u041a\u0443\u0434\u0430 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c mp3 \u0444\u0430\u0439\u043b\u044b     RECORDING=1; \/\/ \u0417\u0430\u043f\u0438\u0441\u044c, 1 - \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430. };  macro recording (calling,called) {         if (&quot;${RECORDING}&quot; = &quot;1&quot;){               Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called}); \t      Set(datedir=${STRFTIME(${EPOCH},,%Y\/%m\/%d)}); \t      System(mkdir -p ${WAV}\/${datedir});               Set(monopt=nice -n 19 \/usr\/bin\/lame -b 32  --silent &quot;${WAV}\/${datedir}\/${fname}.wav&quot;  &quot;${MP3}\/${datedir}\/${fname}.mp3&quot; && chmod o+r &quot;${MP3}\/${datedir}\/${fname}.*&quot;);               Set(CDR(filename)=${fname}.mp3); \t      Set(CDR(recordingfile)=${fname}.wav);               Set(CDR(realdst)=${called});               MixMonitor(${WAV}\/${datedir}\/${fname}.wav,b,${monopt});         }; };   context dial_out { \/\/ \u0437\u0432\u043e\u043d\u0438\u043c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 _[71]XX =&gt; {         &recording(${CALLERID(number)},${EXTEN});         Dial(SIP\/${EXTEN},,tTr);         Hangup();         }  \/\/ \u043a\u043e\u043c\u0443 \u043f\u043e\u0437\u0432\u043e\u043d\u0438\u0442\u044c \u0440\u0435\u0448\u0438\u0442 amoCRM! 100500 =&gt; {         Set(DEFMAN=123); \/\/ \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0432\u043e\u043d\u0438\u043c \u043d\u0430 123         Set(TOEXT=${SHELL(wget -O - --quiet &quot;https:\/\/vistepru.amocrm.ru\/private\/acceptors\/asterisk_new\/?redirect=Y&number=${CALLERID(num)}&USER_LOGIN=ceo@vistep.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c&quot;)}); \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430         Dial(SIP\/${TOEXT},,tTr); \/\/ \u0437\u0432\u043e\u043d\u0438\u043c \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0443 \/\/ \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430, \u0437\u0432\u043e\u043d\u0438\u043c \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e         if (&quot;${DIALSTSTUS}&quot; != &quot;ANSWERED&quot;) {             Dial(SIP\/${DEFMAN},,tTr);         }         HangUP(); } \/\/ end 100500  _XXXXXX =&gt; { NoOP(=== CALL FROM ${CALLERID(number)} TO ${EXTEN} ===); &recording(${CALLERID(number)},${EXTEN}); Dial(SIP\/83843${EXTEN}@multifon,180,tT); HangUP(); } \/\/ end of _XXXXXX  _[78]XXXXXXXXXX =&gt; { NoOP(=== CALL TO ${EXTEN} ===); &recording(${CALLERID(number)},${EXTEN}); Dial(SIP\/${EXTEN}@multifon,180,tT); HangUP(); }\/\/ end of _[78]XXXXXXXXXX   _+7XXXXXXXXXX =&gt; { NoOP(=== CALL TO ${EXTEN} ===); &recording(${CALLERID(number)},${EXTEN}); Dial(SIP\/${EXTEN}@multifon,180,tT); HangUP(); }\/\/ end of _+7XXXXXXXXXX   \/\/\u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0432\u043e\u043d\u043a\u0438, \u043d\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435, \u0438\u0434\u0443\u0442 \u0432 \u043b\u0435\u0441 _X. =&gt; {         Hangup();         }  }   context default { \/\/ \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0435\u0441\u043e\u043c _X. =&gt; {         Hangup();         } };    context incoming { _[87]XXXXXXXXXX =&gt; { \t&recording(${CALLERID(number)},${EXTEN}); \tAnswer(); \tSet(CHANNEL(musicclass)=vistep.ru); \tSet(CUSTOMER_NAME=${SHELL(wget -O - --quiet  &quot;https:\/\/vistepru.amocrm.ru\/private\/acceptors\/asterisk_new\/?number=${CALLERID(num)}&USER_LOGIN=ceo@vistep.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c&quot;|cut -d &quot;|&quot; -f1)}); \tSet(CALLERID(name)=${CUSTOMER_NAME}); \tQueue(queue_1,tT); \tNoOp(=== ${HANGUPCAUSE} ===); \tHangUP(); } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u0430\u0436\u043d\u043e!<br \/>  \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 incoming (\u0442\u0430\u043a \u044f \u043d\u0430\u0437\u0432\u0430\u043b \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0433\u0434\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b), \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044d\u043a\u0441\u0442\u0435\u043d\u0448\u0435\u043d\u0435, \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430:  <\/p>\n<pre><code class=\"bash\">Set(CUSTOMER_NAME=${SHELL(wget -O - --quiet  &quot;https:\/\/vistepru.amocrm.ru\/private\/acceptors\/asterisk_new\/?number=${CALLERID(num)}&USER_LOGIN=ceo@vistep.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c&quot;|cut -d &quot;|&quot; -f1)});<\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0424\u0418\u041e \u0437\u0432\u043e\u043d\u044f\u0449\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u0434\u0446\u0435\u043f\u043b\u044f\u044f \u0438\u0445 \u0438\u0437 amoCRM.<br \/>  \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043b\u0438\u043d\u043a \u0438\u0437 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435:  <\/p>\n<ol>\n<li><a href=\"https:\/\/vistepru.amocrm.ru\/private\/acceptors\/asterisk_new\/\">vistepru.amocrm.ru\/private\/acceptors\/asterisk_new<\/a>? \u0433\u0434\u0435 \u0432\u043c\u0435\u0441\u0442\u043e vistepru \u0443 \u0432\u0430\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d \u0432\u0430\u0448 \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d \u0432 amocrm<\/li>\n<li>USER_LOGIN=ceo@vistep.ru \u0433\u0434\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u043e\u0435\u0433\u043e email \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u0432\u0430\u0448 (\u0430\u0434\u043c\u0438\u043d\u0441\u043a\u0438\u0439)<\/li>\n<li>USER_HASH=1dc1444b0d3172c1119593ffea9078c575c \u0433\u0434\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u043e\u0435\u0433\u043e API \u043a\u043b\u044e\u0447\u0430 (\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 amoCRM \u00ab\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u00bb -&gt; \u00abAPI) \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u0432\u043e\u0439 API \u043a\u043b\u044e\u0447<\/li>\n<\/ol>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/984\/a86\/13e\/984a8613ecf4475c85a456ef0ac82b99.png\"\/>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u043a\u0441\u0442\u0435\u043d\u0448\u0435\u043d\u0435 100500.<br \/>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0432 \u0434\u0438\u0430\u043b\u043f\u043b\u0430\u043d\u0435 \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0442\u0430\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\"> \/\/ \u043a\u043e\u043c\u0443 \u043f\u043e\u0437\u0432\u043e\u043d\u0438\u0442\u044c \u0440\u0435\u0448\u0438\u0442 amoCRM! 100500 =&gt; {         Set(DEFMAN=123); \/\/ \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0432\u043e\u043d\u0438\u043c \u043d\u0430 123         Set(TOEXT=${SHELL(wget -O - --quiet &quot;https:\/\/vistepru.amocrm.ru\/private\/acceptors\/asterisk_new\/?redirect=Y&number=${CALLERID(num)}&USER_LOGIN=ceo@vistep.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c&quot;)}); \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430         Dial(SIP\/${TOEXT},,tTr); \/\/ \u0437\u0432\u043e\u043d\u0438\u043c \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0443 \/\/ \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430, \u0437\u0432\u043e\u043d\u0438\u043c \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e         if (&quot;${DIALSTSTUS}&quot; != &quot;ANSWERED&quot;) {             Dial(SIP\/${DEFMAN},,tTr);         }         HangUP(); } \/\/ end 100500 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041b\u0438\u043d\u043a \u0434\u043b\u044f wget \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435.<br \/>  \u0410 \u043d\u0443\u0436\u0435\u043d \u043e\u043d \u0434\u043b\u044f \u0442.\u043d. \u201e\u0443\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438\u201c, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0432\u0448\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u043c \u043d\u0430 100500, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 Asterisk \u0438 amoCRM \u0443\u0436\u0435 \u0441\u0430\u043c\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u043a\u043e\u043c\u0443 \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c (\u0447\u0438\u0442\u0430\u0439 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0443 \u0438\u043b\u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0443 \u201e\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\u201c).<\/p>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b? \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0434\u043b\u044f \u043e\u0444\u0438\u0441\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e:<br \/>  <code> - \u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0437\u0432\u043e\u043d\u043e\u043a \u043e\u0442 \u041e\u041e\u041e &quot;\u0428\u0443\u0431\u044b \u0421\u0430\u0443\u0440\u043e\u043d\u0430&quot;<br \/>   - \u0417\u0432\u043e\u043d\u043e\u043a \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0411\u043e\u0440\u043e\u043c\u0438\u0440, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043a\u0440\u0438\u0447\u0430\u0442\u044c \u0432 \u0440\u0443\u043f\u043e\u0440 \u043d\u0430 \u0432\u0435\u0441\u044c \u043e\u0444\u0438\u0441: - \u0427\u0435\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 &quot;\u0428\u0443\u0431\u044b \u0421\u0430\u0440\u0443\u043c\u0430\u043d\u0430&quot;? (\u0435\u0449\u0435 \u0438 \u043e\u0448\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u043e\u0431\u0430\u0432\u043e\u043a!)<br \/>   - \u0413\u0430\u043b\u0430\u0434\u0440\u0438\u0435\u043b\u044c \u0438\u0437 \u043a\u043e\u043d\u0446\u0430 \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0430 \u043a\u0440\u0438\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0435 \u0438 \u0411\u043e\u0440\u043e\u043c\u0438\u0440 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432.<br \/>  <\/code><br \/>  \u0412 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 amoCRM \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<br \/>  <code> - \u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0437\u0432\u043e\u043d\u043e\u043a \u043e\u0442 \u041e\u041e\u041e &quot;\u0428\u0443\u0431\u044b \u0421\u0430\u0443\u0440\u043e\u043d\u0430&quot;<br \/>   - \u0417\u0432\u043e\u043d\u043e\u043a \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0411\u043e\u0440\u043e\u043c\u0438\u0440, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430 100500<br \/>   - Asterisk \u0438 amoCRM \u043f\u0443\u0442\u0435\u043c \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043c\u0430\u0433\u0438\u0438 \u0441\u0430\u043c\u0438 \u0440\u0435\u0448\u0430\u044e\u0442, \u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0413\u0430\u043b\u0430\u0434\u0440\u0438\u0435\u043b\u044c<br \/>   - PROFIT!<br \/>  <\/code><br \/>  <i>\u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0440\u0435\u0431\u044f\u0442\u0430\u043c \u0438\u0437 voxlink \u2014 <a href=\"https:\/\/voxlink.ru\/kb\/integraciya-s-crm\/amocrm-asterisk\/\">voxlink.ru\/kb\/integraciya-s-crm\/amocrm-asterisk<\/a><\/i><\/p>\n<p>  \u0418 \u0434\u0430, \u0441\u043e\u0432\u0441\u0435\u043c \u0437\u0430\u0431\u044b\u043b, \u0435\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 Asterisk \u0435\u0449\u0435 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0411\u0414 \u0432 MySQL, \u0442\u043e \u0432 <a href=\"http:\/\/blog.vistep.ru\/page\/novyj-web-interfejs-statistiki-i-proslushivanija-vyzovov-dlja-ip-ats-asterisk\">\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443 CDR \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435 (\u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u044b \u0432 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432 amoCRM)  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">ALTER TABLE `cdr` ADD `recordingfile` VARCHAR (120) NOT NULL  <\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 amoCRM<\/h3>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0443\u043d\u043a\u0442\u0435 \u043d\u0430\u0441 \u0436\u0434\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u0440\u0430\u0431\u0435\u043b\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u044c\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b.<br \/>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c Asterisk \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 amoCRM.<br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0434\u0435\u043c \u0432 \u201e\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u201c -&gt; \u201e\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438\u201c -&gt; \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0442\u0430\u043c Asterisk \u0438 \u0436\u043c\u0435\u043c \u201e\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u201c.<br \/>  \u041d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0433\u0430\u0439\u0434\u044b, \u0432\u0441\u0435 \u044d\u0442\u043e \u0441\u043c\u0435\u043b\u043e \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u0435\u043c \u0432 \u0441\u0430\u043c\u044b\u0439 \u043d\u0438\u0437 \u0434\u043e \u043f\u043e\u043b\u0435\u0439 \u0432\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<br \/>  \u041b\u043e\u0433\u0438\u043d \u2014 amocrm (\u0438\u0437 manager.conf)<br \/>  \u041f\u0430\u0440\u043e\u043b\u044c \u2014 JD3clEB8f4-_3ry84gJ (\u0438\u0437 manager.conf)<br \/>  \u041f\u0443\u0442\u044c \u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0443 \u2014 _https:\/\/asterisk.vistep.ru\/amocrm.php<br \/>  \u0410 \u0442\u0430\u043a\u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0441\u043a\u0440\u0438\u043d<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/bd5\/8af\/70e\/bd58af70e2ff49ba93b0108ce7ffd0d8.png\"\/>  <\/div>\n<\/div>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 amocrm.php.<br \/>  \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438, \u043d\u043e \u044f \u0445\u043e\u0447\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u044b\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0434\u0438\u0430\u043b\u043f\u043b\u0430\u043d, \u0442\u043e\u0447\u043d\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u0446\u0438\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 dial_out (\u0441\u0442\u0440\u043e\u043a\u0430 99), \u0434\u0430\u0431\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c Asterisk \u043d\u0430 \u0441\u0442\u0435\u043d\u0434\u0435. \u0418\u043c\u0435\u0439\u0442\u0435 \u044d\u0442\u043e \u0432 \u0432\u0438\u0434\u0443 \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0432\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0435\u0441\u043b\u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f (\u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432 \u043f\u0430\u0440\u0443 \u043a\u043b\u0438\u043a\u043e\u0432 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 amoCRM)  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">amocrm.php<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;?php \/* \tamoCRM to  asterisk integration. \tQSOFT LLC,  All rights reserved. \tmailto:      support@amocrm.com. \tDate:   10.04.2012   rev: 102703 \tCannot be redistributed  without \t     a written permission.                          _____ _____  __  __                         \/ ____|  __ \\|  \\\/  |    __ _ _ __ ___   ___ | |    | |__) | \\  \/ |   \/ _` | '_ ` _ \\ \/ _ \\| |    |  _  \/| |\\\/| |  | (_| | | | | | | (_) | |____| | \\ \\| |  | |_   \\__,_|_| |_| |_|\\___\/ \\_____|_|  \\_\\_|  |_(_)     *\/ ini_set('log_errors','On'); ini_set('error_log', '\/var\/log\/php_errors.log'); define('AC_HOST','localhost'); \/\/ \u0433\u0434\u0435 \u0441\u043b\u0443\u0448\u0430\u0435\u0442  AMI\/AJAM define('AC_PORT',8088); \/\/ \u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u0440\u0442 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 (\u0443 \u043d\u0430\u0441 8088) \u0441\u043c. http.conf Asterisk'\u0430 define('AC_PREFIX','\/asterisk\/'); \/\/ \u0441\u043c. http.conf Asterisk'\u0430 define('AC_TLS',false); define('AC_DB_CS','mysql:host=localhost;port=3306;dbname=asterisk'); \/\/\u0445\u043e\u0441\u0442, \u0433\u0434\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f MySQL \u0441 \u0411\u0414 Asterisk'\u0430, \u043f\u043e\u0440\u0442 \u0438 \u0438\u043c\u044f \u0411\u0414 define('AC_DB_UNAME','asterisk_user'); \/\/\u043a\u0430\u043a\u0438\u043c \u044e\u0437\u0435\u0440\u043e\u043c \u0446\u0435\u043f\u043b\u044f\u0442\u044c\u0441\u044f \u043a \u0411\u0414 define('AC_DB_UPASS','232wwQd293f_2edxse3e'); \/\/\u043f\u0430\u0440\u043e\u043b\u044c \u044d\u0442\u043e\u0433\u043e \u044e\u0437\u0435\u0440\u0430 define('AC_TIMEOUT',0.75); define('AC_RECORD_PATH','https:\/\/asterisk.vistep.ru\/records\/%Y\/%m\/%d\/#'); \/\/\u043f\u0443\u0442\u044c, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 define('AC_TIME_DELTA',7); \/\/ hours. Ex. GMT+4 = 4   $db_cs=AC_DB_CS; $db_u=!strlen(AC_DB_UNAME)?NULL:AC_DB_UNAME; $db_p=!strlen(AC_DB_UPASS)?NULL:AC_DB_UPASS; date_default_timezone_set('UTC');   if (AC_PORT&lt;1) die('Please, configure settings first!'); \/\/ die if not if (defined('AC_RECORD_PATH') AND !empty($_GET['GETFILE'])){ \t\/\/get file. Do not check auth. (uniqueid is rather unique) \t$p=AC_RECORD_PATH; \tif (empty($p)) die('Error while getting file from asterisk'); \ttry { \t\t$dbh = new PDO($db_cs, $db_u, $db_p); \t\t$sth = $dbh-&gt;prepare('SELECT calldate,recordingfile FROM cdr WHERE uniqueid= :uid'); \t\t$sth-&gt;bindValue(':uid',strval($_GET['GETFILE'])); \t\t$sth-&gt;execute(); \t\t$r = $sth-&gt;fetch(PDO::FETCH_ASSOC); \t\tif ($r===false OR empty($r['recordingfile'])) die('Error while getting file from asterisk'); \t\t$date=strtotime($r['calldate']); \t\t$replace=array(); \t\t$replace['#']=$r['recordingfile']; \t\t$dates=array('d','m','Y','y'); \t\tforeach ($dates as $d) $replace['%'.$d]=date($d,$date); \/\/ not a good idea! \t\t$p=str_replace(array_keys($replace),array_values($replace),$p); \t\tif (empty($_GET['noredirect'])) header('Location: '.$p); \t\tdie($p); \t} catch (PDOException $e) { \t\tdie('Error while getting file from asterisk'); \t} }   \/\/ filter parameters from _GET foreach (array('login','secret','action') as $k){ \tif (empty($_GET['_'.$k])) die('NO_PARAMS'); \t$$k=strval($_GET['_'.$k]); } \/\/ trying to check accacess $loginArr=array( \t'Action'=&gt;'Login', \t'username'=&gt;$login, \t'secret'=&gt;$secret, \/\/\t'Events'=&gt;'off', ); $resp=asterisk_req($loginArr,true); \/\/ problems? exiting if ($resp[0]['response']!=='Success') answer(array('status'=&gt;'error','data'=&gt;$resp[0]));  \/\/auth OK. Lets perform actions if ($action==='status'){ \/\/ list channels status \t$params=array( 'action'=&gt;'status'); \t$resp=asterisk_req($params); \t\/\/ report error of any \tif ($resp[0]['response']!=='Success') answer(array('status'=&gt;'error','data'=&gt;$resp[0])); \t\/\/ first an last chunks are useless \tunset($resp[end(array_keys($resp))],$resp[0]); \t\/\/ renumber keys for JSON \t$resp=array_values($resp); \t\/\/ report OK \tanswer(array('status'=&gt;'ok','action'=&gt;$action,'data'=&gt;$resp));  }elseif ($action==='call'){ \/\/ originate a call \t$params=array( \t\t'action'=&gt;'Originate', \t\t'channel'=&gt;'SIP\/'.intval($_GET['from']), \t\t'Exten'=&gt;strval($_GET['to']), \t\t'Context'=&gt;'dial_out', \/\/was from-internal \t\t'priority'=&gt;'2', \t\t'Callerid'=&gt;'&quot;'.strval($_GET['as']).'&quot; &lt;'.intval($_GET['from']).'&gt;', \t\t'Async'=&gt;'Yes', \t\t\/\/ Not Implemented: \t\t\/\/'Callernumber'=&gt;'150', \t\t\/\/'CallerIDName'=&gt;'155', \t); \t$resp=asterisk_req($params,true); \tif ($resp[0]['response']!=='Success') answer(array('status'=&gt;'error','data'=&gt;$resp[0])); \tanswer(array('status'=&gt;'ok','action'=&gt;$action,'data'=&gt;$resp[0]));  } elseif ($action==='test_cdr'){ \/\/ test if DB connection params are OK. \tif (!class_exists('PDO')) answer(array('status'=&gt;'error','data'=&gt;'PDO_NOT_INSTALLED')); \/\/ we use PDO for accessing mySQL pgSQL sqlite within same algorythm \ttry { \t\t$dbh = new PDO($db_cs, $db_u, $db_p); \t} catch (PDOException $e) { \t\tanswer(array('status'=&gt;'error','data'=&gt;$e-&gt;getMessage())); \t} \tanswer(array('status'=&gt;'ok','data'=&gt;'connection ok')); } elseif ($action==='cdr'){ \/\/ fetch call history \ttry { \t\t$dbh = new PDO($db_cs, $db_u, $db_p);  \t\tforeach (array('date_from','date_to') as $k){ \t\t\t$v=doubleval( (!empty($_GET[$k]))?intval($_GET[$k]):0 ); \t\t\tif ($v&lt;0) $v=time()-$v; \t\t\t$$k=$v; \t\t} \t\tif ($date_from&lt;time()-10*24*3600) $date_from=time()-7*24*3600; \/\/retr. not more than 10d before \t\t$date_from=($date_from?$date_from+AC_TIME_DELTA*3600:0); \/\/default 01-01-1970 \t\t$date_to  =($date_to  ?$date_to  +AC_TIME_DELTA*3600:time()+AC_TIME_DELTA*3600);\/\/default now() \t\t$sth = $dbh-&gt;prepare('SELECT calldate, src,dst,duration,billsec,uniqueid,recordingfile FROM cdr WHERE disposition=\\'ANSWERED\\' AND billsec&gt;=:minsec AND calldate&gt; :from AND calldate&lt; :to'); \t\t\/\/ BETWEEN is illegal on some bcknds \t\theader(&quot;X-REAL_DATE:&quot; . gmdate('Y-m-d H:i:s',$date_from).'@'. gmdate('Y-m-d H:i:s',$date_to)); \t\t$sth-&gt;bindValue(':from', date('Y-m-d H:i:s',$date_from) ); \t\t$sth-&gt;bindValue(':to',\t date('Y-m-d H:i:s',$date_to)); \t\t$sth-&gt;bindValue(':minsec',!empty($_GET['minsec'])?$_GET['minsec']:5,PDO::PARAM_INT); \t\t$sth-&gt;execute(); \t\t\/\/$sth-&gt;debugDumpParams(); \tvar_dump($sth-&gt;errorInfo()); \t\t$r = $sth-&gt;fetchAll(PDO::FETCH_ASSOC); \t\tforeach ($r as $k=&gt;$v) $r[$k]['calldate']=date('Y-m-d H:i:s',strtotime($v['calldate'])-AC_TIME_DELTA*3600); \t\tanswer(array('status'=&gt;'ok','data'=&gt;$r),true); \t} catch (PDOException $e) { \t\tanswer(array('status'=&gt;'error','data'=&gt;$e-&gt;getMessage()),true); \t} } elseif ($action==='pop'){\/\/ fill test data. Maybe you will need it. Just comment line below. \tdie(); \t$dbh = new PDO($db_cs, $db_u, $db_p); \tfor ($i=0;$i&lt;(int)$_GET['n'];$i++){ \t\t$array=array( \t\t\tdate('Y-m-d H:i:s',time()-rand(100,7*24*3600)), \t\t\t'Auto &lt;150&gt;', 150,'791612345678','n\/a','n\/a','n\/a','n\/a','n\/a',999, rand(7,999), 'ANSWERED',3,'',uniqid(),'','','' \t\t); \t\t$str=array(); \t\tforeach ($array as  $v) $str[]=&quot;'{$v}'&quot;; \t\t$str=implode(', ',$str); \t\t$dbh-&gt;query(&quot;INSERT INTO cdr VALUES ({$str});&quot;); \t} }  \/** MakeRequest to asterisk interfacees  * @param $params -- array of req. params  * @return array -- response  *\/ function asterisk_req($params,$quick=false){ \t\/\/ lets decide if use AJAM or AMI \treturn !defined('AC_PREFIX')?ami_req($params,$quick):ajam_req($params); }  \/**  * Shudown function. Gently close the socket  *\/ function asterisk_socket_shutdown(){ami_req(NULL);}  \/*** Make request with AMI  * @param $params -- array of req. params  * @param bool $quick -- if we need more than action result  * @return array result of req  *\/ function ami_req($params,$quick=false){ \tstatic $connection; \tif ($params===NULL and $connection!==NULL) { \t\t\/\/ close connection \t\tfclose($connection); \t\treturn; \t} \tif ($connection===NULL){ \t\t$en=$es=''; \t\t$connection = fsockopen(AC_HOST, AC_PORT, $en, $es, 3); \t\t\/\/ trying to connect. Return an error on fail \t\tif ($connection) register_shutdown_function('asterisk_socket_shutdown'); \t\telse {$connection=NULL; return array(0=&gt;array('response'=&gt;'error','message'=&gt;'socket_err:'.$en.'\/'.$es));} \t} \t\/\/ building req. \t$str=array(); \tforeach($params as $k=&gt;$v) $str[]=&quot;{$k}: {$v}&quot;; \t$str[]=''; \t$str=implode(&quot;\\r\\n&quot;,$str); \t\/\/ writing \tfwrite($connection,$str.&quot;\\r\\n&quot;); \t\/\/ Setting stream timeout \t$seconds=ceil(AC_TIMEOUT); \t$ms=round((AC_TIMEOUT-$seconds)*1000000); \tstream_set_timeout($connection,$seconds,$ms); \t\/\/ reading respomse and parsing it \t$str= ami_read($connection,$quick); \t$r=rawman_parse($str); \t\/\/var_dump($r,$str); \treturn $r; } \/*** Reads data from coinnection  * @param $connection -- active connection  * @param bool $quick -- should we wait for timeout or return an answer after getting command status  * @return string RAW response  *\/ function ami_read($connection,$quick=false){ \t$str=''; \tdo { \t\t$line = fgets($connection, 4096); \t\t$str .= $line; \t\t$info = stream_get_meta_data($connection); \t\tif ($quick and $line== &quot;\\r\\n&quot;) break; \t}while ($info['timed_out'] == false ); \treturn $str; }  \/*** Echo`s data  * @param $array answer data  * @param bool $no_callback shold we output as JSON or use callback function  *\/ function answer($array,$no_callback=false){ \theader('Content-type: text\/javascript;'); \tif (!$no_callback)  echo &quot;asterisk_cb(&quot;.json_encode($array).');'; \telse echo json_encode($array); \tdie(); }  \/** Parse RAW response  * @param $lines RAW response  * @return array parsed response  *\/ function rawman_parse($lines){ \t$lines=explode(&quot;\\n&quot;,$lines); \t$messages=array(); \t$message=array();  \tforeach ($lines as $l){ \t\t$l=trim($l); \t\tif (empty($l) and count($message)&gt;0){ $messages[]= $message;  $message=array(); continue;} \t\tif (empty($l))  continue; \t\tif (strpos($l,':')===false)  continue; \t\tlist($k,$v)=explode(':',$l); \t\t$k=strtolower(trim($k)); \t\t$v=trim($v); \t\tif (!isset( $message[$k]))  $message[$k]=$v; \t\telseif (!is_array( $message[$k]))  $message[$k]=array( $message[$k],$v); \t\telse  $message[$k][]=$v; \t} \tif (count($message)&gt;0) $messages[]= $message; \treturn $messages; }   \/** Make request via AJAM  * @param $params req. params  * @return array parsed resp.  *\/ function ajam_req($params){ \tstatic $cookie; \t\/\/ EveryRequest Ajam sends back a cookir, needed for auth handling \tif ($cookie===NULL) $cookie=''; \t\/\/ make req. and store cookie \tlist($body,$cookie)= rq(AC_PREFIX.'rawman?'.http_build_query($params),$cookie); \t\/\/ parse an answer \treturn rawman_parse($body); }  \/** make http req. to uri with cookie, parse resp and fetch a new cookie  * @param $url  * @param string $cookie  * @return array  ($body,$newcookie)  *\/ function rq($url,$cookie=''){ \t\/\/ get RAW data \t$r=_rq($url,$cookie); \t\/\/ divide in 2 parts \tlist($headersRaw,$body)=explode(&quot;\\r\\n\\r\\n&quot;,$r,2); \t\/\/ parse headers \t$headersRaw=explode(&quot;\\r\\n&quot;,$headersRaw); \t$headers=array(); \tforeach ($headersRaw as $h){ \t\tif (strpos($h,':')===false) continue; \t\tlist($hname,$hv)=explode(&quot;:&quot;,$h,2); \t\t$headers[strtolower(trim($hname))]=trim($hv); \t} \t\/\/ fetch cookie \tif (!empty($headers['set-cookie'])){ \t\t$listcookies=explode(';',$headers['set-cookie']); \t\tforeach ($listcookies as $c){ \t\t\tlist($k,$v)=explode('=',trim($c),2); \t\t\tif ($k=='mansession_id') $cookie=$v; \t\t} \t}  \treturn array($body,$cookie); }  \/**  mare a request to URI and return RAW resp or false on fail  * @param $url  * @param $cookie  * @return bool|string  *\/ function _rq($url,$cookie){ \t$errno=$errstr=&quot;&quot;; \t$fp = fsockopen(AC_HOST, AC_PORT, $errno, $errstr, 3); \tif (!$fp) return false; \t$out = &quot;GET {$url} HTTP\/1.1\\r\\n&quot;; \t$out .= &quot;Host: &quot;.AC_HOST.&quot;\\r\\n&quot;; \tif (!empty($cookie)) $out.=&quot;Cookie: mansession_id={$cookie}\\r\\n&quot;; \t$out .= &quot;Connection: Close\\r\\n\\r\\n&quot;; \tfwrite($fp, $out); \t$r=''; \twhile (!feof($fp)) $r.=fgets($fp); \tfclose($fp); \treturn $r; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<br \/>  \u041c\u043e\u0438 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u0430\u043d\u044b \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043b\u0438\u043d\u043a\u0430\u043c (\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u2014 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u0432\u043e\u0438 \u043b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c \u0438 \u043f\u0443\u0442\u044c \u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0443, \u0443 \u0432\u0430\u0441 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f):<br \/>  _https:\/\/asterisk.vistep.ru\/amocrm.php?_login=amocrm&#038;_secret=JD3clEB8f4-_3ry84gJ&#038;_action=test_cdr<br \/>  _https:\/\/asterisk.vistep.ru\/amocrm.php?_login=amocrm&#038;_secret=JD3clEB8f4-_3ry84gJ&#038;_action=status<br \/>  \u0432\u044b\u0445\u043b\u043e\u043f \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043d\u0430   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0441\u043a\u0440\u0438\u043d\u0430\u0445<\/b><\/p>\n<div class=\"spoiler_text\">test_cdr<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/692\/c24\/a2a\/692c24a2a38b48fea3cca74ce86b3bd6.png\"\/><br \/>  status<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/171\/3e2\/546\/1713e25460644a259a0d7066ba39b5ad.png\"\/>  <\/div>\n<\/div>\n<h3>\u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0443\u044e\u0441\u044f \u0441\u0432\u044f\u0437\u043a\u0443<\/h3>\n<p>  \u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0438\u0447\u0438:   <\/p>\n<ul>\n<li>\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0437\u0432\u043e\u043d\u043a\u0430 \u0432 amoCRM (\u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0432\u044b\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0424\u0418\u041e \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a)<\/li>\n<li>\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0424\u0418\u041e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0438\u0437 amoCRM \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u043c \u0437\u0432\u043e\u043d\u043a\u0435<\/li>\n<li>\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 amoCRM \u0432 \u043f\u0430\u0440\u0443 \u043a\u043b\u0438\u043a\u043e\u0432 <\/li>\n<li>\u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0443, \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u044f \u0435\u0433\u043e \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 <\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0432\u0438\u0434\u0435\u043e-\u0444\u043e\u0440\u043c\u0430\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u0432\u043e\u043b\u044c\u0442\u0435:  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0px; width: 100%; height: 0px; position: relative; padding-bottom: 56.2493%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/W7YI3u0ucQQ?rel=0&amp;showinfo=1\" frameborder=\"0\" allowfullscreen=\"true\" webkitallowfullscreen=\"true\" mozallowfullscreen=\"true\" style=\"top: 0px; left: 0px; width: 100%; height: 100%; position: absolute;\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u044f \u0441\u0443\u043c\u0435\u043b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 amoCRM \u0438 Asterisk.<br \/>  \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043c\u0438\u043b\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0448\u0443 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. <br \/>  \u041d\u0435\u0442 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u043d\u0430 \u0425\u0430\u0431\u0440\u0435? \u2014 \u041c\u043e\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u0435, \u043f\u0438\u0448\u0438\u0442\u0435, \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u043c\u043e\u0447\u044c.<\/p>\n<p>  Asterisk \u2014 \u044d\u0442\u043e fun!<br \/>  \u0412\u0441\u0435\u043c \u0443\u0434\u0430\u0447\u0438!<br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/325104\/\"> https:\/\/habrahabr.ru\/post\/325104\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u0441\u0435\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u0435\u043c\u0435 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043d\u043e\u0439 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0430\u0442\u044c\u0438, \u043d\u043e \u0434\u0430\u0436\u0435 \u0441\u043e\u0431\u0440\u0430\u0432 \u0438\u0445 \u0432\u0441\u0435 \u0432\u043e\u0435\u0434\u0438\u043d\u043e, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u044b\u0435 \u0440\u0443\u043a\u0438, \u043d\u0430\u043f\u0438\u043b\u044c\u043d\u0438\u043a \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0440\u043f\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0436\u0435\u043b\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u0440\u0441\u0438\u0441\u0430.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/144\/746\/d7c\/144746d7c370456dbfb47c50a2007b3a.png\"\/><\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f Asterisk \u043a amoCRM \u0432 \u0432\u0438\u0434\u0435 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043e\u0441\u0432\u0435\u0442\u0438\u0432 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f ssl-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 web-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0432\u044f\u0437\u043a\u0438.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-284170","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/284170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=284170"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/284170\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=284170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=284170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=284170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}