You can do this using WaitExten [1]:
[callme] exten => s,1,Answer exten => s,n,Playback(demo/${FILENAME1}) exten => s,n,WaitExten(3) exten => s,n,Goto(s,1) exten => 1,1,Noop(user pressed 1) exten => 1,n,Goto(however-shall-go-to-when-pressed-1) exten => 2,1,Noop(user pressed 2) exten => 2,n,Goto(however-shall-go-to-when-pressed-2)
Using extension templates [2]:
[callme] exten => s,1,Answer exten => s,n,Playback(demo/${FILENAME1}) exten => s,n,WaitExten(3) exten => s,n,Goto(s,1) exten => X,1,Noop(user pressed ${EXTEN}) exten => X,n,Goto(however-shall-go-to-when-pressed-${EXTEN})
here is exactly what you requested:
[callme] exten => s,1,Answer exten => s,n,Playback(demo/${FILENAME1}) exten => s,n,WaitExten(3) exten => s,n,NoOp(going on - no dtmf detectd) exten => X,1,Noop(user pressed ${EXTEN}) exten => X,n,Goto(s,1)
also pay attention to the background application of the asterisk [3].
LITERATURE:
[1] http://www.voip-info.org/wiki/view/Asterisk+cmd+WaitExten
[2] http://www.voip-info.org/wiki/view/Asterisk+Dialplan+Patterns
[3] http://www.voip-info.org/wiki/view/Asterisk+cmd+BackGround