MS Graph API Teams Call Record explained - microsoft-graph-api
General Call Record Understanding
We're using the Microsoft Teams Graph API to analyse calls made through Microsoft Teams. We've setup a notification web hook that subscribes to the call records using the Graph API and then uses some more API calls to retrieve the call and user information for the received call. That's all working quite well (despite the time delay - but that's OK). What we struggle with ist the information retrieved from the Call Record API. We receive following data for example (UUIDs, names and phone numbers anonymised):
{
"#odata.context": "https://graph.microsoft.com/v1.0/$metadata#communications/callRecords(sessions())/$entity",
"id": "00000000-0000-0000-0000-000000000000",
"version": 1,
"type": "groupCall",
"modalities": [
"audio",
"screenSharing"
],
"lastModifiedDateTime": "2021-10-18T11:16:03.5458861Z",
"startDateTime": "2021-10-18T10:55:33.712657Z",
"endDateTime": "2021-10-18T10:57:23.1331192Z",
"joinWebUrl": null,
"organizer": {
"user": null,
"acsUser": null,
"spoolUser": null,
"phone": {
"id": "+49XXXXXXXX",
"displayName": null,
"tenantId": null
},
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null
},
"participants": [
{
"acsUser": null,
"spoolUser": null,
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null,
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"displayName": "Firstname Lastname",
"tenantId": "00000000-0000-0000-0000-000000000000"
}
},
{
"acsUser": null,
"spoolUser": null,
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null,
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"displayName": null,
"tenantId": null
}
},
{
"user": null,
"acsUser": null,
"spoolUser": null,
"phone": {
"id": "+49XXXXXXXX",
"displayName": null,
"tenantId": null
},
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null
},
{
"user": null,
"acsUser": null,
"spoolUser": null,
"phone": {
"id": "+49XXXXXXXX",
"displayName": null,
"tenantId": null
},
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null
},
{
"acsUser": null,
"spoolUser": null,
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null,
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"displayName": null,
"tenantId": "00000000-0000-0000-0000-000000000000"
}
},
{
"acsUser": null,
"spoolUser": null,
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null,
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"displayName": null,
"tenantId": "00000000-0000-0000-0000-000000000000"
}
}
],
"sessions#odata.context": "https://graph.microsoft.com/v1.0/$metadata#communications/callRecords('00000000-0000-0000-0000-000000000000')/sessions",
"sessions": [
{
"id": "403139dd-b5c1-457e-a5aa-b07e8c2bcc58",
"modalities": [
"audio"
],
"startDateTime": "2021-10-18T10:55:40.552989Z",
"endDateTime": "2021-10-18T10:57:23.1331192Z",
"failureInfo": null,
"caller": {
"#odata.type": "#microsoft.graph.callRecords.participantEndpoint",
"feedback": null,
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
},
"identity": {
"acsUser": null,
"spoolUser": null,
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null,
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"displayName": null,
"tenantId": null
}
}
},
"callee": {
"#odata.type": "#microsoft.graph.callRecords.serviceEndpoint",
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
}
}
},
{
"id": "b538ce68-cd12-4b22-b127-69b73a183e78",
"modalities": [
"audio"
],
"startDateTime": "2021-10-18T10:55:41.5686724Z",
"endDateTime": "2021-10-18T10:57:23.1331192Z",
"failureInfo": null,
"caller": {
"#odata.type": "#microsoft.graph.callRecords.participantEndpoint",
"feedback": null,
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
},
"identity": {
"acsUser": null,
"spoolUser": null,
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null,
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"displayName": null,
"tenantId": null
}
}
},
"callee": {
"#odata.type": "#microsoft.graph.callRecords.serviceEndpoint",
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
}
}
},
{
"id": "beb5c088-70f6-4b77-8a47-fbef0f3b6707",
"modalities": [
"audio"
],
"startDateTime": "2021-10-18T10:55:36.2402487Z",
"endDateTime": "2021-10-18T10:57:23.055049Z",
"failureInfo": null,
"caller": {
"#odata.type": "#microsoft.graph.callRecords.participantEndpoint",
"feedback": null,
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
},
"identity": {
"user": null,
"acsUser": null,
"spoolUser": null,
"phone": {
"id": "+49XXXXXXXX",
"displayName": null,
"tenantId": null
},
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null
}
},
"callee": {
"#odata.type": "#microsoft.graph.callRecords.serviceEndpoint",
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
}
}
},
{
"id": "c1fce6ee-8ac6-4680-a079-8384665aeba0",
"modalities": [
"audio"
],
"startDateTime": "2021-10-18T10:55:53.0392071Z",
"endDateTime": "2021-10-18T10:57:23.1331192Z",
"failureInfo": null,
"caller": {
"#odata.type": "#microsoft.graph.callRecords.participantEndpoint",
"feedback": null,
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
},
"identity": {
"acsUser": null,
"spoolUser": null,
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null,
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"displayName": null,
"tenantId": null
}
}
},
"callee": {
"#odata.type": "#microsoft.graph.callRecords.serviceEndpoint",
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
}
}
},
{
"id": "ce6e4e5d-77ff-421a-9b28-670dd691a119",
"modalities": [
"audio"
],
"startDateTime": "2021-10-18T10:55:36.2402487Z",
"endDateTime": "2021-10-18T10:55:52.4142559Z",
"failureInfo": null,
"caller": {
"#odata.type": "#microsoft.graph.callRecords.participantEndpoint",
"feedback": null,
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": "MicrosoftTeamsCallQueueService (20211014.1)",
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
},
"identity": {
"acsUser": null,
"spoolUser": null,
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null,
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"displayName": null,
"tenantId": "00000000-0000-0000-0000-000000000000"
}
}
},
"callee": {
"#odata.type": "#microsoft.graph.callRecords.serviceEndpoint",
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
}
}
},
{
"id": "00000000-0000-0000-0000-000000000000",
"modalities": [
"audio"
],
"startDateTime": "2021-10-18T10:55:33.712657Z",
"endDateTime": "2021-10-18T10:57:23.0157168Z",
"failureInfo": null,
"caller": {
"#odata.type": "#microsoft.graph.callRecords.participantEndpoint",
"feedback": null,
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
},
"identity": {
"user": null,
"acsUser": null,
"spoolUser": null,
"phone": {
"id": "+49XXXXXXXX",
"displayName": null,
"tenantId": null
},
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null
}
},
"callee": {
"#odata.type": "#microsoft.graph.callRecords.participantEndpoint",
"feedback": null,
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": "MicrosoftTeamsCallQueueService (20211014.1)",
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
},
"identity": {
"acsUser": null,
"spoolUser": null,
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null,
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"displayName": null,
"tenantId": "00000000-0000-0000-0000-000000000000"
}
}
}
},
{
"id": "e4f20c64-9343-4d67-b47b-9ba5e34ab373",
"modalities": [
"audio",
"screenSharing"
],
"startDateTime": "2021-10-18T10:55:51.8360806Z",
"endDateTime": "2021-10-18T10:57:23.1331192Z",
"failureInfo": null,
"caller": {
"#odata.type": "#microsoft.graph.callRecords.participantEndpoint",
"feedback": null,
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": "CallSignalingAgent (27/1.4.00.26376//;release_ktolskiy2/hook_R22.2021.22.01.56;releases/CL2021.R22)",
"applicationVersion": null,
"platform": "windows",
"productFamily": "teams"
},
"identity": {
"acsUser": null,
"spoolUser": null,
"phone": null,
"guest": null,
"encrypted": null,
"onPremises": null,
"acsApplicationInstance": null,
"spoolApplicationInstance": null,
"applicationInstance": null,
"application": null,
"device": null,
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"displayName": "Firstname Lastname",
"tenantId": "00000000-0000-0000-0000-000000000000"
}
}
},
"callee": {
"#odata.type": "#microsoft.graph.callRecords.serviceEndpoint",
"userAgent": {
"#odata.type": "#microsoft.graph.callRecords.clientUserAgent",
"headerValue": null,
"applicationVersion": null,
"platform": "unknown",
"productFamily": "unknown"
}
}
}
]
}
To be able to get our heads around the data, we visualise the call sessions like this:
Our interpretation for this call is:
+49XXXXXXXX calls the Call Queue call queue at 12:55:33
at 12:55:51 Firstname Lastname picks up the call from the queue
the call ends at 12:57:23.
Is this correct?
Failure Info
Next thing we encountered is the failureInfo information on a call record session. For some calls that are listed as failed in the Teams Call Record CSV export (administration user interface) we receive no failure info (but the total call duration is 0 seconds), while for others that are listed as successful in the CSV export we receive a failure info such as
"failureInfo": {
"reason": "Other",
"stage": "callSetup"
}
These calls then have a sensible call duration.
Does anybody know of any issues with the failure information or what's the deal with this information?
We're analysing the calls rather extensively but currently we use our own interpretation of the call record sessions to determine what type of call it was, who picked up the call, who could have picked up the call, etc. But unfortunately there's not much information around (at least I could not find any) that describes the nature of these call record sessions: what they represent, what types of services we can encounter (bots, apps, etc.), which information you can extract from them and which not. Is just guessing at the moment for us.
I'd be really grateful for any hint, link, nudge in the right direction to get a better understanding of these call records.
Related
How to check if object is empty in Alasql
I have this example here and i'm trying to only query the empty mongodb array var data = [{ "dynamic_env": null, "mission_critical": null, "chart-version": null, "app-url": null, "mongodb": {}, "nightly_shutdown": false, "external_values": null, "external_values_source": null, "external_values_path": null, "atlas_database": null, "allow_db_restore": null, "on-demand": false, "helm_timeout": null, "aws-account": null, "post": [], "pre": [], "atlas_project": null, "istio-enabled": false, "env_subscription": null, "istio-auth-policy": null, "version": null, "e2e-tests-script": [], "morning_startup": true, "project_dst": null, "cred": null, "dataset": null, "project_src": null, "Env": { "identifier": "cm-infra-ci-core1#admin365-infra-stg-eks#admin365-cm-infra-ci-core1", "title": "cm-infra-ci-core1" }, "namespace": "admin365-cm-infra-ci-core1", "cluster": { "identifier": "admin365-infra-stg-eks#infra-stg", "title": "admin365-infra-stg-eks" }, "Service": { "identifier": "user-data-management-gdpr-fetch", "title": "user-data-management-gdpr-fetch" }, "team": null, "$identifier": "user-data-management-gdpr-fetch#cm-infra-ci-core1#admin365-cm-infra-ci-core1", "$title": "user-data-management-gdpr-fetch#cm-infra-ci-core1" }, { "dynamic_env": null, "mission_critical": null, "chart-version": null, "app-url": null, "mongodb": {a: 123}, "nightly_shutdown": false, "external_values": null, "external_values_source": null, "external_values_path": null, "atlas_database": null, "allow_db_restore": null, "on-demand": false, "helm_timeout": null, "aws-account": null, "post": [], "pre": [], "atlas_project": null, "istio-enabled": false, "env_subscription": null, "istio-auth-policy": null, "version": null, "e2e-tests-script": [], "morning_startup": true, "project_dst": null, "cred": null, "dataset": null, "project_src": null, "Env": { "identifier": "cm-infra-ci-core1#admin365-infra-stg-eks#admin365-cm-infra-ci-core1", "title": "cm-infra-ci-core1" }, "namespace": "admin365-cm-infra-ci-core1", "cluster": { "identifier": "admin365-infra-stg-eks#infra-stg", "title": "admin365-infra-stg-eks" }, "Service": { "identifier": "user-data-management-gdpr-fetch", "title": "user-data-management-gdpr-fetch" }, "team": null, "$identifier": "user-data-management-gdpr-fetch#cm-infra-ci-core1#admin365-cm-infra-ci-core1", "$title": "user-data-management-gdpr-fetch#cm-infra-ci-core1" }]; var res = alasql(`SELECT * FROM ? WHERE ('mongodb'->() = {})`,[data]); console.log(res.length); // [{"a":1,"b":40},{"a":2,"b":20}]
Add a user-defined function that returns the number of keys in the object, then query it: alasql.fn.keylen = function(x) { return Object.keys(x).length; } var res = alasql(`SELECT * FROM ? WHERE keylen(mongodb) = 0`,[data]);
Why a member cannot receive messages from others in a group call chat of Teams
I used Create Call of Microsoft Graph API to create a group call(audio). The connection has created successfully, but every member cannot receive any chat message posted by other members. (picture)The phenomenon that everyone cannot receive other's message Request as below: POST https://graph.microsoft.com/beta/app/calls Content-Type: application/json Authorization: Bearer <Token> { "#odata.type": "#microsoft.graph.call", "callbackUri": "https://myhostname.ngrok.io/callback/calling", "mediaConfig": { "#odata.type": "#microsoft.graph.serviceHostedMediaConfig" }, "source": { "identity": { "application": { "id": "myCallingAppId" } } }, "subject": "Test Call", "targets": [ { "identity": { "user": { "id": "User_1-Id", "displayName": "User_1-DisplayName" } }, "identity": { "user": { "id": "User_2-Id", "displayName": "User_2-Name" } } } ], "tenantId": "myCallingAppTenant" } Response: { "#odata.context": "https://graph.microsoft.com/beta/$metadata#communications/calls/$entity", "id": "481f0c00-ffff-41cd-bbc8-7e21fb5e8b1b", "state": "establishing", "transferState": null, "terminationReason": null, "direction": "outgoing", "ringingTimeoutInSeconds": null, "subject": "Test Call", "callbackUri": "https://myhostname.ngrok.io/callback/calling", "requestedModalities": [], "activeModalities": [], "routingPolicies": [], "tenantId": "myCallingAppTenant", "myParticipantId": "59e11e38-87d0-4ae5-b3ce-051ea26aa34d", "mediaState": null, "resultInfo": null, "answeredBy": null, "chatInfo": null, "meetingInfo": null, "meetingCapability": null, "toneInfo": null, "incomingContext": null, "callRoutes": [], "source": { "region": null, "languageId": null, "identity": { "user": null, "device": null, "phone": null, "application": { "id": "myCallingAppId", "displayName": null } } }, "targets": [ { "region": null, "languageId": null, "identity": { "application": null, "device": null, "phone": null, "user": { "id": "User_1-Id", "displayName": "User_1-DisplayName" } } }, { "region": null, "languageId": null, "identity": { "application": null, "device": null, "phone": null, "user": { "id": "User_2-Id", "displayName": "User_2-DisplayName" } } } ], "mediaConfig": { "#odata.type": "#microsoft.graph.serviceHostedMediaConfig", "removeFromDefaultAudioGroup": null, "preFetchMedia": [] } } Is any configuration missed. How to create a calling with normal message communication. Could anyone help me, thanks!
How do I retrieve the owners of a Distribution List using Microsoft Graph?
I am unsure if I found a bug, or if I am using this the wrong way: I am unable to retrieve the owners of a DL group using Graph. Steps: Let's assume my email is admin#contoso.com. I created a Distribution List group in the Microsoft 365 Admin Center of my Exchange server, and set myself (the admin) as the owner of that DL. I named this DL "TestDG1". I also added this same user as the sole member of the DL. I then visited the Graph Explorer website, logged in as the admin, gave myself Read permissions to access groups, contacts, users, and executed this query: https://graph.microsoft.com/v1.0/groups/?$filter=startswith(displayName,'TestDG') I got a successful response with this information: { "#odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups", "value": [ { "id": "01234567-89AB-CDEF-0123-456789ABCDEF", "deletedDateTime": null, "classification": null, "createdDateTime": "2018-10-15T18:38:08Z", "creationOptions": [], "description": null, "displayName": "TestDG1", "groupTypes": [], "mail": "testdg1#contoso.com", "mailEnabled": true, "mailNickname": "TestDG1", "onPremisesLastSyncDateTime": null, "onPremisesSecurityIdentifier": null, "onPremisesSyncEnabled": null, "preferredDataLocation": null, "proxyAddresses": [ "SMTP:testdg1#contoso.com" ], "renewedDateTime": "2018-10-15T18:38:08Z", "resourceBehaviorOptions": [], "resourceProvisioningOptions": [], "securityEnabled": false, "visibility": null, "onPremisesProvisioningErrors": [] } ] } Using the ID of my group (01234567-89AB-CDEF-0123-456789ABCDEF), I checked if I could retrieve that DL's information using: https://graph.microsoft.com/v1.0/groups/01234567-89AB-CDEF-0123-456789ABCDEF And I got a successful response: { "#odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups/$entity", "id": "01234567-89AB-CDEF-0123-456789ABCDEF", "deletedDateTime": null, "classification": null, "createdDateTime": "2018-10-15T18:38:08Z", "creationOptions": [], "description": null, "displayName": "TestDG1", "groupTypes": [], "mail": "testdg1#contoso.com", "mailEnabled": true, "mailNickname": "TestDG1", "onPremisesLastSyncDateTime": null, "onPremisesSecurityIdentifier": null, "onPremisesSyncEnabled": null, "preferredDataLocation": null, "proxyAddresses": [ "SMTP:testdg1#contoso.com" ], "renewedDateTime": "2018-10-15T18:38:08Z", "resourceBehaviorOptions": [], "resourceProvisioningOptions": [], "securityEnabled": false, "visibility": null, "onPremisesProvisioningErrors": [] } If I request the owners, nothing comes back. I used two methods: A) Expanding the owners array: https://graph.microsoft.com/v1.0/groups/01234567-89AB-CDEF-0123-456789ABCDEF/?$expand=owners I get a successful response, but the owners array is empty: { "#odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups", "value": [ { "id": "01234567-89AB-CDEF-0123-456789ABCDEF", "deletedDateTime": null, "classification": null, "createdDateTime": "2018-10-15T18:38:08Z", "creationOptions": [], "description": null, "displayName": "TestDG1", "groupTypes": [], "mail": "testdg1#contoso.com", "mailEnabled": true, "mailNickname": "TestDG1", "onPremisesLastSyncDateTime": null, "onPremisesSecurityIdentifier": null, "onPremisesSyncEnabled": null, "preferredDataLocation": null, "proxyAddresses": [ "SMTP:testdg1#contoso.com" ], "renewedDateTime": "2018-10-15T18:38:08Z", "resourceBehaviorOptions": [], "resourceProvisioningOptions": [], "securityEnabled": false, "visibility": null, "onPremisesProvisioningErrors": [], "owners": [] } ] } B) Querying for the DL's owners directly: https://graph.microsoft.com/v1.0/groups/01234567-89AB-CDEF-0123-456789ABCDEF/owners I got a successful response, but the value array is empty: { "#odata.context": "https://graph.microsoft.com/v1.0/$metadata#directoryObjects", "value": [] } Interestingly, I can retrieve the members without problems: https://graph.microsoft.com/v1.0/groups/01234567-89AB-CDEF-0123-456789ABCDEF/members { "#odata.context": "https://graph.microsoft.com/v1.0/$metadata#directoryObjects", "value": [ { "#odata.type": "#microsoft.graph.user", "id": "00001111-2222-3333-4444-555566667777", "businessPhones": [], "displayName": "Contoso Administrator", "givenName": "Admin", "jobTitle": null, "mail": "admin#contoso.com", "mobilePhone": null, "officeLocation": null, "preferredLanguage": "en-US", "surname": "Contoso", "userPrincipalName": "admin#contoso.com" } ] } Or by expanding members: https://graph.microsoft.com/v1.0/groups/01234567-89AB-CDEF-0123-456789ABCDEF?$expand=members { "#odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups/$entity", "id": "01234567-89AB-CDEF-0123-456789ABCDEF", "deletedDateTime": null, "classification": null, "createdDateTime": "2018-10-15T18:38:08Z", "creationOptions": [], "description": null, "displayName": "TestDG1", "groupTypes": [], "mail": "testdg1#contoso.com", "mailEnabled": true, "mailNickname": "TestDG1", "onPremisesLastSyncDateTime": null, "onPremisesSecurityIdentifier": null, "onPremisesSyncEnabled": null, "preferredDataLocation": null, "proxyAddresses": [ "SMTP:testdg1#contoso.com" ], "renewedDateTime": "2018-10-15T18:38:08Z", "resourceBehaviorOptions": [], "resourceProvisioningOptions": [], "securityEnabled": false, "visibility": null, "onPremisesProvisioningErrors": [], "members": [ { "#odata.type": "#microsoft.graph.user", "id": "00001111-2222-3333-4444-555566667777", "deletedDateTime": null, "accountEnabled": true, "ageGroup": null, "businessPhones": [], "city": null, "companyName": null, "consentProvidedForMinor": null, "country": null, "createdDateTime": null, "department": null, "displayName": "Contoso Administrator", "givenName": "Admin", "jobTitle": null, … … … // and all its properties } ] } So is this a bug, or am I doing something wrong? If it's a bug, where do I report it?
At the moment (as 2019-04-18), owners for mail-enabled security groups and distribution lists are not currently included in owners in Microsoft Graph. Owners are currently available only for security groups (not mail-enabled), and Office 365 groups.
Filter contacts in outlook API using startswith()
I am trying to get a list of contacts that are filtered by email address from Microsoft Outlook API (Contact API). The url I am using for the request is: https://outlook.office.com/api/v2.0/me/contacts/?$filter=EmailAddresses/any(email: startswith(email/Address,'ab')) The filter property $filter=EmailAddresses/any(email: email/Address eq 'ab') is working fine. Here EmailAddresses field is a list containing name, address fields. UPDATE Original response : { "#odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Contacts", "value": [ { .................................. .................................. "DisplayName": "Abhishek R", "GivenName": "Abhishek", "Initials": null, "MiddleName": null, "NickName": null, "Surname": "R", "Title": null, "YomiGivenName": null, "YomiSurname": null, "YomiCompanyName": null, "Generation": null, "ImAddresses": [], "JobTitle": null, "CompanyName": null, "Department": null, "OfficeLocation": null, "Profession": null, "BusinessHomePage": null, "AssistantName": null, "Manager": null, "HomePhones": [], "MobilePhone1": null, "BusinessPhones": [], "SpouseName": null, "PersonalNotes": null, "Children": [], "EmailAddresses": [ { "Name": "abhishek#gmail.com", "Address": "abhishek#gmail.com" }, { "Name": "abcdef#gmail.com", "Address": "abcdef#gmail.com" } ], "HomeAddress": {}, "BusinessAddress": {}, "OtherAddress": {} } ] } The response I got is: { "error": { "code": "ErrorInvalidUrlQueryFilter", "message": "The query filter contains one or more invalid nodes." } } Looking for a solution to this.
how to read json within json in ios
i have the being fetched, i need to read whats inside data under sources "id": "cus_7nDkZw63KvTuy5", "object": "customer", "account_balance": 0, "created": 1453839669, "currency": "usd", "default_source": "card_17XdJE2eZvKYlo2CBNnle4YM", "delinquent": false, "description": null, "discount": null, "email": "someone#example.com", "livemode": false, "metadata": { }, "shipping": null, "sources": { "object": "list", "data": [ { "id": "card_17XdJE2eZvKYlo2CBNnle4YM", "object": "card", "address_city": null, "address_country": null, "address_line1": null, "address_line1_check": null, "address_line2": null, "address_state": null, "address_zip": null, "address_zip_check": null, "brand": "Visa", "country": "US", "customer": "cus_7nDkZw63KvTuy5", "cvc_check": "pass", "dynamic_last4": null, "exp_month": 12, "exp_year": 2016, "funding": "credit", "last4": "4242", "metadata": { }, "name": "someone#example.com", "tokenization_method": null } ], "has_more": false, "total_count": 1, "url": "/v1/customers/cus_7nDkZw63KvTuy5/sources" }, "subscriptions": { "object": "list", "data": [ ], "has_more": false, "total_count": 0, "url": "/v1/customers/cus_7nDkZw63KvTuy5/subscriptions" } }
Try this code you will get array [[[[result objectForKey:#"sources"] objectForKey:#"data"] objectAtIndex:0] objectForKey:#"country"]; you will get US as answer.