Как отправить сообщение в канал telegram через API telegram на php с картинкой и без

Как отправить сообщение в telegram канал на php? Давайте разберем отправку публикации с картинкой и без в telegram канал через бота на языке php.

Создаем бота

В telegram эта процедура занимает всего пару минут. Для создания и настроек есть официальный верифицированный бот: @BotFather. Откройте его в telegram и отправьте ему следующую команду

/newbot 

Далее нужно будет придумать название и логин своему боту. Это все выполняется прямо в чате telegram.

После успешного создания и настроек, BotFather пришлет токен созданного бота. Токен потребуется для отправки запросов к api. У telegram есть документация с описанием всех методов api, которые можно использовать. Документацию можно почитать тут: api ботов telegram. На этом настройка бота закончена.

Пример Php кода для отправки сообщения в telegram

В нашем случае всю документацию читать не придется, достаточно только два метода – sendPhoto и sendmessage.

Если нам надо отправить сообщение в telegram канал с фото 

static public function photoMessage(string $title, string $desc, string $img, string $url): array
{
    $bot_token = 'xxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    $chat_id = '@chat_id';
    $text = "*{$title}* **{$desc}** [Подробнее]({$url})";
    $request = 'https://api.telegram.org/bot' . $bot_token . '/sendMessage';
    // параметры, которые отправятся api телеграмм
    $params = array(
        'chat_id' => $chat_id, // id получателя сообщения
        'caption' => $text, // текст сообщения
        'parse_mode' => 'markdown', // режим отображения сообщения, не обязательный параметр
        'disable_web_page_preview' => true,
        'photo' => $img,
    );
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, $request);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($c, CURLOPT_POST, true);
    curl_setopt($c, CURLOPT_POSTFIELDS, $params);
    curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($c, CURLOPT_TIMEOUT, 10);
    $result = curl_exec($c);
    if ($result === false) {
        $result = curl_error($c);
    }
    curl_close($c);
    return $result;
}

Если нам надо отправить сообщение в telegram канал без фото

static public function sendMessage(string $title, string $desc, string $url): array
{
    $bot_token = 'xxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    $chat_id = '@chat_id';
    $text = "*{$title}* **{$desc}** [Подробнее]({$url})";
    $request = 'https://api.telegram.org/bot' . $bot_token . '/sendMessage';
    // параметры, которые отправятся api телеграмм
    $params = array(
        'chat_id' => $chat_id, // id получателя сообщения
        'text' => $text, // текст сообщения
        'parse_mode' => 'markdown', // режим отображения сообщения, не обязательный параметр
        'disable_web_page_preview' => true,
    );
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, $request);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($c, CURLOPT_POST, true);
    curl_setopt($c, CURLOPT_POSTFIELDS, $params);
    curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($c, CURLOPT_TIMEOUT, 10);
    $result = curl_exec($c);
    if ($result === false) {
        $result = curl_error($c);
    }
    curl_close($c);
    return $result;
}