Wizard of Oz tool

A Wizard of Oz experiment is a research experiment in which subjects interact with a computer system that subjects believe to be autonomous, but which is actually being operated or partially operated by an unseen human being

WoZ example.

Description

As you see on the attached screenshot, the WoZ tool displays a screen full of buttons, where each button corresponds to a character response. A WoZ operator (wizard) pushes a button and triggers the response that can either be a playback of an audio recording, a video clip, or an animation sequence handled Smartbody and rendering engine. The WoZ tool does not do any media playback itself. It relies on an external component to handle the media. From the technical point, each button has an associated vhmsg that is triggered when the button is pushed. For example, it can be a vrExpress message with a video clip file name supplied as a parameter. We have a separate VideoPlayer tool that listens for vrExpress messages, parses the message content, finds the video file with the right name, and plays it on the screen.

The buttons are arranged into rows, where every row has a title. The rows are arranged into screens, where every screen has a title. You can specify buttons that trigger transitions between the screens. The same button can appear in multiple rows and the same row can appear on multiple screens. 

VHMSG Interface

TBD

Agent Dialogue Interface

TBD

URL Arguments

You can pass WoZ parameters via the query arguments in the URL. Here are some of the arguments:

url
specifies the spreadsheet to open. It can be either Google sheet URL or a URL to an Excel file. Please note that in the latter case most likely the file should have the correct CORS permissions defined.
generateScreenNavigation
true or false whether to automatically generate an extra row for switching between individual screens. The default value is true.
showChatTranscript
true or false whether to show the chat transcript panel. The default value is true for connector=ADConnector and false in other cases.
connector
the connection protocol to use. Required. Accepted values are VHMSG, ConsoleConnector, and ADConnector
VHMSG
VHMSG connection. The additional arguments are:
address
the address of the machine running an ActiveMQ server. The default value is localhost.
scope
the VHMSG scope. The default value is DEFAULT_SCOPE.
secure
true or false token to specify whether the connection is secure. The default value is true.
ConsoleConnector
Print the button tooltip on the JavaScript console in the browser.
ADConnector
The Agent Dialogue protocol defined over gRPC. The additional arguments are:
serverURL
the url of the proxy for the AD server access. Required. No default value.
userID
the ID of the WoZ user. Required. No default value.
conversationID
the ID of the conversation or the chat room ID. Required. No default value.

Search Capabilities

To help an operator to locate relevant buttons WoZ has... TBD

Data Format

The data for the wizard comes from several tables (as in database tables) and can be created as an Excel or Google Sheet spreadsheet. Each table should be defined as separate sheet in the spreadsheet. The following sheets can be defined. 3 of the sheets are required and 1 is optional.

Sheets

Sheets

Multiple WoZ datasets are allowed per a single Excel document. Each dataset must have its own button, row, and screen sheets. The row and button sheets are mandatory.

The name of the sheets are important. For example, "foo.buttons" specifies the button sheet for dataset "foo".

A sheet that uses the plain "buttons", "rows", or "screens" name will be merged with the corresponding sheet from each dataset. For example, "foo.buttons" will be merged with the content of the sheet "buttons".

Button Sheet

A sheet with the name "buttons" specifies all the buttons in the interface. Each row corresponds to a single button and the columns map to button's attributes. The first row contains the column headers. The following column (and the corresponding headers) are required:

The following attributes are optional:

Button example.

The following screenshot shows a regular button definition

Regular button example.

The following screenshot shows how transition buttons can be defined in the sheet.

Transition button example.

VHMSG Message Format

If the "woz.vhmsg" column is omitted, WoZ will send a vrExpress populated with id and tooltip. If columns "woz.sender" and "woz.addressee" are present, WoZ will use those values to fill the appropriate parts of the message. If the columns are omitted WoZ uses values "visitor" and "all". The message content can be specified explicitly or it can be defined as a template using the values in other columns as variables. For example, the default behavior can be reproduced by using

vrExpress $$sender$$ $$addressee$$ $$sender$$$$messageCount$$ <?xml version="1.0" encoding="UTF-8" standalone="no" ?><act><participant id="$$XML(sender)$$" role="actor" /><fml><turn start="take" end="give" /><affect type="neutral" target="addressee"></affect><culture type="neutral"></culture><personality type="neutral"></personality></fml> <bml><speech id="sp1" ref="$$XML(id)$$" type="application/ssml+xml"> $$XML(tooltip)$$ </speech></bml></act>

Here the content of column "woz.sender" will be the second token in the message and so on. Note that the variable name omits "woz."from the column title.

Note that in case when the message contains XML code, you need to make the content of the variables is encoded appropriately when inserted into the message. We introduce XML(•) to indicate those cases. For example, $$XML(sender)$$ will take the content of woz.sender column and encode is as valid XML (e.g., replace "<" with "&lt;") before inserting it into the message.

Interactive Text Entry

A button can trigger a dialog box with popup buttons and text fields for the operator to fill. For example, if the tooltip column contains a token that looks like ##token##, when the operator clicks on the button, she will be presented with a dialog box, with the text of the tooltip where each ##token## is replaced by a text entry field. After entering information into the field, the user can press the Send button on the dialog to send the modified text in the vhmsg. In the following example the tooltip column contains "Let's start. ##input##".

