LinuxマシンでのSMSメッセージの受信と処理

最近のプロジェクトの1つでは、開発チームに、サイトのユーザーに関する最も現実的な連絡先情報を収集するよう依頼しました。 登録の正しい形式と誤った形式、1段階と2段階、サイトを使用する際の情報の追加に関する白熱した議論...アイデアの流れは止まらないように思われました。 ただし、その結果として価値のないデータが大量に得られることを保証するものはありませんでした。 検証しますか? できますが、すべてを予見しますか? メールボックスを使用してアカウントをアクティブ化して検証しますか? しかし、 10 Minute Mailなどの一連のサービスは効果を無効にします。 さらに、プロジェクトの詳細により、登録プロセスを過度に延長することはできませんでした。 ユーザーがログインして、自分のことを実行してから、アカウントをアクティブにするかどうかを決定しました。 最後に、 「SMSでアクティベートしましょう!」というフレーズが鳴りました。 プロバイダーの検索、価格表の調査、およびサードパーティのオフィスにSMS処理を配置するというアイデアの拒否...彼らが自分でそれらを受け入れて処理する必要があることが明らかになりました。



VOIP /アスタリスクとVOIPゲートウェイ用の機器の選択については、ささやかな経験がありました。 中国の兄弟への古いリンクを使用して、SMSゲートウェイを探しました。 しかし、最初は時間が足りず、2番目は彼らと仕事をした経験から、最初はめったに何かが出なかったので、通常のUSB GSMモデムが対応できるかどうかが面白くなってきました。 そして、先を見据えて、私はこの決定が正しかったと言います。 少なくともこの段階では。



サーバーのセットアップ



そのため、契約のあるHuawei E1750モデム(HSPA USBスティック)が手に入りました。 同様のタスクに直面した最初の人は、Windowsユーザーを満足させるために、GSMモデムのすべての最新モデルがシステムでストレージデバイス(SCSI CD-ROM)として最初に認識されることです。 Autorunがそこから起動され、ドライバーがインストールされ、モデムがモデムモードに切り替わります(なんと!)。 気が付いたらすぐに「来る」ことにしました。 ただし、さらに30分、 usb_modeswitchユーティリティが見つかりました。これはモデムモードの切り替えを実行します。 その後のみ、モデムは意図した目的で機能します。 起動して構成するだけで、ここに特別な記述はありません。



まあ、神と! この時点での情報は、それほど多くは述べていませんが、正しい方向に掘るには十分です。 既存のソリューションは「デーモンのような動作」に基づいてフィルタリングされたため、SMSサーバーツールという1つの候補しかありませんでした。 元のパッケージは開発されていませんが、その継続SMSサーバーツール3は開発中だけでなく、作成者であるMr. ケイジョー「ケケ」カスヴィ。



残念ながら、私の愛するGentooには最新バージョンのebuildがありませんでした。最新バージョンは2.2.20です。 しかし、長い間グーグルではありませんでしたが、3rdバージョンの既製のebuildを見つけました。これを少し編集してコンパイルしました。 現時点では、バージョン3.1.14がインストールされており、安定しています。



判明したように、smstoolsの構成は非常に簡単なので、ほぼ最初の構成でメッセージの受信を開始できます。 いいえ、もちろん、SIMカードがPINコードでロックされている場合は、構成に追加する必要がありますが、非常に簡単です。



構成ファイルの構造も不名誉に理解できます(viva unix-way!)。 ファイルの最初で、デーモンのグローバル設定を指定し、セクションでデバイスの設定を説明します。

#

...

...



#

[Huawei E1750 ]

...



# , ,

[AnotherModem]

...









グローバル設定


最も重要なパラメーターは、デーモンが新しいメッセージをポーリングするデバイスです。 私のようにデバイスが1つしかない場合は、 devices = HuaweiE1750



と書きます。複数ある場合は、ここにコンマを付けてリストします。



他の2つの重要なパラメーターは、 user = smsd



およびgroup = sms



です。 Linuxに精通している人はその意味を説明する必要はありませんが、デーモンがアクセスできるすべてのリソースに対する正しい権利を思い出させるためだけに制限します。 さて、 pidfile = /var/run/smsd/smsd.pid



