declare enum FileType {
    AUDIO = "audio",
    FALLBACK = "fallback",
    FILE = "file",
    IMAGE = "image",
    LOCATION = "location",
    VIDEO = "video"
}
declare enum ResponseMessageType {
    AUDIO = "audio",
    FILE = "file",
    IMAGE = "image",
    VIDEO = "video",
    TEMPLATE = "template"
}
declare enum ResponseMessageTemplateType {
    BUTTON = "button",
    GENERIC = "generic"
}
declare enum ButtonType {
    WEB_URL = "web_url",
    POSTBACK = "postback"
}
declare enum WebUrlButtonWebviewHeightRatio {
    COMPACT = "compact",
    TALL = "tall",
    FULL = "full"
}
declare enum QuickReplyMessageContentType {
    TEXT = "text",
    LOCATION = "location"
}
declare enum MessagingType {
    RESPONSE = "RESPONSE",
    UPDATE = "UPDATE",
    MESSAGE_TAG = "MESSAGE_TAG",
    NON_PROMOTIONAL_SUBSCRIPTION = "NON_PROMOTIONAL_SUBSCRIPTION"
}
interface BaseRequestMessaging {
    sender: {
        id: string;
    };
    recipient: {
        id: string;
    };
    timestamp: number;
}
interface TextRequestMessaging extends BaseRequestMessaging {
    message: {
        mid: string;
        text: string;
        quick_reply?: {
            payload: string;
        };
    };
}
interface FileRequestMessaging extends BaseRequestMessaging {
    message: {
        mid: string;
        attachments: Array<{
            type: FileType.AUDIO | FileType.FILE | FileType.IMAGE | FileType.VIDEO;
            payload: {
                url: string;
            };
        }>;
    };
}
interface LocationRequestMessaging extends BaseRequestMessaging {
    message: {
        mid: string;
        attachments: Array<{
            type: FileType.LOCATION;
            payload: {
                coordinates: {
                    lat: number;
                    long: number;
                };
            };
        }>;
    };
}
interface FallbackRequestMessaging extends BaseRequestMessaging {
    message: {
        mid: string;
        text: string;
        attachments: Array<{
            type: FileType.FALLBACK;
            title: string;
            url: string;
        }>;
    };
}
interface PostBackMessaging {
    postback: {
        title: string;
        payload: string;
        referral?: {
            ref: string;
            source: string;
            type: string;
        };
    };
}
declare type RequestMessaging = TextRequestMessaging | FileRequestMessaging | LocationRequestMessaging | FallbackRequestMessaging | PostBackMessaging;
interface Request {
    object: string;
    entry: Array<{
        id: string;
        time: number;
        messaging: RequestMessaging[];
    }>;
}
interface TextResponseMessage {
    text: string;
}
interface FileResponseMessage {
    attachment: {
        type: ResponseMessageType.AUDIO | ResponseMessageType.FILE | ResponseMessageType.IMAGE | ResponseMessageType.VIDEO;
        payload: {
            url: string;
        };
    };
}
interface PostBackButton {
    type: ButtonType.POSTBACK;
    title: string;
    payload: string;
}
interface WebUrlButton {
    type: ButtonType.WEB_URL;
    url: string;
    title: string;
    webview_height_ratio?: WebUrlButtonWebviewHeightRatio;
    messenger_extensions?: boolean;
    fallback_url?: string;
}
declare type Button = WebUrlButton | PostBackButton;
interface ButtonTemplate {
    template_type: ResponseMessageTemplateType.BUTTON;
    text: string;
    buttons: Button[];
}
interface GenericTemplate {
    template_type: ResponseMessageTemplateType.GENERIC;
    elements: Array<{
        title: string;
        subtitle?: string;
        image_url?: string;
        default_action?: Button;
        buttons?: Button[];
    }>;
}
interface TemplateResponseMessage {
    attachment: {
        type: ResponseMessageType.TEMPLATE;
        payload: ButtonTemplate | GenericTemplate;
    };
}
interface BaseQuickReply {
    content_type: QuickReplyMessageContentType;
    title?: string;
    payload?: string;
    image_url?: string;
}
interface TextQuickReply extends BaseQuickReply {
    content_type: QuickReplyMessageContentType.TEXT;
    title: string;
    payload: string;
}
interface LocationQuickReply extends BaseQuickReply {
    content_type: QuickReplyMessageContentType.LOCATION;
}
declare type QuickReply = TextQuickReply | LocationQuickReply;
interface QuickReplyMessage {
    text: string;
    quick_replies: QuickReply[];
}
declare type ResponseMessage = TextResponseMessage | FileResponseMessage | TemplateResponseMessage | QuickReplyMessage;
interface Response {
    recipient: {
        id: string;
    };
    message: ResponseMessage;
    messaging_type: MessagingType;
    tag?: string;
}
export { FileType, ResponseMessageType, ResponseMessageTemplateType, ButtonType, WebUrlButtonWebviewHeightRatio, QuickReplyMessageContentType, MessagingType, BaseRequestMessaging, TextRequestMessaging, FileRequestMessaging, LocationRequestMessaging, FallbackRequestMessaging, PostBackMessaging, RequestMessaging, Request, TextResponseMessage, FileResponseMessage, PostBackButton, WebUrlButton, Button, ButtonTemplate, GenericTemplate, TemplateResponseMessage, BaseQuickReply, TextQuickReply, LocationQuickReply, QuickReply, QuickReplyMessage, ResponseMessage, Response };
