I wanted to create a post about the Alexa Voicemonkey Skill - https://voicemonkey.io/
In a nutshell, this skill creates a virtual doorbell button that is “pressed” by making a web request. In this scenerio, the web request is made in a webcore piston, so unless there’s some other method to do that, using webcore is necessary.
This skill can be used for two main reasons:
1- Trigger Alexa routines reliably. At the time of this writing, and for weeks now, the current Samsung Alexa skill is not reliable at triggering events on the Alexa side.
2- A hopefully temporary replacement for primarily making announcements/getting Alexa to speak in the now killed Echo Speaks, until there is a light version.
There are three main ways I’ve found the App to be used:
1- Trigger anything that can be triggered in an Alexa routine by making a simple GET request in Webcore.
2- Similar to 1, trigger a routine that makes an announcement to one or more Echo’s
3- Most complex, speak custom text, written in the GET request itself, to a single Echo. This text can be a webcore variable. Multiple GET requests can allow multiple Echo’s to speak, but they will speak in sequential order, not in unison. That can be funny or annoying depending on how you look at it.
Instructions to setup the skill are here voicemonkey.io . From there, you create “monkeys”. Each Monkey will make a separate smarthome virtual “doorbell” device, that can trigger a routine. For each Monkey created, you should get a notification shortly after in the Alexa app a new device was found. I’ll go through instructions for the three scenarios:
1- Most simple is create a routine to do any random thing with a get request. On Alexa, you will create a routine. Under “when this happens”, select “smarthome”. Then select the name of the monkey you created. It will say in the Alexa app “when monkey name is pressed”. Hit save. Then under action, select what you want to happen. Play traffic, turn another unrelated smartthings device on or off, etc.
2- For announcements, create the routine the same way, but under “action”, scroll down to “messaging” Then select “send announcement”. Type your announcement, IE “the backdoor was unlocked”. On the next screen, select “all devices”, or specify which Echo’s to announce to.
For option 1 and 2, you need to make a web request in Webcore, but leave the “notification” part of the URL off. For action, select “location”, then from the next drop down, select “make a webrequest”. You will do a webrequest, and put in a URL value. Your URL value will be - https://api-use.voicemonkey.io/trigger?access_token=YourAccessToken&secret_token=YourSecretToken&monkey=Your-Monkey-Name
Replace YourAccessToken and YourSecretToken with the values from Voicemonkey. Replace Your-Monkey-Name with the name of your Monkey. Note spaces are not used, dashes are in their place. Stop after your monkey name, you don’t need anything after.
For type of request, do “GET”. Do not select any other values under that.
Option 3 is the trickiest, but allows you to speak custom text to individual Echo’s without needing to make a routine for each thing you want the Echo to say. The limitation here is it will only make one echo “speak”. This is different from an announcement.
For this to work, create a routine in the device you want to speak that opens the Voice Monkey Skill like the screenshot below. My advice is to make a separate “speak” monkey for each different Echo you want to talk:
Then, in webcore, setup whatever trigger you want, and as action do “make a webrequest” using location. You will do a GET request like this. Replace the access token and secret token with the one generated in your own VoiceMonkey Skill (my own is blacked out of course). Also replace “announce-door” with the name of the “monkey” you created in your voice monkey skill (more info on what that means in the Voicemonkey documentation at the link above). Put whatever you want her to say in the quotes after urlEncode, including quote breaks and any variable in your piston you want her to say. The request must be coded as a URL, and Webcore’s urlEncode function will remove spaces and format it for you. Any number in that request/variable must be spelled out, and having numbers in the request will throw it off. My example tells the weather using a global variable “@forcast”. If you want this to speak on multiple echo’s, make a separate web request for each one. I also added a 2 second delay between each to make sure they all go through. The message will go off sequentially from one echo to the next, and won’t be in unison with this option.
There is an option to do notifications, which is the yellow light ring. I personally use the “notify me” skill for that, which works better. More info on the “notify me” skill here - www.notifymyecho.com
This skill is a good workaround. Be aware the developers have advised that it is free for now, but they may begin charging in the future. Hopefully using this is a temporary workaround until Echo Speaks comes out with a light version, and the Alexa skill is finally fixed to reliably work.