Enviar mensaje
Se utiliza esta API para enviar mensajes a un conversation_id especificado y recibir respuestas generadas por el agente. La API admite varios tipos de contenido de mensaje, incluidos texto, imágenes, audio y documentos.
Método de solicitud
POST
Endpoint
https://api-${endpoint}.gptbots.ai/v2/conversation/message
Autenticación
Para obtener instrucciones de autenticación, consulte API Overview (Visión general).
Solicitud
Ejemplo de solicitud
curl -X POST 'https://api-${endpoint}.gptbots.ai/v2/conversation/message' \
-H 'Authorization: Bearer ${API Key}' \
-H 'Content-Type: application/json' \
-d '{
"conversation_id": "686e2646cb8ee942d9a62d79",
"response_mode": "blocking",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "I have uploaded 2 image files, please OCR and return 2 json records."
},
{
"type": "image",
"image": [
{
"base64_content": "<complete_base64_string>",
"format": "jpeg",
"name": "TAXI1"
},
{
"url": "https://gptbots.ai/example.png",
"format": "png",
"name": "TAXI2"
}
]
},
{
"type": "audio",
"audio": [
{
"url": "https://gptbots.ai/example.mp3",
"format": "mp3",
"name": "example1 audio"
}
]
},
{
"type": "document",
"document": [
{
"base64_content": "<complete_base64_string>",
"format": "pdf",
"name": "example pdf"
}
]
}
]
}
],
"conversation_config": {
"long_term_memory": false,
"short_term_memory": false,
"knowledge": {
"data_ids": [
"58c70da0403cc812641b9356",
"59c70da0403cc812641df35a"
],
"group_ids": [
"67c70da0403cc812641b93je",
"69c70da0403cc812641df35f"
]
},
"custom_variables": {
"var_current_url": "https://gptbots.ai/example",
"var_session_id": "abcdef"
}
}
}'
Notas importantes:
- Para los tipos de contenido
image,audioydocument, se puede utilizar codificación base64 o enlaces URL; ambos formatos son compatibles. - En el modo sistema de atención al cliente propio (Custom Helpdesk), los mensajes del agente humano y los mensajes de usuario recibidos durante la transferencia a un agente humano se envían con
ai_response=falseorole=human_agent; solo se archivan y NO activan la IA. Ejemplo:{ "conversation_id": "686e2646cb8ee942d9a62d79", "response_mode": "blocking", "ai_response": false, "human_agent_info": { "name": "Alice", "email": "alice@example.com", "image_url": "https://gptbots.ai/avatar.png" }, "messages": [ { "role": "human_agent", "content": "Hola, le atiende un agente humano. ¿En qué puedo ayudarle?" } ] }{ "conversation_id": "686e2646cb8ee942d9a62d79", "response_mode": "blocking", "ai_response": false, "human_agent_info": { "name": "Alice", "email": "alice@example.com", "image_url": "https://gptbots.ai/avatar.png" }, "messages": [ { "role": "human_agent", "content": "Hola, le atiende un agente humano. ¿En qué puedo ayudarle?" } ] }Este bloque de código en una ventana flotante - Los desarrolladores solo deben enviar el mensaje de usuario más reciente, ya que GPTBots gestiona de forma predeterminada la memoria a corto y largo plazo. Si se necesita personalizar el contexto de memoria a corto plazo, consulte el siguiente ejemplo:"messages": [ { "role": "user", "content": "Hello" //Custom short-term memory }, { "role": "assistant", "content": "Hello! How can I assist you today?" //Custom short-term memory }, { "role": "user", "content": "Hello" //Latest user message }]
"messages": [ { "role": "user", "content": "Hello" //Custom short-term memory }, { "role": "assistant", "content": "Hello! How can I assist you today?" //Custom short-term memory }, { "role": "user", "content": "Hello" //Latest user message }]Este bloque de código en una ventana flotante
Cabeceras de la solicitud
| Campo | Tipo | Descripción |
|---|---|---|
| Authorization | Bearer ${API Key} | Se utiliza Authorization: Bearer ${API Key} para la autenticación. La clave de API se obtiene en la página «API Key». |
| Content-Type | application/json | Tipo de datos; debe ser application/json. |
Parámetros de la solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| conversation_id | string | Sí | Identificador único de la conversación. Se debe proporcionar conversation_id para continuar la conversación. |
| response_mode | string | Sí | Modo de respuesta del agente: |
| messages | matriz JSON | Sí | Contenido del mensaje; admite los roles user, assistant y human_agent para construir el contexto de la conversación.ai_response. |
| ai_response | boolean | No | Indica si la IA responde a este mensaje. De forma predeterminada es true, es decir, si no se envía este campo el comportamiento es idéntico al de las llamadas existentes.false: el mensaje solo se archiva; la IA no responde, tampoco consume tokens ni créditos, y la respuesta es un acuse de recibo ligero.true: la IA responde con normalidad; en el modo sistema de atención al cliente propio (Custom Helpdesk), pasar true de forma explícita también devuelve la conversación a la IA desde el estado de transferencia a un agente humano.false; de lo contrario, equivale a true. |
| human_agent_info | object | No | Información de identidad del agente humano; solo tiene sentido cuando messages contiene role=human_agent (campo de nivel superior, un agente humano por solicitud). |
| name | string | No | Nombre del agente humano. |
| string | No | Correo electrónico del agente humano. | |
| image_url | string | No | URL del avatar del agente humano. |
| conversation_config | object | No | Permite a los desarrolladores ajustar temporalmente el ámbito funcional del agente para esta conversación a fin de cumplir requisitos especiales. |
| short_term_memory | boolean | No | Conmutador de memoria a corto plazo. Permite habilitar o deshabilitar la memoria a corto plazo solo para esta conversación. |
| long_term_memory | boolean | No | Conmutador de memoria a largo plazo. Permite habilitar o deshabilitar la memoria a largo plazo solo para esta conversación. |
| knowledge | object | No | Ámbito de recuperación de conocimiento. Permite personalizar el rango de recuperación de conocimiento solo para esta conversación. Cuando se proporcionan group_ids y data_ids, la recuperación se realiza dentro de la unión de sus bases de conocimiento. Si ambos son matrices vacías, no se recupera ningún conocimiento. Si se omite el parámetro knowledge, se utiliza la configuración de conocimiento predeterminada del agente.group_ids: ID de base de conocimiento, que pueden contener varios documentos de conocimiento.data_ids: ID de los documentos de conocimiento dentro de la base de conocimiento. |
| custom_variables | object | No | Variables personalizadas. Permite a los desarrolladores ajustar temporalmente los valores de las variables personalizadas en el agente solo para esta conversación. |
| thinking | boolean | No | Controla si se devuelve información de Thinking en streaming. |
| tool_call | boolean | No | Controla si se devuelve información de llamada a herramientas en streaming. |
Nota:
Las páginas de configuración de entrada y salida del agente admiten diferentes esquemas de reconocimiento para distintos tipos de mensajes. Los tipos y tamaños de archivo admitidos varían. Se deben ajustar los datos enviados a la API en consecuencia. Formatos de mensaje máximos admitidos:
- Mensaje de texto: string
- Mensaje de audio: .mp3, .wav, .acc
- Mensaje de imagen: .jpg, .jpeg, .png, .gif, .webp
- Mensaje de documento: .pdf, .txt, .docx, .csv, .xlsx, .html, .json, .md, .tex, .ts, .xml, etc.
Respuesta
Ejemplo de respuesta
{
"create_time": 1679587005,
"conversation_id": "657303a8a764d47094874bbe",
"user_id": "65a4ccfc7ce58e728d5897e0",
"anonymous_id": "device_abcdef123456",
"message_id": "65a4ccfC7ce58e728d5897e0",
"output": [
{
"from_component_branch": "1",
"from_component_name": "Component Name",
"content": {
"text": "Hi, is there anything I can help you?",
"audio": [
{
"audio": "http://gptbots.ai/example.mp3",
"transcript": "Transcribed audio content"
}
]
}
}
],
"usage": {
"tokens": {
"total_tokens": 29,
"prompt_tokens": 19,
"prompt_tokens_details": {
"audio_tokens": 0,
"text_tokens": 0
},
"completion_tokens": 10,
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"text_tokens": 0
}
},
"credits": {
"total_credits": 0.0,
"text_input_credits": 0.0,
"text_output_credits": 0.0,
"audio_input_credits": 0.0,
"audio_output_credits": 0.0
}
},
"human_trigger": true
}
Ejemplo de respuesta cuando se activa la transferencia a un agente humano
En el modo sistema de atención al cliente propio (Custom Helpdesk), cuando esta respuesta activa una transferencia a un agente humano, human_trigger es true; si además existe una nota de transferencia, se devuelve adicionalmente un objeto handoff (este campo no aparece cuando no hay ninguna nota).
{
"create_time": 1679587005,
"conversation_id": "657303a8a764d47094874bbe",
"user_id": "65a4ccfc7ce58e728d5897e0",
"anonymous_id": "device_abcdef123456",
"message_id": "65a4ccfC7ce58e728d5897e0",
"output": [
{
"from_component_branch": null,
"from_component_name": "AI Model-1",
"content": {
"text": "Le estamos transfiriendo a un agente humano, espere un momento.",
"audio": null
}
}
],
"usage": {
"tokens": {
"total_tokens": 29,
"prompt_tokens": 19,
"prompt_tokens_details": {
"audio_tokens": 0,
"text_tokens": 19
},
"completion_tokens": 10,
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"text_tokens": 10
}
},
"credits": {
"total_credits": 0.0,
"text_input_credits": 0.0,
"text_output_credits": 0.0,
"audio_input_credits": 0.0,
"audio_output_credits": 0.0
}
},
"human_trigger": true,
"handoff": {
"note": "Motivo de la transferencia: el usuario expresó dos veces seguidas su insatisfacción con el proceso de reembolso y solicitó atención humana.\nResumen de la conversación: el usuario realizó un pedido el 2 de marzo, no recibió ninguna notificación de reembolso tras solicitarlo y ha confirmado el número de pedido 20260302-8891."
}
}
Respuesta correcta (Blocking)
⚠️ En el modo de respuesta blocking, el servicio de transferencia a un agente humano no está disponible al integrar sistemas de atención al cliente humano de terceros como LiveChat o Intercom (los mensajes del agente humano se envían de forma asíncrona y requieren el modo webhook).
Al usar el sistema de atención al cliente propio (Custom Helpdesk) no se aplica esta restricción: la señal de transferencia a un agente humano se devuelve mediantehuman_trigger/handoffen el cuerpo de la respuesta, y los mensajes del agente humano los escribe el propio desarrollador a través de esta misma API conrole=human_agent.
| Campo | Tipo | Descripción |
|---|---|---|
| user_id | string | ID de usuario vinculado por el desarrollador; es null cuando no hay ningún usuario vinculado. |
| anonymous_id | string | ID de usuario anónimo (dispositivo). |
| conversation_id | string | Identificador de la conversación; se debe proporcionar conversation_id para continuar la conversación. |
| message_id | string | Identificador único de un mensaje dentro de una conversación. |
| create_time | long | Marca de tiempo de cuando se generó este mensaje de respuesta. |
| output | matriz JSON | Contenido de la respuesta del agente. |
| from_component_branch | string | Rama de FlowAgent. |
| from_component_name | string | Nombre del componente ascendente en FlowAgent. |
| content | object | Contenido del mensaje respondido por el agente de IA; actualmente incluye dos tipos de mensajes: text y audio. |
| human_trigger | boolean | Indica si esta respuesta activó una transferencia a un agente humano. Es false cuando no se activa. |
| handoff | object | Información de transferencia a un agente humano; solo aparece cuando human_trigger es true y existe una nota de transferencia. |
| note | string | Nota de transferencia (motivo de la transferencia + resumen de la conversación), hasta 2000 caracteres. |
| ai_response | boolean | Se refleja en el acuse de recibo de las solicitudes de solo archivado (ai_response=false o que contienen role=human_agent) para confirmar que el mensaje se ha reconocido como «solo archivado». |
| sender_role | string | Se refleja en el acuse de recibo de las solicitudes de solo archivado; su valor es human_agent o user, para confirmar el rol del mensaje archivado. |
| usage | object | Detalles del consumo de recursos. |
| tokens | matriz JSON | Total de tokens consumidos por el agente en esta conversación. |
| total_tokens | integer | Total de tokens consumidos, tanto de entrada como de salida, en esta conversación. |
| prompt_tokens | integer | Total de tokens consumidos para la entrada en esta conversación. |
| completion_tokens | integer | Total de tokens consumidos para la salida en esta conversación. |
| prompt_tokens_details | object | Desglose detallado del consumo de tokens de entrada. |
| completion_tokens_details | object | Desglose detallado del consumo de tokens de salida. |
| credits | object | Total de créditos consumidos por el agente en esta conversación. |
| text_input_credits | double | Créditos consumidos por mensajes de texto de entrada en esta conversación. |
| text_output_credits | double | Créditos consumidos por mensajes de texto de salida en esta conversación. |
| audio_input_credits | double | Créditos consumidos por mensajes de audio de entrada en esta conversación. |
| audio_output_credits | double | Créditos consumidos por mensajes de audio de salida en esta conversación. |
Respuesta correcta (Streaming)
⚠️ En el modo de respuesta streaming, el servicio de transferencia a un agente humano no está disponible al integrar sistemas de atención al cliente humano de terceros como LiveChat o Intercom (los mensajes del agente humano se envían de forma asíncrona y requieren el modo webhook).
Al usar el sistema de atención al cliente propio (Custom Helpdesk) no se aplica esta restricción: la activación de la transferencia a un agente humano se envía como un framecode:36 HumanTrigger, y la nota de transferencia le sigue inmediatamente como un framecode:107 HumanHandoffNote.
| Campo | Tipo | Descripción |
|---|---|---|
| code | int | Código del tipo de mensaje: 3-Text, 10-FlowAgent output, 0-End, 4-Usage data, 39-Audio message, 5-Tool Call Request, 6-Tool Call Response, 41-Thinking, 36-Activación de transferencia a un agente humano, 107-Nota de transferencia a un agente humano. |
| message | string | Tipo de mensaje: Text, FlowOutput, End, HumanTrigger, HumanHandoffNote. |
| data | object | Contenido de la respuesta. |
- Ejemplo de transmisión de mensaje de texto:
{"code":11,"message":"MessageInfo","data":{"message_id":"6785dba0f06d872bff9ee347"}}
{"code":3,"message":"Text","data":"How "}
{"code":3,"message":"Text","data":"can "}
{"code":3,"message":"Text","data":"I "}
{"code":3,"message":"Text","data":"help "}
{"code":3,"message":"Text","data":"you?"}
{"code":0,"message":"End","data":null}
- Ejemplo de transmisión de mensaje de audio:
{"code":11,"message":"MessageInfo","data":{"message_id":"67b857b6be1f2906861a5e75"}}
{"code":39,"message":"Audio","data":{"audioAnswer":"","transcript":"Hello"}}
{"code":39,"message":"Audio","data":{"audioAnswer":"EQAUAA0...IA3bi","transcript":""}}
{"code":0,"message":"End","data":null}
- En el modo sistema de atención al cliente propio (Custom Helpdesk), cuando se activa una transferencia a un agente humano, el frame de activación de la transferencia y el frame de la nota de transferencia se envían en orden, antes del frame
End:
{"code":3,"message":"Text","data":"Le estamos transfiriendo a un agente humano, espere un momento."}
{"code":36,"message":"HumanTrigger","data":"HumanTrigger"}
{"code":107,"message":"HumanHandoffNote","data":{"note":"Motivo de la transferencia: el usuario expresó dos veces seguidas su insatisfacción con el proceso de reembolso y solicitó atención humana.\nResumen de la conversación: el usuario realizó un pedido el 2 de marzo, no recibió ninguna notificación de reembolso tras solicitarlo y ha confirmado el número de pedido 20260302-8891."}}
{"code":0,"message":"End","data":null}
Nota:
code: 36, message: "HumanTrigger"significa que esta respuesta activó una transferencia a un agente humano;dataes una cadena de identificación fija.code: 107, message: "HumanHandoffNote"es la nota de transferencia; su estructuradatacoincide con el campohandoffde la respuesta blocking ({"note": "..."}).- El frame
HumanHandoffNotesolo se envía cuando existe una nota de transferencia; si no hay ninguna nota, solo aparece el frameHumanTriggery no se genera ningún frame107vacío. - Ambos frames se envían siempre antes del frame
End(code: 0).
Respuesta correcta (Webhook)
Después de configurar la dirección del webhook en la sección «Integration-API», el sistema GPTBots enviará los mensajes de «respuesta del Agent» y «respuesta del servicio de atención humana» a la dirección del webhook.
Para obtener información detallada sobre los mensajes del webhook, consulte Recepción de mensajes por webhook y servicio de transferencia a un agente humano.
⚠️ En el modo API, si se habilita el servicio de transferencia a un agente humano, debe utilizar el modo de respuesta webhook para poder recibir los mensajes de respuesta del servicio de atención humana.
Respuesta de error
| Campo | Tipo | Descripción |
|---|---|---|
| code | int | Código de error. |
| message | string | Detalles del error. |
Ejemplo de error
{
"code": 40000,
"message": "Parámetros no válidos",
"errors": [
{
"error_code": 40000,
"error_message": "Message user role type must have file or content."
}
],
"data": {
"create_time": 1679587005,
"conversation_id": "657303a8a764d47094874bbe",
"user_id": "65a4ccfc7ce58e728d5897e0",
"anonymous_id": "device_abcdef123456",
"message_id": "65a4ccfC7ce58e728d5897e0",
"output": [
{
"from_component_branch": "1",
"from_component_name": "Component Name",
"content": {
"text": "Se ha respondido según el contenido reconocible……",
"audio": null
}
}
],
"usage": {
"tokens": {
"total_tokens": 29,
"prompt_tokens": 19,
"prompt_tokens_details": {
"audio_tokens": 0,
"text_tokens": 0
},
"completion_tokens": 10,
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"text_tokens": 0
}
},
"credits": {
"total_credits": 0,
"text_input_credits": 0,
"text_output_credits": 0,
"audio_input_credits": 0,
"audio_output_credits": 0
}
}
}
}
Códigos de error
| Código | Mensaje |
|---|---|
| 40000 | Parámetros no válidos |
| 40127 | Error de autenticación del desarrollador |
| 40356 | La conversación no existe |
| 40358 | Incoherencia del ID de conversación |
| 40364 | El agente no admite la modalidad de imagen |
| 50000 | Error interno del sistema |
| 20040 | Se ha superado el límite de longitud de la pregunta |
| 20022 | Créditos insuficientes |
| 20055 | Uso de la API prohibido; asegúrese de que el conmutador de API está habilitado |
