Asesoría Sistema de Notificaciones

17 views
Skip to first unread message

Antony Petrocelli

unread,
Jun 16, 2016, 6:35:30 PM6/16/16
to python-v...@googlegroups.com
Hola compañeros,

Requiero de su conocimiento y experiencia para que me orienten en el diseño de un sistema de notificación, me encuentro desubicado, no hablo de código sino de cual es el mecanismo para generarlas, para encuestarlas, se que esto depende cada negocio, pero a la final el concepto general puede aplicarse a cualquier solución.

Imaginen que tengo un sistema de ventas con varios módulos y varios roles de usuario, el cual sirve la información a través de una api, la cual tendría un punto final para notificaciones (/api/notificaciones), por cada módulo debo generar notificaciones, a los clientes se le deben enviar notificaciones como recordatorios según sus planificaciones en calendario, o notificaciones porque debe pagar una factura, hasta notificaciones del cumpleaños, algunas notificaciones pueden aparecer en el panel de cada usuario otras por correo u otro medio.

Hasta ahora me imagino que debo tener un modelo de notificaciones de esta manera:

id, id_user, id_type, text, status, datetime

Cada usuario podrá habilitar sus notificaciones y si mostrarlas en el cliente, cada rol de usuario tendrá distintas notificaciones:

Bueno mas o menos así es el escenario, el cual me lleno de inquietudes sobre como genero las notificaciones y como las encuesto, hasta ahora tengo claro que todas las notificaciones entraran en una cola en una tabla, no serán notificaciones push en tiempo real.

Que debo estudiar, considerar para diseñar y desarrollar lo que requiero, si pueden colaborar con opiniones, links, libros, temas específicos, serán de mucha ayuda.

Espero hayan entendido, gracias de antemano.

--
Atte.
Antony Petrocelli

Activista del Software Libre

Juancarlo Añez

unread,
Jun 17, 2016, 11:50:15 AM6/17/16
to python-venezuela

2016-06-16 18:34 GMT-04:00 Antony Petrocelli <petro...@gmail.com>:
id, id_user, id_type, text, status, datetime

Creo que necesitas una tabla adicional:

id_user, id_notification, when_posted, when_seen, etc......

Que sea la cola de notificaciones a entregar a cada usuario, y el estatus de si fue vista, si expiró, etc.

En la tabla original que propusiste, id_user podría ser null si el despacho de notificaciones es por reglas de negocio, y debe llegar a varios usuarios.

La tabla para las colas puede tener todos los campos necesarios, para todos los casos de uso necesarios. Si no se requiere el histórico (probablemente sí se lo requiera), la cola podría ir a un storage key/value.

Saludos,




--
Juancarlo Añez
tel:+58(414)901-2021
skype:juancarloanez

The Sunno

unread,
Jun 17, 2016, 5:11:37 PM6/17/16
to Python Venezuela
Adicional a lo que te menciona Juancarlo, puedes crear una tabla extra estilo name/value para guardar datos extras que envíes y así flexibilizas un poco el modelo.

Yo hice algo similar para una api que estoy desarrollando en el trabajo la cual envía notificaciones a dispositivos, todo depende de lo que quieras hacer, pero te cuento como lo implementé:

Una tabla dispositivos (O clientes) asociada al usuario que recibe la notificación, en mi caso tenemos android, iOS o websockets,

Una tabla notificaciones asociada al dispositivo, esta contiene la acción realizada (por ejemplo, se actualizó/borró un registro), el tipo de objeto al que se le aplicó la acción y su id asociado.

Y la tabla extras, asociada a la notificación, ahí guardas cosas como la url del objeto afectado por ejemplo.

Antony Petrocelli

unread,
Jun 18, 2016, 2:16:54 AM6/18/16
to python-v...@googlegroups.com
Gracias por comentar, The sunno, el diseño hasta ahora tiende mas a tu ejemplo, la tabla adicional que propone Juancarlo, por ahora no es necesaria dada la simplicidad del requerimiento, pero no la descarto para el futuro. Mi solución quedó así para mongo:

Modelos:

UserConfNotification = new Schema({
notify_on_client:Boolean,
notify_by_email:Boolean,
notify_birthday:Boolean,
});

User = new Schema( {
    username : String,
    name : String,
    config:[UserConfNotification]
});

Notifications = new Schema ({
    message : String,
    date : { type : Date, default: Date.now() }
    read : { type: Boolean, default : false }
    urserId:{
type: Schema.Types.ObjectId,
ref: 'User'
}
});

Estas notificaciones no serán push, sino pull. Las notificaciones originadas por fechas, como un birthday, serán generadas por un cron a la base de datos, si disponen de algo mejor, espeor leer cometnarios. Consideran que debo crear un modelo con todos los tipos y distintos mensajes?




--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Juancarlo Añez

unread,
Jun 18, 2016, 2:16:01 PM6/18/16
to python-venezuela
DTSTTCPS

"Do The Simplest Thing That Could Possibly Work"

(y)

Antony Petrocelli

unread,
Jun 19, 2016, 1:23:09 PM6/19/16
to python-v...@googlegroups.com
Gracias Juancarlo, lo pondré en práctica, lo principal fué que pude salir del bloqueo mental que no me dejaba ver la solución.

Gracias.

Gregorio Bolivar

unread,
Jun 24, 2016, 3:41:51 PM6/24/16
to python-v...@googlegroups.com
Buenas tardes compañero Antony Petrocelli, revisando toda el tema te tengo una propuesta hermano disculpa la demora , pero actualmente hay tecnologías como forever 
que te permiten ejecutar tareas programadas pero sin necesidad de hacer cron esto trabaja con nodejs y de verdad que es muy comodo ejecutarlas no te satura el servidor y 
es mundial esas notificaciones, el forever puede ejecutar nodejs, php y otros
ING. Prog. WebMaster Gregorio Bolívar, de Caracas - Distrito Capital
- Telf.: +580412-5596029
- IRC = gbolivar
- Twitter = @gbolivarb
- skype = elalconxvii
- Linux User ID: #537592
- Blog = http://gbbolivar.wordpress.com/
Certificado de Aprobación: IBM ACE Professional Certificate


Alvaro Marquina

unread,
Jun 24, 2016, 6:07:10 PM6/24/16
to python-v...@googlegroups.com
Gregorio, tienes el enlace de forever? (con ese nombre la búsqueda en google no es que sea muy efectiva), me llama la atención, yo utilizo Celery pero no está de más conocer otras alternativas.

Has recibido este mensaje porque estás suscrito a un tema del grupo "Python Venezuela" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/python-venezuela/NkK6VAU24JI/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a python-venezue...@googlegroups.com.

Gregorio Bolivar

unread,
Jun 25, 2016, 11:23:39 PM6/25/16
to python-v...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages