signalbird 2.8.1 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +159 -66
- package/dist/angular.js +2 -2
- package/dist/angular.js.map +1 -1
- package/dist/angular.mjs +2 -2
- package/dist/angular.mjs.map +1 -1
- package/dist/app.js +2 -2
- package/dist/app.js.map +1 -1
- package/dist/app.mjs +2 -2
- package/dist/app.mjs.map +1 -1
- package/dist/browser.d.mts +17 -0
- package/dist/browser.d.ts +17 -0
- package/dist/browser.js +92 -3
- package/dist/browser.js.map +1 -1
- package/dist/browser.mjs +92 -3
- package/dist/browser.mjs.map +1 -1
- package/dist/index.d.mts +103 -19
- package/dist/index.d.ts +103 -19
- package/dist/index.js +85 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +85 -8
- package/dist/index.mjs.map +1 -1
- package/dist/react-native.js +2 -2
- package/dist/react-native.js.map +1 -1
- package/dist/react-native.mjs +2 -2
- package/dist/react-native.mjs.map +1 -1
- package/dist/react.js +2 -2
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +2 -2
- package/dist/react.mjs.map +1 -1
- package/dist/signalbird.js +2 -2
- package/dist/vue.js +2 -2
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +2 -2
- package/dist/vue.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Signalbird SDK
|
|
2
2
|
|
|
3
|
-
**Tek paket,
|
|
3
|
+
**Tek paket, beş yüzey, on iki giriş noktası.** Panelde tıklayarak yapabildiğiniz her şey
|
|
4
4
|
kodla da yapılabilir.
|
|
5
5
|
|
|
6
6
|
| Yüzey | Ne yapar | Anahtar | Nerede |
|
|
7
7
|
|---|---|---|---|
|
|
8
|
-
| **Telsiz** (Radio) |
|
|
9
|
-
| **Gönderim** (Messaging) | e-posta, SMS, push gönderir; kişi, liste, kampanya yönetir; mesaj durumu okur; webhook imzası doğrular | `
|
|
10
|
-
| **Yönetim** (Management) |
|
|
8
|
+
| **Telsiz** (Radio) | uygulamanızdan bir **kanala** log/olay yazar | `sb_secret_live_…` / `sb_public_live_…` | sunucu / tarayıcı |
|
|
9
|
+
| **Gönderim** (Messaging) | e-posta, SMS, push gönderir; kişi, liste, kampanya yönetir; mesaj durumu okur; webhook imzası doğrular | `sb_secret_live_…` | yalnız sunucu |
|
|
10
|
+
| **Yönetim** (Management) | kanal (modül anahtarı) açar, olay akışını okur, **sohbet gelen kutusunu** işler, push cihazlarını listeler | `sb_secret_live_…` | yalnız sunucu |
|
|
11
11
|
| **Uygulama** (App) | müşterinizin **son kullanıcısına** canlı sohbet + push cihaz kaydı | `sb_public_live_…` | web, iOS, Android |
|
|
12
12
|
| **Partner** | Signalbird'ü kendi ürününde satan **sözleşmeli platform** müşterisini sağlar ve yetkilendirir | `sb_secret_live_…` | yalnız sunucu |
|
|
13
13
|
|
|
@@ -32,8 +32,8 @@ Bir seçenek daha var ve kod yazmaz: hazır sohbet widget'ı
|
|
|
32
32
|
| Kotlin (Android) | ✓ | - | - | ✓ | `io.signalbird:signalbird-sdk` |
|
|
33
33
|
|
|
34
34
|
Metot adları diller arasında **birebir** aynıdır; her dil kendi yazım
|
|
35
|
-
geleneğini korur (`
|
|
36
|
-
`
|
|
35
|
+
geleneğini korur (`createModuleKey` / `create_module_key` /
|
|
36
|
+
`CreateModuleKey` / `CreateModuleKeyAsync`). `node scripts/check-parity.mjs` bunu her derlemede
|
|
37
37
|
denetler.
|
|
38
38
|
|
|
39
39
|
Uygulama yüzeyi mobil ve tarayıcı içindir: gizli anahtar oraya gömülmez.
|
|
@@ -41,7 +41,7 @@ Gönderim ve Yönetim yüzeyleri yalnız sunucudadır.
|
|
|
41
41
|
|
|
42
42
|
## Telsiz
|
|
43
43
|
|
|
44
|
-
Telsiz'in tek işi vardır:
|
|
44
|
+
Telsiz'in tek işi vardır: uygulamanızdan bir **kanala** mesaj yazmak.
|
|
45
45
|
|
|
46
46
|
Bildirimin kime gideceği, hangi kanaldan (push/e-posta), sessiz saatlerde ne
|
|
47
47
|
olacağı ve aynı mesajın kaç kez uyarı üreteceği **sunucuda, kanal ayarlarında**
|
|
@@ -49,11 +49,14 @@ durur. Kod tarafında bunlar yoktur ve olmamalıdır: bildirim kuralını
|
|
|
49
49
|
değiştirmek için uygulamanızı yeniden yayınlamanız gerekmesin.
|
|
50
50
|
|
|
51
51
|
```
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
olay
|
|
52
|
+
domain anahtarı → sb_secret_live_… / sb_public_live_… (kimlik: alan adınızın anahtarı)
|
|
53
|
+
modül anahtarı → odemeHatasi, deploy, browser… (kanal adı; bildirim kuralı burada)
|
|
54
|
+
olay → tek bir kayıt
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
+
Kanal adı (modül anahtarı) **gizli değildir** ve kodun içinde durur: domain
|
|
58
|
+
anahtarı olmadan hiçbir işe yaramaz. Gövdede `key` alanıyla gider.
|
|
59
|
+
|
|
57
60
|
## Tek anahtar
|
|
58
61
|
|
|
59
62
|
`.env` dosyanıza **bir satır** yazarsınız:
|
|
@@ -62,13 +65,13 @@ olay → tek bir kayıt
|
|
|
62
65
|
SIGNALBIRD_DOMAIN_KEY=sb_secret_live_…
|
|
63
66
|
```
|
|
64
67
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
Bu, alan adınızın **gizli domain anahtarıdır** (Panel → Alan adları →
|
|
69
|
+
Anahtarlar) ve sunucu yüzeylerinin hepsini kapsar: Telsiz log yazımı, e-posta,
|
|
70
|
+
SMS, push, kişi ve kampanya, Yönetim. Kapsam (scope) listesi yoktur (v2.0);
|
|
71
|
+
ayrım anahtarın **türündedir** - gizli (`sb_secret_live_…`, sunucu) ya da açık
|
|
72
|
+
(`sb_public_live_…`, istemci). Hangi kanala yazdığınızı **modül anahtarı**
|
|
73
|
+
(kanal adı) belirler. **Adres yazmanız gerekmez** - üretim kökü paketin
|
|
74
|
+
içindedir.
|
|
72
75
|
|
|
73
76
|
Bir de **açık** anahtarlar vardır; onlar `.env`'e değil, sayfanın içine gömülür
|
|
74
77
|
ve gizli olmadıkları için ayrı durmak zorundadırlar:
|
|
@@ -76,7 +79,7 @@ ve gizli olmadıkları için ayrı durmak zorundadırlar:
|
|
|
76
79
|
| Anahtar | Nerede | Ne yapar |
|
|
77
80
|
|---|---|---|
|
|
78
81
|
| `sb_public_live_…` | `<script data-key data-channel>` | sohbet widget'ı, push cihaz kaydı |
|
|
79
|
-
| `sb_public_live_…` | tarayıcı log istemcisi | yalnız izinli alan
|
|
82
|
+
| `sb_public_live_…` | tarayıcı log istemcisi | yalnız izinli kökenlerden (alan adları) |
|
|
80
83
|
|
|
81
84
|
Gizli anahtar tarayıcıya **gömülemez**: sunucu, `Origin` başlığı taşıyan bir
|
|
82
85
|
istekte gizli anahtarı reddeder (`SECRET_KEY_IN_BROWSER`). Bu bir kolaylık
|
|
@@ -94,7 +97,7 @@ değil, kasıtlı bir duvardır - anahtar bir kez istemciye indiğinde herkesind
|
|
|
94
97
|
| Go | `go get github.com/Pariette-Inc/signalbird.sdk` |
|
|
95
98
|
| .NET, ASP.NET Core | `dotnet add package Signalbird.Sdk` |
|
|
96
99
|
| Swift (iOS, macOS) | SPM: `https://github.com/Pariette-Inc/signalbird.sdk` |
|
|
97
|
-
| Kotlin (Android) | `implementation("io.signalbird:signalbird-sdk:2.
|
|
100
|
+
| Kotlin (Android) | `implementation("io.signalbird:signalbird-sdk:2.9.0")` |
|
|
98
101
|
| Canlı sohbet widget'ı (herhangi bir site) | `<script async src="https://signalbird.io/sdk/v1/signalbird.js" data-key="sb_public_live_…" data-channel="destek"></script>` |
|
|
99
102
|
|
|
100
103
|
> Hepsi **bu repodan** çıkar ve **aynı sürümü** taşır - ayrı SDK reposu ya da
|
|
@@ -125,7 +128,10 @@ const sb = new SignalbirdClient({
|
|
|
125
128
|
throwOnError: false, // üretimde kapalı kalmalı
|
|
126
129
|
})
|
|
127
130
|
|
|
128
|
-
await sb.log({
|
|
131
|
+
await sb.log({ key: 'deploy', message: 'v2.4.0 yayında', level: 'info' })
|
|
132
|
+
|
|
133
|
+
// Kanalı bir kez bağlayıp yazmak:
|
|
134
|
+
await sb.radio('deploy').info('v2.4.0 yayında')
|
|
129
135
|
```
|
|
130
136
|
|
|
131
137
|
**Yakalanmamış hatalar:**
|
|
@@ -138,8 +144,8 @@ signalbird().captureUncaught('critical')
|
|
|
138
144
|
|
|
139
145
|
```ts
|
|
140
146
|
const result = await signalbird().batch([
|
|
141
|
-
{
|
|
142
|
-
{
|
|
147
|
+
{ key: 'isler', message: 'iş 1 bitti', level: 'info' },
|
|
148
|
+
{ key: 'isler', message: 'iş 2 bitti', level: 'info' },
|
|
143
149
|
])
|
|
144
150
|
```
|
|
145
151
|
|
|
@@ -178,10 +184,22 @@ const sb = initSignalbird({
|
|
|
178
184
|
|
|
179
185
|
sb.captureErrors('browser') // window.onerror + unhandledrejection
|
|
180
186
|
sb.error('browser', 'sepet güncellenemedi', { cartId })
|
|
187
|
+
|
|
188
|
+
// Kanalı bir kez bağlamak (2.9.0): debug · info · warn · error
|
|
189
|
+
const sepet = sb.radio('sepet')
|
|
190
|
+
sepet.warn('stok azaldı', { sku })
|
|
181
191
|
```
|
|
182
192
|
|
|
193
|
+
Tarayıcı istemcisinin metotları: `log(key, message, level?, context?)`,
|
|
194
|
+
`info`, `warn`, `error`, `radio(key)`, `captureErrors(key?)`, `flush()`,
|
|
195
|
+
`destroy()`. Ayrı bir `critical()` / `debug()` kısayolu **yoktur**: istemci
|
|
196
|
+
kodu herkesin elindedir ve oradan kritik alarm çaldırmak kötüye kullanıma
|
|
197
|
+
açıktır (gerekirse `log(key, msg, 'critical')`; kanalın bildirimi panelde
|
|
198
|
+
susturulabilir).
|
|
199
|
+
|
|
183
200
|
Kayıtlar tek tek değil, **toplu** gider (varsayılan 3 saniyede bir) ve sekme
|
|
184
|
-
kapanırken `sendBeacon` ile boşaltılır
|
|
201
|
+
kapanırken `sendBeacon` ile boşaltılır (`text/plain` gövde - tarayıcı
|
|
202
|
+
cross-origin beacon'da JSON içerik türüne izin vermez).
|
|
185
203
|
|
|
186
204
|
**React** - `app/providers.tsx` ya da `main.tsx`:
|
|
187
205
|
|
|
@@ -209,9 +227,12 @@ export class SignalbirdErrorHandler implements ErrorHandler {
|
|
|
209
227
|
}
|
|
210
228
|
```
|
|
211
229
|
|
|
212
|
-
Panelde
|
|
213
|
-
unutmayın;
|
|
214
|
-
|
|
230
|
+
Panelde açık anahtarın **izinli kökenlerini** (alan adlarını) tanımlamayı
|
|
231
|
+
unutmayın; liste boşken tarayıcı anahtarı hiçbir şey yazamaz
|
|
232
|
+
(`ORIGIN_NOT_ALLOWED`). Kanal bazında bir kısıt **yoktur**: açık anahtar,
|
|
233
|
+
izinli kökenden her kanala yazabilir. Bu yüzden tarayıcıdan yazılan kanalları
|
|
234
|
+
(`browser` gibi) sunucunun kritik kanallarından ayrı tutun ve bildirim
|
|
235
|
+
kurallarını ona göre verin - istemci kodu herkesin elindedir.
|
|
215
236
|
|
|
216
237
|
## PHP / Laravel
|
|
217
238
|
|
|
@@ -238,13 +259,15 @@ SIGNALBIRD_SOURCE=api-01
|
|
|
238
259
|
'signalbird' => [
|
|
239
260
|
'driver' => 'monolog',
|
|
240
261
|
'handler' => \Signalbird\Sdk\SignalbirdLogHandler::class,
|
|
241
|
-
'with' => ['
|
|
262
|
+
'with' => ['key' => 'laravel'], // kanal adı (modül anahtarı)
|
|
242
263
|
'level' => 'error',
|
|
243
264
|
],
|
|
244
265
|
```
|
|
245
266
|
|
|
246
267
|
Sonra `LOG_STACK=single,signalbird`. Mevcut `Log::error()` satırlarınız olduğu
|
|
247
|
-
gibi çalışır; tek satır kod yazmadan Telsiz'e düşerler.
|
|
268
|
+
gibi çalışır; tek satır kod yazmadan Telsiz'e düşerler. `context` içindeki
|
|
269
|
+
istisna (`['exception' => $e]`) sınıf, mesaj, dosya, satır ve ilk 20 yığın
|
|
270
|
+
çerçevesiyle gider (2.9.0).
|
|
248
271
|
|
|
249
272
|
Laravel dışı PHP:
|
|
250
273
|
|
|
@@ -255,6 +278,36 @@ Signalbird::configure('sb_secret_live_…');
|
|
|
255
278
|
Signalbird::error('api', 'veritabanı bağlantısı koptu');
|
|
256
279
|
```
|
|
257
280
|
|
|
281
|
+
## AWS / webhook ile Telsiz'e yazmak
|
|
282
|
+
|
|
283
|
+
SDK kurmanın mümkün olmadığı ya da gereksiz olduğu kaynaklar (AWS alarmları,
|
|
284
|
+
CI, üçüncü parti servisler) Telsiz kanalına **gelen bağlantı adresiyle**
|
|
285
|
+
yazar. Her kanalın kendi adresi vardır; panelde **Telsiz → Kanallar → AWS /
|
|
286
|
+
Webhook** altında oluşturulur:
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
POST https://live.signalbird.io/api/v1/radio/hook/sbh_…
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
- Kimlik URL'deki kanal jetonudur (`sbh_…`), domain anahtarı değil: jetonun
|
|
293
|
+
yetkisi yalnız o kanala log yazmaktır. Jetonu bir sır gibi saklayın;
|
|
294
|
+
sızarsa panelden yenileyin.
|
|
295
|
+
- **AWS SNS:** konuya HTTPS aboneliği olarak bu adresi ekleyin. Abonelik
|
|
296
|
+
onayı (`SubscriptionConfirmation`) kendiliğinden yapılır ve her SNS
|
|
297
|
+
mesajının imzası doğrulanır.
|
|
298
|
+
- **CloudWatch alarmları:** `ALARM` → `critical`, `OK` → `info` seviyesinde
|
|
299
|
+
yazılır.
|
|
300
|
+
- **Herhangi bir sistem** JSON gönderebilir:
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
curl -X POST https://live.signalbird.io/api/v1/radio/hook/sbh_… \
|
|
304
|
+
-H 'Content-Type: application/json' \
|
|
305
|
+
-d '{"message": "yedekleme başarısız", "level": "error"}'
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
`level` verilmezse kanalın varsayılan seviyesi geçerlidir; isteğe bağlı
|
|
309
|
+
`context` (nesne) ve `source` alanları da kabul edilir. SDK gerekmez.
|
|
310
|
+
|
|
258
311
|
## Davranış kuralları
|
|
259
312
|
|
|
260
313
|
- **Sessiz hata varsayılandır.** Telsiz erişilemezse çağrı `ok: false` döner ve
|
|
@@ -268,6 +321,11 @@ Signalbird::error('api', 'veritabanı bağlantısı koptu');
|
|
|
268
321
|
- **Kritik seviye sessiz saatleri deler.** Gece üçte ölen servis sabahı bekleyemez.
|
|
269
322
|
- **Tekrar bastırma kaydı değil bildirimi susturur.** Aynı mesaj kanalın
|
|
270
323
|
`dedupe` süresi içinde tekrar gelirse ikinci bildirim gitmez ama kayıt tutulur.
|
|
324
|
+
- **Mesaj 4000 karaktere kırpılır (2.9.0).** API daha uzununu 422 ile reddeder
|
|
325
|
+
ve toplu gönderimde tek uzun satır bütün paketi düşürürdü; SDK göndermeden
|
|
326
|
+
önce kırpar. `context` güvenle serileştirilir: döngüsel başvuru
|
|
327
|
+
`"[Circular]"`, `Error` `{name, message, stack}`, `BigInt` metin olur (PHP'de
|
|
328
|
+
`Throwable` → `class, message, code, file, line, trace`).
|
|
271
329
|
- **SDK sürümünü bildirir (2.6.0).** Her istek `X-Signalbird-Sdk:
|
|
272
330
|
<platform>/<sürüm>` taşır. Yeni sürüm çıktığında SDK süreç başına **bir kez**
|
|
273
331
|
uyarı yazar; eski sürümdeki anahtarların sahiplerine panel bildirimi gider.
|
|
@@ -280,9 +338,9 @@ Signalbird::error('api', 'veritabanı bağlantısı koptu');
|
|
|
280
338
|
|
|
281
339
|
## Gönderim (Messaging)
|
|
282
340
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
341
|
+
Telsiz ile **aynı** gizli domain anahtarıyla (`sb_secret_live_…`) çalışır.
|
|
342
|
+
Açık anahtar burada geçmez - istemci kurulurken `WRONG_KEY_TYPE` ile reddeder.
|
|
343
|
+
Yalnız sunucuda kullanılır.
|
|
286
344
|
|
|
287
345
|
Node:
|
|
288
346
|
|
|
@@ -299,6 +357,16 @@ const r = await sb.sendEmail({
|
|
|
299
357
|
})
|
|
300
358
|
if (!r.ok) console.error(r.code, r.message) // ok:false → code + message
|
|
301
359
|
|
|
360
|
+
// Panelde tanımlı şablonla ve gönderici kanalıyla (PHP: Signalbird::sendMail('noReply')):
|
|
361
|
+
await sb.sendEmail({
|
|
362
|
+
to: 'ali@example.com',
|
|
363
|
+
class: 'transactional',
|
|
364
|
+
template: 'Sipariş Onayı', // ad ya da template_id; varken subject/body gerekmez
|
|
365
|
+
vars: { ad: 'Ali', no: 'S-1234' },
|
|
366
|
+
module_key: 'noReply', // From adresini kanal seçer
|
|
367
|
+
reply_to: 'destek@ornek.com',
|
|
368
|
+
})
|
|
369
|
+
|
|
302
370
|
await sb.sendSms({ to: '+905551112233', class: 'transactional', body: 'Kodunuz: 4821' })
|
|
303
371
|
await sb.sendPush({ to: 'external:user-1042', class: 'transactional', subject: 'Yeni mesaj', body: '…' })
|
|
304
372
|
|
|
@@ -332,7 +400,8 @@ if (! $r['ok']) { Log::warning($r['code'], $r); }
|
|
|
332
400
|
|
|
333
401
|
`.env`: `SIGNALBIRD_DOMAIN_KEY=sb_secret_live_…` (isteğe bağlı `SIGNALBIRD_MESSAGING_URL`,
|
|
334
402
|
`SIGNALBIRD_MESSAGING_TIMEOUT`). Laravel dışı PHP:
|
|
335
|
-
`Signalbird::configureMessaging('
|
|
403
|
+
`Signalbird::configureMessaging('sb_secret_live_…')` ya da
|
|
404
|
+
`new MessagingClient('sb_secret_live_…')`.
|
|
336
405
|
|
|
337
406
|
Metot kümesi iki dilde aynıdır: `sendEmail` `sendSms` `previewSms` `sendPush` ·
|
|
338
407
|
`listContacts` `createContact` `updateContact` `deleteContact` `bulkContacts` ·
|
|
@@ -371,27 +440,30 @@ değil.
|
|
|
371
440
|
takımın kayıtlarına dokunur. Kullanıcı, faturalama ve abonelik işlemleri SDK'da
|
|
372
441
|
yoktur.
|
|
373
442
|
|
|
374
|
-
|
|
443
|
+
Aynı gizli domain anahtarıyla (`sb_secret_live_…`) çalışır; ayrı anahtar ya
|
|
444
|
+
da kapsam (scope) gerekmez. Domain anahtarının kendisi panelden üretilir ve
|
|
445
|
+
döndürülür - SDK anahtar üretmez.
|
|
375
446
|
|
|
376
447
|
```ts
|
|
377
448
|
import { management } from 'signalbird'
|
|
378
449
|
|
|
379
|
-
// Yeni ortam kurulumu:
|
|
380
|
-
const { data } = await management().
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
await vault.write('SIGNALBIRD_DOMAIN_KEY', data!.secret)
|
|
384
|
-
|
|
385
|
-
await management().createRadioChannel(data!.project.id, {
|
|
386
|
-
key: 'odeme',
|
|
387
|
-
name: 'Ödeme',
|
|
450
|
+
// Yeni ortam kurulumu: Telsiz kanalını (modül anahtarını) bildirim kuralıyla aç
|
|
451
|
+
const { data } = await management().createModuleKey('logger', {
|
|
452
|
+
key: 'odeme', // kodda kullanacağınız ad: signalbird().radio('odeme')
|
|
453
|
+
title: 'Ödeme',
|
|
388
454
|
level: 'critical',
|
|
389
|
-
|
|
455
|
+
notify: ['push'],
|
|
390
456
|
quiet_from: 0,
|
|
391
|
-
quiet_to: 7,
|
|
457
|
+
quiet_to: 7, // kritik seviye sessiz saatleri yine de deler
|
|
392
458
|
})
|
|
459
|
+
console.log(data?.module_key.id)
|
|
393
460
|
```
|
|
394
461
|
|
|
462
|
+
`module` ∈ `logger` (Telsiz) · `email` · `sms` · `push` · `chat`. Diğer
|
|
463
|
+
metotlar: `listModuleKeys`, `getModuleKey`, `updateModuleKey` (ad
|
|
464
|
+
değiştirilebilir; eski ad 30 gün kabul edilir), `deleteModuleKey`,
|
|
465
|
+
`listModuleKeyDevices`, `radioSummary`, `radioEvents`.
|
|
466
|
+
|
|
395
467
|
Sohbet gelen kutusunu kendi botunuzla işleyin:
|
|
396
468
|
|
|
397
469
|
```ts
|
|
@@ -414,25 +486,26 @@ const { data } = await management().embedToken({ module: 'chat' })
|
|
|
414
486
|
// data.url → 120 saniyelik, TEK KULLANIMLIK adres; doğrudan <iframe>'e verin
|
|
415
487
|
```
|
|
416
488
|
|
|
417
|
-
|
|
418
|
-
|
|
489
|
+
Anahtarın panelde **gömme jetonu üretebilir** (`can_issue_embed`) onayı
|
|
490
|
+
taşıması gerekir; yoksa 403 `EMBED_NOT_ALLOWED`. Jeton 60 dakikalık bir panel
|
|
491
|
+
oturumuna çevrildiği için bu onay bilerek ayrıdır.
|
|
419
492
|
|
|
420
493
|
Aynısı PHP, Python, Go ve .NET'te birebir aynı metot adlarıyla:
|
|
421
494
|
|
|
422
495
|
```php
|
|
423
|
-
Signalbird::management()->
|
|
496
|
+
Signalbird::management()->createModuleKey('logger', ['key' => 'odeme', 'title' => 'Ödeme']);
|
|
424
497
|
```
|
|
425
498
|
|
|
426
499
|
```python
|
|
427
|
-
signalbird.SignalbirdManagement(
|
|
500
|
+
signalbird.SignalbirdManagement(domain_key=key).create_module_key("logger", {"key": "odeme", "title": "Ödeme"})
|
|
428
501
|
```
|
|
429
502
|
|
|
430
503
|
```go
|
|
431
|
-
admin.
|
|
504
|
+
admin.CreateModuleKey(ctx, "logger", map[string]any{"key": "odeme", "title": "Ödeme"})
|
|
432
505
|
```
|
|
433
506
|
|
|
434
507
|
```csharp
|
|
435
|
-
await management.
|
|
508
|
+
await management.CreateModuleKeyAsync("logger", new Dictionary<string, object?> { ["key"] = "odeme", ["title"] = "Ödeme" });
|
|
436
509
|
```
|
|
437
510
|
|
|
438
511
|
Tam liste (40 metot): `docs/CONTRACT.md § 10`.
|
|
@@ -494,8 +567,8 @@ zaten saklanmıyor.
|
|
|
494
567
|
## Gönderim - müşterinin kendi sisteminden
|
|
495
568
|
|
|
496
569
|
Bir platformun (SubmitCMS, veribenim…) müşterisiyseniz kendi sunucunuzdan da
|
|
497
|
-
gönderim yapabilirsiniz. Gereken tek şey **kendi
|
|
498
|
-
(`
|
|
570
|
+
gönderim yapabilirsiniz. Gereken tek şey **kendi gizli domain anahtarınızdır**
|
|
571
|
+
(`sb_secret_live_…`); panelde Alan adları → Anahtarlar altında durur.
|
|
499
572
|
|
|
500
573
|
```ts
|
|
501
574
|
import { SignalbirdMessaging } from 'signalbird'
|
|
@@ -726,20 +799,40 @@ Sunucu tarafı tek çağrıdır (`Signalbird::partner()->createEmbedToken(...)`,
|
|
|
726
799
|
|
|
727
800
|
## Hata kodları
|
|
728
801
|
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
|
733
|
-
|
|
734
|
-
| `
|
|
735
|
-
| `
|
|
736
|
-
| `
|
|
737
|
-
| `
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
`
|
|
742
|
-
|
|
802
|
+
Telsiz (`/v1/radio/log`, `/v1/radio/log/batch`) ve bütün anahtarlı uçların
|
|
803
|
+
ortak kapısı:
|
|
804
|
+
|
|
805
|
+
| Kod | HTTP | Anlamı |
|
|
806
|
+
|---|---|---|
|
|
807
|
+
| `DOMAIN_KEY_MISSING` | 401 | `X-Signalbird-Key` başlığı yok |
|
|
808
|
+
| `DOMAIN_KEY_INVALID` | 401 | Anahtar tanınmadı ya da kullanım dışı (iptal edilmiş) |
|
|
809
|
+
| `SECRET_KEY_IN_BROWSER` | 401 | Gizli anahtar `Origin` taşıyan (tarayıcı) bir istekte kullanıldı |
|
|
810
|
+
| `SECRET_KEY_IN_QUERY` | 401 | Gizli anahtar sorgu dizesinde (`?k=`) gönderildi |
|
|
811
|
+
| `SECRET_KEY_REQUIRED` | 403 | Uç gizli anahtar ister; açık anahtar verildi |
|
|
812
|
+
| `ORIGIN_REQUIRED` | 403 | Açık (web) anahtar `Origin`'siz, yani sunucudan kullanıldı |
|
|
813
|
+
| `ORIGIN_NOT_ALLOWED` | 403 | İstek kökeni açık anahtarın izinli kökenleri arasında değil |
|
|
814
|
+
| `APP_KEY_IN_BROWSER` | 403 | Mobil uygulama anahtarı web sayfasından kullanıldı |
|
|
815
|
+
| `DOMAIN_INACTIVE` / `TEAM_INACTIVE` | 403 | Alan adı ya da takım pasif |
|
|
816
|
+
| `MODULE_DISABLED` | 403 | Paketinizde Telsiz (`logger`) modülü yok |
|
|
817
|
+
| `MODULE_KEY_INVALID` | 422 | Kanal adı (`key`) geçersiz - normalize edilince boş kalıyor |
|
|
818
|
+
| `MODULE_KEY_DISABLED` | **202** | Kanal panelde kapalı - kayıt yazılmaz, kota da harcanmaz; yanıt `ok: false` taşır, tekrar denemeyin |
|
|
819
|
+
| `LIMIT_REACHED` | 429 | Aylık kayıt limitiniz doldu |
|
|
820
|
+
| `OVERAGE_CEILING_REACHED` | 429 | Aşım tavanına ulaşıldı |
|
|
821
|
+
| `NETWORK_ERROR` | - | SDK sunucuya ulaşamadı (istemci tarafı) |
|
|
822
|
+
|
|
823
|
+
Toplu uçta (`/log/batch`) kapı hatası tüm isteği reddeder; `MODULE_*` ve
|
|
824
|
+
kota kodları ise satır satır `results[i].code` içinde döner. Gövde
|
|
825
|
+
doğrulaması (ör. 4000 karakteri aşan `message`) satır satır DEĞİLDİR - tek
|
|
826
|
+
geçersiz satır bütün paketi 422 ile düşürür; SDK bu yüzden mesajı göndermeden
|
|
827
|
+
kırpar (2.9.0).
|
|
828
|
+
|
|
829
|
+
Gönderim ve Yönetim istemcilerine özgü: `WRONG_KEY_TYPE` (kurulumda, SDK),
|
|
830
|
+
`NO_CONSENT`, `SUPPRESSED`, `NO_SENDING_DOMAIN`, `SENDER_NOT_CONFIGURED`
|
|
831
|
+
(gönderici kanalına adres bağlanmamış), `MODULE_KEY_NOT_FOUND`,
|
|
832
|
+
`LIST_NOT_FOUND`, `EMBED_NOT_ALLOWED`, `MODULE_DISABLED`. SDK eşlemeleri
|
|
833
|
+
(sunucu kod döndürmediğinde): 401 → `API_KEY_INVALID`, 422 →
|
|
834
|
+
`VALIDATION_ERROR`, diğerleri `HTTP_<durum>`; ağ tarafı `NETWORK_ERROR`,
|
|
835
|
+
`TIMEOUT`.
|
|
743
836
|
|
|
744
837
|
Uygulama yüzeyi ve widget: `VISITOR_INVALID` (yerel kimlik silinir, yeni
|
|
745
838
|
oturum açılır), `CHAT_UNAVAILABLE` (kota - "sohbet kullanılamıyor" bandı),
|
package/dist/angular.js
CHANGED
|
@@ -5,7 +5,7 @@ var rxjs = require('rxjs');
|
|
|
5
5
|
// src/angular/index.ts
|
|
6
6
|
|
|
7
7
|
// src/shared/version.ts
|
|
8
|
-
var SDK_VERSION = "2.
|
|
8
|
+
var SDK_VERSION = "2.9.0" ;
|
|
9
9
|
var SDK_HEADER = "X-Signalbird-Sdk";
|
|
10
10
|
function sdkHeaderValue(platform) {
|
|
11
11
|
return `${platform}/${SDK_VERSION}`;
|
|
@@ -64,7 +64,7 @@ var SignalbirdApp = class {
|
|
|
64
64
|
}
|
|
65
65
|
if (!config.publicKey.startsWith("sb_public_live_")) {
|
|
66
66
|
throw new Error(
|
|
67
|
-
"Signalbird: uygulama istemcisi a\xE7\u0131k domain anahtar\u0131 ister (sb_public_live_\u2026).
|
|
67
|
+
"Signalbird: uygulama istemcisi a\xE7\u0131k domain anahtar\u0131 ister (sb_public_live_\u2026). Gizli anahtar\u0131 (sb_secret_live_\u2026) istemci koduna KOYMAYIN."
|
|
68
68
|
);
|
|
69
69
|
}
|
|
70
70
|
this.baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, "");
|