logfile = /var/log/smsd/smsd.log



などの指示について言及しlogfile = /var/log/smsd/smsd.log



、その意味も明確にする必要があります。 ところで、デバッグ時には、 loglevel = 7



命令も構成に挿入することをお勧めします。これにより、デーモン内で何が起こっているかを追跡できます。 後でloglevel = 5



に設定しloglevel = 5







モデム設定


原則として、ここでも約束どおり、すべてがシンプルです。 しかし、私はいくつかの問題に遭遇しました。そのため、実際に情報をあなたと共有することにしました。



1つの問題は、常に新しいデバイスにジャンプしたいというモデムの欲求でした。 /dev/ttyUSB0



として定義されると、別の番号で別の時間になります。 この状況は私には向いていませんでした。 そのため、デバイスのudevルールの書き方を探し始めました。 しかし、変更を加える準備ができたとき、ebuild usb_modeswitchはすでにファイル/lib64/udev/rules.d/40-usb_modeswitch.rules



をシステムに追加することでこれを行っていたことが/lib64/udev/rules.d/40-usb_modeswitch.rules



ました。これにより、デバイスへのシンボリックリンクがアドレスに現れました。 /dev/gsmmodem



構成に書き込みます。



2番目の問題は、モデムが時々フリーズすることでした。 残念ながら、資料を読む時間がなくなったため、Googleは非常に多くのオプションを提供したため、すべてを試しても意味がありませんでした。 そのため、実際には助けを頼りにせずに、smstools3フォーラムをクロールしました。 ケケが悲惨な2-3時間後に私の投稿に答えたとき、私の驚きと喜びは何でしたか。 いいえ、彼は正確な解決策を提供しませんでしたが、設定に一度追加することを推奨した2行をすべてフリーズから救いました。 それらの値をどこで取得できるかは、まだ謎のままです;モデムの技術文書は見つかりませんでした:

check_memory_method = 1

memory_start = 0








さて、大騒ぎを引き起こした3番目の問題は、SMSハンドラーの作成でした。 これを行うために、 eventhandler = /usr/local/scripts/activate



命令が構成に追加され、その内部でアカウントのアクティブ化のリクエストがプロジェクトサーバーに送信されました。 スクリプトは、イベントのタイプとメッセージファイルの2つのパラメーターを受け取ります。 彼は必要なデータをそこから引き出し、サーバーに送信します。



合計、ここにそのような短い設定があります:

devices = Huawei

loglevel = 5



user = smsd

group = sms

logfile = /var/log/smsd/smsd.log

infofile = /var/run/smsd/smsd.running

pidfile = /var/run/smsd/smsd.pid



alarmlevel = 7

alarmhandler = /usr/local/scripts/activate/smsd-alarm



[Huawei]

device = /dev/gsmmodem

baudrate = 115200

pin = 1111

incoming = high

cmgl_value = 0

check_memory_method = 1

memory_start = 0

eventhandler = /usr/local/scripts/activate








予想外の利益



最初、登録フォームには携帯電話フィールドが含まれていました。これはプロジェクトの要件に含まれていました。 着信SMSは指定された電話から送信され、この電話のアカウントがアクティブ化されているはずです。 しかし、判明したように、ユーザーはメッセージに何も書く必要がないときに動けなくなります。 まず、登録後、「テキスト「F」を含むメッセージを番号12345678に送信する」という指示が表示されました。 次に、別の素晴らしいアイデアが登場しました:短い登録(名前、姓、電子メール/ログイン、パスワード)の後、 携帯電話フィールドがフォームから削除され、ユーザーは指定された番号に送信する必要があるコードを与えられます。 アカウントはこのコードによって特定され、SMSの送信元の電話がユーザープロファイルに入力されます。 出来上がり、ユーザーがいて、実際の電話番号があります。プロファイルに多数の電話を追加し、古い番号が失われた場合はプロファイルの電話番号を変更し、別のSMSを送信して古い番号を削除します。



まとめ






All Articles