onSummary

View as MarkdownOpen in Claude

Lifecycle hook invoked when a post-prompt summary is received after a conversation ends. Override this method in a subclass to process summaries — for example, saving them to a CRM, triggering follow-up workflows, or logging call outcomes.

A post-prompt must be configured via setPostPrompt() for summaries to be generated.

The default implementation does nothing. You must override it in a subclass or set a setPostPromptUrl() to receive summaries at an external endpoint.

Parameters

summary
Record<string, unknown> | nullRequired

The summary object generated by the AI based on your post-prompt instructions. null if no summary could be extracted from the response.

rawData
Record<string, unknown>Required

The complete raw POST data from the post-prompt request, including metadata like call_id and the full AI response.

Returns

void | Promise<void>

Example

import { AgentBase } from '@signalwire/sdk';
class SupportAgent extends AgentBase {
constructor() {
super({ name: 'support', route: '/support' });
this.setPromptText('You are a helpful customer support agent.');
this.setPostPrompt(`
Summarize this call as JSON:
- intent: caller's primary intent
- resolved: yes/no/partial
- sentiment: positive/neutral/negative
`);
}
override async onSummary(
summary: Record<string, unknown> | null,
rawData: Record<string, unknown>,
): Promise<void> {
if (summary) {
const callId = (rawData.call_id as string) ?? 'unknown';
console.log(`Call ${callId} summary:`, summary);
// await saveToDatabase(callId, summary);
}
}
}
const agent = new SupportAgent();
await agent.serve();