Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Nov 5, 2025

Teams sends meeting start/end events with PascalCase properties in the value object (Id, MeetingType, Title, JoinUrl, StartTime, EndTime), causing deserialization failures.

Changes

  • Updated MeetingStartActivityValue and MeetingEndActivityValue to use PascalCase in JsonPropertyName attributes
  • Updated test fixtures to match actual Teams payload format
  • Added tests validating deserialization of real Teams payloads

Example

{
  "name": "application/vnd.microsoft.meetingEnd",
  "type": "event",
  "value": {
    "Id": "MCMx...",           // Was: "id"
    "MeetingType": "Scheduled", // Was: "meetingType"
    "Title": "Daily Standup",   // Was: "title"
    "JoinUrl": "https://...",   // Was: "joinUrl"
    "EndTime": "2025-10-31..."  // Was: "endTime"
  }
}

This deviates from the library's camelCase convention but matches the actual Teams platform format.

Original prompt

This section details on the original issue you should resolve

<issue_title>Exception while deserializing Activity when meeting starts or ends - because of case sensitivity</issue_title>
<issue_description>When meeting starts or ends, library crashes while deserializing JSON to activity. Deep inside Activity Json Converter.
I get this JSON from Teams:

{
    "name": "application/vnd.microsoft.meetingEnd",
    "type": "event",
    "timestamp": "2025-10-31T11:38:15.5375726Z",
    "id": "1761910695513",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/emea/167c22a9-1b2e-439c-ad74-cc77e9e118d8/",
    "from": {
        "id": "29:1geTNfcvfJus0De5z4gr7HeHGMOuln9LY8aHFGtwBqhOl7ZYQFcM2CL1ODjhgHE1XTq3vBeeRlGGGPvFWi0BzRw",
        "name": "",
        "aadObjectId": "86a23cfc-f78e-424a-8947-7ae0ce242da1"
    },
    "conversation": {
        "isGroup": true,
        "conversationType": "groupChat",
        "tenantId": "167c22a9-1b2e-439c-ad74-cc77e9e118d8",
        "id": "19:meeting_MTRmMTQ5NDYtMTYyYi00NmNlLWI4ZTQtN2I1MTYzM2RkYTg3@thread.v2"
    },
    "recipient": {
        "id": "28:c9a052ed-f68c-4227-b081-01da0669c49c",
        "name": "teams-bot"
    },
    "entities": [
        {
            "locale": "en-US",
            "country": "US",
            "type": "clientInfo"
        }
    ],
    "channelData": {
        "tenant": {
            "id": "167c22a9-1b2e-439c-ad74-cc77e9e118d8"
        },
        "source": null,
        "meeting": {
            "id": "MCMxOTptZWV0aW5nX01UUm1NVFE1TkRZdE1UWXlZaTAwTm1ObExXSTRaVFF0TjJJMU1UWXpNMlJrWVRnM0B0aHJlYWQudjIjMA=="
        }
    },
    "value": {
        "MeetingType": "Scheduled",
        "Title": "asdasd",
        "Id": "MCMxOTptZWV0aW5nX01UUm1NVFE1TkRZdE1UWXlZaTAwTm1ObExXSTRaVFF0TjJJMU1UWXpNMlJrWVRnM0B0aHJlYWQudjIjMA==",
        "JoinUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTRmMTQ5NDYtMTYyYi00NmNlLWI4ZTQtN2I1MTYzM2RkYTg3%40thread.v2/0?context=%7b%22Tid%22%3a%22167c22a9-1b2e-439c-ad74-cc77e9e118d8%22%2c%22Oid%22%3a%2286a23cfc-f78e-424a-8947-7ae0ce242da1%22%7d",
        "EndTime": "2025-10-31T11:38:15.5375726Z"
    },
    "locale": "en-US"
}

Look at casing. Every property is in lower case BUT value object properties which are in upper case.

Thus JsonConverter throws an error:

'JSON deserialization for type 'Microsoft.Teams.Api.Activities.Events.MeetingEndActivityValue' was missing required properties including: 'id', 'meetingType', 'joinUrl', 'title', 'endTime'.'

It's completely blockers. Do you have any fast workaround?
</issue_description>

<agent_instructions>update the meetings types in the Microsoft.Teams.Api package to be PascalCase instead of CamelCase when serializing/deserializing to/from JSON (ie via JsonPropertyNameAttribute).</agent_instructions>

Comments on the Issue (you are @copilot in this section)

@aacebo thanks for the report, I'm reaching out to our platform team to figure out why they are sending the payload in this format, to our knowledge this is the incorrect format using pascal case instead of camel case.

💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI changed the title [WIP] Fix exception during Activity deserialization on meeting events Fix meeting activity deserialization for Teams PascalCase payloads Nov 5, 2025
Copilot finished work on behalf of aacebo November 5, 2025 18:27
Copilot AI requested a review from aacebo November 5, 2025 18:27
@aacebo
Copy link
Collaborator

aacebo commented Nov 5, 2025

I attest that I have verified

@aacebo aacebo marked this pull request as ready for review November 5, 2025 19:40
Copy link
Collaborator

@heyitsaamir heyitsaamir left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not blocking, but this seems like a miss from their end..... why would they adopt this deviation from the norm.... Could be worth asking in TeamSid....

@heyitsaamir
Copy link
Collaborator

Also pls raise PRs in the other repos too 🙏🏽

@rido-min
Copy link
Member

rido-min commented Nov 6, 2025

was this working before? wondering if different Teams client versions, or Rings, might use camelCase for these.

We should have a confirmation from backend folks that this is the expected casing.

@aacebo
Copy link
Collaborator

aacebo commented Nov 7, 2025

@rido-min pinged you in teams with the confirmation thread, also confirmed via BF types that its historically been in Pascal case for some reason... not happy about it but platform can't change it cause that would break people @heyitsaamir https://github.com/microsoft/botbuilder-dotnet/blob/main/libraries/Microsoft.Bot.Schema/Teams/MeetingEventDetails.cs#L46
https://github.com/microsoft/botbuilder-dotnet/blob/main/libraries/Microsoft.Bot.Schema/Teams/MeetingStartEventDetails.cs#L48

@aacebo aacebo requested a review from rido-min November 7, 2025 15:28
@AdamJachocki
Copy link

When it will be fixed? It's blocker for me as stated here: #196

@aacebo
Copy link
Collaborator

aacebo commented Nov 18, 2025

@AdamJachocki sorry for the wait, we are just creating a sample and verifying the change with our backend team before merging and releasing a fix for this. Thank you for your patience!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Exception while deserializing Activity when meeting starts or ends - because of case sensitivity

5 participants