Ir al contenido

Slack

El proveedor de Slack integra tu trabajador digital con espacios de trabajo de Slack. Admite:

  • Mensajes directos (DMs)
  • Mensajes de canal
  • Menciones de app
  • Componentes interactivos (botones, menús)
  • Mensajería enriquecida de Block Kit
  • Slash commands
  • Respuestas en hilos
  • Un espacio de trabajo de Slack
  • Acceso de administrador para crear una app de Slack
  1. Crea un par de tokens de configuración de Slack

    Ve a api.slack.com/apps y crea un par de tokens de configuración de app. Copia ambos valores:

    • Token de acceso de configuración (xoxe.xoxp-...)
    • Token de actualización de configuración (xoxe-1-...)
  2. Configura el proveedor

    answers.json
    {
    "setup_answers": {
    "messaging-slack": {
    "slack_configuration_access_token": "xoxe.xoxp-xxx",
    "slack_configuration_refresh_token": "xoxe-1-xxx"
    }
    }
    }
  3. Ejecuta la configuración

    Ventana de terminal
    gtc setup --answers answers.json ./my-bundle
  4. Haz clic en Add to Slack

    La configuración registra o actualiza la app de Slack y expone una acción Add to Slack. Abre la URL de autorización de Slack generada, elige el espacio de trabajo, revisa los scopes solicitados y aprueba la instalación.

    Cuando la redirección de OAuth vuelve a la configuración, Greentic guarda el id de la app de Slack, el id de cliente, el secreto de cliente y las respuestas OAuth de runtime para el tenant. Si el callback no se gestionó automáticamente, ejecuta gtc setup --answers answers.json ./my-bundle de nuevo después de aprobar la instalación.

  5. Agrega la app en Slack

    Abre Slack y comprueba que la app esté instalada en el espacio de trabajo. Para conversaciones de canal, agrega la app al canal donde el trabajador debe responder. Puedes hacerlo desde la configuración de integraciones del canal o mencionando/invitando a la app en el canal.

  6. Inicia o reinicia el runtime

    Ventana de terminal
    gtc start ./my-bundle

    El arranque usa el slack_app_id almacenado y el par de tokens de configuración para actualizar el manifiesto de la app de Slack con la URL de webhook actual.

  7. Prueba el canal

    Envía un mensaje directo a la app o menciona la app en el canal de Slack al que la agregaste. Los eventos de canal solo llegan para canales donde la app es miembro y los scopes instalados permiten el evento.

OpciónRequeridoDescripción
slack_configuration_access_tokenToken de configuración de Slack de corta duración usado para actualizaciones del manifiesto de la app
slack_configuration_refresh_tokenToken de actualización usado para rotar el token de acceso de configuración
slack_app_idGeneradoId de app de Slack creado o devuelto por la configuración
slack_client_idGeneradoId de cliente OAuth de Slack devuelto por el registro de la app
client_secretSecreto generadoSecreto de cliente OAuth de Slack devuelto por el registro de la app
- id: reply
type: reply
config:
message: "Hello! How can I help you?"

Slack usa el formato mrkdwn:

- id: formatted
type: reply
config:
message: |
*Bold* _Italic_ `code`
>Blockquote
• Bullet point

Usa Block Kit de Slack para layouts enriquecidos:

- id: rich_message
type: reply
config:
blocks:
- type: section
text:
type: mrkdwn
text: "*Welcome!*\nHow can I assist you today?"
- type: divider
- type: actions
elements:
- type: button
text:
type: plain_text
text: "Get Help"
action_id: "help_clicked"
value: "help"
- type: button
text:
type: plain_text
text: "View Status"
action_id: "status_clicked"
value: "status"
- id: ask_action
type: reply
config:
message: "What would you like to do?"
blocks:
- type: actions
elements:
- type: button
text:
type: plain_text
text: "Create Ticket"
style: primary
action_id: "create_ticket"
- type: button
text:
type: plain_text
text: "Cancel"
style: danger
action_id: "cancel"
- id: select_option
type: reply
config:
blocks:
- type: section
text:
type: mrkdwn
text: "Select a category:"
accessory:
type: static_select
action_id: "category_select"
options:
- text:
type: plain_text
text: "Technical Support"
value: "technical"
- text:
type: plain_text
text: "Billing"
value: "billing"
- text:
type: plain_text
text: "General"
value: "general"

Responde en un hilo:

- id: thread_reply
type: reply
config:
message: "This replies in the thread"
thread_ts: "{{original_message.thread_ts}}"

Las API de archivos de Slack cambian con el tiempo. Usa esto solo cuando el pack messaging-slack instalado exponga soporte de archivos para tu versión; de lo contrario, envía un enlace o usa el flujo actual de carga externa de Slack.

- id: upload_file
type: reply
config:
files:
- url: "https://example.com/report.pdf"
filename: "report.pdf"
title: "Monthly Report"

Mensajes visibles solo para un usuario:

- id: ephemeral
type: reply
config:
message: "Only you can see this"
ephemeral: true
user: "{{user_id}}"
flows/on_interaction.ygtc
name: handle_interaction
version: "1.0"
nodes:
- id: route_action
type: branch
config:
conditions:
- expression: "action_id == 'help_clicked'"
to: show_help
- expression: "action_id == 'create_ticket'"
to: create_ticket
default: unknown_action
- id: show_help
type: reply
config:
message: "Here's how I can help..."
triggers:
- type: block_action
target: route_action
- id: handle_select
type: branch
config:
conditions:
- expression: "selected_value == 'technical'"
to: technical_flow
- expression: "selected_value == 'billing'"
to: billing_flow
  1. Ve a Slash Commands en la configuración de tu app
  2. Crea un comando (por ejemplo, /support)
  3. Define Request URL hacia tu webhook

Manéjalo en tu flujo:

flows/slash_command.ygtc
name: slash_command
version: "1.0"
nodes:
- id: handle_command
type: reply
config:
message: "Support bot at your service!"
response_type: in_channel # or "ephemeral"
triggers:
- type: slash_command
command: "/support"
target: handle_command
greentic.demo.yaml
tenants:
demo:
teams:
support:
channels:
slack:
provider: messaging-slack
config:
channel_id: "C1234567890"
tenants:
demo:
teams:
support:
channels:
slack-general:
provider: messaging-slack
config:
channel_id: "C1234567890"
slack-vip:
provider: messaging-slack
config:
channel_id: "C0987654321"
  1. Verifica Event Subscriptions:

    • Comprueba que Request URL sea correcta
    • Asegúrate de que los eventos estén habilitados
    • Verifica que el bot esté suscrito a los eventos correctos
  2. Comprueba los permisos del bot:

    • Reinstala la app después de agregar scopes
    • Verifica que el bot esté en el canal
  3. Prueba el webhook:

    Ventana de terminal
    curl https://your-domain.com/v1/messaging/ingress/messaging-slack/demo/default

Tu token de bot no es válido o ha caducado. Obtén un token nuevo desde OAuth & Permissions.

  • Verifica que el ID de canal sea correcto
  • Asegúrate de que el bot esté agregado al canal
  • Comprueba que el canal no esté archivado

Los límites de velocidad de Slack varían según el método. Manéjalos correctamente:

- id: reply
type: reply
config:
message: "Response"
retry_on_rate_limit: true
max_retries: 3

Greentic valida automáticamente:

  • Marca de tiempo de la solicitud
  • Firma usando el secreto de firma
  • Verificación del token