Presentación

WhatsApp Business API Oficial

La conexión entre su organización y la API oficial de WhatsApp de Meta. Especialmente para desarrolladores independientes, áreas de TI y PYMEs que buscan automatizar notificaciones, envíos de comprobantes e interacciones inteligentes sin lidiar con los complejos y rigurosos trámites de verificación directa de META pero cumpliendo con sus normas. Desde todos los sistemas operativos (windows, linux) todas las plataformas (32, 64 bits) y Todos los lenguajes (Modernos: python, net, java. Legacy: Basic,FoxPro,Cobol,Delphi,Clarion y otros.)

Simplificación

Evitamos que deba tramitar su propia cuenta comercial verificada en Meta. Utilice nuestro número verificado oficial de MisDatos de inmediato.

💰

Ahorro

Reducimos los tiempos de desarrollo de semanas a un par de horas. Sin costos de instalación complejos y con tarifas mensuales de precio plano.

🛡️

Fiabilidad

Middleware respaldado por un backend robusto en Google App Engine. Más de una década operando servicios de interconexión con éxito.

🤝

Soporte

Soporte técnico directo pago por hora sin límites desde la misma plataforma web para ayudarle a resolver cualquier integración compleja.

🌐

Comunidad

Acceda a foros y repositorios de código donde otros desarrolladores y administradores de sistemas comparten soluciones y scripts listos para usar.

🔒

Privacidad

Todo el servicio opera en servidores administrados de forma exclusiva por MisDatos (alojados de manera dedicada en Google Cloud, AWS y otros proveedores, no compartidos). Sus datos de usuarios y mensajes están totalmente protegidos por la política de privacidad declarada en www.misdatos.com.ar/privacidad.


Arquitectura

Modelo Operativo y Reglas de Interfaz

El servicio oficial de WhatsApp de MisDatos opera mediante reglas de middleware que garantizan un uso seguro, eficiente y homologado por las políticas de Meta. Comprender estos conceptos es vital para una integración fluida:

01

Modelo de Publicación Previa

La API requiere que cualquier documento digital o enlace (facturas, recibos, turnos, etc.) sea subido y registrado de forma previa mediante el método mdwhatsappenlacev01. De esta manera, el chatbot lo tiene indexado de manera que cuando el usuario interactúe, la respuesta sea instantánea.

02

Lista Blanca y Alta Automática

El control de acceso se basa en una lista blanca de números/identificadores autorizados administrados mediante el método mdwhatsappdestinov01. Con el fin de respetar estrictamente la privacidad del usuario en caso de que este haya optado por la nueva característica de Meta para proteger su información de contacto, la API está diseñada y orientada a operar mediante el campo codigo (que sí es un identificador propio del sistema de base de datos del desarrollador) en lugar de depender directamente del número de teléfono. No obstante, mediante el parámetro accionalta en la configuración de la API, se puede activar el registro automatizado de nuevos usuarios tan pronto inicien el chat.

03

Identificación por Código Interno

Para simplificar el acoplamiento con sistemas de gestión ERP preexistentes, la API asocia unívocamente el número/identificador de teléfono con un código interno propio de su organización (por ejemplo: DNI, número de cliente o legajo), evitando almacenar bases de datos complejas en la nube de MisDatos. Esta vinculación por código interno permite al desarrollador respetar la privacidad del usuario en el caso de que este opte por las características avanzadas de privacidad de Meta, dado que el sistema basará su lógica principal en el campo "codigo" propio de la empresa.

04

Mecanismo de Primer Contacto (Opt-in)

Por políticas estrictas de privacidad de Meta, no se permite el spam. El usuario final debe realizar el primer contacto de forma voluntaria. Para facilitarlo, MisDatos genera enlaces profundos tipo https://www.misdatos.com.ar/bot/slug y códigos QR dinámicos para lanzar la app con un saludo de bienvenida.

05

Avisos Salientes (Notificaciones Activas)

Una vez que el usuario ha realizado el opt-in inicial, el sistema puede inyectar alertas salientes utilizando la plantilla homologada de Meta avisodatos. Este mensaje actúa como un aviso informativo para avisarle al usuario que tiene novedades disponibles, incitándolo a ingresar al chatbot para consultar el dato crudo.


Guía de Inicio

Hoja de Ruta y Flujo Obligatorio de Prueba

Para asegurar que comprende la interacción y las llamadas técnicas antes de contratar planes de producción, MisDatos requiere completar un flujo secuencial obligatorio de pruebas básicas en el entorno gratuito:

1

Autenticación Directa

Ingrese a www.misdatos.com.ar e inicie sesión utilizando su cuenta corporativa o personal de Google/Gmail.

2

Suscripción al Plan Gratuito

En el panel, suscríbase de forma obligatoria al servicio de "WhatsApp API" en su modalidad base gratuita ingresando a www.misdatos.com.ar/whatsapp/0. Esto creará sus credenciales de autenticación: un usuario con prefijo md_ y una contraseña (token).

3

Configuración Inicial del Chatbot

Defina el Alias comercial de su organización, un saludo amigable que sirva de enganche y configure el slug (campo urlcodigo) para generar su código QR personalizado de invitación rápida.

4

Circuito Mínimo de Validación de PoC (Prueba de Concepto)

Debe completar estas tres llamadas consecutivas para desbloquear los módulos superiores:

  • Publicar un Comprobante: Registre un comprobante ficticio (factura o recibo) llamando al método de la API correspondientemente.
  • Agregar un Contacto: Agregue su propio número/identificador celular de prueba a la lista blanca asociándolo a un DNI o código interno de prueba.
  • Probar la Interacción: Use el método de envío de plantilla para notificar la novedad a su teléfono, simule el ingreso de la consulta en WhatsApp y compruebe la respuesta interactiva del bot.
5

Almacenamiento Avanzado (Opcional - Servicio 'mdurl')

Si no cuenta con un servidor público propio para almacenar PDFs de comprobantes, active el servicio mdurl en el mismo token para subir los binarios directamente a nuestro bucket privado en Google Cloud Storage.

6

Migración y Chatbots Personalizados

Una vez completada la prueba, migre a los planes de producción de tarifa fija. Si su negocio lo requiere, solicite presupuestos a medida para el desarrollo de flujos interactivos complejos (por ejemplo: reserva automática de turnos, sistemas de preventa o pasarelas de cobro transaccionales).


Código de Ejemplo

Ejemplos Nativos de Consumo Práctico (SDKs Oficiales)

A continuación se presentan ejemplos completos y auto-contenidos para consumir la API de WhatsApp de MisDatos utilizando SDKs nativos en lenguajes modernos. Estos ejemplos simulan el flujo completo: registro del número/identificador de prueba en la lista blanca, publicación previa de comprobante, subida del archivo PDF y envío de la plantilla de notificación.

ejemplo.py
# -*- coding: utf-8 -*-
# Para este ejemplo descargue la clase mdapi2 del repositorio que figura en la sección descargas al final,
# y asegúrese que la url api.misdatos.com.ar esté accesible desde su equipo (debe poder verse desde el navegador).
from misdatos_sdk import mdapi2

# 1. Instanciamos el cliente API
api = mdapi2()

