logo
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" } ] } ] } ] }
java
String 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);
javascript
const 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()));
python
import 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" } }

Powered by Notaku