Asteriskで携帯電話の発着信とSMS送受信を可能にする

Asteriskに携帯電話の機能を追加する方法をまとめます。

これにより、携帯電話の発着信及び通話。SMSの送受信が可能になる。

必要な物

物理サーバー

  • centosやubuntu。LTSが好ましい
  • CentOS 5等、古いカーネル(i.e. 2.6.18)は音質が悪いという報告があるようだ。
  • ドングルはUSB接続をするため、VPSではなく、物理サーバーが必要である。
  • 私は、(2018/07/15時点で)Ubuntu 16.04.4 LTS(期限は2021年4月)を使用している。なお、2018年4月にUbuntu 18.04 LTSがリリースされている(サポート期限は2023年4月)

ドングル

  • いわゆる、USBのデータ通信モデム。VOICE対応機種である必要がある。利用可能な型式は限定されている。こちらにリストがあります。
  • 技適については各自調べる必要がある。法律なので、解釈により利用可能な物、利用不可なものがあるはずである。

通話対応のSIM

  • 採用できるドングルは、SIMフリー(ロック解除)されているものであるので、キャリアは問わない。
  • 日本国内で使用する場合は、UMTS(日本ではW-CDMAと呼ばれる)の2.1GHzに対応しているドコモかソフトバンクを使用する。cdma2000を採用しているAUは利用できない。なおこれらの条件はドングルの対応周波数によるものである。

chan_dongle

  • ドングルをAsteriskで利用するためのモジュール。
  • 公式サイトは、http://wiki.e1550.mobi/ ただし、過去に消えたことがあるので、注意。
  • 私がまとめた記事。ただし2015年のものである。
  • オリジナルは、asterisk 1.6 and 1.8に対応。
  • クローンとパッチで、13まで対応している。
  • プライベート的には、14まで対応している。(多分そんな感じで英語で書かれている)

Asterisk

  • chan_dongleの対応バージョンに合わせて、Asteriskのバージョンを選定し導入する。
  • LTSであるAsterisk 11は、2017-10-25にEOLとなっている。
  • 次のLTSは、Asterisk 13であり、2021-10-24にEOLとなる。
  • その次のLTSは、Asterisk 16である。2018-10-17にリリース予定。こちらのEOLは2023-10-11。
  • これからの導入は、Asterisk 13がお勧めとなるので、早く動作確認をしたいところである
  • 私自身では、Asterisk 11で動作をさせている。

 

具体的な導入方法は、検索するとたくさんできてきますし、私の記事にも(古いが)あります。

AsteriskからVoLTEで発信する夢

前回は、VoLTEを使用するには、データ契約が必要だから、費用対効果として無駄だと言うことで終えた。

しかし、調べていたら、みまもりケータイ4がVoLTE対応であり、月額が500円ほどで済む。しかも10分かけ放題。

ただ、この契約のSIMは、IMEIをチェックしているようなので、端末に制限がある。
まぁ世の中には、IMEIを偽装書き換えできる端末もあるので・・・。

g729のコーデックは無料で使えるし、権利もOKでした

以前、『g729のコーデックを無料で使えるけど、使ってはダメでした』と言う記事を書いていましたが、知らないうちにg729の権利が期限切れになっていました。

2017年1月1日現在、G.729コンソーシアムに基づくほとんどのライセンス特許の特許期間が終了しました。

G.729コンソーシアム特許ライセンス契約の期限切れでないライセンス著作権および許諾された特許に関して、G.729コンソーシアムのライセンス供与者、すなわちOrange SA、Nippon Telegraph and Telephone CorporationおよびSherbrooke Universite de Sherbrooke(以下「ライセンサー」)は、 2017年1月1日よりロイヤリティフリーの基準で既存の条件で同じライセンスを取得します。

現在のG.729コンソーシアム特許ライセンス契約のライセンシーは、2017年1月1日現在で販売またはその他の方法で配布されたライセンス製品の報告および支払いは行われません。

翻訳 http://translate.google.com/translate?hl=ja&sl=auto&tl=ja&u=https%3A%2F%2Fwww.mgraves.org%2F2017%2F03%2Fits-official-the-patents-on-g-729-have-expired%2F

元のサイト https://www.mgraves.org/2017/03/its-official-the-patents-on-g-729-have-expired/

そして、以前書いた記事では、有料としていた、オープンソースのg729が使用している、IntelのIPPも無料で使用できるようです。

