send_message/
send_message.rs1use beeper_desktop_api::{BeeperClient, SendMessageInput};
2use std::env;
3
4#[tokio::main]
5async fn main() -> Result<(), Box<dyn std::error::Error>> {
6 let token = env::var("BEEPER_TOKEN")
8 .unwrap_or_else(|_| {
9 eprintln!("Error: BEEPER_TOKEN environment variable not set");
10 eprintln!("Usage: BEEPER_TOKEN=your_token cargo run --example send_message");
11 std::process::exit(1);
12 });
13
14 let base_url = env::var("BEEPER_API_URL")
16 .unwrap_or_else(|_| "http://localhost:23373".to_string());
17
18 println!("Connecting to Beeper Desktop API at: {}", base_url);
19 println!();
20
21 let client = BeeperClient::new(&token, &base_url);
23
24 println!("📋 Fetching chats...");
26 let chats_response = client.list_chats(None, None).await?;
27
28 if chats_response.items.is_empty() {
29 println!("❌ No chats found!");
30 return Ok(());
31 }
32
33 let single_chat = chats_response
35 .items
36 .iter()
37 .find(|chat| chat.chat_type == "single");
38
39 if let Some(chat) = single_chat {
40 let chat_id = &chat.id;
41 let chat_title = &chat.title;
42
43 println!("✅ Found {} chats", chats_response.items.len());
44 println!();
45 println!("💬 Sending message to first single chat: '{}'", chat_title);
46 println!(" Chat ID: {}", chat_id);
47 println!();
48
49 let message_input = SendMessageInput {
51 text: "Hello".to_string(),
52 reply_to_id: None,
53 };
54
55 let response = client.send_message(chat_id, message_input).await?;
57
58 println!("✅ Message sent successfully!");
59 println!();
60 println!("Message Details:");
61 println!(" Chat ID: {}", response.chat_id);
62 println!(" Pending Message ID: {}", response.pending_message_id);
63 println!();
64 println!("Full response (JSON):");
65 println!("{:#?}", response);
66 } else {
67 println!("❌ No single (non-group) chats found!");
68 println!();
69 println!("Available chats:");
70 for (index, chat) in chats_response.items.iter().enumerate() {
71 println!(" {}. {} ({})", index + 1, chat.title, chat.chat_type);
72 }
73 }
74
75 Ok(())
76}