Class MessagesResource

Hierarchy

  • Resource
    • MessagesResource

Constructors

Methods

  • Las conversaciones de una cuenta: un contacto, la fecha del último mensaje y cuántos quedan sin leer. Ordenadas por actividad, la más reciente primero.

    La primera llamada de una cuenta puede tardar: si no hay nada guardado, el servidor se baja las conversaciones de la red y sus mensajes antes de contestar. Conviene subir el timeoutMs de esa llamada.

    Parameters

    Returns Promise<Paginated<Conversation>>

  • Cuántas conversaciones hubo en un rango, en total o agrupadas por día, mes o año.

    Una conversación es un contacto en un día, no un hilo: la misma persona escribiendo el lunes y el martes cuenta dos. Y groupValue es el NÚMERO que da Mongo ($dayOfYear, $month, $year), no una fecha — con group_by: "day" dos años del mismo rango caen en el mismo valor, así que el rango se acota antes de agrupar por día.

    Sin idAccount cuenta las de la organización entera.

    Parameters

    Returns Promise<
        | { total: number }
        | {
            group: "day" | "month" | "year";
            stats: { groupValue: number; totalConversations: number }[];
        },
    >

  • Cuántas conversaciones hubo en un rango, en total o agrupadas por día, mes o año.

    Una conversación es un contacto en un día, no un hilo: la misma persona escribiendo el lunes y el martes cuenta dos. Y groupValue es el NÚMERO que da Mongo ($dayOfYear, $month, $year), no una fecha — con group_by: "day" dos años del mismo rango caen en el mismo valor, así que el rango se acota antes de agrupar por día.

    Sin idAccount cuenta las de la organización entera.

    Parameters

    Returns Promise<
        | { total: number }
        | {
            group: "day" | "month" | "year";
            stats: { groupValue: number; totalConversations: number }[];
        },
    >

  • Borra una plantilla. Sólo WhatsApptemplates).

    Hacen falta LAS DOS COSAS, el identificador y el nombre: Meta borra por nombre y usa el id para desambiguar entre idiomas de la misma plantilla. Van en la query, no en el cuerpo.

    Parameters

    • idOrganization: string
    • idAccount: string
    • templateId: string
    • templateName: string
    • options: RequestOptions = {}

    Returns Promise<void>

  • El hilo con un contacto, encadenando páginas.

    Ojo: la primera página marca el hilo como leído, así que iterarlo entero lo marca también.

    Parameters

    Returns AsyncGenerator<Message>

  • El hilo con un contacto, del más reciente al más antiguo.

    Pedir la primera página (offset 0 o sin offset) marca el hilo como leído. Es lo que baja el contador de unreadCount; no hay forma de leerlo sin marcarlo.

    Aquí, y en el webhook, contact_id, from_contact_id y message_options.files vienen POBLADOS. Usa messageContact, messageContactId y messageFiles en vez de asumirlo.

    Parameters

    Returns Promise<Paginated<Message>>

  • Borra TODOS los mensajes de una cuenta. No hay vuelta atrás y no hay confirmación.

    Los contactos se quedan: lo que se va son los mensajes.

    Parameters

    Returns Promise<void>

  • Manda un mensaje a un contacto.

    simple_message y file_message valen en todas las redes con chat; el resto son formas propias de Meta o de WhatsApp y cada una exige su bloque en message_options (template_name + template_language, whatsappInteractive, metaElements, metaQuickReplies). El texto se valida contra characters de pv.catalog.socialLimits(), que es el límite del CHAT y no el de una publicación.

    En Facebook e Instagram sólo se admite un adjunto por mensaje (error 1509), y en WhatsApp fuera de la ventana de 24 horas sólo se admite una plantilla.

    await pv.messages.send(orgId, accountId, contactId, {
    message_type: "simple_message",
    text: "Abrimos de 9 a 14",
    });

    Parameters

    Returns Promise<Message>

  • Las plantillas de mensaje de la cuenta.

    SÓLO WHATSAPP. Ninguna otra red las implementa, y pedirlas en otra no devuelve el 1502 de "esta red no tiene chat": el SDK lanza un error pelado y el manejador global lo convierte en un HTTP 500 con code: 500. Comprueba que la cuenta es de WhatsApp antes de llamar.

    Lo que devuelve es lo que devuelve Meta, con sus nombres: name, status, components y language. No se traduce a nada nuestro porque la plantilla que hay que nombrar al enviar es la suya.

    Parameters

    Returns Promise<Paginated<MessageTemplate>>