GitHub's native Discord integration exists, but it's all-or-nothing. You get every push, every PR, every issue comment. Your Discord channel becomes noise.
With Hookpipe, you control what gets forwarded. Only notify when code hits main. Transform the payload into Discord's format. If Discord has a blip, Hookpipe retries automatically.
curl -X POST https://hookpipe.app/api/hooks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "github-to-discord",
"destinationUrl": "https://discord.com/api/webhooks/1234567890/abcdefg",
"transformConfig": {
"fieldMapping": {
"content": "repository.full_name",
"embeds[0].title": "head_commit.message",
"embeds[0].description": "Pushed by {{sender.login}} to {{ref}}",
"embeds[0].url": "repository.html_url"
},
"filters": [
{ "field": "ref", "operator": "equals", "value": "refs/heads/main" },
{ "field": "head_commit", "operator": "exists" }
]
}
}'
This hook:
Go to your repository → Settings → Webhooks → Add webhook:
https://hookpipe.app/hooks/YOUR_HOOK_IDPush to main. You should see an embed in Discord with the commit message and branch info.
Why not just use GitHub's Discord integration?
GitHub's integration can't filter by branch or transform the payload. You get every event or nothing. Hookpipe gives you control: filter, map fields, add static values, and retry on failure.
Pull request opened:
{
"fieldMapping": {
"embeds[0].title": "pull_request.title",
"embeds[0].description": "PR #{{number}} {{action}} by {{sender.login}}",
"embeds[0].url": "pull_request.html_url"
},
"filters": [
{ "field": "action", "operator": "equals", "value": "opened" },
{ "field": "pull_request", "operator": "exists" }
]
}
Release published:
{
"fieldMapping": {
"embeds[0].title": "release.tag_name",
"embeds[0].description": "{{release.body}}",
"embeds[0].url": "release.html_url"
},
"filters": [
{ "field": "action", "operator": "equals", "value": "published" },
{ "field": "release", "operator": "exists" }
]
}