# Before running, install the SSEClient package: pip install sseclient-py
# Or run the script with uv: uv run --with sseclient-py ./script.py
import requests
import json
import sseclient
def fetch_conversation_transcript(conversation_id, api_key):
headers = {
'Authorization': f'Bearer {api_key}',
'Operator-Version': '2025-06-19',
'Accept': 'text/event-stream'
}
# Fetch conversation events via SSE stream
events_url = f'https://api.operator.xyz/conversations/{conversation_id}/events'
response = requests.get(events_url, headers=headers, stream=True)
response.raise_for_status()
transcript = {
'conversation_id': conversation_id,
'messages': [],
'tool_calls': [],
'events': [],
'notices': []
}
# Process SSE events to build transcript
client = sseclient.SSEClient(response)
for sse_event in client.events():
if sse_event.data:
event = json.loads(sse_event.data)
event_type = event.get('payload', {}).get('type')
# User messages
if event_type == 'user.message.received':
transcript['messages'].append({
'role': 'user',
'content': event['payload']['text'],
'timestamp': event['created_at']
})
# Final agent messages (completed only)
elif event_type == 'agent.message.completed':
transcript['messages'].append({
'role': 'agent',
'content': event['payload']['text'],
'generation_id': event['payload']['generation_id'],
'timestamp': event['created_at']
})
# Tool calls (completed only)
elif event_type == 'agent.tool_call.returned':
transcript['tool_calls'].append({
'call_id': event['payload']['call_id'],
'name': event['payload']['name'],
'arguments': event['payload']['arguments'],
'result': event['payload'].get('result'),
'error': event['payload'].get('error'),
'timestamp': event['created_at']
})
# Conversation events
elif event_type in ['conversation.started', 'conversation.ended']:
transcript['events'].append({
'type': event_type,
'timestamp': event['created_at']
})
# Server notices and errors
elif event_type == 'server.error':
transcript['notices'].append({
'type': 'error',
'message': event['payload']['error'],
'timestamp': event['created_at']
})
return transcript
conversation_id = 'your-conversation-id'
api_key = 'your-api-key'
transcript = fetch_conversation_transcript(conversation_id, api_key)
print("\nConversation Transcript:")
for message in transcript['messages']:
if message['role'] == 'user':
print(f"User: {message['content']}")
elif message['role'] == 'agent':
print(f"Agent: {message['content']}")
for tool_call in transcript['tool_calls']:
print(f"Tool: {tool_call['name']} - {tool_call.get('result', tool_call.get('error', 'No result'))}")
for notice in transcript['notices']:
if notice['type'] == 'error':
print(f"Error: {notice['message']}")