Android端末から他のAndroid端末への通話とSMSの転送

2014年以前に書いてた記事。完成していないが公開。


以下の話で、現在自分のメイン端末のHTC J ISW13HTは台湾ROMではXi SIMカードを使っている場合普通の方法でSMSを送れない。が、ちょっとだけプログラムを書いてXposedモジュールを作れば、普通にSMSの送受信ができる可能性が高いと踏んでいる。それができる、という前提の話が以下。


前提

  • 主端末 HTC J ISW13HT 台湾 ICS ROM+WCDMA化 – 主回線
  • 副端末 X10 Mini Mini CM7 (GB)  – 副回線

どちらにもドコモのSIMカードが刺さっている。また、双方とも単独ではデータ通信はできないのが前提。外出時データ通信は別のモバイルルーターでまかなっているがデータ通信が常時できるという前提は置かない(というより、自分の意図云々は別にして、現実的に置きようがない)。

また、副端末に刺さっているSIMカードは本来は父用だったもの。なので、主端末の自分用回線(以下、主回線)と副端末の父用回線(以下、副回線)との間にはファミリー割契約が存在し、そのためこれら2回線間での通話は常時無料。ただしSMSについては費用発生。

主目的

主端末に割り振られている電話番号宛のi) 通話、と ii) SMSをサブ端末でも受けられるようにする。主端末は常用しており常時電源を入れているが、副端末は使うときにしか電源すら入れていないことが前提(この間主端末の電源をどうするかは後述)。

この転送は副端末が電源を入れているときだけ起こるのが望ましい。しかもそのときはいつも、ではなく、そのときどきで転送を行うかどうか選択できるのが望ましい。

副目的

主回線宛の電話は、主端末が圏内にあり電源が入っている状態であっても、着信できないことがある。このような場合、今までは単にその留守番電話サービスで伝言を受けていたが、VoIPに転送させることでそのときに着信して通話できるのが望ましい。

自宅はどうもドコモのいくつかのアンテナの受信エリアのちょうど境目にあるようで、端末の物理的位置が全く変わってなくても、接続してるアンテナが結構な頻度で変わっている。しかも、プラスエリアのアンテナと、そうでないアンテナとの切り替わり、いわゆるハード・ハンドオーバーがうまくいってない気がしている。なぜなら、その後一見繋がっているように見えても、発信、受信ともできないことが起こるから。

転送でんわサービスと留守番電話サービスとの干渉

メイン端末、サブ端末双方の回線で現在留守番電話サービスを使用している。ドコモの転送でんわサービスのページにあるPDFマニュアルには以下の記載がある(最終ページ):

他のサービスとの併用: ●留守番電話サービスと併用してご利用いただいている場合、転送でんわサービスか留守番電話サービスのいずれかを開始すると、他方は自動的に停止となります。また、現在サービス中のものを停止にしても、他方は自動的に開始になりません。

この非対称性は注意すべきだろう。

なお、転送(今想定しているシナリオではサブ端末)が話し中の際、転送(同じく、メイン端末)の留守番電話サービスで伝言を受けるように設定できる(マニュアル p. 9)。自分の想定しているシナリオでは、転送(サブ端末)の留守番電話サービスで伝言を受けられた方が都合よいように思える。が、転送でんわサービスについて他の電話機(例えばサブ端末)からの遠隔操作 もできる(マニュアル)ので、転送元(メイン端末)の留守番電話サービスで伝言を受けてもサブ端末から聞くことは可能。

これは転送先が話し中の場合に限り、電源を切っている場合は別扱いの模様。転送先が話し中、という極めて珍しい状況のためだけに、転送元に留守番電話サービスを残すのは賢明か? そもそも、サブ端末のSIMカードはもともと父の回線用であるが、その留守番電話サービスはもう止めてしまってよいであろう。その番号宛の電話は現実には全くかかってきていない。もしかかったとしても電源が入っていない間のものについてはドコモがSMSで番号を通知してくれるので、かかってきたということがわからないということはない。