Example of the text entry dialog.

The token expression in the ##token## expression serves as the variable name that can be used in message generation. (See the previous section.) You can define as many variables as you want, the variable names are case-sensitive. If the variable name matches a column name in the button sheet, the entered value will overwrite the value in the column.

The ##token## expression results in a text entry field added to the dialog. If you want to limit the set of possible values, you can instruct WoZ to generate popup menu instead of the text entry. In this case use an expression like this: ##token;value1;value2;value3##. Here the variable with the name "token" can take one of the 3 values: value1, value2, or value3. And the dialog box will include a popup menu with 3 items.

If you want the items in the menu be different from the actual values assigned to the variable, use both the value and the item text separated by colon ":". For example, ##token;value1:Item 1;value2:Another Item; value3:And one more item##. The menu will have three items: "Item 1", "Another Item", and "And one more item."

Automatic generation of transition buttons

You can specify the buttons for transitions between screens by hand as described in the previous section, but sometimes it would be better to generate them automatically from the content of the screens sheet (see the Screen Sheet section for the details). You can do something like this:

J K (woz.id) L (woz.label) M (woz.color) O (woz.transition)
2900 =ROW()        
2901 =FLOOR((ROW()-J$2900-1)/2,1)+1 =IF(J2901<=COUNTA(screens!$1:$1),
CONCATENATE("transition.",N2901),"")
=INDEX(screens!$1:$2,2,J2901) color.tab =INDEX(screens!$1:$2,1,J2901)
2902 =FLOOR((ROW()-J$2900-1)/2,1)+1 =IF(J2902<=COUNTA(screens!$1:$1),
CONCATENATE("transition.",N2902,".selected"),"")
=INDEX(screens!$1:$2,2,J2902) color.tab.selected =INDEX(screens!$1:$2,1,J2902)

Repeat the last two lines for every screen on the screen sheet (copy the last two rows and keep pasting them until the cells in the woz.id column starts showing up empty. Make sure you adjust the column and row references appropriately.

You should get something like this:

Creating screen transition buttons by hand example.

Row Sheet

A sheet with the name "rows" specifies all the button rows in the interface. Each Excel table row corresponds to a single row in the interface. The first column contains the row ID, the second column contains the row title, the rest of the columns contain the row's buttons, one button ID per cell. The order of the buttons in the WoZ interface will be the same as the order of the buttons in the Excel table. Note that the first row in the table is an actual row in the WoZ interface. It specifies buttons that transition between different screens. Also note the different number of buttons in each row. For example, row 11 contains just one button, while row 3 references at least three buttons.

Row sheet example.

Automatic generation of tab rows

You can specify the tab row (the row with buttons that transition between screens) by hand as described in the previous section, but sometimes it would be better to generate them automatically from the content of the screens sheet (see the Screen Sheet section for the details). You can do something like this:

  A B C
230   =ROW()  
231 =IF(ROW()-$B$230<=COUNTA(screens!$1:$1),
CONCATENATE("tab.",INDEX(screens!$1:$1,1,ROW()-$B$230)),"")
Screens =IF(OR(ROW()-$B$230>COUNTA(screens!$1:$1),COLUMN()-2>COUNTA(screens!$1:$1)),"",
CONCATENATE("transition.",INDEX(screens!$1:$1,1,COLUMN()-2),IF(ROW()-$B$230=COLUMN()-2,".selected","")))

You can have the same tab row for every screen. You can also elect to build tab rows that are different for individual screens. For example, you may want to highlight the button corresponding to the current screen with special color. That what the table illustrates. This will generate a tab row for every screen. 

Suppose N is the number of screens, you need to copy the row (231) N times. And, then copy the column (C) N times. You should get something like this:

Another row sheet example.

Screen Sheet

A sheet with the name "screens" specifies all the button screens in the interface. Each Excel table column corresponds to a single screen in the interface. The first row in the column contains the screen ID, the second row contains the screen title, the rest of the rows contain the screen's rows, one row ID per cell. The order of the rows in the WoZ interface will be the same as the order of the rows in the Excel table. Note how the first row (id "tab.row") is the same across multiple screens.

Screen sheet example.

Automatic generation of tab rows

If you are generating the tab rows using Excel formulas as described in the previous section, you can insert the tab row into the screen sheet as shown in the table.

  A B
1 Intro Pre-War
2 Intro Pre-War
3 =CONCATENATE("tab.",A1) =CONCATENATE("tab.",B1)

Color Sheet

A sheet with the name "colors" specifies all the button colors in the interface. Each Excel table row corresponds to a single color in the interface. The first column contains the color ID, the other three columns specify the color component values either as RGB or HSB tuples. The first row in the table contains the column headers. The attached screenshot shows the colors defined by the hue, saturation, and brightness values. If you want to use RGB, put "red", "green", and "blue" in the corresponding column titles.

Some suggested to use Excel cell styles and background color to specify the colors for the buttons. Due to the extremely archaic way Excel stores and handles colors (don't ask) extracting the color component values that would result in colors that look anywhere close to the cell background proved extremely difficult, nigh impossible.

Color sheet example.