Telegram Bot API sendChecklist 使用教程
## 1. sendChecklist 方法用途介绍
sendChecklist 是 Telegram Bot API 提供的一个方法,允许机器人代表企业账户向指定聊天发送清单消息,支持创建、编辑和管理交互式任务列表。
**主要用途:**
- 创建和发送交互式任务清单
- 管理待办事项和项目任务
- 与用户进行任务协作和跟进
- 提供结构化的信息列表
**核心特点:**
- 支持创建可勾选的任务项
- 可设置任务状态(已完成/未完成)
- 支持编辑已发送的清单
- 仅适用于企业账户的机器人
- 可与其他消息类型结合使用
- 支持所有常规消息发送选项(如禁用通知、回复消息等)
## 2. 原生 PHP 调用实例
### 2.1 准备工作
确保你的 PHP 环境满足以下要求:
- PHP 5.6 或更高版本
- 已安装 cURL 扩展
- 已创建 Telegram Bot 并获取 Bot Token
- 机器人必须关联到企业账户
### 2.2 发送基本任务清单
<?php
/**
* 使用 Telegram Bot API 发送基本任务清单
* @param string $botToken Bot Token
* @param int|string $chatId 聊天 ID
* @param string $title 清单标题
* @param array $tasks 任务列表
* @return array 响应结果
*/
function sendBasicChecklist($botToken, $chatId, $title, $tasks) {
$url = "https://api.telegram.org/bot{$botToken}/sendChecklist";
// 构建任务数组
$inputTasks = [];
foreach ($tasks as $task) {
$inputTasks[] = [
'text' => $task['text'],
'is_done' => $task['is_done'] ?? false
];
}
$data = [
'chat_id' => $chatId,
'title' => $title,
'tasks' => json_encode($inputTasks)
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// 使用示例
$botToken = "YOUR_BOT_TOKEN";
$chatId = 123456789; // 用户或群组的聊天 ID
$title = "今日待办事项";
$tasks = [
['text' => '完成项目报告', 'is_done' => false],
['text' => '参加团队会议', 'is_done' => false],
['text' => '回复客户邮件', 'is_done' => true],
['text' => '更新项目文档', 'is_done' => false]
];
$result = sendBasicChecklist($botToken, $chatId, $title, $tasks);
if ($result['ok']) {
echo "任务清单发送成功!消息 ID: " . $result['result']['message_id'];
} else {
echo "发送失败:" . $result['description'];
}
?>
```
### 2.3 发送带高级选项的任务清单
```php
<?php
/**
* 使用 Telegram Bot API 发送带高级选项的任务清单
* @param string $botToken Bot Token
* @param int|string $chatId 聊天 ID
* @param string $title 清单标题
* @param array $tasks 任务列表
* @param array $options 高级选项
* @return array 响应结果
*/
function sendAdvancedChecklist($botToken, $chatId, $title, $tasks, $options = []) {
$url = "https://api.telegram.org/bot{$botToken}/sendChecklist";
// 构建任务数组
$inputTasks = [];
foreach ($tasks as $task) {
$inputTask = [
'text' => $task['text'],
'is_done' => $task['is_done'] ?? false
];
$inputTasks[] = $inputTask;
}
$data = [
'chat_id' => $chatId,
'title' => $title,
'tasks' => json_encode($inputTasks)
];
// 合并高级选项
$allowedOptions = [
'business_connection_id', 'message_thread_id', 'disable_notification',
'protect_content', 'reply_to_message_id', 'allow_sending_without_reply',
'reply_markup', 'direct_messages_topic_id', 'suggested_post_parameters'
];
foreach ($allowedOptions as $option) {
if (isset($options[$option])) {
$data[$option] = $options[$option];
}
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// 使用示例 - 带高级选项的任务清单
$botToken = "YOUR_BOT_TOKEN";
$chatId = 123456789;
$title = "项目开发计划";
$tasks = [
['text' => '需求分析与设计', 'is_done' => true],
['text' => '前端开发', 'is_done' => true],
['text' => '后端开发', 'is_done' => false],
['text' => '测试与调试', 'is_done' => false],
['text' => '部署与上线', 'is_done' => false]
];
$result = sendAdvancedChecklist(
$botToken,
$chatId,
$title,
$tasks,
[
'disable_notification' => false,
'protect_content' => true,
'reply_to_message_id' => null, // 可设置回复的消息 ID
'allow_sending_without_reply' => true
]
);
if ($result['ok']) {
echo "高级任务清单发送成功!消息 ID: " . $result['result']['message_id'];
} else {
echo "发送失败:" . $result['description'];
}
?>
```
### 2.4 编辑已发送的任务清单
```php
<?php
/**
* 使用 Telegram Bot API 编辑已发送的任务清单
* @param string $botToken Bot Token
* @param int|string $chatId 聊天 ID
* @param int $messageId 清单消息 ID
* @param string $title 新的清单标题(可选)
* @param array $tasks 新的任务列表(可选)
* @return array 响应结果
*/
function editChecklist($botToken, $chatId, $messageId, $title = null, $tasks = null) {
$url = "https://api.telegram.org/bot{$botToken}/editMessageChecklist";
$data = [
'chat_id' => $chatId,
'message_id' => $messageId
];
// 添加可选参数
if ($title !== null) {
$data['title'] = $title;
}
if ($tasks !== null) {
$inputTasks = [];
foreach ($tasks as $task) {
$inputTask = [
'text' => $task['text'],
'is_done' => $task['is_done'] ?? false
];
$inputTasks[] = $inputTask;
}
$data['tasks'] = json_encode($inputTasks);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// 使用示例 - 编辑任务清单
$botToken = "YOUR_BOT_TOKEN";
$chatId = 123456789;
$messageId = 12345; // 已发送的清单消息 ID
// 更新任务状态和标题
$newTitle = "项目开发计划(更新)";
$updatedTasks = [
['text' => '需求分析与设计', 'is_done' => true],
['text' => '前端开发', 'is_done' => true],
['text' => '后端开发', 'is_done' => true], // 标记为已完成
['text' => '测试与调试', 'is_done' => true], // 标记为已完成
['text' => '部署与上线', 'is_done' => false],
['text' => '项目验收', 'is_done' => false] // 新增任务
];
$result = editChecklist($botToken, $chatId, $messageId, $newTitle, $updatedTasks);
if ($result['ok']) {
echo "任务清单编辑成功!";
} else {
echo "编辑失败:" . $result['description'];
}
?>
```
### 2.5 完整的 Telegram Bot 清单发送类
```php
<?php
class TelegramChecklistBot {
private $botToken;
/**
* 构造函数
* @param string $botToken Bot Token
*/
public function __construct($botToken) {
$this->botToken = $botToken;
}
/**
* 发送基本任务清单
* @param int|string $chatId 聊天 ID
* @param string $title 清单标题
* @param array $tasks 任务列表
* @return array 响应结果
*/
public function sendChecklist($chatId, $title, $tasks) {
return $this->sendAdvancedChecklist($chatId, $title, $tasks, []);
}
/**
* 发送带高级选项的任务清单
* @param int|string $chatId 聊天 ID
* @param string $title 清单标题
* @param array $tasks 任务列表
* @param array $options 高级选项
* @return array 响应结果
*/
public function sendAdvancedChecklist($chatId, $title, $tasks, $options = []) {
$url = "https://api.telegram.org/bot{$this->botToken}/sendChecklist";
// 验证任务格式
if (!is_array($tasks) || empty($tasks)) {
return [
'ok' => false,
'error_code' => 400,
'description' => '任务列表不能为空且必须是数组'
];
}
// 构建任务数组
$inputTasks = [];
foreach ($tasks as $task) {
if (!isset($task['text']) || empty($task['text'])) {
return [
'ok' => false,
'error_code' => 400,
'description' => '每个任务必须包含text字段'
];
}
$inputTask = [
'text' => $task['text'],
'is_done' => isset($task['is_done']) ? (bool)$task['is_done'] : false
];
$inputTasks[] = $inputTask;
}
$data = [
'chat_id' => $chatId,
'title' => $title,
'tasks' => json_encode($inputTasks)
];
// 合并高级选项
$allowedOptions = [
'business_connection_id', 'message_thread_id', 'disable_notification',
'protect_content', 'reply_to_message_id', 'allow_sending_without_reply',
'reply_markup', 'direct_messages_topic_id', 'suggested_post_parameters'
];
foreach ($allowedOptions as $option) {
if (isset($options[$option])) {
$data[$option] = $options[$option];
}
}
return $this->sendRequest($url, $data);
}
/**
* 编辑已发送的任务清单
* @param int|string $chatId 聊天 ID
* @param int $messageId 清单消息 ID
* @param string $title 新的清单标题(可选)
* @param array $tasks 新的任务列表(可选)
* @return array 响应结果
*/
public function editChecklist($chatId, $messageId, $title = null, $tasks = null) {
$url = "https://api.telegram.org/bot{$this->botToken}/editMessageChecklist";
$data = [
'chat_id' => $chatId,
'message_id' => $messageId
];
// 添加可选参数
if ($title !== null) {
$data['title'] = $title;
}
if ($tasks !== null) {
// 验证任务格式
if (!is_array($tasks) || empty($tasks)) {
return [
'ok' => false,
'error_code' => 400,
'description' => '任务列表不能为空且必须是数组'
];
}
$inputTasks = [];
foreach ($tasks as $task) {
if (!isset($task['text']) || empty($task['text'])) {
return [
'ok' => false,
'error_code' => 400,
'description' => '每个任务必须包含text字段'
];
}
$inputTask = [
'text' => $task['text'],
'is_done' => isset($task['is_done']) ? (bool)$task['is_done'] : false
];
$inputTasks[] = $inputTask;
}
$data['tasks'] = json_encode($inputTasks);
}
return $this->sendRequest($url, $data);
}
/**
* 发送 HTTP 请求
* @param string $url 请求 URL
* @param array $data 请求数据
* @return array 响应结果
*/
private function sendRequest($url, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
$error = curl_error($ch);
curl_close($ch);
return [
'ok' => false,
'error_code' => $httpCode,
'description' => 'cURL 错误: ' . $error
];
}
curl_close($ch);
return json_decode($response, true);
}
}
// 使用示例
$botToken = "YOUR_BOT_TOKEN";
$bot = new TelegramChecklistBot($botToken);
$chatId = 123456789;
// 发送任务清单
echo "发送任务清单...\n";
$tasks = [
['text' => '准备会议材料', 'is_done' => false],
['text' => '安排会议时间', 'is_done' => true],
['text' => '发送会议邀请', 'is_done' => true],
['text' => '准备演示幻灯片', 'is_done' => false]
];
$result = $bot->sendAdvancedChecklist(
$chatId,
"会议准备清单",
$tasks,
[
'disable_notification' => false,
'protect_content' => false
]
);
if ($result['ok']) {
echo "任务清单发送成功!消息 ID: " . $result['result']['message_id'] . "\n";
$messageId = $result['result']['message_id'];
// 示例:更新任务清单(实际使用时取消注释)
// sleep(5); // 等待5秒
// echo "更新任务清单...\n";
// $updatedTasks = $tasks;
// $updatedTasks[0]['is_done'] = true; // 标记第一个任务为已完成
// $updatedTasks[] = ['text' => '检查设备是否正常', 'is_done' => false]; // 添加新任务
//
// $editResult = $bot->editChecklist($chatId, $messageId, "会议准备清单(更新)", $updatedTasks);
// if ($editResult['ok']) {
// echo "任务清单更新成功!\n";
// } else {
// echo "更新失败:" . $editResult['description'] . "\n";
// }
} else {
echo "发送失败:" . $result['description'] . "\n";
}
?>
注意事项
1. **账户要求:**
- sendChecklist 方法仅适用于企业账户的机器人
- 普通机器人无法使用此方法
2. **任务格式:**
- 每个任务必须包含 `text` 字段(任务描述)
- `is_done` 字段可选,默认为 `false`
- 任务数量没有明确限制,但建议保持在合理范围内
3. **编辑限制:**
- 只能编辑由同一机器人发送的清单
- 编辑时可以只更新标题或任务列表中的一项
4. **消息选项:**
- 支持所有常规消息发送选项
- 可以与 direct_messages_topic_id 一起使用,发送到 Direct Messages 聊天主题
- 可以设置 suggested_post_parameters 参数,发送建议的帖子
5. **聊天 ID 格式:**
- 私人聊天 ID 是整数
- 群组和频道 ID 通常以 `-100` 开头的负数
## 3. 应用场景
- **项目管理:** 跟踪项目任务和进度
- **会议准备:** 创建会议议程和待办事项
- **客户服务:** 管理客户请求和跟进事项
- **团队协作:** 分配和跟踪团队任务
- **个人待办:** 创建个人任务清单
## 4. 运行指南
1. 将以上代码保存为 `.php` 文件
2. 替换 `YOUR_BOT_TOKEN` 为你的实际 Bot Token
3. 替换聊天 ID、清单标题和任务为实际值
4. 确保你的机器人已关联到企业账户
5. 在命令行或浏览器中运行 PHP 文件
```bash
php telegram-send-checklist.php

发表评论 取消回复