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

如何通过Twilio API从PHP(Laravel)发送批量SMS消息

Laravel 中使用 Twilio 批量发送 SMS 解决方案

一、基于 Twilio 消息服务的代码实现

首先确保已安装 Twilio PHP SDK:

composer require twilio/sdk

可以通过 Laravel Artisan 命令实现批量发送,以下是完整的命令类示例:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Twilio\Rest\Client;

class SendBulkSms extends Command
{
    protected $signature = 'sms:bulk-send';
    protected $description = '通过 Twilio 消息服务批量发送 SMS';

    public function handle()
    {
        // 从配置读取 Twilio 凭证
        $twilioSid = config('services.twilio.sid');
        $twilioToken = config('services.twilio.token');
        $messagingServiceSid = config('services.twilio.messaging_service_sid');

        $client = new Client($twilioSid, $twilioToken);

        // 实际场景从数据库获取成员号码列表,确保是 E.164 格式(如 +1234567890)
        $phoneNumbers = \App\Models\Member::pluck('phone')->toArray();

        // 分批处理,避免触发速率限制
        $batchSize = 50;
        $batches = array_chunk($phoneNumbers, $batchSize);

        foreach ($batches as $batch) {
            foreach ($batch as $number) {
                // 用队列异步发送,每条延迟1秒,符合Twilio默认速率限制
                dispatch(function () use ($client, $messagingServiceSid, $number) {
                    try {
                        $client->messages->create(
                            $number,
                            [
                                'messagingServiceSid' => $messagingServiceSid,
                                'body' => '【你的组织名称】紧急通知:园区临时管控,请留意后续更新。'
                            ]
                        );
                        \Log::info("短信发送成功:{$number}");
                    } catch (\Exception $e) {
                        \Log::error("短信发送失败 {$number}:{$e->getMessage()}");
                        // 可将失败号码存入单独表,后续重试
                        \App\Models\FailedSms::create(['phone' => $number, 'error' => $e->getMessage()]);
                    }
                })->delay(now()->addSeconds(1));
            }
            // 每批发送后短暂停顿,降低服务压力
            sleep(5);
        }

        $this->info('批量短信任务已全部分发至队列');
    }
}

在 .env 文件中配置 Twilio 相关信息:

TWILIO_SID=你的Twilio账户SID
TWILIO_TOKEN=你的Twilio认证令牌
TWILIO_MESSAGING_SERVICE_SID=你的消息服务SID

二、必须注意的关键点

  • 严格遵守速率限制:Twilio 默认速率为每秒1条(美国地区),其他地区可能有调整,必须通过队列延迟发送来规避限流,否则会收到 429 错误。
  • 号码格式校验:所有接收号码必须是 E.164 标准格式,存储到数据库前一定要做校验,否则会导致发送失败。
  • 失败重试机制:务必记录发送失败的号码,通过单独的任务定时重试,避免遗漏重要通知。
  • 消息合规性:不同国家/地区的短信有不同的合规要求,比如国内需要签名,欧美地区不能包含违规内容,提前确认规则避免被运营商拦截。
  • 发送号码扩容:如果单次发送量较大(比如2200条),建议给消息服务绑定多个发送号码,Twilio 会自动轮询可用号码,提升发送效率。
  • 成本预估:提前确认 Twilio 对应地区的短信价格,批量发送前做好成本核算,避免超出预算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:30:24