# Ohne Code: Slack-Adresse

Tools, die nur an Slack schicken können, schicken mit dieser Adresse an Samy. Ohne eine Zeile Code.

Viele Tools können keine eigene Push-App anbinden, haben aber eine Einstellung „Slack-Benachrichtigung“ oder „Slack Webhook“. Dort trägst du statt der Slack-Adresse die Slack-Adresse deines Packlets ein. Samy nimmt die Meldung an, als wäre Samy Slack, und schickt sie als Push auf dein Handy.

Du schreibst dafür keinen Code.

## In der App verbinden

Tipp beim Verbinden auf **Integrationen** und wähle **Slack**. Name und Tier sind schon ausgefüllt. Danach zeigt Samy statt Code gleich die fertige Adresse zum Kopieren; die trägst du in deinem Tool bei Slack ein. Samy liest dabei nicht in deinem Slack mit, es nimmt nur an, was dein Tool schickt.

## Deine Adresse

```text
https://api.packlets.app/v1/slack/<SAMY_KEY>
```

Statt `<SAMY_KEY>` setzt du den Schlüssel deines Packlets ein, also den, der mit `samy_` beginnt. Mehr braucht das Tool nicht.

> Der Schlüssel steht hier in der Adresse, weil diese Tools keinen eigenen Header schicken können. Behandle die ganze Adresse deshalb wie ein Passwort. Erzeugst du in der App einen neuen Schlüssel, gilt die alte Adresse sofort nicht mehr.

## Wo das funktioniert

Überall, wo du eine Slack-Webhook-Adresse („Incoming Webhook“) eintragen kannst. Zum Beispiel:

| Bereich | Tools |
|---|---|
| Überwachung | Uptime Kuma, Grafana, Prometheus Alertmanager, Sentry, Healthchecks.io |
| Code und Deploys | GitHub Actions, GitLab, Jenkins, Railway, Netlify |
| Automatisierung | n8n, Zapier, Make, Home Assistant |
| Webseiten | Formular-Plugins für WordPress mit Slack-Option, Shop-Systeme |
| Eigene Skripte | Alles, was schon an Slack schickt: Adresse tauschen, fertig |

## Schnell testen

```bash
curl https://api.packlets.app/v1/slack/<SAMY_KEY> \
  -H "Content-Type: application/json" \
  -d '{"text":"*Backup* fehlgeschlagen auf <https://status.example.com|server-1>"}'
```

Kommt `ok` zurück, ist die Nachricht da. Im Packlet-Protokoll steht der Aufruf mit „Slack:“ davor.

## Was Samy übernimmt

Samy versteht die üblichen Slack-Formate und macht daraus eine normale [Nachricht](https://packlets.app/docs/senden.md):

| Slack | In Samy |
|---|---|
| `text` | Text der Nachricht. Gibt es `blocks`, ist `text` dort nur die Kurzfassung und wird nicht gezeigt. |
| `*fett*` | **fett** |
| `<https://…\|Beschriftung>` | Beschriftung im Text. Der erste Link wird zum Link der Nachricht. |
| Erwähnungen wie `<!channel>` oder `<@U123>` | fallen weg |
| Block `header` | Titel |
| Block `section` mit `text` und `fields` | Absatz, Felder als Liste |
| Block `context` | kleiner Absatz, Teile mit `·` getrennt |
| Block `image` | Bild der Nachricht |
| Block `actions` mit Buttons, die eine `url` haben | bis zu 3 [Knöpfe](https://packlets.app/docs/knoepfe.md), die den Link öffnen |
| `attachments` mit `title`, `title_link`, `pretext`, `text`, `fields`, `image_url` | Titel, Link, Text, Liste und Bild |
| `attachments` mit `color: "danger"` | [Priorität](https://packlets.app/docs/push.md) `high` |
| Formular mit `payload=<json>` | wie JSON |

Alles andere, etwa Menüs, Datumswähler oder Formatierungen, die Samy nicht kennt, lässt Samy weg, statt die Meldung abzulehnen. Zu lange Texte werden gekürzt, Links ohne `https` fallen weg.

Ein Beispiel mit Blocks:

```json
{
  "text": "Neue Bestellung #1042",
  "blocks": [
    { "type": "header", "text": { "type": "plain_text", "text": "Neue Bestellung #1042" } },
    { "type": "section", "text": { "type": "mrkdwn", "text": "*Anna Weber* hat bestellt" },
      "fields": [{ "type": "mrkdwn", "text": "*Betrag:* 49 €" }] },
    { "type": "actions", "elements": [
      { "type": "button", "text": { "type": "plain_text", "text": "Bestellung öffnen" },
        "url": "https://shop.example.com/orders/1042" }
    ] }
  ]
}
```

In Samy wird daraus eine Nachricht mit dem Titel „Neue Bestellung #1042“, dem Text „**Anna Weber** hat bestellt“ mit dem Punkt „**Betrag:** 49 €“ und einem Knopf „Bestellung öffnen“.

## Antworten

Samy antwortet wie Slack mit kurzem Text, weil manche Tools genau das prüfen:

| Status | Antwort | Bedeutung |
|---|---|---|
| `200` | `ok` | Gespeichert, der Push ist unterwegs. |
| `400` | `invalid_payload` | Kein Text gefunden, weder in `text` noch in `blocks` oder `attachments`. |
| `401` | JSON mit `invalid_key` | Schlüssel falsch oder Packlet entfernt. |
| `429` | JSON mit `rate_limited` | Zu viele Aufrufe. Es gilt dasselbe [Limit](https://packlets.app/docs/api.md#rate-limit) wie bei `POST /v1/push`. |

## Grenzen

- Knöpfe öffnen nur Links. Knöpfe, die deinem Tool antworten, gibt es mit [`POST /v1/push`](https://packlets.app/docs/knoepfe.md) und einem [Webhook](https://packlets.app/docs/webhook.md).
- Elemente wie Schalter oder Diagramme gibt es über diese Adresse nicht.
- Die Adresse nimmt nur Nachrichten an. Die Seite einer App setzt du mit [`PUT /v1/ui`](https://packlets.app/docs/api-ui.md).
