This section explains how to send an inline menu that is directly bound to a specific message. The menu appears beneath the message bubble and provides users with contextual buttons or actions related to that message.
To use this feature, include one of the following in your message payload:
inline_menu
: A full menu object to be rendered inline
menu_ref
: The ID of a pre-defined menu (same asmenu_id
) to be used as an inline menu
β If both inline_menu and menu_ref are provided, the inline_menu takes precedence.
This form of menu is message-specific and will not persist globally like chat keypads.
SDK Mapping β sendInlineMenu
SDK | Request Method | Response Callback |
Java | TextOutMessage outmsg = new TextOutMessage();
outmsg.setChatId(chatId);
outmsg.setReference(reference);
outmsg.setEcho(1);
outmsg.setText(text);
JSONParser parser = new JSONParser(-1);
String menuJsonString= "MENU JSON";
outmsg.setMenuRef(menuRef);
JSONArray menuJson=(JSONArray) parser,parse(menuJsonString);
outmsg.setInlineMenu(menuJson);
outmsg.setApp_id(appId);
api.send(outmsg); | onMessagAckCallback(MessageAck msgAck) |
JavaScript | let outmsg = new TextOutMessage();
outmsg.setChatId(chatId);
outmsg.setReference(reference);
outmsg.setEcho(1);
outmsg.setText(text);
let menuJsonString = "MENU JSON";
let inlineMenu = JSON.parse(menuJsonString);
outmsg.inline_menu = inlineMenu;
outmsg.appId = appId;
api.send(outmsg); | onMessagAckCallback(msgAck) |
Python | out_msg = TextOutMessage()
out_msg.chat_id=chat_id
out_msg.reference=reference
out_msg.echo=1
out_msg.text=text
menu_json_string = "MENU JSON"
decoder = json.JSONDecoder()
inline_menu, _ = decoder.raw_decode(menu_json_string)
out_msg.inline_menus= inline_menus
out_msg.app_id=app_id
napi.send(out_msg) | on_message_ack_callback(self, msg_ack) |
Examples: Sending a Text Message with a Referenced Inline Menu
json{ "method": "sendMessage", "chat_id": "90090684438172188", "reference": 987654321, "app_id": "90090684293000559", "text": "Hello world!", "menu_ref": "PBw7HmDu5FAWjFm", "inline_menu": [ { "menu_id": "PBw7HmDu5FAWjFm", "cat": "menu", "menu_name": "First Menu", "menu_group": "TgKB8yDHKv4ZBOc", "menu_version": "04oTrLih73KeqCke", "menu_order": 0, "rows": [ { "row_id": "r_bMCvsAZ5ZVkMx2C", "row_order": 0, "menu_id": "PBw7HmDu5FAWjFm", "cells": [ { "cell_id": "b_BKwMwhIVbBFw634", "form": "button", "style": "filled", "cell_order": 1, "version": "7fOkiEWlDadvyOIE", "callback": "b_BKwMwhIVbBFw634", "label": "Save" }, { "cell_id": "b_b2ZRG1YmHStEPo5", "form": "button", "style": "tonal", "cell_order": 1, "version": "Gk4E9kpy4KG1yDij", "callback": "b_b2ZRG1YmHStEPo5", "label": "Delete" } ], "row_version": "FoLSTFJYg48eXrDp" }, { "row_id": "r_DAetbJyRzpFUwSI", "row_order": 1, "menu_id": "PBw7HmDu5FAWjFm", "cells": [ { "cell_id": "b_oScCagIGQmaHjNQ", "form": "button", "style": "outlined", "cell_order": 0, "version": "dl609ppkJkkfRdUL", "callback": "b_oScCagIGQmaHjNQ", "label": "Cancel" } ], "row_version": "QU6FfL9gyHSAiw8m" } ], "api_id": "90091783822039252" } ] }
java{ TextOutMessage outmsg = new TextOutMessage(); outmsg.setChatId(chatId); outmsg.setReference(reference); outmsg.setEcho(1); String menuRef = MAIN_MENU_001; Button oneBtn = createButton("", "oneBtnCBInWebView", 1, "RED", "White", null, null); Row firstRow = new Row(); firstRow.setRowOrder(1); firstRow.setButtons(new Button[] { oneBtn }); Menu inlineMenu = new Menu(); inlineMenu.setMenuRef(menuRef); inlineMenu.setRows(new Row[] { firstRow }); outmsg.setMenuRef(menuRef); outmsg.setInlineMenu(new Menu[] { inlineMenu }); outmsg.setApp_id(appId); api.send(outmsg); }
javascript{ let outmsg = new TextOutMessage(); outmsg.chat_id = chatId; outmsg.reference = reference; outmsg.echo = 1; let menuRef = MAIN_MENU_001; let oneBtn = createButton("", "oneBtnCBInWebView", 1, "RED", "White", null, null); oneBtn.button_icon = "ic_ball_ic_24dp"; oneBtn.button_icon_bgcolor = "#FFFF44"; let buttons = []; buttons.push(oneBtn); let rowOrder = 1; let firstRow = new Row(buttons, rowOrder); let rows = []; rows.push(firstRow); let inlineMenu = []; let firstInlineMenu = new Menu(rows, menuRef); inlineMenu.push(firstInlineMenu); outmsg.menu_ref = menuRef; outmsg.inline_menu = inlineMenu; outmsg.appId = appId; api.send(JSON.stringify(outmsg)); }
python{ outMsg = TextOutMessage() outMsg.chat_id = chatId outMsg.reference = reference outMsg.echo = 1 oneBtn = create_button(label="Visit a Milestone", callback="oneBtnCBInWebView", order=1,bg_color="RED", txt_color="White") oneBtn.button_icon = "ic_ball_ic_24dp" oneBtn.button_icon_bgcolor = "#FFFF44" firstRow = Row() firstRow.row_order = 1 firstRow.buttons = [oneBtn] menuRef = "MAIN_MENU_001" inlineMenu = Menu() inlineMenu.menu_ref = menuRef inlineMenu.rows = [firstRow] outMsg.menu_ref = menuRef outMsg.inline_menus = [inlineMenu] outMsg.app_id=app_id napi.send(outMsg) }
Response
json{ "method": "messageAck", "ack": { "reference": 987654321, "date": 1744200040098, "gmid": 52, "message_id": "d1_jzsailTx126848" } }