Asteriskで内線転送をする方法。

我が家には1Fと2Fに電話機があり、それぞれAsteriskにより内線番号が割り振られています。
最近は家の電話なんてかかってこないので、すっかりほったらかしでボヤーン状態でしたが、たまには使ってみるかと思ったものの

「そういえば、IP-PBXなのに、我が家の内線転送ってどうやるんだ?」

そんな疑問が浮上した今日この頃です。

相変わらず、extensions.confがごちゃごちゃしてますが、我が家のは簡単にこんな感じです。

[fromntttel]
;NTTから電話があったときの処理
;非通知の場合、発信者番号通知をしてもらうよう案内する
exten => ${NTTTEL},1,GotoIf($[${CALLERIDNAME} = Anonymous ]?20:2)
exten => ${NTTTEL},10,Dial(SIP/201&SIP/202,30)
exten => ${NTTTEL},11,HangUp
exten => ${NTTTEL},20,playback(please186)
exten => ${NTTTEL},21,HangUp
exten => ${NTTTEL},30,playback(call_deny)
exten => ${NTTTEL},31,playback(call_deny_rap)
exten => ${NTTTEL},32,Goto(31)
exten => ${NTTTEL},33,HangUp

[nttout]
;NTTから発信する処理
exten => _0.,1,SetCallerId,${我が家のNTT電話番号}
exten => _0.,2,Dial(SIP/${EXTEN}@ntttel,60,r)
exten => _0.,3,Congestion

[default]
;普段はNTTから外線を発信
include => nttout
; パーク保留は700
include => parkedcalls

; Local SIP Telephones 201-202
exten => 201,1,Dial(SIP/201,30,tT)
exten => 201,2,Answer()
exten => 201,3,Voicemail(${EXTEN})
exten => 201,4,Hangup
exten => 201,102,Answer()
exten => 201,103,Voicemail(${EXTEN})
exten => 201,104,Hangup

exten => 202,1,Dial(SIP/202,30,tT)
exten => 202,2,Answer()
exten => 202,3,Voicemail(${EXTEN})
exten => 202,4,Hangup
exten => 202,102,Answer()
exten => 202,103,Voicemail(${EXTEN})
exten => 202,104,Hangup

ここまで内線番号計画は良いとして、こんどは実際に電話をしてるときにほかの内線へ回す場合の手順を考えます。

(普通の会社の場合)
外線着信

内線201が応答

内線202の人へ電話をまわすため
通話中に「保留ボタンを押す」

内線番号202をまわす

202:電話に出る
201:電話を代わることを伝え受話器を置く

内線202で外線通話を続行する

こんなんです。

が、しかし。

我が家の電話機には、、、会社の電話みたいな「保留」なんて機能はございませーん。
(保留ボタン、確かにあるけれど、その電話機が保留になるだけで、内線としてまわせません。。。)

そこで、さきほどあった「保留ボタンを押す」の部分を以下のように置き換えます。

(我が家の場合)
外線着信

内線201が応答

内線202の人へ電話をまわすため
通話中に「*7と押す(保留になる)」

内線番号202をまわす

202:電話に出る
201:電話を代わることを伝え受話器を置く

内線202で外線通話を続行する

と、こんな風に実装します。*7といったボタン操作で保留にするには、feature.confを編集します。

[featuremap]
atxfer => *7 ; Attended transfer
blindxfer => *8 ; Blind transfer

とりあえず、これで良いようです。

blindxferってのが*8に割り当ててみましたが、これは転送したとたんに転送元の通話が終了する機能のようで、いわば「用件を伝えないで、転送先が受話器をあげたら、即外線通話の人と代わる」ような機能です。
狭い事務所とかで、『誰々さんから~』ってな感じで、口頭で内線を回すときに使えるかもしれませんね。

さて、そんなわけで早速以上のようにconfigを書き直し、Asteriskを再起動してテストしてみます。

…あれ。

いや、内線同士で通話を開始したときは*7が効くんですが、外線通話のときはうまく機能しないです。。。

と、思ったら、原因がありました。
extensions.conf内の、NTT発信の部分です。

[fromntttel]
exten => ${NTTTEL},10,Dial(SIP/201&SIP/202,30,t)
exten => ${NTTTEL},11,HangUp

[nttout]
exten => _0.,1,SetCallerId,${我が家のNTT電話番号}
exten => _0.,2,Dial(SIP/${EXTEN}@ntttel,60,rT)
exten => _0.,3,Congestion

Dialの部分に、内線転送を使用するかしないかの T が抜けていました。

ちなみに T と t では、違いがあるらしく、大文字Tが「発信側が内線転送使用を許可する」、小文字tが「着信側が内線転送使用を許可する」意味のようです。

たしかに、外部からかけてきた人が中の内線を転送することは普通ありえませんし、逆に発信した場合、かけられた相手が内線を転送したりしたらおかしいですよね。

きちんとDialにTを指定すると、うまく1Fと2Fで転送することができました。よかったよかった。

…でも、最近家の電話って来ないなぁ(笑)