Kannel SMS Gatewayを構成する

何度か、kannelのような素晴らしいソフトウェアへの言及がありましたが、何らかの理由で、その統合の例の具体的な説明はありません。 以下は、モバイルオペレーター(opsos)との合意によって実装できるサービスの例ですが、これを行う方法はまだ明確ではありません。 この状況を修正しようとします。



オフトピック。 なぜこれが必要なのですか?



私は長い間プロジェクトに取り組んできました 、その本質はメガホンの旗の下で実際の都市ゲームを行うことです。 最初は、Zend Frameworkで簡単なオンラインサービスが作成されたゲームで、登録、チームの編成、ゲームへの参加、タスクの受信、回答の入力が可能でした。 しかし、主催者と私は、このプロセスを大衆がよりアクセスしやすく、よりモバイルにする方法を考えました。 SMSを使用するためにこのプラットフォームを作り直すことにしました。 それは言われています-完了、私はメガフォンの技術者に連絡し、SMSを送受信する方法を見つけました(もちろん、httpを使用する方がはるかに望ましいです、メガホンでは裸のSMPPのみを与えました。 何もする必要はありませんでした。



長い間、ゲートウェイに適したオプションを探していましたが、このオプションはKannel-オープンソースSMS、WAPゲートウェイでした。 WAPコンポーネントは私には興味がありませんでしたが、SMPP-HTTPゲートウェイの非常に高品質のソリューションであることがわかりました(SMPPをサーバーとして使用してSMSを送受信し、DB文字列としてメッセージを送受信するMySQLを使用することもできます)。



練習に移りましょう。



多くの点で、構成はMultifonとの統合についての私の記事で引用したものを複製しますが、ここではモバイルオペレーターのSMPPで作業する例です。



インストールと初期設定の一部をスキップします。前述の記事でそれらをよく理解できます。



ちょっとした理論。 このシステムは少し非標準です。 いくつかの独立した悪魔で構成されています。 残りを監視するデーモンがあり、プロセスが突然停止した場合、再び開始します。 このデーモンは、rc.dまたはinit.dから起動するときに登録されます。起動スクリプトのパラメーターに慣れることができます。



bearerboxは、SMPP通信をクライアントとして保持し、3Gドングルで動作し、他のデーモンを接続するためにポートでリッスンするメインデーモンです。

smsbox -Webサービスからメッセージを受信し、送信のためにbearerboxに送信するデーモン

opensmppboxは、他のクライアントを接続するためのSMPPサーバーとして機能するデーモンです。 また、bearerboxに接続し、それを介して機能します。

wapboxはwapゲートのように動作するデーモンです。 正直なところ、私は本当に彼を理解していませんでした。

sqlboxは、特定の構造のMySQLデータベースに着信メッセージを記録したり、MySQLデータベースに追加されたSMSメッセージを送信したりできる非常に興味深いデーモンです。 これにより、MVCを介してsmsをモデルに直接統合できます。 つまり、送信とは、MVCアプリケーション内にsmsオブジェクトを作成して保存することです。 また、受信も同様ですが、この場合、SMSを受信したコールバックを受信しません。クラウンでスクリプトを実行する必要があり、リアルタイムではなくなります。

これらの各デーモンには、独自のrun_kannel_boxが接続されている必要があります。 これはデーモン監視であり、設定で複数のbearerbox / smsbox / wapboxを実行したり、他のデーモンを接続したりする場合は、スタートアップスクリプトに追加で登録する必要があります。 または、 zerkmsのコメントで提案されているように、コマンドラインパラメーター--parachute(-P)を使用して独自のスクリプトを記述します。



コメント付きの設定


group = core admin-port = 13000 #,             admin-password = pass #-,     (..    ) log-file = "/var/log/kannel/bearerbox.log" log-level = 1 #  ,    0. 1      . access-log = "/var/log/kannel/access_kannel.log" store-file = "/var/log/kannel/store_sms" smsbox-port = 13001 #,     - dlr-storage = internal sms-resend-retry = 1 # 1   . group = smsc smsc-id = povoljye smsc = smpp host = xxx.xxx.xxx.xxx #,     port = xxxx smsc-username = "name" smsc-password = "pass" source-addr-ton = 0 # 4      .      . source-addr-npi = 1 #   -  . dest-addr-ton = 1 dest-addr-npi = 1 system-type = VMA #-     ) throughput = 1000 #.   reconnect-delay = 5 #   connection-timeout = 120 # ,        N . transceiver-mode = true #,    !    ,        -   .       ,    ,    . denied-smsc-id = kemerovo #   -         SMS    SMSC.  SMS   round-robin,   ,    ,    SMS     . allowed-smsc-id = povoljye preferred-smsc-id = povoljye group = smsc #   smsc   .    -   ,    . smsc-id = kemerovo smsc = smpp host = xxx.xxx.xxx.xxx #  port = xxxx receive-port = xxxx smsc-username = "kemerovo" smsc-password = "pass" source-addr-ton = 0 source-addr-npi = 1 dest-addr-ton = 1 dest-addr-npi = 1 reconnect-delay = 5 system-type = VMA throughput = 1000 connection-timeout = 120 transceiver-mode = true denied-smsc-id = povoljye allowed-smsc-id = kemerovo preferred-smsc-id = kemerovo group = smsbox bearerbox-host = localhost sendsms-port = 13003 #,   smsbox  http    global-sender = 000037 #     log-file = /var/log/kannel/smsbox.log log-level = 0 access-log = /var/log/kannel/access_smsbox.log group = sendsms-user username = "user1" #,       SMS   http  password = "pass" concatenation = true #   max-messages = 20 #    default-smsc = povoljye group = sendsms-user username = "user2" password = "pass" concatenation = true max-messages = 20 default-smsc = kemerovo #ENGINE group = sms-service keyword = default # sms   .       . post-url = "http://example.com:8080/controller/action/tel/%p/time/%t/coding/%c/smsc/%i" # url   concatenation = true max-messages = 0 #  kannel  ,     http response.    , ..       .
      
      







そのため、この場合、2つのMegafon smsセンターへの接続を、smscパラメーターに応じて個別に送信して調べました。



そこで、SMSを送信します(エンコードの問題に関する以前の投稿を参照)

  http://example.com:13003/cgi-bin/sendsms?smsc=$smsc&username=user1&password=pass&coding=2&to=79277777777&text=some_text 




そして、スクリプト(たとえば、PHP)でSMSテキストを取得します。この場合 POST要求の本文で送信さます。

 $msg = file_get_contents('php://input');
      
      







繰り返しますが、ファイアウォールがある場合、外部からアクセスするとき、または内部から作業するときは、対応するポートを開いてループバックを開く必要があります。



リンクから、 ユーザーガイドを再度お届けします。 彼は非常に包括的です。 接続に関する問題が発生している場合-コメントや開発メーリングリストへの書き込み、彼らはそこに役立ちます。



All Articles