@adatechnology/meta-whatsapp-contracts 0.2.0-rc.12 → 0.2.0-rc.13
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/dist/index.cjs +76 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +196 -145
- package/dist/index.d.ts +196 -145
- package/dist/index.js +68 -13
- package/dist/index.js.map +1 -1
- package/dist/testing/index.d.cts +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/webhook.types-DWaAhvNu.d.cts +5005 -0
- package/dist/webhook.types-DWaAhvNu.d.ts +5005 -0
- package/package.json +1 -1
- package/dist/webhook.types-PxhpmpzC.d.cts +0 -1678
- package/dist/webhook.types-PxhpmpzC.d.ts +0 -1678
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { W as
|
|
1
|
+
import { c as WhatsAppMessage, i as WhatsAppStatus, k as WhatsAppTemplateStatusUpdate, g as WhatsAppPhoneNumberQualityUpdate } from './webhook.types-DWaAhvNu.cjs';
|
|
2
|
+
export { W as WHATSAPP_WEBHOOK_FIELDS, a as WhatsAppInteractive, b as WhatsAppMedia, d as WhatsAppMessageEcho, e as WhatsAppMessageStatusValue, f as WhatsAppOrder, h as WhatsAppQualityEvent, j as WhatsAppTemplateStatusEvent, l as WhatsAppWebhookChange, m as WhatsAppWebhookField, n as WhatsAppWebhookPayload, o as WhatsAppWebhookValue, w as whatsAppInteractiveSchema, p as whatsAppMediaSchema, q as whatsAppMessageEchoSchema, r as whatsAppMessageSchema, s as whatsAppMessageStatusSchema, t as whatsAppOrderSchema, u as whatsAppPhoneNumberQualityUpdateSchema, v as whatsAppQualityEventSchema, x as whatsAppStatusSchema, y as whatsAppTemplateStatusEventSchema, z as whatsAppTemplateStatusUpdateSchema, A as whatsAppWebhookChangeSchema, B as whatsAppWebhookPayloadSchema, C as whatsAppWebhookValueSchema } from './webhook.types-DWaAhvNu.cjs';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
|
|
5
5
|
type SessionState = string;
|
|
@@ -339,141 +339,6 @@ declare const flowGraphNodesSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
|
339
339
|
}>]>>;
|
|
340
340
|
}, z.ZodTypeAny, "passthrough">>>;
|
|
341
341
|
|
|
342
|
-
/**
|
|
343
|
-
* Quando transcrever nota de voz.
|
|
344
|
-
*
|
|
345
|
-
* Vive no contrato, e não só no módulo, porque atravessa três fronteiras: o painel escolhe, a API
|
|
346
|
-
* transporta e o módulo obedece. Duas definições concorrentes divergiriam no primeiro valor novo.
|
|
347
|
-
*/
|
|
348
|
-
type TranscriptionMode = 'auto' | 'onDemand';
|
|
349
|
-
interface WhatsAppSettings {
|
|
350
|
-
templateName: string;
|
|
351
|
-
templateLanguage: string;
|
|
352
|
-
templateVariables: string[];
|
|
353
|
-
welcomeMessage: string;
|
|
354
|
-
farewellMessage: string;
|
|
355
|
-
/**
|
|
356
|
-
* Transcrição de áudio ligada para ESTA empresa.
|
|
357
|
-
*
|
|
358
|
-
* Tri-state de propósito: `null` significa "não decidido pelo painel", e aí vale o padrão que o
|
|
359
|
-
* host injetou (tipicamente ambiente). Se fosse `boolean` com padrão `false`, atualizar o módulo
|
|
360
|
-
* desligaria a transcrição de quem já a tinha ligada por variável de ambiente — regressão
|
|
361
|
-
* silenciosa num recurso que estava funcionando.
|
|
362
|
-
*
|
|
363
|
-
* Ligar aqui não cria capacidade: sem engine e chave injetados no host, não há o que transcrever.
|
|
364
|
-
* Ambiente decide se É POSSÍVEL; isto decide se é para FAZER.
|
|
365
|
-
*/
|
|
366
|
-
transcriptionEnabled: boolean | null;
|
|
367
|
-
/** `null` = herda o modo injetado pelo host. */
|
|
368
|
-
transcriptionMode: TranscriptionMode | null;
|
|
369
|
-
}
|
|
370
|
-
interface TemplateVariablesMap {
|
|
371
|
-
[index: number]: string;
|
|
372
|
-
}
|
|
373
|
-
interface TemplateConfig {
|
|
374
|
-
name: string;
|
|
375
|
-
category: 'UTILITY' | 'MARKETING';
|
|
376
|
-
language: string;
|
|
377
|
-
headerType: 'NONE' | 'TEXT';
|
|
378
|
-
headerText?: string;
|
|
379
|
-
bodyText: string;
|
|
380
|
-
footerText?: string;
|
|
381
|
-
}
|
|
382
|
-
interface WhatsAppTemplateSummary {
|
|
383
|
-
id: string;
|
|
384
|
-
name: string;
|
|
385
|
-
shortId: string;
|
|
386
|
-
displayName: string;
|
|
387
|
-
status: string;
|
|
388
|
-
category: string;
|
|
389
|
-
language: string;
|
|
390
|
-
bodyText: string | null;
|
|
391
|
-
variableCount: number;
|
|
392
|
-
}
|
|
393
|
-
interface CreateTemplateResult {
|
|
394
|
-
ok: boolean;
|
|
395
|
-
message: string;
|
|
396
|
-
status?: string;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
type MessageHookOutcome = {
|
|
400
|
-
outcome: 'handled';
|
|
401
|
-
} | {
|
|
402
|
-
outcome: 'continue';
|
|
403
|
-
};
|
|
404
|
-
interface MetaWhatsAppHooks {
|
|
405
|
-
onMessageReceived?: (message: WhatsAppMessage, session: ConversationSession) => Promise<MessageHookOutcome>;
|
|
406
|
-
onStatusUpdate?: (status: WhatsAppStatus, session: ConversationSession | null) => Promise<void>;
|
|
407
|
-
onSessionExpired?: (session: ConversationSession) => Promise<void>;
|
|
408
|
-
onHumanRequested?: (session: ConversationSession) => Promise<void>;
|
|
409
|
-
/**
|
|
410
|
-
* Mídia recebida do cliente, já persistida como mensagem e pronta para ser copiada da Meta para
|
|
411
|
-
* o storage do host — normalmente enfileirando um job.
|
|
412
|
-
*
|
|
413
|
-
* Hook próprio, e não parte do `onMessageReceived`, porque aquele pertence ao fluxo do bot: ele
|
|
414
|
-
* nem é chamado quando a conversa está em atendimento humano, que é exatamente quando o cliente
|
|
415
|
-
* manda documento para o atendente. Ligar ingestão lá perderia esses arquivos em silêncio.
|
|
416
|
-
*
|
|
417
|
-
* A URL de download da Meta expira, então quem implementa deve tratar como trabalho urgente.
|
|
418
|
-
*/
|
|
419
|
-
onMediaReceived?: (media: InboundMediaDescriptor) => Promise<void>;
|
|
420
|
-
/**
|
|
421
|
-
* Falha ao enviar UM arquivo da biblioteca num nó `send_media`.
|
|
422
|
-
*
|
|
423
|
-
* O erro é entregue aqui em vez de propagado porque um PDF que não subiu não pode travar a
|
|
424
|
-
* conversa num nó automático — o cliente ficaria parado sem nenhuma mensagem. O módulo segue
|
|
425
|
-
* para o próximo arquivo e para o próximo nó; observar e alertar é do host.
|
|
426
|
-
*/
|
|
427
|
-
onFlowMediaError?: (error: unknown, details: {
|
|
428
|
-
flowKey: string;
|
|
429
|
-
nodeId: string;
|
|
430
|
-
uploadId: string;
|
|
431
|
-
}) => void;
|
|
432
|
-
/**
|
|
433
|
-
* Falha ao enviar a vitrine de produtos num nó `send_product_list`.
|
|
434
|
-
*
|
|
435
|
-
* Hook próprio, e não o de mídia: aqui não há `uploadId` — o que falhou foi a montagem da
|
|
436
|
-
* vitrine a partir do catálogo, e o host precisa saber qual nó ficou mudo.
|
|
437
|
-
*/
|
|
438
|
-
onFlowProductListError?: (error: unknown, details: {
|
|
439
|
-
flowKey: string;
|
|
440
|
-
nodeId: string;
|
|
441
|
-
}) => void;
|
|
442
|
-
/**
|
|
443
|
-
* Transcrição de áudio falhou de forma **retriável** (cota estourada, rede, 5xx) — o áudio segue
|
|
444
|
-
* transcritível e alguém precisa tentar de novo.
|
|
445
|
-
*
|
|
446
|
-
* É hook, e não exceção propagada, porque a mídia JÁ foi copiada para o storage quando isto
|
|
447
|
-
* acontece: deixar o erro subir marcaria a ingestão inteira como falha e o job reprocessaria o
|
|
448
|
-
* download de um binário que está salvo. E é hook, e não retentativa interna, porque o módulo não
|
|
449
|
-
* tem fila — quem sabe reenfileirar com atraso é o host, que já tem uma.
|
|
450
|
-
*
|
|
451
|
-
* Sem implementar, o áudio fica com `transcription_status = 'pending'` e nada o retoma: a
|
|
452
|
-
* transcrição não se perde nem mente, mas só sai se pedirem sob demanda.
|
|
453
|
-
*/
|
|
454
|
-
onTranscriptionDeferred?: (details: TranscriptionDeferredDescriptor) => Promise<void> | void;
|
|
455
|
-
}
|
|
456
|
-
type TranscriptionDeferredDescriptor = {
|
|
457
|
-
readonly companyId: string;
|
|
458
|
-
readonly messageId: string;
|
|
459
|
-
readonly whatsappNumber: string;
|
|
460
|
-
/** Onde o áudio já está salvo — quem retomar lê daqui, não da Meta (cuja URL expira). */
|
|
461
|
-
readonly uploadId: string;
|
|
462
|
-
/** Do `Retry-After` do engine, quando informado. É o intervalo mínimo a respeitar. */
|
|
463
|
-
readonly retryAfterSeconds?: number;
|
|
464
|
-
readonly reason: 'rate-limited' | 'transient-failure';
|
|
465
|
-
readonly error: unknown;
|
|
466
|
-
};
|
|
467
|
-
type InboundMediaDescriptor = {
|
|
468
|
-
readonly companyId: string;
|
|
469
|
-
readonly messageId: string;
|
|
470
|
-
readonly whatsappNumber: string;
|
|
471
|
-
/** ID da mídia na Meta — a origem do download, que expira. */
|
|
472
|
-
readonly sourceMediaId: string;
|
|
473
|
-
readonly mimeType: string;
|
|
474
|
-
readonly filename?: string;
|
|
475
|
-
};
|
|
476
|
-
|
|
477
342
|
/**
|
|
478
343
|
* Tetos da Meta para escolha interativa.
|
|
479
344
|
*
|
|
@@ -487,18 +352,36 @@ declare const WHATSAPP_CHOICE_LIMIT: {
|
|
|
487
352
|
readonly LIST_ROWS: 10;
|
|
488
353
|
readonly LIST_ROW_TITLE_LENGTH: 24;
|
|
489
354
|
};
|
|
355
|
+
type SendChannelMediaCommon = {
|
|
356
|
+
to: string;
|
|
357
|
+
mimeType: string;
|
|
358
|
+
filename: string;
|
|
359
|
+
caption?: string;
|
|
360
|
+
};
|
|
361
|
+
/**
|
|
362
|
+
* Ou o binário, ou um `mediaId` já conhecido — nunca nenhum dos dois.
|
|
363
|
+
*
|
|
364
|
+
* União em vez de dois campos opcionais: com ambos opcionais, "esqueci de passar os dois" compila e
|
|
365
|
+
* só quebra na chamada à Meta, em produção.
|
|
366
|
+
*/
|
|
367
|
+
type SendChannelMediaParams = (SendChannelMediaCommon & {
|
|
368
|
+
buffer: Buffer;
|
|
369
|
+
mediaId?: string | undefined;
|
|
370
|
+
}) | (SendChannelMediaCommon & {
|
|
371
|
+
buffer?: undefined;
|
|
372
|
+
mediaId: string;
|
|
373
|
+
});
|
|
490
374
|
interface ChannelAdapterInterface {
|
|
491
375
|
sendText(to: string, body: string): Promise<{
|
|
492
376
|
externalMessageId: string | null;
|
|
493
377
|
}>;
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
caption?: string;
|
|
500
|
-
}): Promise<{
|
|
378
|
+
/**
|
|
379
|
+
* Envia arquivo. Com `mediaId` conhecido, o binário não sobe de novo — a Meta aceita reusar o id
|
|
380
|
+
* por 30 dias, e o `mediaId` devolvido é o que permite guardá-lo para os próximos destinatários.
|
|
381
|
+
*/
|
|
382
|
+
sendMedia(params: SendChannelMediaParams): Promise<{
|
|
501
383
|
externalMessageId: string | null;
|
|
384
|
+
mediaId?: string | undefined;
|
|
502
385
|
}>;
|
|
503
386
|
sendTemplate(params: {
|
|
504
387
|
to: string;
|
|
@@ -652,6 +535,174 @@ interface FlowActionRegistry {
|
|
|
652
535
|
registerFlowAction(kind: FlowActionKind, handler: FlowActionHandler): void;
|
|
653
536
|
}
|
|
654
537
|
|
|
538
|
+
/**
|
|
539
|
+
* Quando transcrever nota de voz.
|
|
540
|
+
*
|
|
541
|
+
* Vive no contrato, e não só no módulo, porque atravessa três fronteiras: o painel escolhe, a API
|
|
542
|
+
* transporta e o módulo obedece. Duas definições concorrentes divergiriam no primeiro valor novo.
|
|
543
|
+
*/
|
|
544
|
+
type TranscriptionMode = 'auto' | 'onDemand';
|
|
545
|
+
interface WhatsAppSettings {
|
|
546
|
+
templateName: string;
|
|
547
|
+
templateLanguage: string;
|
|
548
|
+
templateVariables: string[];
|
|
549
|
+
welcomeMessage: string;
|
|
550
|
+
farewellMessage: string;
|
|
551
|
+
/**
|
|
552
|
+
* Transcrição de áudio ligada para ESTA empresa.
|
|
553
|
+
*
|
|
554
|
+
* Tri-state de propósito: `null` significa "não decidido pelo painel", e aí vale o padrão que o
|
|
555
|
+
* host injetou (tipicamente ambiente). Se fosse `boolean` com padrão `false`, atualizar o módulo
|
|
556
|
+
* desligaria a transcrição de quem já a tinha ligada por variável de ambiente — regressão
|
|
557
|
+
* silenciosa num recurso que estava funcionando.
|
|
558
|
+
*
|
|
559
|
+
* Ligar aqui não cria capacidade: sem engine e chave injetados no host, não há o que transcrever.
|
|
560
|
+
* Ambiente decide se É POSSÍVEL; isto decide se é para FAZER.
|
|
561
|
+
*/
|
|
562
|
+
transcriptionEnabled: boolean | null;
|
|
563
|
+
/** `null` = herda o modo injetado pelo host. */
|
|
564
|
+
transcriptionMode: TranscriptionMode | null;
|
|
565
|
+
}
|
|
566
|
+
interface TemplateVariablesMap {
|
|
567
|
+
[index: number]: string;
|
|
568
|
+
}
|
|
569
|
+
interface TemplateConfig {
|
|
570
|
+
name: string;
|
|
571
|
+
category: 'UTILITY' | 'MARKETING';
|
|
572
|
+
language: string;
|
|
573
|
+
headerType: 'NONE' | 'TEXT';
|
|
574
|
+
headerText?: string;
|
|
575
|
+
bodyText: string;
|
|
576
|
+
footerText?: string;
|
|
577
|
+
}
|
|
578
|
+
interface WhatsAppTemplateSummary {
|
|
579
|
+
id: string;
|
|
580
|
+
name: string;
|
|
581
|
+
shortId: string;
|
|
582
|
+
displayName: string;
|
|
583
|
+
status: string;
|
|
584
|
+
category: string;
|
|
585
|
+
language: string;
|
|
586
|
+
bodyText: string | null;
|
|
587
|
+
variableCount: number;
|
|
588
|
+
}
|
|
589
|
+
interface CreateTemplateResult {
|
|
590
|
+
ok: boolean;
|
|
591
|
+
message: string;
|
|
592
|
+
status?: string;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
type MessageHookOutcome = {
|
|
596
|
+
outcome: 'handled';
|
|
597
|
+
} | {
|
|
598
|
+
outcome: 'continue';
|
|
599
|
+
};
|
|
600
|
+
interface MetaWhatsAppHooks {
|
|
601
|
+
onMessageReceived?: (message: WhatsAppMessage, session: ConversationSession) => Promise<MessageHookOutcome>;
|
|
602
|
+
onStatusUpdate?: (status: WhatsAppStatus, session: ConversationSession | null) => Promise<void>;
|
|
603
|
+
onSessionExpired?: (session: ConversationSession) => Promise<void>;
|
|
604
|
+
onHumanRequested?: (session: ConversationSession) => Promise<void>;
|
|
605
|
+
/**
|
|
606
|
+
* Mídia recebida do cliente, já persistida como mensagem e pronta para ser copiada da Meta para
|
|
607
|
+
* o storage do host — normalmente enfileirando um job.
|
|
608
|
+
*
|
|
609
|
+
* Hook próprio, e não parte do `onMessageReceived`, porque aquele pertence ao fluxo do bot: ele
|
|
610
|
+
* nem é chamado quando a conversa está em atendimento humano, que é exatamente quando o cliente
|
|
611
|
+
* manda documento para o atendente. Ligar ingestão lá perderia esses arquivos em silêncio.
|
|
612
|
+
*
|
|
613
|
+
* A URL de download da Meta expira, então quem implementa deve tratar como trabalho urgente.
|
|
614
|
+
*/
|
|
615
|
+
onMediaReceived?: (media: InboundMediaDescriptor) => Promise<void>;
|
|
616
|
+
/**
|
|
617
|
+
* Falha ao enviar UM arquivo da biblioteca num nó `send_media`.
|
|
618
|
+
*
|
|
619
|
+
* O erro é entregue aqui em vez de propagado porque um PDF que não subiu não pode travar a
|
|
620
|
+
* conversa num nó automático — o cliente ficaria parado sem nenhuma mensagem. O módulo segue
|
|
621
|
+
* para o próximo arquivo e para o próximo nó; observar e alertar é do host.
|
|
622
|
+
*/
|
|
623
|
+
onFlowMediaError?: (error: unknown, details: {
|
|
624
|
+
flowKey: string;
|
|
625
|
+
nodeId: string;
|
|
626
|
+
uploadId: string;
|
|
627
|
+
}) => void;
|
|
628
|
+
/**
|
|
629
|
+
* Falha ao enviar a vitrine de produtos num nó `send_product_list`.
|
|
630
|
+
*
|
|
631
|
+
* Hook próprio, e não o de mídia: aqui não há `uploadId` — o que falhou foi a montagem da
|
|
632
|
+
* vitrine a partir do catálogo, e o host precisa saber qual nó ficou mudo.
|
|
633
|
+
*/
|
|
634
|
+
onFlowProductListError?: (error: unknown, details: {
|
|
635
|
+
flowKey: string;
|
|
636
|
+
nodeId: string;
|
|
637
|
+
}) => void;
|
|
638
|
+
/**
|
|
639
|
+
* Transcrição de áudio falhou de forma **retriável** (cota estourada, rede, 5xx) — o áudio segue
|
|
640
|
+
* transcritível e alguém precisa tentar de novo.
|
|
641
|
+
*
|
|
642
|
+
* É hook, e não exceção propagada, porque a mídia JÁ foi copiada para o storage quando isto
|
|
643
|
+
* acontece: deixar o erro subir marcaria a ingestão inteira como falha e o job reprocessaria o
|
|
644
|
+
* download de um binário que está salvo. E é hook, e não retentativa interna, porque o módulo não
|
|
645
|
+
* tem fila — quem sabe reenfileirar com atraso é o host, que já tem uma.
|
|
646
|
+
*
|
|
647
|
+
* Sem implementar, o áudio fica com `transcription_status = 'pending'` e nada o retoma: a
|
|
648
|
+
* transcrição não se perde nem mente, mas só sai se pedirem sob demanda.
|
|
649
|
+
*/
|
|
650
|
+
onTranscriptionDeferred?: (details: TranscriptionDeferredDescriptor) => Promise<void> | void;
|
|
651
|
+
/**
|
|
652
|
+
* A Meta mudou o status de um template (aprovado, rejeitado, pausado).
|
|
653
|
+
*
|
|
654
|
+
* É um evento de conta, não de conversa: não tem `session` nem número de cliente, e chega mesmo
|
|
655
|
+
* quando nenhuma conversa está acontecendo. Sem implementar, a única forma de descobrir que um
|
|
656
|
+
* template foi rejeitado é alguém abrir o painel da Meta e reparar.
|
|
657
|
+
*/
|
|
658
|
+
onTemplateStatusUpdate?: (update: WhatsAppTemplateStatusUpdate) => Promise<void> | void;
|
|
659
|
+
/**
|
|
660
|
+
* Qualidade ou limite de envio do número mudou (`FLAGGED` = qualidade caiu e o número corre risco
|
|
661
|
+
* de restrição; `DOWNGRADE` = teto de envio reduzido).
|
|
662
|
+
*
|
|
663
|
+
* Vale tratar como alerta operacional: quando vira restrição de fato, as mensagens já estão
|
|
664
|
+
* falhando, e o histórico de qualidade que explicaria a queda tem retenção curta no painel.
|
|
665
|
+
*/
|
|
666
|
+
onPhoneNumberQualityUpdate?: (update: WhatsAppPhoneNumberQualityUpdate) => Promise<void> | void;
|
|
667
|
+
/**
|
|
668
|
+
* Chegou um `field` que este módulo não sabe tratar — ou um que sabe, mas com corpo fora do
|
|
669
|
+
* schema (versão nova da Cloud API, campo assinado sem handler).
|
|
670
|
+
*
|
|
671
|
+
* Existe para que o webhook nunca seja um buraco negro: descartar em silêncio é indistinguível de
|
|
672
|
+
* webhook que parou de chegar, e foi assim que os eventos de template ficaram invisíveis até
|
|
673
|
+
* alguém procurar. Observar aqui é do host; o módulo não decide que é erro.
|
|
674
|
+
*/
|
|
675
|
+
onUnhandledWebhookEvent?: (details: UnhandledWebhookEventDescriptor) => Promise<void> | void;
|
|
676
|
+
}
|
|
677
|
+
type UnhandledWebhookEventDescriptor = {
|
|
678
|
+
/** O `changes[].field` como a Meta mandou; `undefined` quando o payload nem trouxe o campo. */
|
|
679
|
+
readonly field: string | undefined;
|
|
680
|
+
/** Por que não foi tratado: sem handler para o field, ou corpo que não bate com o schema dele. */
|
|
681
|
+
readonly reason: 'unknown-field' | 'invalid-shape';
|
|
682
|
+
/** O `value` cru, para diagnóstico. Nunca logar inteiro: pode conter dado de cliente. */
|
|
683
|
+
readonly value: unknown;
|
|
684
|
+
};
|
|
685
|
+
type TranscriptionDeferredDescriptor = {
|
|
686
|
+
readonly companyId: string;
|
|
687
|
+
readonly messageId: string;
|
|
688
|
+
readonly whatsappNumber: string;
|
|
689
|
+
/** Onde o áudio já está salvo — quem retomar lê daqui, não da Meta (cuja URL expira). */
|
|
690
|
+
readonly uploadId: string;
|
|
691
|
+
/** Do `Retry-After` do engine, quando informado. É o intervalo mínimo a respeitar. */
|
|
692
|
+
readonly retryAfterSeconds?: number;
|
|
693
|
+
readonly reason: 'rate-limited' | 'transient-failure';
|
|
694
|
+
readonly error: unknown;
|
|
695
|
+
};
|
|
696
|
+
type InboundMediaDescriptor = {
|
|
697
|
+
readonly companyId: string;
|
|
698
|
+
readonly messageId: string;
|
|
699
|
+
readonly whatsappNumber: string;
|
|
700
|
+
/** ID da mídia na Meta — a origem do download, que expira. */
|
|
701
|
+
readonly sourceMediaId: string;
|
|
702
|
+
readonly mimeType: string;
|
|
703
|
+
readonly filename?: string;
|
|
704
|
+
};
|
|
705
|
+
|
|
655
706
|
declare class MetaWhatsAppError extends Error {
|
|
656
707
|
readonly statusCode: number;
|
|
657
708
|
readonly code: string;
|
|
@@ -748,4 +799,4 @@ declare function toPreviewMediaId(uploadId: string): string;
|
|
|
748
799
|
*/
|
|
749
800
|
declare function resolvePreviewUploadId(mediaId: string): string | undefined;
|
|
750
801
|
|
|
751
|
-
export { AudioNotIngestedError, CROSS_FLOW_PREFIX, type CacheInterface, type CatalogPort, type CatalogProduct, type ChannelAdapterInterface, ConfigMissingError, type ConversationMessage, type ConversationSession, type ConversationSummary, type CreateTemplateResult, DuplicateWebhookDeliveryError, FLOW_ACTION_KIND, type FlowActionHandler, type FlowActionKind, type FlowActionRegistry, type FlowActionResult, type FlowConditionOperator, type FlowGraphData, type FlowGraphSummary, type FlowNodeData, type FlowNodeNext, type FlowNodeType, type FlowQuestionType, type InboundMediaDescriptor, InvalidWebhookSignatureError, type ListConversationsParams, type ListMessagesParams, type LiveFlowPosition, META_WHATSAPP_ERROR_CODES, type MessageDirection, type MessageHookOutcome, MessageNotAudioError, type MessageSender, type MessageStatus, MetaWhatsAppError, type MetaWhatsAppHooks, type ObjectStorageInterface, PREVIEW_MEDIA_ID_PREFIX, type RealtimeNotifierInterface, type SessionMode, SessionNotFoundError, type SessionState, type SubjectResolverInterface, type TemplateConfig, TemplateNotConfiguredError, type TemplateVariablesMap, type TranscriptionDeferredDescriptor, TranscriptionDisabledError, type TranscriptionMode, WHATSAPP_CHOICE_LIMIT, WhatsAppMessage, type WhatsAppSettings, WhatsAppStatus, type WhatsAppTemplateSummary, WindowExpiredError, crossFlowKey, flowGraphNodesSchema, flowNodeDataSchema, flowNodeNextSchema, isCrossFlowTarget, resolvePreviewUploadId, toPreviewMediaId };
|
|
802
|
+
export { AudioNotIngestedError, CROSS_FLOW_PREFIX, type CacheInterface, type CatalogPort, type CatalogProduct, type ChannelAdapterInterface, ConfigMissingError, type ConversationMessage, type ConversationSession, type ConversationSummary, type CreateTemplateResult, DuplicateWebhookDeliveryError, FLOW_ACTION_KIND, type FlowActionHandler, type FlowActionKind, type FlowActionRegistry, type FlowActionResult, type FlowConditionOperator, type FlowGraphData, type FlowGraphSummary, type FlowNodeData, type FlowNodeNext, type FlowNodeType, type FlowQuestionType, type InboundMediaDescriptor, InvalidWebhookSignatureError, type ListConversationsParams, type ListMessagesParams, type LiveFlowPosition, META_WHATSAPP_ERROR_CODES, type MessageDirection, type MessageHookOutcome, MessageNotAudioError, type MessageSender, type MessageStatus, MetaWhatsAppError, type MetaWhatsAppHooks, type ObjectStorageInterface, PREVIEW_MEDIA_ID_PREFIX, type RealtimeNotifierInterface, type SendChannelMediaParams, type SessionMode, SessionNotFoundError, type SessionState, type SubjectResolverInterface, type TemplateConfig, TemplateNotConfiguredError, type TemplateVariablesMap, type TranscriptionDeferredDescriptor, TranscriptionDisabledError, type TranscriptionMode, type UnhandledWebhookEventDescriptor, WHATSAPP_CHOICE_LIMIT, WhatsAppMessage, WhatsAppPhoneNumberQualityUpdate, type WhatsAppSettings, WhatsAppStatus, WhatsAppTemplateStatusUpdate, type WhatsAppTemplateSummary, WindowExpiredError, crossFlowKey, flowGraphNodesSchema, flowNodeDataSchema, flowNodeNextSchema, isCrossFlowTarget, resolvePreviewUploadId, toPreviewMediaId };
|