identity.py 813 B

1234567891011121314151617181920212223
  1. from __future__ import annotations
  2. from gateway.core.channels.feishu.types import IncomingFeishuEvent
  3. class DefaultUserIdentityResolver:
  4. """
  5. 飞书用户身份解析:feishu:{tenant_key}:{app_id}:{open_id}。
  6. 无 open_id 时退化为 chat_id,便于群场景或异常事件仍可按会话隔离。
  7. """
  8. def __init__(self, *, tenant_fallback: str = "_") -> None:
  9. self._tenant_fallback = tenant_fallback
  10. def resolve_user_id(self, event: IncomingFeishuEvent) -> str:
  11. tenant = event.tenant_id or self._tenant_fallback
  12. app = event.app_id
  13. if event.open_id:
  14. return f"feishu:{tenant}:{app}:{event.open_id}"
  15. if event.chat_id:
  16. return f"feishu:{tenant}:{app}:chat:{event.chat_id}"
  17. return f"feishu:{tenant}:{app}:unknown"