@adatechnology/meta-whatsapp-module 0.2.0-rc.20 → 0.2.0-rc.22
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 +106 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +57 -1
- package/dist/index.d.ts +57 -1
- package/dist/index.js +104 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -2559,6 +2559,12 @@ interface MetaWhatsAppModuleConfig {
|
|
|
2559
2559
|
wabaId?: string;
|
|
2560
2560
|
apiVersion?: string;
|
|
2561
2561
|
baseUrl?: string;
|
|
2562
|
+
/**
|
|
2563
|
+
* Catálogo do Meta Commerce que a vitrine no chat oferece. Sem ele — ou sem `providers.catalog`
|
|
2564
|
+
* — a action `send_product_list` não é registrada: nó que o editor oferece e que em silêncio não
|
|
2565
|
+
* faz nada é pior do que nó que não existe.
|
|
2566
|
+
*/
|
|
2567
|
+
catalogId?: string;
|
|
2562
2568
|
}
|
|
2563
2569
|
interface MetaWhatsAppModuleFeatures {
|
|
2564
2570
|
flowEngine?: boolean;
|
|
@@ -2744,6 +2750,28 @@ declare class WhatsAppChannelAdapter implements ChannelAdapterInterface {
|
|
|
2744
2750
|
}): Promise<{
|
|
2745
2751
|
externalMessageId: string | null;
|
|
2746
2752
|
}>;
|
|
2753
|
+
sendInteractiveButtons(params: {
|
|
2754
|
+
to: string;
|
|
2755
|
+
body: string;
|
|
2756
|
+
buttons: {
|
|
2757
|
+
id: string;
|
|
2758
|
+
title: string;
|
|
2759
|
+
}[];
|
|
2760
|
+
}): Promise<{
|
|
2761
|
+
externalMessageId: string | null;
|
|
2762
|
+
}>;
|
|
2763
|
+
sendProductList(params: {
|
|
2764
|
+
to: string;
|
|
2765
|
+
headerText: string;
|
|
2766
|
+
body: string;
|
|
2767
|
+
footerText?: string;
|
|
2768
|
+
sections: {
|
|
2769
|
+
title: string;
|
|
2770
|
+
retailerIds: string[];
|
|
2771
|
+
}[];
|
|
2772
|
+
}): Promise<{
|
|
2773
|
+
externalMessageId: string | null;
|
|
2774
|
+
}>;
|
|
2747
2775
|
/**
|
|
2748
2776
|
* Busca o binário da mídia — da Meta, ou do storage quando o id é do simulador.
|
|
2749
2777
|
*
|
|
@@ -2831,4 +2859,32 @@ type CreateSendMediaActionParams = {
|
|
|
2831
2859
|
*/
|
|
2832
2860
|
declare function createSendMediaAction(params: CreateSendMediaActionParams): FlowActionHandler;
|
|
2833
2861
|
|
|
2834
|
-
|
|
2862
|
+
/** Tetos da Meta para `interactive.product_list`. Acima disso a mensagem inteira é recusada. */
|
|
2863
|
+
declare const PRODUCT_LIST_LIMIT: {
|
|
2864
|
+
readonly ITEMS: 30;
|
|
2865
|
+
readonly SECTIONS: 10;
|
|
2866
|
+
};
|
|
2867
|
+
type CreateSendProductListActionParams = {
|
|
2868
|
+
catalog: CatalogPort;
|
|
2869
|
+
catalogId: string;
|
|
2870
|
+
logMessage: FlowMediaTranscriptLogger;
|
|
2871
|
+
startState: SessionState;
|
|
2872
|
+
/** Falha de UMA vitrine não pode travar a conversa; o host observa por aqui. */
|
|
2873
|
+
onError?: (error: unknown, details: {
|
|
2874
|
+
flowKey: string;
|
|
2875
|
+
nodeId: string;
|
|
2876
|
+
}) => void;
|
|
2877
|
+
};
|
|
2878
|
+
/**
|
|
2879
|
+
* Action `send_product_list`: ao passar pelo nó, envia a vitrine do catálogo publicado na Meta.
|
|
2880
|
+
*
|
|
2881
|
+
* O nó guarda **critério**, não a lista de produtos. Congelar `retailerId` em `actionParams` faria
|
|
2882
|
+
* o fluxo continuar oferecendo o item esgotado — ou o item excluído, que a Meta recusa junto com a
|
|
2883
|
+
* mensagem inteira. O que o operador edita é o texto e o filtro; o estoque manda no resto.
|
|
2884
|
+
*
|
|
2885
|
+
* Só produto em estoque entra. Vitrine que mostra o que não tem produz a pior conversa possível:
|
|
2886
|
+
* o cliente escolhe, responde, e recebe "acabou".
|
|
2887
|
+
*/
|
|
2888
|
+
declare function createSendProductListAction(params: CreateSendProductListActionParams): FlowActionHandler;
|
|
2889
|
+
|
|
2890
|
+
export { type AttachFlowMediaParams, type AudioTranscriber, type CompanyDocumentView, type CompanyDocumentsPage, type ConversationDocumentView, type ConversationDocumentsPage, type CreateFlowGraphParams, CreateFlowGraphUseCase, type CreateMetaWhatsAppModuleParams, type CreateSendMediaActionParams, type CreateSendProductListActionParams, DEFAULT_FLOW_GRAPH_CACHE_TTL_SECONDS, type DeleteConversationParams, type DeleteConversationResult, DeleteConversationUseCase, DeleteFlowGraphUseCase, DocumentRepository, type DocumentRow, type DrizzleMigrateFunction, type ExportConversationParams, type ExportConversationResult, ExportConversationUseCase, FlowGraphCache, FlowGraphRepository, type FlowGraphRow, FlowInterpreter, type FlowMediaLocation, FlowMediaRepository, type FlowMediaRow, type FlowMediaTranscriptLogger, type FlowRunResult, type FlowStepInput, type FlowStepResult, GetFlowGraphUseCase, GetLiveFlowPositionsUseCase, type IngestInboundMediaParams, type IngestInboundMediaResult, IngestInboundMediaUseCase, type IngestTranscriptionOptions, type InsertMessageParams, InvalidFlowGraphError, type LinkDocumentParams, type ListCompanyDocumentsParams, ListCompanyDocumentsUseCase, type ListConversationDocumentsParams, ListConversationDocumentsUseCase, type ListConversationsFilters, type ListConversationsParams, ListConversationsUseCase, type ListDocumentsParams, type ListDocumentsResult, ListFlowGraphsUseCase, type ListMessagesParams, ListMessagesUseCase, type LogMessageParams, LogMessageUseCase, META_WHATSAPP_MIGRATIONS_TABLE, type MessageModerator, MessageRepository, type MessageRow, type MetaWhatsAppDatabase, type MetaWhatsAppModule, type MetaWhatsAppModuleConfig, type MetaWhatsAppModuleFeatures, type MetaWhatsAppModuleProviders, type MetaWhatsAppTranscriptionConfig, type NewDocumentRow, type NewFlowGraphRow, type NewFlowMediaRow, type NewMessageRow, type NewSessionRow, type NewSettingsRow, type NonceStoreInterface, OptimisticLockError, PRODUCT_LIST_LIMIT, type PreviewMediaSupport, type PurgeExpiredDocumentsParams, type PurgeExpiredDocumentsResult, PurgeExpiredDocumentsUseCase, type RealtimeRelay, type ReceiveWebhookParams, type ReceiveWebhookResult, ReceiveWebhookUseCase, type ReleaseConversationParams, ReleaseConversationUseCase, type ListMessagesParams$1 as RepositoryListMessagesParams, type ResolveTranscriptionPolicyDependencies, type RunMetaWhatsAppMigrationsParams, type SaveFlowGraphParams, SaveFlowGraphUseCase, type SaveTranscriptionByWaMessageIdParams, type SaveTranscriptionParams, type SendMediaParams, SendMessageUseCase, type SendTemplateParams, type SendTextParams, SessionRepository, type SessionRow, SettingsRepository, type SettingsRow, SseHub, type SseListener, type StorePreviewMediaParams, type StorePreviewMediaResult, StorePreviewMediaUseCase, TRANSCRIPTION_MODE, TRANSCRIPTION_STATUS, type TakeoverConversationParams, TakeoverConversationUseCase, type TicketStoreInterface, type TranscribeAudioDependencies, type TranscribeAudioParams, type TranscribeAudioResult, TranscribeAudioUseCase, type TranscriptionPolicy, type TranscriptionPolicyDefaults, type TranscriptionPolicyResolver, type TranscriptionStatus, type UpdateFlowMediaParams, WEBHOOK_NONCE_TTL_SECONDS, WhatsAppChannelAdapter, claimWebhookDelivery, createMetaWhatsAppModule, createSendMediaAction, createSendProductListAction, createTranscriptionPolicyResolver, documents, extractMediaDescriptor, flowGraphs, flowMedia, isAudioMimeType, isRetriableTranscriptionError, isUnsupportedTranscriptionError, issueSseTicket, messages, metaWhatsAppMigrationsFolder, metaWhatsAppSchema, redeemSseTicket, resolveFailureStatus, runMetaWhatsAppMigrations, sessions, settings, transcriptionRetryAfterSeconds, verifyWebhookChallenge, verifyWebhookSignature };
|
package/dist/index.d.ts
CHANGED
|
@@ -2559,6 +2559,12 @@ interface MetaWhatsAppModuleConfig {
|
|
|
2559
2559
|
wabaId?: string;
|
|
2560
2560
|
apiVersion?: string;
|
|
2561
2561
|
baseUrl?: string;
|
|
2562
|
+
/**
|
|
2563
|
+
* Catálogo do Meta Commerce que a vitrine no chat oferece. Sem ele — ou sem `providers.catalog`
|
|
2564
|
+
* — a action `send_product_list` não é registrada: nó que o editor oferece e que em silêncio não
|
|
2565
|
+
* faz nada é pior do que nó que não existe.
|
|
2566
|
+
*/
|
|
2567
|
+
catalogId?: string;
|
|
2562
2568
|
}
|
|
2563
2569
|
interface MetaWhatsAppModuleFeatures {
|
|
2564
2570
|
flowEngine?: boolean;
|
|
@@ -2744,6 +2750,28 @@ declare class WhatsAppChannelAdapter implements ChannelAdapterInterface {
|
|
|
2744
2750
|
}): Promise<{
|
|
2745
2751
|
externalMessageId: string | null;
|
|
2746
2752
|
}>;
|
|
2753
|
+
sendInteractiveButtons(params: {
|
|
2754
|
+
to: string;
|
|
2755
|
+
body: string;
|
|
2756
|
+
buttons: {
|
|
2757
|
+
id: string;
|
|
2758
|
+
title: string;
|
|
2759
|
+
}[];
|
|
2760
|
+
}): Promise<{
|
|
2761
|
+
externalMessageId: string | null;
|
|
2762
|
+
}>;
|
|
2763
|
+
sendProductList(params: {
|
|
2764
|
+
to: string;
|
|
2765
|
+
headerText: string;
|
|
2766
|
+
body: string;
|
|
2767
|
+
footerText?: string;
|
|
2768
|
+
sections: {
|
|
2769
|
+
title: string;
|
|
2770
|
+
retailerIds: string[];
|
|
2771
|
+
}[];
|
|
2772
|
+
}): Promise<{
|
|
2773
|
+
externalMessageId: string | null;
|
|
2774
|
+
}>;
|
|
2747
2775
|
/**
|
|
2748
2776
|
* Busca o binário da mídia — da Meta, ou do storage quando o id é do simulador.
|
|
2749
2777
|
*
|
|
@@ -2831,4 +2859,32 @@ type CreateSendMediaActionParams = {
|
|
|
2831
2859
|
*/
|
|
2832
2860
|
declare function createSendMediaAction(params: CreateSendMediaActionParams): FlowActionHandler;
|
|
2833
2861
|
|
|
2834
|
-
|
|
2862
|
+
/** Tetos da Meta para `interactive.product_list`. Acima disso a mensagem inteira é recusada. */
|
|
2863
|
+
declare const PRODUCT_LIST_LIMIT: {
|
|
2864
|
+
readonly ITEMS: 30;
|
|
2865
|
+
readonly SECTIONS: 10;
|
|
2866
|
+
};
|
|
2867
|
+
type CreateSendProductListActionParams = {
|
|
2868
|
+
catalog: CatalogPort;
|
|
2869
|
+
catalogId: string;
|
|
2870
|
+
logMessage: FlowMediaTranscriptLogger;
|
|
2871
|
+
startState: SessionState;
|
|
2872
|
+
/** Falha de UMA vitrine não pode travar a conversa; o host observa por aqui. */
|
|
2873
|
+
onError?: (error: unknown, details: {
|
|
2874
|
+
flowKey: string;
|
|
2875
|
+
nodeId: string;
|
|
2876
|
+
}) => void;
|
|
2877
|
+
};
|
|
2878
|
+
/**
|
|
2879
|
+
* Action `send_product_list`: ao passar pelo nó, envia a vitrine do catálogo publicado na Meta.
|
|
2880
|
+
*
|
|
2881
|
+
* O nó guarda **critério**, não a lista de produtos. Congelar `retailerId` em `actionParams` faria
|
|
2882
|
+
* o fluxo continuar oferecendo o item esgotado — ou o item excluído, que a Meta recusa junto com a
|
|
2883
|
+
* mensagem inteira. O que o operador edita é o texto e o filtro; o estoque manda no resto.
|
|
2884
|
+
*
|
|
2885
|
+
* Só produto em estoque entra. Vitrine que mostra o que não tem produz a pior conversa possível:
|
|
2886
|
+
* o cliente escolhe, responde, e recebe "acabou".
|
|
2887
|
+
*/
|
|
2888
|
+
declare function createSendProductListAction(params: CreateSendProductListActionParams): FlowActionHandler;
|
|
2889
|
+
|
|
2890
|
+
export { type AttachFlowMediaParams, type AudioTranscriber, type CompanyDocumentView, type CompanyDocumentsPage, type ConversationDocumentView, type ConversationDocumentsPage, type CreateFlowGraphParams, CreateFlowGraphUseCase, type CreateMetaWhatsAppModuleParams, type CreateSendMediaActionParams, type CreateSendProductListActionParams, DEFAULT_FLOW_GRAPH_CACHE_TTL_SECONDS, type DeleteConversationParams, type DeleteConversationResult, DeleteConversationUseCase, DeleteFlowGraphUseCase, DocumentRepository, type DocumentRow, type DrizzleMigrateFunction, type ExportConversationParams, type ExportConversationResult, ExportConversationUseCase, FlowGraphCache, FlowGraphRepository, type FlowGraphRow, FlowInterpreter, type FlowMediaLocation, FlowMediaRepository, type FlowMediaRow, type FlowMediaTranscriptLogger, type FlowRunResult, type FlowStepInput, type FlowStepResult, GetFlowGraphUseCase, GetLiveFlowPositionsUseCase, type IngestInboundMediaParams, type IngestInboundMediaResult, IngestInboundMediaUseCase, type IngestTranscriptionOptions, type InsertMessageParams, InvalidFlowGraphError, type LinkDocumentParams, type ListCompanyDocumentsParams, ListCompanyDocumentsUseCase, type ListConversationDocumentsParams, ListConversationDocumentsUseCase, type ListConversationsFilters, type ListConversationsParams, ListConversationsUseCase, type ListDocumentsParams, type ListDocumentsResult, ListFlowGraphsUseCase, type ListMessagesParams, ListMessagesUseCase, type LogMessageParams, LogMessageUseCase, META_WHATSAPP_MIGRATIONS_TABLE, type MessageModerator, MessageRepository, type MessageRow, type MetaWhatsAppDatabase, type MetaWhatsAppModule, type MetaWhatsAppModuleConfig, type MetaWhatsAppModuleFeatures, type MetaWhatsAppModuleProviders, type MetaWhatsAppTranscriptionConfig, type NewDocumentRow, type NewFlowGraphRow, type NewFlowMediaRow, type NewMessageRow, type NewSessionRow, type NewSettingsRow, type NonceStoreInterface, OptimisticLockError, PRODUCT_LIST_LIMIT, type PreviewMediaSupport, type PurgeExpiredDocumentsParams, type PurgeExpiredDocumentsResult, PurgeExpiredDocumentsUseCase, type RealtimeRelay, type ReceiveWebhookParams, type ReceiveWebhookResult, ReceiveWebhookUseCase, type ReleaseConversationParams, ReleaseConversationUseCase, type ListMessagesParams$1 as RepositoryListMessagesParams, type ResolveTranscriptionPolicyDependencies, type RunMetaWhatsAppMigrationsParams, type SaveFlowGraphParams, SaveFlowGraphUseCase, type SaveTranscriptionByWaMessageIdParams, type SaveTranscriptionParams, type SendMediaParams, SendMessageUseCase, type SendTemplateParams, type SendTextParams, SessionRepository, type SessionRow, SettingsRepository, type SettingsRow, SseHub, type SseListener, type StorePreviewMediaParams, type StorePreviewMediaResult, StorePreviewMediaUseCase, TRANSCRIPTION_MODE, TRANSCRIPTION_STATUS, type TakeoverConversationParams, TakeoverConversationUseCase, type TicketStoreInterface, type TranscribeAudioDependencies, type TranscribeAudioParams, type TranscribeAudioResult, TranscribeAudioUseCase, type TranscriptionPolicy, type TranscriptionPolicyDefaults, type TranscriptionPolicyResolver, type TranscriptionStatus, type UpdateFlowMediaParams, WEBHOOK_NONCE_TTL_SECONDS, WhatsAppChannelAdapter, claimWebhookDelivery, createMetaWhatsAppModule, createSendMediaAction, createSendProductListAction, createTranscriptionPolicyResolver, documents, extractMediaDescriptor, flowGraphs, flowMedia, isAudioMimeType, isRetriableTranscriptionError, isUnsupportedTranscriptionError, issueSseTicket, messages, metaWhatsAppMigrationsFolder, metaWhatsAppSchema, redeemSseTicket, resolveFailureStatus, runMetaWhatsAppMigrations, sessions, settings, transcriptionRetryAfterSeconds, verifyWebhookChallenge, verifyWebhookSignature };
|
package/dist/index.js
CHANGED
|
@@ -1741,6 +1741,75 @@ function createSendMediaAction(params) {
|
|
|
1741
1741
|
}
|
|
1742
1742
|
__name(createSendMediaAction, "createSendMediaAction");
|
|
1743
1743
|
|
|
1744
|
+
// src/flows/createSendProductListAction.ts
|
|
1745
|
+
var PRODUCT_LIST_LIMIT = {
|
|
1746
|
+
ITEMS: 30,
|
|
1747
|
+
SECTIONS: 10
|
|
1748
|
+
};
|
|
1749
|
+
function createSendProductListAction(params) {
|
|
1750
|
+
return async ({ node, session, channel }) => {
|
|
1751
|
+
if (!channel.sendProductList) return;
|
|
1752
|
+
const actionParams = node.actionParams ?? {};
|
|
1753
|
+
try {
|
|
1754
|
+
const available = await listAvailableProducts({
|
|
1755
|
+
catalog: params.catalog,
|
|
1756
|
+
catalogId: params.catalogId,
|
|
1757
|
+
...actionParams.search ? {
|
|
1758
|
+
search: actionParams.search
|
|
1759
|
+
} : {}
|
|
1760
|
+
});
|
|
1761
|
+
if (available.length === 0) return;
|
|
1762
|
+
const bodyText = actionParams.bodyText ?? "Veja o que temos dispon\xEDvel:";
|
|
1763
|
+
const { externalMessageId } = await channel.sendProductList({
|
|
1764
|
+
to: session.whatsappNumber,
|
|
1765
|
+
headerText: actionParams.headerText ?? "Nossos produtos",
|
|
1766
|
+
body: bodyText,
|
|
1767
|
+
...actionParams.footerText ? {
|
|
1768
|
+
footerText: actionParams.footerText
|
|
1769
|
+
} : {},
|
|
1770
|
+
sections: [
|
|
1771
|
+
{
|
|
1772
|
+
title: actionParams.sectionTitle ?? "Dispon\xEDveis",
|
|
1773
|
+
retailerIds: available.map((product) => product.retailerId)
|
|
1774
|
+
}
|
|
1775
|
+
]
|
|
1776
|
+
});
|
|
1777
|
+
await params.logMessage.execute({
|
|
1778
|
+
companyId: session.companyId,
|
|
1779
|
+
whatsappNumber: session.whatsappNumber,
|
|
1780
|
+
direction: "outbound",
|
|
1781
|
+
sender: "bot",
|
|
1782
|
+
agentUserId: null,
|
|
1783
|
+
type: "interactive",
|
|
1784
|
+
content: bodyText,
|
|
1785
|
+
payload: {
|
|
1786
|
+
kind: "product_list",
|
|
1787
|
+
productCount: available.length
|
|
1788
|
+
},
|
|
1789
|
+
waMessageId: externalMessageId,
|
|
1790
|
+
status: "sent",
|
|
1791
|
+
startState: params.startState
|
|
1792
|
+
});
|
|
1793
|
+
} catch (error) {
|
|
1794
|
+
params.onError?.(error, {
|
|
1795
|
+
flowKey: session.flowKey ?? "",
|
|
1796
|
+
nodeId: node.id
|
|
1797
|
+
});
|
|
1798
|
+
}
|
|
1799
|
+
};
|
|
1800
|
+
}
|
|
1801
|
+
__name(createSendProductListAction, "createSendProductListAction");
|
|
1802
|
+
async function listAvailableProducts(params) {
|
|
1803
|
+
const products = await params.catalog.listProducts({
|
|
1804
|
+
catalogId: params.catalogId,
|
|
1805
|
+
...params.search ? {
|
|
1806
|
+
search: params.search
|
|
1807
|
+
} : {}
|
|
1808
|
+
});
|
|
1809
|
+
return products.filter((product) => product.availability === "in stock").slice(0, PRODUCT_LIST_LIMIT.ITEMS);
|
|
1810
|
+
}
|
|
1811
|
+
__name(listAvailableProducts, "listAvailableProducts");
|
|
1812
|
+
|
|
1744
1813
|
// src/repositories/FlowMediaRepository.ts
|
|
1745
1814
|
import { and as and5, asc as asc2, eq as eq6, sql as sql4 } from "drizzle-orm";
|
|
1746
1815
|
var FlowMediaRepository = class {
|
|
@@ -1889,6 +1958,30 @@ var WhatsAppChannelAdapter = class {
|
|
|
1889
1958
|
externalMessageId: result.waMessageId
|
|
1890
1959
|
};
|
|
1891
1960
|
}
|
|
1961
|
+
async sendInteractiveButtons(params) {
|
|
1962
|
+
const result = await this.translateErrors(() => this.messages.sendInteractiveButtons({
|
|
1963
|
+
to: params.to,
|
|
1964
|
+
bodyText: params.body,
|
|
1965
|
+
buttons: params.buttons
|
|
1966
|
+
}));
|
|
1967
|
+
return {
|
|
1968
|
+
externalMessageId: result.waMessageId
|
|
1969
|
+
};
|
|
1970
|
+
}
|
|
1971
|
+
async sendProductList(params) {
|
|
1972
|
+
const result = await this.translateErrors(() => this.messages.sendProductListMessage({
|
|
1973
|
+
to: params.to,
|
|
1974
|
+
headerText: params.headerText,
|
|
1975
|
+
bodyText: params.body,
|
|
1976
|
+
...params.footerText ? {
|
|
1977
|
+
footerText: params.footerText
|
|
1978
|
+
} : {},
|
|
1979
|
+
sections: params.sections
|
|
1980
|
+
}));
|
|
1981
|
+
return {
|
|
1982
|
+
externalMessageId: result.waMessageId
|
|
1983
|
+
};
|
|
1984
|
+
}
|
|
1892
1985
|
/**
|
|
1893
1986
|
* Busca o binário da mídia — da Meta, ou do storage quando o id é do simulador.
|
|
1894
1987
|
*
|
|
@@ -2509,6 +2602,15 @@ function createMetaWhatsAppModule(params) {
|
|
|
2509
2602
|
onError: hooks?.onFlowMediaError
|
|
2510
2603
|
}));
|
|
2511
2604
|
}
|
|
2605
|
+
if (flowInterpreter && providers.catalog && config.catalogId) {
|
|
2606
|
+
flowInterpreter.registerFlowAction(FLOW_ACTION_KIND.SEND_PRODUCT_LIST, createSendProductListAction({
|
|
2607
|
+
catalog: providers.catalog,
|
|
2608
|
+
catalogId: config.catalogId,
|
|
2609
|
+
logMessage,
|
|
2610
|
+
startState,
|
|
2611
|
+
onError: hooks?.onFlowProductListError
|
|
2612
|
+
}));
|
|
2613
|
+
}
|
|
2512
2614
|
const transcriptionMode = providers.transcription?.mode ?? TRANSCRIPTION_MODE.ON_DEMAND;
|
|
2513
2615
|
const resolveTranscriptionPolicy = providers.transcription ? createTranscriptionPolicyResolver({
|
|
2514
2616
|
settingsRepository,
|
|
@@ -2728,6 +2830,7 @@ export {
|
|
|
2728
2830
|
MessageRepository,
|
|
2729
2831
|
OptimisticLockError,
|
|
2730
2832
|
PREVIEW_MEDIA_ID_PREFIX,
|
|
2833
|
+
PRODUCT_LIST_LIMIT,
|
|
2731
2834
|
PurgeExpiredDocumentsUseCase,
|
|
2732
2835
|
ReceiveWebhookUseCase,
|
|
2733
2836
|
ReleaseConversationUseCase,
|
|
@@ -2746,6 +2849,7 @@ export {
|
|
|
2746
2849
|
claimWebhookDelivery,
|
|
2747
2850
|
createMetaWhatsAppModule,
|
|
2748
2851
|
createSendMediaAction,
|
|
2852
|
+
createSendProductListAction,
|
|
2749
2853
|
createTranscriptionPolicyResolver,
|
|
2750
2854
|
documents,
|
|
2751
2855
|
extractMediaDescriptor,
|