amap-comunicaciones

AMAPComunicaciones-1.3.0 2018/04/08

Nueva funcionalidad: permite insertar archivos en el cuerpo de los email que se encién en formato html

AMAPComunicaciones-1.2.1 2018/03/23

Limpiezas de librerias.

AMAPComunicaciones-1.2.0 2018/03/23

Se añade el cliente para envio de sms.
Se permite incluir adjuntos a partir de un inputstream (no solo de un fichero).

AMAPComunicaciones-1.1.0 2016/09/20

Añadido parametro a los adjuntos para evitar problemas con el encoding en los ficheros de texto

AMAPComunicaciones-1.0.4 2016/06/29

Correción de bug que impedía añadir como adjunto ficheros de texto

AMAPComunicaciones-1.0.3 2016/01/27

Aumentada versión de la dependencia spring-social-twitter para poder usar la api 1.1v de twitter

AMAPComunicaciones-1.0.2 2015/02/17

Nueva versión del comenponente amap-comunicaciones. En este caso, se añade un tratamiento de reintententos, añadido al envío de Emails, en el caso en el que su envío provoque un error.

AMAPComunicaciones-1.0.1 2013/04/11

Soporte de JNDI para la configuración de envíos de correos

AMAPComunicaciones-1.0.0 2013/03/07

 Soporte de html o texto plano en el cuerpo de los correos
 Soporte de usuario y contraseña para el envío de correos
 Soporte de uso del comando STARTTLS en el servidor de correos

AMAPComunicaciones-0.0.2 2012/11/19

 Integración con Spring Social

AMAPComunicaciones-0.0.1 2012/10/10

 Primera versión del componente

<dependency>
<groupId>es.gobcantabria.amap.utilidades</groupId>
<artifactId>amap-comunicaciones</artifactId>
<version>1.3.0</version>
</dependency>

Es necesario de disponer de los siguientes datos:

EMAIL

  • Servidor: nombre o ip del servidor SMPT para el envío de los emails
  • Puerto: número del puerto en el que el servidor está a la escucha de conexiones (habitualmente el 25)

o bien 

  • JNDI: identificador del jndi configurado en el servidor de aplicaciones para acceder al servidor de correo (configuración gestionada por el servidor)

TWITTER

  • consumerKey : identificador de la aplicación de twitter que realizará el envío de las peticiones
  • consumerSecret : identificador secreto de la aplicación de twitter que realizará el envío de las peticiones
  • accessToken: identificador del token de la aplicación de twitter que realizará el envío de las peticiones
  • accessTokenSecret: identificador secreto del token de la aplicación de twitter que realizará el envío de las peticiones

Para obtener estos datos se debe acceder al sitio de desarrollo de twitter https://dev.twitter.com/ y crear una aplicación  nueva (opción "crear una app" y seguir los pasos hasta el final).

A continuación deberemos cambiar el modo de acceso de la aplicación para que pase de "read only" (valor por defecto) a "lectura, escritura y acceso a mensajes directos" accediendo a "settings", cambiado el valor de acceso y guardando los cambios.

Una vez establecidos los permisos podremos crear el token de acceso a la aplicación pulsando sobre el botón de "creación de token".

En este punto ya podremos ver en la página todos los datos necesarios para la utilización del token.

SMS

  • Solicitar un usuario y contraseña para el uso del servicio a MENTES.
  • Solicitar un numero de teléfono para realizar los envios

NOTA: Es importante verificar que tanto la aplicación como el token tienen permisos para el envío de mensajes directos, ya que de lo contrario las peticiones se rechazarán.

Sin recursos disponibles.

Configuración

Para la utilización del componente amap-comunicaciones basta con sus dependencias mediante maven.

Cada uno de los servicios soportados (email o twitter) tiene un objeto propio de configuración.

Configuración Email

Para instaciar un servicio de email se utiliza el objeto EmailConfiguracion.


EmailConfiguracion config = new EmailConfiguracion();  
config.setServidor(servidor);
config.setPuerto(puerto);

// configuración opcional (depende del servidor de correo utilizado)
config.setStarttls(starttls);
config.setAutenticar(true);
config.setUsuario(user);
config.setPassword(password);