残りは、GPL違反だと言う点、

GPLは流通ライセンスであり、使用ライセンスではありません。 別の人からAsteriskをダウンロードして使用している場合、Asteriskをダウンロードした人はGPLを遵守しなければなりません。 GPLソフトウェアと静的なG.729バイナリ(非GPL互換ライセンス)を組み合わせた場合、あなたはその組み合わせを配布しない限り、GPLを侵害しません。 しかし、あなたはそれを自分で使うことができます。 アスタリスクは、単独で、または上記のG.729の実装と組み合わせて、ダウンロードして使用する必要はありません。 したがって、アスタリスクのコピーを他の人に渡す予定がない場合は、上記のGPL違反に関する声明はあなたには適用されません。

翻訳 http://translate.google.com/translate?hl=ja&sl=auto&tl=ja&u=https%3A%2F%2Fwww.voip-info.org%2Fwiki%2Fview%2FAsterisk%2BG.729%2BLicensing

元のサイト https://www.voip-info.org/wiki/view/Asterisk+G.729+Licensing

使用する事に対するライセンスでは無く、再配布するためのライセンスだから。普通に使う分には問題ないと言うことでしょうか。

と言うことで、以前問題にしていた3点が解決していて、G729aはいくつでも利用できると思って良いかもしれない。Google翻訳を多用しているので、信用できない。

g729aを使っているとこで、monitorを使うと、g729aのライセンスが複数必要なのかい』に書いたが、結構な数のライセンスが必要になる。この辺が解決する。

hylafaxでファックスヘッダーの日付を変える

標準だと、

Tue 26 Sep 2017 05:26:18 PM JST

とかになっているから、もうちょい、日本風に。

設定箇所は、config.ttyIAXのTagLineFormatの部分。

TagLineFormat: “From %%l|%c|Page %%P of %%T”
このようになっている。
この%cの部分が日時表示である。意味は、「現在のロケールにおいて一般的な日付・時刻の表記。 」

そして、記述の書式は、strftimeというものらしく、下記を参考にした。

https://linuxjm.osdn.jp/html/LDP_man-pages/man3/strftime.3.html

%Y-%m-%d %T
に置き換えた。

2017-09-26 05:26:18
というような記載になる。

hylafaxのユーザー追加

ユーザーの追加が分からなくて、悩んだ。
もしかすると、コマンドの指定がバージョンの違いがあるかもしれない。

http://n73.jugem.jp/?eid=10
http://blog.goo.ne.jp/jnana_tomo/e/123f1557e1d3303d15e358f7ed92d3fb
ここら辺は、
faxadduser -u (username) (password)
と記載されているが、これではうまくいかない。

下記が合っている
https://linux.die.net/man/8/faxadduser
http://www.ckenko25.jp/wordpress/2017/02/post-4571

ファックスユーザー兼アドミンを登録
faxadduser -a アドミンパスワード -p ユーザパスワード ckenko25

ただのユーザ登録
faxadduser -p ユーザパスワード ユーザーネーム

ユーザー削除
faxdeluser ユーザネーム

ユーザ一覧表示
cat /var/spool/hylafax/etc/hosts.hfaxd

必要なところを引用しておく。

at commandで音声SIMを操作してみる

自番号が登録されていなくて、Unknownになっている音声SIMが手元にある。

なにやら、ATコマンドで登録出来そうなので、試して見る。

https://github.com/jstasiak/asterisk-chan-dongle/blob/master/etc/extensions.conf
の部分、

; Subscriber Number example see output of cli ‘dongle show devices’ column “Number”
; may be empty, use for save in SIM commands AT+CPBS=”ON” and AT+CPBW=1,”+123456789″,145

とあるが、その通りしてもエラーになる。

asteriskのcliから行っていたけど、本格にATコマンドで操作してみることにする。

ATコマンドは、ターミナルソフトというもので行う。今回はcuを使う。

対象のサーバーはubuntu。自分にしては珍しい。

cuのコマンドを打つと

プログラム ‘cu’ はまだインストールされていません。 次のように入力することでインストールできます:
apt install cu

なんて、優しく教えてくれるので、その通りにインストール。教えてくれないと、yum install cuとかやっているところだった。

cuを実際に使う前にも下準備が必要で、ここを参考にした。

ttyUSB0等のデバイスのパーミッションが
crw-rw— 1 root dialout 188, 0  2月 10 22:05 /dev/ttyUSB0
の様になっているので、
chmod 666 /dev/ttyUSB0
としないと、だめらしい。

