composer require pariette/signalbirdpariette/signalbird - PHP / Laravel
Signalbird Telsiz istemcisi. Tek işi vardır: projenizden bir kanala mesaj yazmak.
Bildirimin kime gideceği, hangi kanaldan (push/e-posta), sessiz saatlerde ne olacağı panelde, kanal ayarlarında durur - kodunuzda değil.
Kurulum
composer require pariette/signalbirdPHP 8.1+ ve ext-curl gerekir. Guzzle gerekmez: bir log kütüphanesinin
projenize HTTP istemcisi sürümü dayatması, sürüm çakışmalarının en sık sebebidir.
Laravel'de paket kendiliğinden keşfedilir (auto-discovery).
Anahtar
Panelde Telsiz → Projeler → Yeni proje ile bir proje açın. Sunucu anahtarı
(sb_secret_live_…) size bir kez gösterilir.
# .env
SIGNALBIRD_DOMAIN_KEY=sb_secret_live_xxxxxxxxxxxxxxxxxxxxxxxx
SIGNALBIRD_SOURCE=api-01İsterseniz yapılandırmayı yayınlayın:
php artisan vendor:publish --tag=signalbird-configHızlı başlangıç
use Signalbird\Sdk\Facades\Signalbird;
Signalbird::critical('critical', 'ödeme servisi yanıt vermiyor', [
'service' => 'iyzico',
]);
Signalbird::info('info', 'ahmet@x.com yeni hesap oluşturdu');Metotlar
| Metot | Açıklama |
|---|---|
log(string $channel, string $message, ?string $level = null, ?array $context = null) |
Temel çağrı |
debug · info · warn · error · critical |
Seviye kısayolları |
batch(array $events) |
En fazla 100 kayıt |
identityHash(string $externalId): string |
Sohbet/push ziyaretçisinin kimlik doğrulama hash'i (aşağıda) |
Hepsi dizi döndürür: ['ok' => true, 'event_id' => 'rev_…'] ya da
['ok' => false, 'code' => 'LIMIT_REACHED'].
Laravel loglarını Telsiz'e bağlamak
Mevcut Log::error() satırlarınız tek satır kod yazmadan Telsiz'e düşer.
config/logging.php:
'signalbird' => [
'driver' => 'monolog',
'handler' => \Signalbird\Sdk\SignalbirdLogHandler::class,
'with' => ['channel' => 'laravel'],
'level' => 'error',
],.env:
LOG_STACK=single,signalbirdMonolog seviyeleri Telsiz'in beş seviyesine eşlenir; emergency/alert gibi
ayrımlar criticale toplanır.
Kayıtlar istek boyunca birikir ve sonunda tek toplu çağrıyla gider: her
satır için ayrı HTTP isteği, sayfanın kendisinden uzun sürerdi. Bu yüzden
leveli debuge çekmek de mümkündür - ama çerçevenin kendi gürültüsü
(sorgu, cache) Telsiz kotanızı hızla yakar; üretimde info ya da warning
daha doğrudur.
Laravel postasını Signalbird'den geçirmek
İki yol vardır ve ikisi de aynı uca gider. Farkları gövdenin nerede durduğudur.
Mevcut Mailable'larınız - tek satır konfigürasyon, hiçbir çağrı yeri değişmez:
// config/mail.php
'signalbird' => ['transport' => 'signalbird', 'class' => 'transactional'],MAIL_MAILER=signalbirdMail::to($user)->send(new SiparisBildirimi($order)); // artık Signalbird'denGövdesi panelde duran gönderimler - şablon, değişken, gönderen adı:
Signalbird::mail()
->to($user->email)
->template('Sipariş Onayı') // panelde yazan ad ya da id
->vars(['ad' => $user->name])
->fromName('Penyu Destek')
->replyTo('destek@penyu.io')
->transactional() // ZORUNLU: sınıfın varsayılanı yok
->send();Metni değiştirmek için dağıtım beklemek istemiyorsanız ikincisi: şablon panelde düzenlenir, kod aynı kalır.
İki sınır: taşıyıcı e-posta eki taşımaz (sessizce düşürmez, açıkça hata verir) ve her alıcıya ayrı istek gider - Signalbird'de her alıcı ayrı bir kayıttır, toplu olan kampanyadır.
İstisna yakalayıcı
// bootstrap/app.php (Laravel 11)
use Signalbird\Sdk\Facades\Signalbird;
->withExceptions(function (Exceptions $exceptions) {
$exceptions->reportable(function (Throwable $e) {
Signalbird::error('laravel', $e->getMessage(), [
'exception' => get_class($e),
'file' => $e->getFile() . ':' . $e->getLine(),
]);
});
})Kuyruk işi
use Signalbird\Sdk\Facades\Signalbird;
class ProcessPaymentJob implements ShouldQueue
{
public function handle(): void
{
// ... ödeme işlemi
Signalbird::info('odeme', "Sipariş #{$this->orderId} başarılı");
}
public function failed(Throwable $e): void
{
Signalbird::critical('critical', "Sipariş #{$this->orderId}: {$e->getMessage()}");
}
}Laravel dışı PHP
use Signalbird\Sdk\Signalbird;
Signalbird::configure('sb_secret_live_…');
Signalbird::error('api', 'veritabanı bağlantısı koptu');Ya da doğrudan istemci:
use Signalbird\Sdk\SignalbirdClient;
$sb = new SignalbirdClient(
domainKey: getenv('SIGNALBIRD_DOMAIN_KEY'),
source: 'api-01',
);
$sb->warn('disk', 'disk %85 dolu');Ziyaretçi kimliği doğrulaması - identityHash
Sohbet widget'ı ve uygulama SDK'sı oturum açmış kullanıcıyı external_id ile
tanıtır. Açık anahtar sayfada durduğu için Signalbird bu kimliği ancak
yanında sizin sunucunuzda üretilmiş geçerli bir hash varsa güvenilir sayar
(2.7.0). Hash olmadan ziyaretçi kişi kaydına bağlanmaz, cihazı o kullanıcıya
push hedefi olarak bağlanmaz ve kanal ajanının araçları kimliği yalnız
visitor.unverified altında görür.
use Signalbird\Sdk\Facades\Signalbird;
$hash = Signalbird::identityHash((string) $user->id); // SignalbirdClient::identityHash da aynıGizli anahtarı zaten tutan Telsiz istemcisinin üzerindedir; ayrı kurulum gerekmez. Algoritma (her dilde aynı çıktı):
identity_hash = hex( HMAC-SHA256( hex(SHA-256(sb_secret_live_…)), external_id ) )Anahtar gizli anahtarın SHA-256 özetidir (sunucu anahtarı düz saklamaz). Kullanım: Widget - Kimlik doğrulaması, Uygulama SDK'sı.
<script async src="https://signalbird.io/sdk/v1/signalbird.js"
data-key="sb_public_live_…" data-channel="destek"
data-external-id="{{ $user->id }}"
data-identity-hash="{{ Signalbird::identityHash((string) $user->id) }}"></script>Davranış kuralları
- Sessiz hata varsayılandır. Telsiz erişilemezse
['ok' => false]döner ve uygulamanız çalışmaya devam eder. GeliştirmedeSIGNALBIRD_THROW=true. - Tanımsız kanal düşürülmez. İlk çağrıda açılır, "otomatik açıldı" işaretiyle görünür ve sessizdir - kuralı ekip koyar.
- Kritik seviye sessiz saatleri deler.
- Tekrar bastırma kaydı değil bildirimi susturur.
Sürüm bildirimi
SDK her istekte sürümünü bildirir: X-Signalbird-Sdk: php/<sürüm>. Yeni bir
sürüm yayınlandığında API yanıtında Signalbird-Sdk-Status: outdated (ya da
artık desteklenmiyorsa unsupported) döner ve SDK süreç başına bir kez
uyarı yazar (error_log). Uyarı hata değildir: isteğin sonucu değişmez.
Panelde Domainler → [domain] → Anahtarlar her anahtarın hangi SDK sürümüyle kullanıldığını gösterir; eski sürümdeki anahtarlar için panelin tepesinde bir uyarı şeridi ve bildirim çıkar. Güncellemek için:
composer update pariette/signalbirdHata kodları
| Kod | Anlamı |
|---|---|
INVALID_KEY |
Anahtar yok, yanlış ya da proje pasif |
MODULE_DISABLED |
Paketinizde Telsiz (logger) modülü yok |
LIMIT_REACHED |
Aylık kayıt limitiniz doldu |
CHANNEL_DISABLED |
Kanal kapalı - kayıt yazılmaz, kota da harcanmaz |
Paketin diğer yüzeyleri
Bu sayfa Telsiz'i anlatır. Aynı paket iki yüzey daha taşır:
| Yüzey | Erişim | Ne yapar |
|---|---|---|
| Gönderim | Signalbird::messaging() |
e-posta, SMS, push; kişi, liste, kampanya; webhook imzası |
| Yönetim | Signalbird::management() |
Telsiz projesi/kanalı, sohbet gelen kutusu, uygulama ve cihaz |
use Signalbird\Sdk\Facades\Signalbird;
Signalbird::critical('critical', 'ödeme servisi öldü'); // Telsiz
Signalbird::messaging()->sendEmail([...]); // Gönderim
Signalbird::management()->createModuleKey('logger', ['name' => 'ödeme-servisi']); // YönetimSIGNALBIRD_DOMAIN_KEY=sb_secret_live_… # Telsiz
SIGNALBIRD_DOMAIN_KEY=sb_… # Yönetim (boşsa SIGNALBIRD_DOMAIN_KEY)
SIGNALBIRD_DOMAIN_KEY=sb_… # GönderimÜç istemci de servis sağlayıcısında tekil olarak kayıtlıdır; doğrudan enjeksiyon da yapabilirsiniz:
public function __construct(
private \Signalbird\Sdk\Management\ManagementClient $signalbird,
) {}Son kullanıcı sohbeti ve push kaydı PHP'de yoktur - o yüzey istemci tarafındadır: Uygulama SDK'sı.