UNPKG

whatsapp

Version:

SDK for interfacing with WhatsApp Business Platform in Typescript or Node.js using the Cloud API, hosted by Meta.

316 lines (315 loc) 10.6 kB
/** * Copyright (c) Meta Platforms, Inc. and affiliates. * All rights reserved. * * This source code is licensed under the license found in the * LICENSE file in the root directory of this source tree. */ import { BaseClass } from './base'; import { MessageTypesEnum, ComponentTypesEnum, LanguagesEnum, ParametersTypesEnum, CurrencyCodesEnum, ButtonTypesEnum, ButtonPositionEnum, InteractiveTypesEnum } from './enums'; import { GeneralRequestBody, RequesterResponseInterface } from './requester'; export type GeneralMessageBody = GeneralRequestBody & { /** * The Meta messaging product name. * @default 'whatsapp' */ messaging_product: 'whatsapp'; }; export type StatusObject = { status: 'read'; message_id: string; }; export type StatusRequestBody = GeneralMessageBody & StatusObject; type ConTextObject = { message_id: string; }; export type MessageRequestBody<T extends MessageTypesEnum> = GeneralMessageBody & { recipient_type?: string; to: string; context?: ConTextObject; type?: T; }; type MetaAudioMediaObject = { id: string; link?: never; }; type HostedAudioMediaObject = { id?: never; link: string; }; export type AudioMediaObject = MetaAudioMediaObject | HostedAudioMediaObject; export type AudioMessageRequestBody = MessageRequestBody<MessageTypesEnum.Audio> & { [MessageTypesEnum.Audio]: [AudioMediaObject]; }; type AddressesObject = { street?: string; city?: string; state?: string; zip?: string; country?: string; country_code?: string; type?: 'HOME' | 'WORK' | string; }; type EmailObject = { email?: string; type?: 'HOME' | 'WORK' | string; }; type NameObject = { formatted_name: string; first_name?: string; last_name?: string; middle_name?: string; suffix?: string; prefix?: string; }; type OrgObject = { company?: string; department?: string; title?: string; }; type PhoneObject = { phone?: 'PHONE_NUMBER'; type?: 'CELL' | 'MAIN' | 'IPHONE' | 'HOME' | 'WORK' | string; wa_id?: string; }; type URLObject = { url?: string; type?: 'HOME' | 'WORK' | string; }; export type ContactObject = { addresses?: AddressesObject[]; birthday?: `${number}${number}${number}${number}-${number}${number}-${number}${number}`; emails?: EmailObject[]; name: NameObject; org?: OrgObject; phones?: PhoneObject[]; urls?: URLObject[]; }; export type ContactsMessageRequestBody = MessageRequestBody<MessageTypesEnum.Contacts> & { [MessageTypesEnum.Contacts]: [ContactObject]; }; type MetaDocumentMediaObject = { id: string; link?: never; caption?: string; filename?: string; }; type HostedDocumentMediaObject = { id?: never; link: string; caption?: string; filename?: string; }; export type DocumentMediaObject = MetaDocumentMediaObject | HostedDocumentMediaObject; export type DocumentMessageRequestBody = MessageRequestBody<MessageTypesEnum.Document> & { [MessageTypesEnum.Document]: [DocumentMediaObject]; }; type MetaImageMediaObject = { id: string; link?: never; caption?: string; }; type HostedImageMediaObject = { id?: never; link: string; caption?: string; }; export type ImageMediaObject = MetaImageMediaObject | HostedImageMediaObject; export type ImageMessageRequestBody = MessageRequestBody<MessageTypesEnum.Image> & { [MessageTypesEnum.Image]: [ImageMediaObject]; }; type ProductObject = { product_retailer_id: string; }; type SimpleTextObject = { text: string; }; type RowObject = { id: string; title: string; description?: string; }; type MultiProductSectionObject = { product_items: ProductObject[]; rows?: never; title?: string; }; type ListSectionObject = { product_items?: never; rows: RowObject[]; title?: string; }; type SectionObject = MultiProductSectionObject | ListSectionObject; type ButtonObject = { title: string; id: string; }; type ReplyButtonObject = { type: 'reply'; reply: ButtonObject; }; type ActionObject = { button?: string; buttons?: ReplyButtonObject[]; catalog_id?: string; product_retailer_id?: string; sections?: SectionObject; }; type HeaderObject = { type: 'document' | 'image' | 'text' | 'video'; document?: DocumentMediaObject; image?: ImageMediaObject; text?: string; video?: VideoMediaObject; }; type ButtonInteractiveObject = { type: InteractiveTypesEnum.Button; body: SimpleTextObject; footer?: SimpleTextObject; header?: HeaderObject; action: ActionObject; }; type ListInteractiveObject = { type: InteractiveTypesEnum.List; body: SimpleTextObject; footer?: SimpleTextObject; header?: HeaderObject; action: ActionObject; }; type ProductInteractiveObject = { type: InteractiveTypesEnum.Product; body?: SimpleTextObject; footer?: SimpleTextObject; header?: HeaderObject; action: ActionObject; }; type ProductListInteractiveObject = { type: InteractiveTypesEnum.ProductList; body: SimpleTextObject; footer?: SimpleTextObject; header: HeaderObject; action: ActionObject; }; export type InteractiveObject = ButtonInteractiveObject | ListInteractiveObject | ProductInteractiveObject | ProductListInteractiveObject; export type InteractiveMessageRequestBody = MessageRequestBody<MessageTypesEnum.Interactive> & { [MessageTypesEnum.Interactive]: InteractiveObject; }; type MetaStickerMediaObject = { id: string; link?: never; }; type HostedStickerMediaObject = { id?: never; link: string; }; export type StickerMediaObject = MetaStickerMediaObject | HostedStickerMediaObject; export type StickerMessageRequestBody = MessageRequestBody<MessageTypesEnum.Sticker> & { [MessageTypesEnum.Sticker]: [StickerMediaObject]; }; type ReActionObject = { message_id: string; emoji: string; }; export type ReactionMessageRequestBody = MessageRequestBody<MessageTypesEnum.Reaction> & ReActionObject; export type TextObject = { body: string; preview_url?: boolean; }; export type TextMessageRequestBody = MessageRequestBody<MessageTypesEnum.Text> & { [MessageTypesEnum.Text]: [TextObject]; }; type MetaHostedVideoMediaObject = { id: string; link?: never; caption?: string; }; type SelfHostedVideoMediaObject = { id?: never; link: string; caption?: string; }; export type VideoMediaObject = MetaHostedVideoMediaObject | SelfHostedVideoMediaObject; export type VideoMessageRequestBody = MessageRequestBody<MessageTypesEnum.Video> & { [MessageTypesEnum.Video]: [VideoMediaObject]; }; type LanguageObject = { policystring: 'deterministic'; code: LanguagesEnum; }; type ParametersObject<T extends ParametersTypesEnum> = { type: T; }; type TextParametersObject = ParametersObject<ParametersTypesEnum.Text> & SimpleTextObject; type CurrencyObject = { fallback_value: string; code: CurrencyCodesEnum; amount_1000: number; }; type CurrencyParametersObject = ParametersObject<ParametersTypesEnum.Currency> & { currency: CurrencyObject; }; type DateTimeParametersObject = ParametersObject<ParametersTypesEnum.Currency> & { date_time: CurrencyObject; }; type DocumentParametersObject = ParametersObject<ParametersTypesEnum.Document> & DocumentMediaObject; type ImageParametersObject = ParametersObject<ParametersTypesEnum.Image> & ImageMediaObject; type VideoParametersObject = ParametersObject<ParametersTypesEnum.Video> & VideoMediaObject; type QuickReplyButtonParametersObject = { type: ParametersTypesEnum.Payload; payload: string; }; type URLButtonParametersObject = SimpleTextObject & { type: ParametersTypesEnum.Text; }; type ButtonParameterObject = QuickReplyButtonParametersObject | URLButtonParametersObject; type ComponentObject<T extends ComponentTypesEnum> = { type: T; parameters: (CurrencyParametersObject | DateTimeParametersObject | DocumentParametersObject | ImageParametersObject | TextParametersObject | VideoParametersObject)[]; }; type ButtonComponentObject = ComponentObject<ComponentTypesEnum.Button> & { parameters: ButtonParameterObject; sub_type: ButtonTypesEnum; index: ButtonPositionEnum; }; export type MessageTemplateObject<T extends ComponentTypesEnum> = { name: string; language: LanguageObject; components?: (ComponentObject<T> | ButtonComponentObject)[]; }; export type MessageTemplateRequestBody<T extends ComponentTypesEnum> = MessageRequestBody<MessageTypesEnum.Template> & MessageTemplateObject<T>; export type LocationObject = { longitude: number; latitude: number; name?: string; address?: string; }; export type LocationMessageRequestBody = MessageRequestBody<MessageTypesEnum.Location> & { [MessageTypesEnum.Location]: [LocationObject]; }; export type MessagesResponse = GeneralMessageBody & { contacts: [ { input: string; wa_id: string; } ]; messages: [ { id: string; } ]; }; export declare class MessagesClass extends BaseClass { audio(body: AudioMediaObject, recipient: number, replyMessageId?: string): Promise<RequesterResponseInterface<MessagesResponse>>; contacts(body: [ContactObject], recipient: number, replyMessageId?: string): Promise<RequesterResponseInterface<MessagesResponse>>; document(body: DocumentMediaObject, recipient: number, replyMessageId?: string): Promise<RequesterResponseInterface<MessagesResponse>>; image(body: ImageMediaObject, recipient: number, replyMessageId?: string): Promise<RequesterResponseInterface<MessagesResponse>>; interactive(body: InteractiveObject, recipient: number, replyMessageId?: string): Promise<RequesterResponseInterface<MessagesResponse>>; location(body: LocationObject, recipient: number, replyMessageId?: string): Promise<RequesterResponseInterface<MessagesResponse>>; status(body: StatusObject): Promise<RequesterResponseInterface<MessagesResponse>>; sticker(body: StickerMediaObject, recipient: number, replyMessageId?: string): Promise<RequesterResponseInterface<MessagesResponse>>; template(body: MessageTemplateObject<ComponentTypesEnum>, recipient: number, replyMessageId?: string): Promise<RequesterResponseInterface<MessagesResponse>>; text(body: TextObject, recipient: number, replyMessageId?: string): Promise<RequesterResponseInterface<MessagesResponse>>; video(body: VideoMediaObject, recipient: number, replyMessageId?: string): Promise<RequesterResponseInterface<MessagesResponse>>; } export {};