Integraciones
Las automatizaciones pueden conectarse con servicios externos para ampliar su funcionalidad.
Servicios Disponibles
| Categoria | Servicios |
|---|---|
| COMUNICACION | Twilio (SMS), WhatsApp, SES (Email), SendGrid |
| CALENDARIO | Google Cal, Microsoft Cal, Zoom |
| IA/ML | OpenAI (GPT-4), Embeddings |
| STORAGE | AWS S3, Redis |
| WEBHOOKS | Incoming, Outgoing |
| NOTIFICACIONES | Slack, Push |
Twilio (SMS y WhatsApp)
Configuracion
Servicio: TwilioService
Credenciales requeridas:
- TWILIO_ACCOUNT_SID
- TWILIO_AUTH_TOKEN
- TWILIO_PHONE_NUMBER (para SMS)
Para WhatsApp:
- TWILIO_WHATSAPP_NUMBER
Acciones Disponibles
// Enviar SMS
{
"actionType": "SEND_SMS",
"configuration": {
"to": "{{postulant.phone}}",
"message": "Tu entrevista es mañana a las {{event.time}}"
}
}
// Enviar WhatsApp
{
"actionType": "SEND_WHATSAPP",
"configuration": {
"to": "{{postulant.phone}}",
"template": "interview_reminder",
"templateVariables": {
"1": "{{postulant.name}}",
"2": "{{event.date}}"
}
}
}
Recibir Mensajes
Webhook configurado para recibir mensajes entrantes:
Endpoint: POST /api/webhooks/twilio/incoming
El sistema:
- Identifica candidato por telefono
- Crea/actualiza hilo de conversacion
- Emite evento MESSAGE_RECEIVED
- Trigger disponible para automatizaciones
Google Calendar
Configuracion
Servicio: GoogleCalendarService
Configuracion OAuth:
- GOOGLE_CLIENT_ID
- GOOGLE_CLIENT_SECRET
- Callback: /api/google-calendar/callback
Permisos requeridos:
- calendar.events
- calendar.readonly
- calendar.settings.readonly
Acciones Disponibles
// Crear evento
{
"actionType": "CREATE_GOOGLE_EVENT",
"configuration": {
"calendarId": "{{user.googleCalendarId}}",
"title": "Entrevista con {{postulant.name}}",
"startTime": "{{availableSlot.start}}",
"endTime": "{{availableSlot.end}}",
"attendees": [
"{{postulant.email}}",
"{{interviewer.email}}"
],
"conferenceData": {
"type": "hangoutsMeet"
}
}
}
// Verificar disponibilidad
{
"actionType": "CHECK_GOOGLE_AVAILABILITY",
"configuration": {
"calendarId": "{{user.googleCalendarId}}",
"startTime": "{{now}}",
"endTime": "{{now + 7 days}}",
"duration": 60
}
}
Sincronizacion
La sincronizacion es bidireccional:
Talivo a Google:
- Eventos creados en Talivo se crean en Google
- Modificaciones se reflejan
- Cancelaciones se propagan
Google a Talivo (via webhook):
- Eventos nuevos se detectan
- Cambios se actualizan
- Conflictos se notifican
Microsoft Calendar
Configuracion
Servicio: MicrosoftCalendarService
Configuracion OAuth:
- MICROSOFT_CLIENT_ID
- MICROSOFT_CLIENT_SECRET
- MICROSOFT_TENANT_ID
- Callback: /api/microsoft-calendar/callback
Permisos requeridos:
- Calendars.ReadWrite
- User.Read
Acciones Disponibles
// Crear evento en Outlook
{
"actionType": "CREATE_MICROSOFT_EVENT",
"configuration": {
"title": "Entrevista: {{postulant.name}}",
"startTime": "{{availableSlot.start}}",
"duration": 60,
"attendees": ["{{postulant.email}}"],
"isOnlineMeeting": true // Crea link de Teams
}
}
Zoom
Configuracion
Servicio: ZoomService
Credenciales:
- ZOOM_CLIENT_ID
- ZOOM_CLIENT_SECRET
- ZOOM_ACCOUNT_ID
- Callback: /api/zoom/callback
Permisos requeridos:
- meeting:write
- meeting:read
- user:read
Acciones Disponibles
// Crear reunion Zoom
{
"actionType": "CREATE_ZOOM_MEETING",
"configuration": {
"topic": "Entrevista {{job.title}} - {{postulant.name}}",
"startTime": "{{event.startTime}}",
"duration": 60,
"settings": {
"hostVideo": true,
"participantVideo": true,
"waitingRoom": true,
"autoRecording": "cloud"
}
}
}
// Resultado disponible
{
"joinUrl": "https://zoom.us/j/123...",
"startUrl": "https://zoom.us/s/123...",
"meetingId": 123456789,
"password": "abc123"
}
OpenAI
Configuracion
Servicio: OpenAIService (via LangChain)
Credenciales:
- OPENAI_API_KEY
Modelos disponibles:
- gpt-4 (recomendado para respuestas)
- gpt-3.5-turbo (rapido, economico)
- text-embedding-ada-002 (embeddings)
Acciones Disponibles
// Generar respuesta con IA
{
"actionType": "GENERATE_AI_RESPONSE",
"configuration": {
"model": "gpt-4",
"prompt": "Genera un email de bienvenida para {{postulant.name}}...",
"temperature": 0.7,
"maxTokens": 500
}
}
// Analizar CV
{
"actionType": "ANALYZE_CV",
"configuration": {
"documentUrl": "{{document.url}}",
"extractFields": ["skills", "experience", "education"]
}
}
// Calcular Match Score
{
"actionType": "CALCULATE_MATCH_SCORE",
"configuration": {
"candidateId": "{{postulant.id}}",
"jobPositionId": "{{job.id}}"
}
}
AWS SES (Email)
Configuracion
Servicio: SESService
Credenciales:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_REGION
Configuracion:
- Dominio verificado
- Email de remitente verificado
- Templates registrados
Acciones Disponibles
// Enviar email
{
"actionType": "SEND_EMAIL",
"configuration": {
"to": "{{postulant.email}}",
"template": "welcome_email",
"variables": {
"name": "{{postulant.name}}",
"job": "{{job.title}}"
}
}
}
AWS S3 (Storage)
Configuracion
Servicio: S3Service
Credenciales:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_S3_BUCKET
- AWS_REGION
Uso en Automatizaciones
// Subir archivo generado
{
"actionType": "UPLOAD_TO_S3",
"configuration": {
"content": "{{generatedReport}}",
"filename": "report_{{now | format:'YYYY-MM-DD'}}.pdf",
"folder": "reports/{{company.id}}"
}
}
// Generar URL firmada
{
"actionType": "GET_SIGNED_URL",
"configuration": {
"key": "{{document.s3Key}}",
"expiresIn": 3600
}
}
Webhooks
Webhook Entrante
Recibir datos de sistemas externos:
Endpoint: POST /api/webhooks/custom/:webhookId
Configuracion:
- URL unica por webhook
- Secret para validacion
- Headers requeridos
- Mapeo de campos
Ejemplo:
{
"id": "wh_123",
"url": "/api/webhooks/custom/abc123",
"secret": "sk_webhook_xyz",
"trigger": "WEBHOOK_RECEIVED",
"fieldMapping": {
"candidateName": "$.data.name",
"candidateEmail": "$.data.email"
}
}
Webhook Saliente
// Enviar datos a sistema externo
{
"actionType": "CALL_WEBHOOK",
"configuration": {
"url": "https://api.external.com/candidates",
"method": "POST",
"headers": {
"Authorization": "Bearer {{secrets.API_KEY}}",
"Content-Type": "application/json"
},
"body": {
"name": "{{postulant.name}}",
"email": "{{postulant.email}}",
"status": "{{application.status}}"
},
"timeout": 30000,
"retries": 3
}
}
Slack
Configuracion
Integracion via Webhook:
- SLACK_WEBHOOK_URL
O via App:
- SLACK_BOT_TOKEN
- SLACK_SIGNING_SECRET
- Permisos: chat:write, channels:read
Acciones Disponibles
// Enviar mensaje a canal
{
"actionType": "SEND_SLACK_MESSAGE",
"configuration": {
"channel": "#reclutamiento",
"message": "Nueva aplicacion de {{postulant.name}} para {{job.title}}",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Nueva Aplicacion*"
}
},
{
"type": "section",
"fields": [
{ "type": "mrkdwn", "text": "*Candidato:*\n{{postulant.name}}" },
{ "type": "mrkdwn", "text": "*Vacante:*\n{{job.title}}" }
]
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": { "type": "plain_text", "text": "Ver Perfil" },
"url": "{{postulant.profileUrl}}"
}
]
}
]
}
}
Redis (Cache y Colas)
Uso Interno
Redis se usa para:
- Cache de sesiones
- Cola de ejecuciones (AgentQueueService)
- Vector Store (VectorSearchService)
- Rate limiting
- Pub/Sub para eventos
En Automatizaciones
// Guardar en cache
{
"actionType": "CACHE_SET",
"configuration": {
"key": "match_score_{{postulant.id}}_{{job.id}}",
"value": "{{matchScore}}",
"ttl": 86400 // 24 horas
}
}
// Leer de cache
{
"actionType": "CACHE_GET",
"configuration": {
"key": "match_score_{{postulant.id}}_{{job.id}}",
"outputVariable": "cachedScore"
}
}
Configurar Integraciones
Panel de Integraciones
CONECTADAS
- Google Calendar - usuario@empresa.com
- Zoom - cuenta conectada
- Twilio - +52 55 1234 5678
DISPONIBLES
- Microsoft Calendar [Conectar]
- Slack [Conectar]
WEBHOOKS
- Webhook 1: ATS Externo [Configurar]
- [+ Nuevo Webhook]
Secretos y Credenciales
Los secretos se almacenan de forma segura:
| Secreto | Valor |
|---|---|
| EXTERNAL_API_KEY | ********** |
| WEBHOOK_SECRET | ********** |
Uso en acciones:
{{secrets.EXTERNAL_API_KEY}}
Buenas Practicas
Seguridad
DO:
- Usar secrets para credenciales
- Validar webhooks entrantes
- Limitar permisos al minimo
- Rotar credenciales periodicamente
- Monitorear uso de APIs
DON'T:
- Hardcodear credenciales
- Exponer secrets en logs
- Permisos excesivos
- Ignorar limites de rate
- Conexiones sin encriptar
Rate Limiting
Considerar limites de APIs:
- OpenAI: Tokens por minuto
- Twilio: Mensajes por segundo
- Zoom: Requests por segundo
- Implementar backoff exponencial
Proximos Pasos
- Ejemplos Practicos - Casos de uso
- Ejecucion y Monitoreo - Ver logs
- Triggers de Eventos - Configurar triggers