php telegrambot

前言

  • 什么是Telegram Bot
    Telegram Bot是运行在Telegram内部的第三方应用程序,相当于Telegram的一个特殊账户。而且

Bots never eat, sleep or complain unless expressly programmed otherwise 官方吐槽

Telegram Bot的创建非常简单,只需要@botfather进行交互,详见下文。Bot的API非常全面,并且完全免费,不过消息有保存上限,有需要可以连接到SQL数据库保存。
-

  • 文章内容

本文记录使用PHP Telegram Bot 创建复读机器人的方法。

更多内容可以查询Telegram Bot API 文档

目录

点击文字快速跳转


准备

  1. Telegram客户端,下载
  2. 一台服务器(国内需要配置全局代理)
  3. 一点点PHP编程基础
  4. 国内自备梯子

创建你的Bot

  1. 登录客户端,查找 @BotFather(官方的机器人管理)
  2. 输入:/newbot,回复Bot名称,接着回复Bot用户名
  3. 创建完成Telegram Bot账号,并保存后相关的token(点击即可复制,格式为xxxxx:xxxxxxxxxxxxx
    创建bot

用户名是一个简短的名字,提到和t.me链接使用。用户名长度为5-32个字符,不区分大小写,但只能包含拉丁字符,数字和下划线。您的机器人的用户名必须以“bot”结尾,例如“ tetris_bot”或“ TetrisBot”。

如果您无法正确创建Bot可以查看官方文档

  • 编辑机器人
    下方给出了几条机器人基本操作命令,本文章暂时使用不到,有兴趣的可以尝试一下。

/ setname –更改您的机器人名称。
/ setdescription —更改机器人的描述
/ setabouttext-更改漫游器的about info
/ setuserpic-更改机器人的个人资料图片
/ setcommands-更改您的机器人支持的命令列表
/ deletebot-删除您的机器人并释放其用户名


创建站点并绑定域名

在服务器上开设站点绑定域名、导入域名的ssl证书。这里我用的宝塔面板,全程图形界面没有难度,详细操作不做赘述。
服务器具体要求参考官方WebHOOK要求

您将需要一个服务器:
支持IPv4Webhooks当前不支持IPv6
接受来自子网149.154.160.0/20以及91.108.4.0/22端口443、80、888443的传入POST
能够处理TLS1.2(+) HTTPS流量。
提供受支持的,非通配符,已验证或自签名的证书。
使用与您在设置时提供的域匹配的CNSAN

提供所有中间证书以完成验证链。


设置Webhook模式

Telegram提供了getUpdatesWebhook两种交互模式。getUpdates是拉机制,setWebhook是推机制。
Webhook模式下官方会将机器人收到的数据处理回传到目标服务器,我们正需要这种。

  • 搭建基于Https协议的服务器,并设置webhoots url
    (供Telegram回调的服务器路径),官方提供了四种设置方式,具体可以参考官方建议。最简单的方式如下:
https://api.telegram.org/bot填入你的token/setWebhook?url=https://服务器的回调路径
  • 例如:我们将其指向网站根目录的repeater.php,所以我们这样写。
https://api.telegram.org/bot填xxxx:xxxxxxxxxxxxx/setWebhook?url=https://www.lawsonofo.top/repeater.php

粘贴到地址栏,根据自己需求修改两个参数,回车访问地址。如果返回数据包含Webhook was set 恭喜你设置成功!现在我们可以处理回传数据了。


编写后台文件

现在telegram已经将数据已json格式发送到你的服务器repeater.php中。接下来我们需要对数据进行简单格式化处理,并实现复读功能。

  • 首先在网站根目录新建名为repeater.php的文件。
  • 粘贴并修改以下代码。
<?php
 
$token = '你的token';
$link = 'https://api.telegram.org/bot'.$token.'';

$data = json_decode(file_get_contents('php://input'), TRUE); //读取json并对其格式化
$chatid = $data['message']['chat']['id'];//获取chatid
$message = "你说的是:".$data['message']['text'];//获取message
 
$parameter = array(
        'chat_id' => $chatid,
        'text' => $message,
        );//消息整合
file_get_contents($link.'/sendMessage?'.http_build_query($parameter));//发送消息
 ?>
  • 文件保存后我们私聊bot,不出意外现在勤劳的复读机已经开始工作了。
    完成测试

预告:使用TelegramBot制作聊天统计