It appears that there is no way to mute the microphone by voice at this time, as you suggest; this Reddit thread confirms this, but unfortunately I couldn't find an official Amazon source for it. The mute button on the top of the device seems to be the only way at the present time.
Disappointingly, developing a skill to mute the microphones also seems to be impossible. Your skill must return a JSON response in this format, with the following keys:
version
- The Alexa API version
sessionAttributes
- Persistable key-value pairs (for custom data to save in the session)
response
outputSpeech
- The words you want Alexa to say
card
- Data for a 'card' in the Alexa app to display
reprompt
- The text to use if the user doesn't respond appropriately and needs re-prompting
directives
- Device-level actions that are executed using an interface in the Alexa API
shouldEndSession
- Ends the current chat session with your skill
It looks like any response which controls the device is a directive
. As of January 2017, the current interfaces supported by Alexa are listed here:
AudioPlayer
PlaybackController
Neither of these provide any interface with the microphone, so it appears you're out of luck.
Why?
I suspect Amazon deliberately do not support this yet because Alexa can run on many different devices; some are push-to-talk, some are tap-to-talk (e.g. the Amazon Tap), and some are wake word initiated ('always listening'). To add support for muting the microphone would tie Alexa much closer in to the wake word initiated devices, which could be problematic.
In addition, supporting mute-by-voice could lead to frustrating accidents where Alexa thought you said "mute the microphone", forcing you to get up and unmute it, because it now can't respond to you after being muted.