ただし、このようにした場合、メイン端末の回線で伝言を受けたときに、メイン端末にはSMSで通知があるが、サブ端末には通知がない。これはメイン端末からサブ端末に何らかの手段で通知させる必要がある。ただ、ここではSMSの転送も想定しているので、それで自動的に通知できる。

考察

まず、通話はさておき、SMSの転送がリアルタイムで行われることが要件なら、転送状態の間もメイン端末の電源は入ってなければならない。通話の転送はキャリア(ドコモ)側で行われるが、SMSの転送は端末側でやらなければならないから。 SMSプロキシのようなアプリを使えばよいように思えるが、このまま使うと常時転送されてしまう。もっとも自分の場合、そもそもメイン端末でもSMSを滅多に受け取らないし、SMS送信に費用がかかるといっても一通3円とかだから、大きな問題にはならない。

注意しなければならないのは、本来のSMSの送信元もSMS転送時に含めなければならないこと。SMSプロキシにはその機能がある。ただ、元々のSMSが、文字数制限ぎりぎりの長さの場合、転送時に送信元番号も含めた場合、転送後に末尾が欠けるか、エラーを起こして転送できない可能性がある。SMSプロキシアプリの更新履歴を見ると、こういう状況に対処しているように思えるが未確認。

ちなみに、今まで知らなかったがSMS gatewayに分類されるAndroidアプリは結構ある。たいがいはHTTPベースのAPIを提供している。個人用途だとあまり使い道がないように思うが、例えば仕事で顧客にSMSを送ったりシなかったりしなければならないのなら使えるかも。古Android端末の有効な再利用方法にもなりうる。

パブリックなJabberサーバ xmpp.jp

  • メイン端末
    • 転送でんわサービスでサブ端末の番号に転送する設定に固定。
    • 転送されるまでの呼び出し時間を、通常時の例えば10秒と、サブ端末だけ持ちだしている間の0秒とで切り替えを行う(電話転送に関して唯一切り替えが必要な部分)。
    • 留守番電話サービスは廃止。
  • サブ端末
    • 転送でんわサービスで050の番号に転送する設定に固定。
    • 転送されるまでの呼び出し時間を例えば10秒に固定。サブ端末の電源が入っている間は、メイン端末ではなく、これが自分が持ち歩いているものである、という前提で。
    • 留守番電話サービスは廃止。
  • Fusion
    • 留守電サービスは切るか、セイフティーネットとしてオンのままにしておくのなら、留守電サービスが動き始めるまでの呼び出し時間を十分長くして、先にPBXes側の留守電サービス(voice mail service)が動くようにする。

Fusionのアカウントを留守電専用に使えると便利だったが、PBXesでSIP URIへの転送がうまくいかない。PBXesのボイスメール機能でも録音をファイルとしてメールアドレスに送らせるようにできるが、WAV形式。しかも一般的でないコーデックを使用しているらしくRemote Waveというアプリが再生に必要。

PBXesについては、この記事にあるような設定になっていると思われる。結果として、DIDからルーティングされて内線に到達してから、ボイスメールのためのメッセージが流れ始めた段階で”*”ボタンを押すことで、そこからボイスメール・システムにアクセスできて、録音済みのメッセージを聞くことができる。

問題は、PBXesに伝言がある、ということを、データ通信できない状況でのサブ端末が知るすべがないこと。これは、PBXesからの通知メールをメイン端末でモニタし、それがあればそれをSMSでサブ端末に通知するしかない。

1. 直接ドコモ回線で着信することが何らかの理由で2回線分失敗したときに、それでもインターネット電話で(なんとか)受けようとし、

2. そのインターネット電話というのがPBXesの内線1本だけだとする(リソースを節約するためCSipSimpleで1つだけアカウントを生かしておく。つまり、2つ以上にしない)。

そうすると、上でmedia bypassを実現するために、PBXes上でinbound routingでring groupを使用しないのだとすると、もう留守電話はPBXesが用意しているものを利用するしかない。

