← Back to challenges

GitHub Issue to Discord

3 intermediate
GitHub Discord Webhooks API

Create a workflow that monitors GitHub issues and forwards them to Discord with rich formatting. Practice webhook handling, data transformation, and API integration.

Your Challenge

Core Functionality

Your workflow must:

  • Set up a Webhook Trigger node to receive GitHub issue events
  • Extract issue details: title, description, labels, author, issue number
  • Create a Discord embed message with proper formatting
  • Send the embed to a specified Discord channel using a webhook
  • Include a clickable link back to the original GitHub issue
  • Display issue labels with appropriate visual formatting

Error Handling

Your workflow should:

  • Enable "Continue on Fail" on the Discord node to prevent workflow crashes
  • Use IF node to validate incoming webhook has required fields (issue.title, issue.url, issue.number)
  • Return appropriate HTTP status codes to GitHub (200 for success, 400 for invalid payload, 500 for server errors)
  • Send failed webhook attempts to a monitoring Slack channel or email with error details

Edge Cases

Your workflow should handle:

  • Handle issue descriptions longer than Discord's character limits (truncate appropriately)
  • Process issues with no description
  • Deal with special characters and markdown in issue text
  • Handle issues with many labels (prevent Discord embed overflow)
  • Handle webhook retries from GitHub (prevent duplicate Discord messages)
  • Process rapid-fire issue events without hitting Discord rate limits

Bonus Challenges (Optional)

Take it further by:

  • Filter issues by specific labels before forwarding (e.g., only "bug" or "help wanted")
  • Add different embed colors based on issue priority or label
  • Include issue assignee information if available
  • Support multiple GitHub repositories routing to different Discord channels
  • Add reaction buttons or Discord interactions for issue triage

Tips & Hints

  • GitHub webhooks send JSON payloads - you'll need to parse them
  • Discord embeds support rich formatting with colors and fields
  • Consider filtering issues by label or repository
  • Use the Set node to restructure data before sending to Discord
  • Test with GitHub's webhook delivery history to replay events