Intake scam reports with AI chat
Workflow purpose
This guide demonstrates how to use Proto's platform to capture a scam report from a citizen in a single conversation – reporter details, what happened, and supporting evidence – with the same LLM-assisted extraction pattern used for complaint intake. Scam reports are often filed in a hurry, in mixed language, and with an incomplete first message. Structuring the intake this way still gets a complete case record without forcing the reporter through a rigid form.
Who can benefit from this guide:
- Central banks and financial regulators operating a national anti-scam centre
- Consumer protection agencies handling scam and fraud reports
- Telecom and payments providers with their own scam reporting channel
- Anti-fraud teams who need consistent, structured case data for triage
Intake a scam report
This workflow captures reporter details, scam specifics, and supporting evidence, then files a structured case with the anti-scam centre's system. See how to intake scam reports with AI chat.
1. Create a trigger
Purpose: Start the flow when a citizen wants to report a scam.
- Navigate to the Actions tab in the AI agent settings.
- Click “+ Add Trigger” and select the Message Received trigger type.
- Name the trigger “Scam Report Intake”.
- Add a description such as “Triggers if user requests to report a scam, fraud, or suspicious transaction.”
2. Opening message
Purpose: Set expectations before collecting sensitive details.
- Add a Send message action: “I’m sorry this happened. I can help you file a scam report and pass it to our anti-scam team. I’ll need a few details.”
3. LLM action – scam report details
Purpose: Extract the scam’s key facts from the reporter’s own words, asking only for what’s missing.
- Add a Set chat variable action:
description = _user_input. - Add an LLM action named
Scam report details. Input:{description}. Output variable:scam_details. - Success branch: first action is Set chat variable –
scam_details = _.json_parse(scam_details). - System prompt fields:
scam_type(string|null),channel(string|null, e.g. SMS, call, app),amount_lost(string|null),date(string|null),suspect_details(string|null),follow_up_question(string).
4. Branch – ask for missing details
Purpose: Loop back for the single most important missing field rather than asking everything at once.
- Add a Branch action. Condition:
scam_details["follow_up_question"] != "none" and scam_details["follow_up_question"] != none. - If true: Send message with
{scam_details["follow_up_question"]}, Surveymore_details(Text, skip: On), then a Branch (back check) – “back” in_.lower(more_details)→ jump to menu – followed by Set chat variabledescription = {description} {more_details}, then jump back to the LLM action.
5. Survey – supporting attachments
Purpose: Collect evidence that strengthens the case without requiring it to proceed.
- Add a Survey action titled
Scam evidence. - Field
attachments– Attachment(s) – Upload screenshots, messages, or transaction records that support your report. – Required: Off.
6. File the case
Purpose: Send the structured case to the anti-scam centre’s system for triage.
- Add a Send API request action with the collected fields, mapped to the anti-scam case system. Store the response as
case_id.
7. Confirmation message
Purpose: Give the reporter a reference and set expectations for next steps.
- Add a Send message action: “Your report has been filed. Reference: {case_id}. Our team will review it and reach out if we need anything else.”
8. Test the flow
Purpose: Confirm the extraction loop and evidence upload both behave under real conditions.
- Submit a vague first message (“I got scammed”) and confirm the follow-up loop asks for the missing fields one at a time.
- Submit a report with no attachments and confirm it still files successfully.
- Submit in a mixed-language message and confirm the extraction still returns a usable
scam_type.