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

如何在ask函数中指定重定向功能?含循环执行场景需求

Solution: Loop Execution & Redirects with ask Function Intents

Absolutely, you can pull this off by setting up targeted intents in your ask function—let’s walk through a practical, step-by-step solution that fits exactly what you’re asking for. The core idea is using intents to track user choices, maintain session state, and create a loop that only breaks when the user says "stop".

1. Define Your Core Intents

First, map out two critical intents to handle the flow:

  • SelectOperationIntent: Triggers when the user picks an operation to run (e.g., "start inventory check" or "run daily report").
  • StopIntent: Listens for the user’s "stop" command to break the loop. You can use a platform’s built-in stop intent (like Alexa’s AMAZON.StopIntent) or create a custom one.

2. Track Active Operations with Session State

You’ll need to store the user’s selected operation in session attributes. This lets your ask function remember which task to repeat, instead of bouncing back to the main menu every time.

3. Full Implementation Example

Here’s a Python example built for Alexa’s ASK framework, but the logic translates directly to any tool using an ask-style function:

def lambda_handler(event, context):
    # Grab session attributes to track the active operation
    session_attrs = event.get('session', {}).get('attributes', {})
    intent_name = event['request']['intent']['name']

    # Launch: Show main menu
    if intent_name == 'LaunchRequest':
        return build_response(
            session_attrs,
            build_speechlet_response(
                "Main Menu",
                "Which operation would you like to run? Try 'start inventory check' or 'run daily report'.",
                "Go ahead and tell me which operation to start."
            )
        )

    # User selects an operation to run
    elif intent_name == 'SelectOperationIntent':
        selected_op = event['request']['intent']['slots']['Operation']['value']
        # Save the active operation to session state
        session_attrs['active_operation'] = selected_op
        # Run the operation once, then prompt to continue or stop
        op_result = run_selected_operation(selected_op)
        return build_response(
            session_attrs,
            build_speechlet_response(
                f"Running {selected_op}",
                f"{op_result}. Want to run it again? Say 'yes' to keep going or 'stop' to end.",
                "You can say 'yes' to repeat or 'stop' to exit."
            )
        )

    # User wants to continue the loop
    elif intent_name == 'AMAZON.YesIntent':
        active_op = session_attrs.get('active_operation')
        if not active_op:
            return build_response(session_attrs, build_speechlet_response("Oops", "No active operation found—please select one first.", ""))
        # Re-run the stored operation
        op_result = run_selected_operation(active_op)
        return build_response(
            session_attrs,
            build_speechlet_response(
                f"Re-running {active_op}",
                f"{op_result}. Want to do this again? Say 'yes' or 'stop'.",
                "Just say 'yes' to keep going or 'stop' to quit."
            )
        )

    # User says "stop" to end the loop
    elif intent_name == 'AMAZON.StopIntent' or intent_name == 'StopIntent':
        return build_response(
            session_attrs,
            build_speechlet_response(
                "Operation Stopped",
                "Got it—stopping the current operation. Back to the main menu!",
                ""
            )
        )

# Helper: Run the actual operation logic
def run_selected_operation(operation):
    if operation == 'inventory check':
        return "Inventory check done: 15 items in stock"
    elif operation == 'daily report':
        return "Daily report ready: $450 in sales today"
    else:
        return "Hmm, I don't recognize that operation"

# Boilerplate helper functions to build ASK responses
def build_speechlet_response(title, output, reprompt_text):
    return {
        'outputSpeech': {'type': 'PlainText', 'text': output},
        'card': {'type': 'Simple', 'title': f"Session - {title}", 'content': output},
        'reprompt': {'outputSpeech': {'type': 'PlainText', 'text': reprompt_text}},
        'shouldEndSession': False
    }

def build_response(session_attributes, speechlet_response):
    return {
        'version': '1.0',
        'sessionAttributes': session_attributes,
        'response': speechlet_response
    }

4. Key Logic Breakdown

  • Session State: The active_operation attribute keeps track of what the user wants to repeat, so the skill doesn’t forget between turns.
  • Loop Redirect: After each operation run, we prompt the user to continue. If they say "yes", the YesIntent handler re-runs the same task and prompts again—creating the loop.
  • Stop Trigger: The StopIntent breaks the loop, clears the active operation state, and sends the user back to the main menu.

5. Customization Tips

  • If you’re using a different framework (like Dialogflow or Watson), adapt the intent matching and session state code to fit that platform’s ask function structure—the core logic stays identical.
  • Add an AMAZON.NoIntent handler if you want to let users switch operations instead of stopping entirely (just clear the active_operation and send them back to the main menu).

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:26:38