You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求教:如何完成Lex Bot多卡支付预订流程后续步骤搭建

Lex Bot多卡支付流程实现方案

1. 核心Intent与Slots设计

创建MultiCardPayment主Intent,定义以下Slots:

  • UseMultipleCards:布尔类型,用于确认用户是否使用多张卡(选项:是/否)
  • CardCount:数值类型,限制输入≥2的整数,收集需使用的卡数量n
  • 单卡信息Slots(循环复用):
    • CardNumber:文本类型,添加Luhn算法格式校验
    • ExpiryDate:文本类型,校验格式为MM/YY且未过期
    • AllocatedAmount:数值类型,校验大于0且累计金额不超过订单总金额
    • InvoiceEmail:文本类型,校验邮箱格式
    • SeparateInvoice:布尔类型,确认是否分开发票给代理和客人

2. 对话流程配置

多卡支付分支触发

当UseMultipleCards被用户确认为“是”时,触发后续流程:

  • 先引导用户输入CardCount,完成后初始化会话变量:currentCardIndex(当前收集卡的序号,初始为1)、cardDetailsList(存储所有卡信息的数组,初始为空)

循环收集卡信息

通过Dialog Code Hook(Lambda函数)控制循环逻辑:

  • 若currentCardIndex ≤ CardCount,依次触发单卡Slots的收集:先问卡号,再有效期,接着金额分配,然后发票邮箱,最后是否分开发票
  • 每完成一张卡的所有Slots收集,将信息存入cardDetailsList,重置单卡Slots,currentCardIndex加1
  • 当currentCardIndex > CardCount时,结束循环,触发订单确认环节

3. Dialog Code Hook核心逻辑(Python示例)

def lambda_handler(event, context):
    session_attrs = event.get('sessionAttributes', {})
    current_intent = event['currentIntent']
    slots = current_intent['slots']

    # 初始化会话变量
    if 'currentCardIndex' not in session_attrs:
        session_attrs['currentCardIndex'] = 1
        session_attrs['cardDetailsList'] = []

    current_idx = int(session_attrs['currentCardIndex'])
    card_count = int(slots.get('CardCount', 0))

    if current_idx <= card_count:
        required_slots = ['CardNumber', 'ExpiryDate', 'AllocatedAmount', 'InvoiceEmail', 'SeparateInvoice']
        missing_slots = [s for s in required_slots if slots.get(s) is None]

        if missing_slots:
            # 引导用户补充缺失的Slot
            return {
                'sessionAttributes': session_attrs,
                'dialogAction': {
                    'type': 'ElicitSlot',
                    'intentName': current_intent['name'],
                    'slots': slots,
                    'slotToElicit': missing_slots[0],
                    'message': {'contentType': 'PlainText', 'content': f"请提供第{current_idx}张卡的{missing_slots[0]}"}
                }
            }
        else:
            # 存储当前卡信息
            card_info = {
                'cardNumber': slots['CardNumber'],
                'expiryDate': slots['ExpiryDate'],
                'allocatedAmount': slots['AllocatedAmount'],
                'invoiceEmail': slots['InvoiceEmail'],
                'separateInvoice': slots['SeparateInvoice']
            }
            session_attrs['cardDetailsList'].append(card_info)

            # 重置单卡Slots,准备下一轮收集
            for s in required_slots:
                slots[s] = None
            session_attrs['currentCardIndex'] = current_idx + 1

            if session_attrs['currentCardIndex'] <= card_count:
                # 开始下一张卡的收集
                return {
                    'sessionAttributes': session_attrs,
                    'dialogAction': {
                        'type': 'ElicitSlot',
                        'intentName': current_intent['name'],
                        'slots': slots,
                        'slotToElicit': 'CardNumber',
                        'message': {'contentType': 'PlainText', 'content': f"请提供第{session_attrs['currentCardIndex']}张卡的卡号"}
                    }
                }
            else:
                # 所有卡信息收集完成,请求确认
                return {
                    'sessionAttributes': session_attrs,
                    'dialogAction': {
                        'type': 'ConfirmIntent',
                        'intentName': current_intent['name'],
                        'slots': slots,
                        'message': {'contentType': 'PlainText', 'content': "已完成所有卡的信息收集,是否确认提交?"}
                    }
                }
    else:
        # 进入支付与发票处理的Fulfillment流程
        return {
            'sessionAttributes': session_attrs,
            'dialogAction': {
                'type': 'Close',
                'fulfillmentState': 'Fulfilled',
                'message': {'contentType': 'PlainText', 'content': "多卡支付信息已提交,我们将尽快处理您的订单"}
            }
        }

4. 测试与验证

  • 在Lex控制台测试窗口模拟对话,验证循环收集逻辑是否正常触发
  • 测试Slot校验规则(卡号格式、有效期、金额累计)是否生效
  • 检查会话变量的存储与更新是否准确

内容的提问来源于stack exchange,提问作者Raja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:21:28