Discourse to Discord Webhook

:discourse: :information_source: Before trying this, check out the official chat integration plugin for Discord

Discourse to Discord Webhook

This PHP script acts an intermediary between Discourse and Discord, receiving webhooks from Discourse and parsing them into an optimal format before relaying them to Discord.


See it in action and test it out for yourself on Crit Cola’s Discourse and Discord.


Just clone it!

git clone https://github.com/critcola/discourse-to-discord-webhook.git

This has been tested with and is supported on PHP 7.1, but should work fine on older versions of PHP.


Copy config-template.php to config.php and populate all non-optional variables after configuring webhooks in both Discourse and Discord.


The Discourse to Discord Webhook script is released under the MIT License.


where is the “congif.php” located

Rename config-template.php to config.php.


Still don’t know where it is found

1 Like

I am getting this error when sending a ping or a new post is created. Any help with what is happening here?

I tried both a public and private channel; same response.

Status: 400

{"code": 50006, "message": "Cannot send an empty message"}


$discord_webhook_url = 'WEBHOOK_FROM_DISCORD';

$discord_embed_color = '#HEX_VALUE';

$discord_embed_thumbnail_url ='https://DOMAIN_NAME';

$discord_embed_footer_icon_url = $discord_embed_thumbnail_url;
$discord_embed_footer_text = 'CUSTOM_STRING';

$discord_embed_timestamp = true;

$discourse_payload_secret = 'RANDOMLY_GENERATED_STRING';

$discourse_url_protocol = 'https';

$discourse_url_domain = 'forums.domain.com';

$discourse_path = '/';

Discourse Settings


Content Type = application/json

Secret = RANDOMLY_GENERATED_STRING #same as above

Events = All events, or, all individual events checked

Check TLS certificate of payload url = checked

Active = checked

yeah so… me too? I am running a dockerized discourse and the app.yml file has many lines for pulling in git repos to build by the launcher… so I add

- git clone https://github.com/critcola/discourse-to-discord-webhook.git

to the app.yml file and rebuild… but it is now unclear to me how to edit the config-template.php file and save those updates to config.php when it’s all automated by the launcher build process.

why not make these settings part of a settings interface under the admin section rather than a php file edit? if that is impractical, how would one like myself modify the config.php file… do i have to enter the docker container environment and manually create the config.php file in there? does that survive updates and docker rebuilds?