@bravophone/webphone 0.1.2 → 0.2.1
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 +64 -5
- package/dist/bravophone.mjs +419 -302
- package/dist/bravophone.umd.js +66 -7
- package/host/_locales/pt_BR/messages.json +1430 -0
- package/host/allowed-origins.json +8 -0
- package/host/css/bravophoneContactDialer.css +385 -0
- package/host/css/dark-theme.css +116 -0
- package/host/favicon.ico +0 -0
- package/host/fonts/Audiowide-Regular.ttf +0 -0
- package/host/fonts/Seguiemj.ttf +0 -0
- package/host/images/answer-gray.png +0 -0
- package/host/images/answer.png +0 -0
- package/host/images/auto-answer-off.png +0 -0
- package/host/images/auto-answer-on.png +0 -0
- package/host/images/avatar.png +0 -0
- package/host/images/bravophone-logo.svg +39 -0
- package/host/images/bravotech_Bravotech_logo.png +0 -0
- package/host/images/circle-green.png +0 -0
- package/host/images/circle-orange.png +0 -0
- package/host/images/circle-red.png +0 -0
- package/host/images/dialer-button-down.png +0 -0
- package/host/images/dialer-button.png +0 -0
- package/host/images/gateways/activecampaign.png +0 -0
- package/host/images/gateways/agendor.png +0 -0
- package/host/images/gateways/appfacilita.png +0 -0
- package/host/images/gateways/call-in.png +0 -0
- package/host/images/gateways/click-to-call.png +0 -0
- package/host/images/gateways/clickup.png +0 -0
- package/host/images/gateways/exactsales.png +0 -0
- package/host/images/gateways/go-high-lvl.png +0 -0
- package/host/images/gateways/groner.png +0 -0
- package/host/images/gateways/hubspot.png +0 -0
- package/host/images/gateways/kommo.png +0 -0
- package/host/images/gateways/moskit.png +0 -0
- package/host/images/gateways/nectar.png +0 -0
- package/host/images/gateways/pipedrive.png +0 -0
- package/host/images/gateways/pipefy.png +0 -0
- package/host/images/gateways/piperun.png +0 -0
- package/host/images/gateways/ploomes.png +0 -0
- package/host/images/gateways/rdstation-crm.png +0 -0
- package/host/images/gateways/salesforce.png +0 -0
- package/host/images/gateways/sharpspring.png +0 -0
- package/host/images/gateways/sunhub.png +0 -0
- package/host/images/gateways/vendfly.png +0 -0
- package/host/images/gateways/zendesk.png +0 -0
- package/host/images/gateways/zoho.png +0 -0
- package/host/images/hangup.png +0 -0
- package/host/images/hold.png +0 -0
- package/host/images/icons/logo-128-christmas-celebration.png +0 -0
- package/host/images/icons/logo-128.png +0 -0
- package/host/images/icons/logo-16-christmas-celebration.png +0 -0
- package/host/images/icons/logo-16.png +0 -0
- package/host/images/icons/logo-24-christmas-celebration.png +0 -0
- package/host/images/icons/logo-24.png +0 -0
- package/host/images/icons/logo-32-christmas-celebration.png +0 -0
- package/host/images/icons/logo-32.png +0 -0
- package/host/images/icons/logo-48-christmas-celebration.png +0 -0
- package/host/images/icons/logo-48.png +0 -0
- package/host/images/loading.gif +0 -0
- package/host/images/logo-bravotech-white.png +0 -0
- package/host/images/logo-bravotech.png +0 -0
- package/host/images/logo-inline-christmas-celebration.png +0 -0
- package/host/images/logo-inline.png +0 -0
- package/host/images/mic-off.png +0 -0
- package/host/images/mic-on.png +0 -0
- package/host/images/play.png +0 -0
- package/host/images/transfer.png +0 -0
- package/host/index.html +34 -0
- package/host/js/bravophone-noise-suppressor.js +418 -0
- package/host/js/bravophone-route-selector.js +1099 -0
- package/host/js/libwebphone.js +20 -0
- package/host/js/noise/LICENSE-web-noise-suppressor.txt +21 -0
- package/host/js/noise/rnnoise-worklet.js +13 -0
- package/host/js/noise/rnnoise.wasm +0 -0
- package/host/js/noise/rnnoise_simd.wasm +0 -0
- package/host/mock-webphone.js +195 -0
- package/host/mock.html +54 -0
- package/host/popup.js +23 -0
- package/host/shim/chrome-shim.js +287 -0
- package/host/shim/guest-bridge.js +353 -0
- package/host/shim/messages.js +13 -0
- package/host/styles/theme-fixes.css +98 -0
- package/package.json +4 -2
- package/types/index.d.ts +30 -2
package/README.md
CHANGED
|
@@ -178,9 +178,16 @@ Bravophone-SDK/
|
|
|
178
178
|
for atualizada:
|
|
179
179
|
|
|
180
180
|
```bash
|
|
181
|
-
npm run sync
|
|
181
|
+
npm run sync # host servido de um domínio próprio (public path "/")
|
|
182
|
+
npm run prepare:host # host servido do CDN — é o que vai no pacote publicado
|
|
182
183
|
```
|
|
183
184
|
|
|
185
|
+
O `prepare:host` reescreve o `public_path` do bundle para
|
|
186
|
+
`cdn.jsdelivr.net/npm/@bravophone/webphone@<versão>/host/`. **Rode-o depois de
|
|
187
|
+
cada bump de versão e antes de publicar**: se a URL apontar para outra versão,
|
|
188
|
+
o pacote busca assets que podem não existir. O `npm test` recusa esse
|
|
189
|
+
descompasso.
|
|
190
|
+
|
|
184
191
|
O script recusa rodar se um asset obrigatório sumir, em vez de gerar um host quebrado
|
|
185
192
|
silenciosamente.
|
|
186
193
|
|
|
@@ -256,7 +263,7 @@ exercitar o postMessage cross-origin de verdade, incluindo a validação de orig
|
|
|
256
263
|
|
|
257
264
|
| Porta | Papel | Serve |
|
|
258
265
|
|---|---|---|
|
|
259
|
-
| 5173 | site do cliente | `examples/test.html`, carrega `dist/bravophone.umd.
|
|
266
|
+
| 5173 | site do cliente | `examples/test.html`, carrega `dist/bravophone.umd.js` por `<script>`, como no CDN |
|
|
260
267
|
| 5174 | host do webphone | `host/mock.html`, com os headers `frame-ancestors` e `Permissions-Policy` de produção |
|
|
261
268
|
|
|
262
269
|
### Testar sem SIP nem backend
|
|
@@ -323,6 +330,15 @@ um major não quebre a página deles.
|
|
|
323
330
|
|
|
324
331
|
---
|
|
325
332
|
|
|
333
|
+
## Documentação
|
|
334
|
+
|
|
335
|
+
| Documento | Para quem |
|
|
336
|
+
|---|---|
|
|
337
|
+
| [`docs/api.html`](docs/api.html) | Referência completa da API — abra no navegador |
|
|
338
|
+
| [`docs/PARA-IA.md`](docs/PARA-IA.md) | Contexto para um agente de IA implementar a integração |
|
|
339
|
+
| [`examples/integracao.html`](examples/integracao.html) | Exemplo pronto para colar numa página |
|
|
340
|
+
| [`examples/loader.js`](examples/loader.js) | Carregar o SDK por JavaScript (SPA, Tag Manager) |
|
|
341
|
+
|
|
326
342
|
## API
|
|
327
343
|
|
|
328
344
|
### `Bravophone.init(options)`
|
|
@@ -330,7 +346,8 @@ um major não quebre a página deles.
|
|
|
330
346
|
| Opção | Tipo | Padrão | Descrição |
|
|
331
347
|
|---|---|---|---|
|
|
332
348
|
| `token` | `string` | — | Token de sessão emitido pelo seu backend |
|
|
333
|
-
| `
|
|
349
|
+
| `mode` | `'hosted' \| 'srcdoc'` | `'hosted'` | Como o webphone é carregado — ver abaixo |
|
|
350
|
+
| `hostUrl` | `string` | `https://webphone.bravophone.com/` | Origem do webphone (só no modo `hosted`) |
|
|
334
351
|
| `position` | `string` | `'bottom-right'` | Canto inicial |
|
|
335
352
|
| `open` | `boolean` | `false` | Abrir já visível |
|
|
336
353
|
| `launcher` | `boolean` | `true` | Exibir a aba lateral de abertura |
|
|
@@ -361,6 +378,44 @@ Use `frame: 'bar'` se preferir a barra com título, indicador de estado e contro
|
|
|
361
378
|
**Janela** — `show()` · `hide()` · `toggle()` · `minimize(force?)` · `move(x, y)` ·
|
|
362
379
|
`resize(w, h)` · `dock(zone)` · `destroy()` · `isOpen` · `geometry`
|
|
363
380
|
|
|
381
|
+
### Dois modos de carregar o webphone
|
|
382
|
+
|
|
383
|
+
```js
|
|
384
|
+
Bravophone.init({ token }) // hospedado (padrão)
|
|
385
|
+
Bravophone.init({ token, mode: 'srcdoc' }) // na origem do próprio site
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
| | `hosted` (padrão) | `srcdoc` |
|
|
389
|
+
|---|---|---|
|
|
390
|
+
| Onde o iframe roda | `webphone.bravophone.com` | origem do próprio site |
|
|
391
|
+
| De onde vêm os arquivos | do host | do CDN, travados nesta versão |
|
|
392
|
+
| CORS dos backends | uma origem fixa, não cresce | **uma entrada por integrador** |
|
|
393
|
+
| Iframe de terceiro | sim — sujeito a bloqueador e política | não |
|
|
394
|
+
| Storage particionado | sim (login por site do cliente) | não |
|
|
395
|
+
| Você precisa manter | o domínio do host | nada |
|
|
396
|
+
|
|
397
|
+
**Antes de oferecer o `srcdoc` a um cliente, a origem dele precisa estar na
|
|
398
|
+
allowlist de CORS de `api.bravophone.com`, `reports.teambravotech.com` e
|
|
399
|
+
`devices.wavoip.com`.** Sem isso o webphone carrega, aparece na tela e não
|
|
400
|
+
registra — o navegador descarta as respostas. Isso é trabalho no **nosso**
|
|
401
|
+
backend: o integrador não tem como liberar CORS de um servidor que não é dele.
|
|
402
|
+
|
|
403
|
+
Há requests com `withCredentials`, então `Access-Control-Allow-Origin: *` não
|
|
404
|
+
serve: a resposta precisa ecoar a origem exata mais
|
|
405
|
+
`Access-Control-Allow-Credentials: true`. O caminho sustentável é a allowlist
|
|
406
|
+
sair de banco, para entrar um cliente ser um registro e não um deploy em três
|
|
407
|
+
serviços.
|
|
408
|
+
|
|
409
|
+
Do lado do integrador, o único requisito é o CSP admitir `cdn.jsdelivr.net` em
|
|
410
|
+
`script-src`, `style-src` e `font-src` — a maioria dos sites não tem CSP
|
|
411
|
+
restritivo e não precisa fazer nada.
|
|
412
|
+
|
|
413
|
+
O que foi verificado em navegador (`examples/srcdoc-validation.html`):
|
|
414
|
+
`getUserMedia` funciona dentro do `srcdoc` **sem `allow=`**, a permissão é
|
|
415
|
+
herdada do topo, `enumerateDevices` traz os rótulos, `localStorage` funciona,
|
|
416
|
+
`document.baseURI` resolve para a página pai e `@font-face` com URL absoluta do
|
|
417
|
+
CDN carrega.
|
|
418
|
+
|
|
364
419
|
### A aba de abertura
|
|
365
420
|
|
|
366
421
|
Com a janela fechada, o webphone fica acessível por uma **aba colada na lateral** da
|
|
@@ -456,8 +511,12 @@ const off = Bravophone.on('call:incoming', (call) => { /* … */ })
|
|
|
456
511
|
off() // remove o listener
|
|
457
512
|
```
|
|
458
513
|
|
|
459
|
-
`ready` · `state` · `call:
|
|
460
|
-
`
|
|
514
|
+
`ready` · `state` · `call:dialing` · `call:incoming` · `call:answered` ·
|
|
515
|
+
`call:ended` · `resize` · `reveal` · `open` · `close` · `error`.
|
|
516
|
+
Use `'*'` para receber todos como `{ event, payload }`.
|
|
517
|
+
|
|
518
|
+
Uma chamada que não completa chega como `call:ended`: o estado do bundle não
|
|
519
|
+
distingue desligar de falhar.
|
|
461
520
|
|
|
462
521
|
---
|
|
463
522
|
|