This kind of feature can easily be implemented by oneself as we described here: https://www.curry-software.com/en/blog/telegram_unit_fail/
No need for an external service and dependency!
Also this approach allows very simple integration into code. I.e. in rust:
pub fn telegram(msg: &str) {
use std::process::Command;
if let Err(e) = Command::new("telegram").arg(msg).status() {
println!("Error occured while calling the telegram command! {:?}", e);
}
}