【问题标题】:send message to telegram channel by bot通过机器人向电报频道发送消息
【发布时间】:2016-05-03 12:14:44
【问题描述】:

我用电报 botfather 制作了一个电报机器人,我让我的机器人在我的公共电报频道中作为管理员,现在我想通过机器人在频道中发送消息,这是我的代码:

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 时,此代码非常酷,并向群组或我的联系人发送消息

对不起,我的英语语言,对不起 :)

【问题讨论】:

    标签: php sendmessage telegram-bot


    【解决方案1】:

    已解决,我使用 httpRequster 插件测试了向此链接发送 post 请求:

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

    和张贴的参数是: chat_id = @myChannel_username 文本 = 我的消息

    我不知道为什么不使用我的旧代码,而是使用这个请求:D

    谢谢。

    【讨论】:

    • 确保这是频道使用chat_id=@xxxyxxyxyxyx,如果这是群组,你必须使用chat_id = -xxyxxxyyxyx(前面的-)。我也有同样的问题并解决了。 stackoverflow.com/questions/53018486/…
    【解决方案2】:

    Bot 必须是频道的管理员才能发送消息。没有一个客户端可以帮助您使机器人成为频道的管理员。你确定你的机器人是频道的管理员吗?

    来源:https://core.telegram.org/bots/api-changelog#october-8-2015

    【讨论】:

    • 这个权利,但如果是管理员,bot 可以向频道发送消息,或者可以向所有与 bot 开始对话聊天的人发送消息。来源:core.telegram.org/bots/api#sendmessage
    【解决方案3】:

    curl 对于 SSL 有这个问题。 添加此代码以解决问题:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    【讨论】:

    • 请查看URL,它会很方便地提升您的内容质量
    【解决方案4】:

    您还可以使用您的频道/组/帐户的数字 chat_id 来制作机器人发送的消息。 获取 chat_id 的简单方法是将任何消息从您的频道转发到名为 @userinfobot 的机器人。

    【讨论】:

      猜你喜欢
      • 2020-08-25
      • 2017-03-19
      • 2017-05-11
      • 2017-09-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      相关资源
      最近更新 更多