Suscripcion microsoft graph
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())