Skip to content

fix(api): conditionally set citation encodingFormat based on text presence#579

Merged
corinagum merged 2 commits into
microsoft:mainfrom
chonlaphoom:fix/citation-encoding-format
Jun 4, 2026
Merged

fix(api): conditionally set citation encodingFormat based on text presence#579
corinagum merged 2 commits into
microsoft:mainfrom
chonlaphoom:fix/citation-encoding-format

Conversation

@chonlaphoom

@chonlaphoom chonlaphoom commented May 15, 2026

Copy link
Copy Markdown
Contributor

While following the citations example (https://microsoft.github.io/teams-sdk/typescript/in-depth-guides/ai/best-practices) (which calls addCitation without text), I encountered a BadSyntax error: citation.appearance.text and citation.appearance.encodingFormat must either both be empty or both have values. This happens because encodingFormat was unconditionally set to 'application/vnd.microsoft.card.adaptive', even when text was omitted

Summary

Fixes BadSyntax error when addCitation is called without text.

Problem

Calling addCitation(position, appearance) without appearance.text causes a 400 error:

code: "BadSyntax"
message: "Error while parsing citation entity with id: x"
Detail: "citation.appearance.text and citation.appearance.encodingFormat must either both be empty or both have values"

The root cause: encodingFormat was hardcoded to 'application/vnd.microsoft.card.adaptive' unconditionally, but the Teams API requires it to be absent when text is absent.

Fix

Changed encodingFormat to be set only when appearance.text is truthy:

encodingFormat: appearance.text ? 'application/vnd.microsoft.card.adaptive' : undefined,

The encodingFormat field must be present only when citation text is provided,
otherwise Teams API returns a BadSyntax error.
Copilot AI review requested due to automatic review settings May 15, 2026 16:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes citation payload construction so encodingFormat is only populated when citation text is present, avoiding Teams API BadSyntax responses for citations without adaptive card text.

Changes:

  • Conditionally sets citation encodingFormat based on appearance.text.
  • Updates addCitation tests to cover text/no-text behavior and icon handling.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
packages/api/src/activities/activity.ts Updates citation appearance construction to avoid setting encodingFormat without text.
packages/api/src/activities/activity.spec.ts Adjusts and expands addCitation test cases for encoding format behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@chonlaphoom chonlaphoom changed the title fix: conditionally set citation encodingFormat based on text presence fix(api): conditionally set citation encodingFormat based on text presence May 21, 2026

@corinagum corinagum left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM! Thank you for the contribution!

@corinagum
corinagum added this pull request to the merge queue Jun 4, 2026
Merged via the queue into microsoft:main with commit 78aa554 Jun 4, 2026
3 checks passed
corinagum added a commit that referenced this pull request Jun 15, 2026
## Release 2.0.13

Merges main into release for stable publish.

### Notable changes since 2.0.12
- fix(client): use explicit Graph scopes for Teams Desktop NAA
compatibility (#616)
- ci: switch publish pipeline to 1ES Official template for CodeQL/SDL
(#607)
- ci: add weekly SDL pipeline for CodeQL/CredScan compliance (#608)
- Refresh teams.apps README (#604)
- Reject unauthenticated when no credentials (#506)
- fix(api): conditionally set citation encodingFormat based on text
presence (#579)
- Improvements to the Teams MCP server example (#597)
- Bump MSAL Node to v5 (#603)
- Merge root message entities in Activity (#590)
- TeamsSDK: Correct imports and return types in misc. packages (#589)
- Cache federated identity MSAL clients (#613)

### Release steps
1. Merge this PR
2. Trigger the [release
pipeline](https://dev.azure.com/DomoreexpGithub/Github_Pipelines/_build?definitionId=52&_a=summary)
for `release` branch with **Public** publish type
3. Bump version on main to `2.0.14-preview.{height}`
4. Create git tag and GitHub Release page
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.

3 participants