+++ /dev/null
-; extensions.conf
-; $Id: extensions.conf,v 1.1.1.1 2026/07/27 21:03:28 dev Exp $
-;
-; 設定ファイル「extensions.conf」に記述された「ダイヤルプラン」の一部を指します。
-; ダイヤルプランは、Asteriskのすべての動作を制御・実行するための基本計画(マスタープラン)です。
-; これらは必ずしも物理デバイスと結びついているわけではなく、
-; 自動応答(IVR)メニューや会議通話(カンファレンスブリッジ)機能などにも利用されます。
-; つまり、ダイヤルプランは着信や発信がどのように処理・ルーティングされるかを制御するものであり、
-; PBXを介したすべての接続の挙動をここで設定します。
-
-[globals]
-INTERNAL_DIAL_OPT=,30
-COMMAND_SYSLOG=/usr/bin/logger
-
-; === 光電話 外線着信 ===
-[from-hikari]
-
-exten => s,1,Set(__DIRECTION=INBOUND)
-same => n,NoOp(*** outside -> inside ***)
-same => n,Set(SRCNUM=${CALLERID(num)})
-same => n,NoOp(${SRCNUM})
-same => n,Set(DSTNUM=${CUT(CUT(PJSIP_HEADER(read,To),@,1),:,2)})
-same => n,NoOp(${DSTNUM})
-same => n,Set(CDR(userfield)=${DSTNUM})
-
-; --- ブラックリストチェック ---
-same => n(blacklist_chk),NoOp(*** BlackList Check ***)
-same => n,Gosub(app-blacklist-check,s,1)
-same => n,GotoIf($["${BLACK_FLAG}"="1"]?blacklisted:splist_chk)
-same => n(blacklisted),Answer
-same => n,Set(BLDEST=${DB(blacklist/dest)})
-same => n,ExecIf($["${BLDEST}"=""]?Set(BLDEST=app-blackhole,hangup,1))
-same => n,GotoIf(${LEN(${BLDEST})}?${BLDEST}:app-blackhole,zapateller,1)
-same => n,Hangup()
-
-; --- 特番チェック ---
-same => n(splist_chk),NoOp(*** SPList Check ***)
-same => n,Gosub(app-whitelist-check,s,1)
-same => n,Set(SPNUM_FLAG=0)
-same => n,Set(SLDEST="")
-same => n,Gosub(app-caller-check,${SRCNUM},1)
-same => n,GotoIf($["${SPNUM_FLAG}"="0"]?select)
-same => n,GotoIf($["${WHITE_FLAG}"="1"]?select)
-same => n(splisted),Answer
-same => n,GotoIf(${LEN(${SLDEST})}?${SLDEST}:app-blackhole,zapateller,1)
-same => n,Hangup()
-
-; --- 着信番号毎に処理振り分け ---
-same => n(select),Goto(${DSTNUM},1)
-
-exten => _0001234567,1,Goto(DSTNUM011,receive01,1)
-exten => _0001234568,1,Goto(DSTNUM021,receive02,1)
-exten => 3,1,Goto(DSTNUM011,receive01,1)
-
-[DSTNUM011]
-exten => receive01,1,NoOp(**** Main TELNumber ****)
-same => n,Hangup()
-
-[DSTNUM021]
-; --- FAX受信 ---
-exten => receive02,1,NoOp(**** Sub FaxNumber ****)
-same => n,Set(FAXOPT(ecm)=yes)
-same => n,Set(FAXOPT(headerinfo)=0001234568)
-same => n,Set(FAXOPT(localstationid)=0001234568)
-same => n,Set(FAXOPT(maxrate)=14400)
-same => n,Set(FAXOPT(minrate)=2400)
-same => n,Set(FAXFILE=${EPOCH}.tif)
-same => n,NoOp(**** RECEIVING FAX : ${FAXFILE} ****)
-same => n,ReceiveFAX(/var/spool/asterisk/faxin/${FAXFILE})
-same => n,Hangup()
-
-; Hangup.
-exten => h,1,NoOp(rec-fax: Hangup )
-same => n,NoOp(FAX Status: ${FAXSTATUS})
-same => n,NoOp(FAXOPT(ecm): ${FAXOPT(ecm)})
-same => n,NoOp(FAXOPT(filename): ${FAXOPT(filename)})
-same => n,NoOp(FAXOPT(headerinfo): ${FAXOPT(headerinfo)})
-same => n,NoOp(FAXOPT(localstationid): ${FAXOPT(localstationid)})
-same => n,NoOp(FAXOPT(maxrate): ${FAXOPT(maxrate)})
-same => n,NoOp(FAXOPT(minrate): ${FAXOPT(minrate)})
-same => n,NoOp(FAXOPT(pages): ${FAXOPT(pages)})
-same => n,NoOp(FAXOPT(rate): ${FAXOPT(rate)})
-same => n,NoOp(FAXOPT(remotestationid): ${FAXOPT(remotestationid)})
-same => n,NoOp(FAXOPT(resolution): ${FAXOPT(resolution)})
-same => n,NoOp(FAXOPT(faxdetect): ${FAXOPT(faxdetect)})
-same => n,NoOp(FAXOPT(status): ${FAXOPT(status)})
-same => n,NoOp(FAXOPT(statusstr): ${FAXOPT(statusstr)})
-same => n,NoOp(FAXOPT(error): ${FAXOPT(error)})
-same => n,System(/opt/asterisk-tools/bin/fax2pdf.pl -f /var/spool/asterisk/faxin/${FAXFILE} --from=${CALLERID(num)} --to=${DSTNUM} --status=${FAXSTATUS} --err="${FAXOPT(error)}")
-same => n,Hangup()
-
-[DSTNUM022]
-; --- FAX受信 (iaxmodem/HylaFAX) ===
-exten => receive02,1,Dial(IAX2/iaxmodem)
-same => n,Hangup
-
-[app-caller-check]
-; --- 特番ルール ---
-; ホワイトリスト自体のfuncは無し
-; AsteriskのDB_EXISTS関数は、AstDB(Asterisk内部データベース)に特定のキーが存在するかを確認し、存在すれば1、存在しなければ0を返します。この関数は、キーが存在する場合、その値を${DB_RESULT}変数に自動的にセットするため、確認と値の取得を同時に行える便利なダイヤルプラン関数です
-; (使用例)
-; same => n,Set(Exists=${DB_EXISTS(family/key)})
-; same => n,GotoIf($[${Exists} = 1]?found:notfound)
-;
-; パターンマッチ文字 先頭に"_" (アンダーバー)を付けると、パターンマッチとなる
-; X : 0-9
-; Z : 1-9
-; N : 2-9
-; . : 1文字以上の任意の文字や数字(ワイルドカード)
-; ! : 0文字以上の任意の文字や数字(最短一致ワイルドカード。マッチした時点で評価を確定)
-;
-; [注意]
-; パターンマッチで文字数(桁数)までは見ない
-; 例) _0800. なら、0800123 でも 08001 でも、08001234567890 でもマッチする
-
-; 非通知着信
-exten => anonymous,1,NoOp(*** CallNumer No CallerID ***)
-same => n,Set(SPNUM_FLAG=1)
-same => n,ExecIf($[${SLDEST}=""]?Set(SLDEST=app-blackhole,186announce,1))
-same => n,Return()
-
-; 0120/0800 フリーダイヤル
-exten => _0120.,1,Goto(_0800.,fdial)
-exten => _0800.,1,Goto(_0800.,fdial)
-same => n(fdial),NoOp(*** CallNumer 0120/0800 ***)
-same => n,Set(SPNUM_FLAG=1)
-same => n,ExecIf($[${SLDEST}=""]?Set(SLDEST=app-blackhole,kotei-announce,1))
-same => n,Return()
-
-; 0570 ナビダイヤル
-exten => _0570.,1,NoOp(*** CallNumer 0570 ***)
-same => n,Set(SPNUM_FLAG=1)
-same => n,ExecIf($[${SLDEST}=""]?Set(SLDEST=app-blackhole,no-service,1))
-same => n,Return()
-
-; 050 IP電話番号
-exten => _050.,1,NoOp(*** CallNumer 050 ***)
-same => n,Set(SPNUM_FLAG=1)
-same => n,ExecIf($[${SLDEST}=""]?Set(SLDEST=app-blackhole,busy,1))
-same => n,Return()
-
-; 060,070,080,090 携帯番号 (設定見合わせ中)
-;exten => _060Z.,1,Goto(_090Z.,ktai)
-;exten => _070Z.,1,Goto(_090Z.,ktai)
-;exten => _080Z.,1,Goto(_090Z.,ktai)
-;exten => _090Z.,1,Goto(_090Z.,ktai)
-;same => n(ktai),NoOp(*** CallNumer 060/070/080/090 ***)
-;same => n,Set(SPNUM_FLAG=1)
-;same => n,ExecIf($[${SLDEST}=""]?Set(SLDEST=app-blackhole,busy,1))
-;same => n,Return()
-
-; 国際電話
-exten => _ZXXXX.,1,NoOp(*** CallNumer International ***)
-same => n,Set(SPNUM_FLAG=1)
-same => n,ExecIf($[${SLDEST}=""]?Set(SLDEST=app-blackhole,no-service,1))
-same => n,Return()
-
-; 固定電話( 1桁目:0 2~4桁目:1-9 5桁目以降:0-9 の計10桁)
-exten => _0ZZZXXXXXX,1,NoOp(*** CallNumer normal 10 ***)
-same => n,Set(SPNUM_FLAG=0)
-same => n,Set(SLDEST="")
-same => n,Return()
-
-; テスト用
-exten => _Z,1,NoOp(*** CallNumer Test ***)
-same => n,Set(SPNUM_FLAG=1)
-same => n,ExecIf($[${SLDEST}=""]?Set(SLDEST=app-blackhole,reject-call,1))
-same => n,Return()
-
-; キャッチオール ルート (一番最後に評価されるはず)
-; このconfファイルの書き順では評価されず、ルールに従って順番が並び変えられる。
-; 並び替え後の順番は、asterisk CLI より、「dialplan show app-caller-check」にて確認の事。
-; 並び替えルールは、
-; https://docs.asterisk.org/Configuration/Dialplan/Contexts-Extensions-and-Priorities/
-; ・Dialplan search order を参照
-exten => _X.,1,NoOp(*** Ext... ***)
-same => n,Set(SPNUM_FLAG=0)
-same => n,Set(SLDEST="")
-same => n,Return()
-
-; === 内線設定 ===
-[from-internal]
-
-; --- 内線から外線の規制 ---
-; 暫定 全ての発信を禁止
-exten => _X.,1,Set(__DIRECTION=OUTGOING)
-same => n,NoOp(*** inside -> outside ***)
-same => n,Hangup()
-
-[app-whitelist-check]
-exten => s,1,NoOp(*** WhiteList Check ***)
-same => n,Set(WHITELIST_CHK=1)
-same => n,Set(Exists=${DB_EXISTS(whitelist/${CALLERID(num)})})
-same => n,ExecIf($[${Exists} = 1]?Set(WHITE_FLAG=1):Set(WHITE_FLAG=0))
-same => n,NoOp(WHITE_FLAG => ${WHITE_FLAG})
-same => n,Return()
-
-[app-blacklist-check]
-exten => s,1,NoOp(*** BlackList Check ***)
-same => n,Set(BLACKLIST_CHK=1)
-same => n,ExecIf($["${BLACKLIST()}"="1"]?Set(BLACK_FLAG=1):Set(BLACK_FLAG=0))
-;same => n,ExecIf($["${BLACKLIST()}"="1"]?Set(BLACK_FLAG=1))
-same => n,NoOp(BLACK_FLAG => ${BLACK_FLAG})
-same => n,Return()
-
-[app-blackhole]
-exten => busy,1,Noop(Blackhole No.3: Busy)
-same => n,Progress
-same => n,Busy(20)
-same => n,Hangup()
-
-exten => ring,1,Noop(Blackhole No.6: Ring)
-same => n,Answer
-same => n,Playtones(ring)
-same => n,Wait(300)
-same => n,Hangup()
-
-exten => kotei-aanounce,1,Noop(Blackhole No.2: Kotei-Announce)
-same => n,Answer
-same => n,Wait(1)
-same => n,Zapateller()
-same => n,Playback(kotei-announce)
-same => n,Hangup()
-
-exten => no-service,1,Noop(Blackhole No.1: No service)
-same => n,Answer
-same => n,Wait(1)
-same => n,Zapateller()
-same => n,Playback(ss-noservice)
-same => n,Hangup()
-
-exten => reject-call,1,Noop(Blackhole No.4: Reject calls)
-same => n,Answer
-same => n,Wait(1)
-same => n,Zapateller()
-same => n,Playback(no-connect)
-same => n,Hangup()
-
-exten => 186announce,1,Noop(Blackhole No.5: 186 Announce)
-same => n,Answer
-same => n,Wait(1)
-same => n,Zapateller()
-same => n,Playback(186Announce)
-same => n,Hangup()