5f55f0ff85
Teams overrode send_image/send_image_file but not send_video, send_voice, or send_document — so when the gateway dispatched a video/voice/document reply to a Teams chat it fell through to the base-class text fallback and sent the local file path as plain text (same broken-UX class as the LINE URL-image gap in #49298). Extract the existing send_image attachment logic into a shared _send_media_attachment helper (remote URL by reference, local file as a base64 data URI, MIME guessed from the path) and route all four media kinds through it. 5 new tests cover remote-URL, local-file base64, no-app, and missing-file paths.