Documentación DMDS API REST v1.5 usando CURL ============================================ En todos los ejemplos reemplazar **dmdsid** por el nombre del DMDS dedicado, y **APIKEY** por el hash secreto. Cambios v1.4 a v1.5: cantidad de eventos y eventos paginados ------------------------------------------------------------ Se agrega el metodo ``cantidad_eventos`` para obtener la cantidad de eventos entre dos fechas determinadas. Cantidad de Eventos entre Fechas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ejemplo: .. code-block:: bash curl -X GET "https://api-dmds-dmdsid.planisys.net/v1/cantidad_eventos" -H "accept: application/json" -H "Authorization: APIKEYxxxx" -H "Content-Type: application/json" -d '{ "fechahora_desde": "2023-07-30_00:00:00", "fechahora_hasta": "2023-07-31_23:59:00" }' La respuesta que devuelve este endpoint, viene discriminada en tipos de eventos, p.ej.: .. code-block:: json { "status": "ok", "eventos": [ { "count": 6329, "event": "envio" }, { "count": 5053, "event": "vista" }, { "count": 796, "event": "click" }, { "count": 55, "event": "rebote_hard" }, { "count": 18, "event": "desuscripcion" }, { "count": 11, "event": "conversion" }, { "count": 18, "event": "invalidacion" } ] } Eventos entre fechas con paginado ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Este método ``ver_eventos`` permite paginar con largo de página variable mayor o igual a 10, y elegir de una página los eventos que se hayan presentado entre dos fecha-horas determinados. Lleva cuatro parámetros: Ejemplo: .. code-block:: bash curl -X GET "https://api-dmds-dmdsid.planisys.net/v1/ver_eventos" -H "accept: application/json" -H "Authorization: APIKEYxxxx" -H "Content-Type: application/json" -d '{ "fechahora_desde": "2023-07-30_00:00:00", "fechahora_hasta": "2023-07-31_23:59:00" "pagina":4, "cantidad":100 }' .. warning:: Los parámetros **pagina** y **cantidad** dentro del JSON, deben ser numéricos. Cambios v1.3 a v1.4: archiving de mails enviados (requiere licencia de *archiving*) ----------------------------------------------------------------------------------- Se agrega el flag ``archive`` en *send_many_inline* y *send_one_inline* , con el objetivo de guardar en archivo un testigo de lo que fue enviado dentro de un **Envío Efectivo** (también referido como **Lote** o **Batch**). De esta manera, seteando "archive":"true" en la lista de parámetros de los métodos arriba mencionados, se podrá recuperar más información con el método ``eeid_info`` (ver más abajo), y recuperar los formatos EML enviados a cada destinatario. A su vez, para mails archivados, se agrega el método ``eeid_eml`` que permite retornar el texto del mail enviado en un **envío efectivo** a uno de los **receptores**. De esta manera, se podrá tener una copia del **EML** efectivamente instanciado para cada destinatario en particular, conteniendo p.ej. comprobantes, notificaciones o facturas para fines de **Auditoría**. Esta funcionalidad requiere *Licencia Archiving* para el DMDS en cuestión. Cambios v1.2 a v1.3 - Whitelisting ---------------------------------- Se agrega el método ``whitelist`` que permite preguntar si un contacto está en whitelist, agregarlo o quitarlo de la misma. La **whitelist** sirve para **inmunizar** a un contacto para que no sea invalidado por un posible rebote por falla o mensaje confuso del MTA receptor. También lo protege ante un posible proceso de desuscripción/invalidación que se pueda hacer en base a procesamiento de rebotes. Cambios v1.1 a v1.2 - API version --------------------------------- Se agrega el método ``version`` que devuelve el número de versión de la API, p.ej. Obtener Versión de la API ------------------------- Con esta llamada al método ``version`` se puede obtener la versión de la API que se está utilizando, y buscar los cambios en la documentación. .. code-block:: bash curl -X GET "https://api-dmds-dmdsid.planisys.net/v1/version" -H "accept: application/json" -H "Authorization: APIKEYxxxx" -H "Content-Type: application/json" devuelve un json con el número de versión. .. code-block:: json {"version":"1.2"} Cambios v1.0 a v1.1 - Revalidar e Invalidar ------------------------------------------- Se agregan los métodos ``revalidar`` e ``invalidar`` , y se guardan eventos de **Revalidación** e **Invalidación** para poder hacer tracking de cambios de estado de contactos. También se agrega el evento **Not-Sent** para los casos en que se intenta enviar mail a un contacto inválido. Dicho evento se visualiza en esta versión como **unknown** en la API, y como **Not-Sent** en la interfaz web Mtmail. La visualización de Eventos es compatible con la aplicación https://mtmail.planisys.net que reemplazará a las aplicaciones dmds-*dmdsid*.planisys.net próximamente. Ejemplo GET de contacto ----------------------- Aqui mostraremos las llamadas relativas a **Contactos**, es decir direcciones de mail de contactos suscriptos, con sus **Campos** y **Eventos** asociados. .. code-block:: bash curl -X GET "https://api-dmds-dmdsid.planisys.net/v1/contacto/usuario@dominio" -H "accept: application/json" -H "Authorization: APIKEYxxxx" -H "Content-Type: application/json" .. warning:: Importante: recordar que el nombre de host y authorization es propio de cada DMDS. Por lo tanto reemplazar APIKEYxxxx y *host* o *dmdsid* por el valor que corresponda Curl en Microsoft Windows ------------------------- Pueden descargar curl aquí: http://www.paehl.com/open_source/?CURL_7.72.0 Whitelist de contacto --------------------- El método ``whitelist`` se puede utilizar para preguntar si un email está en lista blanca utilizando **GET** , quitarlo de la lista blanca utilizando **DELETE** y agregarlo a la lista blanca utilizando **POST** o **PUT** Preguntar si está en lista blanca con **GET**: .. code-block:: bash curl -X GET "https://api-dmds-dmdsid.planisys.net/v1/whitelist/usuario@dominio.com" -H "accept: application/json" -H "Authorization: APIKEYxxxx" -H "Content-Type: application/json" devuelve en caso de no estar en lista blanca: .. code-block:: json {"status":"ok","msg":"usuario@dominio.com not whitelisted"} y devuelve en caso de estar en lista blanca: .. code-block:: json {"status":"ok","msg":"usuario@dominio.com whitelisted"} Agregar a lista blanca con **POST** o **PUT** : .. code-block:: bash curl -X POST "https://api-dmds-dmdsid.planisys.net/v1/whitelist/usuario@dominio.com" -H "accept: application/json" -H "Authorization: APIKEYxxxx" -H "Content-Type: application/json" devuelve .. code-block:: json {"status":"ok","msg":"usuario@dominio.com added to whitelist"} Quitar de lista blanca con **DELETE** .. code-block:: bash curl -X DELETE "https://api-dmds-dmdsid.planisys.net/v1/whitelist/usuario@dominio.com" -H "accept: application/json" -H "Authorization: APIKEYxxxx" -H "Content-Type: application/json" devuelve .. code-block:: json {"status":"ok","msg":"usuario@dominio.com removed from whitelist"} Devuelve información de un contacto ----------------------------------- En este ejemplo se ve como devolver la información de un contacto en concreto. En la llamada, en la url, hay que especificar el email del usuario ya existente en la base de datos de la api. Así de esta manera, se nos presentará toda la información de un contacto, como su nombre, apellido, a que **Base** o grupo pertenece, sus eventos, etc. .. code-block:: bash curl -X GET "https://api-dmds-dmdsid.planisys.net/v1/contacto/fdkslafjkdsjafdjsakjfdsa@hotmail.com" -H "accept: application/json" -H "Authorization: xxxxxxxxxxx La respuesta viene en un JSON que contiene los eventos, bases/grupos a los que pertenece, campos e información estática. En este caso , se muestra una cuenta de mail que ha sido invalidada luego de dos rebotes "hard", o *cuenta inexistente* .. code-block:: json { "status": "ok", "contacto": { "numid": 455895, "email": "fdkslafjkdsjafdjsakjfdsa@hotmail.com", "nombre": "Juan", "apellido": "Pérez", "edad": null, "sexo": "M", "profesion": "", "localidad": "", "operacion": "Modificacion", "actualizado": "2020-10-15T08:25:32", "origenes": "", "codigo_pais": "", "codigo_region": "", "ciudad": "", "dispositivo": "web", "subtipo_dispositivo_id": null, "grupo_de_dominio_id": 0, "invalido": true, "campos": [ { "nombre": "XYZDNIXYZ", "valor": "21232421" }, { "nombre": "XYZEMPLEADORXYZ", "valor": "Planisys" }, { "nombre": "XYZEMPLEADOR2XYZ", "valor": "AvasCloud" }, { "nombre": "XYZTELCELXYZ", "valor": "+34999111333" } ], "eventos": [ { "evento": "envio", "timestamp": "2020-10-15T08:25:11", "campania": "VIMS " }, { "evento": "envio", "timestamp": "2020-10-15T08:25:16", "campania": "VIMS " }, { "evento": "envio", "timestamp": "2020-10-15T08:25:18", "campania": "VIMS " }, { "evento": "envio", "timestamp": "2020-10-15T08:25:29", "campania": "VIMS " }, { "evento": "rebote_hard", "timestamp": "2020-10-15T08:25:32", "campania": "VIMS " }, { "evento": "rebote_hard", "timestamp": "2020-10-15T08:30:08", "campania": "VIMS " } ], "grupos": [ "Origen API" ], "campanias": [], "campanias_desusc": [] } } Listar contactos inválidos -------------------------- Con esta llamada se nos mostrarán todos los contactos que están inválidos (es decir que por causa de rebotes o Feedback loops de Spam han sido invalidados). .. code-block:: bash curl -X GET "https://api-dmds-host/v1/contactos/invalidos/" -H "accept: application/json" -H 'Authorization: xxxxxxxxxxxxxx' Crear de nuevo o actualizar un contacto --------------------------------------- Con la siguiente llamada se puede crear un contacto de nuevo o actualizar uno existente. La primera variable que se define es el correo electrónico, para entenderlo es como una primary key en la base de datos. Siempre para actualizar algún contacto nos basaremos en su email ya que es único. En la parte de datos definimos diferentes atributos, que pueden definir un contacto. Todos esos campos se pueden ir cambiando a medida que el contacto cambia alguno de los valores. Para especificar que usuario queremos modificar usaremos su email. .. code-block:: bash curl -X POST "https://api-dmds-host1/v1/contacto/" -H "accept: application/json" -H "Content-Type: application/json" -d '{ "email":"email@", "nombre": "xxxxx", "apellido": "xxxxx", "edad": "xx", "sexo": "x", "invalido": false, "campos": [{"nombre": "xxxxxxx","valor": "+xxxx..xxx"}] }' .. warning:: Cuando se utilizan los caracteres [ y ] , es que tenemos una **lista** de valores. En este ultimo caso , una lista de JSONs en donde cada JSON denota un campo. Asociar a una o mas bases a un contacto nuevo o existente --------------------------------------------------------- .. code:: bash curl -X POST "https://api-dmds-cualquiera.planisys.net/v1/contacto/" -H "accept: application/json" -H "Authorization: mitoken" -H "Content-Type: application/json" -d '{ "email": "hjose4@planisys.com", "sexo": "F", "nombre":"Hernan", "apellido":"Perez", "grupos":["Testing Planisys","facturas de prueba"] }' .. note:: Un **origen** o **base** es lo mismo que un **grupo**. Es el nombre de una ``base de contactos``. Un contacto puede formar parte de varias bases (grupos). Setear valores de campos a un contacto nuevo o existente -------------------------------------------------------- .. code-block:: bash curl -X POST "https://api-dmds-dmdsid.planisys.net/v1/contacto/" -H "accept: application/json" -H "Authorization: mitoken" -H "Content-Type: application/json" -d '{"email": "juan4@planisys.com", "campos": [ {"nombre":"XYZDNIXYZ","valor":"13111423"}] }' Invalidar un contacto (introducido en v1.1) ------------------------------------------- .. code-block:: bash curl -X GET "https://api-dmds-dmdsid.planisys.net/v1/invalidar/usuario@mail" -H "accept: application/json" -H "Authorization: mitoken" -H "Content-Type: application/json" Se insertará un **Evento** de ``Invalidación`` con el timestamp cuando ocurrió la invalidación. Al estar el contacto como *inválido*, todo intento de enviarle e-mail directo o en copia, hace aparecer un evento de ``Not-Sent`` (no enviado). .. note:: Esta es una llamada **GET** En v1.3 , al agregarse el whitelisting puede cambiar la respuesta a la llamada diciendo que no es posible invalidar un contacto en lista blanca, primero se lo debe remover de la lista blanca, y no se agregará el evento: .. code-block:: json {"status":"ok","msg":"whitelisted"} Revalidar un contacto (introducido en v1.1) ------------------------------------------- .. code-block:: bash curl -X GET "https://api-dmds-dmdsid.planisys.net/v1/revalidar/usuario@mail" -H "accept: application/json" -H "Authorization: mitoken" -H "Content-Type: application/json" Se insertará un **Evento** de ``Revalidación`` con el timestamp cuando ocurrió la revalidación. Si el contacto era válido, sigue siendo válido. Si estaba invalidado, quedará válido a partir de ahora nuevamente. .. note:: Esta es una llamada **GET** De manera similar a ``invalidar`` , en ``revalidar`` no se insertará un evento de ``Revalidación`` en caso de estar el mail en lista blanca, y devolverá: .. code-block:: json {"status":"ok","msg":"whitelisted"} Invalidar un contacto - deprecado (v1.0) ---------------------------------------- En la misma actualización de un contacto, se lo puede invalidar o re-validar. Por defecto la variable ``invalido`` siempre está en falso. Pero si se quiere desuscribir o invalidar se hace, poniendo esa variable a uno, (invalido: true), sin evento de ``Revalidación``. Nos permite definir que este contacto esta en la lista de los inválidos. .. code-block:: bash curl -X POST "https://api-dmds-dmdsid.planisys.net/v1/contacto/" -H 'Authorization: xxxxxxxx' -H "accept: application/json" -H "Content-Type: application/json" -d '{"email": "correo@dominio.com", "nombre": "xxxx", "apellido": "xxxx", "edad": "x","sexo":"x","invalido": true}' .. note:: Utilizar los métodos /revalidar e /invalidar en vez de este método, que no deja Eventos para poder ser rastreados, y funciona a bajo nivel. Solo utilizarlo en caso de no interesarse por los Eventos de Invalidación y Revalidación. Crear una Campaña ----------------- Con el método **/v1/campania/** en modo ``POST`` se puede crear una campaña tipo **api** o **normal** La creacion devuelve siempre el id y el numid, mas una apikey en el caso API, que se pueden usar en llamadas subsiguientes, p.ej. para enviar un mail. Al obtener una **apikey** , se puede tambien utilizar **SMTP-API** con un nombre de usuario dmdsid-campnumid, y clave apikey, para el caso de aplicaciones que requieran configurar SMTP con autenticacion, dando esto la posibilidad de asignar un par username/password a una campaña determinada. Para crear una normal, luego se debe entrar a la interfaz web y completar la creacion del **envio** .. code-block:: bash curl -X POST "https://api-dmds-dmdsid.planisys.net/v1/campania/" -H 'Authorization: xxxxxxxx' -H "accept: application/json" -H "Content-Type: application/json" -d '{ "tipo":"normal", "nombre":"prueba campania"}' La campaña tipo api requiere de mas parámetros, de los cuales solo ``replyto`` es opcional , crea un **envio** unico y permite enviar mails bajo el numid retornado p.ej.: .. code-block:: bash curl -X POST "https://api-dmds-dmdsid.planisys.net/v1/campania/" -H 'Authorization: xxxxxxxx' -H "accept: application/json" -H "Content-Type: application/json" -d '{ "tipo":"normal", "nombre":"prueba campania", "remitente":"ventas@dominio.com", "remitente_nombre": "Ventas", "asunto": "XYZTAG-CURLXYZ", "asunto_uri":"https://www.dominio.net/newsletter/asunto.txt", "replyto":"rt12@dominio.com", "url":"https://www.dominio.com/newsletter.html", "charset":"utf8", "desusc":"no"}' Para mejor visibilidad repetimos el JSON: .. code-block:: json { "tipo":"api", "nombre":"campania api", "remitente":"ventas@dominio.com", "remitente_nombre": "Ventas", "asunto": "XYZTAG-CURLXYZ", "asunto_uri":"https://www.dominio.net/newsletter/asunto.txt", "replyto":"rt12@dominio.com", "url":"https://www.dominio.com/newsletter.html", "charset":"utf8", "desusc":"no" } Si en el asunto va ``XYZTAG-CURLXYZ`` , entonces el método requiere del parametro asunto_uri , porque va a ser un asunto dinamico. Si se prefiere, se puede poner un asunto estático fijo, y obviar asunto_uri. Tanto el remitente como el asunto y la url de la pieza de mail son defaults, es decir se pueden sobreescribir al momento de enviar emails bajo el numid de campaña. La llamada retorna un json conteniendo un ``numid`` para subsiguientes llamadas, p.ej. .. code-block:: json {"status":"ok","id":"66bfae5b-3b6f-4bc9-a563-f62d5a9812a3","numid":68235,"camp_apikey":"a62d247c345fe31d0cda39ba1c3d3501"} .. warning:: Actualmente no se permite modificar la campaña creada, teniendo en cuenta que los metodos como send_one_inline y send_one_uri sobreescriben los defaults de la campaña. Enviar un correo a un solo destinatario con html uri ---------------------------------------------------- Para realizar este envío es necesario definir algunos campos, como por ejemplo: el campo de email tiene que ser siempre verdadero, ya que esto nos permite enviar el correo. Si este valor esta en falso, no se podrán enviar mensajes. Otros valores a definir son la id de la campña y el correo destinatario. Los otros valores como nombre, apellido, asunto son opcionales. En el caso que quiera enviar un html mediante uri, este se añade en la parte de html_url. En el apartado de headers, recordar definir su valor de autorizacion. .. code-block:: bash curl -X POST https://api-dmds-dmdsid.planisys.net/v1/envio/send_one_uri/ -H "Accept:application/json" -H "Authorization:xxxxxxx" -H "Content-Type:application/json" -d '{"campana_id":2134,"email":true,"contacto":{"email":"correo@dominio.com","nombre":"xxxx","apellido":"xxxx"},"html_url":"http://xxxxxxx.html", "remitente": "sender@planisys.com", "remitente_nombre":"Nombre del Remitente"}' Esta llamada va a devolver un **eeid** (Envio Efectivo ID), mediante el cual podemos consultar los eventos que se produjeron (ver Consulta Eventos). .. note:: Al especificar una URL, la API REST sigue a los codigos 301 y 302 para redireccion hasta llegar a un codigo 200 y obtener la pagina. .. warning:: El archivo HTML se espera en codificacion o charset UTF-8 , de manera que si el HTML contiene caracteres mezclados de windows-1252 o iso-8859-1 p.ej. , puede ser que parte del contenido no se muestre correctamente En caso de dudas respecto de la codificación de ciertos caracteres o manipulación multi-plataforma que mezcle varias codificaciones en un mismo HTML , recomendamos utilizar las codificaciones de caracteres internacionales standard de HTML en esta página https://www.rapidtables.com/web/html/html-codes.html Enviar un correo a un destinatario con html URL y adjuntos ---------------------------------------------------------- En este caso, en vez de JSON utilizaremos un FORM , y se estaran enviando archivos adjuntos del filesystem local. .. code-block:: bash curl -X POST "https://api-dmds-dmdsid.planisys.net/v1/envio/send_one_form/" -H "accept: application/json" -H "Authorization: AABBCC1234" -F 'campana_id=13' -F 'contacto=soporte@planisys.com' -F 'html_url=http://planisys.net/prueba.html' -F 'attach1=@/root/attach-example-1.pdf' -F 'attach2=@/root/attach-example-1.docx' .. note:: Los archivos adjuntos se envían en formato base-64 (Content-Transfer-Encoding). Enviar un correo a un solo destinatario con html inline ------------------------------------------------------- La diferencia de la llamada previa esta es como definir el html dentro del codigo. .. code-block:: bash curl -X POST https://api-dmds-dmdsid.planisys.net/v1/envio/send_one_inline/-H "Accept:application/json"-H "Authorization:xxxxxxx"-H "Content-Type:application/json" -d '{"campana_id":111,"email":true,"contacto":{"email":"correo@dominio.com","nombre":"xxxxx","apellido":"xxxx"}, "html":"Page Title

