pw/laragammu

Gammu 通知驱动程序

dev-master 2019-02-20 04:52 UTC

This package is not auto-updated.

Last update: 2024-09-27 09:08:58 UTC


README

Latest Version on Packagist Software License Build Status StyleCI SensioLabsInsight Quality Score Total Downloads

此软件包通过Laravel 5.3轻松发送短信通知,使用Gammu SMSD

内容

要求

Gammu

确保您的 Gammu SMSD 已正确配置并能够发送短信。有关安装和配置 Gammu SMSD 的更多信息,请阅读Gammu SMSD 文档

Gammu API

如果您想使用Gammu Api,则此选项是可选的。请确保 Gammu Api 已正确配置并能够通过此 API 发送短信。

在底层,Gammu Api 使用 gammu sendsms 命令行。

安装

您可以通过 composer 安装此软件包

composer require pw/gammu

您必须安装服务提供者

// config/app.php
'providers' => [
    ...
    Pw\Gammu\GammuServiceProvider::class,
],

设置 Gammu 服务

使用 Gammu 发送短信有两种方法。第一种方法是通过原生 Gammu SMSD 方法,直接将数据插入 Gammu SMSD 数据库。第二种方法是使用 Gammu Api。

使用原生 Gammu SMSD 方法

确保通过向 outbox 表中插入数据来配置您的 Gammu SMSD 并使其能够发送短信。Gammu SMSD 和数据库可以安装在相同的机器上或不同的机器上。

将以下设置添加到 config/services.php 以使用原生 Gammu 方法发送短信。

...
'gammu' => [
    'method' => env('GAMMU_METHOD', 'db'),
    'sender' => env('GAMMU_SENDER', null),
],
...

通过在 config/database.php 中添加以下设置,将数据库设置设置为指向 Gammu SMSD 数据库。

// config/database.php
...
'connections' => [
    ...
    'gammu' => [
        'driver' => 'mysql',
        'host' => env('DB_GAMMU_HOST', 'localhost'),
        'port' => env('DB_GAMMU_PORT', '3306'),
        'database' => env('DB_GAMMU_DATABASE', 'forge'),
        'username' => env('DB_GAMMU_USERNAME', 'forge'),
        'password' => env('DB_GAMMU_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],
    ...
],
...

发送者是 phones 表中定义的默认发送者名称。如果没有设置,它将自动选择 phones 表中的第一条数据。此设置在您有多个发送者时非常有用。

使用 Gammu API

确保您的 Gammu Api 已正确配置并能够通过其 API 发送短信。Gammu Api 可以安装在相同的机器上或不同的机器上。

将以下设置添加到 config/services.php 以发送短信。

...
'gammu' => [
    'method' => env('GAMMU_METHOD', 'api'),
    'auth' => env('GAMMU_AUTH', 'gammu-api-key'),
    'url' => env('GAMMU_URL', 'http://gammu.api/')
],
...

使用 Redis 与 Gammu Api

确保您的 Redis 服务器正在运行,并且能够与您的应用程序和 gammu api 通信。您还可以指定 ->channel('name-channel') 以使用多个 Gammu Api 或将其放在非默认通道上。

...
'gammu' => [
    'method' => env('GAMMU_METHOD', 'redis')
],
...

用法

现在,您可以在 Notification 类的 via() 方法中使用该通道。

namespace App\Notifications;

use Pw\Gammu\GammuChannel;
use Pw\Gammu\GammuMessage;
use Illuminate\Notifications\Notification;

class SendNotificationToSms extends Notification
{
    public function via($notifiable)
    {
        return [GammuChannel::class];
    }

    public function toGammu($notifiable)
    {
        return (new GammuMessage())
            ->to($phoneNumber)
            ->content($content);
    }
}

如果您有多个发送者,可以通过传递 sender 方法设置发送者。如果没有设置发送者,它将使用 phones 表中的一个发送者。此方法仅当您使用原生 Gammu SMSD 方法时才可用。

public function toGammu($notifiable)
{
    return (new GammuMessage())
        ->to($phoneNumber)
        ->sender($sender)
        ->content($content);
}

路由消息

您可以通过向 to($phoneNumber) 方法提供接收者的电话号码(如上面示例所示)或在其可通知模型中添加 routeNotificationForGammu() 方法来发送通知。

...
/**
 * Route notifications for the Gammu channel.
 *
 * @return string
 */
public function routeNotificationForGammu()
{
    return $this->phone;
}
...

可用方法

  • to($phoneNumber) : (string) 接收者电话号码。强烈建议使用国际电话号码格式(+62XXXXXXXXXX)。
  • content($message) : (字符串) 短信内容。如果内容长度超过160个字符,将自动发送为 长短信
  • sender($sender) : (字符串) 在 Gammu phones 表中设置的电话发送者ID。此方法仅适用于您使用原生 Gammu 方法时。
  • callback($callbackText) : (字符串) Gammu Api 的回调文本。Gammu Api 提供传递文本的功能,当 Api 发送您的消息时,它将被发送回您在 Gammu Api 中指定的回调 URL。请在 Gammu Api 上正确设置回调。
  • channel($redisChannelName) : (字符串) 要发布的 Redis 通道。默认通道是 gammu-channel

更新日志

有关最近更改的更多信息,请参阅 变更日志

测试

$ composer test

安全

如果您发现任何安全问题,请通过电子邮件 halo@matriphe.comkristian@rolmi.sk 联系我们,而不是使用问题跟踪器。

贡献

有关详细信息,请参阅 贡献指南

致谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件