yj
2025-07-22 2a8d022a20f82c35e9df680dfb66c3c95863b190
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
§
§û~h+!ãó´—dZddlZddlmZmZmZddlmZddlm    Z    ddl
m Z ddl m Z ddlmZdd    lmZdd
lmZdd lmZGd „d ¦«Ze¦«ZdS)u
消息处理核心逻辑
éN)ÚDictÚAnyÚOptional)ÚSession)Úlogger)Úget_db)ÚContact)Ú Conversation)Ú redis_queue)Ú ecloud_client)Ú dify_clientcó—eZdZdZd„Zdeeefdefd„Z    deeefdefd„Z
deded    e defd
„Z d eeefdefd „Z d S)ÚMessageProcessoru消息处理器có—dS)N©)Úselfs ú:d:\project\python\ECloud\app\services\message_processor.pyÚ__init__zMessageProcessor.__init__s€Ø ˆóÚ callback_dataÚreturncóΗ| d¦«}|dkrtjd|›¦«dS| di¦«}| dd¦«r,tjd| d¦«›¦«dS| d¦«r*| d    ¦«r| d
¦«stjd |›¦«dSd S) uª
        æ£€æŸ¥æ˜¯å¦æ˜¯æœ‰æ•ˆçš„群聊消息
 
        Args:
            callback_data: å›žè°ƒæ•°æ®
 
        Returns:
            æ˜¯å¦æ˜¯æœ‰æ•ˆçš„群聊消息
        Ú messageTypeÚ80001u#忽略非群聊消息: messageType=FÚdataru&忽略自己发送的消息: fromUser=ÚfromUserÚ    fromGroupÚcontentu消息缺少必要字段: data=T)ÚgetrÚinfoÚwarning)rrÚ message_typers    rÚis_valid_group_messagez'MessageProcessor.is_valid_group_messagesü€ð%×(Ò(¨Ñ7Ô7ˆ Ø ˜7Ò "Ð "Ý ŒKÐL¸lÐLÐLÑ MÔ MÐ Mؐ5ð× Ò  ¨Ñ,Ô,ˆØ 8Š8F˜EÑ "Ô "ð    Ý ŒKÐWÀÇÂÈ*ÑAUÔAUÐWÐWÑ XÔ XÐ Xؐ5ð—’˜Ñ$Ô$ð    à—8’8˜KÑ(Ô(ð    ð—8’8˜IÑ&Ô&ð    õ
ŒNÐC¸TÐCÐCÑ DÔ DÐ Dؐ5àˆtrcó°—| |¦«sdS| di¦«}| d¦«}tj||¦«S)u›
        å°†å›žè°ƒæ¶ˆæ¯åŠ å…¥é˜Ÿåˆ—
 
        Args:
            callback_data: å›žè°ƒæ•°æ®
 
        Returns:
            æ˜¯å¦æˆåŠŸåŠ å…¥é˜Ÿåˆ—
        Frr)r#rr Úenqueue_message)rrrÚ    from_users    rÚenqueue_callback_messagez)MessageProcessor.enqueue_callback_message9sZ€ð×*Ò*¨=Ñ9Ô9ð    Ø5à× Ò  ¨Ñ,Ô,ˆØ—H’H˜ZÑ(Ô(ˆ    õÔ*¨9°mÑDÔDÐDrÚ
from_groupÚw_idÚdbcób—    | t¦« tj|k¦« ¦«}|rt jd|›¦«dStj||¦«}|st j    d|›¦«dSt|| 
d¦«| 
d¦«| 
d¦«| 
d¦«| 
d    ¦«| 
d
¦«| 
d ¦«| 
d ¦«| 
d ¦«| 
d¦«| 
d¦«¬¦ « }|  |¦«|  ¦«t jd|›d| 
d¦«›¦«dS#t$rF}t j    d|›dt|¦«›¦«| ¦«Yd}~dSd}~wwxYw)uñ
        ç¡®ä¿è”系人信息存在于数据库中
 
        Args:
            from_group: ç¾¤ç»„ID
            w_id: ç™»å½•实例标识
            db: æ•°æ®åº“会话
 
        Returns:
            æ˜¯å¦æˆåŠŸç¡®ä¿è”ç³»äººå­˜åœ¨
        u联系人已存在: wc_id=Tu#无法获取联系人信息: wc_id=FÚuserNameÚnickNameÚremarkÚ    signatureÚsexÚ    aliasNameÚcountryÚbigHeadÚ    smallHeadÚ    labelListÚv1) Úwc_idÚ    user_nameÚ    nick_namer.r/r0Ú
