PMFlow/backend/app/services/integrations/feishu_integration_service/shared.py

55 lines
1.5 KiB
Python

from __future__ import annotations
"""
Feishu Integration Service - 飞书集成服务
功能:
1. 接收飞书群聊消息事件
2. AI 判断消息是否为有价值的信号
3. 自动创建信号并关联到项目
4. 推送通知给相关角色
飞书开放平台配置:
- App ID: 从飞书开放平台获取
- App Secret: 从飞书开放平台获取
- 事件接收: 统一使用长连接模式
"""
import asyncio
import json
import hashlib
import re
import time
from uuid import uuid4
from datetime import datetime, timedelta, timezone
from typing import Any, Dict, List, Optional
import httpx
from sqlalchemy import and_, or_, text, update
from sqlalchemy.exc import IntegrityError
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
from ....models import (
User,
Project,
Signal,
ProjectSignalLink,
Integration,
FeishuReplyOutbox,
AIProcessingLog,
)
from ....core.database import AsyncSessionLocal
from ....config.ai_prompts import PROMPT_FEISHU_HUMANIZED_REPLY
from ...notification_service import NotificationService
from ...signal.signal_capture_service import ProactiveSignalCaptureService
from ...llm_service import LLMService
from ....utils.timezone import now_cn_naive
CN_TZ = timezone(timedelta(hours=8))
WEEKDAY_CN = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
OUTBOX_MAX_ATTEMPTS = 3
OUTBOX_STALE_SENDING_SECONDS = 120
_OUTBOX_PERF_T0_BY_ID: dict[int, float] = {}
__all__ = [name for name in globals() if not name.startswith("__")]