# 2. Asignamos las credenciales obtenidas del portal
api.usuario = "md_tu_usuario_token"
api.password = "tu_clave_token"
api.modo = 1  # 1 = Producción, 0 = Test (Localhost)

# 3. Conectamos al servicio
if not api.conectar():
    print("❌ Error de conexión:", api.ultimomensajeerror)
else:
    print("✅ Conectado exitosamente.")

    # 4. Registrar / Actualizar número/identificador en Lista Blanca
    cdestino = "54123412345678"  # Teléfono internacional
    ccodigo = "CLI-998"          # Código de cliente interno
    
    iddestino = api.mdwhatsappdestinov01(
        cdestino=cdestino,
        ccodigo=ccodigo,
        cemail="juan@ejemplo.com",
        nestadoproveedor="0",    # 0 = Activo
        cfecha="20260629",
        cnombre="Juan Perez",
        caccionclave="porcodigo" # Mapeado unívoco por código
    )

    if iddestino == "0":
        print("❌ Error al registrar destino:", api.ultimomensajeerror)
    else:
        print(f"✅ Destino creado con ID: {iddestino}")

        # 5. Crear registro de comprobante / enlace previo
        idenlace = api.mdwhatsappenlacev01(
            ctipo="1",           # 1 = Factura, 2 = Recibo, 5 = Haberes
            ccodigo=ccodigo,     # Enlazado al código interno
            cnombre="FC-0001",
            cfecha="20260629",
            cenlace="",          # Vacío si subimos PDF con mdurl
            cusuariosql="",
            cdescripcion="Factura de Servicios",
            ntotal="4500.00",
            nprocesado="0",
            caccionclave="porcodigo"
        )

        if idenlace == "0":
            print("❌ Error al crear enlace:", api.ultimomensajeerror)
        else:
            print(f"✅ Enlace pre-registrado con ID: {idenlace}")

            # 6. Subir PDF usando el servicio mdurl (Base64)
            result_url = api.mdwhatsappenlaceurlv01(
                nid_enlace=int(idenlace),
                cruta_archivo="C:\\facturas\\factura_juan.pdf"
            )

            if result_url == "0":
                print("❌ Error en subida de PDF:", api.ultimomensajeerror)
            else:
                print(f"✅ Archivo subido. URL pública: {result_url}")

                # 7. Enviar plantilla de notificación homologada
                id_msj = api.mdwhatssappenviarplantilla01v01(
                    cdestino="", 
                    ccodigo=ccodigo,
                    caccion="consultarnovedades;"
                )
                if id_msj == "0":
                    print("❌ Error al enviar plantilla:", api.ultimomensajeerror)
                else:
                    print(f"✅ Notificación enviada. ID Meta: {id_msj}")
Ejemplo.cs
// Para este ejemplo descargue la clase mdapi2 del repositorio que figura en la sección descargas al final,
// y asegúrese que la url api.misdatos.com.ar esté accesible desde su equipo (debe poder verse desde el navegador).

using System;
using MisDatosSDK;

class Program
{
    static void Main()
    {
        // 1. Instanciar la SDK en C#
        MdApi2 api = new MdApi2();
        
        // 2. Asignamos las credenciales obtenidas del portal
        api.Usuario = "md_tu_usuario_token";
        api.Password = "tu_clave_token";
        api.Modo = 1; // 1 = Producción, 0 = Test (Localhost)

        // 3. Conectar
        if (!api.Conectar())
        {
            Console.WriteLine("❌ Error: " + api.UltimoMensajeError);
            return;
        }

        Console.WriteLine("✅ Conectado exitosamente.");

        // 4. Registrar Destino en lista blanca
        string cdestino = "54123412345678"; // Teléfono internacional
        string ccodigo = "CLI-998";         // Código de cliente interno

        string idDestino = api.MdWhatsappDestinoV01(
            cdestino: cdestino,
            ccodigo: ccodigo,
            cemail: "juan@ejemplo.com",
            nestadoproveedor: "0", // 0 = Activo
            cfecha: "20260629",
            cnombre: "Juan Perez",
            caccionclave: "porcodigo" // Mapeado unívoco por código
        );

        if (idDestino == "0")
        {
            Console.WriteLine("❌ Error Destino: " + api.UltimoMensajeError);
            return;
        }

        Console.WriteLine($"✅ Destino creado con ID: {idDestino}");

        // 5. Crear Enlace de Comprobante / enlace previo
        string idEnlace = api.MdWhatsappEnlaceV01(
            ctipo: "1", // 1 = Factura, 2 = Recibo, 5 = Haberes
            ccodigo: ccodigo, // Enlazado al código interno
            cnombre: "FC-0001",
            cfecha: "20260629",
            cenlace: "", // Vacío si subimos PDF con mdurl
            cusuariosql: "",
            cdescripcion: "Factura de Servicios",
            ntotal: "4500.00",
            nprocesado: "0",
            caccionclave: "porcodigo"
        );

        if (idEnlace == "0")
        {
            Console.WriteLine("❌ Error Enlace: " + api.UltimoMensajeError);
            return;
        }

        Console.WriteLine($"✅ Enlace pre-registrado con ID: {idEnlace}");

        // 6. Subir PDF usando el servicio mdurl (Base64)
        string resultUrl = api.MdWhatsappEnlaceUrlV01(
            nid_enlace: int.Parse(idEnlace),
            cruta_archivo: @"C:\facturas\factura_juan.pdf"
        );

        if (resultUrl == "0")
        {
            Console.WriteLine("❌ Error en subida de PDF: " + api.UltimoMensajeError);
        }
        else
        {
            Console.WriteLine($"✅ Archivo subido. URL pública: {resultUrl}");

            // 7. Enviar plantilla de notificación homologada
            float idMsj = api.MdWhatsappEnviarPlantilla01V01(
                cdestino: "",
                ccodigo: ccodigo,
                caccion: "consultarnovedades;"
            );

            if (idMsj == 0.0f)
            {
                Console.WriteLine("❌ Error al enviar plantilla: " + api.UltimoMensajeError);
            }
            else
            {
                Console.WriteLine($"✅ Notificación enviada. ID Meta: {idMsj}");
            }
        }
    }
}
Ejemplo.vb
' Para este ejemplo descargue la clase mdapi2 del repositorio que figura en la sección descargas al final,
' y asegúrese que la url api.misdatos.com.ar esté accesible desde su equipo (debe poder verse desde el navegador).

Imports MisDatosSDK

