use zammad_api::api::{KbAnswerPatch, NewKbAnswer};
use zammad_api::{Auth, Client};
#[tokio::main]
async fn main() -> zammad_api::Result<()> {
let url = std::env::var("ZAMMAD_URL").unwrap();
let token = std::env::var("ZAMMAD_API_TOKEN").unwrap();
let category_id: u64 = std::env::var("KB_CATEGORY_ID").unwrap().parse().unwrap();
let z = Client::builder().url(url).auth(Auth::bearer(token)).build()?;
let kb = z.knowledge_base();
println!("=== create draft ===");
let created = kb
.create_answer(NewKbAnswer {
category_id,
title: "__mcp_write_smoke".into(),
body: "<p>original body</p>".into(),
published: false,
})
.await?;
let id = created.id;
println!(" id={id} published={} title={:?}", created.published, created.title);
println!(" body={:?}", created.body);
println!("=== update title+body ===");
let updated = kb
.update_answer(
id,
KbAnswerPatch {
title: Some("__mcp_write_smoke (edited)".into()),
body: Some("<p>edited body</p>".into()),
published: None,
},
)
.await?;
println!(" title={:?} body={:?}", updated.title, updated.body);
println!("=== publish ===");
let pubd = kb
.update_answer(id, KbAnswerPatch { published: Some(true), ..Default::default() })
.await?;
println!(" published={}", pubd.published);
println!("=== unpublish ===");
let unpubd = kb
.update_answer(id, KbAnswerPatch { published: Some(false), ..Default::default() })
.await?;
println!(" published={}", unpubd.published);
println!("CLEANUP_ANSWER_ID={id}");
Ok(())
}