Protocolos de transferencia a agentes humanos
Detección de activadores de transferencia y traspaso fluido a agentes humanos.
Protocolos de transferencia a agentes humanos es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.
¿Cuándo debe un agente transferir la conversación?
No todas las conversaciones deben ser gestionadas de principio a fin por un agente de IA. Saber cuándo transferir la conversación es tan importante como saber responder. Estos son algunos desencadenantes habituales:
- El cliente solicita explícitamente hablar con una persona
- Se detecta enfado o angustia
- La situación es compleja o ambigua y queda fuera del alcance del agente
- Existe sensibilidad legal, de seguridad o de cumplimiento normativo
Detección de desencadenantes de transferencia
Utilice un clasificador basado en un LLM para detectar desencadenantes de transferencia en tiempo real. Compruébelos en cada turno del agente, no solo en el primer mensaje.
import openai, json
client = openai.OpenAI(api_key='YOUR_OPENAI_KEY')
def should_handoff(message: str, history: list[dict]) -> dict:
context = '\n'.join(f"{m['role']}: {m['content']}" for m in history[-4:])
prompt = (
f'Conversation context:\n{context}\n'
f'Latest message: "{message}"\n'
f'Should this be handed to a human agent? Reasons: '
f'angry_customer, explicit_human_request, complex_issue, legal_risk, other.\n'
f'JSON: {{"handoff": true/false, "reason": "..."}}'
)
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}],
response_format={'type': 'json_object'}
)
return json.loads(resp.choices[0].message.content)Transferencia asistida frente a transferencia en frío
Existen dos estilos de transferencia:
- Transferencia asistida: el agente se presenta a sí mismo y presenta al cliente al agente humano, resume la conversación y espera a que la persona confirme antes de finalizar.
- Transferencia en frío: la conversación se transfiere con un resumen de la transcripción y el agente se desconecta de inmediato.
Las transferencias asistidas reducen la frustración del cliente, pero requieren que haya una persona disponible en tiempo real.
Generación del resumen de la conversación
Antes de transferir la conversación, el agente genera un resumen estructurado. Este resumen se muestra a la persona encargada como contexto, lo que evita que el cliente tenga que repetir la información.
def generate_handoff_summary(history: list[dict]) -> str:
transcript = '\n'.join(
f"{m['role'].upper()}: {m['content']}" for m in history
)
prompt = (
f'Summarize this support conversation for a human agent.\n'
f'Include: customer issue, what was tried, current status, and urgency level.\n'
f'Be brief (3-5 sentences).\n\n'
f'TRANSCRIPT:\n{transcript}'
)
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return resp.choices[0].message.content
summary = generate_handoff_summary([
{'role': 'user', 'content': 'My account was charged twice for January'},
{'role': 'assistant', 'content': 'I can look into that for you...'}
])
print(summary)Creación de un ticket de Zendesk durante la transferencia
Al transferir la conversación, cree un ticket de Zendesk con el resumen y la transcripción completa. La persona encargada abre el ticket y obtiene el contexto de inmediato.
import requests
ZENDESK_DOMAIN = 'yourcompany.zendesk.com'
ZENDESK_TOKEN = 'YOUR_ZENDESK_API_TOKEN'
ZENDESK_EMAIL = 'agent@yourcompany.com'
def create_zendesk_ticket(customer_email: str, subject: str,
summary: str, transcript: str) -> str:
payload = {
'ticket': {
'subject': subject,
'comment': {'body': f'AI Agent Summary:\n{summary}\n\nFull Transcript:\n{transcript}'},
'requester': {'email': customer_email},
'tags': ['ai_handoff'],
'priority': 'high'
}
}
resp = requests.post(
f'https://{ZENDESK_DOMAIN}/api/v2/tickets.json',
json=payload,
auth=(f'{ZENDESK_EMAIL}/token', ZENDESK_TOKEN)
)
resp.raise_for_status()
return str(resp.json()['ticket']['id'])Transferencia de conversaciones en Intercom
Con Intercom, transfiera la conversación asignándola a un equipo o agente específico mediante la API de Intercom. La persona encargada recibe una notificación con la conversación lista para continuar.
import requests
INTERCOM_TOKEN = 'YOUR_INTERCOM_ACCESS_TOKEN'
def handoff_to_intercom_team(conversation_id: str, team_id: str,
note: str) -> bool:
headers = {
'Authorization': f'Bearer {INTERCOM_TOKEN}',
'Content-Type': 'application/json'
}
# Add a note with the AI summary
requests.post(
f'https://api.intercom.io/conversations/{conversation_id}/parts',
headers=headers,
json={'type': 'note', 'body': note}
)
# Assign to human team
resp = requests.put(
f'https://api.intercom.io/conversations/{conversation_id}/parts',
headers=headers,
json={'type': 'assignment', 'assignee_id': team_id,
'message_type': 'assignment'}
)
return resp.status_code == 200El mensaje de transferencia para el cliente
Es importante el mensaje que recibe el cliente durante la transferencia. Debe reconocer la transferencia, establecer expectativas sobre el tiempo de espera y transmitir que el problema se está tratando con seriedad.
def generate_handoff_message(reason: str, wait_minutes: int = 5) -> str:
messages = {
'explicit_human_request':
f'Of course! I am connecting you with a human agent right now. '
f'Estimated wait: {wait_minutes} minutes. Your conversation history '
f'has been shared so you will not need to repeat anything.',
'angry_customer':
f'I completely understand your frustration. Let me get a senior '
f'team member on the line immediately. Wait: ~{wait_minutes} min.',
'complex_issue':
f'This situation needs specialist attention. I am escalating now '
f'and sharing all the context we have discussed. Wait: ~{wait_minutes} min.',
'legal_risk':
f'This matter requires our compliance team. Connecting you now.'
}
return messages.get(reason, f'Connecting you with a human agent. ~{wait_minutes} min wait.')
if __name__ == '__main__':
print(generate_handoff_message('angry_customer', wait_minutes=3))
print(generate_handoff_message('explicit_human_request'))
Puesta en cola cuando no hay ninguna persona disponible
Fuera del horario laboral o durante periodos de gran volumen, puede que no haya ninguna persona disponible de inmediato. Ponga la transferencia en cola, envíe al cliente una confirmación con un número de referencia y notifique al personal de guardia mediante Slack o PagerDuty.
import requests
SLACK_WEBHOOK = 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL'
def notify_on_call(ticket_id: str, summary: str, priority: str):
payload = {
'text': f'*New AI Handoff* [{priority.upper()}]',
'attachments': [{
'color': '#ff0000' if priority == 'high' else '#ffcc00',
'fields': [
{'title': 'Ticket ID', 'value': ticket_id, 'short': True},
{'title': 'Summary', 'value': summary[:500]}
]
}]
}
requests.post(SLACK_WEBHOOK, json=payload)Comportamiento del agente después de la transferencia
Después de activar una transferencia, el agente debe dejar de intentar resolver el problema. Puede seguir respondiendo preguntas sobre hechos concretos (estado del pedido, enlaces a políticas), pero no debe asumir compromisos ni tomar decisiones.
def agent_post_handoff_response(message: str, handoff_complete: bool) -> str:
if not handoff_complete:
return 'Connecting you now...'
# Still answer simple factual questions
simple_keywords = ['status', 'where', 'when', 'policy', 'link']
if any(kw in message.lower() for kw in simple_keywords):
return 'I can help with that while you wait for the agent.'
# Defer everything else
return (
'Your case has been assigned to a specialist. '
'They will respond shortly. I will step back to avoid confusion.'
)
if __name__ == '__main__':
print(agent_post_handoff_response('Where is my order?', handoff_complete=True))
print(agent_post_handoff_response('I want a refund now', handoff_complete=True))
Seguimiento de las métricas de transferencia
Mida la tasa de transferencias, la distribución de motivos y el tiempo de resolución posterior a la transferencia. Una tasa alta de transferencias para una intención específica indica que el agente necesita una mejor cobertura para ese tema.
from collections import Counter
import json
handoff_log = [] # In production: a database table
def record_handoff(session_id: str, reason: str, turn_number: int):
handoff_log.append({
'session_id': session_id,
'reason': reason,
'turns_before_handoff': turn_number
})
def handoff_analytics() -> dict:
reasons = Counter(h['reason'] for h in handoff_log)
avg_turns = sum(h['turns_before_handoff'] for h in handoff_log) / max(len(handoff_log), 1)
return {
'total_handoffs': len(handoff_log),
'reason_breakdown': dict(reasons),
'avg_turns_before_handoff': round(avg_turns, 1)
}
if __name__ == '__main__':
record_handoff('s1', 'angry_customer', 4)
record_handoff('s2', 'complex_issue', 7)
record_handoff('s3', 'angry_customer', 2)
stats = handoff_analytics()
print(f"Total handoffs: {stats['total_handoffs']}")
print(f"Reasons: {stats['reason_breakdown']}")
print(f"Avg turns before handoff: {stats['avg_turns_before_handoff']}")
Orquestación completa de la transferencia
Combine todos los pasos en una función execute_handoff() que el agente llame cuando detecte un desencadenante.
def execute_handoff(session: dict, reason: str) -> str:
# 1. Generate summary
summary = generate_handoff_summary(session['history'])
transcript = '\n'.join(
f"{m['role']}: {m['content']}" for m in session['history']
)
# 2. Create ticket
ticket_id = create_zendesk_ticket(
session['customer_email'],
f'AI Handoff: {reason}',
summary,
transcript
)
# 3. Notify on-call team
notify_on_call(ticket_id, summary, priority='high')
# 4. Record metrics
record_handoff(session['id'], reason, len(session['history']))
# 5. Return customer-facing message
wait = 5 # fetch from queue depth in production
return generate_handoff_message(reason, wait)¿Cuál es la diferencia principal entre una transferencia asistida y una transferencia en frío?
Elegir el estilo de transferencia adecuado afecta a la experiencia del cliente y a la complejidad operativa. Comprender la diferencia le ayuda a implementar el protocolo apropiado.
Repaso de los protocolos de transferencia a una persona
Una transferencia eficaz requiere: detectar desencadenantes (enfado, solicitud explícita o complejidad), generar un resumen para la persona encargada, crear un ticket en Zendesk o Intercom con la transcripción completa, notificar al personal de guardia y dar al cliente un mensaje claro sobre qué puede esperar.
Después de la transferencia, el agente se retira y deja todas las decisiones en manos de la persona encargada.
Preguntas frecuentes
¿La lección «Protocolos de transferencia a agentes humanos» es gratis?
Sí — el texto completo de «Protocolos de transferencia a agentes humanos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.
¿Qué aprenderé en «Protocolos de transferencia a agentes humanos»?
Detección de activadores de transferencia y traspaso fluido a agentes humanos. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AI Agents?
No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Protocolos de transferencia a agentes humanos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AI Agents?
Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Enrutamiento de tickets y lógica de escalado
- Integración con CRM: Salesforce y HubSpot
- Protocolos de transferencia a agentes humanos
- Gestión del contexto y el historial del cliente