Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
144 lines (100 sloc) 3.79 KB
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
def close(session_attributes, fulfillment_state, message):
response = {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'Close',
'fulfillmentState': fulfillment_state,
'message': message
}
}
return response
""" --- Functions that control the bot's behavior --- """
def get_balance(intent_request):
logger.debug('in get_balance')
session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {}
slots = intent_request['currentIntent']['slots']
account_type = slots['AccountType']
balance = 0
if account_type.lower() == 'checking':
balance = 5000
if account_type.lower() == 'saving':
balance = 10000
session_attributes['currentIntent'] = intent_request['currentIntent']['name']
return close(
session_attributes,
'Fulfilled',
{
'contentType': 'PlainText',
'content': 'You account balance is ${}.'.format(balance)
}
)
def get_loan_balance(intent_request):
logger.debug('in get_loan_balance')
session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {}
slots = intent_request['currentIntent']['slots']
loan_type = slots['LoanType']
balance = 0
rate = 0
if loan_type.lower() == 'car':
balance = 35000
rate = 0.05
if loan_type.lower() == 'home':
balance = 1200000
rate = 0.035
session_attributes['currentIntent'] = intent_request['currentIntent']['name']
session_attributes['loan_type'] = loan_type
return close(
session_attributes,
'Fulfilled',
{
'contentType': 'PlainText',
'content': "You {} balance is ${}, and your current rate is {:.2%}. You might qualify for lower rates, please type 'more loan info' to hear more?".format(loan_type, balance, rate)
}
)
def get_loan_offer(intent_request):
logger.debug('in get_loan_balance')
session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {}
slots = intent_request['currentIntent']['slots']
loan_type = slots['LoanType']
if loan_type is None and session_attributes['currentIntent'] == 'GetLoanDetail':
loan_type = session_attributes['loan_type']
rate = 0
if loan_type.lower() == 'car':
rate = 0.05
if loan_type.lower() == 'home':
rate = 0.035
session_attributes['currentIntent'] = intent_request['currentIntent']['name']
return close(
session_attributes,
'Fulfilled',
{
'contentType': 'PlainText',
'content': 'The current rate for {} loan is {:.2%}. You are qualified for new load rate, call xxxxx to contact with your financial adviser'.format(loan_type.lower(), rate)
}
)
# --- Intents ---
def dispatch(intent_request):
"""
Called when the user specifies an intent for this bot.
"""
logger.debug('dispatch userId={}, intentName={}'.format(intent_request['userId'], intent_request['currentIntent']['name']))
intent_name = intent_request['currentIntent']['name']
# Dispatch to your bot's intent handlers
if intent_name == 'GetAccountDetail':
return get_balance(intent_request)
elif intent_name == 'GetLoanDetail':
return get_loan_balance(intent_request)
elif intent_name == 'GetLoanProducts':
return get_loan_offer(intent_request)
raise Exception('Intent with name ' + intent_name + ' not supported')
# --- Main handler ---
def lambda_handler(event, context):
"""
Route the incoming request based on intent.
The JSON body of the request is provided in the event slot.
"""
logger.debug('event.bot.name={}'.format(event['bot']['name']))
return dispatch(event)
You can’t perform that action at this time.