Module Module1
    Sub Main()
        ' 1. Instanciamos el cliente API
        Dim api As New MdApi2()

        ' 2. Asignamos las credenciales obtenidas del portal
        api.Usuario = "md_tu_usuario_token"
        api.Password = "tu_clave_token"
        api.Modo = 1 ' 1 = Producción, 0 = Test (Localhost)

        ' 3. Conectamos al servicio
        If Not api.Conectar() Then
            Console.WriteLine("❌ Error de conexión: " & api.UltimoMensajeError)
        Else
            Console.WriteLine("✅ Conectado exitosamente.")

            ' 4. Registrar / Actualizar número/identificador en Lista Blanca
            Dim cdestino As String = "54123412345678" ' Teléfono internacional
            Dim ccodigo As String = "CLI-998"         ' Código de cliente interno

            Dim idDestino As String = api.MdWhatsappDestinoV01(
                cdestino:=cdestino,
                ccodigo:=ccodigo,
                cemail:="juan@ejemplo.com",
                nestadoproveedor:="0", ' 0 = Activo
                cfecha:="20260629",
                cnombre:="Juan Perez",
                caccionclave:="porcodigo" ' Mapeado unívoco por código
            )

            If idDestino = "0" Then
                Console.WriteLine("❌ Error al registrar destino: " & api.UltimoMensajeError)
            Else
                Console.WriteLine("✅ Destino creado con ID: " & idDestino)

                ' 5. Crear registro de comprobante / enlace previo
                Dim idEnlace As String = api.MdWhatsappEnlaceV01(
                    ctipo:="1", ' 1 = Factura, 2 = Recibo, 5 = Haberes
                    ccodigo:=ccodigo, ' Enlazado al código interno
                    cnombre:="FC-0001",
                    cfecha:="20260629",
                    cenlace:="", ' Vacío si subimos PDF con mdurl
                    cusuariosql:="",
                    cdescripcion:="Factura de Servicios",
                    ntotal:="4500.00",
                    nprocesado:="0",
                    caccionclave:="porcodigo"
                )

                If idEnlace = "0" Then
                    Console.WriteLine("❌ Error al crear enlace: " & api.UltimoMensajeError)
                Else
                    Console.WriteLine("✅ Enlace pre-registrado con ID: " & idEnlace)

                    ' 6. Subir PDF usando el servicio mdurl (Base64)
                    Dim resultUrl As String = api.MdWhatsappEnlaceUrlV01(
                        nid_enlace:=Convert.ToInt32(idEnlace),
                        cruta_archivo:="C:\facturas\factura_juan.pdf"
                    )

                    If resultUrl = "0" Then
                        Console.WriteLine("❌ Error en subida de PDF: " & api.UltimoMensajeError)
                    Else
                        Console.WriteLine("✅ Archivo subido. URL pública: " & resultUrl)

                        ' 7. Enviar plantilla de notificación homologada
                        Dim idMsj As Single = api.MdWhatsappEnviarPlantilla01V01(
                            cdestino:="",
                            ccodigo:=ccodigo,
                            caccion:="consultarnovedades;"
                        )

                        If idMsj = 0.0F Then
                            Console.WriteLine("❌ Error al enviar plantilla: " & api.UltimoMensajeError)
                        Else
                            Console.WriteLine("✅ Notificación enviada. ID Meta: " & idMsj)
                        End If
                    End If
                End If
            End If
        End If
    End Sub
End Module

Código Legacy

Consumo desde Entornos OLE / COM de 32 y 64 bits

A continuación se presentan ejemplos completos para consumir la API de WhatsApp de MisDatos desde entornos clásicos, de escritorio o sistemas de gestión mediante integración COM/OLE de 32 y 64 bits. Estos ejemplos contemplan el circuito de integración con la misma estructura de llamadas y parámetros del servicio oficial.

Para consumir la API desde lenguajes legacy se debe descargar e instalar el módulo mdpyv009.exe y, en caso de utilizar un control OCX, el instalador de WSAFIPFE. Ambos componentes se encuentran disponibles con enlaces directos en la sección Descargas al final de este manual. Una vez realizada la instalación, la API se puede consumir exactamente con los mismos métodos y campos tal como figuran en la documentación.

Ejemplo.bas
' Visual Basic 6 - Late Binding (COM Puro)
' Asegúrese de que el módulo mdpyv009.exe esté instalado y registrado en su sistema.

