Report lost or stolen cards with AI chat
Workflow purpose
This guide shows how to build a lost or stolen card reporting workflow using Proto’s AI agent. The workflow handles a distressed customer with immediate empathy, verifies their identity conversationally using an
Who can benefit from this guide:
- Retail and digital banking fraud and card-services teams
- Customer support managers reducing IVR wait times for urgent card cases
- Fintech card issuers offering 24/7 self-service blocking
- IT teams deploying conversational AI across WhatsApp, web, and mobile banking channels
- Any financial institution that needs to block a card the moment a customer reports loss or theft
Step 1: Create the trigger
Set up a new workflow to capture lost and stolen card reports.
- Navigate to the Actions tab in the AI agent settings.
- Click + New workflow and select Message received as the trigger type.
- Set Name to:
Lost or Stolen Card - Set Description to: Triggers when a customer reports a lost, stolen, or compromised card.
- Add training phrases: My card is lost, I lost my card, My card was stolen, Block my card, Someone stole my card, I can’t find my debit card, Cancel my card immediately.

Step 2: Send an empathetic opening message
Reassure a likely-distressed customer and explain what happens next before collecting any details.
- Add a
Send Message action under the trigger.
Step 3: Verify the customer’s identity
Confirm the customer’s identity conversationally before exposing any account details or triggering a card block.
Capture the message
- Add a
Set Chat Variable after theSend Message . Setidentity_inputto_user_input.
Configure the LLM action
- Add an
LLM Action . Set Model toGPT-4o, Input text to{identity_input}, and Output variable toidentity_details.
You are an identity verification assistant for a banking lost or stolen card service.
Extract the following fields from the customer’s message:
full_name (string or null) – full name as it appears on the card
date_of_birth (string or null) – customer’s date of birth
phone (string or null) – registered phone number
id_number (string or null) – national ID or CNIC number
follow_up_question (string) – one conversational question targeting
the most important missing required field
Rules:
1. Extract only what is explicitly stated. Do not infer.
2. full_name is highest priority. If missing, ask for it first.
3. If full_name is present but date_of_birth is missing, ask for it.
4. If full_name and date_of_birth are present but phone is missing, ask for it.
5. If all three are present but id_number is missing, ask for it.
6. If all required fields are present, set follow_up_question to “none”.
7. follow_up_question pattern:
[Empathy if customer is distressed] + [What is needed]
+ [What the customer should do next].
Examples:
“I completely understand – let’s get this sorted quickly.
Could you share your full name as it appears on the card?”
“Got it. Could you also share your date of birth so I can
verify your identity?”
8. The follow_up_question must be in {language}.
9. Do not add extra fields.
10. Output must be a valid JSON object only. No explanations.
Do NOT wrap in markdown or code blocks.
Do NOT include ```json or ``` anywhere in the response.
Inside the Success branch
- Add a
Set Chat Variable as the first action – setidentity_detailsto_.json_parse(identity_details). - Add an
If/Else with condition:identity_details["follow_up_question"] != "none" and identity_details["follow_up_question"] != none
- Add a
Send Message :{identity_details["follow_up_question"]} - Add an
Ask Survey – Variable:more_identity, Type: Text, Skip: On. - Add a
Set Chat Variable – setidentity_inputto{identity_input} {more_identity}. - Add a
Jump to Trigger/Action back to the LLM action.
Add four
| Variable | Chat script |
| — | — |
| full_name | identity_details[“full_name”] |
| date_of_birth | identity_details[“date_of_birth”] |
| phone | identity_details[“phone”] |
| id_number | identity_details[“id_number”] |
- Add a
Send API Request to validate identity against the bank’s customer system. Pass{full_name},{date_of_birth},{phone},{id_number}. Set Output variable toverification_response. - Add a
Set Chat Variable – setverification_responseto_.json_parse(verification_response). - Add an
If/Else : ifverification_response["status"] == "verified", continue to Step 4. Otherwise route toHuman Handoff .
Inside the Error and Timeout branches
- Add a
Jump to Trigger/Action back to the LLM action to re-run.
Step 4: Identify the affected card
Retrieve the customer’s active cards and confirm which one needs to be blocked.
- Add a
Send API Request to fetch active cards using{verification_response["customer_id"]}. Set Output variable tocustomer_cards. - Add a
Set Chat Variable – setcustomer_cardsto_.json_parse(customer_cards). - Add a
Send Message with quick reply options from{customer_cards}, each showing card type and last 4 digits (e.g. Visa Debit •••• 4421). Add aSet Chat Variable immediately after – setselected_cardto_user_input. - Add a
Send Message : What happened to the card? Add quick replies:Lost Stolen Compromised / suspicious activity Damaged - Add a
Set Chat Variable – setincident_typeto_user_input.
Step 5: Block the card via API
Trigger an immediate card block so the card cannot be used for further transactions.
- Add a
Send API Request action. Set Method toPOSTand URL to your card block endpoint. - Set the request body to:
{"customer_id": "{verification_response[customer_id]}", "card": "{selected_card}", "reason": "{incident_type}"} - Set Output variable to
block_response. Add aSet Chat Variable – setblock_responseto_.json_parse(block_response). - Add an
If/Else : ifblock_response["status"] == "success", continue to Step 6. Otherwise route toHuman Handoff .
Step 6: Create a ticket and confirm
Log the card block as a support ticket for follow-up and send the customer a clear confirmation.
- Add a
Create Ticket action. Set Subject to Card block: {full_name} – {selected_card}. Set Tags tocard-blockand{incident_type}. - Add a
Send Message with the confirmation:
- Add a
Send Message with quick replies:Order replacement card Review recent transactions I’m done - Add a
Set Chat Variable – setnext_stepto_user_input.
Step 7: Test the flow
Validate the full lost or stolen card sequence using the AI agent tester before going live.
- Open the AI agent tester panel on the right side of the workflow builder.
- Type My card was stolen – confirm the empathetic opening message appears.
- Provide only a name – confirm the LLM asks for date of birth next.
- Provide all identity details in one message – confirm the API verification fires and the card selection appears.
- Select a card and incident type – confirm the block API fires and the ticket is created.
- Confirm the confirmation message displays the correct
{block_response["reference"]}and{selected_card}. - Simulate a failed identity verification – confirm the flow routes to
Human Handoff with an empathetic message. - Simulate a failed card block – confirm the flow routes to
Human Handoff immediately.