I received an answer to my problem. Finally, the solution is very simple: just install the Rust package. It is commented as
Because if no pre-build binary is available you need Rust to build it yourself.
So that is it.
The data is inside of the indexation payload, you can get it like this
const message = await client.getMessage().data("ddd5a550d5df1094e7badddd8a857f64d15a708f1972c81d7a88fbcc8f9b2170")
const decoded = new TextDecoder().decode(new Uint8Array(message.message.payload.data.data));
console.log(JSON.stringify(JSON.parse(decoded), null, 1));
Your intent is correct, both libraries should be compatible, or at least coexist peacefully. You are also not mistaken in assuming that neither of the libraries can do everything: iota.c is a Node client library, while streams is a client library for the streams/channels cryptographic protocol that runs on top of the Tangle. Streams uses iota.rs internally ...
When you check the python reference instead of the specification reference (your link), you will see that message also takes dust_allowance_outputs in addition to outputs.
Alternatively (this is the route I was going) you can search the source code of the python bindings where they call the Rust with_cust_allowance_output method and you will see that it ...