Sub Main()
    Debug.Print "========================================================="
    Debug.Print " INICIO DE EJEMPLO DE CONSUMO DE API (Estructura Plana)  "
    Debug.Print "=========================================================" & vbCrLf

    ' 1. Instanciamos la clase
    Dim api As Object
    Set api = CreateObject("misdatos.mdapi2")

    ' NOTA IMPORTANTE:
    ' Las credenciales (usuario y password) representan un token de acceso.
    ' Deben tramitarse previamente en la plataforma: www.misdatos.com.ar/whatsapp/0
    api.usuario = "tu_usuario_token"
    api.password = "tu_clave_token"
    api.modo = 1  ' 1 = Producción, 0 = Test (Localhost)

    ' ---------------------------------------------------------
    ' MÉTODO 1: CONECTAR
    ' ---------------------------------------------------------
    Debug.Print "--- 1. Conectando a la API ---"
    Dim conectado As Boolean
    conectado = api.conectar()
    
    If Not conectado Then
        Debug.Print "❌ Error de conexión: " & api.ultimomensajeerror
    Else
        Debug.Print "✅ Conectado exitosamente con las credenciales provistas."
    End If

    ' ---------------------------------------------------------
    ' MÉTODO 2: REGISTRAR / ACTUALIZAR DESTINO
    ' ---------------------------------------------------------
    Dim iddestino As String
    iddestino = "0"
    
    If conectado Then
        Debug.Print vbCrLf & "--- 2. Ejecutando mdwhatsappdestinov01 ---"
        
        ' Variables autodocumentadas para el método
        Dim cdestino As String
        Dim ccodigo As String
        Dim cemail As String
        Dim cestadoproveedor As String
        Dim cfecha As String
        Dim cnombre As String
        Dim caccionclave As String
        
        cdestino = "54123412345678" ' Teléfono (generalmente con código de país)
        ccodigo = "EMP-001"         ' Identificador interno en tu sistema
        cemail = "juanperez@ejemplo.com"
        cestadoproveedor = "0"      ' 0 = Activo
        cfecha = "20260626"         ' Formato AAAAMMDD
        cnombre = "Juan Perez"
        caccionclave = "porcodigo"  ' Identifica al registro por el campo código

        Dim iddestinostr As String
        iddestinostr = api.mdwhatsappdestinov01( _
            cdestino, _
            ccodigo, _
            cemail, _
            cestadoproveedor, _
            cfecha, _
            cnombre, _
            caccionclave _
        )

        If iddestinostr = "0" Then
            Debug.Print "❌ Error en mdwhatsappdestinov01: " & api.ultimomensajeerror
        Else
            iddestino = iddestinostr
            Debug.Print "✅ Éxito. Destino creado/actualizado con ID: " & iddestino
            
            ' Ejemplo de uso de leerPropiedad (Apto para clientes COM como VFP o VB6)
            Dim nombreguardado As String
            nombreguardado = api.leerPropiedad("mdwhatsappdestinov01", "diccionario.registro.diccionario.nombre", 0, 0, 0)
            Debug.Print "   Dato recuperado de la respuesta COM-Safe (Nombre): " & nombreguardado
        End If
    End If

    ' ---------------------------------------------------------
    ' MÉTODO 3: CREAR REGISTRO DE ENLACE / COMPROBANTE
    ' ---------------------------------------------------------
    Dim idenlace As String
    idenlace = "0"
    
    If conectado Then
        Debug.Print vbCrLf & "--- 3. Ejecutando mdwhatsappenlacev01 ---"
        
        ' Variables autodocumentadas
        Dim ctipoenlace As String
        Dim cnombrecomp As String
        Dim cenlace As String
        Dim cusuariosql As String
        Dim cdescripcion As String
        Dim ctotal As String
        Dim cprocesado As String
        
        ctipoenlace = "1"          ' Ej: 1 = Factura
        cnombrecomp = "FC-0001"
        cfecha = "20260626"         ' Formato AAAAMMDD
        cenlace = ""                ' Se deja en blanco intencionalmente
        cusuariosql = ""            ' Opcional
        cdescripcion = "Factura de prueba para Juan"
        ctotal = "1500.50"
        cprocesado = "0"

        Dim idenlacestr As String
        idenlacestr = api.mdwhatsappenlacev01( _
            ctipoenlace, _
            ccodigo, _
            cnombrecomp, _
            cfecha, _
            cenlace, _
            cusuariosql, _
            cdescripcion, _
            ctotal, _
            cprocesado, _
            caccionclave _
        )

        If idenlacestr = "0" Then
            Debug.Print "❌ Error en mdwhatsappenlacev01: " & api.ultimomensajeerror
        Else
            idenlace = idenlacestr
            Debug.Print "✅ Éxito. Enlace creado/actualizado con ID: " & idenlace
        End If
    End If

    ' ---------------------------------------------------------
    ' MÉTODO 4: SUBIR ARCHIVO PDF AL ENLACE
    ' ---------------------------------------------------------
    If conectado And idenlace <> "0" Then
        Debug.Print vbCrLf & "--- 4. Ejecutando mdwhatsappenlaceurlv01 ---"
        
        ' NOTA: En un entorno de producción, asegúrese de que el archivo exista en la ruta indicada.
        ' Utilizamos el ID devuelto por el método anterior (mdwhatsappenlacev01).
        Dim rutapdf As String
        rutapdf = "C:\temp\factura_juan.pdf" 
        
        Dim resultadourl As String
        resultadourl = api.mdwhatsappenlaceurlv01( _
            CLng(idenlace), _
            rutapdf _
        )

        If resultadourl = "0" Then
            Debug.Print "❌ Error en mdwhatsappenlaceurlv01: " & api.ultimomensajeerror
            Debug.Print "   (Verifique que el archivo exista y que el plan permita la subida)"
        Else
            Debug.Print "✅ Éxito. Archivo PDF subido y asociado. URL pública: " & resultadourl
        End If
    End If

    ' ---------------------------------------------------------
    ' MÉTODO 5: ENVIAR PLANTILLA DE WHATSAPP
    ' ---------------------------------------------------------
    If conectado Then
        Debug.Print vbCrLf & "--- 5. Ejecutando mdwhatssappenviarplantilla01v01 ---"
        
        ' REGLAS IMPORTANTES:
        ' 1. 'cdestino' y 'ccodigo' son EXCLUYENTES. Si se envían ambos, el código tiene prioridad.
        '    Se recomienda enviar el destino en blanco si se utiliza el código.
        ' 2. Solo se enviará el mensaje si el destino interactuó previamente con el chatbot 
        '    al menos una vez a través de www.misdatos.com.ar/bot (opt-in de Meta).
        
        Dim caccionplantilla As String
        caccionplantilla = "consultarnovedades;" ' Opcional. Define la acción que gatillará el botón en el bot.

        Dim idplantillastr As String
        idplantillastr = api.mdwhatssappenviarplantilla01v01( _
            "", _
            ccodigo, _
            caccionplantilla _
        )

        If idplantillastr = "0" Then
            Debug.Print "❌ Error en mdwhatssappenviarplantilla01v01: " & api.ultimomensajeerror
        Else
            Debug.Print "✅ Éxito. Plantilla de aviso enviada correctamente. ID de mensaje en Meta: " & idplantillastr
        End If
    End If

    ' ---------------------------------------------------------
    ' LIMPIEZA
    ' ---------------------------------------------------------
    Set api = Nothing
    Debug.Print vbCrLf & "Proceso finalizado."
End Sub
Ejemplo.prg
* Visual FoxPro 9 - Late Binding (COM Puro)
* Asegúrese de que el módulo mdpyv009.exe esté instalado y registrado en su sistema.

CLEAR
? "========================================================="
? " INICIO DE EJEMPLO DE CONSUMO DE API (Estructura Plana)  "
? "========================================================="
? ""

* 1. Instanciamos la clase
LOCAL api
api = CreateObject("misdatos.mdapi2")

* NOTA IMPORTANTE:
* Las credenciales (usuario y password) representan un token de acceso.
* Deben tramitarse previamente en la plataforma: www.misdatos.com.ar/whatsapp/0
api.usuario = "tu_usuario_token"
api.password = "tu_clave_token"
api.modo = 1  && 1 = Producción, 0 = Test (Localhost)

* ---------------------------------------------------------
* MÉTODO 1: CONECTAR
* ---------------------------------------------------------
? "--- 1. Conectando a la API ---"
LOCAL conectado
conectado = api.conectar()

IF NOT conectado
    ? "❌ Error de conexión:", api.ultimomensajeerror
ELSE
    ? "✅ Conectado exitosamente con las credenciales provistas."
ENDIF

* ---------------------------------------------------------
* MÉTODO 2: REGISTRAR / ACTUALIZAR DESTINO
* ---------------------------------------------------------
LOCAL iddestino
iddestino = "0"

IF conectado
    ? ""
    ? "--- 2. Ejecutando mdwhatsappdestinov01 ---"
    
    * Variables autodocumentadas para el método
    LOCAL cdestino, ccodigo, cemail, cestadoproveedor, cfecha, cnombre, caccionclave
    cdestino = "54123412345678" && Teléfono (generalmente con código de país)
    ccodigo = "EMP-001"         && Identificador interno en tu sistema
    cemail = "juanperez@ejemplo.com"
    cestadoproveedor = "0"      && 0 = Activo
    cfecha = "20260626"         && Formato AAAAMMDD
    cnombre = "Juan Perez"
    caccionclave = "porcodigo"  && Identifica al registro por el campo código

    LOCAL iddestinostr
    iddestinostr = api.mdwhatsappdestinov01(;
        cdestino,;
        ccodigo,;
        cemail,;
        cestadoproveedor,;
        cfecha,;
        cnombre,;
        caccionclave;
    )

    IF iddestinostr = "0"
        ? "❌ Error en mdwhatsappdestinov01:", api.ultimomensajeerror
    ELSE
        iddestino = iddestinostr
        ? "✅ Éxito. Destino creado/actualizado con ID:", iddestino
        
        * Ejemplo de uso de leerPropiedad (Apto para clientes COM como VFP o VB6)
        LOCAL nombreguardado
        nombreguardado = api.leerPropiedad("mdwhatsappdestinov01", "diccionario.registro.diccionario.nombre", 0, 0, 0)
        ? "   Dato recuperado de la respuesta COM-Safe (Nombre):", nombreguardado
    ENDIF
ENDIF

* ---------------------------------------------------------
* MÉTODO 3: CREAR REGISTRO DE ENLACE / COMPROBANTE
* ---------------------------------------------------------
LOCAL idenlace
idenlace = "0"

