9 min de leituraIntegrações

Bot encurtador de URL para Slack: encurte links e roteie alertas

Instale o app Elido para Slack, use o comando slash /shorten e roteie alertas de limiar para qualquer canal sem escrever handlers de webhook.

Marius Voß
DevRel · edge infra
Diagrama do bot encurtador de URL para Slack: comando slash à esquerda, edge da Elido no centro, mensagens de alerta de canal à direita com badges de severidade.

O Slack já tomou conta da superfície de chat do seu time - que ele também encurte os seus links. O app Elido para Slack faz duas coisas: dá a cada membro um comando slash /shorten e roteia alertas de eventos de link para os canais que você escolher. A instalação leva cerca de 90 segundos. Nenhum código de handler de webhook, nenhum Bolt SDK, nenhum túnel ngrok.

Este artigo percorre as três partes em jogo: o fluxo do comando slash, a matriz de roteamento de alertas e o mecanismo de assinatura HMAC que impede requisições POST aleatórias de se passarem pelo Slack. Se você quiser entender a superfície de webhooks mais ampla que alimenta esses alertas, o artigo webhooks para eventos de link documenta cada payload que a Elido emite. O app Slack é uma das integrações pré-construídas que consome esses eventos por você.

O comando slash /shorten

Um usuário digita isso em qualquer canal:

/shorten https://blog.elido.app/post/launch-2026?utm_source=announce

O Slack envia um POST assinado para https://api.elido.app/integrations/slack/commands. O corpo é application/x-www-form-urlencoded (o Slack ainda usa codificação de formulário para comandos slash, não JSON - o que pega todo mundo de surpresa na primeira vez). Os campos relevantes são:

team_id=T01ABCD2EF
channel_id=C01234ABCDE
user_id=U01HJKLMNOP
command=/shorten
text=https://blog.elido.app/post/launch-2026?utm_source=announce
response_url=https://hooks.slack.com/commands/T01ABCD2EF/...

A Elido busca a linha OAuth pelo team_id, encontra o ID do workspace contra o qual foi instalada, cria um shortlink no domínio padrão do workspace e retorna uma mensagem efêmera em menos de 200ms no p95. A resposta é efêmera por padrão para que o canal não seja bombardeado toda vez que alguém encurta uma URL durante uma reunião.

Se quem invocou o comando quiser uma mensagem pública, passa --public como último token:

/shorten --public https://launch.elido.app

Três escopos OAuth são necessários na instalação: commands (para que o comando slash possa ser invocado), chat:write (para que a Elido possa postar mensagens de acompanhamento com botões de cópia) e incoming-webhook (para que os alertas cheguem ao canal escolhido pelo instalador). A referência de Slash Commands do Slack lista o conjunto completo, mas esses três cobrem tudo o que a Elido faz. Domínios personalizados são respeitados: se o seu workspace tem go.acme.com configurado via domínios personalizados, o /shorten cria shortlinks nesse host.

Diagrama em três estágios do comando slash /shorten da Elido: o usuário digita o comando, o Slack envia uma requisição assinada para api.elido.app, a Elido responde com uma mensagem efêmera contendo o link curto em 200ms p95.

Uma nota sobre orçamentos de latência. O Slack dá aos comandos slash 3000ms de tempo real para responder. A Elido responde em 180-220ms p95 nos POPs de edge da UE e dos EUA porque o handler do comando slash usa o mesmo cache de caminho rápido que o redirect de edge. Se o seu time está na APAC e você vê valores acima de 350ms, verifique o roteamento regional de POPs em /docs/guides/observability.

Alertas de canal impulsionados por gatilhos de eventos

A outra metade do app Slack é o roteamento de alertas. Você escolhe um tipo de evento, escolhe um canal e recebe uma notificação. Os quatro tipos de evento disponíveis hoje:

  • broken-link: o destino retornou 4xx ou 5xx no último crawl do scanner de links
  • click-threshold: os cliques ultrapassaram um limiar salvo (padrão: 100 em uma janela deslizante de 5 minutos)
  • scan-failure: o scanner de URL sinalizou o destino como phishing, malware ou em uma blocklist pública
  • new-conversion: uma conversão rastreada foi disparada (requer rastreamento de conversões)

O payload de alerta que a Elido encaminha para o Slack usa Block Kit, porque texto simples em um canal movimentado é ignorado. Veja como fica um alerta click-threshold no fio quando a Elido faz POST na URL do incoming-webhook do Slack:

{
  "text": "click-threshold crossed on go.acme.com/launch",
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": ":chart_with_upwards_trend: Click threshold crossed"
      }
    },
    {
      "type": "section",
      "fields": [
        {
          "type": "mrkdwn",
          "text": "*Link:*\n<https://go.acme.com/launch|go.acme.com/launch>"
        },
        { "type": "mrkdwn", "text": "*Window:*\n5m" },
        { "type": "mrkdwn", "text": "*Clicks:*\n412" },
        { "type": "mrkdwn", "text": "*Threshold:*\n100" }
      ]
    },
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": { "type": "plain_text", "text": "Open dashboard" },
          "url": "https://app.elido.app/links/abc123"
        }
      ]
    }
  ]
}

