отправить сообщение в телеграм-канал через бот

Я делаю бот для телеграмм с отцом телеграмм, и я делаю своего бота администратором в моем общедоступном канале телеграммы, теперь я хочу отправлять сообщение по каналу ботом, это мой код для этой работы:

Код send.php:

<?php
    require('telegram-bot-api.php');

    $token = '10**************************************jM';
    $bot = new telegram_bot($token);
    $to = '@myChannel';
    $rs = $bot->send_message($to , 'test' , null, null);
        print_r($rs);
?>

и код telegram-bot-api.php:

<?php
class ReplyKeyboardMarkup{
    public $keyboard;
    public $resize_keyboard;
    public $one_time_keyboard;
    public $selective;

    function __construct($resize_keyboard=FALSE, $one_time_keyboard = FALSE, $selective=FALSE){
        $this->keyboard=array();
        $this->keyboard[0]=array();
        $this->resize_keyboard=$resize_keyboard;
        $this->one_time_keyboard=$one_time_keyboard;
        $this->selective=$selective;
    }
    public function add_option($option){
        $this->keyboard = $option;
    }
}
class ReplyKeyboardHide{
    public $hide_keyboard;
    public $selective;

    function __construct($hide_keyboard=TRUE, $selective = FALSE){
        $this->hide_keyboard=$hide_keyboard;
        $this->selective=$selective;
    }
}
class ForceReply{
    public $force_reply;
    public $selective;

    function __construct($force_reply=TRUE, $selective = FALSE){
        $this->force_reply=$force_reply;
        $this->selective=$selective;
    }
}

class telegram_bot{
    private $token;

    private function open_url($url, $method="GET", $data=null){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        if($method==="POST"){
            if(isset($data)){
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

            }
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        return curl_exec($ch);
    }

    private function control_api($action, $data=NULL){
        $token = $this->token;
        $response = json_decode($this->open_url("https://api.telegram.org/bot$token$action", "POST", $data));
        return $response;
    }

    function __construct($token){
        $this->token=$token;
    }

    public function status(){
        $response = $this->control_api("/getme");
        return($response);
    }

    public function get_updates(){
        $response = $this->control_api("/getUpdates");
        return($response);
    }

    public function send_action($to, $action){
        $data = array();
        $data["chat_id"]=$to;
        $data["action"]=$action;
        $response = $this->control_api("/sendChatAction", $data);

        return $response;
    }

    public function send_message($to, $msg, $id_msg=null, $reply=null){
        $data = array();
        $data["chat_id"]=$to;
        $data["text"]=$msg;
        $data["disable_web_page_preview"]="true";
        if(isset($id_msg))
            $data["reply_to_message_id"]=$id_msg;
        if(isset($reply))
            $data["reply_markup"]=$reply;
        $response = $this->control_api("/sendMessage", $data);

        return $response;
    }

    public function send_location($to, $lat, $lon, $id_msg=null, $reply=null){
        $data = array();
        $data["chat_id"]=$to;
        $data["latitude"]=$lat;
        $data["longitude"]=$lon;
        if(isset($id_msg))
            $data["reply_to_message_id"]=$id_msg;
        if(isset($reply))
            $data["reply_markup"]=$reply;
        $response = $this->control_api("/sendLocation", $data);

        return $response;
    }

    public function send_sticker($to, $sticker, $id_msg=null, $reply=null){
        $data = array();
        $data["chat_id"]=$to;
        if(file_exists($sticker))$sticker="@".$sticker;
        $data["sticker"]=$sticker;
        if(isset($id_msg))
            $data["reply_to_message_id"]=$id_msg;
        if(isset($reply))
            $data["reply_markup"]=$reply;
        $response = $this->control_api("/sendSticker", $data);

        return $response;
    }

    public function send_video($to, $video, $id_msg=null, $reply=null){
        $data = array();
        $data["chat_id"]=$to;
        if(file_exists($video))$video="@".$video;
        $data["video"]=$video;
        if(isset($id_msg))
            $data["reply_to_message_id"]=$id_msg;
        if(isset($reply))
            $data["reply_markup"]=$reply;
        $response = $this->control_api("/sendVideo", $data);
        return $response;
    }

    public function send_photo($to, $photo, $caption, $id_msg=null, $reply=null){
        $data = array();
        $data["chat_id"]=$to;

        if(file_exists($photo))$photo="@".$photo;
        $data["photo"]=$photo;
        if(isset($caption)){
            $data["caption"]=$caption;
        }
        if(isset($id_msg)){
            $data["reply_to_message_id"]=$id_msg;
        }
        if(isset($reply))
            $data["reply_markup"]=$reply;

        $response = $this->control_api("/sendPhoto", $data);

        return $response;
    }

    public function send_audio($to, $audio, $id_msg=null, $reply=null){
        $data = array();
        $data["chat_id"]=$to;

        if(file_exists($audio))$audio="@".$audio;
        $data["audio"]=$audio;
        if(isset($id_msg)){
            $data["reply_to_message_id"]=$id_msg;
        }
        if(isset($reply))
            $data["reply_markup"]=$reply;

        $response = $this->control_api("/sendAudio", $data);

        return $response;
    }

    public function send_document($to, $document, $id_msg=null, $reply=null){
        $data = array();
        $data["chat_id"]=$to;

        if(file_exists($audio))$document="@".$audio;
        $data["document"]=$document;
        if(isset($id_msg)){
            $data["reply_to_message_id"]=$id_msg;
        }
        if(isset($reply))
            $data["reply_markup"]=$reply;

        $response = $this->control_api("/sendDocument", $data);

        return $response;
    }

    public function forward_message($to, $from, $msg_id){
        $data = array();
        $data["chat_id"]=$to;
        $data["from_chat_id"]=$from;
        $data["message_id"]=$msg_id;
        $response = $this->control_api("/forwardMessage", $data);

        return $response;
    }

    public function set_webhook($url=null){
        $data = array();
        $data["url"]=$url;
        $response = $this->control_api("/setWebhook", $data);

        return $response;
    }

    public function get_user_profile_photos($id_user, $offset=null, $limit=null){
        $data = array();
        $data["user_id"]=$id_user;
        if(isset($offset)){
            $data["offset"]=$offset;
        }
        if(isset($limit)){
            $data["limit"]=$limit;
        }

        $response = $this->control_api("/getUserProfilePhotos", $data);

        return $response;
    }

    public function read_post_message(){
        return json_decode(file_get_contents('php://input'));
    }

}
?>

но при запуске send.php не отправлять сообщение на канал, но когда я заменяю chat_id частным chat_id или групповым chat_id, этот код выполняется очень круто и отправляет сообщение группе или моему контакту

Простите за мой английский язык, извините :)