This is a Heading

This is a paragraph.

", "remitente": "sender@planisys.com", "remitente_nombre":"Nombre del Remitente"}' Esta llamada va a devolver un **eeid** (Envio Efectivo ID), mediante el cual podemos consultar los eventos que se produjeron (ver Consulta Eventos). Enviar un correo a más de un destinatario con html uri ------------------------------------------------------ Para esta llamada vamos a seguir el mismo concepto que para las otras a la hora de enviar un mensaje. En este caso queremos enviar a mucho destinatarios, para esto vamos a definir un array de contactos que quienes queremos enviar y cambiar **contacto** por **contactos**. En el ejemplo que se muestra más abajo, enviamos un correo a dos personas, pero su puede definir muchas más personas. .. warning:: Al enviar a varios, se cambia *contacto* (un JSON con email, y opcionalmente nombre y apellido), por **contactos** que es una **LISTA** de jsons y va entre corchetes cuadrados [ y ] .. code-block:: bash curl -X POST https://api-dmds-host/v1/envio/send_many_uri/ \ -H "Accept:application/json" -H "Authorization:xxxxx" \ -H "Content-Type:application/json" \ -d '{ \ "campana_id":1111, \ "email":true, \ "contactos":[ \ {"email":"contacto1@dominio.com","nombre":"xxxx","apellido":"xxxxxx"}, \ {"email":"contacto2@doinio.com","nombre":"xxxxx","apellido":"xxxxx"} \ ], \ "html_url":"https://www.planisys.net", \ "remitente": "sender@planisys.com", \ "remitente_nombre":"Nombre del Remitente" \ }' Esta llamada va a devolver un **eeid** (Envio Efectivo ID), mediante el cual podemos consultar los eventos que se produjeron (ver Consulta Eventos). .. warning:: Como algunas de las direcciones de mail pueden ser incorrectas, puede ser que el numero de mails enviados que figura en el json de respuesta bajo **sent** sea menor al numero de recipientes especificados Enviar un correo a más de un destinatario con html inline --------------------------------------------------------- .. code-block:: bash curl -X POST https://api-dmds-host/v1/envio/send_many_inline/ -H "Accept:application/json" -H "Authorization:xxxxxxx" -H "Content-Type:application/json" -d '{"campana_id":1234 ,"email":true,"contactos":[{"email":"contacto1@dominio.com","nombre":"xxxxx","apellido":"xxxxxx"},{"email":"contacto2@dominio.com","nombre":"xxxx","apellido":"xxxxxx"}],"html":"Page Title

