
Ethan Collins
Pattern Recognition Specialist

移民案件状态数据提取可以减少法律团队、流动服务提供商和申请人的重复检查,但必须围绕同意、隐私和人工监督设计。正确的架构不会给予AI代理对政府门户的无限制访问。相反,一个安全的服务接收授权的案件标识符,通过经批准的渠道检索最小状态数据,记录来源证据,检测有意义的变化,并将结构化事件发送到AI工作流。CAPTCHA处理仅是允许的浏览器会话的恢复步骤,绝不能作为授权的替代品。本指南提出了适用于监督法律操作的状态监控、收据号保护、页面解析、CapSolver集成、警报分类、审计日志和升级规则的实用设计。
一个案件监控服务应回答一个具体的问题:“这个授权案件的状态是否发生了变化?”它不应搜索无关人员,推断受保护的特征,或从简短的门户消息中得出法律结论。
USCIS在线案件状态工具使用一个由三个字母和十个数字组成的13个字符的唯一收据编号。即使它不是密码,也应将该标识符视为敏感的操作数据。 USCIS案件状态指南解释了申请人如何检查申请、请愿或请求。
在收集之前,需要:
CapSolver AI和自动化常见问题解答在定义模型应决定什么与确定性工具应执行什么时很有帮助。
仅存储工作流所需的内容。一个有用记录包括伪匿名的内部事项ID、受保护的收据编号引用、标准化状态、原始状态文本、来源和时间戳。
from dataclasses import dataclass
from datetime import datetime, timezone
@dataclass
class ImmigrationCaseStatus:
matter_id: str
receipt_number_ref: str
status_code: str
status_title: str
status_message: str
source_url: str
checked_at: str
source_updated_at: str | None = None
def utc_now() -> str:
return datetime.now(timezone.utc).isoformat()
不要在模型提示、日志、分析事件或错误跟踪器中放置完整的收据编号。在秘密服务中存储加密值,并仅向检索工作者发送短期引用。
从官方通知、在线账户访问和经批准的数据馈送开始。浏览器自动化应作为最后的结构化选项,而不是默认选项。
| 收集渠道 | 推荐使用 | 隐私暴露 | 操作可靠性 |
|---|---|---|---|
| 官方账户通知 | 申请人驱动的警报 | 低 | 高 |
| 经批准的API或案件管理集成 | 授权投资组合监控 | 低到中 | 高 |
| 用户提供的导出或通知 | 一次性证据摄入 | 中 | 高 |
| 授权浏览器状态检查 | 有限的后备方案 | 中 | 中 |
| 无控制的爬取 | 不推荐 | 高 | 低 |
官方USCIS状态检查说明应作为主要操作参考。对于时间上下文,USCIS处理时间工具提供单独的估计;不要将估计视为案件特定的承诺。
在启动浏览器会话之前验证格式。这可以减少不必要的请求,并防止格式错误的输入到达门户。
import re
RECEIPT_PATTERN = re.compile(r"^[A-Z]{3}[0-9]{10}$")
def normalize_receipt_number(value: str) -> str:
normalized = value.replace("-", "").replace(" ", "").upper()
if not RECEIPT_PATTERN.fullmatch(normalized):
raise ValueError("收据编号必须包含三个字母和十个数字")
return normalized
向用户返回通用的验证错误。避免在堆栈跟踪或支持工单中回显完整的收据编号。
浏览器工作程序应与语言模型隔离。它接收授权的标识符引用,检索加密值,执行检查,并发出清理后的结果。
from playwright.async_api import Page
CASE_STATUS_URL = "https://egov.uscis.gov/"
async def fetch_status_page(page: Page, receipt_number: str) -> dict:
await page.goto(CASE_STATUS_URL, wait_until="domcontentloaded")
# 选择器必须针对当前授权页面进行验证。
await page.get_by_label("Enter a Receipt Number").fill(receipt_number)
await page.get_by_role("button", name="Check Status").click()
await page.wait_for_load_state("networkidle")
title = await page.locator("main h1, main h2").first.inner_text()
message = await page.locator("main").inner_text()
return {
"status_title": title.strip(),
"status_message": message.strip(),
"source_url": page.url,
}
选择器和页面行为可能会发生变化。在允许的测试环境或受控工作流中进行测试,监控解析失败,并将意外布局路由到人工审查,而不是让模型猜测。
CapSolver Python网络爬虫指南涵盖了稳健的浏览器和解析实践,而CapSolver网络爬虫常见问题解答解决了常见的自动化可靠性问题。
如果授权的浏览器会话显示支持的CAPTCHA,请使用用户提供的AI代理文档中描述的CapSolver Core浏览器方法。模型不应接收收据编号、浏览器cookie或CapSolver密钥。
import os
from capsolver_core import Capsolver
cap = Capsolver(
api_key=os.environ["CAPSOLVER_API_KEY"],
default_timeout=180,
)
async def resolve_supported_challenge(page: Page) -> dict:
detected = await cap.detect(page)
if not detected:
return {"handled": False, "reason": "未检测到支持的挑战"}
solution = await cap.solve_on_page(page)
return {
"handled": True,
"solution": solution,
}
保持重试次数有限。安全的工作程序可以尝试状态查找,如果需要,调用一次挑战处理程序,然后重试原始操作。如果挑战重复,请停止并请求操作员审查。
async def authorized_status_check(page: Page, receipt_number: str) -> dict:
try:
return await fetch_status_page(page, receipt_number)
except Exception as first_error:
recovery = await resolve_supported_challenge(page)
if not recovery["handled"]:
raise first_error
return await fetch_status_page(page, receipt_number)
CapSolver CAPTCHA解决常见问题解答解释了支持的挑战工作流程。对于故障排除,请使用CapSolver错误常见问题解答。
附加代码:在CapSolver仪表板上使用代码 WEBS,每次充值可额外获得5%的奖金。
门户消息是为申请人撰写的,而不是用于机器分类。保留完整的源文本,并仅映射高级工作流类别。
STATUS_RULES = {
"case was received": "received",
"case is being actively reviewed": "under_review",
"request for evidence": "evidence_requested",
"case was approved": "approved",
"card was produced": "document_produced",
"case was denied": "adverse_decision",
}
def classify_status(title: str, message: str) -> dict:
combined = f"{title} {message}".lower()
for phrase, code in STATUS_RULES.items():
if phrase in combined:
return {"status_code": code, "confidence": "rule_match"}
return {"status_code": "unclassified", "confidence": "needs_review"}
规则应触发工作流操作,而不是法律结论。例如,evidence_requested可以创建一个审查任务,但只有合格的专业人员才能解释请求并建议申请人。
比较标准化字段和源消息的哈希值。仅在状态代码或实质性文本发生变化时发出警报。
import hashlib
def status_fingerprint(status: dict) -> str:
canonical = "|".join([
status.get("status_code", ""),
status.get("status_title", "").strip(),
status.get("status_message", "").strip(),
])
return hashlib.sha256(canonical.encode("utf-8")).hexdigest()
def has_changed(previous: dict | None, current: dict) -> bool:
if previous is None:
return True
return status_fingerprint(previous) != status_fingerprint(current)
使用基于风险的计划而不是持续轮询。许多工作流需要每日或每周检查,而不是每分钟请求。尊重门户限制,并在事件或意外挑战激增期间暂停作业。
AI代理应接收一个安全的脱敏事件对象。
SAFE_EVENT = {
"matter_id": "MAT-2026-00172",
"previous_status": "under_review",
"current_status": "evidence_requested",
"change_detected_at": "2026-08-25T08:15:00Z",
"source": "official_case_status_portal",
"recommended_action": "create_human_review_task",
}
合适的系统指令是:“总结检测到的变化,引用来源时间戳,并创建审查检查表。未经批准,不要提供法律建议、预测结果或联系政府或申请人。”
有关代理架构的想法,请参阅CapSolver AI博客和CapSolver自动化资源。
移民事务可能包含高度敏感的个人信息。应用传输中和静态数据加密、最小权限访问、员工认证、租户隔离、审计日志、删除计划和事件响应。在实施前,应审查USCIS网站政策和门户的隐私通知。
不要收集未授权服务的人员状态。不要超出验证记录和批准目的推断国籍、健康、宗教、家庭状况或就业资格。不要使用收据编号或案件历史训练通用模型。咨询合格的法律顾问以了解特定司法管辖区的法律和隐私要求。
| 控制领域 | 最低生产要求 |
|---|---|
| 授权 | 与事项ID相关联的书面客户或申请人同意 |
| 密钥 | 收据编号加密并由令牌引用 |
| 收集 | 首选官方渠道;仅在允许的情况下使用浏览器后备 |
| CAPTCHA | 确定性处理程序,一次有限重试,提示中不包含密钥 |
| 解析 | 保留原始文本;意外布局转为审查 |
| AI输出 | 仅摘要和任务路由,不提供法律建议 |
| 保留 | 基于事项的删除策略和可审计的访问历史 |
移民案件状态数据提取应作为安全的证据服务构建,而不是自主的法律决策者。保护收据编号,首先使用官方渠道,隔离浏览器执行,保留源文本,并仅向AI代理发送脱敏的变化事件。当允许的浏览器会话遇到支持的CAPTCHA时,CapSolver可以提供受控的恢复步骤,同时系统其余部分保持授权、隐私和可审计性。
在受控测试环境中从CapSolver开始,然后在监控真实案件之前完成隐私、安全、条款和法律审查。
不可以。仅监控申请人或授权客户已授权的案件,且您的组织有记录的合法目的。
不同机构和项目的情况不同。优先使用官方账户通知、经批准的集成或用户提供的记录。不要假设网页允许自动化收集。
不。将完整标识符保留在受保护的检索服务中。向模型发送伪匿名的事项ID和脱敏状态事件。
在有限的恢复尝试后停止并请求人工审查。重复的挑战可能表明会话、速率、政策或技术问题,自动化不应忽视。
它可以总结官方文本并创建审查任务,但法律解释、截止日期、回应和申请人沟通应由合格的专业人员处理或批准。