KI-AGENT: Matrix Push Worker für ungelesene Nachrichten ergänzen

This commit is contained in:
2026-05-22 21:21:08 +02:00
parent f150cfd740
commit 7f47821a7f
3 changed files with 303 additions and 0 deletions

View File

@@ -1512,6 +1512,69 @@ export function matrixService(server: FastifyInstance) {
}
}
const syncServiceRoomEvents = async (since?: string, initial = false) => {
const service = await ensureServiceAccessToken()
const filter = {
room: {
timeline: {
limit: 50,
},
},
presence: {
types: [],
},
account_data: {
types: [],
},
}
const params = new URLSearchParams({
timeout: since && !initial ? "25000" : "0",
filter: JSON.stringify(filter),
})
if (since) params.set("since", since)
const response = await requestMatrixJson<MatrixSyncResponse>(
`/_matrix/client/v3/sync?${params.toString()}`,
service.accessToken
)
const joinedRooms = response.rooms?.join || {}
return {
nextBatch: response.next_batch || since || "",
serviceUserId: service.matrixUserId,
rooms: Object.entries(joinedRooms).map(([roomId, joinedRoom]) => {
const timelineEvents = joinedRoom.timeline?.events || []
const messages = initial
? []
: timelineEvents
.filter((event) =>
event.type === "m.room.message" &&
["m.text", "m.file", "m.image"].includes(event.content?.msgtype || "") &&
event.content?.["m.relates_to"]?.rel_type !== "m.replace"
)
.map((event) => ({
id: event.event_id,
roomId,
sender: event.sender,
senderDisplayName: event.sender,
body: event.content?.body || "",
attachment: attachmentFromEvent(event),
timestamp: event.origin_server_ts,
own: event.sender === service.matrixUserId,
replyToEventId: event.content?.["m.relates_to"]?.["m.in_reply_to"]?.event_id || null,
}))
return {
roomId,
messages,
membersChanged: [...timelineEvents, ...(joinedRoom.state?.events || [])]
.some((event) => event.type === "m.room.member"),
}
}),
}
}
const sendTenantRoomMessage = async (
userId: string,
tenantId: number | null,
@@ -2189,6 +2252,7 @@ export function matrixService(server: FastifyInstance) {
getTenantRoomMembers,
searchTenantRoomMessages,
syncTenantRoomEvents,
syncServiceRoomEvents,
sendTenantRoomMessage,
sendTenantRoomReaction,
editTenantRoomMessage,