cu -s 115200 -l /dev/ttyUSB0
でターミナルに入れる。

自分の入力したコマンドが表示されないので、とりあえずatzをする。
ローカルエコーするコマンドがあるはずだけど、覚えていない。
追記ateでした。

終了は~.

さて、まずは正常なSIMで行ってみた。自局番号を表示するコマンドを探しまくったけど。

AT+CNUM
+CNUM: “”,”070146****”,129
OK
な感じで自分の番号が表示される。

問題のSIMで行ってみる。
AT+CNUM
OK
と、なにも表示されずにOKが返される。

そこで、事前に調べていたコマンドを実行してみる。

AT+CPBS=”ON”
AT+CPBW=1,”+818047560000″,145

しかし、errorがでる。

http://radekp.github.io/qtmoko/api/modememulator-phonebook.html
を見て、もう少し理解をしてみる。

CPBSは、電話帳の編集を有効にする。SIM自身にも電話帳を保存できる機能がある。

CPBWで、電話帳に書き込みをする。=1で一番目のリストを編集。

“+818047560000″は電話番号。+81と国際番号が付いている点は意味ありげ。

145は「string type, phone number of format <type>; default 145 when dialling string includes “+”, otherwise 129」とある。たぶん145は+を付けた国際番号で。それ以外は129と言うことであるかな。
日本で使うので、普通に”08047560000″で載せたいなら、129を指定するのかな。

Asterisk13では、ファックスの受信は出来ないの?

Asterisk13では、ファックスの受信は出来ないの?
送信は使っているけど。

定番では、digiumで1チャンネル無料なので、それを購入して使おうと思い。ベンチして対応するモジュールをインストールしようとした。

Asteriskの各バージョンが提供されているけど、Asterisk13用だけ無い。
いやな感じはしてたけど、とりあえずAsterisk12用でどうにかなるかなと思い、ダウンロード。modulesのフォルダに配置して。

しかし(やっぱり)動かない。
ここまでやったのが一年くらい前だったので、Asterisk12用をダウンロードしたのをすっかり忘れていて、ここ最近再開し、またまた四苦八苦して設定する。
やっぱり動かない。さてどうするかという顛末記です。
続きを読む

agiでmonitorをするのが大変だった。

extensionsでmonitorをするには、

exten => s,1,Monitor(wav,${CALLFILENAME},m)

な感じで行えばいい。簡単。

難しかったのが、${CALLFILENAME}に保存ファイル名を指定するんだけど。
発信元番号や着信番号や日付を付けたファイル名にしたいなと。
日付は、${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S )で良いけど。
難航したのは、発信元番号を入れたいなと言うとき。

${CALLERID(dnid)}

で、発信元番号が取得できるんだけど、なぜか番号にスペースが入る。
extenで、スペースは消すとか、そんな文字列処理書けんよ。
もうやだ。AGIで書いてやる。Perlならそんなの、なんなく出来るのに~。

こうして、またまたハマった。4日ほど。

続く 続きを読む

g729のコーデックを無料で使えるけど、使ってはダメでした

g729a関連で、発信が出来ない件で引き続き調査。

ライセンスを、よしもう一つ買い、3つにしてしまおうと、思いdigiumのホームページに行くのに、スペルが分からなく、検索しているうちに、http://asterisk.hosting.lv/ にたどり着いた。
そこは、何かというと、Asteriskで使えるオープンソースのg729のコンパイル済みのコーデックを配布しているところでした。 続きを読む

g729aを使っているとこで、monitorを使うと、g729aのライセンスが複数必要なのかい

asteriskでmonitorを使い始めたら、iPhoneから発信が出来なくて・・・・。

いろいろと調べたら、g729aのラ イセンスを複数必要な状況のようだ。

http://lists.digium.com/pipermail/asterisk-users/2012-January/269416.htmlマトリックス?表って事かな。
なんだか、needsなライセンスは、3だとか、5とか、7とか。恐ろしい事言ってるぞ。

パススルーで使うと、ライセンスを消費しないとか?
http://www.voip-info.org/wiki/view/Asterisk+G.729+pass-thru

イマイチ、英語だから、飲み込めないでいる。

一応、ライセンスは2契約ある。うーむ。もう一個買ってダメなら、諦めるか。
さすがに、7個は買うのはつら~い。