Un programa de referidos es un sistema que recompensa a clientes o socios de la empresa ofreciendo incentivos o bonificaciones por atraer nuevos participantes.
Desde una perspectiva técnica, un programa de referidos incluye varios componentes clave:
- Un enlace de invitación: un identificador único que permite a los usuarios o clientes invitar a otros a participar en el programa. El invitador puede compartir este enlace a través de varios canales (por ejemplo, este artículo cubrirá la generación de enlaces a través de un bot de WhatsApp, pero los enlaces del programa de referidos se pueden compartir a través de cualquier mensajero que prefieras).
- Una base de datos de participantes, implementada mediante la integración de MaviBot y la funcionalidad de Google Sheets, donde se registra la información tanto de los usuarios invitados como de los invitadores.
- Un sistema de seguimiento de referidos que monitorea las acciones relacionadas con la atracción de nuevos participantes a través de enlaces de referidos. El sistema almacena datos de todos los referidos, lo que permite verificar si un referido determinado ya existe en el sistema como un usuario previamente invitado.
Recomendamos encarecidamente revisar las secciones "Conceptos básicos de la creación de bots en Mavibot.ai" enlace y "Google Sheets" enlace antes de crear el flujo de tu chatbot.
Sistema de referidos en WhatsApp
La funcionalidad del bot que se está creando incluirá bloques compuestos por los siguientes componentes:
- generación de un enlace de referido (afiliado); enlace
- verificación de si el nuevo usuario ya está en la base de datos; enlace
- notificación al usuario invitador sobre un nuevo referido; enlace
- registro de usuarios en la base de datos; enlace
- solicitud de una lista de referidos. enlace
Generación del enlace de referido
Creemos un bloque con un enlace incrustado que el bot enviará al usuario tras el comando "enlace". Para ello, crea un nuevo bloque en el flujo utilizando uno de dos métodos:
- Haz doble clic en un área vacía del lienzo del constructor:

- Usando el botón "Guardar" en la parte inferior de la pantalla y seleccionando el tipo de bloque:

Después de eso, en la condición del bloque, ingresa la palabra "Enlace" y establece el tipo de coincidencia en "Ignorar errores tipográficos e imprecisiones" (esto es útil en caso de errores tipográficos del usuario u otros errores en el mensaje):

Para identificar quién recomendó al usuario, el bot crea un enlace usando la siguiente plantilla: https://wa.me/(tu número de teléfono vinculado al bot)?text=Te%20recomendó%20#{phone}%20😌Hola

Analicemos más de cerca el enlace de la plantilla: https://wa.me/(tu número de teléfono vinculado al bot)?text=Te%20recomendó%20#{phone}%20😌Hola, donde:
- Reemplaza los corchetes "(tu número de teléfono vinculado al bot)" con el número de teléfono correspondiente;
- #{phone} se reemplaza automáticamente con el número de teléfono del usuario que solicitó su enlace de socio.
Enviamos el enlace generado no como texto del bloque, sino como un archivo adjunto: un enlace en el que se puede hacer clic con una notificación (ver Fig. 2 y Fig. 3):
- elige insertar un archivo adjunto
- selecciona el tipo — Enlace, y pégalo en el campo 'URL del archivo adjunto':

En este caso, el enlace se verá visualmente acortado:

Probemos la funcionalidad del enlace usando la función "Probar Bot".

Aquí está el resultado: el enlace dirige al usuario al chat del mensajero correspondiente con tu número de teléfono:

De esta manera, has generado con éxito un enlace de invitación que los usuarios potenciales pueden usar para acceder al chatbot. Además, al hacer clic en este enlace, el usuario es redirigido a la ventana de chat con un mensaje previamente completado. (Ver Fig. 6)

Verificación de usuario
Uso de funciones y expresiones regulares en un bloque
El comando de verificación y registro en la base de datos solo funcionará si el bot encuentra un número de teléfono en el mensaje del usuario. Por lo tanto, es necesario dividir la frase recibida en partes.
Para esto, se utiliza la función splitter().
Función Splitter()
splitter(str, s, n) - divide una cadena en partes. La función devuelve un array de elementos.
Parámetros:
! str ****- la cadena original
! s ****- el delimitador de la cadena
n - el número máximo de elementos
Ejemplo
Función de división de cadenas:

A continuación, el bot debe verificar si la secuencia de dígitos en la cadena es efectivamente un número de teléfono. Para ello, utilizamos las siguientes expresiones regulares:
- Número de teléfono general:
^(\+)?((\d{2,3}) ?\d|\d)(([ -]?\d)|( ?(\d{2,3}) ?)){5,12}\d$ -
¡Cambiar número ruso! Solo número de teléfono ruso:
^((\+7|7|8)+([0-9]){10})$

