Releases: YourSandwich/mautrix-teams
Release list
v28.1
Full Changelog: v28.0...v28.1
v28.0
v27.0
mautrix-teams 27.0 aligns versioning with the underlying mautrix-go release
line; future patch releases will track it as 27.0.x. The release fixes the
meeting/group/channel naming gap, breaks a tight Trouter reconnect loop, and
stops the bridge re-inviting you to portals you have manually left.
Fixed
- Group, channel and meeting portals now pick up their Teams topic. The
per-thread/v1/threads/<id>API returns thread metadata under the
top-levelpropertieskey, while/conversations(used at startup)
usesthreadProperties; we now read either, and fall back to the
calendar subject parsed fromproperties.meetingJSON for meeting
threads where neither topic is set. - Trouter
/v4/aregistration now refreshes the skype token on a 401 and
retries once. Without this the bridge would enter a 5-second reconnect
loop after Microsoft rotated the websocket and the cached skype token
expired in the gap, hammering the auth endpoint until manual restart. - Startup chat sync no longer re-invites you to portals you have manually
left in Matrix. The bridge checks the room's member state and skips the
resync when your membership isleaveorban. Live messages still
trigger re-invite, as before. - Unknown Teams contacts (no profile available, no cached display name)
show as the bare AAD GUID instead of the full8:orgid:<guid>MRI, and
DM rooms with such contacts no longer get the bare MRI written into the
room name; Element falls back to the ghost's display name instead.
Full Changelog: v26.04.2...v27.0
v26.04.2
mautrix-teams 26.04.2 brings live incoming-call notices, fixes the bot
avatar that re-uploaded on every restart, and patches the OAuth bearer
prerequisite so the skype-token refresh recovers cleanly when Azure
revokes a bearer ahead of its stored expiry.
Added
- Incoming Teams calls now post a live
📲 Incoming call from <name>
notice in the caller's DM portal within ~1s of the ring, with a
self-mention so Element fires a Matrix push notification. - Post-call summaries from the
48:calllogssystem thread are parsed and
re-routed to the real conversation portal (DM partner for 1:1, thread
for group calls) instead of opening a virtual48:calllogsportal that
the Teams API rejects with HTTP 400. - Call notices include direction, caller display name (with cache fallback
for outgoing calls where Teams omitstargetParticipant.displayName),
and call duration when available. Self-calls and voicemail legs are
skipped.
Fixed
- Bot avatar is no longer re-uploaded on every restart. The mxc cache
file now lives in the bridge working directory (writable under the
systemd unit'sReadWritePaths) soPrivateTmp=yesno longer wipes it
on boot. RefreshSkypeTokennow refreshes the OAuth bearer first when the
cached one has expired, and retries once on a 401 from the authz
endpoint. This was masking expired-bearer cases asmsteams: token expiredand stalling read receipts and outbound Matrix events between
full reconnect cycles.
Full Changelog: v26.04.1...v26.04.2
v26.04.1
Fixed
- Backfill on Synapse now respects
max_initial_messagesinstead of stopping
at one Teams page. The internal pagination loop also counts only
bridgeable messages toward the target so non-chat events don't shrink it. - Multi-part messages (text + attachment, etc.) get distinct part IDs so
they no longer collide on bridgev2's(message_id, part_id)UNIQUE
constraint, which was aborting forward backfill mid-stream. - Inline Teams emoticons (
:wink:etc.) render as Unicode in the message
body instead of being split out as standalonem.imageparts. - Messages that convert to nothing (empty HTML shells, system events) are
skipped viabridgev2.ErrIgnoringRemoteEventinstead of being posted as
blankm.textplaceholders. - History messages now populate
parent_id(thread reply target) and
reactionsfromproperties.emotionsandconversationLink. - Reactions are deduped by (key, MRI) when parsing emotions so Teams's
per-emoji history (multiple add/remove cycles) doesn't replay as
duplicate Matrix reaction events. RichText/UriObject(inline images and screenshots) is now treated as
a chat message type and bridged.- DM portal invites carry
is_direct: trueso Element auto-marks them as
direct chats without requiring double-puppeting.
Full Changelog: https://github.com/YourSandwich/mautrix-teams/commits/v26.04.1
v26.04
Full Changelog: https://github.com/YourSandwich/mautrix-teams/commits/v26.04