Como usar el modulo http_async_client en Kamailio 6.0.X

1. ¿Qué es http_async_client?

El módulo http_async_client permite a Kamailio realizar peticiones HTTP de forma asíncrona y no bloqueante, gracias a libcurl y un sistema de workers. Esto es útil para integrar Kamailio con APIs externas sin bloquear el flujo SIP: autenticación, facturación, registro de eventos, notificaciones, etc.

2. Ventajas frente al modulo http_client

- No bloquea procesos SIP.
- Soporta múltiples peticiones simultáneas.
- Manejo de subrutas tras la recepción de la respuesta.
- Menor impacto en el rendimiento bajo alta carga.
- Acceso directo a información detallada: código HTTP, cuerpo, encabezados, errores.

3. Carga del módulo

loadmodule "http_async_client.so"

4. Parámetros importantes

modparam("http_async_client", "workers", 4)
modparam("http_async_client", "connection_timeout", 1000)
modparam("http_async_client", "hash_size", 4096)
modparam("http_async_client", "curl_follow_redirect", 1)
modparam("http_async_client", "curl_verbose", 0)

5. Ejemplo: validación de autenticación del INVITE de un usuario vía API externa

route {
if (is_method("INVITE")) {
$var(api_url) = "https://api.example.com/check?user=$fU";
http_async_query($var(api_url), "HTTP_REPLY_ROUTE");
exit;
}
}

route[HTTP_REPLY_ROUTE] {
if ($http_ok == 1 && $http_rs == 200 && $http_rb =~ "OK") {
xlog("L_INFO", "Usuario autorizado: $http_rb\n");
t_relay();
} else {
xlog("L_ERR", "Error HTTP ($http_rs): $http_err - Cuerpo: $http_rb\n");
send_reply("403", "Access Denied");
}
}

7. Pseudo Variables disponibles en la ruta callback

- $http_ok → 1 si la petición fue exitosa (CURL_OK)
- $http_err → Mensaje de error CURL si falla, $null si OK
- $http_rs → Código HTTP (ej. 200, 404)
- $http_rr → Frase de razón HTTP (ej. "OK", "Not Found")
- $http_rb → Cuerpo de la respuesta HTTP
- $http_bs → Tamaño del cuerpo de respuesta
- $http_hdr(Name) → Valor del encabezado HTTP especificado

8. Buenas prácticas

- Usa "exit;" después de invocar http_async_query()
- Limita el número de workers con base en la carga real.
- Usa $http_ok en la sub ruta configurada para verificar si la consulta ha tenido éxito.
- Siempre valida $http_rs y el contenido antes de actuar.
- Implementa timeout agresivo en producción.

9. Conclusión

El módulo http_async_client permite que Kamailio interactúe con APIs externas de forma eficiente y no bloqueante, sin comprometer el rendimiento SIP. Su uso es altamente recomendable en arquitecturas modernas que requieren lógica externa para decisiones de enrutamiento, autorización o notificación.

Documentación oficial: https://kamailio.org/docs/modules/6.0.x/modules/http_async_client.html

 

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Como usar el modulo http_async_client en Kamailio 6.0.X" Suscribirse a VozToVoice - Todos los comentarios