Compartir a través de

Suscripcion microsoft graph

Adilem Dobras 0 Puntos de reputación
2024-09-30T17:45:10.99+00:00

Hola, estaba realizando una suscripción y de repente dejo de enviarme las suscripciones...al endpoint.
Cuando creo la suscripción en Python mi paso es eliminar todas las suscripciones existentes y luego crear una nueva. Por ahora las estoy realizando con un tiempo de vida de 5 minutos para poder hacer pruebas y en un momento dejaron de enviarse solo se envia cuando se realiza la suscripcion principal con el validationToken. Esta es la respuesta de mi servidor:

52.159.107.4 - - [30/Sep/2024:12:14:41 -0500] "POST /api/resourceNotifications?validationToken=Validation%3a+Testing+client+application+reachability+for+subscription+Request-Id%(aqui el request id) HTTP/1.1" 200 117 "-" "

Este es el codigo:

import asyncio
from datetime import datetime, timedelta, timezone
from azure.identity import ClientSecretCredential
from msgraph import GraphServiceClient
from msgraph.generated.models.subscription import Subscription

# Clase personalizada para usar la versión beta de la API de Microsoft Graph
class BetaGraphServiceClient(GraphServiceClient):
    def __init__(self, credential):
        super().__init__(credential)
        self.request_adapter.base_url = "https://graph.microsoft.com/beta"
async def create_or_verify_subscription():
    # Configura las credenciales
    tenant_id = "<tenant>"  # Reemplaza con tu Tenant ID
    client_id = "<client_id>"    # Reemplaza con tu Client ID
    client_secret = "<secret>"  # Reemplaza con tu Client Secret

    # Autenticación
    credential = ClientSecretCredential(
        tenant_id=tenant_id,
        client_id=client_id,
        client_secret=client_secret
    )

    # Crea el cliente de Graph usando la versión beta
    graph_client = BetaGraphServiceClient(credential)

    # ID del usuario que deseas monitorear
    user_id = 'id del usuario'  # Reemplaza con el ID del usuario deseado

    try:
        # Verifica las suscripciones activas
        subscriptions = await graph_client.subscriptions.get()
        active_subscription = None
        print("Existing subscriptions:")
        for subscription in subscriptions.value:
            print(f"Subscription ID: {subscription.id}, Resource: {subscription.resource}")
            if subscription.resource == f"/users/{user_id}/chats/getAllMessages":
                active_subscription = subscription
                print(f"Active subscription found: {subscription.id}")
                break

        # Si hay una suscripción activa, intenta eliminarla
        if active_subscription:
            await graph_client.subscriptions.by_subscription_id(active_subscription.id).delete()
            print(f"Subscription {active_subscription.id} deleted.")

        # Crea una nueva suscripción
        expiration_time = datetime.now(timezone.utc) + timedelta(minutes=60)
        expiration_date_time = expiration_time.isoformat()

        request_body = Subscription(
            change_type="created",
            notification_url="https://(aqui puse mi dominio)/api/resourceNotifications",
            resource=f"/users/{user_id}/chats/getAllMessages",
            expiration_date_time=expiration_date_time,
            client_state="SecretClientState",
        )

        result = await graph_client.subscriptions.post(request_body)
        print(f"Subscription created: {result.id}")

    except Exception as e:
        print(f"Error verifying or creating subscription: {e}")

# Ejecuta la función principal
if __name__ == "__main__":
    asyncio.run(create_or_verify_subscription())
Azure
Azure

Plataforma e infraestructura de informática en la nube para crear, implementar y administrar aplicaciones y servicios a través de una red mundial de centros de datos administrados por Microsoft.

0 comentarios No hay comentarios

1 respuesta

Ordenar por: Muy útil
  1. Gao Chen 10,780 Puntos de reputación Personal externo de Microsoft Moderador
    2024-10-30T15:31:07.4266667+00:00

    Hola Adilem Dobras,

    ¡Bienvenido(a) a Microsoft Q&A!

    Nos disculpamos sinceramente por la demora en traer su tema a este foro. Si a día de hoy sigues teniendo el problema por el que abriste este hilo por favor ten en cuenta que nosotros no manejamos codigo directamente sin embargo aquí hay algunas sugerencias y consideraciones que podrían ayudarte a resolver el problema que estás enfrentando:

    1. Verifica que la URL de notificación (notification_url) sea accesible públicamente y que tu servidor esté configurado para recibir las solicitudes POST. Puedes probar la URL manualmente para asegurarte de que responde correctamente.
    2. En tu bloque try, sería útil agregar más detalles sobre el error en el except. Por ejemplo, podrías imprimir el tipo de error o el mensaje completo para tener más contexto sobre lo que está fallando.
    3. Aunque estás configurando la suscripción para que expire en 60 minutos, asegúrate de que tu lógica de renovación esté implementada. Si no renuevas la suscripción antes de que expire, dejará de recibir notificaciones.
    4. Revisa los registros de Microsoft Graph para ver si hay algún error o advertencia relacionado con tus suscripciones. Esto puede darte pistas sobre problemas de configuración o límites alcanzados.

    Espero que información brindada fuera útil. Si necesitas más asistencia, estoy a tu disposición.

    Atentamente,

    Gao


    Si esta respuesta resolvió tu consulta, por favor haz clic en 'Aceptar respuesta'. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.

    ¿Le ha resultado útil esta respuesta?


Su respuesta

Las respuestas pueden ser marcadas como "Aceptadas" por el autor de la pregunta y "Recomendadas" por los moderadores, lo que ayuda a los usuarios a saber que la respuesta ha resuelto el problema del autor.