オフトピック。 なぜこれが必要なのですか?
私は長い間プロジェクトに取り組んできましたが 、その本質はメガホンの旗の下で実際の都市ゲームを行うことです。 最初は、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');
繰り返しますが、ファイアウォールがある場合、外部からアクセスするとき、または内部から作業するときは、対応するポートを開いてループバックを開く必要があります。
リンクから、 ユーザーガイドを再度お届けします。 彼は非常に包括的です。 接続に関する問題が発生している場合-コメントや開発メーリングリストへの書き込み、彼らはそこに役立ちます。