Announcements
"Authenticate with Microsoft" leverages the user's own token to access SharePoint, resulting in better content extraction. In contrast, manual authentication uses an app-level token, which leads to a lower-quality search—especially with complex tables or merged cells.
Recommended approach: Continue using "Authenticate with Microsoft" and pass the language parameter through Direct Line using channelData. When the conversation starts, send a custom event (such as setLanguage) and set up a Copilot Studio topic that is triggered by this event to store the language in a global variable. This variable can then be used for the conversation starter message.
This method maintains high-quality SharePoint search results and supports multilingual needs, so there's no need to switch to manual authentication.
Hello SK-11031031-0 , Retain manual authentication for the Token Endpoint, but include SSO token exchange so SharePoint queries continue to use the user's identity, ensuring the same quality as "Authenticate with Microsoft."
Implementation: In your WebChat code, obtain a user token using MSAL, then intercept the OAuth card from Copilot and perform a silent token exchange:
// Intercept OAuth card in store middleware if (activity.attachments?.[0]?.contentType === 'application/vnd.microsoft.card.oauth') { directLine.postActivity({ type: 'invoke', name: 'signin/tokenExchange', value: { token: msalUserToken, connectionName: connectionName } }).subscribe(); }
This approach enables manual authentication at the Token Endpoint, language passing, and high-quality SharePoint search using user-delegated permissions through SSO. Be sure to configure the Token exchange URL in Copilot Studio's authentication settings and expose an API with the access_as_user scope in your Azure AD app registration.
Send the Appian-selected language through __startConversationMessage; auth remains enabled.
Iframe URL (Appian-bound):
…/webchat?__startConversationMessage= {"type":"event","name":"StartConversation","value":{"language":"fr-FR"}}
(URL-encode the JSON, and rebind it when the language changes so the iframe reloads.)
In Copilot Studio – Conversation Start topic:
Why: System.User.Language uses the browser locale, which won’t match the in-app language Appian users choose. __startConversationMessage lets you pass the correct one without DirectLine or manual auth.
Under review
Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.
Jump in, show your community spirit, and win prizes!
Expanding mentorship, skilling, and AI innovation
These are the community rock stars!
Stay up to date on forum activity by subscribing.
Valantis 277
11manish 206
sannavajjala87 156 Super User 2026 Season 1