Saya blm mendapatkan jawaban yang pas, mungin karna pertanyaan saya mungkin kurang dipahami atau kurang detail menuliskannya.
Kita rubah aja flownya
extension/softphone ----SIP REGISTER—> asterisk client (A) -----SIP TRUNK----------> asterisk operator (B)----------SIP TRUNK —> SBC operator TSEL
ketika saya call nomor HP (GSM) terkadang tidak ada notifikasi dan kadang ada notifikasi, saya kurang tau apakah karna di sisi SBC operator terlalu overload sehingga tidak mengirimkan notifikasi or not.
Namun client saya kadang komplain, kenapa kadang2 tidak ada notif, ketika nomor yang di call sibuk, reject, atau invalid number.
Sehingga saya mau mengakalinya dengna membuat voice sendiri, dengan dialplan sbb dengan membuat voice sendiri dan memplay berdasakan return code (hangupcode) pada asterisk B
[dlpn-trunk]
exten => _X.,1,Set(CID_IS_ACTIVE=${AST_CID_IS_ACTIVE(${CALLERID(num)},${CALLERID(ani)})})
exten => _X.,n,ExecIf($[ “${CID_IS_ACTIVE}” = “N” ]?Hangup())
exten => _X.,n,Set(GROUP()=${CHANNEL(peername)})
exten => _X.,n,NoOp(CURRENT_CALL >> ${CHANNEL(peername)} = ${GROUP_COUNT(${CHANNEL(peername)})})
exten => _X.,n,ResetCDR()
exten => _X.,n,Set(CALLERID(all)=${CALLERID(num)})
exten => _X.,n,Set(CDR(caller_cid)=${CALLERID(num)})
exten => _X.,n,Set(CDR(channeltype)=${CHANNEL(channeltype)})
exten => _X.,n,Set(CDR(recvip)=${CHANNEL(recvip)})
exten => _X.,n,Set(CDR(peerip)=${CHANNEL(peerip)})
exten => _X.,n,Set(CDR(sip_from)=${CHANNEL(from)})
exten => _X.,n,Set(CDR(sip_uri)=${CHANNEL(uri)})
exten => _X.,n,Set(CDR(useragent)=${CHANNEL(useragent)})
exten => _X.,n,Set(CDR(peername)=${CHANNEL(peername)})
exten => _X.,n,Set(CDR(outcodec)=${CHANNEL(audionativeformat)})
exten => _X.,n,Set(HANGUP_SIDE=CALLER)
exten => _X.,n,Dial(${TRUNK}/${EXTEN},tTg)
exten => _X.,n,Set(HANGUP_SIDE=CALLED)
exten => _X.,n,ExecIf($["${HANGUPCAUSE}"=“21”]?Playback(busy_number)) ; CALL REJECTED
exten => _X.,n,ExecIf($["${HANGUPCAUSE}"=“17”]?Playback(busy_number)) ; BUSY
exten => _X.,n,ExecIf($["${HANGUPCAUSE}"=“1”]?Playback(invalid_number)) ; INVALID NUMBER
exten => _X.,n,ExecIf($["${HANGUPCAUSE}"=“28”]?Playback(invalid_number)) ; INVALID NUMBER
exten => _X.,n,ExecIf($["${HANGUPCAUSE}"=“19”]?Playback(invalid_number)) ; DILUAR AREA
exten => _X.,n,Hangup()
exten => h,1,ExecIf($[ “${ANSWEREDTIME}” = “” ]?Set(ANSWEREDTIME=0))
exten => h,n,Set(AST_UPDATE_DURATION()=${ANSWEREDTIME},${CALLERID(ani)})
exten => h,n,Set(CDR(hangupside)=${HANGUP_SIDE})
exten => h,n,NoOp(DIAL_STATUS ${CHANNEL(peername)} ${DIALSTATUS}, HANGUP_CAUSE=${HANGUPCAUSE} AND HANGUP_SIDE=${HANGUP_SIDE})
exten => h,n,ExecIf($["${HANGUPCAUSE}"=“21”]?Playback(busy_number)) ; CALL REJECTED
exten => h,n,ExecIf($["${HANGUPCAUSE}"=“17”]?Playback(busy_number)) ; BUSY
exten => h,n,ExecIf($["${HANGUPCAUSE}"=“1”]?Playback(invalid_number)) ; INVALID NUMBER
exten => h,n,ExecIf($["${HANGUPCAUSE}"=“28”]?Playback(invalid_number)) ; INVALID NUMBER
exten => h,n,ExecIf($["${HANGUPCAUSE}"=“19”]?Playback(invalid_number)) ; DILUAR AREA
exten => h,n,Hangup()
Contoh : hangupcause code 28 -> INVALID number
Ketika saya call nomor tertentu dan saya dapat response 28 dari SBC operator TSEL maka saya play voice (invalidnumber), seharusnya status yang didapat di asterisk A adalah 28 namun yang tercatat di asterisk A HANGUPCAUSE 16 (ANSWER) -> mungkin playvoice di sisi aserisk B dianggap sebagai answer.
Pertanyaannya, bagaimana mengirimkan status (28) ke sisi asterisk A + notifikasi /playvoice yang saya buat?
Thanks