@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 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, // opcional, padrão: 30000ms
24
- maxRetries: 3, // opcional, padrão: 3
25
- retryDelay: 1000, // opcional, padrão: 1000ms
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
- token: 'sk_live_9999999999999999999999999999',
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
- // Enviar imagem
56
+
57
57
  await sdk.whatsapp.sendMedia({
58
- token: 'sk_live_...',
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
- // Enviar documento com nome de arquivo
65
+
66
66
  await sdk.whatsapp.sendMedia({
67
- token: 'sk_live_...',
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' // Opcional: se não fornecido, será extraído da URL
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_9999999999999999999999999',
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
- token: 'sk_live_9999999999999999999999999',
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
- token: 'sk_live_9999999999999999999999999',
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
- token: 'sk_live_9999999999999999999999999',
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
- token: 'sk_live_9999999999999999999999999',
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
- token: 'sk_live_...',
620
+ channelToken: 'sk_live_...',
621
621
  sender: '5511999999999',
622
622
  bodyText: 'Seu pedido foi enviado!',
623
- footerText: 'Obrigado!', // Opcional
624
- reference_id: 'pedido_12345_1704067200', // Mesmo ID usado em sendOrderDetails
625
- order_status: 'shipped', // pending, processing, partially-shipped, shipped, completed, canceled
626
- status_description: 'Sua encomenda foi despachada pelos Correios', // Opcional
627
- payment_status: 'captured', // Opcional: pending, captured, failed
628
- payment_timestamp: 1722445231 // Opcional: timestamp do pagamento em segundos
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
- // Requer upload prévio da mídia para obter o mediaId
635
+
636
636
  await sdk.whatsapp.sendSticker({
637
- token: 'sk_live_...',
637
+ channelToken: 'sk_live_...',
638
638
  sender: '5511999999999',
639
- mediaId: '798882015472548' // ID da mídia após upload (.webp até 500KB para animado, 100KB para estático)
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
- token: 'sk_live_...',
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', // Opcional (máximo 60 caracteres)
651
- footerText: 'Sua privacidade é importante' // Opcional (máximo 60 caracteres)
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
- token: 'sk_live_...',
659
+ channelToken: 'sk_live_...',
660
660
  sender: '5511999999999',
661
661
  bodyText: 'Confira nosso site!',
662
- buttonText: 'Acessar', // Máximo 20 caracteres
662
+ buttonText: 'Acessar',
663
663
  url: 'https://example.com',
664
- header: { // Opcional: cabeçalho com mídia
665
- type: 'image', // ou 'video', 'document', 'text'
666
- link: 'https://example.com/banner.jpg' // Para image/video/document
667
- // ou text: 'Título' para tipo text
664
+ header: {
665
+ type: 'image',
666
+ link: 'https://example.com/banner.jpg'
667
+
668
668
  },
669
- footerText: 'Ofertas válidas até 30/11' // Opcional (máximo 60 caracteres)
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
- token: 'sk_live_...',
677
+ channelToken: 'sk_live_...',
678
678
  sender: '5511999999999',
679
- bodyText: 'Confira nossas ofertas da semana!', // Obrigatório
680
- cards: [ // 2 a 10 cartões
679
+ bodyText: 'Confira nossas ofertas da semana!',
680
+ cards: [
681
681
  {
682
682
  cardIndex: 0,
683
- headerType: 'image', // ou 'video'
683
+ headerType: 'image',
684
684
  headerLink: 'https://example.com/image1.jpg',
685
- bodyText: 'Oferta especial!', // Máximo 160 caracteres
686
- buttonText: 'Comprar agora', // Máximo 20 caracteres
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
- token: 'sk_live_...',
705
+ channelToken: 'sk_live_...',
706
706
  url: 'https://lookaside.fbsbx.com/whatsapp_business/attachment/?mid=...'
707
707
  }, accessToken);
708
708
 
709
- // A mídia retorna em base64
710
- console.log(media.data.buffer); // Base64 string
711
- console.log(media.data.mimeType); // image/jpeg, video/mp4, etc.
712
- console.log(media.data.filename); // Nome do arquivo
713
- console.log(media.data.size); // Tamanho em bytes
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
- token: 'sk_live_...',
721
- sender: '5511999999999', // Obrigatório
720
+ channelToken: 'sk_live_...',
721
+ sender: '5511999999999',
722
722
  messageText: 'Esta é uma resposta!',
723
- replyMessageId: 'wamid.xxx', // Opcional: ID da mensagem a responder
724
- preview_url: false // Opcional: se true, mostra preview de URLs no texto
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
- token: 'sk_live_...',
733
- sender: '5511999999999', // Obrigatório
734
- emoji: '👍', // Emoji da reação
735
- message_id: 'wamid.xxx' // Opcional: ID da mensagem específica a reagir
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
- // Listar templates
742
+
743
743
  const templates = await sdk.whatsapp.listTemplates('sk_live_...', accessToken);
744
744
 
745
- // Obter detalhes de um template
745
+
746
746
  const template = await sdk.whatsapp.getTemplate('sk_live_...', 'template_id', accessToken);
747
747
 
748
- // Criar template
748
+
749
749
  await sdk.whatsapp.createTemplate({
750
- token: 'sk_live_...',
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
- token: 'sk_live_...',
773
+ channelToken: 'sk_live_...',
775
774
  file: fileBuffer,
776
775
  mediaType: 'image'
777
- // filename é opcional
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
806
+ channelToken: 'sk_live_...',
808
807
  file: videoBuffer,
809
808
  mediaType: 'video',
810
809
  filename: 'meu_video.mp4'
811
810
  }, accessToken);
812
811
 
813
- // Use o mediaId para enviar o vídeo
812
+
814
813
  await sdk.whatsapp.sendVideo({
815
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
846
+ channelToken: 'sk_live_...',
848
847
  file: stickerBuffer,
849
- mediaType: 'image', // Stickers são tratados como imagem
848
+ mediaType: 'image',
850
849
  filename: 'sticker.webp'
851
850
  }, accessToken);
852
851
 
853
- // Use o mediaId para enviar o sticker
852
+
854
853
  await sdk.whatsapp.sendSticker({
855
- token: 'sk_live_...',
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
- // Em ambiente Browser
863
+
865
864
  const fileInput = document.querySelector('input[type="file"]');
866
865
  const file = fileInput.files[0];
867
866
 
868
- // Determine o mediaType baseado no tipo do arquivo
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
- token: 'sk_live_...',
875
+ channelToken: 'sk_live_...',
877
876
  file: file,
878
877
  mediaType: getMediaType(file),
879
- filename: file.name // Opcional
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
- // Criar um Blob a partir de dados
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
908
+ channelToken: 'sk_live_...',
910
909
  file: imageBuffer,
911
910
  mediaType: 'image'
912
- // filename não é necessário para templates
911
+
913
912
  }, accessToken);
914
913
 
915
- // Use o handle no template
914
+
916
915
  await sdk.whatsapp.createTemplate({
917
- token: 'sk_live_...',
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] // Use o handle aqui
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
- token: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
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
- token: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
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
- token: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
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
- token: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
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
- token: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
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
- token: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
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
- token: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
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
- token: 'sk_live_01JABCDEFGHIJKLMNOPQRSTUVWXYZ',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
1445
+ channelToken: 'sk_live_...',
1447
1446
  fileId: 'AgACAgEAAxkBAAItNmlmklyYNCEtvaFphVfSSO7CrEOjAALUC2sbh9owR9hT7MhQnTGfAQADAgADcwADOAQ'
1448
1447
  }, accessToken);
1449
1448
 
1450
- // A mídia retorna em base64
1451
- console.log(media.data.buffer); // Base64 string
1452
- console.log(media.data.mimeType); // image/jpeg, video/mp4, etc.
1453
- console.log(media.data.filename); // Nome do arquivo
1454
- console.log(media.data.size); // Tamanho em bytes
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
- token: 'sk_live_...',
1464
- sender: 'user123',
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
- token: 'sk_live_...',
1474
- sender: 'user123',
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
- type: 'url',
1481
- title: 'Ver Mais',
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
- token: 'sk_live_...',
1493
- sender: 'user123',
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
- token: 'sk_live_...',
1505
- sender: 'user123',
1512
+ channelToken: 'sk_live_...',
1513
+ chatId: 'chat_123456789',
1506
1514
  cards: [
1507
1515
  {
1508
1516
  title: 'Produto 1',
1509
- description: 'Descrição do produto 1',
1517
+ subtitle: 'Descrição do produto 1',
1510
1518
  imageUrl: 'https://example.com/product1.jpg',
1511
1519
  buttons: [
1512
- { type: 'url', title: 'Ver Mais', value: 'https://example.com/product1' }
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
- description: 'Descrição do produto 2',
1531
+ subtitle: 'Descrição do produto 2',
1518
1532
  imageUrl: 'https://example.com/product2.jpg',
1519
1533
  buttons: [
1520
- { type: 'url', title: 'Ver Mais', value: 'https://example.com/product2' }
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
- token: 'sk_live_...',
1532
- sender: 'user123',
1533
- title: 'Formulário de Contato',
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
- type: 'text',
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
- token: 'sk_live_...',
1557
- sender: 'user123',
1593
+ channelToken: 'sk_live_...',
1594
+ chatId: 'chat_123456789',
1558
1595
  messageText: 'Como podemos ajudar?',
1559
1596
  quickReplies: [
1560
- { type: 'text', title: 'Suporte', payload: 'SUPPORT' },
1561
- { type: 'text', title: 'Vendas', payload: 'SALES' },
1562
- { type: 'location', title: 'Compartilhar Localização' }
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
- token: 'sk_live_...',
1572
- sender: 'user123',
1617
+ channelToken: 'sk_live_...',
1618
+ chatId: 'chat_123456789',
1573
1619
  messageText: 'Escolha uma opção:',
1574
1620
  buttons: [
1575
- { type: 'url', title: 'Visitar Site', value: 'https://example.com' },
1576
- { type: 'postback', title: 'Falar com Atendente', value: 'HUMAN_AGENT' }
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
1792
+ channelToken: 'sk_live_...',
1734
1793
  url: 'https://lookaside.fbsbx.com/ig_messaging_cdn/...'
1735
1794
  }, accessToken);
1736
1795
 
1737
- // A mídia retorna em base64
1738
- console.log(media.data.buffer); // Base64 string
1739
- console.log(media.data.mimeType); // image/jpeg, video/mp4, etc.
1740
- console.log(media.data.filename); // Nome do arquivo
1741
- console.log(media.data.size); // Tamanho em bytes
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- // Mostrar "digitando..."
1941
+
1883
1942
  await sdk.instagram.sendSenderAction({
1884
- token: 'sk_live_...',
1943
+ channelToken: 'sk_live_...',
1885
1944
  recipientId: 'user_id',
1886
1945
  action: 'typing_on'
1887
1946
  }, accessToken);
1888
1947
 
1889
- // Parar de mostrar "digitando..."
1948
+
1890
1949
  await sdk.instagram.sendSenderAction({
1891
- token: 'sk_live_...',
1950
+ channelToken: 'sk_live_...',
1892
1951
  recipientId: 'user_id',
1893
1952
  action: 'typing_off'
1894
1953
  }, accessToken);
1895
1954
 
1896
- // Marcar como visualizado
1955
+
1897
1956
  await sdk.instagram.sendSenderAction({
1898
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...',
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
- token: 'sk_live_...'
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
- token: 'sk_live_...',
1997
+ channelToken: 'sk_live_...',
1939
1998
  url: 'https://lookaside.fbsbx.com/ig_messaging_cdn/...'
1940
1999
  }, accessToken);
1941
2000
 
1942
- // A mídia retorna em base64
1943
- console.log(media.data.buffer); // Base64 string
1944
- console.log(media.data.mimeType); // image/jpeg, video/mp4, etc.
1945
- console.log(media.data.filename); // Nome do arquivo
1946
- console.log(media.data.size); // Tamanho em bytes
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
- token: 'sk_live_...',
2251
+ channelToken: 'sk_live_...',
1975
2252
  sender: '5511999999999',
1976
2253
  messageText: 'Olá!'
1977
2254
  }, accessToken);