Telegram bot with "pretty" keyboard

I created a Telegram bot with a keyboard for sending simple commands.

var commands = [];
commands.push({"text": "/lights_on", "callback_data": "/lights_on"});
commands.push({"text": "/temperature", "callback_data": "/temperature"});

var opts = {
    reply_to_message_id: msg.payload.messageId,
    reply_markup: JSON.stringify({
        "keyboard": [commands]
msg.payload = {};
msg.payload.chatId = 123456;
msg.payload.type = 'message';
msg.payload.content = 'Awaiting command';
msg.payload.options = opts;
return [ msg ];

It works, but I want to make the buttons “prettier” using custom labels.
So I read some example suggesting something like this

commands.push({"text": "Turn on lights", "callback_data": "/lights_on"});

But this doesn’t work: when I press the button the content of the text variable is actually sent, instead of callback_data.
Is there a way to accomplish this? Secondly, it would be possible to display an icon instead of plain text?

If I understand you correctly, you just want to change the text of the inline keyboard that appears while keeping the callback data.

This works for me:

“inline_keyboard”:[“AN:/alarmon, AUS:/alarmoff, NEUE ZEIT:/alarmtime”,“Fertig:/alarmdone”]}

Hmm… your code is not working: maybe there’s a typo?
Can you post the full snippet?
Anyway, I don’t want to render an inline keyboard but the “sticky” one, as in this screenshot:

I can’t find much documentation about this…

Ah sorry, you want to use the normal keyboard.
AFAIK it is not possible to change the callback data from the text showing in the normal keyboard. Normal keyboard is used to send commands or messages to the bot, and it is not interactive like the inline keyboards.

What integration for Telegram are you using?
I am using the Homeassistant Telegram Bot and simply call it via NodeRed.

I’m using Homeassistant Telegram Bot as well.
But I assume it’s not an issue on Hassio/Nodered side, but on how Telegram renders the code