exten => _X.,1,NoOp(Starting dial plan)
same => n,Set(CHANNEL(language)=en)
same => n,Read(userInput,${REC1},1,n,1,30)
same => n,Set(CDR(userfield)=${userInput})
same => n(hangup),Hangup()
My instinctive answer for anything the least bit complicated is “use a script”. Have it monitor call starts (via AMI or ARI); start a timer, then issue a Hangup on that channel after the desired interval.