Я ищу способ массового получения статуса активности федеративных пользователей для внешних компаний через API без необходимости приглашать пользователей и ждать, пока они примут приглашение.
Можно ли получить тот же ответ о состоянии активности, что и при использовании панели поиска в Teams, даже если использовать не API Graph, а другие методы? В настоящее время этот метод обеспечивает только статус «офлайн» или «присутствие неизвестно» для всех федеративных пользователей.
Любая помощь или предложения будут очень признательны.
Спасибо!
import requests
import json
from dotenv import load_dotenv
from msal import ConfidentialClientApplication
load_dotenv(dotenv_path=r'....')
CLIENT_ID = os.getenv('CLIENT_ID')
CLIENT_SECRET = os.getenv('CLIENT_SECRET')
TENANT_ID = os.getenv('TENANT_ID')
app = ConfidentialClientApplication(
CLIENT_ID,
authority=f"https://login.microsoftonline.com/{TENANT_ID}",
client_credential=CLIENT_SECRET,)
result = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])
if "access_token" in result:
access_token = result["access_token"]
else:
print("Error acquiring token:", result.get("error"), result.get("error_description"))
exit(1)
user_id = "..."
presence_url = f'https://graph.microsoft.com/beta/communications/presences/{user_id}'
presence_headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json'}
response = requests.get(presence_url, headers=presence_headers)
if response.status_code == 200:
presence_info = response.json()
print("Presence Info:", json.dumps(presence_info, indent=2))
else:
print("Failed to retrieve presence info:", response.status_code, response.text)
Я согласен с @Meghana-MSFT, по умолчанию невозможно получить информацию о присутствии внешних пользователей с помощью API Microsoft Graph. Обратитесь к этой SO Thread от @alphaz18.
Я получил тот же ответ для внешнего пользователя:
# Initialize the ConfidentialClientApplication
app = ConfidentialClientApplication(
CLIENT_ID,
authority=f"https://login.microsoftonline.com/{TENANT_ID}",
client_credential=CLIENT_SECRET
)
# Acquire token for client
result = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])
if "access_token" in result:
access_token = result["access_token"]
else:
print("Error acquiring token:", result.get("error"), result.get("error_description"))
exit(1)
# User ID for whom presence information is to be retrieved
user_id = "UserID" # Replace with the actual user ID
# Presence endpoint URL
presence_url = f'https://graph.microsoft.com/beta/communications/presences/{user_id}'
presence_headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json'
}
# Send request to Microsoft Graph API
response = requests.get(presence_url, headers=presence_headers)
if response.status_code == 200:
presence_info = response.json()
print("Presence Info:", json.dumps(presence_info, indent=2))
else:
print("Failed to retrieve presence info:", response.status_code, response.text)
/presence
API Microsoft Graph при доступе с использованием разрешений приложения, таких как Presence.Read
или Presence.Read.All
, не позволяет получать данные о присутствии для внешних пользователей.Ссылка:
API-интерфейс Graph для определения присутствия не работает для внешних пользователей. Другого решения этой проблемы нет.