Add SD group/technician config and auto-assign tickets to Техподдержка ХК / Кривоченко
This commit is contained in:
@@ -96,6 +96,12 @@ ALLOWED_USERS = [ # Список TrueConf ID разрешенны
|
||||
|
||||
]
|
||||
|
||||
# =========================================================
|
||||
# 3.5. НАСТРОЙКИ SERVICE DESK: ГРУППА И ИСПОЛНИТЕЛЬ
|
||||
# =========================================================
|
||||
SD_GROUP_NAME = "Техподдержка ХК" # Название группы в ServiceDesk
|
||||
SD_TECHNICIAN_NAME = "Кривоченко Денис Сергеевич" # ФИО техника в ServiceDesk
|
||||
|
||||
# =========================================================
|
||||
# 3. НАСТРОЙКИ СВЯЗИ С КОРПОРАТИВНЫМИ СИСТЕМАМИ
|
||||
# =========================================================
|
||||
|
||||
+43
-1
@@ -21,7 +21,7 @@ from utils.stats_logger import log_menu_stats
|
||||
|
||||
# Безопасный импорт конфигурации
|
||||
try:
|
||||
from config.config import DEFAULT_REQUESTER, SD_URL, SD_TOKEN
|
||||
from config.config import DEFAULT_REQUESTER, SD_URL, SD_TOKEN, SD_GROUP_NAME, SD_TECHNICIAN_NAME
|
||||
except ImportError:
|
||||
import importlib.util
|
||||
config_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "config", "config.py")
|
||||
@@ -31,6 +31,8 @@ except ImportError:
|
||||
DEFAULT_REQUESTER = custom_config.DEFAULT_REQUESTER
|
||||
SD_URL = custom_config.SD_URL
|
||||
SD_TOKEN = custom_config.SD_TOKEN
|
||||
SD_GROUP_NAME = custom_config.SD_GROUP_NAME
|
||||
SD_TECHNICIAN_NAME = custom_config.SD_TECHNICIAN_NAME
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -100,6 +102,7 @@ def get_ad_user_info(user_id: str) -> dict | None:
|
||||
async def _send_sd_api_request(requester_email: str, subject: str, description: str, city: str) -> str | None:
|
||||
"""
|
||||
Автономная прямая отправка HTTP-запроса в Service Desk API v3.
|
||||
Автоматически ищет ID группы и техника по именам из config.
|
||||
"""
|
||||
# Если запрашивает системный ИИ или не указан email — ищем по ИМЕНИ
|
||||
if requester_email == DEFAULT_REQUESTER or requester_email == "ai@sibcem.ru":
|
||||
@@ -107,6 +110,40 @@ async def _send_sd_api_request(requester_email: str, subject: str, description:
|
||||
else:
|
||||
requester_payload = {"email_id": requester_email}
|
||||
|
||||
# Ищем ID группы
|
||||
group_id = None
|
||||
try:
|
||||
url_groups = f"{SD_URL.rstrip('/')}/api/v3/groups"
|
||||
headers = {"TECHNICIAN_KEY": SD_TOKEN}
|
||||
async with httpx.AsyncClient(verify=False) as client:
|
||||
resp = await client.get(url_groups, headers=headers, timeout=10.0)
|
||||
if resp.status_code == 200:
|
||||
groups = resp.json().get("groups", [])
|
||||
for g in groups:
|
||||
if g.get("name") == SD_GROUP_NAME:
|
||||
group_id = g.get("id")
|
||||
logger.info(f"SD group found: name={SD_GROUP_NAME}, id={group_id}")
|
||||
break
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to fetch SD groups: {e}")
|
||||
|
||||
# Ищем ID техника
|
||||
tech_id = None
|
||||
try:
|
||||
url_techs = f"{SD_URL.rstrip('/')}/api/v3/technicians"
|
||||
headers = {"TECHNICIAN_KEY": SD_TOKEN}
|
||||
async with httpx.AsyncClient(verify=False) as client:
|
||||
resp = await client.get(url_techs, headers=headers, timeout=10.0)
|
||||
if resp.status_code == 200:
|
||||
techs = resp.json().get("technicians", [])
|
||||
for t in techs:
|
||||
if t.get("display_name") == SD_TECHNICIAN_NAME:
|
||||
tech_id = t.get("id")
|
||||
logger.info(f"SD technician found: name={SD_TECHNICIAN_NAME}, id={tech_id}")
|
||||
break
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to fetch SD technicians: {e}")
|
||||
|
||||
payload = {
|
||||
"request": {
|
||||
"subject": subject,
|
||||
@@ -117,6 +154,11 @@ async def _send_sd_api_request(requester_email: str, subject: str, description:
|
||||
}
|
||||
}
|
||||
}
|
||||
# Добавляем группу и исполнителя если найдены
|
||||
if group_id:
|
||||
payload["request"]["group"] = {"id": group_id}
|
||||
if tech_id:
|
||||
payload["request"]["assigned_to"] = {"id": tech_id}
|
||||
|
||||
url = f"{SD_URL.rstrip('/')}/api/v3/requests"
|
||||
headers = {"TECHNICIAN_KEY": SD_TOKEN}
|
||||
|
||||
Reference in New Issue
Block a user