2 : Répondre aux incidents et aux demandes d'assistance et d'évolution
- 1.2.1 Traiter des demandes concernant les services réseau et système, applicatifs
3 : Développer la présence en ligne de l'organisation
- 1.3.1 Participer à l'évolution d'un site web exploitant les données de l'organisation
5 : Mise à disposition des utilisateurs d'un service informatique
- 1.5.2 Déployer un service
Routes disponibles
GET /— Récupérer la liste des voix disponiblesGET /getSetting/{voiceId}— Récupérer les paramètres d'une voixPOST /editSetting/{voiceId}— Modifier les paramètres d'une voixPOST /text-to-speech— Générer un fichier audio WAV à partir d'un texte
Route getSetting avec DTO :
#[Route("/getSetting/{voiceId}", name: "getSetting", methods: ['GET'])]
public function getSetting(string $voiceId): Response
{
$response = $this->exempleAPIClient->request("GET", "voices/{$voiceId}");
$json = $response->toArray();
$dto = $this->objectMapper->map((object)$json, ExempleAPIVoiceDto::class);
return $this->json($dto);
}
DTO TextToSpeechDto
class TextToSpeechDto
{
#[Assert\NotBlank]
private string $text;
#[Assert\NotBlank]
#[Assert\Choice(choices: ['fr', 'en'])]
private string $lang;
#[Assert\NotBlank]
private string $voice;
#[Assert\NotBlank]
#[Assert\Regex("/^\d+$/")]
private string $idQuestion;
#[SerializedName("model_id")]
private string $modelId = "model";
private array $settings = [];
private string $isQuestion = "";
private string $api = "exempleAPI";
public function getText(): string
{
return $this->text;
}
public function setText(string $text): self
{
$this->text = $text;
return $this;
}
}
Route generateAudio — génération du fichier audio :
#[OA\Post(
summary: "Génère un fichier audio à partir d'un texte",
description: "Génère un fichier audio WAV en utilisant l'API TTS sélectionnée.",
requestBody: new OA\RequestBody(
required: true,
description: "Requête JSON avec champs obligatoires : text, lang, voice, idQuestion",
content: new OA\JsonContent(ref: new Model(type: TextToSpeechDto::class))
),
responses: [
new OA\Response(response: 200, description: "Fichier audio généré",
content: new OA\MediaType(mediaType: "audio/wav")),
new OA\Response(response: 400, description: "Erreur de validation"),
new OA\Response(response: 415, description: "Content-Type invalide"),
new OA\Response(response: 500, description: "Erreur interne serveur"),
]
)]
public function generateAudio(Request $request, TtsSelectApi $ttsSelectApi): Response
{
$header = $request->headers->get('Content-Type');
if ('application/json' !== $header) {
return new Response('Content-Type invalide', Response::HTTP_UNSUPPORTED_MEDIA_TYPE);
}
if (empty($request->getContent())) {
return $this->json([], Response::HTTP_BAD_REQUEST);
}
try {
$apiClass = $ttsSelectApi->selectApi($textToSpeechDto->getApi());
$textSSML = $apiClass->replacePatternJson(
$textToSpeechDto->getApi(),
$textToSpeechDto->getLang(),
$textToSpeechDto->getText()
);
$audio = $apiClass->getOutputAudio($textSSML, $textToSpeechDto->getVoice());
} catch (\Exception $e) {
return new Response($e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
Interface API
Voir l'article Interface API Nelmio