alternativamente, si se dispone un servidor de correo configurado en el servidor de aplicaciones mediente JNDI se puede crear la configuración de esta manera


EmailConfiguracionJndi config = new EmailConfiguracionJndi();  
config.setJndi(nombreJndi);

Si Se utiliza el objeto EmailConfiguracion que require que se establezcan la propiedad "servidor" (ip o nombre de máquina) SMTP y el número de puerto, estas dos propiedades están externalizadas.

Es configurable si se necesita usuario y contraseña para el envío de correos, para lo cual es necesario indicar que se usa autenticación y el usuario y contraseña del servidor, esta configuración es opcional, ya que por defecto se considera que no es necesaria autenticación para enviar correos.

También es configurable si el servidor utiliza el comando STARTTLS, por defecto se considera que el servidor no lo soporta. 

Las propiedades definidas por sistemas aplicables al servicio son las siguientes:

KeyDescripciónEjemplo
sistemas.global.smtp.hostIP del servidor de SMTPsmtp.intranet.xxxxxxx.es
sistemas.global.smtp.portPuerto del servidor SMTP25

Si se utiliza el componente solo el envíos, la nomenclatura del remitente será: apl.<APP_ID>@cantabria.es 

Configuración Twitter


Se utiliza el objeto EmailTwitter que requiere que se establezcan las propiedades "consumerKey", "consumerSecret", "accessToken" y "accessTokenSecret" (ver apartado de requisitos para más infomación)


TwitterConfiguracion config = new TwitterConfiguracion();
config.setConsumerKey(consumerKey);
config.setConsumerSecret(consumerSecret);
config.setAccessToken(accessToken);
config.setAccessTokenSecret(accessTokenSecret);

Configuración servicio Envio SMS

Para la utilización el envio por sms del componente *AMAP-COMUNICACIONES* hay que crear un servicio del siguiente modo:

ComunicacionesSMSServiceInterface servicio = ComunicacionesSMSServiceImpl.getServicio(url, APLICACION);

La configuración del componente se realiza a la hora de obtener la instancia del servicio. Los parámetros soportados son:

  • URL:  URL donde está desplegado el servicio (instancia de java.net.URL).
  • APLICACION:  Aplicación que usa el componente.

El servicio concreto a usar se definirá a partir de un fichero de properties junto con el resto de los parámetros:

KeyDescripciónEjemplo
sistemas.app.amap.comunicaciones.sms.usuarioUsuario usuario1
sistemas.app.amap.comunicaciones.sms.passwordPassword password1 
sistemas.app.amap.comunicaciones.sms.origenOrigen 666555444

Para el uso del servicio MOCK en el entorno de desarrollo será necesario definir la siguiente propiedad:

KeyDescripciónValor
ruta.data.telefono.origen.ok Número de teléfono definido para realizar las peticiones  123456789

Una vez obtenido el servicio podemos invocar cualquiera de sus métodos.

Los snippets aquí mostrados son meramente ilustrativos. En producción los valores de las variables han de ser externalizados tal y como se especifica en el documento Definición de acceso a propiedades de sistema

N/A

Nombreamap-comunicaciones
Identificadoramap-comunicaciones
Grupoes.gobcantabria.amap.utilidades
Versión1.3.0
Licencia
DesarrolladorDGDIT
Descripción

Gestión de notificaciones de AMAP

Documentaciónamap-comunicaciones (JavaDoc)
Binarioamap-comunicaciones (Jar)
Dependenciasamap-comunicaciones (Librerías)

Sin particularidades. Seguir las recomendaciones del fabricante.

Formas de uso

Existen dos formas de utilización del componente:

Un servicio para cada tipo de envío (email o twitter)

Un servicio unificado para envío de mensajes de ambos tipos.

Servicio individual

Para obtener el servicio accederemos al método estático de factoría "ComunicacionesService.getServicio" que en función del tipo de configuración y de sus valores creará un servicio del tipo indicado.

Los valores de los objetos configuración se pueden consultar en el apartado "Configuración".


 miservicio = ComunicacionesService.getServicio(config);

