Receiving notifications from VoiceAI Connect to Lex V2 bot

VoiceAI Connect sends notifications to Lex V2 bot in the format of: <EventName>

You can create an intent that uses the <EventName> as the sample utterance in order to activate an intent.

Event data is currently not supported for AWS.

Let's create an intent with the event name and <EventName> as the sample utterance. We will use noUserInput in this demo.

In this demo, the lambda sends a confirmation message with the event name.

import json
import re
import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)


def get_session_attributes(intent_request):
    return intent_request['sessionState'].get('sessionAttributes', {})

def get_intent(intent_request):
    return intent_request['sessionState'].get('intent', {})

def confirm(intent_request, event_name):
    intent = get_intent(intent_request)
    intent['confirmationState'] = 'Confirmed'
    intent['state'] = 'Fulfilled'
    return_message =  {
        'sessionState': {
            'sessionAttributes': get_session_attributes(intent_request),
            'dialogAction': {
                'type': 'Close'
            },
            'intent': intent
        },
        'sessionId': intent_request['sessionId'],
        'requestAttributes': intent_request.get('requestAttributes'),
        'messages': [{
            'contentType': 'PlainText',
            'content': 'Lambda received event ' + event_name
        }]
    }
    logger.debug(f'sending confirm intent: {json.dumps(return_message)}')

    return return_message


def delegate(intent_request):
    logger.debug(f'delegating back to bot. request: ${json.dumps(intent_request)}')
    return {
        'sessionState': {
            'dialogAction': {
                'type': 'Delegate'
                },
            'intent': intent_request['sessionState']['intent'],
            'sessionAttributes': get_session_attributes(intent_request)
        },
        'sessionId': intent_request['sessionId'],
        'requestAttributes': intent_request.get('requestAttributes')
    }

# --- Intents ---


def dispatch(intent_request):
    user_input = intent_request['inputTranscript']
    match = re.match(r'^<(\w+)>$', user_input)

    if match:
        event_name = match[1]
        return confirm(intent_request, event_name)

    return delegate(intent_request)

# --- Main handler ---
def lambda_handler(event, context):
    logger.debug('event.bot.name={}'.format(event['bot']['name']))
    logger.debug(json.dumps(event))
    return dispatch(event)

Use a lambda for processing notification

Activate the Fulfillment section of the intent and fill the messages for success and failure.