Работа с клавиатурами
Клавиатура — это кнопки под сообщением. С их помощью можно открывать ссылки, выполнять действия и вызывать команды.
Методы, которые поддерживают работу с клавиатурой:
Чат-боты 2.0 (imbot.v2)
- imbot.v2.Chat.Message.send — отправить сообщение от имени чат-бота
- imbot.v2.Chat.Message.update — изменить отправленное сообщение чат-бота
- imbot.v2.Command.answer — отправить ответ на команду чат-бота
Чаты (im)
- im.message.add — отправить сообщение в чат
- im.message.update — изменить отправленное сообщение
Устаревшие чат-боты (imbot)
- imbot.message.add — отправить сообщение от имени чат-бота
- imbot.message.update — изменить отправленное сообщение чат-бота
- imbot.command.answer — отправить ответ на команду чат-бота
Как добавить клавиатуру
Чтобы добавить клавиатуру, при создании или обновлении сообщения передайте параметр KEYBOARD.
KEYBOARD можно передавать:
- строкой JSON
- объектом с корневым ключом
BUTTONS - массивом кнопок без обертки
Если в KEYBOARD нет ключа BUTTONS, сервер автоматически считает, что передан сокращенный формат, и оборачивает массив в BUTTONS.
{
"KEYBOARD": {
"BUTTONS": [
{"TEXT": "Кнопка", "LINK": "https://example.ru"}
]
}
}
{
"KEYBOARD": [
{"TEXT": "Кнопка", "LINK": "https://example.ru"}
]
}
Поля кнопки
|
Название |
Описание |
|
TEXT |
Текст кнопки. Для всех кнопок, кроме |
|
TYPE |
Перенос кнопки на новую строку. Единственное допустимое значение — |
|
LINK |
Ссылка кнопки. Допустимы |
|
APP_ID |
Идентификатор приложения для чата. Устаревший сценарий. Чтобы открыть приложение из чата, используйте встройки |
|
APP_PARAMS |
Параметры запуска приложения для чата. Передавайте вместе с Устаревший сценарий. Чтобы открыть приложение из чата, используйте встройки |
|
ACTION |
Действие:
|
|
ACTION_VALUE |
Значение для
|
|
COMMAND |
Команда для бота. Подробнее об обработке — ниже |
|
COMMAND_PARAMS |
Параметры команды. Передавайте вместе с |
|
BLOCK |
Блокировка кнопки:
По умолчанию — |
|
DISABLED |
Активность кнопки:
По умолчанию — |
|
CONTEXT |
Контекст отображения:
По умолчанию — |
|
DISPLAY |
Отображение кнопки:
По умолчанию — |
|
WIDTH |
Ширина кнопки в пикселях |
|
BG_COLOR |
Цвет кнопки в формате HEX |
|
BG_COLOR_TOKEN |
Токен цвета кнопки:
По умолчанию — |
|
TEXT_COLOR |
Цвет текста кнопки в формате HEX |
|
OFF_BG_COLOR |
Цвет кнопки в неактивном состоянии |
|
OFF_TEXT_COLOR |
Цвет текста кнопки в неактивном состоянии |
Вариант с параметрами APP_ID и APP_PARAMS используется в чатах Открытых линий.
Пример отправки сообщения с клавиатурой
Как использовать примеры в документации
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"botId":456,"botToken":"my_bot_token","dialogId":"chat2725","fields":{"message":"Выберите действие","keyboard":{"BUTTONS":[{"TEXT":"Открыть сайт","LINK":"https://www.example.ru/"},{"TYPE":"NEWLINE"},{"TEXT":"Подставить команду","ACTION":"PUT","ACTION_VALUE":"/help"}]}}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/imbot.v2.Chat.Message.send
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"botId":456,"dialogId":"chat2725","fields":{"message":"Выберите действие","keyboard":{"BUTTONS":[{"TEXT":"Открыть сайт","LINK":"https://www.example.ru/"},{"TYPE":"NEWLINE"},{"TEXT":"Подставить команду","ACTION":"PUT","ACTION_VALUE":"/help"}]}},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/imbot.v2.Chat.Message.send
try {
const response = await $b24.callMethod('imbot.v2.Chat.Message.send', {
botId: 456,
dialogId: 'chat2725',
fields: {
message: 'Выберите действие',
keyboard: {
BUTTONS: [
{ TEXT: 'Открыть сайт', LINK: 'https://www.example.ru/' },
{ TYPE: 'NEWLINE' },
{ TEXT: 'Подставить команду', ACTION: 'PUT', ACTION_VALUE: '/help' },
],
},
},
});
const result = response.getData().result.id;
console.log('Created message ID:', result);
} catch (error) {
console.error('Error:', error);
}
try {
$response = $b24Service
->core
->call(
'imbot.v2.Chat.Message.send',
[
'botId' => 456,
'dialogId' => 'chat2725',
'fields' => [
'message' => 'Выберите действие',
'keyboard' => [
'BUTTONS' => [
['TEXT' => 'Открыть сайт', 'LINK' => 'https://www.example.ru/'],
['TYPE' => 'NEWLINE'],
['TEXT' => 'Подставить команду', 'ACTION' => 'PUT', 'ACTION_VALUE' => '/help'],
],
],
],
]
);
$result = $response
->getResponseData()
->getResult()['id'];
echo 'Created message ID: ' . $result;
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error: ' . $e->getMessage();
}
BX24.callMethod(
'imbot.v2.Chat.Message.send',
{
botId: 456,
dialogId: 'chat2725',
fields: {
message: 'Выберите действие',
keyboard: {
BUTTONS: [
{ TEXT: 'Открыть сайт', LINK: 'https://www.example.ru/' },
{ TYPE: 'NEWLINE' },
{ TEXT: 'Подставить команду', ACTION: 'PUT', ACTION_VALUE: '/help' },
],
},
},
},
function(result) {
if (result.error()) {
console.error(result.error().ex);
} else {
console.log('Message ID:', result.data().id);
}
}
);
require_once('crest.php');
$result = CRest::call(
'imbot.v2.Chat.Message.send',
[
'botId' => 456,
'dialogId' => 'chat2725',
'fields' => [
'message' => 'Выберите действие',
'keyboard' => [
'BUTTONS' => [
['TEXT' => 'Открыть сайт', 'LINK' => 'https://www.example.ru/'],
['TYPE' => 'NEWLINE'],
['TEXT' => 'Подставить команду', 'ACTION' => 'PUT', 'ACTION_VALUE' => '/help'],
],
],
],
]
);
if (!empty($result['error'])) {
echo 'Error: ' . $result['error_description'];
} else {
echo 'Message ID: ' . $result['result']['id'];
}
Как обновить или удалить клавиатуру
Для обновления кнопок используйте методы:
Чтобы отключить вывод кнопок, передайте:
KEYBOARD: 'N'- пустое значение
KEYBOARD
Обработка команд чат-ботом
-
Чтобы команда отрабатывала в клавиатуре, зарегистрируйте ее через метод imbot.v2.Command.register.
-
Нажатие на кнопку сформирует событие ONIMBOTV2COMMANDADD.
-
В событии значение
command.contextпоказывает, в каком контексте была вызвана команда:
textarea— введена вручнуюkeyboard— вызвана кнопкойmenu— вызвана из контекстного меню