Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Telegram bot: example json, inline_keyboard

Example json for show inline_keyboard in telegram bot

https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating

enter image description here

{
        "chat_id": "123456",
        "text": "Hi",
        "reply_markup": {
            "inline_keyboard": [[
                {
                    "text": "A",
                    "callback_data": "A1"            
                }, 
                {
                    "text": "B",
                    "callback_data": "C1"            
                }]
            ]
        }
    }
like image 833
jeissonp Avatar asked Mar 24 '17 21:03

jeissonp


2 Answers

I just had a hard time trying to get it to work on my API and I've found the problem. You need to JSON.stringify() the contents of reply_markup that converts the keyboard object and contents into a string first.

Here's an example.

bot.onCommand = function (chat, from, message_id, text, command, commandData) {
    if (command === "test") {
        var keyboard = {
            "inline_keyboard": [
                [
                    {"text": "Yes", "url": "http://www.google.com/"},
                    {"text": "No", "url": "http://www.google.com/"}
                ]
            ]
        };

        var data = {
            "reply_to_message_id": message_id,
            "reply_markup": JSON.stringify(keyboard)
        };


        bot.sendText(chat.id, "test", data, function (isSuccess) {
            console.log(isSuccess);
        });

        return;
    }
}

I wrote this to hopefully make it less confusing.

The output will be:

(test    )
[Yes] [No]

The circler brackets is the message and the square brackets is the buttons. Both in this example opens a link to Google.

like image 67
Nova Avatar answered Sep 25 '22 17:09

Nova


Well, I think I understood what you mean, jeissonp. It seems that you are using Node.js to write Telegram bots, and that's how you provide a user with an inline keyboard:

Create a keyboard:

const opts = {
"reply_markup": {
            "inline_keyboard": [[
                {
                    "text": "A",
                    "callback_data": "A1"            
                }, 
                {
                    "text": "B",
                    "callback_data": "C1"            
                }]
            ]
        }
}

And then send a message with the opts:

bot.sendMessage(chatID, "Message text", opts);

Hope it helps!

like image 35
Monochrome Avatar answered Sep 21 '22 17:09

Monochrome