@oficialapi/sdk 9.0.2 → 9.0.4
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 +483 -206
- package/dist/index.d.mts +201 -104
- package/dist/index.d.ts +201 -104
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,9 +20,9 @@ import { OficialAPISDK } from '@oficialapi/sdk';
|
|
|
20
20
|
const sdk = new OficialAPISDK({
|
|
21
21
|
clientId: 'seu-client-id',
|
|
22
22
|
clientSecret: 'seu-client-secret',
|
|
23
|
-
timeout: 30000,
|
|
24
|
-
maxRetries: 3,
|
|
25
|
-
retryDelay: 1000,
|
|
23
|
+
timeout: 30000,
|
|
24
|
+
maxRetries: 3,
|
|
25
|
+
retryDelay: 1000,
|
|
26
26
|
});
|
|
27
27
|
```
|
|
28
28
|
|
|
@@ -42,7 +42,7 @@ const accessToken = tokenResponse.access_token;
|
|
|
42
42
|
|
|
43
43
|
```typescript
|
|
44
44
|
const result = await sdk.whatsapp.sendText({
|
|
45
|
-
|
|
45
|
+
channelToken: 'sk_live_9999999999999999999999999999',
|
|
46
46
|
sender: '5511999999999',
|
|
47
47
|
messageText: 'Olá! Como posso ajudar você hoje?'
|
|
48
48
|
}, accessToken);
|
|
@@ -53,23 +53,23 @@ console.log(result.data.messageId);
|
|
|
53
53
|
#### Enviar Mídia
|
|
54
54
|
|
|
55
55
|
```typescript
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
await sdk.whatsapp.sendMedia({
|
|
58
|
-
|
|
58
|
+
channelToken: 'sk_live_...',
|
|
59
59
|
sender: '5511999999999',
|
|
60
60
|
fileUrl: 'https://example.com/image.jpg',
|
|
61
61
|
type: 'image',
|
|
62
62
|
caption: 'Veja esta imagem!'
|
|
63
63
|
}, accessToken);
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
await sdk.whatsapp.sendMedia({
|
|
67
|
-
|
|
67
|
+
channelToken: 'sk_live_...',
|
|
68
68
|
sender: '5511999999999',
|
|
69
69
|
fileUrl: 'https://example.com/documento.pdf',
|
|
70
70
|
type: 'document',
|
|
71
71
|
caption: 'Confira este documento',
|
|
72
|
-
fileName: 'meu_documento.pdf'
|
|
72
|
+
fileName: 'meu_documento.pdf'
|
|
73
73
|
}, accessToken);
|
|
74
74
|
```
|
|
75
75
|
|
|
@@ -83,7 +83,7 @@ Os templates do WhatsApp suportam diferentes tipos de componentes e parâmetros.
|
|
|
83
83
|
|
|
84
84
|
```typescript
|
|
85
85
|
await sdk.whatsapp.sendTemplate({
|
|
86
|
-
|
|
86
|
+
channelToken: 'sk_live_...',
|
|
87
87
|
sender: '5511999999999',
|
|
88
88
|
templateName: 'hello_world',
|
|
89
89
|
languageCode: 'pt_BR',
|
|
@@ -102,7 +102,7 @@ await sdk.whatsapp.sendTemplate({
|
|
|
102
102
|
|
|
103
103
|
```typescript
|
|
104
104
|
await sdk.whatsapp.sendTemplate({
|
|
105
|
-
|
|
105
|
+
channelToken: 'sk_live_...',
|
|
106
106
|
sender: '555199579150',
|
|
107
107
|
templateName: 'order_confirmation_pdf',
|
|
108
108
|
languageCode: 'en_US',
|
|
@@ -134,7 +134,7 @@ await sdk.whatsapp.sendTemplate({
|
|
|
134
134
|
|
|
135
135
|
```typescript
|
|
136
136
|
await sdk.whatsapp.sendTemplate({
|
|
137
|
-
|
|
137
|
+
channelToken: 'sk_live_...',
|
|
138
138
|
sender: '5511999999999',
|
|
139
139
|
templateName: 'promotion_notification',
|
|
140
140
|
languageCode: 'pt_BR',
|
|
@@ -165,7 +165,7 @@ await sdk.whatsapp.sendTemplate({
|
|
|
165
165
|
|
|
166
166
|
```typescript
|
|
167
167
|
await sdk.whatsapp.sendTemplate({
|
|
168
|
-
|
|
168
|
+
channelToken: 'sk_live_...',
|
|
169
169
|
sender: '5511999999999',
|
|
170
170
|
templateName: 'seasonal_promotion',
|
|
171
171
|
languageCode: 'pt_BR',
|
|
@@ -196,7 +196,7 @@ await sdk.whatsapp.sendTemplate({
|
|
|
196
196
|
|
|
197
197
|
```typescript
|
|
198
198
|
await sdk.whatsapp.sendButtons({
|
|
199
|
-
|
|
199
|
+
channelToken: 'sk_live_...',
|
|
200
200
|
sender: '5511999999999',
|
|
201
201
|
text: 'Escolha uma opção:',
|
|
202
202
|
buttons: [
|
|
@@ -221,7 +221,7 @@ await sdk.whatsapp.sendButtons({
|
|
|
221
221
|
|
|
222
222
|
```typescript
|
|
223
223
|
await sdk.whatsapp.sendList({
|
|
224
|
-
|
|
224
|
+
channelToken: 'sk_live_...',
|
|
225
225
|
sender: '5511999999999',
|
|
226
226
|
headerText: 'Escolha um produto:',
|
|
227
227
|
bodyText: 'Selecione uma opção abaixo:',
|
|
@@ -251,7 +251,7 @@ await sdk.whatsapp.sendList({
|
|
|
251
251
|
|
|
252
252
|
```typescript
|
|
253
253
|
await sdk.whatsapp.sendContact({
|
|
254
|
-
|
|
254
|
+
channelToken: 'sk_live_...',
|
|
255
255
|
sender: '5511999999999',
|
|
256
256
|
contacts: [
|
|
257
257
|
{
|
|
@@ -276,7 +276,7 @@ await sdk.whatsapp.sendContact({
|
|
|
276
276
|
|
|
277
277
|
```typescript
|
|
278
278
|
await sdk.whatsapp.sendLocation({
|
|
279
|
-
|
|
279
|
+
channelToken: 'sk_live_...',
|
|
280
280
|
sender: '5511999999999',
|
|
281
281
|
latitude: -23.5505,
|
|
282
282
|
longitude: -46.6333,
|
|
@@ -290,7 +290,7 @@ await sdk.whatsapp.sendLocation({
|
|
|
290
290
|
```typescript
|
|
291
291
|
// Áudio básico (requer upload prévio da mídia)
|
|
292
292
|
await sdk.whatsapp.sendAudio({
|
|
293
|
-
|
|
293
|
+
channelToken: 'sk_live_...',
|
|
294
294
|
sender: '5511999999999',
|
|
295
295
|
mediaId: '1013859600285441', // ID da mídia após upload
|
|
296
296
|
voice: false // Opcional: false para áudio básico
|
|
@@ -298,7 +298,7 @@ await sdk.whatsapp.sendAudio({
|
|
|
298
298
|
|
|
299
299
|
// Mensagem de voz (arquivo .ogg codec OPUS)
|
|
300
300
|
await sdk.whatsapp.sendAudio({
|
|
301
|
-
|
|
301
|
+
channelToken: 'sk_live_...',
|
|
302
302
|
sender: '5511999999999',
|
|
303
303
|
mediaId: '1013859600285441',
|
|
304
304
|
voice: true // true para mensagem de voz
|
|
@@ -310,7 +310,7 @@ await sdk.whatsapp.sendAudio({
|
|
|
310
310
|
```typescript
|
|
311
311
|
// Requer upload prévio da mídia para obter o mediaId
|
|
312
312
|
await sdk.whatsapp.sendVideo({
|
|
313
|
-
|
|
313
|
+
channelToken: 'sk_live_...',
|
|
314
314
|
sender: '5511999999999',
|
|
315
315
|
mediaId: '1166846181421424', // ID da mídia após upload
|
|
316
316
|
caption: 'Veja este vídeo!' // Opcional
|
|
@@ -322,7 +322,7 @@ await sdk.whatsapp.sendVideo({
|
|
|
322
322
|
```typescript
|
|
323
323
|
// Requer upload prévio da mídia para obter o mediaId
|
|
324
324
|
await sdk.whatsapp.sendDocument({
|
|
325
|
-
|
|
325
|
+
channelToken: 'sk_live_...',
|
|
326
326
|
sender: '5511999999999',
|
|
327
327
|
mediaId: '1376223850470843', // ID da mídia após upload
|
|
328
328
|
filename: 'documento.pdf', // Opcional
|
|
@@ -338,7 +338,7 @@ await sdk.whatsapp.sendDocument({
|
|
|
338
338
|
|
|
339
339
|
```typescript
|
|
340
340
|
await sdk.whatsapp.sendOrderDetails({
|
|
341
|
-
|
|
341
|
+
channelToken: 'sk_live_9999999999999999999999999',
|
|
342
342
|
sender: '5511999999999',
|
|
343
343
|
headerText: 'Confirmação de Pedido',
|
|
344
344
|
bodyText: 'Seu pedido #12345 está pronto para pagamento!',
|
|
@@ -391,7 +391,7 @@ await sdk.whatsapp.sendOrderDetails({
|
|
|
391
391
|
|
|
392
392
|
```typescript
|
|
393
393
|
await sdk.whatsapp.sendOrderDetails({
|
|
394
|
-
|
|
394
|
+
channelToken: 'sk_live_9999999999999999999999999',
|
|
395
395
|
sender: '5511999999999',
|
|
396
396
|
bodyText: 'Sua fatura está disponível para pagamento!',
|
|
397
397
|
reference_id: 'fatura_67890_1704067200',
|
|
@@ -438,7 +438,7 @@ await sdk.whatsapp.sendOrderDetails({
|
|
|
438
438
|
|
|
439
439
|
```typescript
|
|
440
440
|
await sdk.whatsapp.sendOrderDetails({
|
|
441
|
-
|
|
441
|
+
channelToken: 'sk_live_9999999999999999999999999',
|
|
442
442
|
sender: '5511999999999',
|
|
443
443
|
bodyText: 'Sua inscrição está confirmada! Efetue o pagamento via boleto.',
|
|
444
444
|
reference_id: 'inscricao_11111_1704067200',
|
|
@@ -485,7 +485,7 @@ await sdk.whatsapp.sendOrderDetails({
|
|
|
485
485
|
|
|
486
486
|
```typescript
|
|
487
487
|
await sdk.whatsapp.sendOrderDetails({
|
|
488
|
-
|
|
488
|
+
channelToken: 'sk_live_9999999999999999999999999',
|
|
489
489
|
sender: '5511999999999',
|
|
490
490
|
bodyText: 'Seu pedido está pronto! Escolha a forma de pagamento:',
|
|
491
491
|
reference_id: 'pedido_completo_22222_1704067200',
|
|
@@ -556,7 +556,7 @@ await sdk.whatsapp.sendOrderDetails({
|
|
|
556
556
|
|
|
557
557
|
```typescript
|
|
558
558
|
await sdk.whatsapp.sendOrderDetails({
|
|
559
|
-
|
|
559
|
+
channelToken: 'sk_live_9999999999999999999999999',
|
|
560
560
|
sender: '5511999999999',
|
|
561
561
|
bodyText: 'Black Friday! Seu pedido com desconto especial:',
|
|
562
562
|
reference_id: 'black_friday_33333_1704067200',
|
|
@@ -617,26 +617,26 @@ await sdk.whatsapp.sendOrderDetails({
|
|
|
617
617
|
|
|
618
618
|
```typescript
|
|
619
619
|
await sdk.whatsapp.sendOrderStatus({
|
|
620
|
-
|
|
620
|
+
channelToken: 'sk_live_...',
|
|
621
621
|
sender: '5511999999999',
|
|
622
622
|
bodyText: 'Seu pedido foi enviado!',
|
|
623
|
-
footerText: 'Obrigado!',
|
|
624
|
-
reference_id: 'pedido_12345_1704067200',
|
|
625
|
-
order_status: 'shipped',
|
|
626
|
-
status_description: 'Sua encomenda foi despachada pelos Correios',
|
|
627
|
-
payment_status: 'captured',
|
|
628
|
-
payment_timestamp: 1722445231
|
|
623
|
+
footerText: 'Obrigado!',
|
|
624
|
+
reference_id: 'pedido_12345_1704067200',
|
|
625
|
+
order_status: 'shipped',
|
|
626
|
+
status_description: 'Sua encomenda foi despachada pelos Correios',
|
|
627
|
+
payment_status: 'captured',
|
|
628
|
+
payment_timestamp: 1722445231
|
|
629
629
|
}, accessToken);
|
|
630
630
|
```
|
|
631
631
|
|
|
632
632
|
#### Enviar Sticker
|
|
633
633
|
|
|
634
634
|
```typescript
|
|
635
|
-
|
|
635
|
+
|
|
636
636
|
await sdk.whatsapp.sendSticker({
|
|
637
|
-
|
|
637
|
+
channelToken: 'sk_live_...',
|
|
638
638
|
sender: '5511999999999',
|
|
639
|
-
mediaId: '798882015472548'
|
|
639
|
+
mediaId: '798882015472548'
|
|
640
640
|
}, accessToken);
|
|
641
641
|
```
|
|
642
642
|
|
|
@@ -644,11 +644,11 @@ await sdk.whatsapp.sendSticker({
|
|
|
644
644
|
|
|
645
645
|
```typescript
|
|
646
646
|
await sdk.whatsapp.sendLocationRequest({
|
|
647
|
-
|
|
647
|
+
channelToken: 'sk_live_...',
|
|
648
648
|
sender: '5511999999999',
|
|
649
649
|
bodyText: 'Por favor, compartilhe sua localização para entregarmos seu pedido.',
|
|
650
|
-
headerText: 'Confirme sua entrega',
|
|
651
|
-
footerText: 'Sua privacidade é importante'
|
|
650
|
+
headerText: 'Confirme sua entrega',
|
|
651
|
+
footerText: 'Sua privacidade é importante'
|
|
652
652
|
}, accessToken);
|
|
653
653
|
```
|
|
654
654
|
|
|
@@ -656,17 +656,17 @@ await sdk.whatsapp.sendLocationRequest({
|
|
|
656
656
|
|
|
657
657
|
```typescript
|
|
658
658
|
await sdk.whatsapp.sendCtaUrl({
|
|
659
|
-
|
|
659
|
+
channelToken: 'sk_live_...',
|
|
660
660
|
sender: '5511999999999',
|
|
661
661
|
bodyText: 'Confira nosso site!',
|
|
662
|
-
buttonText: 'Acessar',
|
|
662
|
+
buttonText: 'Acessar',
|
|
663
663
|
url: 'https://example.com',
|
|
664
|
-
header: {
|
|
665
|
-
type: 'image',
|
|
666
|
-
link: 'https://example.com/banner.jpg'
|
|
667
|
-
|
|
664
|
+
header: {
|
|
665
|
+
type: 'image',
|
|
666
|
+
link: 'https://example.com/banner.jpg'
|
|
667
|
+
|
|
668
668
|
},
|
|
669
|
-
footerText: 'Ofertas válidas até 30/11'
|
|
669
|
+
footerText: 'Ofertas válidas até 30/11'
|
|
670
670
|
}, accessToken);
|
|
671
671
|
```
|
|
672
672
|
|
|
@@ -674,16 +674,16 @@ await sdk.whatsapp.sendCtaUrl({
|
|
|
674
674
|
|
|
675
675
|
```typescript
|
|
676
676
|
await sdk.whatsapp.sendMediaCarousel({
|
|
677
|
-
|
|
677
|
+
channelToken: 'sk_live_...',
|
|
678
678
|
sender: '5511999999999',
|
|
679
|
-
bodyText: 'Confira nossas ofertas da semana!',
|
|
680
|
-
cards: [
|
|
679
|
+
bodyText: 'Confira nossas ofertas da semana!',
|
|
680
|
+
cards: [
|
|
681
681
|
{
|
|
682
682
|
cardIndex: 0,
|
|
683
|
-
headerType: 'image',
|
|
683
|
+
headerType: 'image',
|
|
684
684
|
headerLink: 'https://example.com/image1.jpg',
|
|
685
|
-
bodyText: 'Oferta especial!',
|
|
686
|
-
buttonText: 'Comprar agora',
|
|
685
|
+
bodyText: 'Oferta especial!',
|
|
686
|
+
buttonText: 'Comprar agora',
|
|
687
687
|
url: 'https://example.com/product1'
|
|
688
688
|
},
|
|
689
689
|
{
|
|
@@ -702,26 +702,26 @@ await sdk.whatsapp.sendMediaCarousel({
|
|
|
702
702
|
|
|
703
703
|
```typescript
|
|
704
704
|
const media = await sdk.whatsapp.downloadMedia({
|
|
705
|
-
|
|
705
|
+
channelToken: 'sk_live_...',
|
|
706
706
|
url: 'https://lookaside.fbsbx.com/whatsapp_business/attachment/?mid=...'
|
|
707
707
|
}, accessToken);
|
|
708
708
|
|
|
709
|
-
|
|
710
|
-
console.log(media.data.buffer);
|
|
711
|
-
console.log(media.data.mimeType);
|
|
712
|
-
console.log(media.data.filename);
|
|
713
|
-
console.log(media.data.size);
|
|
709
|
+
|
|
710
|
+
console.log(media.data.buffer);
|
|
711
|
+
console.log(media.data.mimeType);
|
|
712
|
+
console.log(media.data.filename);
|
|
713
|
+
console.log(media.data.size);
|
|
714
714
|
```
|
|
715
715
|
|
|
716
716
|
#### Responder Mensagem
|
|
717
717
|
|
|
718
718
|
```typescript
|
|
719
719
|
await sdk.whatsapp.replyMessage({
|
|
720
|
-
|
|
721
|
-
sender: '5511999999999',
|
|
720
|
+
channelToken: 'sk_live_...',
|
|
721
|
+
sender: '5511999999999',
|
|
722
722
|
messageText: 'Esta é uma resposta!',
|
|
723
|
-
replyMessageId: 'wamid.xxx',
|
|
724
|
-
preview_url: false
|
|
723
|
+
replyMessageId: 'wamid.xxx',
|
|
724
|
+
preview_url: false
|
|
725
725
|
}, accessToken);
|
|
726
726
|
```
|
|
727
727
|
|
|
@@ -729,25 +729,25 @@ await sdk.whatsapp.replyMessage({
|
|
|
729
729
|
|
|
730
730
|
```typescript
|
|
731
731
|
await sdk.whatsapp.reactMessage({
|
|
732
|
-
|
|
733
|
-
sender: '5511999999999',
|
|
734
|
-
emoji: '👍',
|
|
735
|
-
message_id: 'wamid.xxx'
|
|
732
|
+
channelToken: 'sk_live_...',
|
|
733
|
+
sender: '5511999999999',
|
|
734
|
+
emoji: '👍',
|
|
735
|
+
message_id: 'wamid.xxx'
|
|
736
736
|
}, accessToken);
|
|
737
737
|
```
|
|
738
738
|
|
|
739
739
|
#### Gerenciar Templates
|
|
740
740
|
|
|
741
741
|
```typescript
|
|
742
|
-
|
|
742
|
+
|
|
743
743
|
const templates = await sdk.whatsapp.listTemplates('sk_live_...', accessToken);
|
|
744
744
|
|
|
745
|
-
|
|
745
|
+
|
|
746
746
|
const template = await sdk.whatsapp.getTemplate('sk_live_...', 'template_id', accessToken);
|
|
747
747
|
|
|
748
|
-
|
|
748
|
+
|
|
749
749
|
await sdk.whatsapp.createTemplate({
|
|
750
|
-
|
|
750
|
+
channelToken: 'sk_live_...',
|
|
751
751
|
name: 'welcome_message',
|
|
752
752
|
language: 'pt_BR',
|
|
753
753
|
category: 'UTILITY',
|
|
@@ -760,8 +760,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
760
760
|
}, accessToken);
|
|
761
761
|
|
|
762
762
|
#### Upload de Mídia
|
|
763
|
-
|
|
764
|
-
O método `uploadMedia` é usado para fazer upload de arquivos (imagens, vídeos, áudios, documentos) que serão usados em templates ou enviados via `sendAudio`, `sendVideo`, `sendDocument` ou `sendSticker`.
|
|
763
|
+
|
|
765
764
|
|
|
766
765
|
**Exemplo 1: Upload de imagem sem filename (opcional)**
|
|
767
766
|
|
|
@@ -771,10 +770,10 @@ import fs from 'fs';
|
|
|
771
770
|
|
|
772
771
|
const fileBuffer = fs.readFileSync('./imagem.jpg');
|
|
773
772
|
const uploadResult = await sdk.whatsapp.uploadMedia({
|
|
774
|
-
|
|
773
|
+
channelToken: 'sk_live_...',
|
|
775
774
|
file: fileBuffer,
|
|
776
775
|
mediaType: 'image'
|
|
777
|
-
|
|
776
|
+
|
|
778
777
|
}, accessToken);
|
|
779
778
|
|
|
780
779
|
const mediaId = uploadResult.data.handle; // "4::aW1hZ2UtMTIzNDU2Nzg5MGCE..."
|
|
@@ -788,7 +787,7 @@ import fs from 'fs';
|
|
|
788
787
|
|
|
789
788
|
const fileBuffer = fs.readFileSync('./imagem.jpg');
|
|
790
789
|
const uploadResult = await sdk.whatsapp.uploadMedia({
|
|
791
|
-
|
|
790
|
+
channelToken: 'sk_live_...',
|
|
792
791
|
file: fileBuffer,
|
|
793
792
|
mediaType: 'image',
|
|
794
793
|
filename: 'minha_imagem.jpg'
|
|
@@ -804,15 +803,15 @@ import fs from 'fs';
|
|
|
804
803
|
|
|
805
804
|
const videoBuffer = fs.readFileSync('./video.mp4');
|
|
806
805
|
const uploadResult = await sdk.whatsapp.uploadMedia({
|
|
807
|
-
|
|
806
|
+
channelToken: 'sk_live_...',
|
|
808
807
|
file: videoBuffer,
|
|
809
808
|
mediaType: 'video',
|
|
810
809
|
filename: 'meu_video.mp4'
|
|
811
810
|
}, accessToken);
|
|
812
811
|
|
|
813
|
-
|
|
812
|
+
|
|
814
813
|
await sdk.whatsapp.sendVideo({
|
|
815
|
-
|
|
814
|
+
channelToken: 'sk_live_...',
|
|
816
815
|
sender: '5511999999999',
|
|
817
816
|
mediaId: uploadResult.data.handle,
|
|
818
817
|
caption: 'Confira este vídeo!'
|
|
@@ -827,7 +826,7 @@ import fs from 'fs';
|
|
|
827
826
|
|
|
828
827
|
|
|
829
828
|
await sdk.whatsapp.sendDocument({
|
|
830
|
-
|
|
829
|
+
channelToken: 'sk_live_...',
|
|
831
830
|
sender: '5511999999999',
|
|
832
831
|
mediaId: uploadResult.data.handle,
|
|
833
832
|
filename: 'documento_importante.pdf',
|
|
@@ -844,15 +843,15 @@ import fs from 'fs';
|
|
|
844
843
|
|
|
845
844
|
const stickerBuffer = fs.readFileSync('./sticker.webp');
|
|
846
845
|
const uploadResult = await sdk.whatsapp.uploadMedia({
|
|
847
|
-
|
|
846
|
+
channelToken: 'sk_live_...',
|
|
848
847
|
file: stickerBuffer,
|
|
849
|
-
mediaType: 'image',
|
|
848
|
+
mediaType: 'image',
|
|
850
849
|
filename: 'sticker.webp'
|
|
851
850
|
}, accessToken);
|
|
852
851
|
|
|
853
|
-
|
|
852
|
+
|
|
854
853
|
await sdk.whatsapp.sendSticker({
|
|
855
|
-
|
|
854
|
+
channelToken: 'sk_live_...',
|
|
856
855
|
sender: '5511999999999',
|
|
857
856
|
mediaId: uploadResult.data.handle
|
|
858
857
|
}, accessToken);
|
|
@@ -861,11 +860,11 @@ await sdk.whatsapp.sendSticker({
|
|
|
861
860
|
**Exemplo 7: Upload em ambiente Browser (Frontend)**
|
|
862
861
|
|
|
863
862
|
```typescript
|
|
864
|
-
|
|
863
|
+
|
|
865
864
|
const fileInput = document.querySelector('input[type="file"]');
|
|
866
865
|
const file = fileInput.files[0];
|
|
867
866
|
|
|
868
|
-
|
|
867
|
+
|
|
869
868
|
const getMediaType = (file: File): 'image' | 'video' | 'document' => {
|
|
870
869
|
if (file.type.startsWith('image/')) return 'image';
|
|
871
870
|
if (file.type.startsWith('video/')) return 'video';
|
|
@@ -873,10 +872,10 @@ const getMediaType = (file: File): 'image' | 'video' | 'document' => {
|
|
|
873
872
|
};
|
|
874
873
|
|
|
875
874
|
const uploadResult = await sdk.whatsapp.uploadMedia({
|
|
876
|
-
|
|
875
|
+
channelToken: 'sk_live_...',
|
|
877
876
|
file: file,
|
|
878
877
|
mediaType: getMediaType(file),
|
|
879
|
-
filename: file.name
|
|
878
|
+
filename: file.name
|
|
880
879
|
}, accessToken);
|
|
881
880
|
|
|
882
881
|
const mediaId = uploadResult.data.handle;
|
|
@@ -885,11 +884,11 @@ const mediaId = uploadResult.data.handle;
|
|
|
885
884
|
**Exemplo 8: Upload usando Blob (Browser)**
|
|
886
885
|
|
|
887
886
|
```typescript
|
|
888
|
-
|
|
887
|
+
|
|
889
888
|
const blob = new Blob(['conteúdo do arquivo'], { type: 'text/plain' });
|
|
890
889
|
|
|
891
890
|
const uploadResult = await sdk.whatsapp.uploadMedia({
|
|
892
|
-
|
|
891
|
+
channelToken: 'sk_live_...',
|
|
893
892
|
file: blob,
|
|
894
893
|
mediaType: 'document',
|
|
895
894
|
filename: 'arquivo.txt'
|
|
@@ -906,15 +905,15 @@ import fs from 'fs';
|
|
|
906
905
|
// Upload da imagem para usar no header do template
|
|
907
906
|
const imageBuffer = fs.readFileSync('./logo.jpg');
|
|
908
907
|
const uploadResult = await sdk.whatsapp.uploadMedia({
|
|
909
|
-
|
|
908
|
+
channelToken: 'sk_live_...',
|
|
910
909
|
file: imageBuffer,
|
|
911
910
|
mediaType: 'image'
|
|
912
|
-
|
|
911
|
+
|
|
913
912
|
}, accessToken);
|
|
914
913
|
|
|
915
|
-
|
|
914
|
+
|
|
916
915
|
await sdk.whatsapp.createTemplate({
|
|
917
|
-
|
|
916
|
+
channelToken: 'sk_live_...',
|
|
918
917
|
name: 'product_launch',
|
|
919
918
|
category: 'MARKETING',
|
|
920
919
|
language: 'pt_BR',
|
|
@@ -923,7 +922,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
923
922
|
type: 'HEADER',
|
|
924
923
|
format: 'IMAGE',
|
|
925
924
|
example: {
|
|
926
|
-
header_handle: [uploadResult.data.handle]
|
|
925
|
+
header_handle: [uploadResult.data.handle]
|
|
927
926
|
}
|
|
928
927
|
},
|
|
929
928
|
{
|
|
@@ -952,7 +951,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
952
951
|
```typescript
|
|
953
952
|
// Template de atualização de envio (UTILITY)
|
|
954
953
|
await sdk.whatsapp.createTemplate({
|
|
955
|
-
|
|
954
|
+
channelToken: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
|
956
955
|
name: 'shipping_update',
|
|
957
956
|
category: 'UTILITY',
|
|
958
957
|
language: 'pt_BR',
|
|
@@ -987,7 +986,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
987
986
|
|
|
988
987
|
// Template de promoção sazonal (MARKETING)
|
|
989
988
|
await sdk.whatsapp.createTemplate({
|
|
990
|
-
|
|
989
|
+
channelToken: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
|
991
990
|
name: 'seasonal_promotion',
|
|
992
991
|
category: 'MARKETING',
|
|
993
992
|
language: 'en_US',
|
|
@@ -1032,7 +1031,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
1032
1031
|
|
|
1033
1032
|
// Template com documento PDF (UTILITY)
|
|
1034
1033
|
await sdk.whatsapp.createTemplate({
|
|
1035
|
-
|
|
1034
|
+
channelToken: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
|
1036
1035
|
name: 'order_confirmation_pdf',
|
|
1037
1036
|
category: 'UTILITY',
|
|
1038
1037
|
language: 'en_US',
|
|
@@ -1075,7 +1074,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
1075
1074
|
|
|
1076
1075
|
// Template de lançamento de produto com imagem (MARKETING)
|
|
1077
1076
|
await sdk.whatsapp.createTemplate({
|
|
1078
|
-
|
|
1077
|
+
channelToken: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
|
1079
1078
|
name: 'product_launch',
|
|
1080
1079
|
category: 'MARKETING',
|
|
1081
1080
|
language: 'pt_BR',
|
|
@@ -1116,7 +1115,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
1116
1115
|
|
|
1117
1116
|
// Template de cupom promocional (MARKETING)
|
|
1118
1117
|
await sdk.whatsapp.createTemplate({
|
|
1119
|
-
|
|
1118
|
+
channelToken: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
|
1120
1119
|
name: 'coupon_promo',
|
|
1121
1120
|
category: 'MARKETING',
|
|
1122
1121
|
language: 'pt_BR',
|
|
@@ -1156,7 +1155,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
1156
1155
|
|
|
1157
1156
|
// Template com parâmetros nomeados (UTILITY)
|
|
1158
1157
|
await sdk.whatsapp.createTemplate({
|
|
1159
|
-
|
|
1158
|
+
channelToken: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
|
1160
1159
|
name: 'order_confirmation',
|
|
1161
1160
|
category: 'UTILITY',
|
|
1162
1161
|
language: 'en_US',
|
|
@@ -1183,7 +1182,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
1183
1182
|
|
|
1184
1183
|
// Template de atualização de entrega com localização (UTILITY)
|
|
1185
1184
|
await sdk.whatsapp.createTemplate({
|
|
1186
|
-
|
|
1185
|
+
channelToken: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
|
1187
1186
|
name: 'order_delivery_update',
|
|
1188
1187
|
category: 'UTILITY',
|
|
1189
1188
|
language: 'en_US',
|
|
@@ -1220,7 +1219,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
1220
1219
|
|
|
1221
1220
|
// Template de mensagem de boas-vindas simples (MARKETING)
|
|
1222
1221
|
await sdk.whatsapp.createTemplate({
|
|
1223
|
-
|
|
1222
|
+
channelToken: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
|
1224
1223
|
name: 'welcome_message',
|
|
1225
1224
|
category: 'MARKETING',
|
|
1226
1225
|
language: 'pt_BR',
|
|
@@ -1257,7 +1256,7 @@ await sdk.whatsapp.createTemplate({
|
|
|
1257
1256
|
|
|
1258
1257
|
```typescript
|
|
1259
1258
|
await sdk.telegram.sendMessage({
|
|
1260
|
-
|
|
1259
|
+
channelToken: 'sk_live_...',
|
|
1261
1260
|
chatId: '123456789',
|
|
1262
1261
|
text: 'Olá! Como posso ajudar?',
|
|
1263
1262
|
parseMode: 'HTML'
|
|
@@ -1268,7 +1267,7 @@ await sdk.telegram.sendMessage({
|
|
|
1268
1267
|
|
|
1269
1268
|
```typescript
|
|
1270
1269
|
await sdk.telegram.sendMedia({
|
|
1271
|
-
|
|
1270
|
+
channelToken: 'sk_live_...',
|
|
1272
1271
|
chatId: '123456789',
|
|
1273
1272
|
fileUrl: 'https://example.com/image.jpg',
|
|
1274
1273
|
type: 'photo',
|
|
@@ -1280,7 +1279,7 @@ await sdk.telegram.sendMedia({
|
|
|
1280
1279
|
|
|
1281
1280
|
```typescript
|
|
1282
1281
|
await sdk.telegram.sendButtons({
|
|
1283
|
-
|
|
1282
|
+
channelToken: 'sk_live_...',
|
|
1284
1283
|
chatId: '123456789',
|
|
1285
1284
|
text: 'Escolha uma opção:',
|
|
1286
1285
|
buttons: [
|
|
@@ -1296,7 +1295,7 @@ await sdk.telegram.sendButtons({
|
|
|
1296
1295
|
|
|
1297
1296
|
```typescript
|
|
1298
1297
|
await sdk.telegram.sendLocation({
|
|
1299
|
-
|
|
1298
|
+
channelToken: 'sk_live_...',
|
|
1300
1299
|
chatId: '123456789',
|
|
1301
1300
|
latitude: -23.5505,
|
|
1302
1301
|
longitude: -46.6333
|
|
@@ -1307,7 +1306,7 @@ await sdk.telegram.sendLocation({
|
|
|
1307
1306
|
|
|
1308
1307
|
```typescript
|
|
1309
1308
|
await sdk.telegram.sendContact({
|
|
1310
|
-
|
|
1309
|
+
channelToken: 'sk_live_...',
|
|
1311
1310
|
chatId: '123456789',
|
|
1312
1311
|
phoneNumber: '+5511999999999',
|
|
1313
1312
|
firstName: 'João',
|
|
@@ -1319,7 +1318,7 @@ await sdk.telegram.sendContact({
|
|
|
1319
1318
|
|
|
1320
1319
|
```typescript
|
|
1321
1320
|
await sdk.telegram.sendPoll({
|
|
1322
|
-
|
|
1321
|
+
channelToken: 'sk_live_...',
|
|
1323
1322
|
chatId: '123456789',
|
|
1324
1323
|
question: 'Qual sua cor favorita?',
|
|
1325
1324
|
options: ['Vermelho', 'Azul', 'Verde'],
|
|
@@ -1333,7 +1332,7 @@ await sdk.telegram.sendPoll({
|
|
|
1333
1332
|
|
|
1334
1333
|
```typescript
|
|
1335
1334
|
await sdk.telegram.sendVenue({
|
|
1336
|
-
|
|
1335
|
+
channelToken: 'sk_live_...',
|
|
1337
1336
|
chatId: '123456789',
|
|
1338
1337
|
latitude: -23.5505,
|
|
1339
1338
|
longitude: -46.6333,
|
|
@@ -1346,7 +1345,7 @@ await sdk.telegram.sendVenue({
|
|
|
1346
1345
|
|
|
1347
1346
|
```typescript
|
|
1348
1347
|
await sdk.telegram.sendDice({
|
|
1349
|
-
|
|
1348
|
+
channelToken: 'sk_live_...',
|
|
1350
1349
|
chatId: '123456789',
|
|
1351
1350
|
emoji: '🎲'
|
|
1352
1351
|
}, accessToken);
|
|
@@ -1356,7 +1355,7 @@ await sdk.telegram.sendDice({
|
|
|
1356
1355
|
|
|
1357
1356
|
```typescript
|
|
1358
1357
|
await sdk.telegram.sendSticker({
|
|
1359
|
-
|
|
1358
|
+
channelToken: 'sk_live_...',
|
|
1360
1359
|
chatId: '123456789',
|
|
1361
1360
|
stickerUrl: 'https://example.com/sticker.webp'
|
|
1362
1361
|
}, accessToken);
|
|
@@ -1366,7 +1365,7 @@ await sdk.telegram.sendSticker({
|
|
|
1366
1365
|
|
|
1367
1366
|
```typescript
|
|
1368
1367
|
await sdk.telegram.sendVoice({
|
|
1369
|
-
|
|
1368
|
+
channelToken: 'sk_live_...',
|
|
1370
1369
|
chatId: '123456789',
|
|
1371
1370
|
voiceUrl: 'https://example.com/voice.ogg',
|
|
1372
1371
|
caption: 'Mensagem de voz',
|
|
@@ -1378,7 +1377,7 @@ await sdk.telegram.sendVoice({
|
|
|
1378
1377
|
|
|
1379
1378
|
```typescript
|
|
1380
1379
|
await sdk.telegram.sendVideoNote({
|
|
1381
|
-
|
|
1380
|
+
channelToken: 'sk_live_...',
|
|
1382
1381
|
chatId: '123456789',
|
|
1383
1382
|
videoNoteUrl: 'https://example.com/video_note.mp4',
|
|
1384
1383
|
duration: 10,
|
|
@@ -1390,7 +1389,7 @@ await sdk.telegram.sendVideoNote({
|
|
|
1390
1389
|
|
|
1391
1390
|
```typescript
|
|
1392
1391
|
await sdk.telegram.sendMediaGroup({
|
|
1393
|
-
|
|
1392
|
+
channelToken: 'sk_live_...',
|
|
1394
1393
|
chatId: '123456789',
|
|
1395
1394
|
media: [
|
|
1396
1395
|
{ type: 'photo', media: 'https://example.com/image1.jpg', caption: 'Imagem 1' },
|
|
@@ -1403,7 +1402,7 @@ await sdk.telegram.sendMediaGroup({
|
|
|
1403
1402
|
|
|
1404
1403
|
```typescript
|
|
1405
1404
|
await sdk.telegram.sendReplyKeyboard({
|
|
1406
|
-
|
|
1405
|
+
channelToken: 'sk_live_...',
|
|
1407
1406
|
chatId: '123456789',
|
|
1408
1407
|
text: 'Escolha uma opção:',
|
|
1409
1408
|
keyboard: [
|
|
@@ -1419,7 +1418,7 @@ await sdk.telegram.sendReplyKeyboard({
|
|
|
1419
1418
|
|
|
1420
1419
|
```typescript
|
|
1421
1420
|
await sdk.telegram.editMessage({
|
|
1422
|
-
|
|
1421
|
+
channelToken: 'sk_live_...',
|
|
1423
1422
|
chatId: '123456789',
|
|
1424
1423
|
messageId: 123,
|
|
1425
1424
|
text: 'Mensagem editada!',
|
|
@@ -1431,7 +1430,7 @@ await sdk.telegram.editMessage({
|
|
|
1431
1430
|
|
|
1432
1431
|
```typescript
|
|
1433
1432
|
await sdk.telegram.deleteMessage({
|
|
1434
|
-
|
|
1433
|
+
channelToken: 'sk_live_...',
|
|
1435
1434
|
chatId: '123456789',
|
|
1436
1435
|
messageId: 123
|
|
1437
1436
|
}, accessToken);
|
|
@@ -1443,26 +1442,29 @@ await sdk.telegram.deleteMessage({
|
|
|
1443
1442
|
|
|
1444
1443
|
|
|
1445
1444
|
const media = await sdk.telegram.downloadMedia({
|
|
1446
|
-
|
|
1445
|
+
channelToken: 'sk_live_...',
|
|
1447
1446
|
fileId: 'AgACAgEAAxkBAAItNmlmklyYNCEtvaFphVfSSO7CrEOjAALUC2sbh9owR9hT7MhQnTGfAQADAgADcwADOAQ'
|
|
1448
1447
|
}, accessToken);
|
|
1449
1448
|
|
|
1450
|
-
|
|
1451
|
-
console.log(media.data.buffer);
|
|
1452
|
-
console.log(media.data.mimeType);
|
|
1453
|
-
console.log(media.data.filename);
|
|
1454
|
-
console.log(media.data.size);
|
|
1449
|
+
|
|
1450
|
+
console.log(media.data.buffer);
|
|
1451
|
+
console.log(media.data.mimeType);
|
|
1452
|
+
console.log(media.data.filename);
|
|
1453
|
+
console.log(media.data.size);
|
|
1455
1454
|
```
|
|
1456
1455
|
|
|
1457
1456
|
### WebChat
|
|
1457
|
+
|
|
1458
1458
|
|
|
1459
1459
|
#### Enviar Mensagem de Texto
|
|
1460
1460
|
|
|
1461
1461
|
```typescript
|
|
1462
1462
|
await sdk.webchat.sendText({
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
messageText: 'Olá!'
|
|
1463
|
+
channelToken: 'sk_live_...',
|
|
1464
|
+
chatId: 'chat_123456789',
|
|
1465
|
+
messageText: 'Olá!',
|
|
1466
|
+
typing: true, // Opcional: mostrar indicador de digitação
|
|
1467
|
+
typingTime: 2000 // Opcional: tempo de digitação em ms
|
|
1466
1468
|
}, accessToken);
|
|
1467
1469
|
```
|
|
1468
1470
|
|
|
@@ -1470,18 +1472,22 @@ await sdk.webchat.sendText({
|
|
|
1470
1472
|
|
|
1471
1473
|
```typescript
|
|
1472
1474
|
await sdk.webchat.sendCard({
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
+
channelToken: 'sk_live_...',
|
|
1476
|
+
chatId: 'chat_123456789',
|
|
1475
1477
|
title: 'Produto',
|
|
1476
1478
|
description: 'Descrição do produto',
|
|
1477
1479
|
imageUrl: 'https://example.com/image.jpg',
|
|
1478
1480
|
buttons: [
|
|
1479
1481
|
{
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
+
id: 'btn_1', // Opcional: ID único do botão
|
|
1483
|
+
text: 'Ver Mais',
|
|
1484
|
+
type: 'url', // 'text' | 'url' | 'phone' | 'postback'
|
|
1485
|
+
url: 'https://example.com/product',
|
|
1482
1486
|
value: 'https://example.com/product'
|
|
1483
1487
|
}
|
|
1484
|
-
]
|
|
1488
|
+
],
|
|
1489
|
+
typing: true,
|
|
1490
|
+
typingTime: 3000
|
|
1485
1491
|
}, accessToken);
|
|
1486
1492
|
```
|
|
1487
1493
|
|
|
@@ -1489,11 +1495,13 @@ await sdk.webchat.sendCard({
|
|
|
1489
1495
|
|
|
1490
1496
|
```typescript
|
|
1491
1497
|
await sdk.webchat.sendMedia({
|
|
1492
|
-
|
|
1493
|
-
|
|
1498
|
+
channelToken: 'sk_live_...',
|
|
1499
|
+
chatId: 'chat_123456789',
|
|
1494
1500
|
fileUrl: 'https://example.com/image.jpg',
|
|
1495
|
-
type: 'image',
|
|
1496
|
-
caption: 'Veja esta imagem!'
|
|
1501
|
+
type: 'image', // 'image' | 'video' | 'audio' | 'file'
|
|
1502
|
+
caption: 'Veja esta imagem!',
|
|
1503
|
+
typing: true,
|
|
1504
|
+
typingTime: 2500
|
|
1497
1505
|
}, accessToken);
|
|
1498
1506
|
```
|
|
1499
1507
|
|
|
@@ -1501,26 +1509,39 @@ await sdk.webchat.sendMedia({
|
|
|
1501
1509
|
|
|
1502
1510
|
```typescript
|
|
1503
1511
|
await sdk.webchat.sendCarousel({
|
|
1504
|
-
|
|
1505
|
-
|
|
1512
|
+
channelToken: 'sk_live_...',
|
|
1513
|
+
chatId: 'chat_123456789',
|
|
1506
1514
|
cards: [
|
|
1507
1515
|
{
|
|
1508
1516
|
title: 'Produto 1',
|
|
1509
|
-
|
|
1517
|
+
subtitle: 'Descrição do produto 1',
|
|
1510
1518
|
imageUrl: 'https://example.com/product1.jpg',
|
|
1511
1519
|
buttons: [
|
|
1512
|
-
{
|
|
1520
|
+
{
|
|
1521
|
+
id: 'btn_1',
|
|
1522
|
+
text: 'Ver Mais',
|
|
1523
|
+
type: 'url',
|
|
1524
|
+
url: 'https://example.com/product1',
|
|
1525
|
+
value: 'https://example.com/product1'
|
|
1526
|
+
}
|
|
1513
1527
|
]
|
|
1514
1528
|
},
|
|
1515
1529
|
{
|
|
1516
1530
|
title: 'Produto 2',
|
|
1517
|
-
|
|
1531
|
+
subtitle: 'Descrição do produto 2',
|
|
1518
1532
|
imageUrl: 'https://example.com/product2.jpg',
|
|
1519
1533
|
buttons: [
|
|
1520
|
-
{
|
|
1534
|
+
{
|
|
1535
|
+
id: 'btn_2',
|
|
1536
|
+
text: 'Comprar',
|
|
1537
|
+
type: 'postback',
|
|
1538
|
+
value: 'BUY_PRODUCT_2'
|
|
1539
|
+
}
|
|
1521
1540
|
]
|
|
1522
1541
|
}
|
|
1523
|
-
]
|
|
1542
|
+
],
|
|
1543
|
+
typing: true,
|
|
1544
|
+
typingTime: 4000
|
|
1524
1545
|
}, accessToken);
|
|
1525
1546
|
```
|
|
1526
1547
|
|
|
@@ -1528,24 +1549,40 @@ await sdk.webchat.sendCarousel({
|
|
|
1528
1549
|
|
|
1529
1550
|
```typescript
|
|
1530
1551
|
await sdk.webchat.sendForm({
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1552
|
+
channelToken: 'sk_live_...',
|
|
1553
|
+
chatId: 'chat_123456789',
|
|
1554
|
+
id: 'form_contact', // Opcional: ID único do formulário
|
|
1555
|
+
title: 'Formulário de Contato', // Opcional
|
|
1534
1556
|
fields: [
|
|
1535
1557
|
{
|
|
1536
|
-
|
|
1537
|
-
name: 'name',
|
|
1558
|
+
id: 'name', // Opcional: se não fornecido, usa 'name'
|
|
1559
|
+
name: 'name', // Opcional: mantido para compatibilidade
|
|
1560
|
+
type: 'text', // 'text' | 'email' | 'number' | 'tel' | 'date' | 'select'
|
|
1538
1561
|
label: 'Nome',
|
|
1562
|
+
placeholder: 'Digite seu nome',
|
|
1539
1563
|
required: true
|
|
1540
1564
|
},
|
|
1541
1565
|
{
|
|
1566
|
+
id: 'email',
|
|
1542
1567
|
type: 'email',
|
|
1543
|
-
name: 'email',
|
|
1544
1568
|
label: 'E-mail',
|
|
1569
|
+
placeholder: 'Digite seu e-mail',
|
|
1545
1570
|
required: true
|
|
1571
|
+
},
|
|
1572
|
+
{
|
|
1573
|
+
id: 'subject',
|
|
1574
|
+
type: 'select',
|
|
1575
|
+
label: 'Assunto',
|
|
1576
|
+
required: true,
|
|
1577
|
+
options: [
|
|
1578
|
+
{ value: 'support', label: 'Suporte' },
|
|
1579
|
+
{ value: 'sales', label: 'Vendas' }
|
|
1580
|
+
]
|
|
1546
1581
|
}
|
|
1547
1582
|
],
|
|
1548
|
-
submitButtonText: 'Enviar'
|
|
1583
|
+
submitButtonText: 'Enviar', // Opcional
|
|
1584
|
+
typing: true,
|
|
1585
|
+
typingTime: 3000
|
|
1549
1586
|
}, accessToken);
|
|
1550
1587
|
```
|
|
1551
1588
|
|
|
@@ -1553,14 +1590,23 @@ await sdk.webchat.sendForm({
|
|
|
1553
1590
|
|
|
1554
1591
|
```typescript
|
|
1555
1592
|
await sdk.webchat.sendQuickReplies({
|
|
1556
|
-
|
|
1557
|
-
|
|
1593
|
+
channelToken: 'sk_live_...',
|
|
1594
|
+
chatId: 'chat_123456789',
|
|
1558
1595
|
messageText: 'Como podemos ajudar?',
|
|
1559
1596
|
quickReplies: [
|
|
1560
|
-
{
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1597
|
+
{
|
|
1598
|
+
id: 'qr_1', // Opcional: ID único
|
|
1599
|
+
text: 'Suporte',
|
|
1600
|
+
value: 'SUPPORT' // Opcional: valor para identificar a resposta
|
|
1601
|
+
},
|
|
1602
|
+
{
|
|
1603
|
+
id: 'qr_2',
|
|
1604
|
+
text: 'Vendas',
|
|
1605
|
+
value: 'SALES'
|
|
1606
|
+
}
|
|
1607
|
+
],
|
|
1608
|
+
typing: true,
|
|
1609
|
+
typingTime: 2000
|
|
1564
1610
|
}, accessToken);
|
|
1565
1611
|
```
|
|
1566
1612
|
|
|
@@ -1568,13 +1614,26 @@ await sdk.webchat.sendQuickReplies({
|
|
|
1568
1614
|
|
|
1569
1615
|
```typescript
|
|
1570
1616
|
await sdk.webchat.sendButtons({
|
|
1571
|
-
|
|
1572
|
-
|
|
1617
|
+
channelToken: 'sk_live_...',
|
|
1618
|
+
chatId: 'chat_123456789',
|
|
1573
1619
|
messageText: 'Escolha uma opção:',
|
|
1574
1620
|
buttons: [
|
|
1575
|
-
{
|
|
1576
|
-
|
|
1577
|
-
|
|
1621
|
+
{
|
|
1622
|
+
id: 'btn_1',
|
|
1623
|
+
text: 'Visitar Site',
|
|
1624
|
+
type: 'url',
|
|
1625
|
+
url: 'https://example.com',
|
|
1626
|
+
value: 'https://example.com'
|
|
1627
|
+
},
|
|
1628
|
+
{
|
|
1629
|
+
id: 'btn_2',
|
|
1630
|
+
text: 'Falar com Atendente',
|
|
1631
|
+
type: 'postback',
|
|
1632
|
+
value: 'HUMAN_AGENT'
|
|
1633
|
+
}
|
|
1634
|
+
],
|
|
1635
|
+
typing: true,
|
|
1636
|
+
typingTime: 2500
|
|
1578
1637
|
}, accessToken);
|
|
1579
1638
|
```
|
|
1580
1639
|
|
|
@@ -1584,7 +1643,7 @@ await sdk.webchat.sendButtons({
|
|
|
1584
1643
|
|
|
1585
1644
|
```typescript
|
|
1586
1645
|
const posts = await sdk.facebook.listPosts({
|
|
1587
|
-
|
|
1646
|
+
channelToken: 'sk_live_...',
|
|
1588
1647
|
pageId: 'page_id',
|
|
1589
1648
|
limit: 10
|
|
1590
1649
|
}, accessToken);
|
|
@@ -1594,7 +1653,7 @@ const posts = await sdk.facebook.listPosts({
|
|
|
1594
1653
|
|
|
1595
1654
|
```typescript
|
|
1596
1655
|
await sdk.facebook.createPost({
|
|
1597
|
-
|
|
1656
|
+
channelToken: 'sk_live_...',
|
|
1598
1657
|
pageId: 'page_id',
|
|
1599
1658
|
message: 'Novo post!',
|
|
1600
1659
|
link: 'https://example.com'
|
|
@@ -1605,7 +1664,7 @@ await sdk.facebook.createPost({
|
|
|
1605
1664
|
|
|
1606
1665
|
```typescript
|
|
1607
1666
|
const comments = await sdk.facebook.listComments({
|
|
1608
|
-
|
|
1667
|
+
channelToken: 'sk_live_...',
|
|
1609
1668
|
postId: 'post_id',
|
|
1610
1669
|
limit: 20
|
|
1611
1670
|
}, accessToken);
|
|
@@ -1615,7 +1674,7 @@ const comments = await sdk.facebook.listComments({
|
|
|
1615
1674
|
|
|
1616
1675
|
```typescript
|
|
1617
1676
|
await sdk.facebook.replyComment({
|
|
1618
|
-
|
|
1677
|
+
channelToken: 'sk_live_...',
|
|
1619
1678
|
commentId: 'comment_id',
|
|
1620
1679
|
message: 'Obrigado pelo comentário!'
|
|
1621
1680
|
}, accessToken);
|
|
@@ -1625,7 +1684,7 @@ await sdk.facebook.replyComment({
|
|
|
1625
1684
|
|
|
1626
1685
|
```typescript
|
|
1627
1686
|
await sdk.facebook.deleteComment({
|
|
1628
|
-
|
|
1687
|
+
channelToken: 'sk_live_...',
|
|
1629
1688
|
commentId: 'comment_id'
|
|
1630
1689
|
}, accessToken);
|
|
1631
1690
|
```
|
|
@@ -1634,7 +1693,7 @@ await sdk.facebook.deleteComment({
|
|
|
1634
1693
|
|
|
1635
1694
|
```typescript
|
|
1636
1695
|
await sdk.facebook.sendText({
|
|
1637
|
-
|
|
1696
|
+
channelToken: 'sk_live_...',
|
|
1638
1697
|
recipientId: 'user_id',
|
|
1639
1698
|
message: 'Olá!'
|
|
1640
1699
|
}, accessToken);
|
|
@@ -1644,7 +1703,7 @@ await sdk.facebook.sendText({
|
|
|
1644
1703
|
|
|
1645
1704
|
```typescript
|
|
1646
1705
|
await sdk.facebook.sendMedia({
|
|
1647
|
-
|
|
1706
|
+
channelToken: 'sk_live_...',
|
|
1648
1707
|
recipientId: 'user_id',
|
|
1649
1708
|
fileUrl: 'https://example.com/image.jpg',
|
|
1650
1709
|
type: 'image',
|
|
@@ -1656,7 +1715,7 @@ await sdk.facebook.sendMedia({
|
|
|
1656
1715
|
|
|
1657
1716
|
```typescript
|
|
1658
1717
|
await sdk.facebook.sendButtons({
|
|
1659
|
-
|
|
1718
|
+
channelToken: 'sk_live_...',
|
|
1660
1719
|
recipientId: 'user_id',
|
|
1661
1720
|
message: 'Escolha uma opção:',
|
|
1662
1721
|
buttons: [
|
|
@@ -1670,7 +1729,7 @@ await sdk.facebook.sendButtons({
|
|
|
1670
1729
|
|
|
1671
1730
|
```typescript
|
|
1672
1731
|
await sdk.facebook.sendSticker({
|
|
1673
|
-
|
|
1732
|
+
channelToken: 'sk_live_...',
|
|
1674
1733
|
recipientId: 'user_id',
|
|
1675
1734
|
stickerId: 369239263222822
|
|
1676
1735
|
}, accessToken);
|
|
@@ -1680,7 +1739,7 @@ await sdk.facebook.sendSticker({
|
|
|
1680
1739
|
|
|
1681
1740
|
```typescript
|
|
1682
1741
|
await sdk.facebook.replyMessage({
|
|
1683
|
-
|
|
1742
|
+
channelToken: 'sk_live_...',
|
|
1684
1743
|
messageId: 'message_id',
|
|
1685
1744
|
message: 'Esta é uma resposta!'
|
|
1686
1745
|
}, accessToken);
|
|
@@ -1690,7 +1749,7 @@ await sdk.facebook.replyMessage({
|
|
|
1690
1749
|
|
|
1691
1750
|
```typescript
|
|
1692
1751
|
await sdk.facebook.replyMedia({
|
|
1693
|
-
|
|
1752
|
+
channelToken: 'sk_live_...',
|
|
1694
1753
|
messageId: 'message_id',
|
|
1695
1754
|
fileUrl: 'https://example.com/image.jpg',
|
|
1696
1755
|
type: 'image',
|
|
@@ -1702,7 +1761,7 @@ await sdk.facebook.replyMedia({
|
|
|
1702
1761
|
|
|
1703
1762
|
```typescript
|
|
1704
1763
|
await sdk.facebook.sharePost({
|
|
1705
|
-
|
|
1764
|
+
channelToken: 'sk_live_...',
|
|
1706
1765
|
mediaId: 'media_id',
|
|
1707
1766
|
recipientId: 'user_id'
|
|
1708
1767
|
}, accessToken);
|
|
@@ -1712,7 +1771,7 @@ await sdk.facebook.sharePost({
|
|
|
1712
1771
|
|
|
1713
1772
|
```typescript
|
|
1714
1773
|
const userProfile = await sdk.facebook.getUserProfile({
|
|
1715
|
-
|
|
1774
|
+
channelToken: 'sk_live_...',
|
|
1716
1775
|
userId: 'user_id'
|
|
1717
1776
|
}, accessToken);
|
|
1718
1777
|
```
|
|
@@ -1721,7 +1780,7 @@ const userProfile = await sdk.facebook.getUserProfile({
|
|
|
1721
1780
|
|
|
1722
1781
|
```typescript
|
|
1723
1782
|
const pageProfile = await sdk.facebook.getPageProfile({
|
|
1724
|
-
|
|
1783
|
+
channelToken: 'sk_live_...',
|
|
1725
1784
|
pageId: 'page_id'
|
|
1726
1785
|
}, accessToken);
|
|
1727
1786
|
```
|
|
@@ -1730,15 +1789,15 @@ const pageProfile = await sdk.facebook.getPageProfile({
|
|
|
1730
1789
|
|
|
1731
1790
|
```typescript
|
|
1732
1791
|
const media = await sdk.facebook.downloadMedia({
|
|
1733
|
-
|
|
1792
|
+
channelToken: 'sk_live_...',
|
|
1734
1793
|
url: 'https://lookaside.fbsbx.com/ig_messaging_cdn/...'
|
|
1735
1794
|
}, accessToken);
|
|
1736
1795
|
|
|
1737
|
-
|
|
1738
|
-
console.log(media.data.buffer);
|
|
1739
|
-
console.log(media.data.mimeType);
|
|
1740
|
-
console.log(media.data.filename);
|
|
1741
|
-
console.log(media.data.size);
|
|
1796
|
+
|
|
1797
|
+
console.log(media.data.buffer);
|
|
1798
|
+
console.log(media.data.mimeType);
|
|
1799
|
+
console.log(media.data.filename);
|
|
1800
|
+
console.log(media.data.size);
|
|
1742
1801
|
```
|
|
1743
1802
|
|
|
1744
1803
|
### Instagram
|
|
@@ -1747,7 +1806,7 @@ console.log(media.data.size); // Tamanho em bytes
|
|
|
1747
1806
|
|
|
1748
1807
|
```typescript
|
|
1749
1808
|
await sdk.instagram.sendText({
|
|
1750
|
-
|
|
1809
|
+
channelToken: 'sk_live_...',
|
|
1751
1810
|
recipientId: 'user_id',
|
|
1752
1811
|
message: 'Olá!'
|
|
1753
1812
|
}, accessToken);
|
|
@@ -1757,7 +1816,7 @@ await sdk.instagram.sendText({
|
|
|
1757
1816
|
|
|
1758
1817
|
```typescript
|
|
1759
1818
|
await sdk.instagram.sendMedia({
|
|
1760
|
-
|
|
1819
|
+
channelToken: 'sk_live_...',
|
|
1761
1820
|
recipientId: 'user_id',
|
|
1762
1821
|
fileUrl: 'https://example.com/image.jpg',
|
|
1763
1822
|
type: 'image',
|
|
@@ -1769,7 +1828,7 @@ await sdk.instagram.sendMedia({
|
|
|
1769
1828
|
|
|
1770
1829
|
```typescript
|
|
1771
1830
|
await sdk.instagram.sendPrivateReply({
|
|
1772
|
-
|
|
1831
|
+
channelToken: 'sk_live_...',
|
|
1773
1832
|
commentId: 'comment_id',
|
|
1774
1833
|
message: 'Obrigado pelo comentário!'
|
|
1775
1834
|
}, accessToken);
|
|
@@ -1779,7 +1838,7 @@ await sdk.instagram.sendPrivateReply({
|
|
|
1779
1838
|
|
|
1780
1839
|
```typescript
|
|
1781
1840
|
await sdk.instagram.sendImages({
|
|
1782
|
-
|
|
1841
|
+
channelToken: 'sk_live_...',
|
|
1783
1842
|
recipientId: 'user_id',
|
|
1784
1843
|
images: [
|
|
1785
1844
|
{ url: 'https://example.com/image1.jpg', caption: 'Imagem 1' },
|
|
@@ -1793,7 +1852,7 @@ await sdk.instagram.sendImages({
|
|
|
1793
1852
|
|
|
1794
1853
|
```typescript
|
|
1795
1854
|
await sdk.instagram.sendSticker({
|
|
1796
|
-
|
|
1855
|
+
channelToken: 'sk_live_...',
|
|
1797
1856
|
recipientId: 'user_id',
|
|
1798
1857
|
stickerType: 'heart'
|
|
1799
1858
|
}, accessToken);
|
|
@@ -1803,7 +1862,7 @@ await sdk.instagram.sendSticker({
|
|
|
1803
1862
|
|
|
1804
1863
|
```typescript
|
|
1805
1864
|
await sdk.instagram.reactMessage({
|
|
1806
|
-
|
|
1865
|
+
channelToken: 'sk_live_...',
|
|
1807
1866
|
messageId: 'message_id',
|
|
1808
1867
|
reactionType: 'love'
|
|
1809
1868
|
}, accessToken);
|
|
@@ -1813,7 +1872,7 @@ await sdk.instagram.reactMessage({
|
|
|
1813
1872
|
|
|
1814
1873
|
```typescript
|
|
1815
1874
|
await sdk.instagram.removeReaction({
|
|
1816
|
-
|
|
1875
|
+
channelToken: 'sk_live_...',
|
|
1817
1876
|
recipientId: 'user_id',
|
|
1818
1877
|
messageId: 'message_id'
|
|
1819
1878
|
}, accessToken);
|
|
@@ -1823,7 +1882,7 @@ await sdk.instagram.removeReaction({
|
|
|
1823
1882
|
|
|
1824
1883
|
```typescript
|
|
1825
1884
|
await sdk.instagram.sendQuickReplies({
|
|
1826
|
-
|
|
1885
|
+
channelToken: 'sk_live_...',
|
|
1827
1886
|
recipientId: 'user_id',
|
|
1828
1887
|
message: 'Como podemos ajudar?',
|
|
1829
1888
|
quickReplies: [
|
|
@@ -1837,7 +1896,7 @@ await sdk.instagram.sendQuickReplies({
|
|
|
1837
1896
|
|
|
1838
1897
|
```typescript
|
|
1839
1898
|
await sdk.instagram.sendGenericTemplate({
|
|
1840
|
-
|
|
1899
|
+
channelToken: 'sk_live_...',
|
|
1841
1900
|
recipientId: 'user_id',
|
|
1842
1901
|
elements: [
|
|
1843
1902
|
{
|
|
@@ -1866,7 +1925,7 @@ await sdk.instagram.sendGenericTemplate({
|
|
|
1866
1925
|
|
|
1867
1926
|
```typescript
|
|
1868
1927
|
await sdk.instagram.sendButtonTemplate({
|
|
1869
|
-
|
|
1928
|
+
channelToken: 'sk_live_...',
|
|
1870
1929
|
recipientId: 'user_id',
|
|
1871
1930
|
text: 'O que você gostaria de fazer?',
|
|
1872
1931
|
buttons: [
|
|
@@ -1879,23 +1938,23 @@ await sdk.instagram.sendButtonTemplate({
|
|
|
1879
1938
|
#### Enviar Ação do Remetente (Typing, Seen)
|
|
1880
1939
|
|
|
1881
1940
|
```typescript
|
|
1882
|
-
|
|
1941
|
+
|
|
1883
1942
|
await sdk.instagram.sendSenderAction({
|
|
1884
|
-
|
|
1943
|
+
channelToken: 'sk_live_...',
|
|
1885
1944
|
recipientId: 'user_id',
|
|
1886
1945
|
action: 'typing_on'
|
|
1887
1946
|
}, accessToken);
|
|
1888
1947
|
|
|
1889
|
-
|
|
1948
|
+
|
|
1890
1949
|
await sdk.instagram.sendSenderAction({
|
|
1891
|
-
|
|
1950
|
+
channelToken: 'sk_live_...',
|
|
1892
1951
|
recipientId: 'user_id',
|
|
1893
1952
|
action: 'typing_off'
|
|
1894
1953
|
}, accessToken);
|
|
1895
1954
|
|
|
1896
|
-
|
|
1955
|
+
|
|
1897
1956
|
await sdk.instagram.sendSenderAction({
|
|
1898
|
-
|
|
1957
|
+
channelToken: 'sk_live_...',
|
|
1899
1958
|
recipientId: 'user_id',
|
|
1900
1959
|
action: 'mark_seen'
|
|
1901
1960
|
}, accessToken);
|
|
@@ -1905,7 +1964,7 @@ await sdk.instagram.sendSenderAction({
|
|
|
1905
1964
|
|
|
1906
1965
|
```typescript
|
|
1907
1966
|
const userProfile = await sdk.instagram.getUserProfile({
|
|
1908
|
-
|
|
1967
|
+
channelToken: 'sk_live_...',
|
|
1909
1968
|
userId: '17841465415913137'
|
|
1910
1969
|
}, accessToken);
|
|
1911
1970
|
|
|
@@ -1918,7 +1977,7 @@ console.log(userProfile.data.follower_count);
|
|
|
1918
1977
|
|
|
1919
1978
|
```typescript
|
|
1920
1979
|
const posts = await sdk.instagram.listPosts({
|
|
1921
|
-
|
|
1980
|
+
channelToken: 'sk_live_...',
|
|
1922
1981
|
limit: 10
|
|
1923
1982
|
}, accessToken);
|
|
1924
1983
|
```
|
|
@@ -1927,7 +1986,7 @@ const posts = await sdk.instagram.listPosts({
|
|
|
1927
1986
|
|
|
1928
1987
|
```typescript
|
|
1929
1988
|
const businessProfile = await sdk.instagram.getBusinessProfile({
|
|
1930
|
-
|
|
1989
|
+
channelToken: 'sk_live_...'
|
|
1931
1990
|
}, accessToken);
|
|
1932
1991
|
```
|
|
1933
1992
|
|
|
@@ -1935,15 +1994,233 @@ const businessProfile = await sdk.instagram.getBusinessProfile({
|
|
|
1935
1994
|
|
|
1936
1995
|
```typescript
|
|
1937
1996
|
const media = await sdk.instagram.downloadMedia({
|
|
1938
|
-
|
|
1997
|
+
channelToken: 'sk_live_...',
|
|
1939
1998
|
url: 'https://lookaside.fbsbx.com/ig_messaging_cdn/...'
|
|
1940
1999
|
}, accessToken);
|
|
1941
2000
|
|
|
1942
|
-
|
|
1943
|
-
console.log(media.data.buffer);
|
|
1944
|
-
console.log(media.data.mimeType);
|
|
1945
|
-
console.log(media.data.filename);
|
|
1946
|
-
console.log(media.data.size);
|
|
2001
|
+
|
|
2002
|
+
console.log(media.data.buffer);
|
|
2003
|
+
console.log(media.data.mimeType);
|
|
2004
|
+
console.log(media.data.filename);
|
|
2005
|
+
console.log(media.data.size);
|
|
2006
|
+
```
|
|
2007
|
+
|
|
2008
|
+
#### Publicar Conteúdo no Instagram
|
|
2009
|
+
|
|
2010
|
+
|
|
2011
|
+
|
|
2012
|
+
**1. Criar Contêiner de Mídia**
|
|
2013
|
+
|
|
2014
|
+
```typescript
|
|
2015
|
+
// Publicar imagem
|
|
2016
|
+
const container = await sdk.instagram.createMediaContainer({
|
|
2017
|
+
channelToken: 'sk_live_...',
|
|
2018
|
+
image_url: 'https://example.com/image.jpg',
|
|
2019
|
+
media_type: 'IMAGE',
|
|
2020
|
+
caption: 'Nossa nova coleção chegou! #moda #verao',
|
|
2021
|
+
alt_text: 'Foto de um produto de moda' // Opcional: texto alternativo
|
|
2022
|
+
}, accessToken);
|
|
2023
|
+
|
|
2024
|
+
const creationId = container.data.data.id; // ID do contêiner criado
|
|
2025
|
+
```
|
|
2026
|
+
|
|
2027
|
+
```typescript
|
|
2028
|
+
// Publicar vídeo
|
|
2029
|
+
const container = await sdk.instagram.createMediaContainer({
|
|
2030
|
+
channelToken: 'sk_live_...',
|
|
2031
|
+
video_url: 'https://example.com/video.mp4',
|
|
2032
|
+
media_type: 'VIDEO',
|
|
2033
|
+
caption: 'Vídeo especial para nossos seguidores'
|
|
2034
|
+
}, accessToken);
|
|
2035
|
+
```
|
|
2036
|
+
|
|
2037
|
+
```typescript
|
|
2038
|
+
// Publicar Reel
|
|
2039
|
+
const container = await sdk.instagram.createMediaContainer({
|
|
2040
|
+
channelToken: 'sk_live_...',
|
|
2041
|
+
video_url: 'https://example.com/reel.mp4',
|
|
2042
|
+
media_type: 'REELS',
|
|
2043
|
+
caption: 'Confira nosso novo Reel!',
|
|
2044
|
+
trial_params: { // Opcional: para reels de teste
|
|
2045
|
+
graduation_strategy: 'MANUAL'
|
|
2046
|
+
}
|
|
2047
|
+
}, accessToken);
|
|
2048
|
+
```
|
|
2049
|
+
|
|
2050
|
+
```typescript
|
|
2051
|
+
// Publicar Story
|
|
2052
|
+
const container = await sdk.instagram.createMediaContainer({
|
|
2053
|
+
channelToken: 'sk_live_...',
|
|
2054
|
+
video_url: 'https://example.com/story.mp4',
|
|
2055
|
+
media_type: 'STORIES'
|
|
2056
|
+
}, accessToken);
|
|
2057
|
+
```
|
|
2058
|
+
|
|
2059
|
+
```typescript
|
|
2060
|
+
// Criar carrossel (até 10 itens)
|
|
2061
|
+
// Primeiro, criar os contêineres filhos
|
|
2062
|
+
const child1 = await sdk.instagram.createMediaContainer({
|
|
2063
|
+
channelToken: 'sk_live_...',
|
|
2064
|
+
image_url: 'https://example.com/image1.jpg',
|
|
2065
|
+
media_type: 'IMAGE',
|
|
2066
|
+
is_carousel_item: true
|
|
2067
|
+
}, accessToken);
|
|
2068
|
+
|
|
2069
|
+
const child2 = await sdk.instagram.createMediaContainer({
|
|
2070
|
+
channelToken: 'sk_live_...',
|
|
2071
|
+
image_url: 'https://example.com/image2.jpg',
|
|
2072
|
+
media_type: 'IMAGE',
|
|
2073
|
+
is_carousel_item: true
|
|
2074
|
+
}, accessToken);
|
|
2075
|
+
|
|
2076
|
+
// Depois, criar o contêiner pai do carrossel
|
|
2077
|
+
const carousel = await sdk.instagram.createMediaContainer({
|
|
2078
|
+
channelToken: 'sk_live_...',
|
|
2079
|
+
media_type: 'CAROUSEL',
|
|
2080
|
+
caption: 'Balas de frutas',
|
|
2081
|
+
children: [
|
|
2082
|
+
child1.data.data.id,
|
|
2083
|
+
child2.data.data.id
|
|
2084
|
+
]
|
|
2085
|
+
}, accessToken);
|
|
2086
|
+
```
|
|
2087
|
+
|
|
2088
|
+
**2. Verificar Status do Contêiner** (para vídeos grandes)
|
|
2089
|
+
|
|
2090
|
+
```typescript
|
|
2091
|
+
const status = await sdk.instagram.getContainerStatus({
|
|
2092
|
+
channelToken: 'sk_live_...',
|
|
2093
|
+
container_id: '17841465415913137'
|
|
2094
|
+
}, accessToken);
|
|
2095
|
+
|
|
2096
|
+
// Status possíveis: EXPIRED, ERROR, FINISHED, IN_PROGRESS, PUBLISHED
|
|
2097
|
+
console.log(status.data.data.status_code);
|
|
2098
|
+
|
|
2099
|
+
// Para vídeos grandes, aguarde até o status ser 'FINISHED' antes de publicar
|
|
2100
|
+
if (status.data.data.status_code === 'FINISHED') {
|
|
2101
|
+
// Pronto para publicar
|
|
2102
|
+
}
|
|
2103
|
+
```
|
|
2104
|
+
|
|
2105
|
+
**3. Publicar Mídia**
|
|
2106
|
+
|
|
2107
|
+
```typescript
|
|
2108
|
+
const published = await sdk.instagram.publishMedia({
|
|
2109
|
+
channelToken: 'sk_live_...',
|
|
2110
|
+
creation_id: '17841465415913137' // ID retornado ao criar o contêiner
|
|
2111
|
+
}, accessToken);
|
|
2112
|
+
|
|
2113
|
+
console.log(published.data.data.id); // ID da publicação criada
|
|
2114
|
+
```
|
|
2115
|
+
|
|
2116
|
+
**4. Verificar Limite de Publicação**
|
|
2117
|
+
|
|
2118
|
+
```typescript
|
|
2119
|
+
const limit = await sdk.instagram.getPublishingLimit({
|
|
2120
|
+
channelToken: 'sk_live_...'
|
|
2121
|
+
}, accessToken);
|
|
2122
|
+
|
|
2123
|
+
console.log(`Usado: ${limit.data.data.quota_used} de ${limit.data.data.quota_total}`);
|
|
2124
|
+
console.log(`Período: ${limit.data.data.quota_duration} segundos (24 horas)`);
|
|
2125
|
+
```
|
|
2126
|
+
|
|
2127
|
+
**5. Upload de Vídeo Grande (Sessão Retomável)**
|
|
2128
|
+
|
|
2129
|
+
Para vídeos grandes que podem ter interrupções de rede:
|
|
2130
|
+
|
|
2131
|
+
```typescript
|
|
2132
|
+
// 1. Criar contêiner com upload_type=resumable
|
|
2133
|
+
const container = await sdk.instagram.createMediaContainer({
|
|
2134
|
+
channelToken: 'sk_live_...',
|
|
2135
|
+
video_url: 'https://example.com/large-video.mp4',
|
|
2136
|
+
media_type: 'VIDEO',
|
|
2137
|
+
upload_type: 'resumable',
|
|
2138
|
+
caption: 'Vídeo grande com upload retomável'
|
|
2139
|
+
}, accessToken);
|
|
2140
|
+
|
|
2141
|
+
// 2. Fazer upload do vídeo
|
|
2142
|
+
const upload = await sdk.instagram.uploadVideo({
|
|
2143
|
+
channelToken: 'sk_live_...',
|
|
2144
|
+
container_id: container.data.data.id,
|
|
2145
|
+
file_url: 'https://example.com/large-video.mp4',
|
|
2146
|
+
file_size: 10485760, // Tamanho em bytes (opcional se file_url fornecido)
|
|
2147
|
+
offset: 0 // Opcional: para retomar upload (padrão: 0)
|
|
2148
|
+
}, accessToken);
|
|
2149
|
+
|
|
2150
|
+
// 3. Verificar status periodicamente até ser 'FINISHED'
|
|
2151
|
+
// 4. Publicar quando status for 'FINISHED'
|
|
2152
|
+
```
|
|
2153
|
+
|
|
2154
|
+
**Exemplo Completo: Publicar Imagem**
|
|
2155
|
+
|
|
2156
|
+
```typescript
|
|
2157
|
+
// 1. Criar contêiner
|
|
2158
|
+
const container = await sdk.instagram.createMediaContainer({
|
|
2159
|
+
channelToken: 'sk_live_...',
|
|
2160
|
+
image_url: 'https://example.com/image.jpg',
|
|
2161
|
+
media_type: 'IMAGE',
|
|
2162
|
+
caption: 'Nossa nova coleção chegou! #moda #verao',
|
|
2163
|
+
alt_text: 'Foto de um produto de moda',
|
|
2164
|
+
location_id: '123456789', // Opcional: ID da localização
|
|
2165
|
+
user_tags: [ // Opcional: marcar usuários
|
|
2166
|
+
{ username: 'usuario1', x: 0.5, y: 0.5 }
|
|
2167
|
+
]
|
|
2168
|
+
}, accessToken);
|
|
2169
|
+
|
|
2170
|
+
const creationId = container.data.data.id;
|
|
2171
|
+
|
|
2172
|
+
// 2. Publicar imediatamente (imagens são processadas rapidamente)
|
|
2173
|
+
const published = await sdk.instagram.publishMedia({
|
|
2174
|
+
channelToken: 'sk_live_...',
|
|
2175
|
+
creation_id: creationId
|
|
2176
|
+
}, accessToken);
|
|
2177
|
+
|
|
2178
|
+
console.log(`Publicação criada com ID: ${published.data.data.id}`);
|
|
2179
|
+
```
|
|
2180
|
+
|
|
2181
|
+
**Exemplo Completo: Publicar Vídeo com Verificação de Status**
|
|
2182
|
+
|
|
2183
|
+
```typescript
|
|
2184
|
+
// 1. Criar contêiner de vídeo
|
|
2185
|
+
const container = await sdk.instagram.createMediaContainer({
|
|
2186
|
+
channelToken: 'sk_live_...',
|
|
2187
|
+
video_url: 'https://example.com/video.mp4',
|
|
2188
|
+
media_type: 'VIDEO',
|
|
2189
|
+
caption: 'Vídeo especial para nossos seguidores'
|
|
2190
|
+
}, accessToken);
|
|
2191
|
+
|
|
2192
|
+
const containerId = container.data.data.id;
|
|
2193
|
+
|
|
2194
|
+
// 2. Verificar status periodicamente (vídeos podem demorar)
|
|
2195
|
+
let status = 'IN_PROGRESS';
|
|
2196
|
+
let attempts = 0;
|
|
2197
|
+
const maxAttempts = 10;
|
|
2198
|
+
|
|
2199
|
+
while (status === 'IN_PROGRESS' && attempts < maxAttempts) {
|
|
2200
|
+
await new Promise(resolve => setTimeout(resolve, 5000)); // Aguardar 5 segundos
|
|
2201
|
+
|
|
2202
|
+
const statusCheck = await sdk.instagram.getContainerStatus({
|
|
2203
|
+
channelToken: 'sk_live_...',
|
|
2204
|
+
container_id: containerId
|
|
2205
|
+
}, accessToken);
|
|
2206
|
+
|
|
2207
|
+
status = statusCheck.data.data.status_code;
|
|
2208
|
+
attempts++;
|
|
2209
|
+
|
|
2210
|
+
console.log(`Status: ${status} (tentativa ${attempts})`);
|
|
2211
|
+
}
|
|
2212
|
+
|
|
2213
|
+
// 3. Publicar quando status for 'FINISHED'
|
|
2214
|
+
if (status === 'FINISHED') {
|
|
2215
|
+
const published = await sdk.instagram.publishMedia({
|
|
2216
|
+
channelToken: 'sk_live_...',
|
|
2217
|
+
creation_id: containerId
|
|
2218
|
+
}, accessToken);
|
|
2219
|
+
|
|
2220
|
+
console.log(`Vídeo publicado com ID: ${published.data.data.id}`);
|
|
2221
|
+
} else {
|
|
2222
|
+
console.error(`Erro: Status final é ${status}`);
|
|
2223
|
+
}
|
|
1947
2224
|
```
|
|
1948
2225
|
|
|
1949
2226
|
### Canais
|
|
@@ -1971,7 +2248,7 @@ const webhook = await sdk.integrations.createWebhook({
|
|
|
1971
2248
|
```typescript
|
|
1972
2249
|
try {
|
|
1973
2250
|
await sdk.whatsapp.sendText({
|
|
1974
|
-
|
|
2251
|
+
channelToken: 'sk_live_...',
|
|
1975
2252
|
sender: '5511999999999',
|
|
1976
2253
|
messageText: 'Olá!'
|
|
1977
2254
|
}, accessToken);
|