[Android Apps and Games] brandall:
Tasker Plugin

Please note - This thread will be updated specifically for Saiy very soon - I've been busy! I hope you can follow along, replacing utter! with Saiy in the mean time..... Do make sure you download the correct XML files at the bottom of this thread.

Tasker Plugin Tutorial

At present, the plugin has three main features:

1) Speak

2) Notify

3) Pass variable values.

Please download and import the attached utter! example project, to make it easier to follow the processes explained below. As with all tasks you haven’t created yourself, it’s a good idea to review the content within the XML on the sdcard, prior to importing them, as they could contain rouge actions. On this occasion, it might be ok to trust me though :)

From the Tasker preferences, make sure beginner mode is not ticked and under the miscellaneous tab, tick ‘Allow External Access’ so the two applications can communicate.

If you don’t see the imported utter! project, on the main Tasker screen, slide your finger downwards from the top of the screen (there is a faint white downwards pointing arrow), which will reveal the submenus.

Make sure Tasker is turned on!

Speak & Pass Variable Values

The Profile smsReceivedU is activated when a text is received from anyone and triggers the task smsU. Click smsU to open it.

You’ll firstly see a variable set action that is creating the voice content you want to pass to utter! The content consists of the message details. The second action is the Plugin configuration – tap on the action and then click edit.

In the text box, you’ll see the content that you are going to ask utter! to speak. It can consist of just plain text, just variables, or a combination of both. For the sake of example, I used both. Save out of the plugin and go back to the task. Press the ‘play button’ at the bottom right of the task to ‘test’ it.

At this point, Tasker may alert you that it will need to start monitoring your messages in order for the task to work correctly, accept the confirmation. When you press play, you hopefully will hear the information, including the populated variable content announced by utter! If you don’t, you may need to send yourself a quick text to populate the variables.

* Note: occasionally, the activation of monitors (such as incoming texts) can be delayed. Saving all the way out of Tasker and opening it again seems to resolve this. Send yourself another text afterwards to confirm.

When the profile smsReceivedU is ticked as active, your text messages will be read aloud when they are received. However, there may be situations when you want to choose whether you hear them or not.

Head to the profile smsRecievedU – Interactive and open the triggered task smsU – Interactive. In action 1, you’ll see the content you are going to request utter! says and it contains a question about whether or not you want to hear the received message (the trigger for this task). Action #2 sets the message data that utter! will announce, if you confirm that you’d like to hear it. Click on the plugin action (#3) and press edit – You’ll see that the box ‘Send Value Only’ is ticked and the variable %smsdata (the message data) is entered to be sent to utter!

* Note: There is currently no way for an external application to access the values of your Tasker variables (without a hack) due to privacy issues, as some of the data within the variables may be personal. As this is the case, you’ll need to select ‘Send Value Only’ in any tasks where you would like utter! to be made aware of a change in a variable value. These values are stored separately and securely by utter!

Heading back to the task, action #4 is another plugin action, this time requesting that utter! immediately speaks the content of %tosay (configured in action #1). You’ll see that the ‘Start Listening’ box is ticked as you’ll need to answer the question!

Now, when utter! announces ‘You’ve received a text message. Would you like me to read it?’ you’ll be aware that replying ‘yes, please read the message that is contained in the tasker variable I sent to you’ will result in utter! not knowing what on Earth you’re talking about! We need to configure a custom phrase within utter! to handle this.

Heading into utter! select the customisation tab and click ‘Custom Phrase’. This is going to be handling our reply when utter! asks the question above. Enter ‘please read it’ in the phrase field (top box) and in the response box (bottom box!) %smsdata (case sensitive) and press ‘Create’.

