You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Twilio WhatsApp API(PHP)发送非公开PDF附件的解决方案

无需公开即可用Twilio WhatsApp API(PHP)发送PDF附件的解决方案

方法1:上传PDF到Twilio媒体存储

Twilio允许直接将文件上传至其托管的媒体库,生成的Media URL由Twilio内部维护,无需公开你的私有文件。具体步骤:

  1. 用Twilio PHP SDK上传本地或私有存储的PDF文件
  2. 获取上传后返回的媒体资源URL
  3. 发送WhatsApp消息时将该URL作为mediaUrl参数传入

示例代码:

<?php
require_once 'vendor/autoload.php';

use Twilio\Rest\Client;

// 替换为你的Twilio账户凭证
$accountSid = 'YOUR_ACCOUNT_SID';
$authToken = 'YOUR_AUTH_TOKEN';
$client = new Client($accountSid, $authToken);

// 上传本地PDF到Twilio Media
$media = $client->messages->media->create(
    fopen('/path/to/your/private.pdf', 'rb'),
    'application/pdf' // 指定文件MIME类型
);

// 发送带附件的WhatsApp消息
$message = $client->messages->create(
    'whatsapp:+1234567890', // 接收方WhatsApp号码
    [
        'from' => 'whatsapp:+0987654321', // 你的Twilio WhatsApp号码
        'body' => '这是你请求的PDF文档',
        'mediaUrl' => $media->url
    ]
);

echo "消息已发送,SID: " . $message->sid;
?>

方法2:生成私有文件的临时预签名URL

如果PDF存储在AWS S3、阿里云OSS等支持预签名URL的云存储服务,可以生成一个限时有效的访问链接,Twilio会在有效期内完成文件抓取,无需永久公开文件。

以AWS S3为例,示例代码:

<?php
// 生成S3预签名URL
require 'vendor/autoload.php';
use Aws\S3\S3Client;

$s3Client = new S3Client([
    'region' => 'your-region-id',
    'version' => 'latest',
    'credentials' => [
        'key' => 'YOUR_AWS_ACCESS_KEY',
        'secret' => 'YOUR_AWS_SECRET_KEY',
    ]
]);

// 生成有效期1小时的预签名URL
$presignedUrl = $s3Client->createPresignedRequest(
    $s3Client->getCommand('GetObject', [
        'Bucket' => 'your-bucket-name',
        'Key' => 'path/to/your/private.pdf'
    ]),
    '+1 hour'
)->getUri();

// 使用预签名URL发送Twilio消息
require_once 'vendor/autoload.php';
use Twilio\Rest\Client;

$accountSid = 'YOUR_ACCOUNT_SID';
$authToken = 'YOUR_AUTH_TOKEN';
$client = new Client($accountSid, $authToken);

$message = $client->messages->create(
    'whatsapp:+1234567890',
    [
        'from' => 'whatsapp:+0987654321',
        'body' => '这是你要的PDF文档',
        'mediaUrl' => (string)$presignedUrl
    ]
);

echo "消息SID: " . $message->sid;
?>

注意事项

  • Twilio媒体存储的文件会保留一段时间(具体参考Twilio官方文档),若无需长期存储,可在发送完成后调用API删除该媒体资源
  • 预签名URL的有效期建议设置为1-2小时,确保Twilio有足够时间完成文件抓取
  • 如果使用自建私有存储,需要将Twilio官方公布的媒体抓取IP段加入存储服务的白名单,避免Twilio无法访问文件

内容的提问来源于stack exchange,提问作者Safiyullah Mohideen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:03:30