1010from raven .omni_channel_chat .doctype .omni_channel_chat_provider .provider import (
1111 Provider ,
1212)
13+ from raven .omni_channel_chat .models .messages import (
14+ FileMessage ,
15+ ImageMessage ,
16+ StdMessage ,
17+ TextMessage ,
18+ )
1319
1420# A "messaging event" dict from the Facebook webhook payload
1521FacebookMessagingEvent = dict [str , Any ]
@@ -111,20 +117,17 @@ def _download_attachment(self, url: str, default_name: str) -> tuple[bytes, str]
111117 file_name = content_disposition .split ("filename=" )[- 1 ].strip ('" ' )
112118 return response .content , file_name
113119
114- def event_mapper (self , event : FacebookMessagingEvent ) -> dict | None :
120+ def event_mapper (self , event : FacebookMessagingEvent ) -> StdMessage | None :
115121 message = event .get ("message" )
116122 if message is None :
117123 return None
118124
119125 mid = message .get ("mid" )
126+ user_id = event ["sender" ]["id" ]
127+ metadata = {"mid" : mid }
120128
121129 if "text" in message :
122- return {
123- "provider" : self .provider_config .provider ,
124- "user_id" : event ["sender" ]["id" ],
125- "message" : {"type" : "Text" , "text" : message ["text" ]},
126- "message_metadata" : {"mid" : mid },
127- }
130+ return TextMessage (user_id = user_id , metadata = metadata , text = message ["text" ])
128131
129132 for attachment in message .get ("attachments" ) or []:
130133 att_type = attachment .get ("type" )
@@ -133,32 +136,26 @@ def event_mapper(self, event: FacebookMessagingEvent) -> dict | None:
133136 continue
134137 if att_type == "image" :
135138 content , file_name = self ._download_attachment (url , f"{ mid or 'image' } .jpg" )
136- return {
137- "provider" : self .provider_config .provider ,
138- "user_id" : event ["sender" ]["id" ],
139- "message" : {"type" : "Image" , "file_name" : file_name , "file_content" : content },
140- "message_metadata" : {"mid" : mid },
141- }
139+ return ImageMessage (
140+ user_id = user_id , metadata = metadata , file_name = file_name , file_content = content
141+ )
142142 if att_type in ("file" , "document" ):
143143 content , file_name = self ._download_attachment (url , mid or "file" )
144- return {
145- "provider" : self .provider_config .provider ,
146- "user_id" : event ["sender" ]["id" ],
147- "message" : {"type" : "File" , "file_name" : file_name , "file_content" : content },
148- "message_metadata" : {"mid" : mid },
149- }
144+ return FileMessage (
145+ user_id = user_id , metadata = metadata , file_name = file_name , file_content = content
146+ )
150147
151148 return None
152149
153- def standardize_events (self , events : list [FacebookMessagingEvent ]) -> list [dict ]:
154- std_events : list [dict ] = []
150+ def standardize_events (self , events : list [FacebookMessagingEvent ]) -> list [StdMessage ]:
151+ std_events : list [StdMessage ] = []
155152 for event in events :
156153 std_event = self .event_mapper (event )
157154 if std_event :
158155 std_events .append (std_event )
159156 return std_events
160157
161- def extract_messages (self , body : bytes , headers : dict ) -> list [dict ]:
158+ def extract_messages (self , body : bytes , headers : dict ) -> list [StdMessage ]:
162159 signature = headers .get ("X-Hub-Signature-256" , "" ) or headers .get (
163160 "x-hub-signature-256" , ""
164161 )
0 commit comments