Copilot Studio Friction
Chat shows raw JSON instead of an answer
Last verified
Details & related
Assessment
- Confidence
- Confirmed officialConfirmed by Microsoft documentation or an official statement.
- Severity
- Degrading
- Typical time lost
- Hours
Identification
Verification & changes
Verified
Doc check by human: Official HTTP-node and list-of-results docs plus practitioner tutorial re-read during seed migration; parse requirement still documented.
Change
Provisionally approved by the Product Owner; external LLM quality review pending.
Change
Initial record created from the seed dossier (migration wave 1).
Are you in the right place?
- Your agent calls a tool, a connector, an HTTP request, or a flow.
- The chat shows the result as raw JSON, with braces, quotes, and field names.
- The data inside the JSON is correct — it is only unreadable.
- Or: the parsing worked before and now fails, although you changed nothing.
If users see {"explanation_of_tool_call": …} only in production → see Raw explanation_of_tool_call JSON visible.
That JSON is orchestrator metadata, not a tool result.
If a prompt fails with "A JSON could not be generated. Edit your prompt instruction…" → see "A JSON could not be generated".
If the flow's output never arrives at all → see "No output was received from flow".
What's happening
Cause 1: The result was never parsed. Tools, connectors, HTTP requests, and flows return results as plain text. Copilot Studio does not turn that text into fields on its own. When a message node shows the raw variable, users see the JSON as-is. Think of a letter that arrives still inside its envelope: the content is there, but nobody opened it. A Parse value node opens the envelope and turns the text into named fields.
Cause 2: Parsing broke after an upstream API change. The node's schema comes from one pasted sample. That sample schema is frozen; it never updates itself. When the API behind the tool changes its structure, the parsing breaks silently. You changed nothing — and the chat falls back to raw or broken output.
For technicians
The HTTP request node's error response variable is typed Any and needs Parse value before use. Flow outputs arrive as strings; using them as question options requires parsing the JSON into a table first. Even Microsoft's own list-of-results tutorial inserts a Parse JSON step with a manually pasted schema. The sample-derived schema freezes one structural snapshot of the upstream API. There is no schema-drift alarm; an upstream change surfaces only as broken output in the chat.
How to fix it
Solution 1
Official workaroundAdd a Parse value node right after the action
- Run the tool or action once and copy the raw JSON from the chat.
- Open the topic that calls the action.
- Select "+" directly after the action node.
- Select "Variable management" → "Parse value".
- In the node, pick the action's output variable as the value to parse.
- Set the data type to "From sample data".
- Select "Get schema from sample JSON" and paste the copied sample.
- Save the parsed result into a new variable.
- Point your message node at the parsed fields, not at the raw variable.
✅ You should now see: readable fields in the chat instead of raw JSON.
Solution 2
Community workaroundRe-pull the sample schema after an upstream change
Use this when the parsing worked before and broke without any change on your side.
- Call the API or flow once, outside the agent, and copy a fresh response sample.
- Open the existing "Parse value" node.
- Select "Get schema from sample JSON" again.
- Paste the fresh sample and confirm the derived schema.
- Check every later node that reads the parsed fields; renamed fields need re-mapping.
✅ You should now see: parsed fields filled with current data again.
Check that it worked
If it didn't work
- The upstream API changed. This is the most common relapse. The frozen sample schema no longer matches reality. Re-pull the schema from a fresh sample, as in the second solution.
- You parsed the wrong variable. Check that the Parse value node reads the action's output, not another variable.
- The sample was incomplete. A sample missing optional fields derives a schema without them. Capture a sample from a response that contains every field you need.
- The channel still runs your old agent version. Publish and propagation delay is suspect number one. See Teams answers with an old version of your agent.
Prevent it next time
- Follow Parse value discipline: a Parse value node after every tool, connector, or HTTP action.
- Treat every upstream API change as a schema review trigger; re-pull the sample before users see broken output.
- Note next to the topic which API version each sample came from.
Evidence
Official documentationlearn.microsoft.com
The HTTP request node's error response variable is typed Any and must be converted with a Parse value node before it can be used.
Official documentationlearn.microsoft.com
Even Microsoft's own list-of-results tutorial requires a Parse JSON step with a manually pasted schema before flow data becomes usable.
MVP blogippu-biz.com
A connector returns correct data, but the chat shows raw JSON until a Parse value node with a sample-derived schema is added after the action.