Um alerta scan-failure é semelhante, mas usa :rotating_light: e inclui a categoria de ameaça do scanner: phishing, malware, spam ou blocklist. Um alerta broken-link traz o código de status HTTP e o timestamp do último estado funcional conhecido - a primeira pergunta que a pessoa de plantão faz.

Matriz de roteamento de alertas: linhas mostram os tipos de evento broken-link, click-threshold, scan-failure, new-conversion; colunas mostram o canal Slack de destino, emoji, alvo do ping, cor de severidade.

O roteamento é por workspace e por evento. Uma configuração típica para um time de growth de 30 pessoas:

EventoCanalEmojiPings
broken-link#ops-alerts:rotating_light:@oncall
click-threshold#growth:chart_with_upwards_trend:(nenhum)
scan-failure#security:rotating_light:@sec-oncall
new-conversion#wins:tada:(nenhum)

Você configura isso no painel de configurações da integração com o Slack. Cada rota é uma linha no Postgres - sem YAML, sem arquivo de configuração JSON, sem redeploy. O mesmo motor de roteamento alimenta as integrações com o Linear e o Pipedrive, então o modelo mental se transfere se você usa ambos.

Se quiser que os alertas cheguem a múltiplos destinos, espelhe o mesmo evento para uma assinatura de webhook genérica e roteie o JSON para onde precisar. Esse padrão está documentado em automação de encurtador de URL com Zapier para o público no-code.

Verificação HMAC e a armadilha da reinstalação

O Slack assina cada requisição de entrada para o seu endpoint de comando slash. A assinatura é HMAC SHA256 sobre uma string que o Slack constrói a partir da versão, do timestamp e do corpo bruto da requisição. O procedimento está no guia de verificação de requisições do Slack. O verificador da Elido em Go se parece com isso:

func verifySlackSignature(secret, ts, body, sig string) error {
    // Reject anything older than 5 minutes to block replays.
    age := time.Since(parseTs(ts))
    if age > 5*time.Minute || age < -1*time.Minute {
        return errReplay
    }
    base := fmt.Sprintf("v0:%s:%s", ts, body)
    mac := hmac.New(sha256.New, []byte(secret))
    mac.Write([]byte(base))
    expected := "v0=" + hex.EncodeToString(mac.Sum(nil))
    if !hmac.Equal([]byte(expected), []byte(sig)) {
        return errBadSig
    }
    return nil
}

Três coisas dão errado aqui, em ordem de frequência:

1. O corpo é parseado antes da assinatura. Se o seu framework HTTP chamar r.ParseForm() antes de você ler o corpo bruto, o corpo some e a assinatura nunca vai bater. Leia r.Body primeiro, depois faça o parse. O handler de comando slash da Elido lê o corpo em um buffer e o re-parseia, o que custa uma alocação de memória e economiza uma semana de depuração.

2. Drift de relógio no timestamp. A janela de replay recomendada pelo Slack é de 5 minutos. Se o relógio do seu servidor derivar mais do que isso (comum em bare-metal sem chrony), toda requisição assinada parece um replay. Execute chronyc tracking no servidor e confirme Leap status: Normal.

3. Reinstalação com signing secret rotacionado. Esse é o que te acorda de madrugada. Se você rotacionar o signing secret no painel do app Slack (Basic Information > Signing Secret > Regenerate), todas as instalações OAuth existentes em todos os workspaces começam imediatamente a falhar na verificação de assinatura. O administrador do workspace precisa reinstalar o app para obter um novo handshake. Não há rotação silenciosa - o Slack não propaga o novo segredo para as instalações existentes.

O raio de explosão depende do seu modelo de distribuição. Se o seu app Slack é de workspace único (app interno da sua empresa), a rotação é uma reinstalação de 90 segundos por um único administrador. Se o seu app está no diretório público do Slack e 4000 workspaces o instalaram, você acabou de bloquear todos eles. Escolha as janelas de rotação de acordo e anuncie no changelog com pelo menos 48 horas de antecedência.

Um modo de falha relacionado: instalar o mesmo app Slack em um workspace diferente usando a mesma sessão do navegador. O Slack às vezes retorna um token vinculado ao time errado quando os cookies são persistentes. A solução é uma janela privada ou ?ignore_session=1 na URL de instalação. O fluxo de instalação da Elido em /dashboard/integrations/slack já passa essa flag porque nos queimamos no início da Beta.

Quando o bot do Slack não é a resposta certa

