Перейти к основному контенту

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 следует убрать из метода.