That would look like this:

First, we set the command phrase to be spoken - since you'd like your timer to act upon a 1 minute or 30 second max time, you can make this part of the command phrase. I have found that it helps to account for the word form of a number under ten, but also just to cover all bases, 30 as thirty, too.
Next, we want some UX feedback that the timer has started, so we can use a 'Say Something with Text to Speech' action, with a phrase along the lines of "Countdown timer started" ... or whatever you want -- could be replaced with an audio cue from a sound file if you prefer... something to tell the user (after they speak this command) that it was recognized and so they know a countdown has started.
Next, we grab what was said using the text token "{CMDSEGMENT:1}" which returns the value of the portion within the square brackets at position 1 (where "Start" is position zero). You can learn more about this text token in the VA Manual - press F1 when VA is open/in focus to open the VA Manual, starting around page 164 -- and this token around page 167.
This will always evaluate to "1" or "one" or "30" or "thirty". Next, we compare this value to text - checking if it equals "1" or "one" and setting our temporary integer variable (prefaced with a "~" so it is destroyed when this command ends) to 60 for a 60 second countdown.... else if it does not equal "1" or "one", set that integer variable to 30 (seconds).
Next, we want to being a "for" loop which will take our "~maxTime" integer variable as the starting number, with "6" as the ending number, and the only instruction in the loop to pause for 1 second.

Finally, we add yet another "for" loop to handle 5 to 1, so these can be spoken, and we do this by adding another temporary integer variable to keep track of the current value during this loop "~timerIndex" - the actions inside this loop should be a 'Say Something with Text to Speech' action, using the text token to turn our integer variable into a word it can speak via the {INT} token: {INT:~timerIndex} -- and lastly, another 1 second pause to ensure this loop iterates only once per second.

One very last thing we should do is check the box (if not already checked) to ensure that other commands can execute while this one is running, as we don't want to lock out all other voice commands for the next 30-60 seconds, of course.

If you want to add an alert, it would be any action inserted at the very bottom of this command, as that action will not be reached or executed until the timer loop(s) above it are completed. This could be yet another text-to-speech phrase, an audio clip that plays, or even a looping audio clip and a "Wait for Spoken Response" action that lets the user say something which will end the looping audio clip (such as an alarm sound) with a phrase like, "Stop timer" or whatever you want.
______
Note that these variable names "~maxTime" and "~timerIndex" could be anything, and I chose to use camelCase with descriptive names which help us easily discern the purpose/function/meaning of these variables. Variables are just containers for values of a specific type which we can refer to by a word such as "timerIndex" ... and the preface of "~" means the command can discard both of these once it completes, no need to retain these in memory after the command is done - you get the idea.
The concept of variable scope (such as our use of "~") is detailed in that chapter of the VA Manual starting around page 250 with the chapter title: "
Advanced Variable Control (Scope and Events)"
While this command example as I have laid out for you touches on some advanced concepts, they're not completely out in space -- learn more about these things in the following posts:Control flow (If, Else, ElseIf, Loop, Jump) basicsVariables and tokens summed up