Формулирование все также, только фото нужно передавать в JSON-сериализованном ввиде.
$photo = [ 'type'=> 'photo',
'media' => 'здесь параметры картинки file_id или url',
'caption' => 'ТЕКСТ',
'parse_mode' => 'html'
]
$fields = ['chat_id' => 'id чата ',
'message_id' => 'message_id', //id сообщения
'media' => json_encode($photo),
'reply_markup' => json_encode($buttons)]; // если есть кнопки
// отправляем методом CURL
$ch = curl_init('https://api.telegram.org/bot' . $token . '/editMessageMedia');
curl_setopt_array($ch, array(
CURLOPT_POST => count($fields),
CURLOPT_POSTFIELDS => http_build_query($fields),
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => 10
));
$r = json_decode(curl_exec($ch), true);
curl_close($ch);
return $r;