Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
This script can act as a middleman between Sentry's webhook system and Mattermost's Incoming Webhooks
<?php
$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);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.