diff --git a/src/alerting.py b/src/alerting.py index f5a95f7..726a542 100644 --- a/src/alerting.py +++ b/src/alerting.py @@ -52,7 +52,9 @@ class MatrixNotifier: def send_message(self, message: str, msgtype: str = "m.text") -> bool: """Send message to Matrix room""" try: - url = f"{self.homeserver}/_matrix/client/v3/rooms/{self.room_id}/send/m.room.message" + # Add transaction ID to prevent duplicates + txn_id = datetime.datetime.now().strftime("%Y%m%d_%H%M%S_%f") + url = f"{self.homeserver}/_matrix/client/v3/rooms/{self.room_id}/send/m.room.message/{txn_id}" headers = { "Authorization": f"Bearer {self.access_token}", @@ -64,11 +66,8 @@ class MatrixNotifier: "body": message } - # Add transaction ID to prevent duplicates - txn_id = datetime.datetime.now().strftime("%Y%m%d_%H%M%S_%f") - url += f"/{txn_id}" - - response = self.session.post(url, headers=headers, json=data, timeout=10) + # Matrix API requires PUT when transaction ID is in the URL path + response = self.session.put(url, headers=headers, json=data, timeout=10) response.raise_for_status() logger.info(f"Matrix message sent successfully: {response.json().get('event_id')}")