This is a Heading

This is a paragraph.

"}' Esta llamada va a devolver un eeid (Envio Efectivo ID), mediante el cual podemos consultar los eventos que se produjeron (ver Consulta Eventos). APIKEYs de campañas -------------------- Con el metodo ``campania_apikey`` se puede especificar un numid con metodo HTTP **GET** , y obtener la APIKEY de la campaña si es que tiene una asignada y es tipo api. A su vez , se puede setear una apikey con el metodo **POST** y el argumento "apikey". De esta manera, se podra utilizar en SMTP-API un usuario p.ej. dmdsid-12345 y clave el valor de apikey. Listar campañas --------------- Con la misma estructura, como listar los contactos inválido o listar las variables globales, podemos listar todas las campañas existentes. Para esto se utiliza el método get. .. code-block:: bash curl -X GET "https://api-dmds-host/v1/campania/" -H "accept: application/json" -H 'Authorization: xxxxxxxx' Tambien se puede filtrar para que liste los campañas tipo ``api``, ``normal`` o ``bulk`` .. code-block:: bash curl -X GET "https://api-dmds-host/v1/campania/" -H "accept: application/json" -H 'Authorization: xxxxxxxx' -d '{"tipo":"api"}' Otro filtro que se puede aplicar, es el de listar unicamente una campaña por su numid, cuando se quiere ver una en particular: .. code-block:: bash curl -X GET "https://api-dmds-host/v1/campania/" -H "accept: application/json" -H 'Authorization: xxxxxxxx' -d '{"tipo":"api", "numid":1234}' .. warning:: Con esta llamada no se listan las APIKEYs de campaña , para eso se utiliza el metodo ``campania_apikey`` Crear un grupo o base --------------------- Como hemos visto anteriormente, cuando creamos o modificamos un contactos podemos asignarle un grupo (tambien conocido como **base**). Para poder asignar un grupo, hay que ver si este grupo existe. Si no existe, podemos crearlo de la siguiente manera. .. code-block:: bash curl -X POST "https://api-dmds-host/v1/grupo/" -H accept: application/json" -H 'Authorization: xxxxxxxx' -H "Content-Type: application/json" -d '{"nombre": "xxxxx"}' o tambien .. code-block:: bash curl -X POST "https://api-dmds-host/v1/base/" -H accept: application/json" -H 'Authorization: xxxxxxxx' -H "Content-Type: application/json" -d '{"nombre": "xxxxx"}' Listar los filtros ------------------ En el sistema de la api, se pueden crear diferentes filtros, que ayudan a especificar los envíos. Para ver esta lista de filtros existentes, seguimos el código mencionado abajo. .. code-block:: bash curl -X GET "https://api-dmds-host/v1/filtros/" -H "accept: application/json" -H 'Authorization: xxxxxx' -H "Content-Type: application/json" Listar las variables globales y sus valores ------------------------------------------- En la api hay definidas una serie de variables globales. Para ver cuales son estas variables y sus valores podemos ver el siguiente código. .. code-block:: bash curl -X GET "https://api-dmds-host/v1/global/" -H "accept: application/json" -H 'Authorization: xxxxxxxx' Crear variables globales ------------------------ Siempre podemos crear las variables globales. Para la creación vamos a usar el método POST, donde le pasamos un variable, cual nos va a indicar el nombre de la variable global. .. code-block:: bash curl -X POST "https://api-dmds-host/v1/global/"\ -H "accept: application/json" \ -H 'Authorization: xxxxxxx' \ -H "Content-Type: application/json" \ -d '{"nombre": "newglobal","valor": "hola"}' Borrar variables globales ------------------------- De la misma manera que creamos unas variables globales, podemos eliminar estas. Solo que en este vamos a usar un método que se llama ``DELETE`` .. code-block:: bash curl -X DELETE "https://api-dmds-host/v1/global/" -H "accept: application/json" -H 'Authorization: xxxxxx' -H "Content-Type: application/json" -d '{ "nombre": "newglobal", "valor": ""}' Consulta Mail enviado --------------------- Para mails guardados con la opción ``archive``, se puede recuperar el texto del e-mail que se le ha enviado a un receptor, p.ej. .. code-block:: bash curl -X GET "https://api-dmds-dmdsid.planisys.net/v1/eeid_eml/3abc993d-8i88-45e8-a6c9-e879378abba5/usuario@dominio.com" -H "accept: application/json" -H "Authorization: xxxxx" -H "Content-Type: application/json" Como se ve, es un **GET** con dos parámetros: el UUID que representa al **Envío Efectivo** , y uno de los receptores. Si el receptor no llega a estar dentro de los receptores del mail (sea como To:, Cc: o Bcc:), esta llamada devuelve un error 400. Esto devuelve un json , en donde la clave "msg" tiene un valor que es el texto enviado. A dicho texto se le van agregando encabezados (*Headers*) a medida que va pasando por diferentes MTAs hasta que llega al destinatario, de manera que este texto es el texto original que sale desde el sistema hacia el primer MTA disponible (normalmente un MX disponible del dominio del receptor). Consulta Eventos ---------------- La respuesta al envío de mails puede contener un código 4xx , para el cual el usuario deberá tener analizar el error (p.ej. falta de un parámetro). En caso de funcionar correctamente un envío, la respuesta por lo general es un JSON con estos 3 pares: .. code-block:: json {"status":"ok", "sent":4, "eeid":"3abc993d-8i88-45e8-a6c9-e879378abba5"} El **uuid** que se devuelve como eeid (*envio_efectivo_id*) puede ser consultado posteriormente con un GET. El numero que sigue a *sent* es la cantidad de mails enviados durante la llamada, p.ej. un destinatario con 3 copias. .. warning:: Importante: si se quiere agrupar envíos subsiguientes en un mismo lote, se puede agregar la opción **reuse_eeid: True** , y se deberá agregar **eeid: ....** de manera de poder reusar un eeid anterior y agrupar envíos en un mismo lote o batch. .. code-block:: bash curl -X GET "https://api-dmds-dmdsid.planisys.net/v1/eeid_info/3abc993d-8i88-45e8-a6c9-e879378abba5" -H "accept: application/json" -H "Authorization: xxxxx" -H "Content-Type: application/json" Y la respuesta es un JSON con los eventos p.ej. de envio .. code-block:: json { "status": "ok", "envio_efectivo": { "envio_id": "36e7725c-041c-48b8-2f25-55890898004b", "timestamp": "2020-10-15T07:40:36", "estado": "enviado", "modificado": "2020-10-15T07:40:36", "campana_id": "f25e4695-3aa4-3bd0-072f-5999d9d9d9d3", "cant_particiones": null, "particiones_tomadas": null, "particiones_finalizadas": null, "salidas_con_error": null, "creador_id": "", "contactos": [ { "email": "fdkslafjkdsjafdjsakjfdsa@planisys.com", "eventos": [ { "eventos": "envio", "timestamp": "2020-10-15T07:40:37" } ] } ] } } Pueden figurar otros eventos como **rebote-soft** , **rebote-hard**, **click** o **view** .. warning:: A partir de v1.4, si el envío efectivo fue efectuado con **archive**:**true** , el JSON devuelve una sección llamada ``archive`` con la información de la traza del envío efectivo realizado. Uso de Reply-To, Cc y Bcc ------------------------- En las llamadas send_one_inline y send_one_uri , se pueden agregar dentro del JSON principal: Reply-To: .. code-block:: json {"reply-to": "usuario@dominio.com"} .. note:: El reply-to es un único item, y no se utiliza un nombre que oculte la dirección de mail por razones de seguridad y transparencia Cc: .. code-block:: json { "copia":[{ "cc_email":"usuario1@gmail.com", "cc_nombre":"Usuario1", "cc_apellido": "Apellido1"}] } .. note:: en el caso copia, va una lista entre [] de posible destinatarios de copia. Solo el cc_email es mandatorio. En caso de querer mandar copia oculta , se debe agregar: .. code-block:: json { "copia_oculta": [ { "bcc_email":"usuario5@gmail.com"}, {"bcc_email:"usuario7@outlook.com"} ] } Mensajes de respuesta JSON -------------------------- Si bien a nivel de CURL no se ve el código de respuesta, en los lenguajes de programación cuando se quiere chequear la respuesta, se deberían chequear * HTTP Code 200 - OK * HTTP Code 403 - Forbiden (usualmente APIKEY equivocada) * HTTP Code 4xx - Errores de datos, tales como falta de algún parámetro en el JSON de entrada, como direcciones incorrectas Se debe tener en cuenta que, en las llamadas send_one_inline y send_one_uri , así como en la introducción de un nuevo contacto, se hace un chequeo de la validez de la dirección de mail. Ejemplos: En este caso se chequea la validez de la sintaxis de un dominio de Internet .. code-block:: bash curl -X POST 'https://api-dmds-dmdsid.planisys.net/v1/contacto/' --header 'accept: application/json' --header 'Authorization: 11111111111113243433' --header 'Content-Type: application/json' --data '{"email": "ifdjsahfjdsaf@gmail"}' Devuelve .. code-block:: json {"status":"err","on":"invalid email The domain name gmail is not valid. It should have a period."} En este caso se chequea que haya una sola @ en cada direccion de mail .. code-block:: bash curl -X POST 'https://api-dmds-dmdsid.planisys.net/v1/contacto/' --header 'accept: application/json' --header 'Authorization: 11111111111113243433' --header 'Content-Type: application/json' --data '{"email": "@-@gmail"}' Devuelve .. code-block:: json {"status":"err","on":"invalid email The email address is not valid. It must have exactly one @-sign."} Este es un caso de caracteres internacionales no permitidos en direcciones de mail .. code-block:: bash curl -X POST 'https://api-dmds-dmdsid.planisys.net/v1/contacto/' --header 'accept: application/json' --header 'Authorization: 11111111111113243433' --header 'Content-Type: application/json' --data '{"email": "josépérez@gmail.com"}' Devuelve .. code-block:: json {"status":"err","on":"invalid email Internationalized characters before the @-sign are not supported."} Este es un caso de un dominio inexistente .. code-block:: bash curl -X POST 'https://api-dmds-dmdsid.planisys.net/v1/contacto/' --header 'accept: application/json' --header 'Authorization: 11111111111113243433' --header 'Content-Type: application/json' --data '{"email": "juanperez@gmail.com", "remitente":"jose@escuelaxyz.com", "remitente_nombre":"PLANICóRP"}' Devuelve .. code-block:: json {"status":"err","on":"remitente invalido The domain name escuelaxyz.com does not exist."} En este caso, el dominio remitente no esta declarado en la web del DMDS, es decir no es un dominio permitido para este DMDS en particular: .. code-block:: bash curl -X POST 'https://api-dmds-dmdsid.planisys.net/v1/contacto/' --header 'accept: application/json' --header 'Authorization: 11111111111113243433' --header 'Content-Type: application/json' --data '{"email": "juanperez@gmail.com", "remitente":"jose@gmail.com", "remitente_nombre":"PLANICóRP"}' Devuelve .. code-block:: json {"status":"err","on":"dominio remitente no permitido"} Uso del Remitente y el Return-Path ---------------------------------- En el DMDS web se listan los dominios permitidos para ser usados como remitentes. En el ejemplo anterior se vio que la API REST v1 rechaza el remitente como no permitido porque el dominio a la derecha de la @ no figura en su lista. Lo que debe ser tenido en cuenta, es que en el DMDS Web, por cada dominio permitido, se lista un return-path apropiado para lectura de rebotes. P.ej. si el dominio remitente es dom1.com, probablemente tendremos *dmds-dom1@nl.dom1.com* como dirección de **Return-Path** diferente del encabezado **From:** que sería p.ej. *usuario@dom1.com*. Estos datos se dan de alta en el aprovisionamiento del DMDS, y se pueden cambiar en la medida que se quiten y agreguen dominios. El objetivo del Return-Path siendo un subdominio del dominio principal, es via el registro DMARC tener un Return-Path válido y que sirva para dirigir rebotes a una casilla que el DMDS pueda procesar de manera automática. Envio de Adjuntos en línea -------------------------- A cualquiera de las llamadas send_one_inline o send_many_inline, se le pueden agregar adjuntos. Aqui mostramos un ejemplo de json de archivos que se envian en linea codificados en base64, via **send_one_inline**: Lo que se envía como adjunto es una **lista** de jsons, en donde cada json tiene dos partes: - un nombre - una lista de strings que, concatenadas, constituyen la codificación base64 del archivo .. code-block:: json { "campana_id":27, "email":"true", "contacto": { "email":"juanlopez@planisys.com", "nombre":"Juan", "apellido":"López" }, "asunto":"Envio de Adjuntos via API DMDS Planisys", "remitente":"contacto@planisys.com", "remitente_nombre":"Servicio Envio Archivos", "html": "Page Title

