ネットワーク上では、記事の見出しのトピックに示されている情報のさまざまな程度の制限と完全性の指示を見つけることができますが、それらをすべてまとめる場合でも、目的のカタルシスを達成するには、まっすぐな腕、ファイル、および忍耐が必要になります。

ここでは、アスタリスクをamoCRMに接続する私の経験を、SSL証明書の受信からWebサーバーのセットアップ、そして結果のバンドルのデモで終わる、必要なすべてのニュアンスを強調するステップバイステップの指示の形で紹介します。
*せっかちな人のために、実行された操作の結果、何を参照してください
記事の終わり入門
テストベンチにインストールされています:
- Debian OS
lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.7 (jessie) Release: 8.7 Codename: jessie
- IP PBXアスタリスク
*CLI> 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
- NGINX Webサーバー
sudo nginx -v nginx version: nginx/1.10.3
- PHP-FPM
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
- テストのドメイン名
tawny-owl:~$ dig +short asterisk.vistep.ru 138.201.164.52
SSL証明書を受け取ります
このガイドでは、Let's Encryptの無料の証明書を使用します。
当初、私はStartSSLを使用することを計画し、そこで証明書を取得するための手順を追った説明を書きましたが、それはブラウザがルート証明書を受け入れないことに気づいた後です。それを取得する手順は非常に簡単ですが、それでもステップで説明します。
- letsencrypt.orgにアクセスし 、「Get Started」をクリックします
- 次に、シェルアクセスを使用するセクションに関心があります。このセクションには、必要なすべての指示があります。
- certbot.eff.orgにアクセスして、ソフトウェアを選択してください
- 次に、指示に従って実行します
コスノリのいくつかのチーム echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list apt-get update apt-get install certbot -t jessie-backports
- 次に、certbotユーティリティを使用して証明書要求を送信する必要があります。
私は最も原始的な方法で行った:
チームを運転した
certbot certonly
ウィザードの手順に従い、メール、webrootへのパス、ドメイン名などを示しました。
- 出口で見る
大切な 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 "certbot renew" - 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
- 証明書をそれぞれの場所にコピーする
非表示のテキスト 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
コメントで正しく指摘されているように、受け取った証明書の有効期間は3か月であり、更新する必要があります。 これを考慮に入れてください!Webサーバーのセットアップ
はじめに述べたように、NGINX Webサーバーを使用します。
私はhollywar'ovを繁殖させず、どういうわけか私の選択を動機づけます-私たちはNGINXを持ち、それを設定します。
構成の基礎は、
DimaSmirnovによる素晴らしい記事
「Nginx and https。 クラスA +”を取得します。この機会に感謝します。
そのため、Webサーバーの構成ファイルの形式は次のとおりです(一部のコメントは構成で直接指定されます)。
/etc/nginx/conf.d/asterisk.vistep.ru.conf 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 "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/asterisk; index 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;
フォルダ/ var / www /アスタリスク/(私の場合)では、会話録音ファイルが保存されるフォルダへのシンボリックリンクを作成する必要があります(会話レコードの設定については後述します)
非表示のテキストcd / var / www /アスタリスク/
ln -s / var /呼び出し/レコード
証明書についてもう少し説明します。 vistep.ru.keyとvistep.ru.pemがすでに配置されていることに加えて、dhparam.pemも必要です。
作成する openssl dhparam -out /etc/nginx/certs/dhparam.pem 4096
NGINX構成のsimの場合は、終了し、アスタリスクのセットアップに進みます。
IP PBXアスタリスクの構成
amoCRMがアスタリスクと通信するには、manager.confおよびhttp.confを次のように変換する必要があります。
manager.conf [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
http.conf [general] enabled=yes enablestatic=yes bindaddr=0.0.0.0 bindport=8088 prefix=asterisk
アスタリスクを再起動し、必要に応じてすべてが上昇したかどうかを確認します
排気するasterisk*CLI> http show status
HTTP Server Status:
Prefix: /asterisk
Server: Asterisk/13.14.0
Server Enabled and Bound to 0.0.0.0:8088
Enabled URI's:
/asterisk/httpstatus => Asterisk HTTP General Status
/asterisk/phoneprov/... => Asterisk HTTP Phone Provisioning Tool
/asterisk/amanager => HTML Manager Event Interface w/Digest authentication
/asterisk/arawman => Raw HTTP Manager Event Interface w/Digest authentication
/asterisk/manager => HTML Manager Event Interface
/asterisk/rawman => Raw HTTP Manager Event Interface
/asterisk/static/... => Asterisk HTTP Static Delivery
/asterisk/amxml => XML Manager Event Interface w/Digest authentication
/asterisk/mxml => XML Manager Event Interface
/asterisk/ari/... => Asterisk RESTful API
/asterisk/ws => Asterisk HTTP WebSocket
Enabled Redirects:
None.
asterisk*CLI> manager show settings
Global Settings:
----------------
Manager (AMI): Yes
Web Manager (AMI/HTTP): Yes
TCP Bindaddress: 0.0.0.0:5038
HTTP Timeout (minutes): 60
TLS Enable: No
TLS Bindaddress: Disabled
TLS Certfile: asterisk.pem
TLS Privatekey:
TLS Cipher:
Allow multiple login: Yes
Display connects: Yes
Timestamp events: No
Channel vars:
Debug: Yes
Dialplanの例(私はaelを使用していますが、必要であれば誰でもluaまたはconfに翻訳できると確信しています)
extensions.ael globals { WAV=/var/calls; // WAV MP3=/var/calls; // 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 ${WAV}/${datedir}); Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${datedir}/${fname}.wav" "${MP3}/${datedir}/${fname}.mp3" && chmod o+r "${MP3}/${datedir}/${fname}.*"); Set(CDR(filename)=${fname}.mp3); Set(CDR(recordingfile)=${fname}.wav); Set(CDR(realdst)=${called}); MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt}); }; }; context dial_out { // _[71]XX => { &recording(${CALLERID(number)},${EXTEN}); Dial(SIP/${EXTEN},,tTr); Hangup(); } // amoCRM! 100500 => { Set(DEFMAN=123); // 123 Set(TOEXT=${SHELL(wget -O - --quiet "https://vistepru.amocrm.ru/private/acceptors/asterisk_new/?redirect=Y&number=${CALLERID(num)}&USER_LOGIN=ceo@vistep.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c")}); // Dial(SIP/${TOEXT},,tTr); // // , if ("${DIALSTSTUS}" != "ANSWERED") { Dial(SIP/${DEFMAN},,tTr); } HangUP(); } // end 100500 _XXXXXX => { NoOP(=== CALL FROM ${CALLERID(number)} TO ${EXTEN} ===); &recording(${CALLERID(number)},${EXTEN}); Dial(SIP/83843${EXTEN}@multifon,180,tT); HangUP(); } // end of _XXXXXX _[78]XXXXXXXXXX => { NoOP(=== CALL TO ${EXTEN} ===); &recording(${CALLERID(number)},${EXTEN}); Dial(SIP/${EXTEN}@multifon,180,tT); HangUP(); }// end of _[78]XXXXXXXXXX _+7XXXXXXXXXX => { NoOP(=== CALL TO ${EXTEN} ===); &recording(${CALLERID(number)},${EXTEN}); Dial(SIP/${EXTEN}@multifon,180,tT); HangUP(); }// end of _+7XXXXXXXXXX // , , _X. => { Hangup(); } } context default { // _X. => { Hangup(); } }; context incoming { _[87]XXXXXXXXXX => { &recording(${CALLERID(number)},${EXTEN}); Answer(); Set(CHANNEL(musicclass)=vistep.ru); Set(CUSTOMER_NAME=${SHELL(wget -O - --quiet "https://vistepru.amocrm.ru/private/acceptors/asterisk_new/?number=${CALLERID(num)}&USER_LOGIN=ceo@vistep.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c"|cut -d "|" -f1)}); Set(CALLERID(name)=${CUSTOMER_NAME}); Queue(queue_1,tT); NoOp(=== ${HANGUPCAUSE} ===); HangUP(); } }
重要!
着信コンテキスト(着信コールを処理するコンテキストと呼ばれる)では、単一の内線に次のような行があります。
Set(CUSTOMER_NAME=${SHELL(wget -O - --quiet "https://vistepru.amocrm.ru/private/acceptors/asterisk_new/?number=${CALLERID(num)}&USER_LOGIN=ceo@vistep.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c"|cut -d "|" -f1)});
このコマンドを使用すると、従業員の電話に呼び出し元の顧客の名前を表示し、amoCRMからそれらを取得できます。
このコマンドからコンポーネントへのリンクを分析してみましょう。
- vistepru.amocrm.ru/private/acceptors/asterisk_new ? vistepruの代わりに、amocrmのサブドメインを登録する必要があります
- USER_LOGIN=ceo@vistep.ruメールの代わりにあなた(管理者)を使用する必要があります
- USER_HASH = 1dc1444b0d3172c1119593ffea9078c575cここで、APIキーの代わりに(amoCRMインターフェイスの[設定]→[API]で)APIキーを指定します
チームワークの例
次に、特別な内線番号100500について説明します。ダイヤルプランでは、
だから // amoCRM! 100500 => { Set(DEFMAN=123); // 123 Set(TOEXT=${SHELL(wget -O - --quiet "https://vistepru.amocrm.ru/private/acceptors/asterisk_new/?redirect=Y&number=${CALLERID(num)}&USER_LOGIN=ceo@vistep.ru&USER_HASH=1dc1444b0d3172c1113ffea9078c575c")}); // Dial(SIP/${TOEXT},,tTr); // // , if ("${DIALSTSTUS}" != "ANSWERED") { Dial(SIP/${DEFMAN},,tTr); } HangUP(); } // end 100500
wgetのリンクはほぼ同じで、上記のルールが適用されます。 そして、彼はいわゆるのために必要です。 「スマートコールフォワーディング」。着信コールが従業員によって100500に転送され、次にアスタリスクとamoCRMが送信先を決定します(責任マネージャーまたは「デフォルト」マネージャーに送信を読み取ります)。
なぜこれが便利なのでしょうか? 典型的なオフィスの状況を想像してください:
- " "
- , , : - " "? ( !)
- ,
- .
amoCRMと組み合わせると、次のようになります。
- " "
- , , 100500
- Asterisk amoCRM ,
- PROFIT!
voxlinkの情報提供者に感謝-voxlink.ru/kb/integraciya-s-crm/amocrm-asteriskはい、MySQLでデータベースを維持するようにアスタリスクがまだ構成されていない場合、
この記事では必要なすべての指示を見つけることができます。
また、CDRラベルに別のフィールドを追加することを忘れないでください(amoCRMのクライアントカードで会話を聞くことができる必要があります)
非表示のテキストALTER TABLE `cdr` ADD` recordingfile` VARCHAR(120)NOT NULL
さらにいくつかのコマンドを実行します
ネタバレ見出し echo "alias recordingfile => recordingfile" >> cdr_mysql.conf asterisk -rx 'core restart now'
AmoCRMセットアップ
この時点で、最大数のレーキを待っているので、注意してください。
まず、amoCRMインターフェースでアスタリスクを接続します。
これを行うには、「設定」→「統合」に進み、そこでアスタリスクを見つけて「インストール」をクリックします。
統合の説明とガイドへのリンクが表示されます。これらはすべて、情報入力フィールドまで安全にスクロールダウンできます。
ログイン-amocrm(manager.confから)
パスワード-JD3clEB8f4-_3ry84gJ(manager.confから)
スクリプトへのパスは_httpsです://asterisk.vistep.ru/amocrm.php
あなたの会社の従業員の内部番号と同様に。
次のステップは、amocrm.phpスクリプトを構成することです。
統合の説明のリンクからダウンロードできますが、スタンドのアスタリスク設定に対応するために、ここに記載されている情報は特定のダイヤルプラン、またはむしろdial_out呼び出しの特定のコンテキスト(行99)に固定されていることに注意してください。 これを念頭に置いて、異なる場合はコンテキストに変更してください(amoCRMから直接数回クリックするだけで呼び出しを行う必要があります)。
amocrm.php <?php ini_set('log_errors','On'); ini_set('error_log', '/var/log/php_errors.log'); define('AC_HOST','localhost');
注意してください!
スクリプトの先頭にあるパラメーターの説明は、コードに直接記載されています。
次のリンクを使用して、スクリプトの動作を確認できます(注-ログイン/パスワードとスクリプトへのパスを使用します。これらは異なる必要があります)。
_https://asterisk.vistep.ru/amocrm.php?_login = amocrm&_secret = JD3clEB8f4-_3ry84gJ&_action = test_cdr
_https://asterisk.vistep.ru/amocrm.php?_login = amocrm&_secret = JD3clEB8f4-_3ry84gJ&_action = status
排気はオンのようにする必要があります
スクリーンショットtest_cdr

状態

結果の束をテストする
設定の結果に基づいて、次の機能を取得します。
- amoCRMの呼び出し表示(連絡先が既に存在する場合は名前が表示され、そうでない場合は連絡先カードに移動して、新しいワンクリックを作成します)
- 着信コールのある電話でamoCRMからの連絡先の名前を表示する
- 数回のクリックでamoCRMから電話をかける機能
- 特別な番号に転送することにより、責任あるマネージャーに呼び出しを転送する
ビデオ形式はデモンストレーションに最適ですので、お願いします:
おわりに
この記事で、amoCRMとAsteriskの統合の問題を完全に解決できたことを願っています。
ご質問があれば、コメントで歓迎します。
Habréにアカウントはありませんか? -私の座標はプロファイルです、書いて、私は助けようとします。
アスタリスクは楽しいです!
皆さんに幸運を!