person saman    schedule 26.01.2016    source источник


Ответы (4)


Решено, я протестировал плагин httpRequster для отправки почтового запроса по этой ссылке:

https://api.telegram.org/bot1 ************ ******************* M / sendMessage

и опубликованные параметры: chat_id = @myChannel_username text = myMessage

Я не знаю, почему не работал мой старый код, но работаю с этим запросом: D

в любом случае, спасибо.

person saman    schedule 27.01.2016
comment
Убедитесь, что если это канал, используйте chat_id = @ xxxyxxyxyxyx, если это для группы, вы должны использовать chat_id = -xxyxxxyyxyx (- впереди). У меня тоже была та же проблема, и я решил. stackoverflow.com/questions/53018486/ - person Marx Babu; 06.11.2018

Бот должен быть администратором канала, чтобы иметь возможность отправлять сообщения. Ни один из клиентов не может помочь вам сделать бота администратором канала. Вы уверены, что ваш бот является администратором канала?

Источник: https://core.telegram.org/bots/api-changelog#october-8-2015

person Sunil D S    schedule 26.01.2016
comment
это право, но бот может отправлять сообщения на канал, если является администратором, или может отправлять сообщения всем тем, кто начинает разговор в чате с ботом. Источник: core.telegram.org/bots/api#sendmessage. - person saman; 27.01.2016

curl имеет эту проблему для SSL. добавьте этот код для решения проблемы:


        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
person user1499208    schedule 23.05.2016
comment
проверьте этот URL, он поможет повысить качество вашего контента - person Willie Cheng; 23.05.2016

Вы также можете использовать числовой chat_id вашего канала / группы / аккаунта, чтобы бот отправлял сообщения. Самый простой способ получить chat_id - переслать любое сообщение с вашего канала боту под названием @userinfobot.

person Ishmael    schedule 17.12.2019