红包
  • 注册
  • Telegram开发交流 Telegram开发交流 关注:65 内容:12

    使用PHP Webhook方式打造Telegram Bot

  • 查看作者
  • 打赏作者
  • 5
  • Telegram开发交流
  • 大版主
    初学乍练
    超级VIP
    冲向2023

    准备

    1. 本地测试需要有ssl才可以,可以通过免费版的ngrok来解决!

    2. 所有使用前提,都是要先浏览器打开  https://api.telegram.org/bot(BOT_TOKEN)/setWebhook?url=https://yoursite.com/your_update.php  设置好webhook

    3. webhook 和 getUpdate() 两种方式不能同时使用

    1.创建机器人

    使用浏览器访问 https://t.me/botfather 会自动跳转到 BotFather 的对话框,或者直接在手机 Telegram App 内搜索BotFather。这个是管理你机器人的命令对话框。与它的对话都要以/ 开头。有些指令。/help,可以看到所有的可用指令

     

    1. @BotFather带有以下文使用PHP Webhook方式打造Telegram Bot,获取telegram id, 获取telegram group id, PHP通过telegram bot给自己或群组发消息-OU开发交流论坛 (oo-uu.cc)本的消息:/newbot

    如果您不知道如何通过用户名发送消息,请单击Telegram应用程序上的搜索字段,然后键入@BotFather,您应该可以在其中发起对话。请注意不要将其发送给错误的联系人,因为某些用户的用户名与相似BotFather

    使用PHP Webhook方式打造Telegram Bot

    2. @BotFather 回复:

    Alright, a new bot. How are we going to call it? Please choose a name for your bot.

     

    3. 键入您的机器人想要的任何名称。

    4. @BotFather 回复:

    Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

     

    5. 输入您的机器人所需的用户名,至少5个字符,并且必须以结束bot。例如:telesample_bot

    6. @BotFather 回复:

    Done! Congratulations on your new bot. You will find it at
    telegram.me/telesample_bot. You can now add a description, about
    section and profile picture for your bot, see /help for a list of
    commands.
    Use this token to access the HTTP API:
    123456789:AAG90e14-0f8-40183D-18491dDE
    For a description of the Bot API, see this page:

     

    7. 记下上面提到的“令牌”。

    (可选)设置漫游器隐私:

    1. 发送/setprivacy@BotFather使用PHP Webhook方式打造Telegram Bot

       

      2. 轻松设置Telegram Bot WebHook

      为了使Bot响应来自Telegram用户的请求,您需要手动请求对Bot API的更新,或者您可以注册一个WebHook以在更新可用后自动被调用。

      后者是一种更好,更有效的解决方案。

      话虽这么说,为Bot设置WebHook的最快和最简单的方法是向Bot API发出GET请求(足以在浏览器中打开URL)。

      所有你需要做的就是通过以下网址调用setWebHook方法:

      https://api.telegram.org/bot{my_bot_token}/setWebhook?url={url_to_send_updates_to}

       

      用法

      例如:

       

      通过浏览器打开网址,你会看到:

      {"ok":true,"result":true,"description":"Webhook was set"}

      那么,您已经完成了。

      现在,如果您转到以下网址(您必须用Bot令牌替换{my_bot_token})

      https://api.telegram.org/bot{my_bot_token}/getWebhookInfo

      您应该会看到以下内容:

      { "ok":true, "result": {   "url":"https://your-domain.com/bot.php",   "has_custom_certificate":false,   "pending_update_count":0,   "max_connections":40 }}

       

      如果你想获取更多信息,也可以打开网址:

      https://api.telegram.org/bot{my_bot_token}/getMe

       

       

       

      您应该会看到以下内容:

      {"ok": true,"result": {"id": your-chat-id,"is_bot": true,"first_name": "your-first-name","username": "your-username","can_join_groups": true,"can_read_all_group_messages": true,"supports_inline_queries": false}}

       

      更多操作,可以查看官网API: https://core.telegram.org/bots/api

       

      3. 在Telegram中给自己的bot发消息进行验证

      在你的webhook文件 https://your-domain.com/bot.php 写入测试代码:

      <?php define('BOT_TOKEN', 'YOURBOT:TOKEN');define('API_URL', 'https://api.telegram.org/bot'.BOT_TOKEN.'/'); // read incoming info and grab the chatID$content = file_get_contents("php://input");$update = json_decode($content, true);$chatID = $update["message"]["chat"]["id"];$got_message = $update["message"]["text"];// compose reply$reply =  $got_message;  // send reply$sendto =API_URL."sendmessage?chat_id=".$chatID."&text=".$reply;file_get_contents($sendto);

       

      用自己的telegram测试发信息给你的telegram bot,将会得到一样的回复!

       

      4. 如何查找自己的 telegram ID 或者 群组 ID group id

      您似乎必须通过机器人来获取此信息。搜索“userinfobot”并输入“ / start”。该漫游器会以您的句柄和ID进行响应。

      使用PHP Webhook方式打造Telegram Bot如何获取电报群组的ID?

      上面我们通过userinfobot这个机器人获取个人的chat_id, 使得机器人可以发消息给个人,群组则没办法通过这种方式获取其ID。

      通过下面的步骤可以获得群组ID:

      至此我们已经可以通过程序触发电报机器人下发消息给个人或群组了,只需要在你后台程序合适的地方触发即可,或者设立定时任务来触发下发消息或报表。

      除了发送文本消息,还可以发送图片,语音,视频,动画,文件等等。

       

      5. API 操作

      大概可以用到的函数:

      // 向telegram bot指定域名public function setWebhook(){    $url = 'https://api.telegram.org/bot' . $this->token . '/setWebhook';    $data = [        'url' => $this->callback. '?token=' . md5($this->token),    ];    $result = $this->curl_post($url, $data);}# 这里token就是创建机器人时得到的token,callback为你自己的回调路径通过post发送给bot,$result返回信息会告诉你回调路径是否设置成功// 接收bot回调信息public function receive(){    $input = file_get_contents('php://input');    $input = json_decode($input, true);}#设置成功后每当bot接收到信息就会回调到receive方法,根据$input接收到的数据进行逻辑处理// 删除回调public function deleteWebhook(){    $url = 'https://api.telegram.org/bot' . $this->token . '/deleteWebhook';    $data = [        'url' => $this->callback. '?token=' . md5($this->token),    ];    $result = $this->curl_post($url, $data);}// 查看当前回调信息public function getWebhookInfo(){    $url = 'https://api.telegram.org/bot' . $this->token . '/getWebhookInfo';    $data = [        'url' => $this->callback. '?token=' . md5($this->token),    ];    $result = $this->curl_post($url, $data);}// postpublic function curl_post($url, $data){    $curl = curl_init();    curl_setopt($curl, CURLOPT_URL, $url);    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);    curl_setopt($curl, CURLOPT_POST, 1);    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);    $result = curl_exec($curl);    curl_close($curl);    return $result;}# 回复用户信息,可以在前面$input中拿到消息的chatid// 回复用户信息public function sendMessage($chatId, $text){    $url = 'https://api.telegram.org/bot' . $this->token . '/sendMessage';    $param = "?chat_id=".$chatId."&text=".$text;    $data = [        'chat_id' => $chatId,        'text' => $text,    ];    $result = $this->curl_post($url, $data);    $result = json_decode($result, true);    if ($result['ok'] == true) {        return true;    } else {        $this->writeLog("error");        return false;    }}

      如果你不使用PHP,可以通过CURL来测试下发消息,CURL代码如下:

       

       

      curl -X POST “https://api.telegram.org/bot<token>/sendMessage" -d "chat_id=-xxx&text=Justcode"

      你也可以使用php库:TelegramBotPHP 或者 php-telegram-bot

      • my_bot_token是您在创建Bot时从BotFather获得的令牌

      • url_to_send_updates_to是您为实现Bot行为而编写的代码的URL(必须为HTTPS)

      1. 在群里发送任意消息

      2. 打开这个网址 api.telegram.org/bot<替换成你机器人的token, 包括尖括号>/getUpdates, 页面会输出一段JSON

      3. 查找 id: -xxx 的一段值,这里的 -xxx 就是群组ID,机器人下发消息的时候的chat_id字段使用这个即可发送消息到群组了

      4. @BotFather 回复:

        Choose a bot to change group messages settings.
      5. 键入(或选择)@telesample_bot(更改为您在上面的第5步中设置的用户名,但以开头@

      6. @BotFather 回复:

        'Enable' - your bot will only receive messages that either start with the '/' symbol or mention the bot by username.
        'Disable' - your bot will receive all messages that people send to groups.
        Current status is: ENABLED
      7. 键入(或选择)Disable,让您的漫游器接收发送到组的所有消息。

      8. @BotFather 回复:

        Success! The new status is: DISABLED. /help
    2. 安装 TelegramBotPHP

      git clone https://github.com/Eleirbag89/TelegramBotPHP.git

      所有使用前提,都是要先浏览器打开  https://api.telegram.org/bot(BOT_TOKEN)/setWebhook?url=https://yoursite.com/your_update.php  设置好webhook

      使用:

      主动发信息,需要打开send.php

      <?phpinclude 'TelegramBotPHP/Telegram.php';$telegram = new Telegram('your-taken');$chat_id = $telegram->ChatID();$content = array('chat_id' => $chat_id, 'text' => 'Are you OK? Hello, Thank You!');$telegram->sendMessage($content);

       

      接收信息或者信息交互,需要打开bot.php 或者 update.php ,也就是 注册 webhook 的页面

      <?phpinclude 'TelegramBotPHP/Telegram.php';$telegram = new Telegram('your-token');$result = $telegram->getData();$text = $result['message'] ['text'];$chat_id = $result['message'] ['chat']['id'];$content = array('chat_id' => $chat_id, 'text' => 'Test');$telegram->sendMessage($content);

       

      发图片:

      // Load a local file to upload. If is already on Telegram's Servers just pass the resource id$img = curl_file_create('test.png','image/png'); $content = array('chat_id' => $chat_id, 'photo' => $img );$telegram->sendPhoto($content);

       

      下载文件:

      $file = $telegram->getFile($file_id);$telegram->downloadFile($file['result']['file_path'], './my_downloaded_file_on_local_server.png');

       

      如果要使用getUpdates而不是WebHook,则需要serveUpdate在for循环内调用该函数。

      $telegram = new Telegram('YOUR TELEGRAM TOKEN HERE');$req = $telegram->getUpdates();for ($i = 0; $i < $telegram-> UpdateCount(); $i++) {  // You NEED to call serveUpdate before accessing the values of message in Telegram Class  $telegram->serveUpdate($i);  $text = $telegram->Text();  $chat_id = $telegram->ChatID();  if ($text == '/start') {    $reply = 'Working';    $content = array('chat_id' => $chat_id, 'text' => $reply);    $telegram->sendMessage($content);  }  // DO OTHER STUFF}

    使用PHP Webhook方式打造Telegram Bot,获取telegram id, 获取telegram group id, PHP通过telegram bot给自己或群组发消息-OU开发交流论坛 (oo-uu.cc)

    略有小成
    王者VIP

    1

    回复
    自成一派
    冲向2023

    码字不易,支持一下! [s-17]

    药水哥tg:@zzzbbbcccddd

    回复
    初学乍练
    初级VIP

    支持

    回复
    登堂入室
    王者VIP
    冲向2023

    666

    澳大利亚实卡接各种项目TG:@Aumix_SMS

    回复
    炉火纯青
    星耀VIP

    [s-84]

    多年以后,我们依然可以相聚欢笑,畅谈人生

    回复

    请登录之后再进行评论

    登录
    • 大版主
    • 小版主
  • B哥哥
    B哥哥
    电报 @buzhiguiqi
  • 暂没有数据

    Telegram开发交流
  • 今日 0
  • 内容 12
  • 关注 65
  • 赚金币
  • 实时动态
  • 偏好设置
  • 帖子间隔 侧栏位置: