Skip to content

Commit 82c2e33

Browse files
committed
fix (tasks): fix to triggered task webhook processing for gmail and gcal
1 parent 93d8c3b commit 82c2e33

3 files changed

Lines changed: 22 additions & 13 deletions

File tree

src/server/main/integrations/routes.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,7 @@ async def finalize_composio_connection(
406406
if isinstance(e, TimeoutError) or "timed out" in str(e).lower():
407407
raise HTTPException(status_code=408, detail="Connection verification timed out. Please try again.")
408408
raise HTTPException(status_code=500, detail=str(e))
409+
409410
@router.post("/composio/webhook", summary="Webhook receiver for Composio triggers", include_in_schema=False)
410411
async def composio_webhook(request: Request):
411412
"""
@@ -422,12 +423,12 @@ async def composio_webhook(request: Request):
422423
raise HTTPException(status_code=400, detail="Missing required fields in webhook payload.")
423424

424425
service_name_map = {
425-
"GOOGLECALENDAR_NEW_OR_UPDATED_EVENT": "gcalendar",
426-
"GMAIL_NEW_EMAIL": "gmail"
426+
"GOOGLECALENDAR_GOOGLE_CALENDAR_EVENT_SYNC_TRIGGER": "gcalendar",
427+
"GMAIL_NEW_GMAIL_MESSAGE": "gmail"
427428
}
428429
event_type_map = {
429-
"GOOGLECALENDAR_NEW_OR_UPDATED_EVENT": "new_event",
430-
"GMAIL_NEW_EMAIL": "new_email"
430+
"GOOGLECALENDAR_GOOGLE_CALENDAR_EVENT_SYNC_TRIGGER": "new_event",
431+
"GMAIL_NEW_GMAIL_MESSAGE": "new_email"
431432
}
432433

433434
service_name = service_name_map.get(trigger_slug)

src/server/workers/proactive/utils.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ def event_pre_filter(event_data: Dict[str, Any], event_type: str, user_email: Op
2222
"""
2323
if event_type == "gmail":
2424
headers = {h['name'].lower(): h['value'] for h in event_data.get('payload', {}).get('headers', [])}
25-
subject = event_data.get("subject", "").lower()
26-
snippet = event_data.get("snippet", "").lower()
27-
body = event_data.get("body", "").lower()
28-
content_to_check = f"{subject} {snippet}"
25+
subject = event_data.get("subject", "")
26+
# Use the correct keys from the Composio payload
27+
snippet = event_data.get("preview", {}).get("body", "")
28+
body = event_data.get("message_text", "")
29+
content_to_check = f"{subject} {snippet}".lower()
2930

3031
# Filter 1: Auto-replies (e.g., out-of-office)
3132
if headers.get("auto-submitted") == "auto-replied":
@@ -67,9 +68,11 @@ def event_pre_filter(event_data: Dict[str, Any], event_type: str, user_email: Op
6768
return False
6869

6970
# Filter 2: Events created by the user themselves
70-
if event_data.get("organizer", {}).get("self"):
71-
logger.info(f"GCal pre-filter: Discarding event created by the user. Summary: {summary}")
72-
return False
71+
# Composio payload provides organizer_email. Compare it with the user's email.
72+
organizer_email = event_data.get("organizer_email", "").lower()
73+
if user_email and organizer_email == user_email.lower():
74+
logger.info(f"GCal pre-filter: Discarding event created by the user. Summary: {summary}")
75+
return False
7376

7477
# Filter 3: Events the user has already declined
7578
if user_email:

src/server/workers/tasks.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -690,11 +690,16 @@ def _evaluate(condition: Any, data: Dict[str, Any]) -> bool:
690690

691691
# If no logical operators, it's an implicit AND of field conditions
692692
for field, query in condition.items():
693-
event_value = data.get(field)
693+
event_value = None
694+
# Special remapping for gmail 'from' filter to match Composio's 'sender' field
695+
if field == 'from' and source == 'gmail':
696+
event_value = data.get('sender')
697+
else:
698+
event_value = data.get(field)
694699

695700
# Special handling for 'from' field
696701
if field == 'from' and source == 'gmail' and isinstance(event_value, str):
697-
event_value = _extract_email(event_value)
702+
event_value = _extract_email(event_value) # This will now work correctly
698703

699704
if isinstance(query, dict): # Field has operators like {$contains: ...}
700705
for op, op_val in query.items():

0 commit comments

Comments
 (0)