Una vez creado el servicio podremos invocar al método "enviarMensaje" con el mensaje a enviar (o al "enviarMensajes" con una lista de los mismos).


// definir el mensaje
EmailMensaje mensaje = new EmailMensaje();
mensaje.setRemitente(remitente);
mensaje.setDestinatarios(destinatarios);
mensaje.setTitulo(titulo);
mensaje.setCuerpo(cuerpo);

// realizar el envio
miservicioemail.enviarMensaje(mensaje);

NOTA: Existe un tratamiento adicional para gestionar el email en caso de que produzca un error en su envío. Si así fuera,
se enviará un mensaje al remitente del email, informando del error. A continuación, se dividirá el email original
en tantos emails como posibles destinatarios se hayan incluido en él, respectando el tipo de envío original. Es decir,
si el hipotético destinatario se correspondía con la sección "TO", "CC" o "CCO", se enviará el email individualizado
a ese destinatario, pero respetando la sección original. A partir de ese momento, se gestionarán los mensajes
de manera individualizada, de tal manera, que los mensajes que provoquen algún error se añadirán a una lista de mensajes
erróneos que se gestionará con reintentos de envío, que si una vez finalizados dichos reintentos de forma errónea, se enviará nuevamente otro email
al remitente, informando del destinatario para el que no se ha podido entregar el email junto con el cuerpo del mensaje original.

opcionalmente se puede indicar que el formato del cuerpo del mensaje es HTML, por defecto es texto plano.


mensaje.setFormato(EmailMensajeCuerpoFormato.EMAIL_FOMATO_HTML);

si el formato del cuerpo del mensaje es HTML, se podrán añadir archivos embebidos en el texto.


// Creación del adjunto embebido
Adjunto adjuntoEmbebido = new Adjunto(true);
adjuntoEmbebido.setNombre("adjuntoEmbebido.png"); 
URL url = this.getClass().getClassLoader().getResource("logoGob.png");
URI uri = url.toURI();
File file=new File(uri);
adjuntoEmbebido.setContenido(FileUtils.readFileToByteArray(file));  
adjuntos.add(adjuntoEmbebido);
  
// Creación del adjunto embebido
Adjunto adjuntoEmbebido2 = new Adjunto(true);
adjuntoEmbebido2.setNombre("adjuntoEmbebido.png");
URL url2 = new URL("https://www.comcantabria.es/wp-content/uploads/2018/10/LOGO-gobierno-de-cantabria.4W.jpg"); 
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(url2.openStream(), baos);
adjuntoEmbebido2.setContenido(baos.toByteArray());  
adjuntos.add(adjuntoEmbebido2);
  
//Add adjuntos to mensaje
mensaje.setAdjuntos(adjuntos);
  
mensaje.setFormato(EmailMensajeCuerpoFormato.EMAIL_FOMATO_TEXT);
     
mensaje.setCuerpo("<html>"
         + " <body>"
         + "  <img src=\"cid:"
         + adjuntoEmbebido2.getCid()
         + "\" height=\"60\" width=\"300\" />"
         + "  <p>Un ejemplo de email con imagenes insertadas</p>"
         + "  <img src=\"cid:"
         + adjuntoEmbebido.getCid()
         + "\" height=\"60\" width=\"100\" />"
         + " </body>"
         + "</html>");  

también se puede utilizar el servicio de twitter para la notificación


// definir el mensaje
TwitterMensaje mensaje = new TwitterMensaje();
mensaje.setDestinatario(destino);
mensaje.setMensaje(texto);

// realizar el envio
miserviciotwitter.enviarMensaje(mensaje);

Servicio unificado

Este servicio permite enviar mensajes independientemente del tipo de mensaje que se trate.

Para poder utilizar el servicio se necesita invocar al constructor con la configuración de los servicios.

Una vez creado el servicio se podrá enviar una lista de mensajes mezclados (twitter y email) que serán procesados por su servicio correspondiente.


// crear el servicio
EmailConfiguracion emailConfig = newEmailConfiguracion();
TwitterConfiguracion twitterConfig = newTwitterConfiguracion();
ComunicacionesService comunicacionesService = new ComunicacionesService(emailConfig,twitterConfig);
  
