fsa/telegram-bot-api

Telegram Bot API

v0.4.1 2024-05-01 11:07 UTC

This package is auto-updated.

Last update: 2024-08-31 00:26:49 UTC


README

该库可以用于简化与Telegram Bot API的交互 - https://core.telegram.org/bots/api。通过它,可以生成API请求并将其发送到服务器,同时支持使用Webhook。

此包装器可以在PHP的简单项目中使用,也可以在框架中作为一部分使用。在使用框架库时,需要创建以下服务(根据需要)

  1. TelegramBotApi -- 生成用于请求API的对象;
  2. TelegramBotQuery -- 用于向API发送请求的服务;
  3. TelegramBotWebhook -- 用于处理Webhook的辅助服务。

示例:Symfony,文件 config/services.yaml

    FSA\Telegram\TelegramBotApi:

    FSA\Telegram\TelegramBotQuery:
        bind:
            $token: '%env(resolve:TELEGRAM_BOT_API_TOKEN)%'

    FSA\Telegram\TelegramBotWebhook:
        bind:
            $token: '%env(resolve:TELEGRAM_BOT_API_SECRET)%'

安装

使用composer安装此库

composer require fsa/telegram-bot-api

创建请求服务器的消息

为Telegram Bot API的方法创建了相应的类。方法名与类名不同之处在于,类名以大写字母开头。

通过库可用的API方法

  • getFile;
  • getMe;
  • getUpdates;
  • getWebhookInfo;
  • sendAnimation;
  • sendAudio;
  • sendDice;
  • sendDocument;
  • sendLocation;
  • sendMessage;
  • sendPhoto;
  • sendSticker;
  • sendVideo;
  • setWebhook.

可以像通过TelegramBotApi类调用相应的方法一样,也可以直接使用相应的类来创建所需的请求。类的方法和构造函数作为参数需要为所选请求提供相应的必选参数。对于安装可选参数,可以使用方法链,例如

$message = (new FSA\Telegram\SendDice($chat_id, 1))->setDisableNotification()->setProtectContent();

$message = (new FSA\Telegram\TelegramBotApi)->sendDice($chat_id, 1)->setDisableNotification()->setProtectContent();

如果请求需要附加文件,则可以使用CURLFile来完成,包括通过过程式风格

$file = curl_file_create(realpath('my_photo.jpg'));
$message = (new FSA\Telegram\TelegramBotApi)->sendPhoto($chat_id, $file);

执行服务器请求

使用httpGet()httpPost()httpPostJson()方法执行服务器请求。在此过程中,需要在FSA\Telegram\TelegramBotQuery构造函数中设置访问令牌。

// Создание нового запроса
$telegram_bot_query = new FSA\Telegram\TelegramBotQuery('TOKEN');
// Создание метода sendMessage
$message = new FSA\Telegram\SendMessage($chat_id, "Привет");
// Передача запроса на сервер
$telegram_bot_query->httpPostJson($message);

或者在使用框架控制器时,将TelegramBotApi服务传递给$telegramBotApi,将TelegramBotQuery传递给$telegramBotQuery

$telegramBotQuery->httpPostJson($telegramBotApi->sendMessage($chat_id, 'Привет'));

任何用于API的方法的对象都实现了TelegramBotMethodInterface接口

  • getMethodName() - 允许获取API方法名;
  • getRequestParameters() - 请求参数以数组形式;
  • getWebhookResponse() - 获取用于生成Webhook响应的数组。

处理Webhook

使用TelegramBotWebhook不是必需的。它可以用来存储当前的Update,解码它,并验证秘密令牌。

$webhook = new FSA\Telegram\TelegramBotWebhook('SECRET');
$update = $webhook->verify($request->headers->get('X-Telegram-Bot-Api-Secret-Token'))->setUpdate($request->getContent())->getDecodedUpdate();

如果想要检查来自服务器的请求中的X-Telegram-Bot-Api-Secret-Token头,则需要指定SECRET值。

数据可以以原始形式、字符串形式获取

$update = $webhook->getUpdate();

可以多次获取请求数据。原始请求被保存在类内部。

可以通过任何API方法的getWebhookResponse()方法获取Webhook的响应

$this->json($telegramBotApi->sendMessage($chat_id, "Привет")->getWebhookResponse())->setEncodingOptions(JSON_UNESCAPED_UNICODE);

Update实体

如果需要,可以使用symfony/serializer或类似功能的包将Update分解成实体。所有必要的实体都收集在命名空间Entity中。

$webhook = new FSA\Telegram\Webhook;
$update = $serializer->deserialize($webhook->getUpdateRaw(), FSA\Telegram\Entity\Update::class, 'json');

此外,还可以在IDE中使用命名空间Entity中的类来生成提示,而无需直接使用。