IF conectado
    ? ""
    ? "--- 3. Ejecutando mdwhatsappenlacev01 ---"
    
    * Variables autodocumentadas
    LOCAL ctipoenlace, cnombrecomp, cenlace, cusuariosql, cdescripcion, ctotal, cprocesado
    ctipoenlace = "1"          && Ej: 1 = Factura
    cnombrecomp = "FC-0001"
    cfecha = "20260626"         && Formato AAAAMMDD
    cenlace = ""                && Se deja en blanco intencionalmente
    cusuariosql = ""            && Opcional
    cdescripcion = "Factura de prueba para Juan"
    ctotal = "1500.50"
    cprocesado = "0"

    LOCAL idenlacestr
    idenlacestr = api.mdwhatsappenlacev01(;
        ctipoenlace,;
        ccodigo,;
        cnombrecomp,;
        cfecha,;
        cenlace,;
        cusuariosql,;
        cdescripcion,;
        ctotal,;
        cprocesado,;
        caccionclave;
    )

    IF idenlacestr = "0"
        ? "❌ Error en mdwhatsappenlacev01:", api.ultimomensajeerror
    ELSE
        idenlace = idenlacestr
        ? "✅ Éxito. Enlace creado/actualizado con ID:", idenlace
    ENDIF
ENDIF

* ---------------------------------------------------------
* MÉTODO 4: SUBIR ARCHIVO PDF AL ENLACE
* ---------------------------------------------------------
IF conectado AND idenlace <> "0"
    ? ""
    ? "--- 4. Ejecutando mdwhatsappenlaceurlv01 ---"
    
    * NOTA: En un entorno de producción, asegúrate de que el archivo exista en la ruta indicada.
    * Utilizamos el ID devuelto por el método anterior (mdwhatsappenlacev01).
    LOCAL rutapdf
    rutapdf = "C:\temp\factura_juan.pdf" 
    
    LOCAL resultadourl
    resultadourl = api.mdwhatsappenlaceurlv01(;
        VAL(idenlace),;
        rutapdf;
    )

    IF resultadourl = "0"
        ? "❌ Error en mdwhatsappenlaceurlv01:", api.ultimomensajeerror
        ? "   (Verifique que el archivo exista y que el plan permita la subida)"
    ELSE
        ? "✅ Éxito. Archivo PDF subido y asociado. URL pública:", resultadourl
    ENDIF
ENDIF

* ---------------------------------------------------------
* MÉTODO 5: ENVIAR PLANTILLA DE WHATSAPP
* ---------------------------------------------------------
IF conectado
    ? ""
    ? "--- 5. Ejecutando mdwhatssappenviarplantilla01v01 ---"
    
    * REGLAS IMPORTANTES:
    * 1. 'cdestino' y 'ccodigo' son EXCLUYENTES. Si se envían ambos, el código tiene prioridad.
    *    Se recomienda enviar el destino en blanco si se utiliza el código.
    * 2. Solo se enviará el mensaje si el destino interactuó previamente con el chatbot 
    *    al menos una vez a través de www.misdatos.com.ar/bot (opt-in de Meta).
    
    LOCAL caccionplantilla
    caccionplantilla = "consultarnovedades;" && Opcional. Define la acción que gatillará el botón en el bot.

    LOCAL idplantillastr
    idplantillastr = api.mdwhatssappenviarplantilla01v01(;
        "",;
        ccodigo,;
        caccionplantilla;
    )

    IF idplantillastr = "0"
        ? "❌ Error en mdwhatssappenviarplantilla01v01:", api.ultimomensajeerror
    ELSE
        ? "✅ Éxito. Plantilla de aviso enviada correctamente. ID de mensaje en Meta:", idplantillastr
    ENDIF
ENDIF

* ---------------------------------------------------------
* LIMPIEZA
* ---------------------------------------------------------
? "Proceso finalizado."
Ejemplo.clw
! Clarion - Control ActiveX / OCX (misdatos.misdatosx)
! Asegúrese de tener insertado el control OCX en su ventana OLE con el nombre '?Ole'