Heading

paragraph.

", "adjuntos": [ { "filename": "docejemplo.docx", "content": [ "UEsDBBQABgAIAAAAIQDfpNJsWgEAACAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0", "lMtuwjAQRfeV+g+Rt1Vi6KKqKgKLPpYtUukHGHsCVv2Sx7z+vhMCUVUBkQpsIiUz994zVsaD0dqa", "bAkRtXcl6xc9loGTXmk3K9nX5C1/ZBkm4ZQw3kHJNoBsNLy9GUw2ATAjtcOSzVMKT5yjnIMVWPgA", "jiqVj1Ykeo0zHoT8FjPg973eA5feJXApT7UHGw5eoBILk7LXNX1uSCIYZNlz01hnlUyEYLQUiep8", "6dSflHyXUJBy24NzHfCOGhg/mFBXjgfsdB90NFEryMYipndhqYuvfFRcebmwpCxO2xzg9FWlJbT6", "2i1ELwGRztyaoq1Yod2e/ygHpo0BvDxF49sdDymR4BoAO+dOhBVMP69G8cu8E6Si3ImYGrg8Rmvd", "CZFoA6F59s/m2NqciqTOcfQBaaPjP8ber2ytzmngADHp039dm0jWZ88H9W2gQB3I5tv7bfgDAAD/", "/wMAUEsDBBQABgAIAAAAIQAekRq37wAAAE4CAAALAAgCX3JlbHMvLnJlbHMgogQCKKAAAgAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArJLBasMw", "DEDvg/2D0b1R2sEYo04vY9DbGNkHCFtJTBPb2GrX/v082NgCXelhR8vS05PQenOcRnXglF3wGpZV", "DYq9Cdb5XsNb+7x4AJWFvKUxeNZw4gyb5vZm/cojSSnKg4tZFYrPGgaR+IiYzcAT5SpE9uWnC2ki", "Kc/UYySzo55xVdf3mH4zoJkx1dZqSFt7B6o9Rb6GHbrOGX4KZj+xlzMtkI/C3rJdxFTqk7gyjWop", "9SwabDAvJZyRYqwKGvC80ep6o7+nxYmFLAmhCYkv+3xmXBJa/ueK5hk/Nu8hWbRf4W8bnF1B8wEA", "AP//AwBQSwMEFAAGAAgAAAAhANZks1H0AAAAMQMAABwACAF3b3JkL19yZWxzL2RvY3VtZW50Lnht", "bC5yZWxzIKIEASigAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "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", "BgAAAAALAAsAwQIAAOIsAAAAAA==" ] }, { "filename": "docejemplo2.pdf", "content": [ "JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9G", "bGF0ZURlY29kZSA+PgpzdHJlYW0KeAGNj7kOwjAQRHt/xXBvOBw7dkzSgmjoIm1HqCJRIKWI8v8S", "PrBokYudHe8+eyZ0mFBeZ41hhopnHrylZGVTH0QrjUPdWulaDCMujDrN+mK0k0opC9c4wSNK5goa", "/MIDtChw8ijQMgoDWhWerUHraFjQJhh+Yhuq73fpQlD/W+qLaPq1PLXPvGxkzCFzj1HU4WnxBN9x", "4xj2/2Rno2VTqXNIhm8yEZNR+BC/E7L7AMbOPkUKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjE3", "OQplbmRvYmoKMiAwIG9iago8PCAvVHlwZSAvUGFnZSAvUGFyZW50IDMgMCBSIC9SZXNvdXJjZXMg", "NiAwIFIgL0NvbnRlbnRzIDQgMCBSIC9NZWRpYUJveCBbMCAwIDU5NS4yOSA4NDEuODldCj4+CmVu", "ZG9iago2IDAgb2JqCjw8IC9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8IC9D", "czEgNyAwIFIgPj4gL0ZvbnQgPDwgL1RUMiA5IDAgUgo+PiA+PgplbmRvYmoKMTAgMCBvYmoKPDwg", "L0xlbmd0aCAxMSAwIFIgL04gMyAvQWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVE", "ZWNvZGUgPj4Kc3RyZWFtCngBnZZ3VFPZFofPvTe90BIiICX0GnoJINI7SBUEUYlJgFAChoQmdkQF", "RhQRKVZkVMABR4ciY0UUC4OCYtcJ8hBQxsFRREXl3YxrCe+tNfPemv3HWd/Z57fX2Wfvfde6AFD8", "ggTCdFgBgDShWBTu68FcEhPLxPcCGBABDlgBwOFmZgRH+EQC1Py9PZmZqEjGs/buLoBku9ssv1Am", "c9b/f5EiN0MkBgAKRdU2PH4mF+UClFOzxRky/wTK9JUpMoYxMhahCaKsIuPEr2z2p+Yru8mYlybk", "oRpZzhm8NJ6Mu1DemiXho4wEoVyYJeBno3wHZb1USZoA5fco09P4nEwAMBSZX8znJqFsiTJFFBnu", "ifICAAiUxDm8cg6L+TlongB4pmfkigSJSWKmEdeYaeXoyGb68bNT+WIxK5TDTeGIeEzP9LQMjjAX", "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", "7L5WYVtxYA9pj2SPtDKosr1Kr2pH1afqpOqBGo+a5r3qe7ftndrH29e/321/0wGNA8UHPh4UHLx/", "yPdQa61BbcVh3OGsw8/rouq6v2d/X39E7Ujxkc9HhUelx8KPddU71Nc3qDeUNsKNksax43HHb/3g", "9UN7E6vpUDOjufgEOCE58eLH+B/vngw82XmKfarpJ/2f9rbQWopaodbc1om2pDZpe0x73+mA050d", "zh0tP5v/fPSM9pmas8pnS8+RzhWcmzmfd37yQsaF8YuJF4c6V3Q+urTk0p2usK7ey4GXr17xuXKp", "2737/FWXq2euOV07fZ19ve2G/Y3WHruell/sfmnpte9tvelws/2W462OvgV95/pd+y/e9rp95Y7/", "nRsDiwb67i6+e/9e3D3pfd790QepD14/zHo4/Wj9Y+zjoicKTyqeqj+t/dX412apvfTsoNdgz7OI", "Z4+GuEMv/5X5r0/DBc+pzytGtEbqR61Hz4z5jN16sfTF8MuMl9Pjhb8p/rb3ldGrn353+71nYsnE", "8GvR65k/St6ovjn61vZt52To5NN3ae+mp4req74/9oH9oftj9MeR6exP+E+Vn40/d3wJ/PJ4Jm1m", "5t/3hPP7CmVuZHN0cmVhbQplbmRvYmoKMTEgMCBvYmoKMjYxMgplbmRvYmoKNyAwIG9iagpbIC9J", "Q0NCYXNlZCAxMCAwIFIgXQplbmRvYmoKMyAwIG9iago8PCAvVHlwZSAvUGFnZXMgL01lZGlhQm94", "IFswIDAgNTk1LjI5IDg0MS44OV0gL0NvdW50IDEgL0tpZHMgWyAyIDAgUiBdID4+CmVuZG9iagox", "MiAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMyAwIFIgPj4KZW5kb2JqCjkgMCBvYmoK", "PDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9udCAvQlRYV0pDK0NhbGli", "cmkgL0ZvbnREZXNjcmlwdG9yCjEzIDAgUiAvVG9Vbmljb2RlIDE0IDAgUiAvRmlyc3RDaGFyIDMz", "IC9MYXN0Q2hhciA0NCAvV2lkdGhzIFsgNjE1IDUyNyA0MjMKNTI1IDc5OSA0OTggNTI1IDMzNSAy", "MjYgMjM5IDUyNSAyMjkgXSA+PgplbmRvYmoKMTQgMCBvYmoKPDwgL0xlbmd0aCAxNSAwIFIgL0Zp", "bHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBXZHLasMwEEX3+got00Ww7LxaMIaSEvCiD+r2", "A2RpHAS1LGRl4b/vHTVNoYuzOLoz9mhUHNun1rski7c4mY6SHJy3kebpEg3Jns7Oi7KS1pl0tXxm", "Rh1EgeZumRONrR8mWddCyuIdLXOKi1w92qmnOz57jZai82e5+jx2+aS7hPBFI/kklWgaaWnA5551", "eNEjySK3rluL3KVlja6/io8lkMRE6Ch/RjKTpTloQ1H7M4laqaY+nRpB3v6LcJM8fj9cS6uyqRml", "tttG1FUFBUrtB9YNFEA3rFsoUOqwY91BAVLLuocCaE4PUAAlTu+hAL35Rw9QoFSlONVQgGLN2kMB", "inNqoACpybf6HZ8vyA9xW5y5xIid5dfK6+Q1OU+3Bw1T4LVkvgHTQZP3CmVuZHN0cmVhbQplbmRv", "YmoKMTUgMCBvYmoKMjk5CmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3Ig", "L0ZvbnROYW1lIC9CVFhXSkMrQ2FsaWJyaSAvRmxhZ3MgNCAvRm9udEJCb3ggWy01MDMgLTMxMyAx", "MjQwIDEwMjZdCi9JdGFsaWNBbmdsZSAwIC9Bc2NlbnQgOTUyIC9EZXNjZW50IC0yNjkgL0NhcEhl", "aWdodCA2MzIgL1N0ZW1WIDAgL1hIZWlnaHQKNDY0IC9BdmdXaWR0aCA1MjEgL01heFdpZHRoIDEz", "MjggL0ZvbnRGaWxlMiAxNiAwIFIgPj4KZW5kb2JqCjE2IDAgb2JqCjw8IC9MZW5ndGggMTcgMCBS", "IC9MZW5ndGgxIDE4NzI4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AdV7eVhTZ/r2", "e04SEgiBhB0iJBgBNSCuCGohssmiAko0oCirosUNxF1LtSutbae7Xe3eKV0OUSt2b6fTbbqvM92m", "nelMV7tN2+m0Vb77PU8eqp1f5/vju77rml/Ife77ed7lvO/zbocENnb3dgir6BMGMbFtTct6ob8K", "mkET2zZtdOumyCwVwvTAivUr15CdDbJ5V3ZtXUF2wZ1CRC/t7GhpJ1v8BM7rhINsZSp4TOeajVvI", "LpAVTO1a1xZKL7gI9qg1LVtC9xdvw3avbVnTQfkrLdJe390RSlcCqO7TWZQohkMvaSohn07SsBln", "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", "1lIXBoKG/ftTixuqtT6pfT5dD0stkKXBu6ynt8cb8J0iHO85vnQY4h+2v2BXo6OV6OjhaNUXjcZH", "R7miVHkZjjL4oiZNL4+2uWyqvAzbDAk+GzwylFmRtfXl0VaXVfUXWWusqs9aVFLus+ZMLP+3fh6Q", "/aQ7ezcu6/FCbvTqb1gNSq808UIK3j0bYcsfEGwhU379RdmQb3kPXno1VP2vF/lfkKL8L2jjf3kT", "BwWWSGD2sHoGvsvcA+wGTgf6gNOAXcBOYAewHdgGbAW2AJuBTUAvsBHoATYA64F1wFpgDdAFnAqs", "BlYBncBKYAXQAbQDbUAr0AI0A8uBZUATsBRYAjQCDUAAWAwsAvxAPbAQWADUAbVADTAfmAfMBaqB", "KqASqADmAOVAGVAKlADFwGzABxQBhcApwCxgJjADKADygelAHjANmApMASYDk4CJQC4wAcgBsgEv", "MB4YB4wFsoBMIAMYA3iA0UA64AZcQBqQCowCnEAKkAwkAYlAAhAPxAGxQAzgAOxANBAF2IBIwApE", "AOGABTADYYAJMM4extUAqIACCNGuwKccB44BPwE/Aj8A/wK+B/4JfAd8C3wD/AP4GvgK+BL4Avgc", "OAp8BnwKfAJ8DHwEfAj8Hfgb8AHwV+AvwPvAe8CfgXeBd4C3gbeAN4E/AX8E3gBeB14DXgVeAV4G", "XgJeBF4AngeeA54F/gA8AzwNPAU8CTwB/B54HPgd8BjwKPAI8DDwEPAg8ABwP3AfcAQYAg4D9wKH", "gIPAASAIDAIacA9wN3AXcCcwANwB/Ba4HbgNuBW4BbgZuAm4EbgB2A9cD1wHXAtcA1wNXAXsA64E", "rgAuBy4DLgUuAS4GfgNcBFwIXADsBc4HzgP6gXOBc4CzgbOAM0X77D7lDKg9wG7gdKAPOA3YBewE", "dgDbgW3AVmALsBnYBPQCG4EeoBvYAKwH1gFrgTVAF3AqsBpYBXQCK4EVQAfQDrQBrUAL0AwsB5YB", "TcBSYAnQCDQAAWAxsAjwA/XAQmABUAvUAPOBuUA1UAVUAhXAHKAcKANKgRLR/l++Tf+3N6/hv72B", "/+XtE/KxbOTBTDY2afky/LmT+Tohjl9CfxwVutaK1aJH9OHnLLFXXCIeFm+JVrEHap/YL24VvxWa", "eFQ8Ld44qdT/o3F8q2mNiDQcFmEiVojhH4aPHr8VGDJFneC5BFas0f2zZ9g+/PkvfJ8fv2TYfnwo", "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", "T1wwMDBTXDAwMCBcMDAwVlwwMDBlXDAwMHJcMDAwc1wwMDBpXDAwMPNcMDAwblwwMDAgXDAwMDFc", "MDAwMFwwMDAuXDAwMDFcMDAwNVwwMDAuXDAwMDZcMDAwIFwwMDBcKFwwMDBDXDAwMG9cMDAwbVww", "MDBwXDAwMGlcMDAwbFwwMDBhXDAwMGNcMDAwaVwwMDDzXDAwMG5cMDAwIFwwMDAxXDAwMDlcMDAw", "R1wwMDAyXDAwMDBcMDAwMlwwMDAxXDAwMFwpXDAwMCBcMDAwUVwwMDB1XDAwMGFcMDAwclwwMDB0", "XDAwMHpcMDAwIFwwMDBQXDAwMERcMDAwRlwwMDBDXDAwMG9cMDAwblwwMDB0XDAwMGVcMDAweFww", "MDB0KQovQ3JlYXRvciAoV29yZCkgL0NyZWF0aW9uRGF0ZSAoRDoyMDIwMDgyODE4NTkwNVowMCcw", "MCcpIC9Nb2REYXRlIChEOjIwMjAwODI4MTg1OTA1WjAwJzAwJykKPj4KZW5kb2JqCnhyZWYKMCAx", "OAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMTM1OTUgMDAwMDAgbiAKMDAwMDAwMDI5NCAwMDAw", "MCBuIAowMDAwMDAzMjczIDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwMDI3NSAw", "MDAwMCBuIAowMDAwMDAwNDA0IDAwMDAwIG4gCjAwMDAwMDMyMzcgMDAwMDAgbiAKMDAwMDAwMDAw", "MCAwMDAwMCBuIAowMDAwMDAzNDEyIDAwMDAwIG4gCjAwMDAwMDA1MDEgMDAwMDAgbiAKMDAwMDAw", "MzIxNiAwMDAwMCBuIAowMDAwMDAzMzYyIDAwMDAwIG4gCjAwMDAwMDQwMTMgMDAwMDAgbiAKMDAw", "MDAwMzYxOCAwMDAwMCBuIAowMDAwMDAzOTkzIDAwMDAwIG4gCjAwMDAwMDQyNDkgMDAwMDAgbiAK", "MDAwMDAxMzU3NCAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDE4IC9Sb290IDEyIDAgUiAvSW5m", "byAxIDAgUiAvSUQgWyA8NzQ5NjZmZTA0ZDA3YWZhZDA3NmQ4MDRiODY1OTI3OGM+Cjw3NDk2NmZl", "MDRkMDdhZmFkMDc2ZDgwNGI4NjU5Mjc4Yz4gXSA+PgpzdGFydHhyZWYKMTQwNzEKJSVFT0YK" ] } ] } .. |date| date:: Actualizado en |date|