Form to Wipe — Implementación n8n
Esta guía cubre la implementación n8n de Form to Wipe. Utiliza un comando de barra diagonal de Slack para abrir una modal, enruta la solicitud a un aprobador a través de DM de Slack, y envía comandos de borrado a través de la Jamf Platform API. Los aprobadores se pueden obtener de Microsoft Entra, Okta, o un grupo de usuarios de Slack.
Requisitos previos
- n8n autohospedado (≥ 1.30) o n8n Cloud
- Aplicación Slack con los scopes requeridos (ver Paso 2 a continuación)
- Cliente OAuth2 de la Jamf Platform API con privilegios de borrado (ver Form to Wipe)
- Uno de: Registro de aplicación de Microsoft Entra, token API de Okta, o un grupo de usuarios de Slack para aprobadores
Paso 1 — Importar el flujo de trabajo
En n8n: Workflows → Import from file → seleccione Jamf-FTW-n8n-template.json.
El flujo de trabajo se importa como inactivo. No lo active aún — complete primero la configuración de credenciales y variables.
Paso 2 — Credenciales
Cree las siguientes credenciales en Settings → Credentials antes de conectar el flujo de trabajo.
Token de autenticación de Slack
Cree una aplicación Slack en api.slack.com/apps
Agregue los siguientes Bot Token Scopes en OAuth & Permissions:
Scope Propósito commandsRecibir comandos de barra diagonal chat:writeEnviar DMs y mensajes de canal chat:deleteLimpiar mensajes de aprobación después de una decisión users:readBuscar usuarios por ID users:read.emailBuscar usuarios por correo electrónico (rutas de Okta/Entra) usergroups:readLeer pertenencia a grupo de usuarios de Slack views:openAbrir modales views:updateActualizar modales en error de validación Instale la aplicación en su espacio de trabajo y copie el Bot User OAuth Token
En n8n: cree una nueva credencial HTTP Bearer Auth, pegue el token, asígnele el nombre
Slack Auth Token
Jamf Platform API
En Jamf Pro: Settings → API roles and clients → API Clients → New
Asigne un rol con los privilegios enumerados en Form to Wipe
Nota sobre grupos de computadoras estáticos: La Platform API no tiene un punto final nativo de pertenencia a grupo de computadoras estáticas. El flujo de trabajo recurre al proxy de Classic API (
/api/proclassic/...), que está cubierto por el mismo privilegioRead Computer Groups.Genere un secreto de cliente y anote el ID de cliente y el secreto
En n8n: cree una nueva credencial OAuth2 API:
- Grant type:
Client Credentials - Token URL:
https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token - Client ID / Secret: del anterior
- Grant type:
Asígnele el nombre
Jamf Platform API
Acceso a API Gateway: El flujo de trabajo también llama a la Jamf Platform API Gateway (
apigw.jamf.com). Póngase en contacto con su representante de Jamf si no tiene acceso.
Okta API — solo si IDP_PROVIDER = okta
- En Okta: Security → API → Tokens → Create Token
- En n8n: cree una nueva credencial Okta API con su dominio Okta y el token
- Asígnele el nombre
Okta account
Microsoft Entra — solo si IDP_PROVIDER = entra
- En Azure: App registrations → New registration
- Agregue permiso de API:
GroupMember.Read.All(tipo de aplicación) y otorgue consentimiento de administrador - Cree un secreto de cliente
- En n8n: cree una nueva credencial Microsoft Entra OAuth2
- Asígnele el nombre
Microsoft Entra ID (Azure Active Directory) account
Paso 3 — Variables
Cree cada variable en n8n en Settings → Variables.
Variables requeridas
| Variable | Descripción | Ejemplo |
|---|---|---|
JAMF_TENANT_NAMES |
Nombres mostrados separados por comas para sus inquilinos Jamf | Production,Staging |
JAMF_TENANT_IDS |
UUIDs de inquilino separados por comas — mismo orden que los nombres | aaaaaaaa-...,bbbbbbbb-... |
APPROVER_SOURCE |
De dónde obtener la lista de aprobadores: scim, idp, o dev |
idp |
IDP_PROVIDER |
Requerido si APPROVER_SOURCE=idp: entra u okta |
entra |
APPROVAL_TIMEOUT_SECONDS |
Cuánto tiempo antes de que la solicitud expire | 3600 |
AUDIT_LOG_CHANNEL_ID |
ID de canal de Slack para todos los eventos de auditoría | C0123456789 |
WEBHOOK_VERIFY_TOKEN |
Un UUID o secreto aleatorio — también establecer en la URL del comando de barra diagonal de Slack | your-secret-uuid |
Variables por origen de aprobador
Si APPROVER_SOURCE = scim (Grupo de usuarios de Slack):
| Variable | Valor |
|---|---|
APPROVER_USERGROUP_ID |
ID de grupo de usuarios de Slack — formato: S0XXXXXXXX |
Si APPROVER_SOURCE = idp + IDP_PROVIDER = okta:
| Variable | Valor |
|---|---|
IDP_OKTA_GROUP_ID |
ID de grupo de Okta — formato: 00gXXXXXX |
IDP_OKTA_SLACK_EMAIL_FIELD |
Campo de perfil a usar para búsqueda de correo electrónico de Slack (generalmente email) |
Si APPROVER_SOURCE = idp + IDP_PROVIDER = entra:
| Variable | Valor |
|---|---|
ENTRA_APPROVER_GROUP_ID |
ID de objeto de Azure AD de su grupo de aprobadores |
Si APPROVER_SOURCE = dev (grupo de usuarios de Slack alternativo, para pruebas):
| Variable | Valor |
|---|---|
DEV_APPROVER_USERGROUP_ID |
ID de grupo de usuarios de Slack para aprobadores de desarrollo/prueba |
Configuración multi-inquilino
Las variables JAMF_TENANT_NAMES y JAMF_TENANT_IDS deben estar en el mismo orden — el índice 0 de nombres se asigna al índice 0 de IDs. La lista desplegable de inquilino en la modal de Slack se construye dinámicamente en tiempo de ejecución a partir de estas variables; no se requiere configuración adicional por inquilino.
Región de API Gateway: El flujo de trabajo usa de forma predeterminada
us.apigw.jamf.com. Si sus inquilinos están en UE o APAC, actualice la constanteREGIONen los nodos de código Find Group + Build Members URL y Determine Management Id Lookup URL.
Paso 4 — Configuración de aplicación Slack
Comando de barra diagonal
- En su aplicación Slack: Slash Commands → Create New Command
- Comando:
/device-wipe(o su nombre preferido) - Request URL:
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN - Descripción breve:
Submit a Jamf device wipe request
Interactividad
- En su aplicación Slack: Interactivity & Shortcuts → Turn On
- Request URL:
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN
Tanto el comando de barra diagonal como los componentes interactivos (envíos de modal, clics de botón) deben apuntar a la misma URL de webhook con su token de verificación como parámetro de consulta.
Paso 5 — Activar
- Abra el flujo de trabajo en n8n
- Reconecte cada nodo a su credencial (n8n limpia los enlaces de credenciales al importar)
- Haga clic en Activate
- Pruebe con
/device-wipeen Slack
Resumen de flujo
/device-wipe (Slack)
→ Webhook → Verificar token → Analizar Webhook
→ Cambiar en tipo de webhook:
slash_command → Abrir modal de solicitud de borrado
view_submission → Analizar envío → Validar →
Resolver IDs de dispositivos → Enviar a aprobación
approver_response → aprobar: REGISTRAR → Analizar → Enviar confirmación final al solicitante
→ rechazar: REGISTRAR → DM solicitante
final_confirmation → confirmar: REGISTRAR → Dividir por dispositivo →
Enviar comando de borrado × N →
Combinar resultados → DM resultados → REGISTRAR
→ cancelar: REGISTRAR → DM solicitante
ruta de tiempo de espera → DM solicitante si no hay aprobación dentro de APPROVAL_TIMEOUT_SECONDS
Solución de problemas
La modal no se abre
Verifique que la URL de Request del comando de barra diagonal incluya ?token=YOUR_WEBHOOK_VERIFY_TOKEN. El nodo Verify Token rechaza las solicitudes donde el token no coincide.
La lista de aprobadores está vacía
scim: confirme queAPPROVER_USERGROUP_IDes correcto y que la aplicación Slack tieneusergroups:readokta: confirmeIDP_OKTA_GROUP_IDy que la credencial de Okta tiene acceso de lectura de gruposentra: confirmeENTRA_APPROVER_GROUP_IDy que la aplicación Entra tieneGroupMember.Read.All
El comando de borrado devuelve 4xx Confirme que la credencial de la Jamf Platform API tiene privilegios de borrado y que está utilizando la región de API Gateway correcta.
La lista desplegable de inquilino muestra valores de marcador de posición
Configure las variables JAMF_TENANT_NAMES y JAMF_TENANT_IDS antes de activar el flujo de trabajo.