O Slack é ótimo para alertas com intervenção humana. É o destino errado para eventos programáticos de alto volume. Se você gerar mais de ~20 eventos por minuto, o Slack limita o endpoint de incoming-webhook a aproximadamente 1 mensagem por segundo por canal, e você perderá alertas. Roteie-os para uma métrica do Datadog ou um consumidor de webhook bruto, e encaminhe para o Slack apenas o resumo do cruzamento de limiar.

O outro caso em que o Slack é a escolha errada: trilhas de auditoria de conformidade. As mensagens do Slack são mutáveis (você pode editá-las e excluí-las) e a política de retenção é controlada pelo workspace. Se o seu auditor precisar de um log imutável de quem encurtou qual link e quando, envie os eventos do comando slash para o seu data warehouse via exportação do ClickHouse e trate o Slack apenas como camada de notificação.

Para times de growth que roteiam alertas de cliques de campanha, o bot do Slack cobre 95% do que as pessoas pedem em /solutions/marketers. Para times de plataforma que usam nossa API + SDKs, é um dos vários destinos para os quais você pode fazer fan-out.

Preços e limites

A integração com o Slack está disponível em todos os planos, incluindo o gratuito. Não há cobrança por mensagem - o limite é nos próprios shortlinks e cliques, que você pode verificar na página de preços. Cada workspace pode configurar até 32 regras de roteamento (combinações de tipo de evento x canal), mais do que qualquer time com quem conversei chegou a usar.

Instalações self-hosted da Elido também funcionam. Você aponta a URL de requisição do app Slack para o seu próprio domínio, define o signing secret no ambiente do api-core e o restante é idêntico. Os docs de self-host cobrem as variáveis de ambiente; o guia de observabilidade cobre os nomes das métricas para que você possa graficar a latência dos comandos slash e a taxa de sucesso na entrega de alertas no Grafana ou Datadog.

O que fazer a seguir

Se você já usa a Elido, abra /dashboard/integrations/slack, clique em Conectar, escolha um canal padrão para cada tipo de evento e mãos à obra. A instalação realmente leva 90 segundos. Se você está avaliando, o catálogo de integrações lista cada conector e em qual plano está disponível, e a comparação com o Bitly mostra como a superfície do Slack se compara com os incumbentes (spoiler: o Bitly não tem comando slash).

Se você está construindo o seu próprio bot, copie o padrão HMAC acima e respeite o relógio de 3000ms. A UX de comandos slash do Slack penaliza tudo o que é lento, e um bot que parece rápido é metade do motivo pelo qual as pessoas o instalam.

Perguntas frequentes

Como instalo o bot encurtador de URL Elido para Slack?

Abra /dashboard/integrations/slack na Elido e clique em Conectar. Você será redirecionado para a tela OAuth do Slack, escolha o workspace, aprove os escopos (commands, chat:write, incoming-webhook) e estará de volta na Elido em aproximadamente 90 segundos. A instalação grava uma linha de token indexada por team_id, de modo que cada workspace tem suas próprias credenciais.

O /shorten funciona em canais privados e DMs?

Sim. Comandos slash são executados no canal em que o usuário os digita, incluindo canais privados e DMs, porque o Slack passa o channel_id no payload assinado. A Elido responde com uma mensagem efêmera visível apenas para quem a invocou, mantendo o canal tranquilo em encurtamentos pontuais.

Como os payloads de alerta do Slack são assinados?

Os alertas de saída da Elido para o Slack usam a URL do incoming-webhook do Slack, que por si só é um segredo no estilo bearer vinculado a um canal. Os comandos slash de entrada do Slack para a Elido são verificados com HMAC SHA256 sobre o corpo bruto da requisição e o cabeçalho X-Slack-Request-Timestamp, seguindo a receita de signing-secret do Slack.

O que acontece com o bot do Slack se eu reinstalar o app OAuth?

Reinstalar gera um novo token de bot e invalida o antigo. O signing secret só rotaciona se você o regenerar no painel do app Slack; nesse caso, cada workspace que usa sua distribuição precisa reinstalar. Planeje as rotações em janelas de baixo tráfego e anuncie-as no #ops.

Quais tipos de alerta posso rotear para canais do Slack?

Quatro tipos de evento estão disponíveis hoje: broken-link (4xx ou 5xx detectado no destino do shortlink), click-threshold (um limiar salvo foi ultrapassado em uma janela de 5 minutos), scan-failure (o scanner de URL sinalizou o destino como phishing ou malware) e new-conversion (uma conversão rastreada foi disparada). Cada alerta pode ter um canal de destino diferente.

Experimente Elido

Cole uma URL, obtenha um link curto

Sem cadastro. O link vive 30 dias. Cadastre-se para mantê-lo para sempre.

Grátis, sem necessidade de registo · 2 por dia

Experimente o Elido

Encurtador de URL hospedado na UE: domínios personalizados, análises profundas e API aberta. Plano gratuito - sem cartão de crédito.

Tags
slack url shortener
slack link shortening bot
slack short links
slack /shorten command
slack channel alerts

Continuar lendo