telegram-api实战指南:打造支持内联机器人(Inline Bots)的PHP应用

【免费下载链接】telegram-api Complete async capable Telegram bot API implementation for PHP7 【免费下载链接】telegram-api 项目地址: https://gitcode.com/gh_mirrors/te/telegram-api

telegram-api是一个基于PHP7的完整异步Telegram机器人API实现,它允许开发者轻松构建功能丰富的Telegram机器人应用。本文将详细介绍如何使用telegram-api库创建支持内联机器人(Inline Bots)的PHP应用,帮助你快速掌握内联机器人开发的核心技能。

内联机器人简介:提升用户交互体验的新方式

内联机器人是Telegram提供的一种特殊机器人类型,它允许用户在任何聊天中通过输入@机器人用户名直接与机器人交互,而无需单独打开聊天窗口。这种交互方式极大地提升了用户体验,使机器人功能更易于访问和使用。

内联机器人主要通过两种方式工作:

  • 内联查询(Inline Query): 用户输入@机器人名 查询内容触发机器人响应
  • 内联键盘(Inline Keyboard): 机器人发送包含按钮的消息,用户点击按钮进行交互

Telegram内联机器人交互示例 图:Telegram内联机器人交互界面示意图

快速开始:搭建开发环境

要开始开发内联机器人,首先需要搭建基础开发环境:

1. 安装telegram-api库

使用Composer安装telegram-api库:

composer require unreal4u/telegram-api

或者直接克隆仓库:

git clone https://gitcode.com/gh_mirrors/te/telegram-api
cd telegram-api
composer install

2. 配置Telegram机器人

  1. 在Telegram中搜索@BotFather
  2. 发送/newbot命令创建新机器人
  3. 记录BotFather提供的API令牌
  4. 发送/setinline命令启用内联模式

核心组件解析:内联机器人的工作原理

telegram-api库提供了完整的内联机器人支持,主要通过以下核心组件实现:

内联查询处理

当用户发送内联查询时,Telegram会向机器人的Webhook发送一个包含inline_query字段的更新。我们可以在代码中通过检查Update对象来处理内联查询:

$update = $tgLog->getWebhookUpdate();
if (!empty($update->inline_query)) {
    // 处理内联查询
}

相关类定义在:src/Telegram/Types/Update.php

内联结果构建

处理内联查询后,机器人需要返回结果。telegram-api提供了多种内联结果类型,如文章、照片、GIF等,定义在src/Telegram/Types/Inline/Query/Result/目录下。

最常用的是文章类型(Article):

use unreal4u\TelegramAPI\Telegram\Types\Inline\Query\Result\Article;
use unreal4u\TelegramAPI\Telegram\Types\InputMessageContent\Text;

$article = new Article();
$article->id = 'unique-id-1';
$article->title = '示例文章';
$article->input_message_content = new Text();
$article->input_message_content->text = '这是内联结果的内容';

回复内联查询

构建结果后,使用AnswerInlineQuery方法回复查询:

use unreal4u\TelegramAPI\Telegram\Methods\AnswerInlineQuery;

$answer = new AnswerInlineQuery();
$answer->inline_query_id = $update->inline_query->id;
$answer->results = [$article];

$tgLog->performApiRequest($answer);

相关实现可查看:src/Telegram/Methods/AnswerInlineQuery.php

实战案例:创建你的第一个内联机器人

下面我们将创建一个简单的内联机器人,它能够响应文本查询并返回相关结果。

1. 设置Webhook

首先需要设置Webhook,让Telegram能够将更新发送到你的服务器:

use unreal4u\TelegramAPI\TgLog;
use unreal4u\TelegramAPI\Telegram\Methods\SetWebhook;

$botToken = '你的机器人API令牌';
$tgLog = new TgLog($botToken);

$setWebhook = new SetWebhook();
$setWebhook->url = 'https://你的服务器地址/webhook.php';

$tgLog->performApiRequest($setWebhook);

2. 实现Webhook处理脚本

创建webhook.php文件处理Telegram发送的更新:

use unreal4u\TelegramAPI\TgLog;
use unreal4u\TelegramAPI\Telegram\Types\Update;
use unreal4u\TelegramAPI\Telegram\Methods\AnswerInlineQuery;
use unreal4u\TelegramAPI\Telegram\Types\Inline\Query\Result\Article;
use unreal4u\TelegramAPI\Telegram\Types\InputMessageContent\Text;

