Бот Telegram - текст sendMessage

У меня есть 2 проблемы с программированием бота телеграммы на PHP.

  1. проблема: пожалуйста, когда я пытаюсь отправить текст с большим количеством строк, используя API телеграммы. По этому коду:
<?php
$update = file_get_contents('php://input');
$update = json_decode($update, true);
$chatId= $update["message"]["from"]["id"]?$update["message"]["from"]["id"]:null;
$mess= "here is my text.";
$mess = $mess. "\n";
$mess = $mess. " this is new line".;
send($mess, $chatId);

function send($text,$chat){
   if (strpos($text, "\n")){
        $text = urlencode($text);
    }

    $parameters = array(
        "chat_id" => $chat,
        "text" => $text,
        "parse_mode" => "Markdown"
    );

    api("sendMessage?", $parameters)
}

function api($method,$command){
$token = "******";
$api = "https://api.telegram.org/bot$token/$method";

    if (!$curld = curl_init()){
       echo $curld; 
    }
    curl_setopt($curld, CURLOPT_VERBOSE, true);
    curl_setopt($curld, CURLOPT_POST, true);
    curl_setopt($curld, CURLOPT_POSTFIELDS, $command);
    curl_setopt($curld, CURLOPT_URL, $api);
    curl_setopt($curld, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curld, CURLOPT_TIMEOUT, 30);
    curl_setopt($curld, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curld, CURLOPT_SSL_VERIFYHOST, FALSE);
    $apiRequest = curl_exec($curld);
    curl_close($curld);
    return $apiRequest;
}

Мой текст в боте телеграммы выглядит так:

"вот+мой+текст.+это+новая+строка."

  1. проблема, возможно вопрос: Когда пользователь заходит в мой телеграмм-бот, я хочу, чтобы пользователь видел кнопки клавиатуры, которые я создал. Сейчас это у меня только для нового пользователя, он должен нажать на кнопку "Старт". Но я хочу, чтобы пользователь видел кнопки клавиатуры, когда он иногда возвращается.

Можете ли вы помочь мне с этим?

Спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 309
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Специальные символы в вашем тексте вызваны вызовом urlencode().

Поскольку вы передаете данные как POSTFIELD, нет необходимости использовать urlencode()

Кроме того, были некоторые синтаксические ошибки, такие как лишний . позади $mess = $mess. " this is new line".;.

Обновленный скрипт:

<?php
    $update = file_get_contents('php://input');
    $update = json_decode($update, true);
    $chatId= $update["message"]["from"]["id"]?$update["message"]["from"]["id"]:null;
    $mess= "here is my text.";
    $mess = $mess. "\n";
    $mess = $mess. " this is new line";

    send($mess, $chatId);

    function send($text,$chat){

        $parameters = array(
            "chat_id" => $chat,
            "text" => $text,
            "parse_mode" => "Markdown"
        );

        api("sendMessage", $parameters);
    }

    function api($method, $command){

        $token = "!!";
        $api = "https://api.telegram.org/bot{$token}/{$method}";

        if (!$curld = curl_init()){
           echo $curld;
        }
        // curl_setopt($curld, CURLOPT_VERBOSE, true);
        curl_setopt($curld, CURLOPT_POST, true);
        curl_setopt($curld, CURLOPT_POSTFIELDS, $command);
        curl_setopt($curld, CURLOPT_URL, $api);
        curl_setopt($curld, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($curld, CURLOPT_TIMEOUT, 30);
        curl_setopt($curld, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curld, CURLOPT_SSL_VERIFYHOST, FALSE);
        $apiRequest = curl_exec($curld);
        curl_close($curld);
        return $apiRequest;
    }

Аааа, я этого не понял. Точка была там по ошибке, когда я вставил сюда код. Большое спасибо

oorac 12.12.2020 13:11

@PřemekTomášDoležal Рад, что вы разобрались! Если кто-то ответит на ваш вопрос, пожалуйста, рассмотрите возможность проголосовать или принять ответ. Это показывает более широкому сообществу, что вы нашли решение, и повышает репутацию как отвечающего, так и вас самих.

0stone0 17.12.2020 13:30

Рассмотрите возможность использования библиотеки westacks/telebot. Этот код делает то же самое, но с меньшим количеством кода и более понятным

<?php 

require 'vendor/autoload.php';

use WeStacks\TeleBot\TeleBot;

// Init bot
$bot = new TeleBot('your bot token');

// Get update from incoming POST request
$update = $bot->handleUpdate();

// Send message
$bot->sendMessage([
    'chat_id' => $update->chat()->id,
    'text' => "here is my text.\n this is new line",
    "parse_mode" => "Markdown"
]);

Другие вопросы по теме