Почему Telegram не принимает html при добавлении в sendMessage parse_mode=HTML?
Здравствуйте!
Хочу оформить ответ бота в Telegram с помощью HTML, но при добавлении в код отправки ответа parse_mode=HTML, вот так:
$urlQuery = "https://api.telegram.org/bot" . $token . "/sendMessage?chat_id=". $chatId ."&text=" . $textMessage . "&drop_pending_updates=true&parse_mode=HTML"; $result = file_get_contents($urlQuery); и при оформлении этого ответа ($textMessage) так: $textMessage = "<p><b> на ЛИК: </b>" . $phonesString . "</p>"; ответы перестают приходить от бота.. Без тегов html благополучно приходят, даже если в url sendMessage есть parse_mode=HTML. Странно, что в ошибках из getWebhookInfo следующее: pending_update_count 1 last_error_date 1701331880 last_error_message "Read timeout expired" max_connections 40 ip_address "37.140.192.84" |
$urlQuery = "https://api.telegram.org/bot" . $token . "/sendMessage?chat_id=". $chatId ."&text=" . $textMessage . "&drop_pending_updates=true&parse_mode=HTML"; $result = file_get_contents($urlQuery); и при оформлении этого ответа ($textMessage) так: $textMessage = "<p><b> на ЛИК: </b>" . $phonesString . "</p>"; ответы перестают приходить от бота.. Без тегов html благополучно приходят, даже если в url sendMessage есть parse_mode=HTML. Странно, что в ошибках из getWebhookInfo следующее: pending_update_count 1 last_error_date 1701331880 last_error_message "Read timeout expired" max_connections 40 ip_address "37.140.192.84"
Дополнительно:
как минимум https://www.php.net/http_build_query
Ответы:
1 я не помню чтобы в tg api был тег <p>
2 уходите от file_get_contents, используйте curl. Причём советую использовать multipart data.
При отправке запроса телега вам что отвечает? Там должно быть описание ошибки.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Проблема, с которой вы столкнулись, связана с тем, что Telegram API не поддерживает HTML разметку в сообщениях, отправляемых с использованием метода sendMessage и параметра parse_mode=HTML. Вместо этого, Telegram поддерживает разметку с помощью Markdown.
Markdown является более удобным и безопасным способом форматирования текста в сообщениях, чем HTML. Он позволяет добавлять различные стили текста, такие как жирный, курсив, ссылки и списки, с помощью простых символов и специальных тегов.
Вот пример того, как можно использовать Markdown для форматирования текста в сообщении Telegram:
sendMessage([ 'chat_id' => $chat_id, 'text' => 'Привет, *мир*! Этот текст будет выделен жирным.', 'parse_mode' => 'Markdown', ]);
Как видите, вместо тегов HTML используются символы "*" для выделения текста жирным. Это простой и удобный способ добавления форматирования в сообщения.
Если вам все-таки необходимо отправить HTML разметку в сообщении Telegram, вы можете воспользоваться методом sendDocument, чтобы отправить документ с HTML содержимым. В этом случае, Telegram позволит открыть документ во встроенном браузере и отобразить HTML содержимое.
Надеюсь, данное объяснение поможет вам понять, почему Telegram не принимает HTML при добавлении в sendMessage с параметром parse_mode=HTML, и как можно использовать Markdown для форматирования текста в сообщениях. Если у вас остались вопросы, не стесняйтесь задавать их.