Esta integración permite a su equipo chatear con sus clientes a través de cualquier canal de mensajería mediante una implementación personalizada.
Conexión de un canal personalizado
Paso 1: Vaya a Configuración > Canales
Paso 2: Haz clic en Agregar canal > Canal personalizado > Conectar
Paso 3: Ingrese la URL del Webhook de destino donde se enviarán los mensajes salientes.
Paso 4: Seleccione el tipo de ID para el canal > haga clic en Siguiente
Los tipos de identificación se utilizan para la identificación del usuario y se utilizan para comunicarse con su servidor de integración personalizado.
Hay dos tipos de identificaciones disponibles:
Número de teléfono: use esto si el proveedor de servicios de mensajería reconoce los contactos en función de su número de teléfono.
Formato de muestra:
+60177872890
ID personalizado: use esto si el proveedor de servicios de mensajería reconoce los contactos según una identificación generada personalizada.
La longitud máxima de caracteres es 50.
AZ,az,0-9,_,=,+,/y@están permitidos.
Paso 5: El siguiente cuadro de diálogo proporcionará elID del canal, elToken de APIy laURL del webhook, por ejemplo
ID del canal:
gfd8g7fd89dgfdToken API:
aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasdURL del webhook:
https://app.respond.io/custom/channel/webhook/El uso de un tipo de ID de número de teléfono le permite iniciar una conversación y enviar el primer mensaje a un contacto.
Pasar mensajes a respond.io
La URL del webhook se utiliza para publicar los Mensajes, los Ecos de mensajería y los Recibos de mensajería en la plataforma respond.io.
El código proporcionado activará el webhook en respond.io, creando un contacto si es necesario y guardando el mensaje en ese contacto.
Muestra para mensajes
curl -X POST \\
https://app.respond.io/custom/channel/webhook/ \\
-H 'autorización: Portador aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \\
-H 'control de caché: sin caché' \\
-H 'tipo de contenido: aplicación/json' \\
-d '{
"channelId": "gfd8g7fd89dgfd",
"contactId": "+60177872890",
"eventos": \[
{
"tipo": "mensaje",
"mId": "xcvzzxcxczxczxc",
"marca de tiempo": 2132131321000,
"mensaje": {
"tipo": "texto",
"texto": "Hola mundo"
}
}
\],
"contacto": {
"nombre": "John",
"apellido": "Doe",
"foto de perfil": "<https://static.independent.co.uk/s3fs-public/thumbnails/image/2015/07/08/14/pic.jpg>",
, "código de país": "MI",
, "correo electrónico": "john@respond.io",
, "teléfono": "+60177872890",
, "idioma": "es"
}
}'Muestra para ecos de mensajería
curl -X POST \\
https://app.respond.io/custom/channel/webhook/ \\
-H 'autorización: Portador aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \\
-H 'control de caché: sin caché' \\
-H 'tipo de contenido: aplicación/json' \\
-d '{
"channelId": "gfd8g7fd89dgfd",
"contactId": "+60177872890",
"events": \[
{
"type": "mensaje_echo",
"mId": "xcvzzxcxczxczxc",
"marca de tiempo": 2132131321000,
"mensaje": {
"tipo": "texto",
"texto": "Hola mundo"
}
}
\],
"contacto": {
"nombre": "John",
"apellido": "Doe",
"foto de perfil": "<https://static.independent.co.uk/s3fs-public/thumbnails/image/2015/07/08/14/pic.jpg>",
"código de país": "MY",
"correo electrónico": "john@respond.io",
"teléfono": "+60177872890",
"idioma": "en"
}
}'Ejemplo de recibos de mensajería
curl -X POST \\
https://app.respond.io/custom/channel/webhook/ \\
-H 'autorización: Portador aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \\
-H 'control de caché: sin caché' \\
-H 'tipo de contenido: aplicación/json' \\
-d '{
"channelId": "gfd8g7fd89dgfd",
"contactId": "+60177872890",
"events": \[
{
"type": "mensaje_estado",
"mId": "xcvzzxcxczxczxc",
"timestamp": 2132131321000,
"estado": {
"valor": "enviado|entregado|leído|fallido",
"mensaje": "Error: El envío falló debido a un token no válido"
}
}
\]
}'Campo | Descripción | Validación |
|---|---|---|
ID de canal | ID de canal único | Requerido. Campo único. Es generado por respond.io. |
ID de contacto | ID de contacto único | Requerido. ID de contacto único de respond.io. Máximo 50 caracteres. |
eventos.tipo | Tipo de evento | Requerido. Tipos disponibles: mensaje, mensaje_echo y mensaje_status. |
eventos.mld | ID del mensaje | Requerido. ID de mensaje único. Máximo 50 caracteres. |
eventos.marca de tiempo | Tiempo de época de UNIX (milisegundos) | Requerido. Hora del evento que activó la devolución de llamada. |
eventos.mensaje.tipo | Tipo de mensaje | Requerido. Tipos de mensajes disponibles: texto, adjunto, ubicación y respuesta rápida. Consulte la sección Tipo de mensaje para ver otros ejemplos de tipos de mensajes. |
eventos.mensaje.texto | Texto del mensaje | Requerido. Longitud máxima 7.000 caracteres. |
eventos.estado.valor | Texto | Obligatorio si event.type es message_status. Valores de estado disponibles: enviado, entregado, leído y fallido. |
eventos.estado.mensaje | Texto | Obligatorio si events.status.value falla. |
contacto.nombre | Nombre de pila | Opcional. Máximo 50 caracteres. |
contacto.apellido | Apellido | Opcional. Máximo 50 caracteres. |
contacto.profilePic | URL de la foto de perfil | Opcional. El tamaño del avatar no debe superar los 100 kb. Recomendado 720x720. |
contacto.locale | Código local | Opcional. Consulte aquí la lista de valores. |
contacto.countryCode | Código del país | Opcional. Código de país de 2 letras - Código ISO ALPHA-2. |
contacto.zona horaria | Huso horario | Opcional. (mín: -24) (máx: 24). |
contacto.correo electrónico | Dirección de correo electrónico | Opcional. Máximo 50 caracteres. |
teléfono de contacto | Número de teléfono | Opcional. Máximo 18 caracteres. |
contacto.idioma | Idioma | Opcional. ISO 639-1. |
Respuesta - Éxito (estado HTTP → 200)
"OK"Gestionar mensajes salientes desde respond.io
respond.io llamará al punto final<API Base URL>/mensaje
Asegúrese de aplicar el códigoMensaje salienteen la ruta
/messagede su servidor web.
Aquí está el ejemplo cURL de respond.io llamando al punto final:
curl -X POST \\
/mensaje \\
-H 'autorización: Portador aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \\
-H 'control de caché: sin caché' \\
-H 'tipo de contenido: aplicación/json' \\
-d '{
"canalId": "gfd8g7fd89dgfd",
"contactoId": "+60177872890",
"mensaje": {
"tipo": "texto",
"texto": "Hola mundo"
}
}' Respuesta - Éxito (estado HTTP → 200)
{
"mId": "1640141607842"
}La autenticación debe realizarse en el punto final antes de enviar el mensaje al proveedor de servicios de mensajería.
Aquí hay un ejemplo de uso de un middleware express para este propósito:
const {validationResult} = require('express-validator');
const validateToken = (req, res, next) => {
const apiToken = <<API Token>>
const bearerToken = req.headers.authorization;
if (!bearerToken)
return res.send(401)
const token = bearerToken.substring(7, bearerToken.length);
if (apiToken !== token) {
return res.send(401)
}
next();
};
module.exports = {
validateToken
};Hemos incluido un ejemplo de un Canal Personalizado que puedes probar en tu servidor. Echa un vistazo a nuestro proyecto de GitHub aquí.
Tipo de mensajes
Muestra de texto
{
"tipo": "texto",
"texto": "Bienvenido a respond.io",
}Campo | Descripción | Validación |
|---|---|---|
tipo | Tipo de mensaje | Requerido. texto |
texto | Texto del mensaje | Requerido. Longitud máxima 7.000 caracteres. |
Muestra de archivo multimedia
{
"tipo": "adjunto",
"adjunto": {
"tipo": "imagen|video|audio|archivo",
"url": "https://abc/japan.png",
"mimeType": "image/png",
"fileName":"company logo.png",
"description": "latest company logo"
}
}Campo | Descripción | Validación |
|---|---|---|
tipo | Tipo de mensaje | Requerido. adjunto. |
tipo de archivo adjunto | Tipo de archivo adjunto | Requerido. Tipos de archivos adjuntos disponibles: imagen, vídeo, audio y archivo. |
adjunto.url | URL | Requerido. Máximo 2.000 caracteres. Asegúrese de que sea un enlace público para que los usuarios o contactos puedan ver el contenido. |
archivo adjunto.mimeType | Tipo MIME del archivo adjunto | Opcional |
archivo adjunto.nombreDeArchivo | Nombre del archivo | Opcional. El nombre del archivo debe incluir una extensión. Máximo 256 caracteres (incluida la extensión del archivo). Enviar un archivo sin extensión o con la extensión incorrecta podría provocar que el contacto o usuario no pueda abrir el archivo. |
archivo adjunto.descripción | Descripción del archivo | Opcional. Máximo 256 caracteres. Sólo aplicable para attachment.type = imagen. |
Asegúrate de que la URL del archivo adjunto no se descargue forzosamente por el navegador. El encabezado de respuesta HTTP's Content-Disposition debe tener el valor predeterminado, que es en línea.
Muestra de ubicación
{
"tipo": "ubicación",
"latitud": 0.123456,
"longitud": -0.1234,
"dirección": "Sky Suites, Jalan P. Ramlee, Kuala Lumpur, 50250 Kuala Lumpur, Wilayah Persekutuan Kuala Lumpur"
}Campo | Descripción | Validación |
|---|---|---|
tipo | Tipo de mensaje | Requerido. ubicación. |
latitud | Coordenadas | Requerido. Latitud (±90°) dentro de rangos válidos. |
longitud | Coordenadas | Requerido. Longitud (±180°) dentro de rangos válidos. |
DIRECCIÓN | Ubicación Dirección | Opcional. Máximo 256 caracteres. |
Muestra para respuesta rápida
{
"tipo": "respuesta rápida",
"título": "Seleccione su idioma preferido",
"respuestas": \[
"malayo",
"inglés"
\]
}Campo | Descripción | Validación |
|---|---|---|
tipo | Tipo de mensaje | Requerido. respuesta rápida. |
título | Título de respuesta rápida | Requerido. Máximo 256 caracteres. |
respuestas | Texto de respuesta | Requerido. Máximo 10 respuestas con un máximo de 256 caracteres por cada respuesta. |
Códigos de error
Error (Estado HTTP → 4xx)
Configuración del canal
Paso 1: Haz clic en Configuración > Canales
Paso 2: Ubica el canal personalizado > haz clic en Administrar
Paso 3: En la página de configuración de canal personalizado verá las siguientes configuraciones:
Ícono de canal - Sube una imagen que sirva como ícono para tu canal personalizado.
Nombre del canal - El nombre del canal se puede cambiar y se usa internamente para identificar el canal.
URL de webhook para mensaje saliente — La URL de webhook para mensajes salientes a este canal.
URL de webhook para mensajes entrantes — La URL de webhook para mensajes entrantes a este canal.
Tipo de ID : se utilizan para la identificación del usuario y se utilizan para comunicarse con su servidor de integración personalizado.
ID de canal — ID de canal único para identificar su canal personalizado.
Token de API : un identificador único utilizado para autenticar a un usuario para acceder a una API.
Paso 4: Haga clic en Guardar cambios para actualizar la configuración del canal personalizado.
Preguntas frecuentes y solución de problemas
¿Puedo conectar chats de otras plataformas usando un canal personalizado?
Sí, puedes. A continuación se indican tres pasos a seguir:
En respond.io, ingrese la URL del webhook de destino de la otra plataforma en el campo URL del webhook para el mensaje entrante .
En la otra plataforma, configure una URL de webhook que apunte a respond.io, lo que permitirá que los contactos le envíen mensajes.
Necesitarás un Servidor de Integración Personalizada para interpretar las APIs tanto de respond.io como de la otra plataforma, permitiendo el intercambio de mensajes entre ellas.
Asegúrese de confirmar con la otra plataforma que los dos primeros pasos sean factibles.
Preguntas frecuentes sobre webhooks de canales personalizados
¿Por qué el webhook devuelve un estado 200 incluso si el mensaje no se puede entregar a respond.io?
Al conectar un canal personalizado, los mensajes enviados a respond.io a través de webhooks siempre devolverán un código de estado 200 inmediatamente, independientemente de si el mensaje se pasó correctamente a respond.io. Esto se debe a la naturaleza de los webhooks, que están diseñados para devolver una respuesta inmediata sin verificar el éxito de la entrega del mensaje.