Watson Virtual Assistant Specifics

Watson Specifics

BVR uses the Watson Assistant v2 API. To use a Watson Virtual Assistant with VXML, a VIRTUAL_ASSISTANT_WATSON Call Feature must be attached to the application. Information on the required parameters can be found in Parameters for VIRTUAL_ASSISTANT_WATSON Call Feature

Watson Assistant with VXML must be used with a separate STT Call Feature attached, such as STT_WATSON.

All examples in this document are using the Object format for the grammar rather than the JSON plaintext inline grammar format.

Dynamic Configuration

The Watson Assistant integration allows an application developer using VoiceXML to dynamically override the following Watson Assistant configuration parameters:
  • Service URL: Using the service_url_override
  • Assistant ID: Using the assistant_id_override
  • API key: Using the api_key_override
These are modified by setting values in the request object used to generate the Virtual Assistant grammar as in the following example:
        
         <assign name="virtual_assistant_request_structure.options" expr="new Object()"/>
         <assign name="virtual_assistant_request_structure.options.service_url_override" expr="'https://api.eu-gb.assistant.watson.cloud.ibm.com/instances/vwxyz'"/>
         <assign name="virtual_assistant_request_structure.options.assistant_id_override" expr="'wzyx'"/>
         <assign name="virtual_assistant_request_structure.options.api_key_override" expr="'1234'"/>
      
         <grammar mode="voice" version="1.0" type="application/x-blueworx-virtual-assistant+json" srcexpr="objectToJson(virtual_assistant_request_structure)"/>
        
        
Any values set prior to using the grammar will override those entries configured for the call feature.

Custom Variables (Inbound and Outbound)

In Watson, the custom_vars structure is sent as as part of the user_defined context structure to the Watson session. It is a simple freeform key/value pair map.

As an example for how to set these, if using the object format:


    <assign name="virtual_assistant_request_structure.custom_vars.custom_number" expr="2"/>
    <assign name="virtual_assistant_request_structure.custom_vars.custom_text" expr="'donuts'"/>
    <assign name="virtual_assistant_request_structure.custom_vars.custom_boolean" expr="true"/>

         

To get custom variables from the response, simply pull them from the shadow variable's interpretation, for example to log a custom variable my_variable:


    <log>My variable is <value expr="virtual_assistant_field$.interpretation.custom_vars.my_variable"/></log>

         

It is also possible to set/get the context in Watson using the virtual_assistant_request_structure.context structure. This will behave exactly the same as the custom_vars structure. Note that if both are supplied, they will be merged.

Example Watson response structure (JSON representation)

This is an example of the data structure format you can expect to see from a Watson response:


    {
        "transcript": "yes ",
        "messages": [
            {
                "text": "OK. Transferring..."
            }
        ],
        "message_text": "OK. Transferring...",
        "intents": [
            {
                "intent": "General_Greetings",
                "confidence": 0.22254178
            }
        ],
        "intent": {
            "intent": "General_Greetings",
            "confidence": 0.22254178
        },
        "entities": [
            {
                "entity": "reply",
                "value": "yes",
                "confidence": 1.0,
                "location": [
                    0,
                    3
                ]
            }
        ],
        "entity": {
            "entity": "reply",
            "value": "yes",
            "confidence": 1.0,
            "location": [
                0,
                3
            ]
        },
        "context": {
            "custom_boolean": "true",
            "custom_number": "2",
            "bw_no_match": false,
            "custom_text": "my text",
            "bw_action": "transfer"
        },
        "custom_vars": {
            "custom_boolean": "true",
            "custom_number": "2",
            "bw_no_match": false,
            "custom_text": "my text",
            "bw_action": "transfer"
        },
        "raw_json": "[raw json response from Watson Assistant goes here]"
    }

         

Configuring the Watson Assistant HTTP Request Timeout

It is possible to use the com.blueworx.watson_assistant.request_timeout property to configure the Watson Assistant HTTP request timeout (the amount of time BVR will wait before considering an HTTP request to the Watson Assistant API a failure). The value is a human readable time (e.g. "20 seconds"). If no time unit is specified, seconds will be used.


    <property name="com.blueworx.watson_assistant.request_timeout" value="5 seconds"/>