In Chapter 15, The Automated Attendant we created a simple bit of dialplan to record prompts. It was fairly limited in that it only recorded one filename, and thus for each prompt the file needed to be copied before a new prompt could be recorded. Here, we expand upon that to create a complete menu for recording prompts:
[prompts] exten => s,1,Answer exten => s,n,Set(step1count=0) ; Initialize counters ; If we get no response after 3 times, we stop asking same => n(beginning),GotoIf($[${step1count} > 2]?end) same => n,Read(which,prompt-instructions,3) same => n,Set(step1count=$[${step1count} + 1]) ; All prompts must be 3 digits in length same => n,GotoIf($[${LEN(${which})} < 3]?beginning) same => n,Set(step1count=0) ; We have a successful response, so reset our counters same => n,Set(step2count=0) same => n(step2),Set(step2count=$[${step2count} + 1]) same => n,GotoIf($[${step2count} > 2]?beginning) ; No response after 3 tries ; If the file doesn't exist, then don't ask whether to play it same => n,GotoIf($[${STAT(f,${which}.wav)} = 0]?recordonly) same => n,Background(prompt-tolisten) same => n(recordonly),Background(prompt-torecord) same => n,WaitExten(10) ; Wait 10 seconds for a response same => n,Goto(step2) exten => 1,1,Set(step2count=0) same => n,Background(${which}) same => n,Goto(s,step2) exten => 2,1,Set(step2count=0) same => n,Playback(prompt-waitforbeep) same => n,Record(${CHANNEL(uniqueid)}.wav) same => n(listen),Playback(${CHANNEL(uniqueid)}) same => n,Set(step3count=0) same => n,Read(saveornot,prompt-1tolisten-2tosave-3todiscard,1) same => n,GotoIf($["${saveornot}" = "1"]?listen) same => n,GotoIf($["${saveornot}" = "2"]?saveit) same => n,System(rm -f /var/lib/asterisk/sounds/${CHANNEL(uniqueid)}.wav) same => n,Goto(s,beginning) same => n(saveit),System(mv -f ${CHANNEL(uniqueid)}.wav ${which}.wav) same => n,Playback(prompt-saved) same => n,Goto(s,beginning)
In this system, the name of the prompt is no longer descriptive, but rather it is a number. This means that you can record a far greater variety of prompts using the same mechanism, but the tradeoff is that your prompts will no longer have descriptive names.