diff --git a/instruct/handlers.py b/instruct/handlers.py index ec5c3b4..652d88e 100644 --- a/instruct/handlers.py +++ b/instruct/handlers.py @@ -217,26 +217,31 @@ async def _find_existing_trueconf_ticket(cn: str, requester_email: str = None) - """ subject = "Запрос доступа к Trueconf" try: - # Забираем все заявки с темой (без фильтра по статусу — проверяем в коде) - url = f"{SD_URL.rstrip('/')}/api/v3/requests?filter=subject:{subject}&fields=id,subject,requester,status" + # Забираем все заявки без фильтра — API v3 некорректно работает с русскими буквами в filter + url = f"{SD_URL.rstrip('/')}/api/v3/requests?fields=id,subject,requester,status" headers = {"TECHNICIAN_KEY": SD_TOKEN} async with httpx.AsyncClient(verify=False) as client: resp = await client.get(url, headers=headers, timeout=10.0) if resp.status_code == 200: data = resp.json() requests_list = data.get("requests", []) - logger.info(f"Found {len(requests_list)} tickets with subject='{subject}', searching for CN={cn}") + logger.info(f"Found {len(requests_list)} total tickets, searching for CN={cn}") for req in requests_list: + # Фильтруем по subject в коде + if subject not in req.get("subject", ""): + continue + req_status = req.get("status", {}) status_name = req_status.get("name", "") if isinstance(req_status, dict) else str(req_status) req_id = req.get("id") - req_name = req_status.get("requester", {}).get("name", "") if isinstance(req_status.get("requester"), dict) else "" - logger.info(f"Ticket {req_id}: status={status_name}") # Пропускаем закрытые заявки if status_name in ("Resolved", "Rejected", "Closed", "Solved"): + logger.info(f"Skipping ticket {req_id}: status={status_name}") continue + logger.info(f"Checking ticket {req_id}: status={status_name}") + # Получаем детали заявки для поиска по описанию detail_url = f"{SD_URL.rstrip('/')}/api/v3/requests/{req_id}" detail_resp = await client.get(detail_url, headers=headers, timeout=10.0)