microsoft/semantic-kernel · error · AgentInvokeException
No response from DirectLine Bot.
Error message
No response from DirectLine Bot.
What it means
An AgentInvokeException raised in get_response() when invoke() yields zero response messages. The method collects all streamed responses; if none arrive it cannot return a ChatMessageContent and aborts. This typically means the bot produced no message activities meeting the filter criteria (non-user 'message'/'bot' role activities).
Source
Thrown at python/samples/demos/copilot_studio_agent/src/direct_line_agent.py:99
raise AgentInvokeException("Exception occurred while fetching token.") from ex
@trace_agent_get_response
@override
async def get_response(
self,
history: ChatHistory,
arguments: dict[str, Any] | None = None,
**kwargs: Any,
) -> ChatMessageContent:
"""
Get a response from the DirectLine Bot.
"""
responses = []
async for response in self.invoke(history, arguments, **kwargs):
responses.append(response)
if not responses:
raise AgentInvokeException("No response from DirectLine Bot.")
return responses[0]
@trace_agent_invocation
@override
async def invoke(
self,
history: ChatHistory,
arguments: dict[str, Any] | None = None,
**kwargs: Any,
) -> AsyncIterable[ChatMessageContent]:
"""
Send the latest message from the chat history to the DirectLine Bot
and yield responses. This sends the payload after ensuring that:
1. The token is fetched.
2. A conversation is started.
3. The activity payload is posted.
4. Activities are polled until an event "DynamicPlanFinished" is received.View on GitHub (pinned to c028a0c7dc)
Solutions
- Inspect the raw activities collected during invoke (enable debug logging) to see what roles/types arrived.
- Verify the conversation is live and the posted activity was accepted (check the post-activity response).
- Confirm the bot is configured to reply with message-type activities from a non-user role.
Example fix
// before
responses = []
async for response in self.invoke(history, arguments, **kwargs):
responses.append(response)
if not responses:
raise AgentInvokeException("No response from DirectLine Bot.")
// after # log raw activities for diagnosis first
responses = []
async for response in self.invoke(history, arguments, **kwargs):
responses.append(response)
if not responses:
logger.debug("Raw response_data was: %s", last_response_data)
raise AgentInvokeException("No response from DirectLine Bot.") Defensive patterns
Strategy: try-catch
Try / catch
try:
resp = await agent.get_response(history)
except AgentInvokeException as e:
if "No response" in str(e):
logger.warning("Bot produced no message activities; check filters/role mapping.")
raise Prevention
- Log all raw activities during invoke to confirm role/type filtering isn't dropping valid replies.
- Verify the conversation is live before calling get_response.
When it happens
Trigger: self.invoke(history) completes its async iteration producing an empty list — the bot returned only non-message activities, only user-originated activities, or ended without any reply.
Common situations: The DirectLine bot didn't process the activity (conversation desync); the DynamicPlanFinished event fired but no assistant message preceded it; role filtering dropped all activities because 'from.role' was unexpected.
Related errors
- Invalid response from DirectLine Bot.\n{response_data}
- No token received from token generation.
- Failed to generate token using bot_secret.
- No token received.
- Failed to fetch token from token endpoint.
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/7cb1677932e27d04.
Report an issue: GitHub.