! ---------------------------------------------------------
! IMPORTANTE: REGLAS PARA EL CONTROL OCX
! 1. Inicialización obligatoria: Se debe invocar primero el método booleano 'mdapi2Iniciar()'
!    para levantar los hilos del wrapper local de 32 bits (mdpyv009.exe).
! 2. Prefijo obligatorio 'mdapi2': Todas las propiedades y métodos deben llevar este prefijo.
!    Ejemplos: 'usuario' pasa a ser 'mdapi2usuario', 'conectar()' pasa a ser 'mdapi2conectar()', etc.
! ---------------------------------------------------------

  MESSAGE('=========================================================')
  MESSAGE(' INICIO DE EJEMPLO DE CONSUMO DE API (Estructura Plana)  ')
  MESSAGE('=========================================================')

  ! 1. Inicializamos el control ActiveX
  IF NOT ?Ole{'mdapi2Iniciar()'}
      MESSAGE('❌ Error: El control OCX mdapi2 no pudo iniciarse. Verifique mdpyv009.exe')
      RETURN
  END

  ! 2. Asignamos las credenciales (nótese el prefijo 'mdapi2' obligatorio para el OCX)
  ! Las credenciales (usuario y password) representan un token de acceso.
  ! Deben tramitarse previamente en la plataforma: www.misdatos.com.ar/whatsapp/0
  ?Ole{'mdapi2usuario'} = 'tu_usuario_token'
  ?Ole{'mdapi2password'} = 'tu_clave_token'
  ?Ole{'mdapi2modo'} = 1  ! 1 = Producción, 0 = Test (Localhost)

  ! ---------------------------------------------------------
  ! MÉTODO 1: CONECTAR
  ! ---------------------------------------------------------
  MESSAGE('--- 1. Conectando a la API ---')
  LOCAL_conectado LONG
  
  LOCAL_conectado = ?Ole{'mdapi2conectar()'}
  
  IF NOT LOCAL_conectado
      MESSAGE('❌ Error de conexión: ' & ?Ole{'mdapi2ultimomensajeerror'})
  ELSE
      MESSAGE('✅ Conectado exitosamente con las credenciales provistas.')
  END

  ! ---------------------------------------------------------
  ! MÉTODO 2: REGISTRAR / ACTUALIZAR DESTINO
  ! ---------------------------------------------------------
  LOCAL_iddestino STRING(50)
  LOCAL_iddestino = '0'
  
  IF LOCAL_conectado
      MESSAGE('--- 2. Ejecutando mdapi2mdwhatsappdestinov01 ---')
      
      ! Variables autodocumentadas para el método
      LOCAL_cdestino         STRING(20)
      LOCAL_ccodigo          STRING(20)
      LOCAL_cemail           STRING(100)
      LOCAL_cestadoproveedor STRING(2)
      LOCAL_cfecha           STRING(8)
      LOCAL_cnombre          STRING(100)
      LOCAL_caccionclave     STRING(20)
      
      LOCAL_cdestino = '54123412345678' ! Teléfono (generalmente con código de país)
      LOCAL_ccodigo = 'EMP-001'         ! Identificador interno en tu sistema
      LOCAL_cemail = 'juanperez@ejemplo.com'
      LOCAL_cestadoproveedor = '0'      ! 0 = Activo
      LOCAL_cfecha = '20260626'         ! Formato AAAAMMDD
      LOCAL_cnombre = 'Juan Perez'
      LOCAL_caccionclave = 'porcodigo'  ! Identifica al registro por el campo código

      LOCAL_iddestinostr STRING(50)
      LOCAL_iddestinostr = ?Ole{'mdapi2mdwhatsappdestinov01(' & |
          'cdestino="' & CLIP(LOCAL_cdestino) & '", ' & |
          'ccodigo="' & CLIP(LOCAL_ccodigo) & '", ' & |
          'cemail="' & CLIP(LOCAL_cemail) & '", ' & |
          'nestadoproveedor="' & CLIP(LOCAL_cestadoproveedor) & '", ' & |
          'cfecha="' & CLIP(LOCAL_cfecha) & '", ' & |
          'cnombre="' & CLIP(LOCAL_cnombre) & '", ' & |
          'caccionclave="' & CLIP(LOCAL_caccionclave) & '")'}

      IF LOCAL_iddestinostr = '0'
          MESSAGE('❌ Error en mdapi2mdwhatsappdestinov01: ' & ?Ole{'mdapi2ultimomensajeerror'})
      ELSE
          LOCAL_iddestino = LOCAL_iddestinostr
          MESSAGE('✅ Éxito. Destino creado/actualizado con ID: ' & CLIP(LOCAL_iddestino))
          
          ! Ejemplo de uso de mdapi2leerPropiedad (Apto para clientes COM como VFP, VB6 o Clarion)
          LOCAL_nombreguardado STRING(100)
          LOCAL_nombreguardado = ?Ole{'mdapi2leerPropiedad("mdwhatsappdestinov01", "diccionario.registro.diccionario.nombre", 0, 0, 0)'}
          MESSAGE('   Dato recuperado de la respuesta COM-Safe (Nombre): ' & CLIP(LOCAL_nombreguardado))
      END
  END

  ! ---------------------------------------------------------
  ! MÉTODO 3: CREAR REGISTRO DE ENLACE / COMPROBANTE
  ! ---------------------------------------------------------
  LOCAL_idenlace STRING(50)
  LOCAL_idenlace = '0'
  
  IF LOCAL_conectado
      MESSAGE('--- 3. Ejecutando mdapi2mdwhatsappenlacev01 ---')
      
      ! Variables autodocumentadas
      LOCAL_ctipoenlace STRING(2)
      LOCAL_cnombrecomp STRING(50)
      LOCAL_cenlace     STRING(255)
      LOCAL_cusuariosql STRING(50)
      LOCAL_cdescripcion STRING(255)
      LOCAL_ctotal      STRING(20)
      LOCAL_cprocesado  STRING(2)
      
      LOCAL_ctipoenlace = '1'          ! Ej: 1 = Factura
      LOCAL_cnombrecomp = 'FC-0001'
      LOCAL_cfecha = '20260626'         ! Formato AAAAMMDD
      LOCAL_cenlace = ''                ! Se deja en blanco intencionalmente
      LOCAL_cusuariosql = ''            ! Opcional
      LOCAL_cdescripcion = 'Factura de prueba para Juan'
      LOCAL_ctotal = '1500.50'
      LOCAL_cprocesado = '0'

      LOCAL_idenlacestr STRING(50)
      LOCAL_idenlacestr = ?Ole{'mdapi2mdwhatsappenlacev01(' & |
          'ctipo="' & CLIP(LOCAL_ctipoenlace) & '", ' & |
          'ccodigo="' & CLIP(LOCAL_ccodigo) & '", ' & |
          'cnombre="' & CLIP(LOCAL_cnombrecomp) & '", ' & |
          'cfecha="' & CLIP(LOCAL_cfecha) & '", ' & |
          'cenlace="' & CLIP(LOCAL_cenlace) & '", ' & |
          'cusuariosql="' & CLIP(LOCAL_cusuariosql) & '", ' & |
          'cdescripcion="' & CLIP(LOCAL_cdescripcion) & '", ' & |
          'ntotal="' & CLIP(LOCAL_ctotal) & '", ' & |
          'nprocesado="' & CLIP(LOCAL_cprocesado) & '", ' & |
          'caccionclave="' & CLIP(LOCAL_caccionclave) & '")'}

      IF LOCAL_idenlacestr = '0'
          MESSAGE('❌ Error en mdapi2mdwhatsappenlacev01: ' & ?Ole{'mdapi2ultimomensajeerror'})
      ELSE
          LOCAL_idenlace = LOCAL_idenlacestr
          MESSAGE('✅ Éxito. Enlace creado/actualizado con ID: ' & CLIP(LOCAL_idenlace))
      END
  END

  ! ---------------------------------------------------------
  ! MÉTODO 4: SUBIR ARCHIVO PDF AL ENLACE
  ! ---------------------------------------------------------
  IF LOCAL_conectado AND LOCAL_idenlace <> '0'
      MESSAGE('--- 4. Ejecutando mdapi2mdwhatsappenlaceurlv01 ---')
      
      ! NOTA: En un entorno de producción, asegúrate de que el archivo exista en la ruta indicada.
      ! Utilizamos el ID devuelto por el método anterior (mdwhatsappenlacev01).
      LOCAL_rutapdf STRING(255)
      LOCAL_rutapdf = 'C:\temp\factura_juan.pdf'
      
      LOCAL_resultadourl STRING(255)
      LOCAL_resultadourl = ?Ole{'mdapi2mdwhatsappenlaceurlv01(' & |
          'nid_enlace=' & DECLIP(LOCAL_idenlace) & ', ' & |
          'cruta_archivo="' & CLIP(LOCAL_rutapdf) & '")'}

      IF LOCAL_resultadourl = '0'
          MESSAGE('❌ Error en mdapi2mdwhatsappenlaceurlv01: ' & ?Ole{'mdapi2ultimomensajeerror'})
          MESSAGE('   (Verifique que el archivo exista y que el plan permita la subida)')
      ELSE
          MESSAGE('✅ Éxito. Archivo PDF subido y asociado. URL pública: ' & CLIP(LOCAL_resultadourl))
      END
  END

  ! ---------------------------------------------------------
  ! MÉTODO 5: ENVIAR PLANTILLA DE WHATSAPP
  ! ---------------------------------------------------------
  IF LOCAL_conectado
      MESSAGE('--- 5. Ejecutando mdapi2mdwhatssappenviarplantilla01v01 ---')
      
      ! REGLAS IMPORTANTES:
      ! 1. 'cdestino' y 'ccodigo' son EXCLUYENTES. Si se envían ambos, el código tiene prioridad.
      !    Se recomienda enviar el destino en blanco si se utiliza el código.
      ! 2. Solo se enviará el mensaje si el destino interactuó previamente con el chatbot 
      !    al menos una vez a través de www.misdatos.com.ar/bot (opt-in de Meta).
      
      LOCAL_caccionplantilla STRING(100)
      LOCAL_caccionplantilla = 'consultarnovedades;' ! Opcional. Define la acción que gatillará el botón en el bot.

      LOCAL_idplantillastr STRING(50)
      LOCAL_idplantillastr = ?Ole{'mdapi2mdwhatssappenviarplantilla01v01(' & |
          'cdestino="", ' & |
          'ccodigo="' & CLIP(LOCAL_ccodigo) & '", ' & |
          'caccion="' & CLIP(LOCAL_caccionplantilla) & '")'}

      IF LOCAL_idplantillastr = '0'
          MESSAGE('❌ Error en mdapi2mdwhatssappenviarplantilla01v01: ' & ?Ole{'mdapi2ultimomensajeerror'})
      ELSE
          MESSAGE('✅ Éxito. Plantilla de aviso enviada correctamente. ID de mensaje en Meta: ' & CLIP(LOCAL_idplantillastr))
      END
  END

  MESSAGE('Proceso finalizado.')
