Whatever you do in the panel,
kodla da yapabilirsiniz
One package, five surfaces, twelve entry points. Write logs, send email/SMS/push, manage your Radio project and chat inbox, put live chat in your mobile app — all under the same contract.
npm install signalbirdcomposer require pariette/signalbirdpip install signalbirdEnter through the door that matches your job
Each surface has its own key. That is not friction, it is a deliberate wall: the key that writes logs cannot send email, and the key embedded in your site cannot read your contact list.
The Management surface is not an admin interface. A key belongs to a single team and touches only that team's records; user, billing and subscription operations are not in the SDK.
Pick your language, copy it
Every call here genuinely exists in the package. Method names are identical across languages; only the naming convention changes.
import { signalbird } from 'signalbird'
// SIGNALBIRD_KEY ortam değişkeninden okunur
// Kritik kanal — kime gideceği, sessiz saatte ne olacağı,
// kaç kez uyaracağı PANELDE durur. Kod yalnız olayı bildirir.
await signalbird().critical('critical', 'ödeme servisi yanıt vermiyor', {
service: 'iyzico',
attempt: 3,
})
// Rutin kayıt — panelde görünür, bildirim göndermez
await signalbird().info('info', 'ahmet@x.com yeni hesap oluşturdu')
// Yakalanmamış hatalar tek satırla bağlanır
signalbird().captureUncaught('critical')Telsiz · 12 / 12
From install to the first call
- 01
Create your key
For Radio, open a project in the panel (Radio → Projects); the secret key is shown once. For Messaging and Management, create a key with the scopes you need under Console → API Keys.
- 02
Paketi kurun
One package carries every surface. It brings no dependencies — it will not fight your project's HTTP client version.
- 03
Call it
It does not throw: if Radio is unreachable your payment flow keeps working. The result is always an ok/status/code envelope.
- 04
Manage the rule from the panel
Channel settings, working hours, alert recipients and chat appearance live in the panel. Your code only reports the event.
# 1 — paketi kurun
npm install signalbird
# 2 — anahtarı verin
export SIGNALBIRD_KEY=sbr_live_… # Telsiz (panel → Telsiz → Projeler)
export SIGNALBIRD_API_KEY=sb_… # Gönderim + Yönetim (Konsol → API Anahtarları)import { signalbird, management } from 'signalbird'
// Log yaz
await signalbird().critical('critical', 'ödeme servisi yanıt vermiyor')
// Kendi projenizi yönetin
await management().createRadioProject({ name: 'ödeme-servisi' })What exists in which language
They ship from the same tag and carry the same version. There is no separate SDK repository and no per-language versioning.
| Dil / platform | Telsiz | Messaging | Management | Uygulama | Partner | Kurulum |
|---|---|---|---|---|---|---|
| Node.js / TypeScript | npm install signalbird | |||||
| Tarayıcı (düz JS) | — | — | — | npm install signalbird | ||
| React / Next.js | — | npm install signalbird | ||||
| Vue 3 | — | — | — | npm install signalbird | ||
| Angular | — | — | — | npm install signalbird | ||
| React Native / Expo | — | — | — | npm install signalbird | ||
| PHP / Laravel | — | composer require pariette/signalbird | ||||
| Python | — | — | pip install signalbird | |||
| Go | — | — | go get github.com/Pariette-Inc/signalbird.sdk | |||
| .NET / ASP.NET Core | — | — | dotnet add package Signalbird.Sdk | |||
| Swift (iOS) | — | — | — | https://github.com/Pariette-Inc/signalbird.sdk | ||
| Kotlin (Android) | — | — | — | implementation("io.signalbird:signalbird-sdk:1.9.0") |
Why it is written this way
Zero dependencies
fetch on Node, cURL in PHP, urllib in Python, the standard library in Go, HttpClient in .NET. An SDK dictating an HTTP client version is the most common source of version conflicts.
Parity across languages
A method added to one language and not another breaks the build. The method set of all five surfaces is identical in every language.
Silent failure
Shipping a log or drawing a chat bubble is not your application's real job. If Signalbird is unreachable, your payment flow keeps running.
No automatic retry
Sending the same message twice costs more than not sending it at all, and ringing a critical alarm twice is no better. The decision to retry is yours.
Key type is checked at construction
Pass a key from the wrong family and you get an error while building the client, not on the first request. Better than swallowing a 401 and noticing weeks later.
Public and secret keys are separate
Only the public key reaches browsers and mobile apps; its safety comes from constraint rather than secrecy — allowed origins, allowed channels, only its own data.
Silent failure, explicit code
The default behaviour is not to throw. The result envelope returns ok:false and a machine-readable code; during development you can turn exceptions on with throwOnError.
| Kod | Meaning |
|---|---|
INVALID_KEY | Key missing, wrong, or project inactive |
WRONG_KEY_TYPE | Key from the wrong family — caught at construction time |
SECRET_KEY_IN_BROWSER | A secret key was used from a browser |
ORIGIN_NOT_ALLOWED | This domain is not registered on the key |
API_KEY_SCOPE | The key lacks the required scope (e.g. radio:write) |
MODULE_DISABLED | Your package does not include this module |
LIMIT_REACHED | Your monthly limit is used up |
VALIDATION_ERROR | 422 — the body failed validation |
VISITOR_INVALID | The visitor secret is invalid; the local identity is cleared and a new session opens |
NETWORK_ERROR | The network was unreachable (status 0) |
TIMEOUT | Timed out (status 0) |
Detailed documentation
A page per language: full method list, field names, error codes and real examples.
Do not let your code stay silent
connect it in five minutes
Create your key, install the package, make the first call. Changing a rule will never need another release.