// crear los mensajes
TwitterMensaje mensaje1 = newTwitterMensaje();
EmailMensaje mensaje2 = newEmailMesaje();

List<ComunicacionesMensajeInterface> mensajes = new ArrayList<ComunicacionesMensajeInterface>();
mensajes.add(mensaje1);
mensajes.add(mensaje2);
  
// realizar el envio
comunicacionesService.enviarMensajes(mensajes);  

Documentos adjuntos en E-mails

El componente amap-comunicaciones permite adjuntar documentos a los correos. Para utilizarlo tendremos que crear una instancia de la clase Adjunto, esta clase puede tener como propiedades el nombre, un array de bytes que seria el contenido del fichero y un parametro opcional referente al encoding.
Despues solo habria que adjuntar los ficheros en formar de List al mensaje.

      File file = new File(this.getClass().getClassLoader().getResource("test1.txt").getFile());
      InputStream inputStream = new FileInputStream(file);
      byte[] bytes = IOUtils.toByteArray(inputStream);

            // otra opción seria convertir una cadena de texto en el array de bytes
            // byte[] bytes = "cadena de prueba".getBytes("UTF-8");

      Adjunto adjuntoTxt = new Adjunto();
      adjuntoTxt.setNombre("ficheroPrueba.txt");
      adjuntoTxt.setContenido(bytes);
      adjuntoTxt.setCharset("UTF-8");
      
      ArrayList<Adjunto> lista = new ArrayList<Adjunto>();
      lista.add(adjuntoTxt);
      mensaje.setAdjuntos(lista);

Envio Mensaje via SMS


SMSConfiguracion config = new SMSConfiguracion();
  config.setUsuario("XXX");
  config.setPassword("XXX");
SMSMensaje mensaje = new SMSMensaje();
  mensaje.setTelefonoOrigen("123456789");
  mensaje.setTelefonoDestino("655444333");
  mensaje.setTexto("SMS de prueba de amap-comunicaciones-servidor");

ResponseSMS response =getComunicacionesSMS().envioSMS(APLICATION, config,mensaje);

Path: /envioSms
Parametros de Cabecera: Authorization :..
Accept: Si se quiere respuesta XML o json
Parametros de Cuerpo:
-smsConfiguracion
 - usuario
 - password
-smsMensaje
 - teléfono origen
 - teléfono destino/ telefonos destino
 - texto del mensaje
-auditoria
 - usuario
 - app

Request EnvioSms

NOTA para adjuntos de texto: Si no se fija el encoding se utilizará el definido por defecto para el servidor correspondiente (problemas con los caracteres especiales), solamente se puede fijar el encoding para los ficheros de tipo texto.

Tipo de Errores y Códigos

UNMARSHALL_ERROR:
  Código     -> 600
  Descipción -> Error en los datos de entrada/salida. Revisar que no falte ningun campo obligatorio o el xml de la peticion este mal formado. Compruebe el WSDL y los campos obligatorios.

PARAM_NOT_VALID:
  Código     -> 620
  Descipción -> El parametro es obligatorio
   
FORMAT_ERROR:
  Código     -> 630
  Descipción -> Error al formatear al petición
   
OPERATION_NOT_SUPPORTED:
  Código     -> 640
  Descipción -> Operacion no soportada
   
INTERNAL_SERVICE_ERROR:
  Código     -> 900
  Descipción -> Error interno del web Service
 
ERROR_SIZE
  Código     -> 920
  Descipción -> Tamaño del mensaje excedido, Maximo 160 caracteres  
 
REQUEST_ERROR:
  Código     -> 2000
  Descipción -> Error en la peticion del cliente  
 
TELEFONICA_ERROR:
  Código     -> 3000
  Descipción -> Error en el servidor de Telefónica  
 
TELEFONICA_SERVICIO_ERROR:
  Código     -> 4000
  Descipción -> Error en el servicio de Telefónica

Etiquetas: twitter email
Creado por Administrator el 2015/05/14 09:20
© 2014 GOBIERNO DE CANTABRIA - AVISO LEGAL Y PROTECCIÓN DE DATOS