PHP对接telegram

  • 前言我使用的是 larvel 框架,找了一个组件直接使用的。不过,如果自己写原生的对接,其实也很简单
    本文我假设我的机器人名字是 abc_bot

  • 推荐阅读 https://core.telegram.org/bots

  • 组件安装和使用
    https://telegram-bot-sdk.readme.io/docs
    组件的安装和使用,在上面的手册写的很详细,不再复述,API文档可手册是这个https://telegram-bot-sdk.readme.io/reference。下面说明几个常用的操作

1.创建机器人

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

  • 接收消息的设置
在 BotFather  对话框操作
/setprivacy
然后选择一个你的机器人,会弹出对话
'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: DISABLED
选择 `Enable` 则在群消息中只有 `/abc_bot 消息`的时候,你才能看到消息
选择 `Disable` 则可以看到群里的所有消息。

2. API 操作

  • 2.1 获取所有的消息

注意,在执行这个操作的时候,不能有 $telegram->setWebhook(),因为如果执行过 $telegram->setWebhook(),新数据其实是会直接返回给你指定的 url 的。如果你有开启,则需要执行 $telegram->removeWebhook() 关闭
注意这个操作最多可以获取100条数据,但是有两个参数可以使用
offset--开始获取数据的id,这个对应的是 update_id
limit-获取数据的条数

$key = config('telegram.bot_token');
 return $this->get('https://api.telegram.org/bot' . $key . '/getUpdates');
或者
$telegram = new Api($key);
return $telegram->getUpdates();

获取到的参数

message.message_id   - 消息ID,回复或者转发的时候可以用到
message.from.id  - 发送消息的人的ID
message.chat.id  - 所在群的ID,如果是个人发送给你的私信,则是个人ID  回复消息时候可以用到
  • 2.2 发送消息的操作
$this->telegram->sendMessage([
    'chat_id' => $chat_id, // 接收消息的人或者群的id-- message.chat.id
    'text' => $message, // 消息内容
    'parse_mode' => 'HTML', // 格式,这个可以不要
]);
  • 2.3 回复消息的操作
$this->telegram->sendMessage([
    'chat_id' => $chant_id, //  message.chat,id   这个id必须是消息发布的群,不然不能实现回复
    'reply_to_message_id' => $reply_message_id, // message.message_id  聊天中的具体一个消息id
    'text' => $text, //  回复内容
]);
  • 2.4 开启网站自动接收消息
网站必须是 https,路由随便你配置,只要跟你网站的匹配即可
$telegram->setWebhook(['url' => 'https://xxx.com/telegram/webhook']); 
在开启网站自动接收消息后,执行 $telegram->getUpdates(); 是无效的

然后机器人做在的群,每次有人发消息,都会 post  推送到 `https://xxx.com/telegram/webhook`,你可以做相应的处理
接收的文字是 message.text
如果是图片加文字,则是  message.caption 
  • 2.5 关闭网站自动接收消息
网站必须是 https,路由随便你配置,只要跟你网站的匹配即可
$telegram->removeWebhook(); 

你可能感兴趣的:(PHP对接telegram)