Si tiene un sitio web o una aplicación existente y desea fomentar la discusión en su foro de Discourse, puede ser útil mostrar las notificaciones de Discourse dentro de su aplicación. Esta guía le mostrará cómo utilizar la API de Discourse para obtener notificaciones de un usuario y cómo marcarlas como leídas.
La forma recomendada de utilizar la API es hacer que su aplicación realice solicitudes de back-end a Discourse y luego pase esos datos a la capa de front-end/presentación de su aplicación.
Consulte la Documentación de la API para obtener información sobre cómo utilizar la API de Discourse.
Obtener notificaciones para un usuario
Para obtener notificaciones a través de la API, puede realizar una solicitud GET autenticada al endpoint /notifications. Puede especificar el nombre de usuario para el que está obteniendo notificaciones en el encabezado Api-Username o como un parámetro de consulta: /notifications?username=<username>.
Parámetros de consulta opcionales
| Parámetro | Descripción |
|---|---|
username |
El nombre de usuario para el que se obtendrán las notificaciones |
filter |
Filtrar por estado de lectura: read o unread |
filter_by_types |
Lista separada por comas de nombres de tipos de notificación para filtrar (ej. mentioned,replied) |
offset |
Desplazamiento para la paginación |
limit |
Número de notificaciones a devolver (máx. 60) |
Solicitud de ejemplo
curl -X GET "http://localhost:8080/notifications.json?username=blake.erickson" \
-H "Api-Key: e81c4022f148c872a98fb38dac1d9619c7f5b245b42ba98fa467968bbed7551e" \
-H "Api-Username: system"
Esto devolverá la siguiente respuesta JSON:
{
"notifications": [
{
"id": 3,
"user_id": 5,
"external_id": null,
"notification_type": 12,
"read": true,
"high_priority": false,
"created_at": "2019-06-17T20:26:05.670Z",
"post_number": null,
"topic_id": null,
"slug": null,
"data": {
"badge_id": 41,
"badge_name": "First Emoji",
"badge_slug": "first-emoji",
"badge_title": false,
"username": "blake"
}
},
{
"id": 2,
"user_id": 5,
"external_id": null,
"notification_type": 6,
"read": true,
"high_priority": true,
"created_at": "2019-06-17T20:26:04.305Z",
"post_number": 1,
"topic_id": 10,
"fancy_title": "Greetings!",
"slug": "greetings",
"data": {
"topic_title": "Greetings!",
"original_post_id": 14,
"original_post_type": 1,
"original_username": "discobot",
"revision_number": null,
"display_username": "discobot"
}
}
],
"total_rows_notifications": 2,
"seen_notification_id": 3,
"load_more_notifications": "/notifications?offset=60&username=blake"
}
Esto devuelve un array de notificaciones. Si solo le interesa mostrar las notificaciones no leídas, puede pasar el parámetro de consulta filter=unread para que el servidor devuelva solo las notificaciones no leídas. Por ejemplo:
curl -X GET "http://localhost:8080/notifications.json?username=blake.erickson&filter=unread" \
-H "Api-Key: e81c4022f148c872a98fb38dac1d9619c7f5b245b42ba98fa467968bbed7551e" \
-H "Api-Username: system"
Puede visitar esta página para obtener una lista de tipos de notificación. Por ejemplo, el tipo de notificación 12 corresponde a “granted_badge” (insignia otorgada).
Marcar notificaciones como leídas
Ahora que ha obtenido las notificaciones de un usuario, puede marcarlas como leídas enviando una solicitud PUT a /notifications/mark-read con el id de la notificación en el cuerpo de la solicitud y especificando el nombre de usuario en el encabezado de la solicitud.
Solicitud de ejemplo
curl -X PUT "http://localhost:8080/notifications/mark-read" \
-H "Api-Key: e81c4022f148c872a98fb38dac1d9619c7f5b245b42ba98fa467968bbed7551e" \
-H "Api-Username: blake.erickson" \
-F "id=4"
También puede omitir el ID de la notificación y se marcarán como leídas todas las notificaciones para ese usuario.
Esto devolverá una simple respuesta JSON “OK”:
{
"success": "OK"
}