DEV Community

Priscila Oliveira
Priscila Oliveira

Posted on

Automação de Daily no Slack com GitHub Actions e Python

📌 Introdução

Se você trabalha com metodologias ágeis, sabe como as dailies são essenciais para manter o time alinhado. Mas e se você pudesse automatizar o lembrete e a escolha do apresentador de cada dia?

O DailyBot resolve isso! 🎉

Ele é um bot automatizado para Slack, que anuncia diariamente a reunião e seleciona automaticamente quem será o próximo apresentador. Tudo isso rodando de forma totalmente automatizada com Python, GitHub Actions e a API do Slack.

Este artigo vai te guiar pelo passo a passo para criar, configurar e automatizar o DailyBot no seu time!

O projeto original se encontra no Github, fique à vontade para abrir issues e pull requests no GitHub!


🛠 Tecnologias Utilizadas

Vamos usar as seguintes ferramentas para implementar o bot:

  • Python 3.9 → Para programar o bot.
  • Slack API → Para postar mensagens no canal do time.
  • GitHub Actions → Para rodar o bot automaticamente todos os dias úteis.
  • Requests (Python) → Para enviar requisições à API do Slack.

📂 Estrutura do Projeto

O projeto segue uma estrutura organizada para facilitar a manutenção:

.
├── .github/workflows/       # Configuração do GitHub Actions
│   ├── ci.yaml              # Workflow para execução automatizada
├── scripts/                 # Diretório para scripts Python
│   ├── daily_slack.py       # Script responsável pelo envio da mensagem para o Slack
├── .gitignore               # Arquivo para ignorar arquivos desnecessários no repositório
├── LICENSE                  # Licença do projeto
├── README.md                # Documentação do projeto
Enter fullscreen mode Exit fullscreen mode

Agora, vamos ao código! 💻


📢 Criando o Bot no Slack

Antes de rodarmos o DailyBot, precisamos criar um bot no Slack para gerar as credenciais necessárias.

1️⃣ Criando um App no Slack

  1. Acesse 🔗 Create a Slack App.
  2. Clique em "Create New App" e escolha "From Scratch".
  3. Dê um nome ao seu bot (exemplo: DailyBot) e selecione o workspace do seu time.
  4. Vá até OAuth & Permissions e adicione os seguintes escopos:
    • chat:write → Para enviar mensagens no canal.
    • chat:write.public → Para postar em canais públicos.
    • users:read → Para listar os membros do time.
  5. Instale o aplicativo no workspace e copie o Bot User OAuth Token (SLACK_TOKEN).

Agora que o bot já está no Slack, vamos programá-lo! 🛠️


⚙️ Configurando o Script em Python

Crie o arquivo scripts/daily_slack.py e adicione o seguinte código:

import requests
import os
from datetime import datetime

# Obtendo as variáveis de ambiente
SLACK_TOKEN = os.getenv("SLACK_TOKEN")
CHANNEL_ID = os.getenv("CHANNEL_ID")
SLACK_MEMBERS = os.getenv("SLACK_MEMBERS").split(",")

# Calculando o apresentador do dia
execution_number = datetime.utcnow().timetuple().tm_yday  
next_index = (execution_number - 1) % len(SLACK_MEMBERS)  
presenter = f"<@{SLACK_MEMBERS[next_index]}>"

# Mensagem para o Slack
message = (
    f"🎤 Olá pessoal! \n"
    f"Quem apresentará hoje: {presenter}!"
)

# Configuração da API do Slack
url = "https://slack.com/api/chat.postMessage"
headers = {"Authorization": f"Bearer {SLACK_TOKEN}", "Content-Type": "application/json"}
data = {"channel": CHANNEL_ID, "text": message}

# Enviando a mensagem para o Slack
response = requests.post(url, json=data, headers=headers)
print("Mensagem enviada:", response.json())
Enter fullscreen mode Exit fullscreen mode

🔍 Como Funciona a Lógica do Script?

Esse script segue uma lógica simples e eficiente para alternar automaticamente o apresentador da daily.

Passo a passo:

  1. Carregamos as variáveis de ambiente → O token do bot (SLACK_TOKEN), o ID do canal (CHANNEL_ID) e a lista de membros (SLACK_MEMBERS).
  2. Calculamos o dia do ano atual → O execution_number retorna um valor de 1 a 365.
  3. Selecionamos o próximo apresentador → Usamos o operador módulo % para percorrer ciclicamente a lista de membros.
  4. Criamos a mensagem com o apresentador do dia → O Slack usa <@userID> para mencionar um usuário.
  5. Enviamos a mensagem usando a API do Slack.

Exemplo prático:

Se a lista de apresentadores for:

export SLACK_MEMBERS="U12345,U67890,U54321"
Enter fullscreen mode Exit fullscreen mode

O apresentador será alternado conforme o dia do ano:

Dia do Ano Apresentador
1 (Jan) U12345
2 (Jan) U67890
3 (Jan) U54321
4 (Jan) U12345 (reinicia)

Essa abordagem garante que o bot sempre escolhe o próximo da fila, sem repetições ou sorteios aleatórios. 🔄


🔄 Automatizando com GitHub Actions

Agora, vamos configurar o GitHub Actions para rodar esse bot automaticamente todos os dias úteis.

📌 Criando o Workflow .github/workflows/ci.yaml

Crie o arquivo .github/workflows/ci.yaml e adicione:

name: Daily Slack Notification

on:
  schedule:
    - cron: "30 12 * * 1-5" # Executa às 12:30 (UTC) de segunda a sexta
  workflow_dispatch: # Permite execução manual via GitHub Actions

jobs:
  daily-slack-notification:
    name: Enviar Notificação para o Slack
    runs-on: ubuntu-latest

    steps:
      - name: Checkout do repositório
        uses: actions/checkout@v4

      - name: Configurar Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.9"

      - name: Instalar dependências
        run: pip install requests

      - name: Executar script Python
        run: python scripts/daily_slack.py
Enter fullscreen mode Exit fullscreen mode

📌 Como funciona esse Workflow?

✔️ Execução automática → O cron agendado faz o bot rodar de segunda a sexta às 12:30 UTC.

✔️ Execução manual → Você pode rodar a ação manualmente via GitHub Actions.

✔️ Instalação automática de dependências → O bot instala requests antes de rodar o script.


🎯 Conclusão

Agora você sabe como:

✅ Criar um bot no Slack para anunciar dailies.

✅ Escrever um script Python para enviar mensagens automaticamente.

✅ Configurar um workflow no GitHub Actions para automação diária.

✅ Alternar automaticamente o apresentador da daily com uma lógica eficiente.

Agora sua equipe nunca mais esquecerá a daily e quem irá apresenta-la! 🚀

Se tiver dúvidas ou sugestões, deixe um comentário. Se gostou do artigo, compartilhe com seu time! 😊🔥

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post