The result is, that when utter! asks ‘You’ve received a text message. Would you like me to read it?’, you can respond with ‘please read it’ and the custom phrase handler will detect the response is a variable name. The variable name will be substituted in the response for the current variable value (you sent it to utter! in action #3 of the task smsU – Interactive) and hey presto, your text message will be read out!

For completeness, you may wish to add another custom phrase, where the phrase is ‘not right now thanks’ and the response is ‘okay, well let me know when you do’ – just to give it a little more personalisation… a bit nicer than just saying ‘cancel’.

There are two more tasks in the project - drivingOnU and drivingOffU. These task turn the profile smsRecievedU – Interactive, on and off. You may wish to activate the Tasker profile 'hands-free' whilst driving, so from the Customisation Tab, click on 'Create Commands' and select 'Run Tasker Task'. Click on 'drivingOnU' and when prompted by utter! set the command phrase to something like 'I'm driving', the success words to 'drive safely' and the fail words to 'something went wrong!'

Whenever you wish to activate the profile and have your messages announced, you can say 'I'm driving' and the profile will become active. Do the same again for the 'drivingOffU' task and you'll be able to toggle them by voice whenever you need to.

To summarise, any variable values you want to keep utter! updated on so you can request the current value by voice, pass them in a ‘Send Value Only’ plugin action. Don’t forget, in the ‘Speak’ plugin action, utter! accepts plain text and variables in any order or combination.

Notify

Stipulating the interaction level of utter! (speak uninvited whenever / speak uninvited if I’m not at work etc) is coming soon, but in the mean time there may be variable content within your tasks that you’d like to be made aware of, but only when you’re good and ready. For this reason, you can connect the speech data to a notification, that when clicked, will begin to announce the content. This is handled by utter! rather than the Tasker ‘notification click’ action.

The profile unlockedU is a quick example of how this works. The trigger is the device being unlocked (so you can easily test it out) and it fires the task infoU. The task infoU places some random device info into the variable %anyname in action #1. The utter! plugin action #2 sets the content for the notification (%anyname) and the box is ticked to confirm the Notification action.

Press the ‘play’ button and you should see a notification appear. Clicking on it will begin the speech of the content placed in %anyname.

To avoid cluttering the notification bar, currently only one notification is available. If another is activated, it will replace the content of the first one. This will eventually be configurable.

Tasker, Llama & External App Support

Users have requested to be able to switch the application off and on under certain circumstances and so I've exposed the ability to do this and other functions using intents from external applications. The applications must allow you to add 'data extras' to intents and you can now do the following:

1 - Start the voice recognition

2 - Start the permanent voice recognition

3 - Stop the permanent voice recognition

4 - Turn utter! off completely

5 - Flush the memory utter! is using

6 - Toggle driving mode

7 - Toggle caller announcement

8 - Toggle notification announcement

I've created a separate Activity to do this. Normally you have to list the package name, followed by the class name.

Package name - com.brandall.nutter

Class name - com.brandall.nutter.EIH

To stop any rogue applications firing off commands to utter! you need to go to the Power User Settings and create an alphanumeric password. That password will need to be entered in the data extras of the intent, to confirm you have 'authorised' it.

Here is a screenshot of how it would look in Tasker. The command:2 refers to the permanent recognition above. If you put command:4 it would turn utter! off. The password:mypassword123 is the password of mypassword123 you set in the Power User Settings.

Each action must be labelled and immediately followed by a colon: before the content.

command:

password:

I hope the above made sense?!

------------------------------------------------------------------------------------------------------------------------------------------------------

NEW! - ADVANCED TASKER RECEIVER PROJECT

Note: I've been informed that this project does not import correctly on the Gingerbread version of Tasker. I'm investigating.

Before you read any further, this is for the more advanced Tasker users, who want to handle voice commands with their own custom Tasks. If you're new to Tasker, perhaps return to this post at a later date and get started with the project detailed above!

For those that are still with me, import the Tasker Receiver Project below and then you'll need to tick the Send to Tasker box in the Try Again options (in the utter! Advanced Settings). Once you've done that, all unknown commands will be broadcast to Tasker to handle and the project you've imported will resolve them, or not....

First thing to remember is that if utter! knows to send the voice data to Tasker, then it will not speak a response, such as 'I didn't understand that request' or something equally as irritating! It'll be up to you to handle any responses in Tasker - including when the voice data doesn't trigger a Task you've created.

In the project there is a Master Command List, which at present contains the three commands, sausages, beans and chips. These are populated into an Array, which for all intents and purposes, is a list..... Every time Tasker receives voice data from utter! it will refresh this list, to make sure it picks up on any new commands you've created.

It then gets a bit tricky - The voice data is also in the form of an Array, so the Task 'Voice Data Receiver' loops through each item in the voice data Array, whilst also looping (in a nested loop) through each item in your command Array. Basic pattern matching takes place on each command, so that if the voice data in any place contains the word 'sausages', it will trigger a match. This is using the Tasker regex of *sausages*. You can of course use more advanced regex should you wish.

If a match is made, the Task looks for the index of the command number and that will then trigger the corresponding Task called 'CommandAction#', where the number at the end is populated by the index variable in the loop. The voice data is handed to this Task as a parameter, so you can do further analysis to look for more matching words, should you wish. An example would be a trigger command of 'display' and a further check for 'off' or 'on' in the voice data. The CommandAction# Tasks finish by performing an action (of course!) and providing the vocal response to utter!

If no match is made, the negative voice response is set at the bottom of the Voice Data Receiver Task.

There are notes placed inside the Tasks, which I hope will help to make the process a little more clear for you, as I confused myself writing the above :cyclops:

If you get stuck, there are plenty of users and threads here on XDA that will come to your rescue. Check my signature below for a couple of links.