AWS Lex + Lambda
发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,AWS LexCreate Bots --> Try a sample {OrderFlowers}La Lambda initialization and validation --> 添加定义的
千家信息网最后更新 2024年11月27日AWS Lex + Lambda
AWS Lex
Create Bots --> Try a sample {OrderFlowers}
La Lambda initialization and validation --> 添加定义的 Lambda function
Slots --> 段值
SlotType--> define values of Slots
Slots --> FlowerType Prompt --> Prompt response cards --> URL: Global S3 https://s3.cn-north-1.amazonaws.com.cn/sides-share/AWS+INNOVATE+2018/builders_workshop/Flower.jpeg Button title/value for each button.
修改后,"Save Intent"保存,click "Build" to test as below --
Publish to publish Slack/Facebook Channel.
AWS Lambda
Create Function --> Blueprints (filter "lex") --> Choose "lex-order-flowers-python" --> Role: LexRoleOrderFlowers
Function Code as below :
"""This sample demonstrates an implementation of the Lex Code Hook Interfacein order to serve a sample bot which manages orders for flowers.Bot, Intent, and Slot models which are compatible with this sample can be found in the Lex Consoleas part of the 'OrderFlowers' template.For instructions on how to set up and test this bot, as well as additional samples,visit the Lex Getting Started documentation http://docs.aws.amazon.com/lex/latest/dg/getting-started.html."""import mathimport dateutil.parserimport datetimeimport timeimport osimport loggingimport boto3import jsonlogger = logging.getLogger()logger.setLevel(logging.DEBUG)""" --- Helpers to build responses which match the structure of the necessary dialog actions --- """def get_slots(intent_request): return intent_request['currentIntent']['slots']def elicit_slot(session_attributes, intent_name, slots, slot_to_elicit, message): return { 'sessionAttributes': session_attributes, 'dialogAction': { 'type': 'ElicitSlot', 'intentName': intent_name, 'slots': slots, 'slotToElicit': slot_to_elicit, 'message': message } }def close(session_attributes, fulfillment_state, message): response = { 'sessionAttributes': session_attributes, 'dialogAction': { 'type': 'Close', 'fulfillmentState': fulfillment_state, 'message': message } } return responsedef delegate(session_attributes, slots): return { 'sessionAttributes': session_attributes, 'dialogAction': { 'type': 'Delegate', 'slots': slots } }""" --- Helper Functions --- """def parse_int(n): try: return int(n) except ValueError: return float('nan')def build_validation_result(is_valid, violated_slot, message_content): if message_content is None: return { "isValid": is_valid, "violatedSlot": violated_slot, } return { 'isValid': is_valid, 'violatedSlot': violated_slot, 'message': {'contentType': 'PlainText', 'content': message_content} }def isvalid_date(date): try: dateutil.parser.parse(date) return True except ValueError: return Falsedef validate_order_flowers(flower_type, date, pickup_time, number): flower_types = ['lilies', 'roses', 'tulips'] if flower_type is not None and flower_type.lower() not in flower_types: return build_validation_result(False, 'FlowerType', 'We do not have {}, would you like a different type of flower? ' 'Our most popular flowers are roses'.format(flower_type)) if date is not None: if not isvalid_date(date): return build_validation_result(False, 'PickupDate', 'I did not understand that, what date would you like to pick the flowers up?') elif datetime.datetime.strptime(date, '%Y-%m-%d').date() <= datetime.date.today(): return build_validation_result(False, 'PickupDate', 'You can pick up the flowers from tomorrow onwards. What day would you like to pick them up?') if pickup_time is not None: if len(pickup_time) != 5: # Not a valid time; use a prompt defined on the build-time model. return build_validation_result(False, 'PickupTime', None) hour, minute = pickup_time.split(':') hour = parse_int(hour) minute = parse_int(minute) if math.isnan(hour) or math.isnan(minute): # Not a valid time; use a prompt defined on the build-time model. return build_validation_result(False, 'PickupTime', None) if hour < 10 or hour > 16: # Outside of business hours return build_validation_result(False, 'PickupTime', 'Our business hours are from ten a m. to four p m. Can you specify a time during this range?') if number is not None: num = parse_int(number) if num < 0 or num > 5: return build_validation_result(False,'FlowerNumber', 'Please input a number between 1~5. We can offer 1~5 at once.') return build_validation_result(True, None, None)""" --- Functions that control the bot's behavior --- """def order_flowers(intent_request): """ Performs dialog management and fulfillment for ordering flowers. Beyond fulfillment, the implementation of this intent demonstrates the use of the elicitSlot dialog action in slot validation and re-prompting. """ flower_type = get_slots(intent_request)["FlowerType"] date = get_slots(intent_request)["PickupDate"] pickup_time = get_slots(intent_request)["PickupTime"] number = get_slots(intent_request)["FlowerNumber"] source = intent_request['invocationSource'] if source == 'DialogCodeHook': # Perform basic validation on the supplied input slots. # Use the elicitSlot dialog action to re-prompt for the first violation detected. slots = get_slots(intent_request) validation_result = validate_order_flowers(flower_type, date, pickup_time, number) if not validation_result['isValid']: slots[validation_result['violatedSlot']] = None return elicit_slot(intent_request['sessionAttributes'], intent_request['currentIntent']['name'], slots, validation_result['violatedSlot'], validation_result['message']) # Pass the price of the flowers back through session attributes to be used in various prompts defined # on the bot model. output_session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {} if number is not None: output_session_attributes['Price'] = int(number) * 5 # Elegant pricing model return delegate(output_session_attributes, get_slots(intent_request)) sns = boto3.client('sns') snsmessage = {'content': 'Thanks, your order for {} of {} has been placed and will be ready for pickup by {} on {}'.format(number, flower_type, pickup_time, date)} #snsmessage = {"test":"message test"} sns.publish( TopicArn='YOUR_Topic_ARN', Message=json.dumps(snsmessage) ) # Order the flowers, and rely on the goodbye message of the bot to define the message to the end user. # In a real bot, this would likely involve a call to a backend service. return close(intent_request['sessionAttributes'], 'Fulfilled', {'contentType': 'PlainText', 'OrderConfirm': 'Thanks, your order for {} of {} has been placed and will be ready for pickup by {} on {}'.format(number, flower_type, pickup_time, date)})""" --- 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 == 'OrderFlowers': return order_flowers(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. """ # By default, treat the user request as coming from the America/New_York time zone. os.environ['TZ'] = 'America/New_York' time.tzset() logger.debug('event.bot.name={}'.format(event['bot']['name'])) return dispatch(event)
m.
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
方舟手机版服务器怎么续租吗
信息系统与数据库技术大作业
100元我的世界服务器组装
引领网络安全教育
服务器smb共享
说网络技术不好的经典语录
oracle数据库多少钱
顺义区运营网络技术软件
软件开发7个阶段
数据库进行标准化
oracle数据库证书考试
云原生数据库新闻
电脑服务器没有显示怎么关机
周诗扬 网络安全
牧之网络技术有限公司招聘
网络安全渗透测试平台软件
linq 取一条数据库
互联网科技和人民群众生活融合
将引用属性的值存入数据库
软件开发工具历年试题
手机使用服务器资源管理器
网络安全工作 意见
宁波北仑浪潮融合构架服务器
网络安全伴我行内容资料
涉密软件开发运营维护
无线对讲系统服务器
幕墙汇宝软件开发人叫什么
论文查重数据库有影响吗
火车头采集表格里数据库
lol对局服务器是啥