60 lines
1.6 KiB
Python
60 lines
1.6 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,
|
|
Task,
|
|
Signal,
|
|
ProjectSignalLink,
|
|
Integration,
|
|
FeishuReplyOutbox,
|
|
AIProcessingLog,
|
|
)
|
|
from ....core.database import AsyncSessionLocal
|
|
from ....config.ai_prompts import (
|
|
PROMPT_FEISHU_HUMANIZED_REPLY,
|
|
PROMPT_FEISHU_QA_NATURAL_REPLY,
|
|
PROMPT_FEISHU_QA_NATURAL_REPLY_REWRITE,
|
|
)
|
|
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("__")]
|