Files
web-petting/src/telegram.rs
T

45 lines
1.4 KiB
Rust
Raw Normal View History

2026-04-29 17:49:07 +03:00
use cot::db::{Database, query};
use crate::models::Setting;
/// Send a Telegram message using bot settings from DB.
/// Silently ignores errors (missing config, network issues) — notifications are best-effort.
pub async fn notify_new_lead(db: &Database, name: &str, phone: Option<&str>, comment: Option<&str>) {
let token = match get_setting(db, "telegram_bot_token").await {
Some(t) if !t.is_empty() => t,
_ => return,
};
let chat_id = match get_setting(db, "telegram_chat_id").await {
Some(c) if !c.is_empty() => c,
_ => return,
};
let mut text = format!("📋 Новая заявка!\n\nИмя: {name}");
if let Some(phone) = phone.filter(|s| !s.is_empty()) {
text.push_str(&format!("\nТелефон: {phone}"));
}
if let Some(comment) = comment.filter(|s| !s.is_empty()) {
text.push_str(&format!("\nКомментарий: {comment}"));
}
let url = format!("https://api.telegram.org/bot{token}/sendMessage");
let _ = reqwest::Client::new()
.post(&url)
.json(&serde_json::json!({
"chat_id": chat_id,
"text": text,
}))
.send()
.await;
}
async fn get_setting(db: &Database, key_name: &str) -> Option<String> {
let k = key_name.to_string();
query!(Setting, $key == k)
.get(db)
.await
.ok()
.flatten()
.map(|s| s.value)
}