アスタリスクからBitrix24への不在着信の通知

オフィスPBXからのコールがモバイルに着信することがあります。 スキップしました。

誰もがこれには独自の理由がありますが、結果は同じです-あなたは市役所の番号を見て、考えて、誰がそれを呼んだのですか?







Habréでこのトピックは複数回議論されました。 通知はメールとSMSの両方で送信されました。最近、電報ボットでこれを行うのが流行していますが、私はBitrix24を使用します。



なぜ彼は正確に? 猫へようこそ!



実際、すべてが非常にシンプルです-電話でのプッシュ通知は魅力的に便利であり、継続的な使用で最小限の手間をもたらすものを使用したいと思います。



テレグラムはなぜですか? 一般的なチャットのみを実装しているだけですが、快適なプライバシーが欲しいのですが。



SMSを使用しない理由 括弧の後ろに不自由の問題を残して、私は従業員を雇用または解雇するときにサービスポイントを生成したくないと言うでしょう。 私はADでそれを無効にしたいのですが、彼はそれ以上の企業サービスを持っていません。



なぜ郵送しないのですか(前の段落に非常に適しています)? 従業員が突然電話で使用することはないからです(とにかく、私たちはそれを大量に持っています)。



一般的に、疑念と痛みを伴う審議の結果、私たちはBitrixに基づいた企業ポータルにとどまることにしました。 彼については多くのことが言えます(常に良いとは限りません)が、私たちにはそれがあり、従業員はそれを使用しています。

また、ADと統合され、すべての従業員のデータがADに登録されます(内部電話を含む、これは重要です)。



一般的に、ポイントまで!

警告: 以下コードは道徳的な害を引き起こす可能性があります。 私はすぐに彼がひどいことに同意します。 結局のところ、私はコーダーではありません



まず、ポータルからレシーバーを作成し、そこに通知を送信し、IMに送信します。



send_from_pbx.php
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); if (!(count($_POST) == 2) || !CModule::IncludeModule('iblock') || !CModule::IncludeModule('im')) { die('error'); } $dbr = CUser::GetList(($by="ID"), ($order="ACS"), ["UF_PHONE_INNER" => intval($_POST["number"])]); while ($user = $dbr->Fetch()) { CIMMessenger::Add(array( "MESSAGE_TYPE" => "P", # P - private chat, G - group chat, S - notification "TO_USER_ID" => $user["ID"], "FROM_USER_ID" => 111, "MESSAGE" => substr(strip_tags($_POST[message]) ,0, 100), "AUTHOR_ID" => 111, "EMAIL_TEMPLATE" => "some", "NOTIFY_TYPE" => 2, "NOTIFY_MODULE" => "main", "NOTIFY_EVENT" => "IM_GROUP_INVITE", "NOTIFY_TITLE" => " ", )); } ?>
      
      





注:ここではすべてが非常に簡単です。 最初にデータベースを取得し、「内部番号-bitrixのユーザーID」という通信を取得してから、Asterisk用に特別に作成されたアカウントからメッセージを送信します。 原則として、システムの代わりに好みの問題を送信できます。



ここで、Asteriskサーバーに小さなスクリプトを投稿します。



send.sh
 #! /bin/bash date=`date +%H:%M` curl --cookie-jar cookies.txt 'https://portal.domain.ru/?login=yes' -H 'Host: portal.domain.ru' \ --data 'AUTH_FORM=Y&TYPE=AUTH&backurl=%2F&USER_LOGIN=asterisk&USER_PASSWORD=perasperaadastra&USER_REMEMBER=Y' > /dev/null 2>&1 curl --cookie cookies.txt --data "message=   .  $1    $date&number=$2" \ https://portal.domain.ru/send_from_pbx.php > /dev/null 2>&1
      
      







ここでも簡単です。 curlを使用して承認し、POSTメッセージと電話番号を送信します。



最後に、アスタリスクでextensions.confを編集します。 メインの電話が利用できない場合にモバイルに通話を転送するマクロで、作成したばかりのスクリプトを呼び出す1行を正確に追加します(念のため、ここでマクロ全体を示します)。



 [macro-mobile] exten => s,1,Set(CDR(userfield)=LOCAL) exten => s,n,ExecIf($[${LEN(${CALLERID(num)})}=3]?Set(name=${SHELL( mysql asterisk -uasterisk -pperasperaadastra -sse 'SELECT callerid FROM peers WHERE defaultuser=${CALLERID(num)}' )$ exten => s,n,Macro(record,local) exten => s,n,Dial(SIP/${MACRO_EXTEN},20) exten => s,n,Dial(SIP/tel_out/${ARG1}) exten => s,n,System(/srv/asterisk/send2bitrix/send.sh "${name} ( ${CALLERID(num)})" ${EXTEN})
      
      





ダイヤルに関しては、このマクロは次のように使用されます。



 exten => 100,1,Macro(mobile,79251122333)
      
      





ここではすべてがかなり明白です。 このマクロは、データベースからCallerIDを強制し、会話の記録を開始し、メインの電話、モバイルへの通信を試みます。失敗した場合、スクリプトを呼び出して、誰にいつ電話したかを通知します。



以上です。 ご清聴ありがとうございました!



あなたが何かを明確にしたいなら、声を出して、さらに良いアドバイスをしてください-書いてください。



All Articles