Ring groupが使えるのなら、別のSIP URIに飛ばすこともできるので、ひょっとするとFusionの留守電サービスが利用できるかもしれないが、以上の前提を全て満たすことが必要なら、それはできない。 決してそう意図したわけではなかったのだが、結果としては「無料で留守電サービスを使う方法」に紹介されている方法と同様の方法となった。もっとも、その記事の目的が留守電サービスを無料にすることであったのに対し、こちらは、たまたま結果としてそうなっただけ。2本の携帯回線間で転送をし、それでもダメな場合は(電波状況が悪いだけで起こりうる)、VoIPに転送しようとしたら、たまたま自分が用意していたVoIPのセットアップにPBXが含まれていたので、その留守電サービスが利用できた、というだけ。

ファミリー割引指定一般電話番号で050番号を予め指定しておくと割引があるのか?

他の副回線の有効な利用方法

どうせ父の回線の契約は簡単には解約できないが2年縛りが存在する。回線維持費は比較的低く抑えられるようになっている。…といった現状の下では、父の回線は2年縛りが終了するまでそのまま維持して、何かに有効利用したほうがよい。ここで考えたのはそういった有効利用方法の1つで、それによってサブ端末のみでも、受信に関しては、通話、SMSともメイン端末と(多少の余分な手間はあっても)同じような使い方ができるようになる。

もう1つ考えられる応用方法がある。それはVoIPとのブリッジに使うこと。 自分の現在の生活スタイルでは、サブ端末を使うときはデータ通信は特に必要ない。具体的には戸外で運動するときにだけ使うので、その間運動モニター用アプリが使えて、緊急電話を受信したり発信したりできればよい。発信の必要はほとんどないとは思うが、何らかの理由で100番、119番通報する必要がないとは言い切れない。

しかし、何らかの理由でデータ通信できるようになったとする。 メイン端末単独でこのブリッジが実現できれば理想的だが、自分が知る限り簡単にそれが実現できる方法はない。なので、自前でPBXを運営し、しかるべきセットアップをする必要がある。例えばFreeSWITCHであれば、GSMopenというモジュールで実現できそうだ。

付記

外出時にはモバイルルーターを使用するようになってから、特に海外からの(しかも仕事がらみの)緊急連絡を受け損ねることを心配しなくて済むようになった。こういう連絡は、国際電話料金が高いため、メールなどインターネットを介した手段で送られてくる。サブ端末のみ持ち出すときには、常時インターネットに接続していないので、やはり問題になる。上のセットアップでは、いずれにせよメイン端末でSMSの転送処理をせざるため電源を入れていなければならないので、同じ端末上で例えば特定のアドレス宛のメッセージも同様にSMSの転送させることが考えられる。

ただ、これはメイン端末でなければできないことではなく、本来はサーバーを用意してそれに担当させるのが望ましい。インターネットのサービスでSMS送信をサポートしているものはいくつもあるし当座はそれでよい。サブ端末だけに送信できればよいのであれば、そのISPをMopera Uとすれば、そのメールサービスではSMSで着信を通知させることができるので(「送信先アドレス、件名、本文の合計最大70文字までお知らせします」)、簡易的な代用案となる。

SPモードメールやドコモメールについてはプッシュ通知についてよくわからない。前者については、通知アプリの動作のしかたから、SMSによる通知で、しかも内容についての情報は全くなしで、単に新着メッセージがあるかどうかが知らされるだけと想像される。同じドコモの留守番電話サービスのSMSによる通知と同様なんではないかと。 が、災害時などにもサーバーからSMS送信をしたいと考えているので、サーバーが直接(SIMカードを刺さしたモデムを利用して)SMS送信できるのが望ましい。そのため、Hanacell「ジャパンSIMカード」を使おうかと思っていたが、SMS一通12セントなのはさておき、価格が以前の$25から$39に知らないうちに上がっていた!

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください