Как получать данные с вебхук ивента в правильном порядке?
Суть такая - при запуске пайплайна в gitlab тот в вебхуке выдает подробные данные, проблема в том, что все этапы выдаются рандомно, а мне нужно сохранять их в правильном порядке и через телеграм бота получать сообщения об их статусе
Каким образом можно настроить правильное получение этапов?
Мой код:
$input = file_get_contents("php://input");
$json = json_decode($input);
function sendRequest($method, $post = '')
{
$ch = curl_init('https://api.telegram.org/bot[BOT_TOKEN]' . '/' . $method);
if ($post) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$json = curl_exec($ch);
curl_close($ch);
$error_data = json_decode($json);
if (!$error_data->ok) {
$error_post = [
'chat_id' => $user_id,
'text' => json_encode($post, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\n" . $error_data->description
];
sendRequest('sendMessage', $error_post);
}
return $json;
}
// То, что отправляет GitLab
if ($json) {
if ($json->object_kind == 'pipeline') { // Если пришел Pipeline event
$ref = $json->object_attributes->ref;
$project_name = $json->project->name;
$name = $json->user->name;
$username = $json->user->username;
$stages = $json->object_attributes->stages[0];
for ($i = 0; $i <= 10; $i++) { // $i это количество этапов
$stage = $json->builds[$i]->stage;
$job_name = $json->builds[$i]->name;
$status = $json->builds[$i]->status;
$finished_at = $json->builds[$i]->finished_at;
$duration = $json->builds[$i]->duration;
$object_attributes_status = $json->object_attributes->status;
$detailed_status = $json->object_attributes->detailed_status;
if ($status == 'created' || $status == 'running') {
$post = [
'chat_id' => $user_id,
'text' => '? <b>Webhook caught pipeline event!</b>' . "\n\n" . '<b>Project name:</b> ' . $project_name . "\n" . '<b>Stage:</b> ' . $stage . "\n" . '<b>Job name: </b>' . $job_name . "\n" . '<b>Status: </b>' . $status,
'parse_mode' => 'html'
];
sendRequest('sendMessage', $post);
}
if ($status == 'success') {
$post = [
'chat_id' => $user_id,
'text' => '? <b>Webhook caught pipeline event!</b>' . "\n\n" . '<b>Project name:</b> ' . $project_name . "\n" . '<b>Stage:</b> ' . $stage . "\n" . '<b>Job name: </b>' . $job_name . "\n" . '<b>Status: </b>' . $status
. "\n\n" . '<b>Finished at: </b>' . $finished_at . "\n" . '<b>Duration: </b>' . $duration,
'parse_mode' => 'html'
];
sendRequest('sendMessage', $post);
}
}
}
}
Этапы в том порядке, который присылает гитлаб и который мне нужен:
То, что выводится мне:

