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.
380 preguntas
0 comentarios No hay comentarios
{count} votos

Su respuesta

Las respuestas se pueden marcar como respuestas aceptadas por el autor de la pregunta, lo que ayuda a los usuarios a conocer la respuesta que resolvió el problema del autor.