ariansyahdedy commited on
Commit
e20916c
·
1 Parent(s): bcd422d

Add reply function

Browse files
Files changed (1) hide show
  1. app/main.py +36 -35
app/main.py CHANGED
@@ -45,66 +45,67 @@ message_cache = MessageCache()
45
  async def webhook(request: Request):
46
  request_id = f"req_{int(time.time()*1000)}"
47
  logger.info(f"Processing webhook request {request_id}")
48
- # Parse incoming request
49
  payload = await request.json()
50
 
51
  processed_count = 0
52
  error_count = 0
53
  results = []
54
 
55
- changes = payload.get("entry", [])[0].get("changes", [])
56
-
57
- for change in changes:
58
- messages = change.get("value", {}).get("messages", [])
59
-
60
- for message in messages:
61
- message_id = message.get("id")
62
- timestamp = message.get("timestamp")
63
- content = message.get("text", {}).get("body")
64
- sender_id = message.get("from")
65
-
66
- # Check for duplicate message ID
67
- # Check for duplicate message
68
- if message_cache.exists(message_id):
69
- logger.info(f"Duplicate message detected: {message_id}")
70
- continue
71
-
72
- try:
 
 
 
73
  # Process message with retry logic
74
  result = await process_message_with_retry(
75
  sender_id,
76
  content,
77
  timestamp
78
  )
 
79
  message_cache.add(message_id)
80
  processed_count += 1
81
  results.append(result)
82
-
83
- except Exception as e:
84
- error_count += 1
85
- logger.error(
86
- f"Failed to process message {message_id}: {str(e)}",
87
- exc_info=True
88
- )
89
- results.append({
90
- "status": "error",
91
- "message_id": message_id,
92
- "error": str(e)
93
- })
94
-
95
- # Return detailed response
96
  response_data = {
97
  "request_id": request_id,
98
  "processed": processed_count,
99
  "errors": error_count,
100
  "results": results
101
  }
102
-
103
  logger.info(
104
  f"Webhook processing completed - "
105
  f"Processed: {processed_count}, Errors: {error_count}"
106
  )
107
-
108
  return JSONResponse(
109
  content=response_data,
110
  status_code=status.HTTP_200_OK
 
45
  async def webhook(request: Request):
46
  request_id = f"req_{int(time.time()*1000)}"
47
  logger.info(f"Processing webhook request {request_id}")
 
48
  payload = await request.json()
49
 
50
  processed_count = 0
51
  error_count = 0
52
  results = []
53
 
54
+ entries = payload.get("entry", [])
55
+
56
+ for entry in entries:
57
+ entry_id = entry.get("id")
58
+ logger.info(f"Processing entry_id: {entry_id}")
59
+
60
+ changes = entry.get("changes", [])
61
+ for change in changes:
62
+ messages = change.get("value", {}).get("messages", [])
63
+ for message in messages:
64
+ message_id = message.get("id")
65
+ timestamp = message.get("timestamp")
66
+ content = message.get("text", {}).get("body")
67
+ sender_id = message.get("from")
68
+
69
+ # Deduplicate messages based on message_id
70
+ if message_cache.exists(message_id):
71
+ logger.info(f"Duplicate message detected and skipped: {message_id}")
72
+ continue
73
+
74
+ try:
75
  # Process message with retry logic
76
  result = await process_message_with_retry(
77
  sender_id,
78
  content,
79
  timestamp
80
  )
81
+ # Add the message ID to the cache
82
  message_cache.add(message_id)
83
  processed_count += 1
84
  results.append(result)
85
+ except Exception as e:
86
+ error_count += 1
87
+ logger.error(
88
+ f"Failed to process message {message_id}: {str(e)}",
89
+ exc_info=True
90
+ )
91
+ results.append({
92
+ "status": "error",
93
+ "message_id": message_id,
94
+ "error": str(e)
95
+ })
96
+
 
 
97
  response_data = {
98
  "request_id": request_id,
99
  "processed": processed_count,
100
  "errors": error_count,
101
  "results": results
102
  }
103
+
104
  logger.info(
105
  f"Webhook processing completed - "
106
  f"Processed: {processed_count}, Errors: {error_count}"
107
  )
108
+
109
  return JSONResponse(
110
  content=response_data,
111
  status_code=status.HTTP_200_OK