alias_namer2Úbig_headÚ
small_headÚ
label_listr6u#成功保存联系人信息: wc_id=z , nick_name=u#确保联系人存在失败: wc_id=ú, error=N)Úqueryr    Úfilterr7Úfirstrr r Úget_contact_infoÚerrorrÚaddÚcommitÚ    ExceptionÚstrÚrollback)rr(r)r*Úexisting_contactÚ contact_infoÚ new_contactÚes        rÚensure_contact_existsz&MessageProcessor.ensure_contact_existsMs6€ð,    ð—’Ñ!Ô!×(Ò(­¬¸*Ò)DÑEÔE×KÒKÑMÔMð ð ð Ý” ÐE¸ÐEÐEÑFÔFÐFؐtõ)Ô9¸$À
ÑKÔKˆLàð Ý” ÐOÀ:ÐOÐOÑPÔPÐPؐuõ"Ø Ø&×*Ò*¨:Ñ6Ô6Ø&×*Ò*¨:Ñ6Ô6Ø#×'Ò'¨Ñ1Ô1Ø&×*Ò*¨;Ñ7Ô7Ø ×$Ò$ UÑ+Ô+Ø'×+Ò+¨KÑ8Ô8Ø$×(Ò(¨Ñ3Ô3Ø%×)Ò)¨)Ñ4Ô4Ø'×+Ò+¨KÑ8Ô8Ø'×+Ò+¨KÑ8Ô8Ø×#Ò# DÑ)Ô)ð ñ ô ˆKð FŠF;Ñ Ô Ð Ø IŠI‰KŒKˆKå ŒKØl°jÐlÐlÈl×N^ÒN^Ð_iÑNjÔNjÐlÐlñ ô ð ð4øåð    ð    ð    Ý ŒLÐ[¸zÐ[Ð[ÕSVÐWXÑSYÔSYÐ[Ð[Ñ \Ô \Ð \Ø KŠK‰MŒMˆMؐ55555øøøøð    øøøs%‚A&GÁ*.GÂEGÇ
H.Ç(;H)È)H.Ú message_datac    ó&—    | di¦«}| d¦«}| d¦«}| d¦«}| d¦«}tjd|›d|›¦«tt    ¦«¦«}    | |||¦«s.tjd|›¦«    | ¦«d    Stj    |¦«}tj |||¬
¦«}    |    s.tjd |›¦«    | ¦«d    S|     d d ¦«}
|     dd ¦«} | rtj || ¦«|›d| ›} |  t¦« tj| k¦« ¦«} | r-|| _|
| _d| _tjd| ›¦«nAt| || ||
d¬¦«}| |¦«tjd| ›¦«| ¦«|
r®t/j|||
¦«r˜|  t¦« tj| k¦« ¦«}|rd|_| ¦«tjd|›¦«    | ¦«dStjd|›¦«    | ¦«d    S#| ¦«wxYw#t4$r2}tjd|›dt7|¦«›¦«Yd}~d    Sd}~wwxYw)u‹
        å¤„理单条消息
 
        Args:
            message_data: æ¶ˆæ¯æ•°æ®
 
        Returns:
            æ˜¯å¦å¤„理成功
        rrrrÚwIdu开始处理消息: from_user=z , from_group=u(联系人信息处理失败: from_group=F)r?ÚuserÚconversation_iduDify响应失败: from_user=ÚanswerÚrRÚ_Tu更新对话记录: key=)Úuser_conversation_keyr&rRÚ user_questionÚ    ai_answerÚ is_processedu创建对话记录: key=u消息处理完成: from_user=u å‘送AI回答失败: from_user=u处理消息异常: from_user=r>N)rrr ÚnextrrMrCÚcloser Úget_conversation_idr Úsend_chat_messageÚset_conversation_idr?r
