Asterisk の呼び出し音に関して

Asterisk の extensions.conf で Dial コマンドを発行して VoIP 機器を呼び出す場合の呼び出し音について。

PSTN 電話網の規格自体がそうなのか知らないけど、一般的な PSTN 網内での発着信においては、発信側端末で番号指定して発呼した時点で、どうやら着信側ゲートウェイ、つまり着信側端末の上流にある交換機に即繋がっているようで、呼び出し音*1は着信側交換機が発している模様。

なので、 Asterisk

exten => s, 1, Dial(0100, 30)

とか単純に指定しちゃうと、着信時の呼び出し音は Asterisk ではなく、末端の VoIP 機器が生成して流しているようで、もしこの VoIP 機器の電源が落ちていたり、あるいは無線 LAN の非意図的な切断等で網から切り離されてしまっていた場合、 SIP 上では正常に呼び出しが行われているにも関わらず*2、発信側端末ではずっと無音が続くことになってしまう。

これを防ぐには、着信側 Asterisk 端末で呼び出し音を生成してやればいい。

Asterisk cmd Dial - VoIP-Info から、 Dial コマンドのリファレンスを参照すると、

r
Generate a ringing tone for the calling party, passing no audio from the called channel(s) until one answers. Without this option, Asterisk will generate ring tones automatically where it is appropriate to do so; however, "r" will force Asterisk to generate ring tones, even if it is not appropriate. For example, if you used this option to force ringing but the line was busy the user would hear "RING RIBEEP BEEP BEEP" (thank you tzanger), which is potentially confusing and/or unprofessional. However, the option is necessary in a couple of places. For example, when you're dialing multiple channels, call progress information is not consistantly passed back.

ということなので、

exten => s, 1, Dial(0100, 30, r)

という感じで指定してやればok。ただ、上にも書いてあるように、もし話し中だった場合は、プルルルル…プルrツーツーツーというような不自然な感じになってしまうので注意。

規定秒数(上の例では30秒)の呼び出しに応答しなかった場合、留守電とか入れるのがまどろっこしい場合は Dial コマンドの後に Congestion を発行してやれば、自動的にツーツーツーとなって回線切断できる。通話相手は人間なんだし、それだけ呼び出して話し中音になればああ外出中かなと勝手に想像してくれるはず。

exten => s, 1, Dial(0100, 30, r)
exten => s, 2, Congestion
exten => s, 3, Hangup

*1:プルルルル…プルルルル…というあれ

*2:まぁ VoIP 機器が死んでる時点で正常なのかどうかという話はあるが。Asteriskまでは正常に繋がっているはず。