# 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 при апдейте |
Если в значении параметра содержится строка \_static\_ то платформа Метабот не будет автоматически удалять inline кнопки после принятия входящего вебхука.
##### Вложения: ```JavaScript 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.
##### Дополнительные параметры: ```JavaScript let apiAdditionalParams = { "endpoint": "deleteMessage", "message_id": bot.getTelegramLastMessageId(), "parse_mode": 'HTML', "item": "параметр" } ``` ##### Общий пример: ```JavaScript //Сообщение отправляемое методом-------------------------------- 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. ```JavaScript // Функции для работы с 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. Даже если указать номера строк, кнопки будут отправлены по порядку их определения в массиве.
```JavaScript //Сообщение отправляемое методом-------------------------------- 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** следует убрать из метода.