Documentation Index
Fetch the complete documentation index at: https://docs.damascuss.io/llms.txt
Use this file to discover all available pages before exploring further.
Requisitos previos
- Cuenta de NotMeta activa
- Acceso de administrador o desarrollador
- WhatsApp Business API configurado
Herramientas de desarrollo
- Cliente HTTP (Postman, curl, etc.)
- Editor de código
- Navegador web
- Acceso a terminal/consola
Obtener credenciales de API
1. Acceder al panel de desarrolladores
- Inicia sesión en tu cuenta de NotMeta
- Ve a “Configuración” > “API”
- Haz clic en “Generar token de API”
2. Configurar permisos
Selecciona los permisos necesarios para tu aplicación:
- Conversaciones: Leer y escribir mensajes
- Usuarios: Gestionar equipo
- Reportes: Acceder a métricas
- Webhooks: Configurar notificaciones
- Configuración: Modificar ajustes
3. Generar token
- Ingresa un nombre descriptivo para tu token
- Selecciona la fecha de expiración
- Haz clic en “Generar token”
- Importante: Copia y guarda el token de forma segura
Configuración del entorno
Variables de entorno
Crea un archivo .env con tus credenciales:
NOTMETA_API_URL=https://api.notmeta.com
NOTMETA_API_TOKEN=tu_token_aqui
NOTMETA_WEBHOOK_SECRET=tu_secret_webhook
Configuración de HTTPS
Para desarrollo local, puedes usar un túnel HTTPS:
# Usando ngrok
ngrok http 3000
# Usando localtunnel
npx localtunnel --port 3000
Primeras llamadas a la API
Verificar conexión
curl -X GET "https://api.notmeta.com/v1/health" \
-H "Authorization: Bearer TU_TOKEN_AQUI" \
-H "Content-Type: application/json"
curl -X GET "https://api.notmeta.com/v1/account" \
-H "Authorization: Bearer TU_TOKEN_AQUI" \
-H "Content-Type: application/json"
Configuración de webhooks
1. Crear endpoint webhook
const express = require('express');
const app = express();
app.post('/webhook', (req, res) => {
const signature = req.headers['x-notmeta-signature'];
const payload = JSON.stringify(req.body);
// Verificar firma del webhook
if (verifyWebhookSignature(payload, signature)) {
// Procesar evento
handleWebhookEvent(req.body);
res.status(200).send('OK');
} else {
res.status(400).send('Invalid signature');
}
});
function verifyWebhookSignature(payload, signature) {
const crypto = require('crypto');
const expectedSignature = crypto
.createHmac('sha256', process.env.NOTMETA_WEBHOOK_SECRET)
.update(payload)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
2. Registrar webhook
curl -X POST "https://api.notmeta.com/v1/webhooks" \
-H "Authorization: Bearer TU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-dominio.com/webhook",
"events": ["message.received", "conversation.assigned"]
}'
SDKs oficiales
JavaScript/Node.js
const NotMeta = require('@notmeta/sdk');
const client = new NotMeta({
apiToken: process.env.NOTMETA_API_TOKEN
});
// Enviar mensaje
const message = await client.messages.send({
to: '1234567890',
type: 'text',
text: 'Hola, ¿cómo puedo ayudarte?'
});
Python
from notmeta import NotMeta
client = NotMeta(api_token='tu_token_aqui')
# Enviar mensaje
message = client.messages.send(
to='1234567890',
type='text',
text='Hola, ¿cómo puedo ayudarte?'
)
PHP
composer require notmeta/notmeta-php
<?php
use NotMeta\NotMeta;
$client = new NotMeta([
'api_token' => 'tu_token_aqui'
]);
// Enviar mensaje
$message = $client->messages->send([
'to' => '1234567890',
'type' => 'text',
'text' => 'Hola, ¿cómo puedo ayudarte?'
]);
?>
Herramientas de desarrollo
Postman Collection
Importa nuestra colección de Postman para probar la API:
- Descarga la colección desde GitHub
- Importa en Postman
- Configura las variables de entorno:
Testing
// Ejemplo de test con Jest
const NotMeta = require('@notmeta/sdk');
describe('NotMeta API', () => {
let client;
beforeAll(() => {
client = new NotMeta({
apiToken: process.env.NOTMETA_API_TOKEN
});
});
test('should send message', async () => {
const response = await client.messages.send({
to: '1234567890',
type: 'text',
text: 'Test message'
});
expect(response.id).toBeDefined();
});
});
Mejores prácticas
Seguridad
- Nunca hardcodees tokens en el código
- Usa variables de entorno para credenciales
- Implementa verificación de firmas de webhooks
- Usa HTTPS en producción
Manejo de errores
try {
const response = await client.messages.send(messageData);
} catch (error) {
if (error.status === 401) {
// Token inválido
console.error('Error de autenticación');
} else if (error.status === 429) {
// Rate limit excedido
console.error('Demasiadas solicitudes');
} else {
console.error('Error inesperado:', error.message);
}
}
Rate limiting
// Implementar retry con backoff exponencial
async function sendWithRetry(messageData, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await client.messages.send(messageData);
} catch (error) {
if (error.status === 429 && i < maxRetries - 1) {
const delay = Math.pow(2, i) * 1000;
await new Promise(resolve => setTimeout(resolve, delay));
} else {
throw error;
}
}
}
}
Solución de problemas
Error 401: Unauthorized
- Verifica que tu token sea válido
- Confirma que el token no haya expirado
- Revisa los permisos asignados al token
Error 429: Too Many Requests
- Implementa backoff exponencial
- Reduce la frecuencia de las solicitudes
- Considera usar webhooks en lugar de polling
Error 500: Internal Server Error
- Verifica el formato de tu solicitud
- Contacta soporte técnico si persiste
- Revisa el estado del servicio
Recursos adicionales
Autenticación
Aprende sobre los diferentes métodos de autenticación
Webhooks
Configura notificaciones en tiempo real