Synopsis
讀å–çâ€Â¨Ã¦Ë†Â¶Ã¨Â¼Â¸Ã¥â€¦Â¥Ã§Å¡â€žÃ¦â€¢Â¸Ã¥Â-(DTMF)按éµ。
語法æÂÂè¿°
Asterisk 1.0:
Read(variable[|filename][|maxdigits][|option])
Asterisk 1.2:
Read(variable[|filename][|maxdigits][|option][|attempts][|timeout])
Asterisk 1.4以上:
Read(variable[,filename][,maxdigits][,option][,attempts][,timeout])
Read(變é‡ÂÃ¥ÂÂ稱[,è¦Âæ’¥æâ€Â¾Ã§Å¡â€žÃ¦ÂÂ示音æªâ€][,最大數åÂ-][,option][,attempts][,時間é™Â制])
讀å–çâ€Â¨Ã¦Ë†Â¶Ã¨Â¼Â¸Ã¥â€¦Â¥Ã§Å¡â€žÃ¤Â¸â‚¬Ã¥â‚¬â€¹Ã¤Â»Â¥ # çµÂ尾的數åÂ-Ã¥Â-符串到指定的變é‡Â。
- variable: variable是å˜儲çâ€Â¨Ã¦Ë†Â¶Ã¦Å’‰éµ的地方.
- filename: 讀å–按éµ之å‰Âè¦Âæ’Âæâ€Â¾Ã§Å¡â€žÃ¦â€“‡ä»¶.
- maxdigits: 接æâ€Â¶Ã¦Å’‰éµ的最大個數. ç•¶æâ€Â¶Ã¥Ë†Â°maxdigits個按éµ後就åÂϾ¢讀å–按éµ (ä¸Â需è¦Âçâ€Â¨Ã¦Ë†Â¶Ã¦Å’‰éµ ‘#’ ). 默èªÂ是 0 – ç„¡é™Â制 – ç‰待çâ€Â¨Ã¦Ë†Â¶Ã¦Å’‰ ‘#’ éµ. 任何低於0的值表示0,最大值是255.
- option: å¯çâ€Â¨Ã©Â¸é …有3個(sin), s(skip):表示如果線路沒摘機就立å³è¿â€Ã¥â€ºÅ¾Ã¯Â¼Å’i(indication):æâ€Â¹Ã¦â€™Â¥Ã¦â€Â¾Ã¤Â¸â‚¬Ã¨Â²ç°¡çŸÂçš„æÂÂ示音,n(noanswer):表示線路沒起來也讀按éµ。
- attempts: 如果大於1, 在沒有çâ€Â¨Ã¦Ë†Â¶Ã¦Å’‰éµ的情æ³Â下會多次é‡Â複執行。
- timeout: 超時時長(秒). 如果大於 0, 這個值就會覆蓋é Âè¨Â的超時時長.
Read 在失æ•-或報錯的時候會斷開。
Example
;下é¢的例åÂÂ使çâ€Â¨ Read å’Œ SayDigits 來讀å–3ä½Âçâ€Â¨Ã¦Ë†Â¶Ã¦Å’‰éµ,然後說出來。
Asterisk 1.2:
~np~exten => s,1,Gotoif($[ "${LEN(${extensao})}" < "3"]?3:100)~/np~
exten => s,n,NoOp(Executing - ${extensao} - )
exten => s,n,Read(digito||1)
exten => s,n,SayDigits(${digito})
exten => s,n,Set(extensao=${extensao}${digito})
exten => s,n,GoTo(s,1)
exten => s,100,GoTo(from-pstn,s,1)
exten => h,1,hangup()
Asterisk 1.4, 1.6:
~np~exten => s,1(start),Gotoif($[ "${LEN(${extensao})}" < "3"]?collect:pstn)~/np~
exten => s,n,NoOp(Executing - ${extensao} - )
exten => s,n(collect),Read(digito,,1)
exten => s,n,SayDigits(${digito})
exten => s,n,Set(extensao=${extensao}${digito})
exten => s,n,GoTo(start)
exten => s,n(pstn),GoTo(from-pstn,s,1)
exten => h,1,hangup()
; The following example is a work-around that mostly works at catching # as part of the dial string.
;Written in 1.8. Compatibility unknown.
exten => s,1,Set(wait=2)
exten => s,n(begin),Playback("please-dial-now")
exten => s,n,Set(gottries=0)
exten => s,n,Set(got=)
exten => s,n(getmore),Set(timer=${EPOCH})
exten => s,n,Read(get,"silence/1",,,,${wait})
exten => s,n,Set(timer=$[${EPOCH}-${timer}])
exten => s,n,GotoIf($[${timer}==$[${wait}+1]]?gotnothing:gotsomething)
;I double-check the length of get below in case the user happened to enter
;digits, but did so in such a manner that the epoch math thinks nothing
;was entered. I suppose the same could happen with pound, but because
;pressing pound ends the read (and thus shortens the epoch), It is much
;less likely.
exten => s,n(gotnothing),Set(gottries=$[${gottries}+1]
exten => s,n,GotoIf($[${LEN(${get})} == 0]?reallynothing:gotdigit)
exten => s,n(reallynothing),GotoIf($[${gottries}>1]?done:getmore)
exten => s,n(gotsomething),Set(gottries=0)
exten => s,n,GotoIf($[${LEN(${get})} == 0]?gotpound:gotdigit)
exten => s,n(gotpound),Set(got=${got}#)
exten => s,n,Goto(getmore)
exten => s,n(gotdigit),Set(got=${got}${get})
exten => s,n,Set(get=)
exten => s,n,Goto(getmore)
exten => s,n(done),SayDigits(${got})
exten => s,n,Goto(begin)
; Doubt we get here:
exten => i,1,Playback("vm-goodbye")
exten => i,n,Hangup()
; here either:
exten => u,1,Playback("vm-goodbye")
exten => u,n,Hangup()
註
豎線符號 ( | ) 在 Asterisk 1.6版本ä¸Â已經æâ€Â¹Ã§â€šÂºÃ©â‚¬-號( , )。
在Asterisk 1.4,豎線號和é€-號都å¯以çâ€Â¨Ã¯Â¼Å’é©çâ€Â¨Ã©â‚¬-號方便以後的å‡級。
‘#’ 是輸入çµÂæÂŸéµ. Read()ä¸Â會接æâ€Â¶Ã¤Âºâ€¢Ã¨â„¢Å¸Ã©Âµã€‚
è¦告:
在Asterisk 1.4: “filename” Ã¥ÂÆ’數ä¸Â接åÂ-串接 (æ¯â€Ã¥Â¦â€šÃ¯Â¼Å¡file1&file2&file…)
但å¯çâ€Â¨Ã¦â€“¼ Asterisk 1.8.4 以上的版本
Asterisk | Applications | Functions | Variables | Expressions | Asterisk FAQ