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.
Optionaloptions: ConversationTotalsOptions & RequestOptionsCuá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.
Optionaloptions: ConversationTotalsOptions & RequestOptionsCrea una plantilla. Sólo WhatsApp (§ templates).
El cuerpo va en el formato de Meta y se manda tal cual; una plantilla nueva nace en revisión y no se puede usar hasta que Meta la aprueba.
Borra una plantilla. Sólo WhatsApp (§ templates).
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.
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.
Las conversaciones de una cuenta, encadenando páginas.
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.
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.
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",
});
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.
Cuántos mensajes quedan sin leer en la organización. Es el número del badge.
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
timeoutMsde esa llamada.