r@rVrArWrXrYrDrEr Úsend_group_messageÚis_sentrFrG)rrNrr&r(rr)r*rRÚ dify_responserXÚnew_conversation_idrVÚexisting_conversationÚnew_conversationÚ conversationrLs                 rÚprocess_single_messagez'MessageProcessor.process_single_message‡s×€ð`    Ø×#Ò# F¨BÑ/Ô/ˆDØŸš Ñ,Ô,ˆIØŸš +Ñ.Ô.ˆJØ—h’h˜yÑ)Ô)ˆGØ—8’8˜E‘?”?ˆDå ŒKÐ]¸Ð]Ð]ÐQ[Ð]Ð]Ñ ^Ô ^Ð ^õ•f‘h”h‘”ˆBðP à×1Ò1°*¸dÀBÑGÔGð!Ý”LÐ!XÈJÐ!XÐ!XÑYÔYÐYØ ðX—’‘
”



õS#.Ô"AÀ)Ñ"LÔ"Lõ!,Ô =Ø!¨    À?ð!ñ!ô! ð%ð!Ý”LÐ!KÀ    Ð!KÐ!KÑLÔLÐLØ ð@—’‘
”



ð{*×-Ò-¨h¸Ñ;Ô;    Ø&3×&7Ò&7Ð8IÈ2Ñ&NÔ&NÐ#ð'ðTÝÔ3°IÐ?RÑSÔSÐSð,5Ð(LÐ(LÐ7JÐ(LÐ(LÐ%ð—H’H\Ñ*Ô*ß’VLÔ>ÐBWÒWÑXÔXß’U‘W”Wð&ð )ðTà:AÐ)Ô7Ø6?Ð)Ô3Ø9=Ð)Ô6Ý”KРRÐ;PРRРRÑSÔSÐSÐSõ(4Ø.CØ"+Ø(;Ø&-Ø"+Ø%)ð (ñ(ô(Ð$ð—F’FÐ+Ñ,Ô,Ð,Ý”KРRÐ;PРRРRÑSÔSÐSà—    ’    ‘ ”  ðð!¥Ô!Aؘ* iñ"ô"ð!ð
Ÿš¥Ñ.Ô.ßšÝ(Ô>ÐBWÒWñô÷š™œð !ð$ð$Ø/3˜ Ô,ØŸ    š    ™ œ ˜ å”KРLÀРLРLÑMÔMÐMØð —’‘
”



õ    ”LÐ!OÀIÐ!OÐ!OÑPÔPÐPØ ð—’‘
”



ø—’‘
”


øøøøåð    ð    ð    Ý ŒLÐU¸)ÐUÐUÍSÐQRÉVÌVÐUÐUÑ VÔ VÐ Vؐ55555øøøøð    øøøsV‚BMÂ".L;ÃMÃ'AL;Ä,MÅF4L;Ë7MÌ L;Ì%MÌ;MÍMÍ
NÍ'N Î NN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__rrrGrÚboolr#r'rrMrfrrrrrs耀€€€ØÐð ð ð ð°D¸¸c¸´NðÀtðððððBE°d¸3À¸8´nðEÈðEðEðEðEð(8°ð8¸3ð8ÀGð8ÐPTð8ð8ð8ð8ðtj°4¸¸S¸´>ðjÀdðjðjðjðjðjðjrr)rjÚjsonÚtypingrrrÚsqlalchemy.ormrÚlogururÚapp.models.databaserÚapp.models.contactr    Úapp.models.conversationr
Úapp.services.redis_queuer Úapp.services.ecloud_clientr Úapp.services.dify_clientr rÚmessage_processorrrrú<module>rwsðððð € € € Ø&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø"Ð"Ð"Ð"Ð"Ð"ØÐÐÐÐÐà&Ð&Ð&Ð&Ð&Ð&Ø&Ð&Ð&Ð&Ð&Ð&Ø0Ð0Ð0Ð0Ð0Ð0Ø0Ð0Ð0Ð0Ð0Ð0Ø4Ð4Ð4Ð4Ð4Ð4Ø0Ð0Ð0Ð0Ð0Ð0ð_ð_ð_ð_ð_ñ_ô_ð_ðF%Ð$Ñ&Ô&ÐÐÐr