$botToken = '你的机器人API令牌';
$tgLog = new TgLog($botToken);

// 获取Telegram发送的更新
$update = $tgLog->getWebhookUpdate();

// 处理内联查询
if (!empty($update->inline_query)) {
    $query = $update->inline_query->query;
    
    // 创建内联结果
    $article = new Article();
    $article->id = '1';
    $article->title = '你查询的内容: ' . $query;
    
    $textContent = new Text();
    $textContent->text = "你查询了: \"$query\"\n这是内联机器人的响应结果";
    $article->input_message_content = $textContent;
    
    // 回复内联查询
    $answer = new AnswerInlineQuery();
    $answer->inline_query_id = $update->inline_query->id;
    $answer->results = [$article];
    
    $tgLog->performApiRequest($answer);
}

3. 添加内联键盘

内联键盘是增强用户交互的重要方式,可以添加到消息中供用户点击:

use unreal4u\TelegramAPI\Telegram\Types\Inline\Keyboard\Markup;
use unreal4u\TelegramAPI\Telegram\Types\Inline\Keyboard\Button;
use unreal4u\TelegramAPI\Telegram\Types\Custom\InlineKeyboardButtonArray;

// 创建内联键盘
$keyboard = new Markup();
$keyboard->inline_keyboard = new InlineKeyboardButtonArray();

// 创建按钮
$button = new Button();
$button->text = '点击我';
$button->callback_data = 'button_clicked';

// 添加按钮到键盘
$keyboard->inline_keyboard->append($button);

// 将键盘添加到文章结果
$article->reply_markup = $keyboard;

相关类定义在:

高级技巧:优化内联机器人性能

1. 使用缓存结果

对于频繁查询的相同内容,可以使用缓存来提高响应速度:

$cacheKey = 'inline_query_' . md5($query);
if ($cachedResult = getFromCache($cacheKey)) {
    // 使用缓存结果
    $answer->results = json_decode($cachedResult, true);
} else {
    // 生成新结果
    // ...
    saveToCache($cacheKey, json_encode($answer->results), 3600); // 缓存1小时
}

2. 分页加载结果

当结果较多时,可以使用分页加载:

$offset = $update->inline_query->offset ?? 0;
$limit = 20; // 每页20个结果

// 计算结果范围
$start = $offset;
$end = $offset + $limit;

// 截取结果
$answer->results = array_slice($allResults, $start, $limit);

// 设置下一页偏移量
if ($end < count($allResults)) {
    $answer->next_offset = (string)$end;
}

3. 处理回调查询

当用户点击内联键盘按钮时,会触发回调查询:

if (!empty($update->callback_query)) {
    $callbackData = $update->callback_query->data;
    // 处理回调数据
}

测试与部署:让你的内联机器人上线

本地测试

可以使用Telegram提供的getUpdates方法进行本地测试,而无需设置Webhook:

use unreal4u\TelegramAPI\Telegram\Methods\GetUpdates;

$getUpdates = new GetUpdates();
$getUpdates->offset = 0;
$getUpdates->limit = 100;
$getUpdates->timeout = 30;

$updates = $tgLog->performApiRequest($getUpdates);
foreach ($updates->result as $update) {
    // 处理更新
}

示例代码可参考:examples/get-updates.php

部署到生产环境

  1. 确保服务器支持HTTPS(Telegram Webhook要求)
  2. 设置适当的防火墙规则,只允许Telegram服务器访问
  3. 考虑使用进程管理工具如Supervisor来确保机器人持续运行
  4. 添加日志记录功能,方便调试和监控

总结:开启内联机器人开发之旅

通过telegram-api库,我们可以轻松构建功能强大的内联机器人。本文介绍了内联机器人的基本概念、核心组件和实战案例,帮助你快速上手内联机器人开发。

内联机器人为Telegram用户提供了更加便捷的交互方式,是提升机器人用户体验的重要手段。无论是创建工具类机器人、信息查询机器人还是游戏机器人,内联功能都能大大增强其可用性和吸引力。

现在,你已经掌握了开发内联机器人的基础知识,快去创建你的第一个内联机器人吧!如有疑问,可以查阅项目源代码中的示例和测试用例,获取更多灵感和解决方案。

【免费下载链接】telegram-api Complete async capable Telegram bot API implementation for PHP7 【免费下载链接】telegram-api 项目地址: https://gitcode.com/gh_mirrors/te/telegram-api

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