Instrucciones de traducción con IA
Para cualquier lenguaje puede seguir estos 4 pasos:

1) Tomar el ejemplo de Python, tomar el archivo PromptEquivalencias.md (que figura más abajo) y pegarlos en un motor de IA.
2) Indicar a la IA a qué lenguaje quiere traducirlo (COBOL, Delphi o cualquier otro).
3) La IA generará el código en su lenguaje de preferencia.
4) Podrá además interactuar con ella para pedir mejoras o detalles del código generado.

Herramientas de Apoyo

Hoja de Cálculo con Macros (Excel)

Para realizar validaciones de red, pruebas de mensajería y entrenamiento inicial en vivo, MisDatos pone a su disposición un libro de cálculo con macros habilitadas en 32 y 64 bits llamado mdwhatsapp.xlsm (disponible para su descarga en la sección Descargas al final de este manual).

  • Pruebas en un clic: Contiene botones programáticos vinculados con la SDK COM para agregar números/identificadores, publicar registros de prueba y gatillar plantillas de alerta Meta de forma visual.
  • Consola de Log integrada: Permite visualizar los payloads JSON de respuesta crudos en tiempo real para entender la estructura de la respuesta.
  • Código abierto VBA: El módulo VBA se encuentra abierto para que pueda copiar, modificar o portar directamente las macros de envío a sus propios sistemas basados en Microsoft Office.

Tutorial Práctico

Guía Paso a Paso: De Cero a tu Primer Mensaje Oficial

Para garantizar que su integración sea exitosa y comprenda a la perfección la arquitectura de publicación previa de MisDatos y las políticas de opt-in de Meta, hemos diseñado esta guía secuencial. Sígala paso a paso para realizar su Prueba de Concepto (PoC).

1

Alta y Suscripción al Servicio Base

Ingrese a la plataforma corporativa en www.misdatos.com.ar e inicie sesión con su cuenta de Google/Gmail. En el menú lateral izquierdo, diríjase a Usar mis servicios, busque el servicio WhatsApp y suscríbase seleccionando el plan base (Gratuito).

2

Generación del Token de Acceso

Dentro del panel de su servicio WhatsApp, haga clic en la opción Token de acceso. Cree un nuevo token asegurándose de cumplir dos reglas:

  • El campo usuario debe comenzar obligatoriamente con el prefijo md_ (ejemplo: md_miempresa).
  • La contraseña debe tener un mínimo de 8 caracteres.
3

Vinculación del Token a WhatsApp

El token creado es genérico. Para darle permisos sobre la mensajería, ubique su nuevo token en la lista, despliegue el menú de opciones (⋮) a su derecha y seleccione Suscribir servicio. Vincúlelo al servicio WhatsApp adquirido en el Paso 1.

4

Suscripción a Almacenamiento (Opcional pero recomendado)

Si su sistema local (ej. Visual Basic 6 o FoxPro) no expone sus PDFs en una URL pública (HTTPS), necesitará que MisDatos aloje el archivo. Vuelva a Usar mis servicios, suscríbase al servicio mdurl, y repita el Paso 3 para vincular su token md_ a este servicio de almacenamiento.

5

Configuración de la IA y el Chatbot

Regrese al panel de WhatsApp y haga clic en Configuración de la IA. Complete los datos prestando atención a dos campos críticos:

  • Saludo: Defina una frase de 2 a 3 palabras exactas (ej: hola miempresa). La IA la usará como disparador exacto.
  • Código URL (Slug): Defina una palabra corta y sin espacios (ej: miempresa). Esto generará su enlace de invitación rápida.
6

Descarga e Instalación del Middleware Local

Vaya a la sección Descargas al final de este manual. Descargue el módulo mdpyv009.exe (y el instalador de WSAFIPFE si utiliza controles OCX visuales) y regístrelo en su entorno Windows. Este componente actúa como puente seguro entre su código clásico local y la API en la nube.

7

Preparación del Código de Prueba (Ej. Visual Basic 6)

Copie el código de ejemplo provisto en este manual. Antes de ejecutarlo, revise este checklist:

  • Credenciales: Asigne su usuario md_ y clave (Paso 2).
  • Parámetro de Búsqueda Seguro: En la llamada a mdwhatsappdestinov01, deje el parámetro caccionclave="" (en blanco). Esto fuerza al método a buscar y actualizar el contacto basándose estrictamente en su número/identificador de teléfono. Si el usuario ha decidido activar las nuevas características de privacidad de Meta para ocultar su número de teléfono real, es de suma importancia respetar su privacidad y utilizar el campo codigo como clave de enlace, que sí es de dominio y control del desarrollador.
  • Identificadores: Defina un ccodigo interno (ej: "CLI-999") y el número/identificador de destino (su propio celular real con código de país).
  • Documento: Especifique una ruta local válida para subir un PDF de prueba.
8

Primera Ejecución (Publicación de Datos sin Opt-in)

Ejecute su código. En esta etapa, el sistema registrará/actualizará al contacto asociándole su código interno (ccodigo), creará el registro del comprobante y subirá el PDF al servidor.

Nota esperada: El último método (mdwhatssappenviarplantilla01v01) devolverá un error o "0". Esto es absolutamente normal y correcto: los datos ya están subidos y listos en la nube, pero Meta bloquea el envío de la plantilla porque el usuario (usted) aún no ha iniciado una conversación con el chatbot.

9

Regla del Primer Contacto y Verificación de Métricas

