Skip to content

Instantly share code, notes, and snippets.

Created October 28, 2020 17:49
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save dkmonaghan/c480432eefcf6bcd0027b1c1d6410e79 to your computer and use it in GitHub Desktop.
This script can act as a middleman between Sentry's webhook system and Mattermost's Incoming Webhooks
$json = json_decode(file_get_contents('php://input'), true);
if ($json['action'] !== 'created'){ die('Only create actions are alerted'); }
$error = $json['data']['issue'];
if ($error['project']['id'] == 1){ die('Ignore internal errors.'); }
if (empty($error['shortId'])){ die('No shortId passed'); }
// Set channel and username
$response['username'] = 'Sentry';
$response['response_type'] = 'in_channel';
$attachment = [];
$attachment['fallback'] = 'Error reported by Sentry: ' . $error['id'];
$attachment['author_name'] = strtoupper($error['project']['name']) . ' - ' . $error['shortId'];
$attachment['author_icon'] = 'ICON_HERE';
$attachment['author_link'] = 'PATH_TO_YOUR_ORG_HERE' . $error['id'];
$attachment['text'] = $error['title'] . ' @ ' . $error['culprit'];
$fields = [
'Function' => $error['metadata']['function'],
'File' => $error['metadata']['filename']
// Generate fields
foreach ($fields as $label => $value){
$field = [
'short' => true,
'title' => $label,
'value' => $value
$attachment['fields'][] = $field;
$response['attachments'][] = $attachment;
$response = json_encode($response);
$ch = curl_init('YOUR_MATTERMOST_WEBHOOK');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
echo curl_exec($ch);
Copy link

If the server is returning a 500 error that means there's a problem with the script. Can you provide log output from your webserver showing PHP error logs?

Copy link

pmsudhi commented Mar 24, 2022

Thanks @dkmonaghan . php curl was missing in the system hence the issue. this is resolved now. Thanks once again for the nice neat solution for Sentry - Mattermost integration

Copy link

@dkmonaghan Thanks for the idea and the inspiration! Based on this, I created a Sentry - Google Chat webhook connection:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment