PHP项目Telegram与WhatsApp

wen PHP项目 2

本文目录导读:

PHP项目Telegram与WhatsApp

  1. Telegram Bot 集成 (免费 & 简单)
  2. WhatsApp 集成 (官方 & 商业)
  3. 核心对比:Telegram vs WhatsApp
  4. 关键决策建议
  5. 常见问题及解决方案
  6. 代码示例:简单Webhook接收(PHP)

这是一个非常宽泛的题目,在PHP项目中集成Telegram与WhatsApp,通常指的是发送消息通知(如订单提醒、验证码、客服消息)或接收消息(如构建聊天机器人)。

核心区别在于:Telegram Bot API 是开放且免费的,而 WhatsApp 的官方API(Cloud API/On-Premises API)是受限制且需要付费或商业验证的。

以下为您梳理在PHP项目中实现Telegram与WhatsApp集成的方案、代码示例与关键注意事项。


Telegram Bot 集成 (免费 & 简单)

Telegram 提供了非常完善的 HTTP Bot API,无需购买服务,只需几行代码即可发送消息。

核心步骤

  1. 创建Bot: 在Telegram中搜索 @BotFather,发送 /newbot,获取 token (7234567890:AAHTx...).
  2. 获取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
  • 发送文件/图片:使用 sendPhoto, sendDocument 等方法。
  • 使用PHP SDK:推荐 irazasyed/telegram-bot-sdk (Laravel) 或原生 TelegramBot/Api

WhatsApp 集成 (官方 & 商业)

WhatsApp 没有免费的开放API,目前官方推荐的方式是 WhatsApp Cloud API(由Meta提供)或 WhatsApp Business API

核心步骤

  1. 注册 Meta Business: 在 developers.facebook.com 创建应用,选择 "WhatsApp" -> "Setup"。
  2. 生成临时Token: 获取一个24小时有效的访问令牌用于测试。
  3. 配置Webhook: 设置一个回调URL,用于接收用户发送的消息。
  4. 发送消息前验证: 需要将发送消息的号码通过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 WhatsApp
API门槛 低,完全免费,无需企业验证 高,需注册Meta Business,需验证企业信息
费用 零成本 有免费额度,超出后按对话收费
消息类型 文本、图片、视频、文件、键盘按钮、内联查询等 文本、图片、视频、文档、互动按钮、列表
用户隐私 号码不公开,可通过用户名联系 必须知道用户手机号
适用场景 内部通知、社群运营、开源项目、技术博客 客户服务、订单通知、商业验证码
网络依赖 需翻墙(中国网络环境) 全球通用,国内可直接使用
PHP生态 丰富,文档清晰 官方提供SDK,但相对复杂

关键决策建议

  1. 选Telegram,

    • 面向俄语区、东南亚、欧洲或技术社区用户。
    • 项目预算为零。
    • 需要发送大量自动化消息(Bot无限制)。
    • 你愿意解决网络访问问题(如使用海外服务器)。
  2. 选WhatsApp,

    • 面向全球大众用户(尤其美国、印度、巴西、印尼、中东等)。
    • 需要官方品牌形象和用户信任度。
    • 你的业务场景涉及客户服务互动(人工+机器人)。
    • 你愿意付费且通过企业审核。

常见问题及解决方案

如何选择SDK?

  • Telegramirazasyed/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沟通)。

抱歉,评论功能暂时关闭!