Ahora, simule ser el cliente final. Comparta el enlace autogenerado en el Paso 5 (https://misdatos.com.ar/bot/su-slug) con su número/identificador de prueba o escanee el código QR del portal y envíe el saludo predeterminado.

  • Ingrese a Métricas en el portal web de MisDatos.
  • En la métrica de Contactos, notará que su teléfono figura como "Activo". (Nota: Si un usuario ingresa al bot por su cuenta antes de que usted ejecute el código, aparecerá aquí como activo pero "sin código" asociado. El código interno se inyecta o actualiza cuando usted corre su sistema, gracias a la sincronización por el número/identificador de teléfono, de modo que se respete la privacidad del usuario si este optó por la nueva característica de Meta, orientándose la API al uso del campo "código" propio del desarrollador).
10

Segunda Ejecución (El Envío Exitoso)

Vuelva a ejecutar exactamente el mismo código del Paso 8. Los métodos de MisDatos son idempotentes: no duplicarán contactos ni generarán errores por datos preexistentes; simplemente actualizarán lo necesario. Esta vez, como el usuario ya realizó el opt-in en el Paso 9, el método final de envío de plantilla devolverá un ID de mensaje exitoso. Al abrir su WhatsApp, verá la alerta homologada, y al interactuar con el botón, el bot le entregará el PDF publicado.


Referencia Técnica

Especificación de Métodos de la SDK (mdapi2)

A continuación se detallan los 4 métodos esenciales del motor de WhatsApp de MisDatos para la interacción de datos, validación cruzada y envío programático. Todos los métodos reportan fallos persistentes asignando el texto descriptivo del error a la propiedad pública ultimomensajeerror.

POST mdwhatsappdestinov01()
Administra de forma remota la lista blanca de contactos autorizados, vinculando el número/identificador de WhatsApp con el código de organización de la empresa. Con el fin de respetar estrictamente la privacidad de los usuarios bajo las nuevas políticas de Meta si decidieron ocultar su número de teléfono real, la API de MisDatos se orienta a operar en base al campo codigo interno del sistema del desarrollador. Soporta actualizaciones e inserciones automatizadas.

Parámetros de Entrada

Parámetro Tipo Descripción
destino string Número/identificador de teléfono internacional formateado (ej. "54123412345678"). Tratarlo siempre como string.
codigo string Código de identificación unívoca interna (DNI, legajo, o número de cliente).
email string Email de contacto del usuario final (opcional).
estadoproveedor string / int Estado actual del contacto ("0" para habilitar/activo).
fecha string Fecha de registro en formato plano "AAAAMMDD" (ej. "20260629").
nombre string Nombre completo o comercial del contacto a visualizar en el bot.
accionclave string Método de indexación de coincidencia. Se recomienda "porcodigo" para mapeos basados en su ID interno.

Estructura de Retorno (JSON Respuesta)

{
  "status": "ok",
  "resultado": "1287" // ID numérico de fila del destino insertado o actualizado, devuelto como string. "0" en caso de error.
}
POST mdwhatsappenlacev01()
Publica y registra los metadatos de comprobantes o enlaces digitales para que el chatbot los tenga indexados.

Parámetros de Entrada

Parámetro Tipo Descripción
tipo string / int Tipo de documento: "1" (Factura), "2" (Recibo), "5" (Descuento de Haberes).
codigo string Código identificador del cliente/destino al que pertenece el enlace.
nombre string Identificador visible del comprobante (ej. "FC-0002871").
fecha string Fecha del comprobante en formato plano "AAAAMMDD".
enlace string URL pública HTTPS donde reside el PDF. Si desea subirlo con mdurl, deje este parámetro vacío.
usuariosql string Usuario ejecutor de SQL. Generalmente vacío para automatizaciones genéricas.
descripcion string Breve detalle o leyenda descriptiva que visualizará el usuario en su chat.
total string / decimal Importe total expresado en string plano (ej. "1500.50").
procesado string / int Estado interno. Por defecto "0" (sin procesar).
accionclave string Utilice "porcodigo" para mapear relacionalmente la subida del registro.

Estructura de Retorno (JSON Respuesta)

{
  "status": "ok",
  "resultado": "45612" // ID único numérico generado para el enlace registrado.
}
POST mdwhatsappenlaceurlv01()
Recibe un documento binario (PDF) de su disco local, lo codifica en Base64, valida el tamaño límite según su plan del servicio mdurl, lo aloja en el bucket público de Cloud Storage de MisDatos y asocia la URL resultante con el enlace previamente creado de forma transparente.

Parámetros de Entrada

Parámetro Tipo Descripción
id_enlace int El identificador numérico de enlace devuelto previamente por mdwhatsappenlacev01.
archivo_b64 string Codificación del archivo en formato texto Base64 plano de gran tamaño (gestionado automáticamente por la SDK).
nombre_archivo string Nombre de archivo final con extensión (ej. "comprobante.pdf").

Estructura de Retorno (JSON Respuesta)

{
  "status": "ok",
  "resultado": "https://storage.googleapis.com/misdatos-bucket/whatsapp/comprobante_45612.pdf" // URL pública generada de descarga.
}
POST mdwhatssappenviarplantilla01v01()
Inyecta de forma automatizada la plantilla de aviso homologada de Meta avisodatos al contacto. Realiza validaciones dinámicas de control diario contra el plan del token, consultando el historial de envíos de las últimas 24 horas.

Parámetros de Entrada

Parámetro Tipo Descripción
destino string Número/identificador de WhatsApp destino. Si se envía el código interno, es preferible dejar este campo en blanco para cumplir plenamente con la privacidad del usuario si optó por la nueva característica de Meta, ya que la API está orientada a operar mediante el campo de código interno propio de su organización.
codigo string Código de cliente/usuario interno de su organización. Tiene prioridad sobre el destino.
accion string Acción de gatillo que desencadenará el botón del mensaje (ej: "consultar;", "consultardescuento;", "consultarnovedades;").

Estructura de Retorno (JSON Respuesta)

{
  "status": "ok",
  "resultado": "wamid.HBgMNTQxMjM0MTIzNDU2NzgVAgIDHQIkNTA5NDM2RUQ4N0M3MzFB" // ID de mensaje único de Meta (WA_ID) como string. "0" en caso de error.
}

Herramientas de Apoyo

Traductor IA - Equivalencias Legacy

MisDatos provee un prompt inteligente pre-diseñado para que pueda copiar cualquier lógica escrita en Python o C# de esta documentación y traducirla con precisión matemática a sintaxis de Visual FoxPro, VB6, Clarion, Delphi o COBOL. Simplemente copie el bloque inferior y péguelo en su motor de Inteligencia Artificial preferido (ej: Gemini, ChatGPT, Claude):

Prompt de Sistema para IA

Recurso para Desarrolladores

Copia de Manual para su Contexto de IA

¿Desea que su asistente de IA de desarrollo (como Gemini o Copilot) conozca de memoria la API de WhatsApp de MisDatos para que le escriba el software a medida? Copie este manual en formato Markdown estructurado y péguelo directamente en el contexto o prompt del chat.

manual_api_whatsapp_misdatos.md

Recursos

Descargas y Enlaces Útiles

Acceda de forma directa a los repositorios oficiales, instaladores de middleware legacy, planillas de prueba y canales de soporte de la comunidad de MisDatos:

📦

SDKs Nativas

Clases de integración moderna para lenguajes actuales. Código fuente libre de dependencias complejas:

⚙️

Interfaz legacy

Instaladores obligatorios para la interconectividad COM / ActiveX en entornos clásicos de 32 y 64 bits:

📊

Libro Excel

Libro de Excel con macros para testeo rápido y ejemplos en VBA directamente portables a su ERP local:

💬

Comunidad

Foro de discusión activo para desarrolladores y administradores de sistemas de habla hispana:

🤝

Soporte

Atención directa, contratación de horas de soporte personalizado y consultas administrativas:

Copiado al portapapeles