Provisions the keypad menus for a chat.
💡 This replaces the chat's entire menu set. To change one button, resend every menu you want the chat to keep.
Request
method is "setChatMenu".Field | Type | Required | Description |
menus | Yes | The complete menu set for the chat. For chat menus the only supported cell form is "button". | |
chat_id | String | Yes | The target chat or user id. |
app_id | String | Yes | The app the chat belongs to. |
to_user_id | String | Optional | Show the menu to one member only. Use inside a group or channel to respond to a single user. |
reference | String | Optional | Your id for this request. Echoed back in the response. |
Preconditions
Requirement | Why |
"Manage Chats" permission | Needed to modify chats in the app. |
Bot is admin or moderator in the chat | Menu provisioning is an admin action. |
Response
setChatMenu_ack
Field | Type | Returned | Description |
method | String | Yes | "setChatMenu_ack" |
chat | Yes | The chat the menus were applied to. | |
app_id | String | Yes | Echoed from the request. |
reference | String | Optional | Echoed from the request. |
The acknowledgement confirms receipt only — button presses arrive later as menuCallback events.
SDKs
The SDKs send the menu set as raw JSON, so build it as a JSON array and attach it to the out message.
SDK | Call | Callback |
Java | api.send(outMessage); after outMessage.setMenus(menus) | onRecieving(JSONObject obj) |
JavaScript | api.send(JSON.stringify(outmsg.toJsonObject())); | onReceiveObj(obj) |
Python | napi.send(obj) after obj, _ = out_msg.to_json_obj() | on_receive_obj(self, obj) |
Example
Request
json{ "method": "setChatMenu", "chat_id": "90090684438172188", "app_id": "90090684293000559", "reference": "123456789", "menus": [ { "menu_id": "PBw7HmDu5FAWjFm", "cat": "menu", "menu_name": "First Menu", "menu_group": "TgKB8yDHKv4ZBOc", "menu_version": "04oTrLih73KeqCke", "menu_order": 0, "api_id": "90091783822039252", "rows": [ { "row_id": "r_bMCvsAZ5ZVkMx2C", "row_order": 0, "menu_id": "PBw7HmDu5FAWjFm", "row_version": "FoLSTFJYg48eXrDp", "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_id": "r_DAetbJyRzpFUwSI", "row_order": 1, "menu_id": "PBw7HmDu5FAWjFm", "row_version": "QU6FfL9gyHSAiw8m", "cells": [ { "cell_id": "b_oScCagIGQmaHjNQ", "form": "button", "style": "outlined", "cell_order": 0, "version": "dl609ppkJkkfRdUL", "callback": "b_oScCagIGQmaHjNQ", "label": "Cancel" } ] } ] } ] }
javaString menusJson = "[ ... the menus array shown above ... ]"; JSONArray menus = (JSONArray) new JSONParser(-1).parse(menusJson); SetChatMenuOutMessage outMessage = new SetChatMenuOutMessage(); outMessage.setMenus(menus); outMessage.setChatId("90090684438172188"); outMessage.setApp_id("90090684293000559"); outMessage.setReference("123456789"); api.send(outMessage);
javascriptconst menusJson = "[ ... the menus array shown above ... ]"; let outmsg = new SetChatMenuOutMessage(); outmsg.menus = JSON.parse(menusJson); outmsg.chat_id = "90090684438172188"; outmsg.appId = "90090684293000559"; outmsg.reference = "123456789"; api.send(JSON.stringify(outmsg.toJsonObject()));
pythonimport json menus_json = "[ ... the menus array shown above ... ]" out_msg = SetChatMenuOutMessage() out_msg.menus = json.loads(menus_json) out_msg.chat_id = "90090684438172188" out_msg.app_id = "90090684293000559" out_msg.reference = "123456789" obj, _ = out_msg.to_json_obj() napi.send(obj)
Response
json{ "method": "setChatMenu_ack", "reference": "123456789", "app_id": "90090684293000559", "chat": { "id": "90090684438172188" } }