Przejdź do treści

Publikowanie przez HTTP

Najprostszy sposób publikowania wiadomości to wykorzystanie żądań HTTP POST lub PUT.

Podstawowe publikowanie

Żądanie POST

curl -d "Twoja wiadomość tutaj" https://app.notifer.io/twoj-temat

Żądanie PUT

echo "Twoja wiadomość" | curl -T - https://app.notifer.io/twoj-temat

Obie metody działają identycznie - użyj tej, która jest wygodniejsza.

Parametry wiadomości

Dodaj szczegóły do swoich wiadomości używając nagłówków HTTP:

Tytuł

curl -d "Wdrożenie zakończone pomyślnie" \
  -H "X-Title: Wdrożenie produkcyjne" \
  https://app.notifer.io/deployments

Priorytet

Ustaw priorytet od 1 (min) do 5 (pilne):

curl -d "Serwer nie działa!" \
  -H "X-Priority: 5" \
  https://app.notifer.io/alerts

Tagi

Dodaj tagi oddzielone przecinkami:

curl -d "Utracono połączenie z bazą danych" \
  -H "X-Tags: database,error,production" \
  https://app.notifer.io/alerts

Połączone parametry

curl -d "Użycie CPU na poziomie 95%" \
  -H "X-Title: Alert serwera" \
  -H "X-Priority: 4" \
  -H "X-Tags: server,cpu,warning" \
  https://app.notifer.io/monitoring

Uwierzytelnianie

Publiczne tematy

Nie jest wymagane uwierzytelnianie - każdy może publikować:

curl -d "Wiadomość publiczna" https://app.notifer.io/public-topic

Bezpieczeństwo tematów PUBLIC

Każdy, kto zna nazwę tematu, może do niego publikować! Obejmuje to:

  • Brak wymaganego uwierzytelniania
  • Tylko ograniczenie liczby żądań na podstawie IP (100 żądań/minutę na IP)
  • Brak możliwości blokowania konkretnych użytkowników

Dla systemów produkcyjnych lub wrażliwych danych używaj tematów PRIVATE.

Dobre praktyki dla tematów PUBLIC:

  • Używaj trudnych do odgadnięcia nazw (np. swift-falcon-x8k2jf9a)
  • Nie udostępniaj nazw tematów w publicznych repozytoriach lub dokumentacji
  • Tematy muszą być najpierw utworzone przez panel, zanim będzie można do nich publikować

Temat musi istnieć przed publikowaniem:

# ❌ To się nie powiedzie, jeśli temat nie istnieje (błąd 404)
curl -d "Wiadomość" https://app.notifer.io/nonexistent-topic

# ✅ Najpierw utwórz temat przez panel, następnie publikuj
curl -d "Wiadomość" https://app.notifer.io/my-existing-topic

Prywatne tematy

Prywatne tematy wymagają uwierzytelniania. Masz trzy opcje:

Opcja 1: Token dostępu do tematu (zalecane)

Użyj nagłówka X-Topic-Token z tokenem dostępu specyficznym dla tematu:

curl -d "Wiadomość prywatna" \
  -H "X-Topic-Token: tk_your_token_here" \
  https://app.notifer.io/private-topic

Tworzenie tokena dostępu do tematu:

# Najpierw uzyskaj token JWT przez zalogowanie się
curl -X POST https://app.notifer.io/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"your_password"}'

# Utwórz token dostępu do tematu
curl -X POST https://app.notifer.io/api/topics/private-topic/access-tokens \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My script token",
    "permissions": ["publish"]
  }'

# Odpowiedź zawiera token:
# {
#   "id": "...",
#   "token": "tk_abc123...",
#   "topic": "private-topic",
#   "permissions": ["publish"]
# }

Alternatywnie przekaż token jako parametr zapytania:

curl -d "Wiadomość prywatna" \
  "https://app.notifer.io/private-topic?token=tk_your_token_here"

Opcja 2: Token JWT

Użyj nagłówka Authorization z tokenem JWT użytkownika:

curl -d "Wiadomość prywatna" \
  -H "Authorization: Bearer eyJhbGciOiJIUz..." \
  https://app.notifer.io/private-topic

Opcja 3: Klucz API

Użyj nagłówka X-API-Key z kluczem API użytkownika:

curl -d "Wiadomość prywatna" \
  -H "X-API-Key: noti_your_key_here" \
  https://app.notifer.io/private-topic

Zalecenie: Użyj tokenów dostępu do tematu (Opcja 1) dla zautomatyzowanych skryptów i integracji, ponieważ: - Są ograniczone do konkretnych tematów - Mogą mieć ograniczone uprawnienia (tylko publikowanie) - Mogą być unieważnione bez wpływu na inne integracje

