Matrix does have a feature called Bridges which would allow you to talk to someone on WhatsApp, Telegram, iMessage, etc. through your Matrix client. However, I suspect that they have some reliability issues.
Anecdote: I've been running my own Matrix bridges for WhatsApp and Signal (for my personal accounts) and they've been nothing but rock solid. Caveat being that with the pandemic I've exclusively used them at home, they're hosted on private infrastructure. It was a bit of a thing to set up, not being familiar with Matrix at all before, but now it's a docker-compose file.
To be clear, I send messages from my Matrix client to my Matrix server, software running on that server bridges it to WhatsApp/Signal as appropriate, same for incoming messages. Photos work as well.
I think WhatsApp relies on a data connection to your phone, and the bridge will disconnect whenever that drops. Having set this all up, I'm a pretty big convert to Matrix - just need to get the world on board. I'd love to have an SMS bridge as well, see how far I can go.
I haven't written anything up anywhere, but I have a rough outline of it - I can pull it together today and see if it's consumable by others. If you're at all familiar with the tools, they're deployed in their most vanilla capacities. The grief for me was the tiny amount of configuration each piece needed to fit with everything else. Components: postgres, Synapse (Matrix server), Signald (Signal client daemon), mautrix-signal (Signal-Matrix bridge), mautrix-whatsapp (WhatsApp-Matrix bridge), Element (Matrix client)
I didn't get around to actually doing something nice, but rather than leave things hanging I dumped my docker-compose file + some notes (that might be mostly useless) here: https://controlc.com/fbe73ad3. When I move it to a different machine, as this was originally just out of curiosity until it worked so well, I'll make sure to write something more usable up.
It's been ~6 weeks since I set it up and it's been working since the first time without any modifications, so I honestly forget some of what I did. The general flow is: configure the bridges (config.yaml), integrate them with Synapse (registration.yaml), add your Matrix user, then configure the bridge users.
https://matrix.org/bridges/