本文目录导读:

- Telegram Bot 集成 (免费 & 简单)
- WhatsApp 集成 (官方 & 商业)
- 核心对比:Telegram vs WhatsApp
- 关键决策建议
- 常见问题及解决方案
- 代码示例:简单Webhook接收(PHP)
这是一个非常宽泛的题目,在PHP项目中集成Telegram与WhatsApp,通常指的是发送消息通知(如订单提醒、验证码、客服消息)或接收消息(如构建聊天机器人)。
核心区别在于:Telegram Bot API 是开放且免费的,而 WhatsApp 的官方API(Cloud API/On-Premises API)是受限制且需要付费或商业验证的。
以下为您梳理在PHP项目中实现Telegram与WhatsApp集成的方案、代码示例与关键注意事项。
Telegram Bot 集成 (免费 & 简单)
Telegram 提供了非常完善的 HTTP Bot API,无需购买服务,只需几行代码即可发送消息。
核心步骤
- 创建Bot: 在Telegram中搜索
@BotFather,发送/newbot,获取token(7234567890:AAHTx...). - 获取Chat ID: 向你的Bot发送一条消息,然后访问
https://api.telegram.org/bot<你的Token>/getUpdates获取chat_id。
PHP 代码示例 (使用 cURL)
<?php
class TelegramBot {
private $token = 'YOUR_BOT_TOKEN_HERE';
public function sendMessage($chatId, $message) {
$url = "https://api.telegram.org/bot{$this->token}/sendMessage";
$postData = [
'chat_id' => $chatId,
'text' => $message,
'parse_mode' => 'HTML' // 可选:MarkdownV2, HTML
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 生产环境建议开启
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
}
// 使用示例
$bot = new TelegramBot();
$result = $bot->sendMessage('123456789', '<b>新订单提醒</b>\n用户ID: 1001');
print_r($result);
?>
高级功能
- Webhook 接收消息:设置一个公开的URL,Telegram会将用户消息实时推送到你的服务器,适合构建聊天机器人。
- 设置Webhook:
https://api.telegram.org/bot<token>/setWebhook?url=https://yourdomain.com/hook.php
- 设置Webhook:
- 发送文件/图片:使用
sendPhoto,sendDocument等方法。 - 使用PHP SDK:推荐
irazasyed/telegram-bot-sdk(Laravel) 或原生TelegramBot/Api。
WhatsApp 集成 (官方 & 商业)
WhatsApp 没有免费的开放API,目前官方推荐的方式是 WhatsApp Cloud API(由Meta提供)或 WhatsApp Business API。
核心步骤
- 注册 Meta Business: 在
developers.facebook.com创建应用,选择 "WhatsApp" -> "Setup"。 - 生成临时Token: 获取一个24小时有效的访问令牌用于测试。
- 配置Webhook: 设置一个回调URL,用于接收用户发送的消息。
- 发送消息前验证: 需要将发送消息的号码通过Meta审核(或使用测试号码)。
PHP 代码示例 (使用 WhatsApp Cloud API)
<?php
class WhatsAppAPI {
private $phoneNumberId = 'YOUR_PHONE_NUMBER_ID'; // 在Meta后台获取
private $token = 'YOUR_ACCESS_TOKEN'; // 长期Token或临时Token
public function sendText($to, $message) {
$url = "https://graph.facebook.com/v18.0/{$this->phoneNumberId}/messages";
$data = [
'messaging_product' => 'whatsapp',
'recipient_type' => 'individual',
'to' => $to, // 接收方号码,格式如 "8613800138000"
'type' => 'text',
'text' => [
'preview_url' => false,
'body' => $message
]
];
$headers = [
'Authorization: Bearer ' . $this->token,
'Content-Type: application/json'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
}
// 使用示例
$wa = new WhatsAppAPI();
$result = $wa->sendText('8613800138000', '您好,您的验证码是: 1234');
print_r($result);
?>
注意
- 费用:发送消息给用户通常免费(前1000条/月免费),但用户主动发起的会话免费;商业消息有一定额度。
- 模板消息:向用户发送非客服回复类消息(如促销通知)必须先创建并审核消息模板。
- 长期Token:临时Token仅24小时,生产环境需要生成长期Token(60天)或通过系统用户获取无限期Token。
核心对比:Telegram vs WhatsApp
| 特性 | Telegram | |
|---|---|---|
| API门槛 | 低,完全免费,无需企业验证 | 高,需注册Meta Business,需验证企业信息 |
| 费用 | 零成本 | 有免费额度,超出后按对话收费 |
| 消息类型 | 文本、图片、视频、文件、键盘按钮、内联查询等 | 文本、图片、视频、文档、互动按钮、列表 |
| 用户隐私 | 号码不公开,可通过用户名联系 | 必须知道用户手机号 |
| 适用场景 | 内部通知、社群运营、开源项目、技术博客 | 客户服务、订单通知、商业验证码 |
| 网络依赖 | 需翻墙(中国网络环境) | 全球通用,国内可直接使用 |
| PHP生态 | 丰富,文档清晰 | 官方提供SDK,但相对复杂 |
关键决策建议
-
选Telegram,
- 面向俄语区、东南亚、欧洲或技术社区用户。
- 项目预算为零。
- 需要发送大量自动化消息(Bot无限制)。
- 你愿意解决网络访问问题(如使用海外服务器)。
-
选WhatsApp,
- 面向全球大众用户(尤其美国、印度、巴西、印尼、中东等)。
- 需要官方品牌形象和用户信任度。
- 你的业务场景涉及客户服务互动(人工+机器人)。
- 你愿意付费且通过企业审核。
常见问题及解决方案
如何选择SDK?
- Telegram:
irazasyed/laravel-telegram-logging(Laravel专用)或Telegram\Bot\Api。 - WhatsApp:官方没有专门的PHP包,推荐使用
guzzlehttp/guzzle配合REST API直接调用,或使用第三方封装库如netflie/whatsapp-cloud-api。
如何处理中文乱码?
- Telegram:确保
text字段是UTF-8编码,使用parse_mode='HTML'时注意特殊字符转义,Telegram原生支持Unicode。 - WhatsApp:API要求
body为UTF-8,大多数情况下无问题,如果遇到表情符号,需确保数据库连接是utf8mb4。
如何获取访问令牌(WhatsApp)?
- 临时:在Meta开发者后台的"WhatsApp > Getting Started"页面直接复制。
- 长期:进入 "WhatsApp > Configuration",点击 "Generate Token",选择生成60天有效期的Token。
- 永久:创建一个系统用户(System User),授予
whatsapp_business_messaging权限,然后生成一个不会过期的Token。
如何接收消息(Webhook)?
- Telegram:设置Webhook后,用户消息会以JSON格式POST到你指定的URL,你需要监听
message字段。 - WhatsApp:类似,在Meta后台配置Webhook回调URL(必须HTTPS且外网可访问)和验证令牌,消息JSON结构不同,包含
entry[0].changes[0].value.messages。
如何批量发送消息?
- Telegram:直接循环调用
sendMessage,注意限制:同一Bot每秒最多30条消息给不同用户,或每分钟最多20条消息给同一个用户(建议添加sleep(0.5))。 - WhatsApp:建议使用异步队列(如RabbitMQ + Supervisor),因为官方有严格的速率限制(不同账户等级不同,通常20-80条/秒),批量发送需谨慎,避免触发风控封号。
代码示例:简单Webhook接收(PHP)
以下是一个简易的入口文件,用于接收两种平台的消息:
<?php
// hook.php
// 验证Token (WhatsApp)
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$verifyToken = 'your_verify_token'; // 你在Meta后台设置的值
$mode = $_GET['hub_mode'] ?? '';
$token = $_GET['hub_verify_token'] ?? '';
$challenge = $_GET['hub_challenge'] ?? '';
if ($mode === 'subscribe' && $token === $verifyToken) {
header('Content-Type: text/plain');
echo $challenge;
exit;
}
// Telegram 验证 (仅用setWebhook时无需这一步)
}
// 接收POST数据
$input = file_get_contents('php://input');
$data = json_decode($input, true);
// 判断来源
if (isset($data['message'])) {
// Telegram 消息格式
$chatId = $data['message']['chat']['id'];
$text = $data['message']['text'];
// 处理...
} elseif (isset($data['entry'][0]['changes'][0]['value']['messages'])) {
// WhatsApp 消息格式
$whatsAppMsg = $data['entry'][0]['changes'][0]['value']['messages'][0];
$phone = $whatsAppMsg['from']; // 发送者号码
$text = $whatsAppMsg['text']['body'];
// 处理...
}
http_response_code(200);
echo 'OK';
?>
- Telegram:PHP实现简单,适合开发者、小企业或轻量级通知,核心是
cURL+ Bot Token。 - WhatsApp:PHP实现稍复杂,涉及企业认证、Token管理、Webhook配置,适合商业客户对接。
推荐路径:如果是个人项目或学习,先用Telegram,如果是面向企业的商业项目,必须上WhatsApp Cloud API,两者也可以并存(内部员工用Telegram通知,对外客户用WhatsApp沟通)。