4,721
回編集
差分
→sub-addppi
exten => s,n,Return
外線発信時にPPIヘッダを追加するサブルーチンです。PJSIPではDial()からコールされるサブルーチンでヘッダを設定する必要があります。
==外線からの着信==
そろそろ書くのも面倒になってきたので読んでみてください。<br>
外線からの着信は別なcontextにしています。トランクのエンドポイントcontextをここにすることで着信させます。着信方法は「どんな番号でも」落とせるキャッチオールにしてあります。なのでextenは_X.となっています。<br>
処理が少々長いのは複数の内線に同時に落とせるようにしているためで、着信先のエンドポイントをPSJIP/phone1のような形で取得したものと
PJSIP/phone1&PJSIP/phone2のように&で結合しています。Dial時に頭1文字の削っているのは先頭に余計な&が付くので、これを除去するためです。
;
; 外線からの着信
; 注:トランクを設定する場合incoming contextに着信させ番号で落とすこと
;
[incoming]
;キャッチオール(どんな番号でも)する
exten => _X.,1,NoOp(外線着信)
;リストの位置カウンタを1に,リスト初期化
exten => _X.,n,Set(CNT=1)
exten => _X.,n,Set(D_LIST=)
;セーフティ:一定以上ループさせない
exten => _X.,n,While(CNT<33)
exten => _X.,n,Set(TMP_EXT=${CUT(RINGPHONES,\,,${CNT})})
;要素がなくなったらチェックへ
exten => _X.,n,GotoIf($["${TMP_EXT}"=""]?gochk)
;要素がある場合エンドポイント取得
exten => _X.,n,Set(TMP_ENDP=${DB(MYPBX/EXT/${TMP_EXT})})
;エンドポイントが存在しない場合にはループ継続へ
exten => _X.,n,GotoIf($["${TMP_ENDP}"=""]?cont)
;エンドポンとをPJSIPのDIAL CONTACTへ変換
exten => _X.,n,Set(TMP_ENDP=${PJSIP_DIAL_CONTACTS(${TMP_ENDP})})
;DIAL CONTACTがない場合にはループ継続へ
exten => _X.,n,GotoIf($["${TMP_ENDP}"=""]?cont)
;ダイヤルするリストに結合
exten => _X.,n,Set(D_LIST=${D_LIST}&${TMP_ENDP})
;カウンタをインクリメントして継続
exten => _X.,n(cont),Set(CNT=${INC(CNT)})
exten => _X.,n,EndWhile
;リストが空だったらダイヤルしない
exten => _X.,n(gochk),GotoIf($["${D_LIST}"=""]?nogo)
;リストの頭1文字は&が余計についているので削ってダイヤル.テクノロジ(PJSIP/)はすでに付いている
exten => _X.,n,Dial(${D_LIST:1})
exten => _X.,n(nogo),Hangup
=WIP=