Para obtener información sobre cómo trabajar con expresiones regulares, consulta el artículo titulado "Expresiones regulares". enlace
Después de que el bot verifique que la secuencia de dígitos es efectivamente un número de teléfono, guárdalo del mensaje como una variable (por ejemplo, #{reff}).
Verificación del número de teléfono del usuario como referido en la base de datos
Ahora es necesario verificar si el número de teléfono del usuario que siguió el enlace ya es un referido (previamente invitado por alguien y registrado en nuestra base de datos). Para ello, crea un bloque en el flujo con una función de búsqueda en columna.
Usa la función de búsqueda en columna haciendo clic en "Solicitud API" en el bloque, donde debes establecer los siguientes valores de parámetros:

! URL de la función: https://store.salebot.pro/function/findcell enlace
! Parámetros de solicitud JSON:
{ "id": "tu_id_de_tabla", "find": "texto_a_buscar", "col": número_de_columna_para_buscar, "return": número_de_columna_para_devolver, "creds_path": "ruta_a_tu_archivo_de_credenciales_de_autenticación" }
Parámetros de respuesta:
"status": "1" — valor encontrado
"status": "0" — valor no encontrado
"data" — el valor encontrado
"cell_number" — la ubicación de la celda encontrada
Búsqueda por columna y visualización de texto de toda la fila
El parámetro de retorno debe establecerse en 0.
&#xNAN;{ "id": "tu_id_de_tabla", "find": "texto_a_buscar", "col": 2, "return": 0 }
Respuesta: {"status":"1","data":{"0":"\u0441\u043e\u043b\u043d\u0446\u0435","1":"\u0440\u0430\u0441\u0441\u0432\u0435\u0442","2":"\u043a\u0440\u044b\u0448\u0430","3":"","4":"\u043d\u0435\u0431\u043e"},"cell_number":{"row":4,"col":1, "col_letter":"A"}}
Desglose de la respuesta:
data — respuesta
data|0 — Celda 1
data|1 — Celda 2
data|2 — Celda 3
data|3 — Celda 4
cell_number|row — fila
cell_number|col — columna
Para obtener más información sobre las funciones disponibles para trabajar con tablas, consulta el artículo titulado "Google Sheets". enlace
Bloque de notificación
Para notificar al usuario que compartió el enlace de referido que un nuevo cliente lo ha seguido con éxito, crearemos un bloque dedicado. Para enviar una notificación sobre la creación de un nuevo referido, utiliza los siguientes parámetros de solicitud (tipo: POST - JSON):

Las solicitudes se realizan mediante el método POST a la URL: https://chatter.salebot.pro/api/{api_key}/{action} Donde:
-
api_keyes la clave de acceso API de tu proyecto, que se puede obtener en la configuración del proyecto (ver Fig. 11).

Puedes recuperar la clave de acceso usando la variable #{api_key}, que almacena el token de acceso generado actualmente. No olvides generar el token antes de usarlo.
! URL de solicitud: https://chatter.salebot.pro/api/#{api_key}/whatsapp_message enlace

Puedes encontrar más detalles sobre las funciones de solicitud API aquí. enlace
Agregar los usuarios invitados e invitadores a la base de datos
Para ello, utilizaremos la entrada fila por fila en columnas específicas, lo que se realiza mediante la función mapping.
La tabla debe tener un encabezado completado (al menos una celda en la primera fila).
! URL de la función https://store.salebot.pro/function/gsheets enlace
! Parámetros de solicitud JSON:
{ "id": "tu_id_de_tabla", "mapping": { "a": "#{variable}", "b": "#{otra_variable}", "d": "texto plano" } }
Si deseas escribir filas no en la primera hoja, agrega el parámetro list_name a la solicitud:
{ "id": "tu_id_de_tabla", "mapping": { "a": "texto plano", "b": "#{variable}" }, "list_name": "NombreDeHoja" }
Parámetros:
- id — identificador de la tabla*
- a, b, c, d — nombres de las columnas
- list_name — el nombre de tu hoja (por ejemplo, "Hoja2")
*Asegúrate de reemplazar con el ID real de tu tabla.
Ejemplo de respuesta: {"number_row":8}
Si la solicitud se ejecuta correctamente, la respuesta incluirá el número de fila, que puedes guardar y usar para operaciones posteriores.
Visualización de la lista de referidos
Agreguemos un comando adicional al bot que permita a los usuarios ver su lista de referidos.
Para encontrar todos los valores especificados en una columna, usa la función findcell con el parámetro "find_all". Esto localizará todas las ocurrencias del valor "find_all" en la columna "col" especificada y devolverá una lista de valores únicos de la columna "return" como una cadena.
! URL de la función: https://store.salebot.pro/function/findcell enlace
! Parámetros de solicitud JSON:
{ "id": "id_de_tabla", "find_all": "valor_de_búsqueda", "list_name": "nombre_de_hoja", "col": "número_de_columna_para_buscar", "return": "número_de_columna_para_devolver_valores", "find": "!" }

En los valores guardados, especifica:
lista → Lista
cantidad → Cantidad
Para el usuario, muestra el mensaje:
"Has referido a #{spisok}, tus referidos totales: #{quantity}"
En otros mensajeros, implementar un sistema de referidos así es aún más fácil porque los datos del invitador se pasan como un parámetro oculto durante la transición del enlace, por lo que el nuevo usuario no necesita enviar un mensaje como "Fui invitado por este número."


