bot.sendMessage()
Отправить сообщение в мессенджер
bot.sendMessage(string|null|mixed $messageText, array|object|null $buttons = null, array|object|null $attachments = null, array|object|null $apiAdditionalParams = null, bool $isDisableBuffer = true, bool $isUpdateMessageButtons = false)
Описание:
Отправить сообщение в мессенджер, сообщение может содержать текст, кнопки меню и вложения. Если мессенджер поддерживает, то все это будет отправлено в едином сообщении, иначе по отдельности, в порядке: сначала вложение, затем текст и кнопки меню.
Атрибуты:
Имя | Тип | Описание |
messageText | string|null|mixed | Текст сообщения |
buttons | array|object|null | Кнопки |
attachments | array|object|null | Вложения |
apiAdditionalParams | array|object|null | Дополнительные параметры, которые будут отправлены по REST API в мессенджер. Работают только для Telegram |
isDisableBuffer | bool | Принудительное отключение буффера исходящих сообщений |
isUpdateMessageButtons | bool | true, для обновления последнего отправленного сообщения в логе, чтобы не писать в лог повторы сообщений от GPT при апдейте |
Возвращает:
bool - подтверждение успешной отправки сообщения.
Пример для Telegram:
Кнопки:
Пример Array of Array of Button без параметра line_num:
let inlineKeyboard = [[{
"text": "🌳 Программа курса", //Заголовок кнопки
"callback_data": "btn_static_program", //Данные которые отправляются в Telegram и прилетают во входящем вебхуке при нажатии кнопки
"text_button_label": "1" //Доп. заголовок, который клеится к тексту кнопки при выключеном inline режиме
}],
[{
"text": "Открыть главное меню",
"callback_data": "btn_static_menu",
"text_button_label": "2"
}]];
Пример Array of Array of Button с параметром line_num:
let inlineKeyboard = [{
"text": "🌳 Программа курса",
"callback_data": "btn_static_program",
"text_button_label": "1",
"line_num": 0 //Номер строки для группировки кнопок
},
{
"text": "Открыть главное меню",
"callback_data": "btn_static_menu",
"text_button_label": "2",
"line_num": 1
}];
Если в значении параметра содержится строка _static_ то платформа Метабот не будет автоматически удалять inline кнопки после принятия входящего вебхука.
Вложения:
let attachments = [{
"type": "image",
"url": "https://image.png"
},
{
"type": "file",
"url": "https://file.pdf"
}]
Типы вложений: 'image' 'video' 'audio' 'file'.
При отправке файлов (документов, не медиа) в Telegram по URL, нужно понимать, что только 'gif', 'zip', 'pdf' для документов отправляются по URL, для других расширений файл скачивается на сервер платформы а затем его содержимое отправляется в Telegram.
Дополнительные параметры:
let apiAdditionalParams = {
"endpoint": "deleteMessage",
"message_id": bot.getTelegramLastMessageId(),
"parse_mode": 'HTML',
"item": "параметр"
}
Общий пример:
//Сообщение отправляемое методом--------------------------------
let messageText = "Текст сообщения";
//--------------------------------------------------------------
//Кнопки отправляемые методом--------------------------------
let msg = bot.getIncomingMessage().toLowerCase();
if (["btn_static_program", "1"].includes(msg)) {
return {
break: true,
run_script_by_code: 'courseProgram', //Код активируемого по кнопке скрипта
};
} else if (["btn_static_menu", "2"].includes(msg)) {
return {
break: true,
run_script_by_code: 'Menu',
};
}
let inlineKeyboard = [[{
"text": "🌳 Программа курса",
"callback_data": "btn_static_program",
"text_button_label": "1"
}],
[{
"text": "Открыть главное меню",
"callback_data": "btn_static_menu",
"text_button_label": "2"
}]];
//--------------------------------------------------------------
bot.sendMessage(
messageText,
inlineKeyboard,
[{
"type": "image",
"url": "https://s3.objstor.cloud4u.com/unti-prod-people/file/project/ob87fkfvxa.png"
}],
{
"parse_mode": 'HTML'
}
);
Дополнительно доступен предопределенный параметр «endpoint» – для замены параметра конечной точки в URL, например чтобы направить сообщение Телеграм не по классическому пути sendMessage а «по пути» editMessageMedia для редактирования сообщения, также можно подменить «endpoint», чтобы удалить сообщение, но для данных действий необходимо запоминать и передавать дополнительно как минимум параметр message_id.
// Функции для работы с id последнего сообщения
let getLastTelegramMessageId = function() {
return parseInt(lead.getAttr("last_telegram_message_id"))
}
let hasLastTelegramMessageId = function() {
let messageId = getLastTelegramMessageId()
return (!isNaN(messageId) && messageId > 0)
}
let saveLastTelegramMessageId = function() {
lead.setAttr("last_telegram_message_id", bot.getTelegramLastMessageId())
}
// Задание apiAdditionalParams
if (hasLastTelegramMessageId()) {
if (endpoint) {
let apiAdditionalParams = {
"endpoint": "editMessageText", //"deleteMessage"
"message_id": getLastTelegramMessageId(),
"parse_mode": 'HTML'
}
}
} else {
let apiAdditionalParams = { "parse_mode": 'HTML' }
saveLastTelegramMessageId();
}
Пример для остальных каналов:
Для всех каналов кроме Telegram не работает параметр apiAdditionalParams.
Также группировка кнопок меню по строкам с помощью line_num работает только в Telegram. Даже если указать номера строк, кнопки будут отправлены по порядку их определения в массиве.
//Сообщение отправляемое методом--------------------------------
let messageText = "Текст сообщения";
//--------------------------------------------------------------
//Кнопки отправляемые методом--------------------------------
let msg = bot.getIncomingMessage().toLowerCase();
if (["btn_static_program", "1"].includes(msg)) {
return {
break: true,
run_script_by_code: 'courseProgram', //Код активируемого по кнопке скрипта
};
} else if (["btn_static_menu", "2"].includes(msg)) {
return {
break: true,
run_script_by_code: 'Menu',
};
}
let inlineKeyboard = [[{
"text": "🌳 Программа курса",
"callback_data": "btn_static_program",
"text_button_label": "1"
}],
[{
"text": "Открыть главное меню",
"callback_data": "btn_static_menu",
"text_button_label": "2"
}]];
//--------------------------------------------------------------
bot.sendMessage(
messageText,
inlineKeyboard,
[{
"type": "image",
"url": "https://s3.objstor.cloud4u.com/unti-prod-people/file/project/ob87fkfvxa.png"
}]
);
Отправка файлов доступна для следующих каналов: Telegram, Metabot Wiget. Для остальных параметр attachments следует убрать из метода.
Нет комментариев