Formatowanie Markdown

Wiadomości obsługują Markdown:

curl -d "**Pogrubienie**, *kursywa*, \`kod\`, i [linki](https://example.com)" \
  https://app.notifer.io/formatted-messages

Obsługiwany Markdown:

  • **bold**bold
  • *italic*italic
  • `code`code
  • [link](url)link
  • # Heading → Heading
  • - List item → List item
  • > Quote → Quote
  • ```code block``` → Code block

Format odpowiedzi

Odpowiedź sukcesu

{
  "id": "msg_abc123",
  "topic": "your-topic",
  "message": "Twoja wiadomość tutaj",
  "title": "Opcjonalny tytuł",
  "priority": 3,
  "tags": ["tag1", "tag2"],
  "timestamp": "2025-11-02T10:30:00Z"
}

Kod statusu: 200 OK lub 201 Created

Odpowiedź błędu

{
  "detail": "Topic not found or access denied"
}

Popularne kody statusu:

  • 400 Bad Request - Nieprawidłowe parametry
  • 401 Unauthorized - Brak lub nieprawidłowe uwierzytelnienie
  • 403 Forbidden - Brak uprawnień do publikowania
  • 404 Not Found - Temat nie istnieje (dla prywatnych tematów)
  • 429 Too Many Requests - Przekroczono limit żądań

Przykłady z rzeczywistości

Monitorowanie serwera

#!/bin/bash
# Sprawdź miejsce na dysku i powiadom, jeśli > 80%
USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $USAGE -gt 80 ]; then
  curl -d "Użycie dysku na poziomie ${USAGE}%" \
    -H "X-Priority: 4" \
    -H "X-Tags: server,disk,warning" \
    https://app.notifer.io/server-alerts
fi

Pipeline CI/CD

# Przykład GitHub Actions
- name: Notify deployment
  run: |
    curl -d "Wdrożenie do produkcji zakończone" \
      -H "X-Title: Deploy Success" \
      -H "X-Tags: ci,deploy,production" \
      -H "X-Topic-Token: ${{ secrets.NOTIFER_TOPIC_TOKEN }}" \
      https://app.notifer.io/ci-notifications

Kopia zapasowa bazy danych

#!/bin/bash
# Wykonaj kopię zapasową bazy danych i powiadom
if pg_dump mydb > backup.sql; then
  curl -d "Kopia zapasowa bazy danych zakończona pomyślnie" \
    -H "X-Title: Backup Success" \
    -H "X-Priority: 3" \
    -H "X-Tags: backup,database,success" \
    https://app.notifer.io/backups
else
  curl -d "Kopia zapasowa bazy danych NIE POWIODŁA SIĘ!" \
    -H "X-Title: Backup Failed" \
    -H "X-Priority: 5" \
    -H "X-Tags: backup,database,error" \
    https://app.notifer.io/backups
fi

Monitorowanie logów

# Powiadom o błędzie w logach
tail -f /var/log/app.log | grep -i error | while read line; do
  curl -d "$line" \
    -H "X-Title: Application Error" \
    -H "X-Priority: 4" \
    -H "X-Tags: logs,error" \
    https://app.notifer.io/app-errors
done

Sprawdzanie stanu zdrowia

#!/bin/bash
# Sprawdź usługę i powiadom, jeśli nie działa
if ! curl -sf https://myapp.com/health > /dev/null; then
  curl -d "Sprawdzanie stanu zdrowia usługi nie powiodło się!" \
    -H "X-Priority: 5" \
    -H "X-Tags: health,critical" \
    -H "X-Topic-Token: tk_your_token_here" \
    https://app.notifer.io/alerts
fi

Opcje zaawansowane

Ograniczanie liczby żądań

Przestrzegaj limitów żądań sprawdzając nagłówki odpowiedzi:

curl -i -d "Wiadomość" https://app.notifer.io/topic

Nagłówki odpowiedzi:

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 9
X-RateLimit-Reset: 1699000000

Logika ponawiania

Zaimplementuj wykładniczy backoff dla nieudanych żądań:

#!/bin/bash
MAX_RETRIES=3
RETRY_DELAY=1

for i in $(seq 1 $MAX_RETRIES); do
  if curl -d "Wiadomość" https://app.notifer.io/topic; then
    exit 0
  fi
  echo "Próba $i nie powiodła się, czekam ${RETRY_DELAY}s"
  sleep $RETRY_DELAY
  RETRY_DELAY=$((RETRY_DELAY * 2))
done
echo "Wszystkie próby nie powiodły się"
exit 1

Następne kroki