{"id":211316,"date":"2026-09-25T10:35:19","date_gmt":"2026-09-25T10:35:19","guid":{"rendered":"https:\/\/sinch.com\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/"},"modified":"2026-09-25T10:35:19","modified_gmt":"2026-09-25T10:35:19","slug":"agent-ia-appels-telephoniques-relais-api-vocale","status":"publish","type":"blog","link":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/","title":{"rendered":"Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l&rsquo;API vocale Sinch v2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Connecter un agent IA \u00e0 un appel t\u00e9l\u00e9phonique en direct implique de faire le pont entre le r\u00e9seau t\u00e9l\u00e9phonique et l&rsquo;agent. Cela peut impliquer une int\u00e9gration SIP ou un chemin m\u00e9dia brut via un WebSocket, en plus de la reconnaissance vocale, de la synth\u00e8se vocale et de la gestion des tours de parole entre l&rsquo;appelant et l&rsquo;agent. Cela repr\u00e9sente une grande quantit\u00e9 d&rsquo;infrastructure de t\u00e9l\u00e9phonie et de m\u00e9dia \u00e0 construire et \u00e0 exploiter autour d&rsquo;un agent IA.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/developers.sinch.com\/docs\/voice-2.0\/overview\">API vocale Sinch v2 <\/a> vous d\u00e9charge de ce travail. Sa destination Voice Relay connecte un appel en direct \u00e0 votre point de terminaison WebSocket, Sinch ex\u00e9cute la reconnaissance vocale et la synth\u00e8se vocale, et votre application \u00e9change du texte brut. L&rsquo;API vocale v2 ajoute \u00e9galement Voice Streams, un chemin audio bidirectionnel brut pour les cas o\u00f9 vous souhaitez g\u00e9rer le m\u00e9dia vous-m\u00eame.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Elle est en pr\u00e9visualisation publique, donc les fonctionnalit\u00e9s, les limites, la documentation et le comportement peuvent encore changer et aucun SLA ne s&rsquo;applique, mais elle est ouverte pour les tests, l&rsquo;\u00e9valuation et le trafic de production initial. J&rsquo;ai ex\u00e9cut\u00e9 l&rsquo;ensemble du chemin de bout en bout avec le  <a href=\"https:\/\/github.com\/sinch\/sinch-voice-tutorials\">tutoriel d&rsquo;exemple<\/a>\u00a0: un agent LangChain r\u00e9pondant \u00e0 un v\u00e9ritable appel t\u00e9l\u00e9phonique, interruptions incluses.<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-1221\"><p class=\"h5 m-0\" id=\"toc-title-1221\">Table des mati\u00e8res<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#pourquoi-voice-relay-est-important\">Pourquoi Voice Relay est important<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#le-modele-de-lapi-vocale-v2\">Le mod\u00e8le de l&rsquo;API vocale v2<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#ce-dont-vous-aurez-besoin\">Ce dont vous aurez besoin<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#connecter-un-agent-avec-voice-relay\">Connecter un agent avec Voice Relay<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#resultat-attendu\">R\u00e9sultat attendu<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">06<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#ou-se-situe-votre-application\">O\u00f9 se situe votre application<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">07<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#voice-relay-ou-streaming-audio-brut\">Voice Relay ou streaming audio brut\u00a0?<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">08<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#considerations-de-production\">Consid\u00e9rations de production<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">09<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#resolution-de-problemes\">R\u00e9solution de probl\u00e8mes<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">10<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#statut-de-la-previsualisation\">Statut de la pr\u00e9visualisation<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">11<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#prochaines-etapes\">Prochaines \u00e9tapes<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">12<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#ressources-complementaires\">Ressources compl\u00e9mentaires<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Pourquoi Voice Relay est important<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un agent IA commence g\u00e9n\u00e9ralement comme une application textuelle. Il accepte un message, appelle un mod\u00e8le et renvoie une r\u00e9ponse textuelle. Voice Relay d\u00e9place la fronti\u00e8re audio dans la plateforme Sinch, ce qui vous permet de conserver l&rsquo;agent, ses outils, ses prompts et son \u00e9tat, et de travailler avec du texte plut\u00f4t qu&rsquo;avec de l&rsquo;audio brut. Les interruptions sont incluses, de sorte que les appelants peuvent intervenir pendant la lecture d&rsquo;une r\u00e9ponse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cela fait de Voice Relay un point d&rsquo;entr\u00e9e pratique pour un syst\u00e8me de r\u00e9ception IA, un bot de d\u00e9monstration de produit et un centre d&rsquo;assistance interne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le mod\u00e8le de l&rsquo;API vocale v2<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;API vocale v2 organise une interaction autour de trois ressources\u00a0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Une <strong>session<\/strong> regroupe les appels et les connexions li\u00e9s et reste active jusqu&rsquo;\u00e0 la fin de ses appels associ\u00e9s.<\/li>\n\n\n\n<li>Un <strong>appel<\/strong> (call) repr\u00e9sente la connexion d&rsquo;un participant ou d&rsquo;une participante, telle qu&rsquo;un segment t\u00e9l\u00e9phonique, SIP ou de streaming.<\/li>\n\n\n\n<li>Un <strong>pont<\/strong> (bridge) connecte les appels au sein d&rsquo;une session lorsque plusieurs personnes doivent communiquer.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Le SVAML, le Sinch Voice API Markup Language (langage de balisage de l&rsquo;API vocale Sinch), d\u00e9crit ce qui se passe pendant l&rsquo;interaction. Une commande <code>dial<\/code> peut cr\u00e9er un segment d&rsquo;appel. Des \u00e9v\u00e9nements imbriqu\u00e9s peuvent d\u00e9finir ce qui se passe lorsque l&rsquo;appel aboutit, est occup\u00e9, expire ou \u00e9choue. Un webhook peut prendre le relais lorsque l&rsquo;application doit prendre une d\u00e9cision dynamique.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce mod\u00e8le est important pour les agents IA car la conversation et l&rsquo;appel sont li\u00e9s, mais ils ne sont pas la m\u00eame chose. L&rsquo;agent IA g\u00e8re la conversation. Le SVAML et l&rsquo;API vocale g\u00e8rent le flux d&rsquo;appels. Cette s\u00e9paration vous permet d&rsquo;ajouter un transfert vers un agent humain, un autre segment d&rsquo;appel ou un chemin m\u00e9dia diff\u00e9rent sans placer toute cette logique dans le prompt du mod\u00e8le.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ce dont vous aurez besoin<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un compte Sinch avec un acc\u00e8s \u00e0 l&rsquo;API vocale v2, via le  <a href=\"https:\/\/dashboard.sinch.com\">tableau de bord Sinch Build<\/a><\/li>\n\n\n\n<li>Un identifiant de projet Sinch, un identifiant de cl\u00e9 d&rsquo;acc\u00e8s et un secret de cl\u00e9 d&rsquo;acc\u00e8s<\/li>\n\n\n\n<li>Un num\u00e9ro virtuel Sinch activ\u00e9<\/li>\n\n\n\n<li>Une <a href=\"https:\/\/developers.sinch.com\/docs\/voice-2.0\/api-reference\/voice\">ID de service de l&rsquo;API vocale v2<\/a>, \u00e0 partir de Voix &gt; Voix programmable &gt; Services dans le tableau de bord<\/li>\n\n\n\n<li>Python 3.10 ou une version plus r\u00e9cente<\/li>\n\n\n\n<li>Une cl\u00e9 API pour OpenAI, Anthropic Claude ou Google Gemini<\/li>\n\n\n\n<li><code>ngrok<\/code> avec un jeton d&rsquo;authentification enregistr\u00e9, ou un autre moyen d&rsquo;exposer un serveur local via <code>wss:\/\/<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ce tutoriel utilise le  <a href=\"https:\/\/github.com\/sinch\/sinch-voice-tutorials\"><code>sinch-voice-tutorials<\/code><\/a>  d\u00e9p\u00f4t. Son tutoriel <code>4.1-voice-relay<\/code> est un serveur WebSocket Python soutenu par LangChain, qui lit sa configuration \u00e0 partir de variables d&rsquo;environnement et prend en charge OpenAI, Anthropic Claude et Google Gemini.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Connecter un agent avec Voice Relay<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Clonez le d\u00e9p\u00f4t des tutoriels et acc\u00e9dez \u00e0 l&rsquo;exemple Voice Relay\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>git clone https:\/\/github.com\/sinch\/sinch-voice-tutorials.git<br>cd sinch-voice-tutorials\/4.1-voice-relay<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Cr\u00e9ez un environnement et installez les d\u00e9pendances de l&rsquo;exemple\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>python3 -m venv .venv<br>source .venv\/bin\/activate<br>pip install -r requirements.txt<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Les commandes ici concernent macOS et Linux. Sur Windows, utilisez <code>python<\/code> au lieu de <code>python3<\/code> et activez avec <code>.venv\\Scripts\\activate<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copiez la configuration d&rsquo;exemple\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>cp .env.example .env<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9finissez un fournisseur et sa cl\u00e9 API dans <code>.env<\/code>\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>PROVIDER=openai<br>API_KEY=YOUR_LLM_API_KEY<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Le fichier <code>.env.example<\/code> du d\u00e9p\u00f4t utilise <code>openai<\/code> comme fournisseur par d\u00e9faut. L&rsquo;exemple prend \u00e9galement en charge <code>claude<\/code> pour Anthropic Claude et <code>gemini<\/code> pour Google Gemini, et <code>requirements.txt<\/code> installe les paquets pour les trois. Par cons\u00e9quent, changer de fournisseur implique de modifier <code>PROVIDER<\/code> et <code>API_KEY<\/code>. Vous pouvez \u00e9galement d\u00e9finir <code>MODEL<\/code>, <code>TEMPERATURE<\/code>, <code>MAX_TOKENS<\/code> et <code>PORT<\/code>, dont les valeurs par d\u00e9faut s&rsquo;affichent dans le journal de d\u00e9marrage ci-dessous, ainsi que <code>GREETING<\/code> pour changer le <code>Hello!<\/code>  par lequel l&rsquo;agent commence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9marrez le serveur local\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>python server.py<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Le serveur indique le prompt syst\u00e8me qu&rsquo;il a charg\u00e9, puis son fournisseur et les param\u00e8tres de son mod\u00e8le, et enfin l&rsquo;adresse locale sur laquelle il \u00e9coute\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>[*] Loaded system prompt (3424 chars)<br>[*] Provider: openai  Model: gpt-4o  Temp: 0.7  MaxTokens: 1024<br>[*] Agent Relay listening on ws:\/\/0.0.0.0:8765<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">V\u00e9rifiez cette sortie avant de passer un appel. Une cl\u00e9 de fournisseur manquante ou une d\u00e9pendance cass\u00e9e s&rsquo;affiche ici plut\u00f4t qu&rsquo;au beau milieu d&rsquo;une conversation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le comportement de l&rsquo;agent provient de <code>system_prompt.md<\/code>. Modifiez ce fichier pour changer le persona, le domaine ou les instructions, puis red\u00e9marrez <code>server.py<\/code> car le prompt est charg\u00e9 au d\u00e9marrage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sinch \u00e9tablit une connexion entrante vers votre serveur relais, il a donc besoin d&rsquo;une adresse publique. Laissez <code>server.py<\/code> en cours d&rsquo;ex\u00e9cution dans le premier terminal et ouvrez-en un second. Si vous n&rsquo;avez pas encore ngrok, installez-le et enregistrez un jeton d&rsquo;authentification \u00e0 partir de la page  <a href=\"https:\/\/dashboard.ngrok.com\/get-started\/your-authtoken\">Your Authtoken<\/a>  dans le tableau de bord de ngrok. Le niveau gratuit couvre ce tutoriel, et ngrok refuse de d\u00e9marrer un tunnel tant qu&rsquo;un jeton n&rsquo;est pas configur\u00e9\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>brew install ngrok<br>ngrok config add-authtoken YOUR_NGROK_AUTHTOKEN<br>ngrok http 8765<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">ngrok prend le contr\u00f4le du terminal et affiche un tableau d&rsquo;\u00e9tat. La ligne importante est l&rsquo;adresse de transfert (Forwarding)\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>Forwarding    https:\/\/YOUR_NGROK_ID.ngrok-free.dev -&gt; http:\/\/localhost:8765<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Prenez cette adresse, changez uniquement le sch\u00e9ma en <code>wss:\/\/<\/code> et utilisez-la comme point de terminaison de Voice Relay\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>ngrok address:  https:\/\/YOUR_NGROK_ID.ngrok-free.dev<br>Sinch endpoint: wss:\/\/YOUR_NGROK_ID.ngrok-free.dev<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Cette valeur <code>wss:\/\/<\/code> va dans la configuration du service Sinch, et non dans le serveur relais, qui reste sur le port local <code>8765<\/code>. Laissez <code>server.py<\/code> et ngrok en cours d&rsquo;ex\u00e9cution \u00e0 partir d&rsquo;ici.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La destination minimale de Voice Relay ressemble \u00e0 ceci\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    {\r\n  &quot;type&quot;: &quot;VOICE_RELAY&quot;,\r\n  &quot;voiceRelay&quot;: {\r\n    &quot;endpoint&quot;: &quot;wss:\/\/YOUR_NGROK_ID.ngrok-free.dev&quot;,\r\n    &quot;ttsVoice&quot;: &quot;Tiffany&quot;,\r\n    &quot;sttLanguage&quot;: &quot;en-US&quot;\r\n  }\r\n}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Champ\u00a0<\/td><td>Requis\u00a0<\/td><td>Notes\u00a0<\/td><\/tr><tr><td><code>endpoint<\/code>\u00a0<\/td><td>Oui\u00a0<\/td><td>L&rsquo;adresse <code>wss:\/\/<\/code> \u00e0 laquelle Sinch se connecte\u00a0<\/td><\/tr><tr><td><code>ttsVoice<\/code>\u00a0<\/td><td>Oui\u00a0<\/td><td><code>Tiffany<\/code> correspond \u00e0 ce tutoriel. Consultez le <a href=\"https:\/\/developers.sinch.com\/docs\/voice-2.0\/api-reference\/text-to-speech-voices\" target=\"_blank\" rel=\"noreferrer noopener\">r\u00e9f\u00e9rence des voix prises en charge<\/a>  avant de la modifier\u00a0<\/td><\/tr><tr><td><code>sttLanguage\u00a0<\/code><\/td><td>Oui\u00a0<\/td><td>Une balise de langue BCP-47\u00a0<\/td><\/tr><tr><td><code>enableInterruptions<\/code>\u00a0<\/td><td>Non\u00a0<\/td><td>La valeur par d\u00e9faut est <code>true<\/code>\u00a0<\/td><\/tr><tr><td><code>callHeaders\u00a0<\/code><\/td><td>Non\u00a0<\/td><td>Jusqu&rsquo;\u00e0 16 paires cl\u00e9\/valeur, chaque cl\u00e9 et valeur comportant 255 caract\u00e8res ou moins<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Votre service a besoin du num\u00e9ro avant que tout cela n&rsquo;ait de l&rsquo;importance. Dans le tableau de bord, ouvrez le service, acc\u00e9dez \u00e0 \u00ab\u00a0Voice channels\u00a0\u00bb, et choisissez \u00ab\u00a0Configure\u00a0\u00bb sur la ligne \u00ab\u00a0Phone\u00a0\u00bb, puis \u00ab\u00a0Add numbers\u00a0\u00bb et s\u00e9lectionnez votre num\u00e9ro virtuel. Un num\u00e9ro appartient \u00e0 un seul service \u00e0 la fois. Par cons\u00e9quent, s&rsquo;il est d\u00e9j\u00e0 associ\u00e9 \u00e0 un autre service, le tableau de bord vous demande de confirmer la r\u00e9affectation, et les appels entrants vers ce num\u00e9ro suivront le nouveau service \u00e0 partir de ce moment-l\u00e0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Une fois le num\u00e9ro en place, acheminez l&rsquo;appel en attribuant au service un comportement d&rsquo;appel statique ou un webhook qui renvoie le SVAML. La configuration statique effectue cinq actions\u00a0:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>R\u00e9pondre \u00e0 l&rsquo;appel entrant.<\/li>\n\n\n\n<li>Ajouter le segment entrant \u00e0 <code>main-bridge<\/code>.<\/li>\n\n\n\n<li>Cr\u00e9er un segment d&rsquo;appel avec une destination <code>VOICE_RELAY<\/code>.<\/li>\n\n\n\n<li>Ajouter le segment relais au m\u00eame <code>main-bridge<\/code> lors de la r\u00e9ponse.<\/li>\n\n\n\n<li>Raccrocher le segment relais \u00e0 la fin du segment entrant.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><code>server.py<\/code> et ngrok occupent tous deux leurs terminaux maintenant, ouvrez donc un troisi\u00e8me terminal pour cette \u00e9tape. Renseignez les cinq valeurs en haut de la requ\u00eate et ex\u00e9cutez-la. Si vous pr\u00e9f\u00e9rez utiliser le tableau de bord, collez plut\u00f4t le corps SVAML interne de <code>static.txt<\/code> dans son \u00e9diteur de comportement d&rsquo;appel pr\u00e9d\u00e9fini.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    export PROJECT_ID=YOUR_PROJECT_ID\r\nexport KEY_ID=YOUR_ACCESS_KEY_ID\r\nexport SERVICE_ID=YOUR_SERVICE_ID\r\nexport VOICE_RELAY_ENDPOINT=wss:\/\/YOUR_NGROK_ID.ngrok-free.dev\r\n \r\n# prompts without echoing, so the secret stays out of shell history\r\nprintf &#039;Access key secret: &#039;\r\nread -rs KEY_SECRET\r\necho\r\nexport KEY_SECRET\r\n \r\ncurl -X PATCH \\\r\n  -u &quot;$KEY_ID:$KEY_SECRET&quot; \\\r\n  &quot;https:\/\/voice.api.sinch.com\/v2\/projects\/$PROJECT_ID\/services\/$SERVICE_ID&quot; \\\r\n  -H &quot;Content-Type: application\/json&quot; \\\r\n  -d @- &lt;&lt;JSON\r\n{\r\n  &quot;callBehavior&quot;: {\r\n    &quot;type&quot;: &quot;STATIC&quot;,\r\n    &quot;static&quot;: {\r\n      &quot;callName&quot;: &quot;caller&quot;,\r\n      &quot;commands&quot;: [\r\n        { &quot;command&quot;: &quot;answer&quot; },\r\n        { &quot;command&quot;: &quot;bridgeCall&quot;, &quot;bridgeName&quot;: &quot;main-bridge&quot; },\r\n        {\r\n          &quot;command&quot;: &quot;dial&quot;,\r\n          &quot;callName&quot;: &quot;voice_relay_call&quot;,\r\n          &quot;to&quot;: {\r\n            &quot;type&quot;: &quot;VOICE_RELAY&quot;,\r\n            &quot;voiceRelay&quot;: {\r\n              &quot;endpoint&quot;: &quot;$VOICE_RELAY_ENDPOINT&quot;,\r\n              &quot;ttsVoice&quot;: &quot;Tiffany&quot;,\r\n              &quot;sttLanguage&quot;: &quot;en-US&quot;\r\n            }\r\n          },\r\n          &quot;events&quot;: {\r\n            &quot;onAnswer&quot;: [\r\n              { &quot;command&quot;: &quot;bridgeCall&quot;, &quot;bridgeName&quot;: &quot;main-bridge&quot; }\r\n            ]\r\n          }\r\n        }\r\n      ],\r\n      &quot;events&quot;: {\r\n        &quot;onHangup&quot;: [\r\n          { &quot;command&quot;: &quot;hangup&quot;, &quot;callName&quot;: &quot;voice_relay_call&quot; }\r\n        ]\r\n      }\r\n    }\r\n  }\r\n}\r\nJSON\r\n\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Une requ\u00eate <code>PATCH<\/code> r\u00e9ussie renvoie le service mis \u00e0 jour, ce qui vous permet de relire votre point de terminaison \u00e0 partir de la r\u00e9ponse et de confirmer qu&rsquo;il a \u00e9t\u00e9 pris en compte\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    {\r\n  &quot;serviceId&quot;: &quot;YOUR_SERVICE_ID&quot;,\r\n  &quot;projectId&quot;: &quot;YOUR_PROJECT_ID&quot;,\r\n  &quot;name&quot;: &quot;voice-relay-test&quot;,\r\n  &quot;isDefault&quot;: true,\r\n  &quot;callBehavior&quot;: {\r\n    &quot;type&quot;: &quot;STATIC&quot;,\r\n    &quot;static&quot;: {\r\n      &quot;callName&quot;: &quot;caller&quot;,\r\n      &quot;commands&quot;: [\r\n        { &quot;command&quot;: &quot;answer&quot; },\r\n        { &quot;command&quot;: &quot;bridgeCall&quot;, &quot;bridgeName&quot;: &quot;main-bridge&quot; },\r\n        {\r\n          &quot;command&quot;: &quot;dial&quot;,\r\n          &quot;to&quot;: {\r\n            &quot;type&quot;: &quot;VOICE_RELAY&quot;,\r\n            &quot;voiceRelay&quot;: {\r\n              &quot;endpoint&quot;: &quot;wss:\/\/YOUR_NGROK_ID.ngrok-free.dev&quot;,\r\n              &quot;ttsVoice&quot;: &quot;Tiffany&quot;,\r\n              &quot;sttLanguage&quot;: &quot;en-US&quot;\r\n            }\r\n          },\r\n          &quot;events&quot;: {\r\n            &quot;onAnswer&quot;: [\r\n              { &quot;command&quot;: &quot;bridgeCall&quot;, &quot;bridgeName&quot;: &quot;main-bridge&quot; }\r\n            ]\r\n          },\r\n          &quot;callName&quot;: &quot;voice_relay_call&quot;\r\n        }\r\n      ],\r\n      &quot;events&quot;: {\r\n        &quot;onHangup&quot;: [\r\n          { &quot;command&quot;: &quot;hangup&quot;, &quot;callName&quot;: &quot;voice_relay_call&quot; }\r\n        ]\r\n      }\r\n    }\r\n  }\r\n}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Le corps SVAML interne est \u00e9galement disponible dans  <a href=\"https:\/\/github.com\/sinch\/sinch-voice-tutorials\/blob\/main\/4.1-voice-relay\/static.txt\"><code>static.txt<\/code><\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9sultat attendu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Appelez le num\u00e9ro Sinch associ\u00e9 au service. Vous devriez entendre <code>Hello!<\/code>, ou le message d&rsquo;accueil que vous avez d\u00e9fini avec <code>GREETING<\/code>. Posez ensuite une question et \u00e9coutez la r\u00e9ponse de l&rsquo;agent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le terminal du serveur consigne les deux sens du WebSocket, et ce journal est la chose la plus utile \u00e0 l&rsquo;\u00e9cran lors d&rsquo;un premier appel. Le mien ressemblait \u00e0 ceci, r\u00e9duit \u00e0 un seul \u00e9change\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>[+] Connected: ('127.0.0.1', 65438)<br>  WS &lt;&lt; {&quot;callHeaders&quot;:{},&quot;callId&quot;:&quot;01M25YACD3G61GH4Y0NQNWR4WD&quot;,&quot;interruptionsEnabled&quot;:true,...}<br>    connect  callId=01M25YACD3G61GH4Y0NQNWR4WD  serviceId=YOUR_SERVICE_ID<br>  WS &gt;&gt; {\"command\": \"answer\"}<br>  WS &gt;&gt; {\"command\": \"text\", \"text\": \"Hello!\", \"isLast\": true, \"isInterruptible\": true}<br>  WS &lt;&lt; {&quot;batchSequence&quot;:0,&quot;command&quot;:&quot;textPlaybackStart&quot;}<br>  WS &lt;&lt; {&quot;batchSequence&quot;:0,&quot;command&quot;:&quot;textPlaybackStop&quot;}<br>  WS &lt;&lt; {&quot;reason&quot;:&quot;speech-detected&quot;,&quot;command&quot;:&quot;interrupt&quot;}<br>  WS &lt;&lt; {&quot;sttLanguage&quot;:&quot;en-US&quot;,&quot;text&quot;:&quot;Hi.&quot;,&quot;isCorrection&quot;:false,&quot;command&quot;:&quot;text&quot;}<br>    STT \u2192 'Hi.'<br>    LLM \u2190 'Hey there! How can I assist you today? If it involves voice tech or a good dad j'\u2026<br>  WS &gt;&gt; {\"command\": \"text\", \"text\": \"Hey there! How can I assist you today?...\", \"isLast\": true}<br>  WS &lt;&lt; {&quot;batchSequence&quot;:1,&quot;command&quot;:&quot;textPlaybackStart&quot;}<br>  WS &lt;&lt; {&quot;batchSequence&quot;:1,&quot;command&quot;:&quot;textPlaybackStop&quot;}<br>[-] Connection closed (1006):<br>[-] Session ended  callId=01M25YACD3G61GH4Y0NQNWR4WD<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Deux \u00e9l\u00e9ments de ce journal m\u00e9ritent d&rsquo;\u00eatre connus avant votre premier appel. Le message <code>connect<\/code> contient <code>interruptionsEnabled<\/code>: true, ce qui vous permet de confirmer la valeur par d\u00e9faut pour l&rsquo;interruption plut\u00f4t que de la tirer de la r\u00e9f\u00e9rence de configuration. De plus, la connexion se ferme avec le code <code>1006<\/code> lorsque l&rsquo;appelant raccroche, ce qui est interpr\u00e9t\u00e9 comme une fermeture anormale, mais correspond ici \u00e0 un raccrochage normal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un <code>interrupt<\/code> avec <code>reason=speech-detected<\/code> appara\u00eet \u00e0 chaque tour, car Sinch en envoie un chaque fois qu&rsquo;il entend l&rsquo;appelant. C&rsquo;est sa position qui vous donne une indication\u00a0: apr\u00e8s <code>textPlaybackStop<\/code>, il marque simplement le d\u00e9but du tour de l&rsquo;appelant, tandis qu&rsquo;entre <code>textPlaybackStart<\/code> et <code>textPlaybackStop<\/code>, il s&rsquo;agit d&rsquo;une intervention. Lorsque j&rsquo;ai parl\u00e9 pendant une r\u00e9ponse, la lecture s&rsquo;est arr\u00eat\u00e9e et la transcription suivante correspondait \u00e0 ce que j&rsquo;avais dit par-dessus\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>WS &lt;&lt; {&quot;batchSequence&quot;:5,&quot;command&quot;:&quot;textPlaybackStart&quot;}<br>  WS &lt;&lt; {&quot;reason&quot;:&quot;speech-detected&quot;,&quot;command&quot;:&quot;interrupt&quot;}<br>  WS &lt;&lt; {&quot;batchSequence&quot;:5,&quot;command&quot;:&quot;textPlaybackStop&quot;}<br>  WS &lt;&lt; {&quot;sttLanguage&quot;:&quot;en-US&quot;,&quot;text&quot;:&quot;I&#039;m going to stop you right there.&quot;,...,&quot;command&quot;:&quot;text&quot;}<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Il s&rsquo;agit d&rsquo;une interface vocale devant un agent IA bas\u00e9 sur du texte, sans que vous ayez \u00e0 traiter une seule trame audio vous-m\u00eame.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O\u00f9 se situe votre application<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sinch et le serveur WebSocket \u00e9changent un petit protocole JSON, une commande par message, et <code>server.py<\/code> le g\u00e8re pour vous. Les corrections de transcription sont la partie qu&rsquo;il vaut la peine de comprendre avant de vous appuyer sur l&rsquo;exemple.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sinch envoie une premi\u00e8re transcription, puis peut en envoyer une corrig\u00e9e pour le m\u00eame \u00e9nonc\u00e9 avec <code>isCorrection: true<\/code>, et le texte corrig\u00e9 inclut le texte pr\u00e9c\u00e9dent au lieu de remplacer uniquement la partie modifi\u00e9e. Cela s&rsquo;est produit une fois en trois appels\u00a0: <code>Thank you.<\/code> a \u00e9t\u00e9 suivi de <code>Thank you.\\nOh<\/code>, <code>that's nice.<\/code>, et les deux ont \u00e9t\u00e9 envoy\u00e9s au mod\u00e8le, de sorte que l&rsquo;agent a r\u00e9pondu deux fois au m\u00eame \u00e9nonc\u00e9. D\u00e9cidez si vous souhaitez attendre une correction, annuler la requ\u00eate en cours ou ignorer compl\u00e8tement les corrections.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La limite de l&rsquo;application ressemble \u00e0 ceci\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\"><code>Parole de l'appelant<br>    |<br>Reconnaissance vocale Sinch<br>    |<br>Message texte Voice Relay<br>    |<br>Agent IA<br>    |<br>R\u00e9ponse textuelle Voice Relay<br>    |<br>Synth\u00e8se vocale Sinch<br>    |<br>L'appelant entend la r\u00e9ponse<\/code><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Voice Relay ou streaming audio brut\u00a0?<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Choisir\u00a0<\/td><td>Quand\u00a0<\/td><\/tr><tr><td>Voice Relay\u00a0<\/td><td>Votre agent accepte du texte et renvoie du texte, et Sinch g\u00e8re la reconnaissance et la synth\u00e8se vocales (STT et TTS).\u00a0<\/td><\/tr><tr><td>Voice Streams\u00a0<\/td><td>Vous avez besoin d&rsquo;audio brut et poss\u00e9dez le pipeline STT\/TTS.\u00a0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Voice Streams convient \u00e0 un pipeline vocal personnalis\u00e9, \u00e0 un processeur audio sp\u00e9cialis\u00e9 ou \u00e0 un fournisseur dont le protocole n\u00e9cessite un acc\u00e8s direct \u00e0 l&rsquo;audio. Cela signifie \u00e9galement que vous avez davantage la main sur le comportement en cas de latence et d&rsquo;\u00e9chec.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Consid\u00e9rations de production<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les interactions vocales rendent la latence visible. Une r\u00e9ponse lente du mod\u00e8le cr\u00e9e un silence pour l&rsquo;appelant. Mesurez donc le temps \u00e9coul\u00e9 entre l&rsquo;\u00e9v\u00e9nement vocal entrant et la premi\u00e8re r\u00e9ponse, ainsi que jusqu&rsquo;\u00e0 la r\u00e9ponse compl\u00e8te. Utilisez un mod\u00e8le et un prompt adapt\u00e9s \u00e0 une conversation t\u00e9l\u00e9phonique plut\u00f4t que de vous concentrer uniquement sur l&rsquo;optimisation de la qualit\u00e9 maximale de la r\u00e9ponse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;exemple du d\u00e9p\u00f4t attend la r\u00e9ponse compl\u00e8te du mod\u00e8le avant de renvoyer quoi que ce soit, de sorte que l&rsquo;appelant n&rsquo;entend rien tant que le mod\u00e8le n&rsquo;a pas fini de g\u00e9n\u00e9rer. C&rsquo;est la premi\u00e8re chose \u00e0 v\u00e9rifier si les pauses semblent longues.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;exemple conserve \u00e9galement l&rsquo;historique des conversations en m\u00e9moire pour chaque connexion WebSocket. C&rsquo;est suffisant pour un premier test, mais il ne s&rsquo;agit pas d&rsquo;un stockage de conversation durable. D\u00e9cidez de quel \u00e9tat appartient \u00e0 un appel, ce qui appartient \u00e0 un profil client et ce qui doit survivre \u00e0 une reconnexion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les interruptions n\u00e9cessitent une gestion explicite. Si l&rsquo;appelant parle pendant qu&rsquo;une r\u00e9ponse est lue, vous pouvez recevoir un \u00e9v\u00e9nement d&rsquo;interruption alors qu&rsquo;une requ\u00eate LLM est toujours en cours d&rsquo;ex\u00e9cution. Annulez la requ\u00eate lorsque cela est possible, ou marquez chaque r\u00e9ponse avec un ID de tour (turn ID) et \u00e9liminez les sorties obsol\u00e8tes avant de les renvoyer \u00e0 Sinch. Ce m\u00eame ID de tour g\u00e8re les transcriptions corrig\u00e9es, qui arrivent sous la forme d&rsquo;un second message <code>text<\/code> pour un \u00e9nonc\u00e9 que vous avez d\u00e9j\u00e0 envoy\u00e9 au mod\u00e8le.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;exemple local n\u00e9cessite \u00e9galement une gestion des \u00e9checs plus robuste avant d&rsquo;\u00eatre utilis\u00e9 en production\u00a0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Envoyer une courte r\u00e9ponse de repli lorsque le fournisseur du mod\u00e8le \u00e9choue.<\/li>\n\n\n\n<li>Persister l&rsquo;\u00e9tat de la conversation lorsque l&rsquo;appel doit survivre au red\u00e9marrage d&rsquo;un processus.<\/li>\n\n\n\n<li>Maintenir le point de terminaison WebSocket disponible pendant toute la dur\u00e9e de l&rsquo;appel.<\/li>\n\n\n\n<li>Consigner les identifiants d&rsquo;appel, de session, de connexion et de minutage du mod\u00e8le sans enregistrer inutilement le contenu sensible de la conversation.<\/li>\n\n\n\n<li>Utiliser les identifiants client OAuth 2.0 pour l&rsquo;acc\u00e8s \u00e0 l&rsquo;API en production. L&rsquo;authentification de base est utile pour les tests initiaux.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9solution de probl\u00e8mes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00e9rifiez la configuration du fournisseur avant de passer un appel. Une cl\u00e9 LLM incorrecte ou manquante se traduit par un appel silencieux plut\u00f4t que par une erreur, car le mod\u00e8le n&rsquo;est appel\u00e9 qu&rsquo;au premier tour. Confirmez donc que <code>PROVIDER<\/code> et <code>API_KEY<\/code> correspondent dans <code>.env<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;URL gratuite de ngrok change lorsque le tunnel red\u00e9marre. Mettez \u00e0 jour <code>endpoint<\/code> dans la configuration du service de l&rsquo;API vocale v2 chaque fois que cela se produit, sans quoi Sinch ne pourra pas joindre le serveur actuel. Il n&rsquo;est pas n\u00e9cessaire de red\u00e9marrer <code>server.py<\/code> pour cela.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Statut de la pr\u00e9visualisation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les conditions de la pr\u00e9visualisation autorisent les tests, l&rsquo;\u00e9valuation, l&rsquo;utilisation commerciale initiale et le trafic en direct, et indiquent que la plateforme est con\u00e7ue pour supporter des volumes de niveau de production. Le service est fourni tel quel et selon la disponibilit\u00e9. Des limites d&rsquo;utilisation peuvent s&rsquo;appliquer, et aucun SLA ne s&rsquo;applique. Sinch peut ajouter des fonctionnalit\u00e9s, et des changements majeurs (breaking changes) ne peuvent pas \u00eatre exclus avant la disponibilit\u00e9 g\u00e9n\u00e9rale.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prochaines \u00e9tapes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Voice Relay est l&rsquo;une des voies d&rsquo;acc\u00e8s \u00e0 l&rsquo;API vocale v2. Le m\u00eame mod\u00e8le de plateforme prend \u00e9galement en charge\u00a0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Alertes vocales sortantes avec synth\u00e8se vocale<\/li>\n\n\n\n<li>D\u00e9tection de r\u00e9pondeur<\/li>\n\n\n\n<li>Appels par lots avec espacement des appels<\/li>\n\n\n\n<li>Enregistrement des appels et transcription<\/li>\n\n\n\n<li>Num\u00e9ros masqu\u00e9s<\/li>\n\n\n\n<li>Connexions SIP<\/li>\n\n\n\n<li>Streaming audio brut<\/li>\n\n\n\n<li>Contr\u00f4le des appels en direct via SVAML et webhooks<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Le <a href=\"https:\/\/github.com\/sinch\/sinch-voice-tutorials\">Le d\u00e9p\u00f4t des tutoriels de l&rsquo;API vocale Sinch v2 <\/a> contient des exemples fonctionnels pour ces parcours. Commencez par le tutoriel <code>4.1-voice-relay<\/code> pour un agent textuel, puis passez \u00e0 <code>4.2-stream-audio<\/code> lorsque vous avez besoin d&rsquo;un acc\u00e8s direct au flux audio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;API vocale v2 offre \u00e0 un agent textuel existant une voie vers une interaction vocale en direct sans transformer cet agent en un syst\u00e8me de traitement audio. Clonez <code>4.1-voice-relay<\/code>, pointez <code>system_prompt.md<\/code> vers le prompt de votre propre agent, et appelez le num\u00e9ro.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ressources compl\u00e9mentaires<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/voice-2.0\/overview\">Aper\u00e7u de l&rsquo;API vocale Sinch v2<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/voice-2.0\/getting-started\">Premiers pas avec l&rsquo;API vocale v2<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/voice-2.0\/api-reference\/voice\">R\u00e9f\u00e9rence de l&rsquo;API vocale v2<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/voice-2.0\/api-reference\/text-to-speech-voices\">R\u00e9f\u00e9rence des voix de la synth\u00e8se vocale<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/sinch\/sinch-voice-tutorials\">D\u00e9p\u00f4t des tutoriels de l&rsquo;API vocale v2<\/a><\/li>\n<\/ul>\n","protected":false},"author":93,"featured_media":211257,"menu_order":0,"template":"","meta":{"_acf_changed":false,"footnotes":""},"tags":[],"blog_category":[751],"class_list":["post-211316","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-developpeurs"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l&#039;API vocale Sinch v2<\/title>\n<meta name=\"description\" content=\"Connectez des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques en direct sans infrastructure de t\u00e9l\u00e9communication gr\u00e2ce \u00e0 l&#039;API vocale Sinch v2 et \u00e0 Voice Relay. Marche \u00e0 suivre, du clonage jusqu&#039;\u00e0 un appel fonctionnel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l&#039;API vocale Sinch v2\" \/>\n<meta property=\"og:description\" content=\"Connectez des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques en direct sans infrastructure de t\u00e9l\u00e9communication gr\u00e2ce \u00e0 l&#039;API vocale Sinch v2 et \u00e0 Voice Relay. Marche \u00e0 suivre, du clonage jusqu&#039;\u00e0 un appel fonctionnel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/\" \/>\n<meta property=\"og:site_name\" content=\"Sinch\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/wearesinch\/\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sinch.com\/wp-content\/uploads\/2026\/09\/SI_NEB_Voice_API-V2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1296\" \/>\n\t<meta property=\"og:image:height\" content=\"788\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@WeAreSinch\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/\"},\"author\":{\"name\":\"Gunnar Grosch\",\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/#\\\/schema\\\/person\\\/b2bde1c2728a21bc953ea0e129936c08\"},\"headline\":\"Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l\u2019API vocale Sinch v2\",\"datePublished\":\"2026-09-25T10:35:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/\"},\"wordCount\":2737,\"publisher\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/SI_NEB_Voice_API-V2.png\",\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/\",\"url\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/\",\"name\":\"Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l'API vocale Sinch v2\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/SI_NEB_Voice_API-V2.png\",\"datePublished\":\"2026-09-25T10:35:19+00:00\",\"description\":\"Connectez des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques en direct sans infrastructure de t\u00e9l\u00e9communication gr\u00e2ce \u00e0 l'API vocale Sinch v2 et \u00e0 Voice Relay. Marche \u00e0 suivre, du clonage jusqu'\u00e0 un appel fonctionnel.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/#primaryimage\",\"url\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/SI_NEB_Voice_API-V2.png\",\"contentUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/SI_NEB_Voice_API-V2.png\",\"width\":1296,\"height\":788,\"caption\":\"Two developers reviewing code on a laptop, branded \\\"Sinch Voice API v2\\\"\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/agent-ia-appels-telephoniques-relais-api-vocale\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sinch.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/sinch.com\\\/fr\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l\u2019API vocale Sinch v2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/sinch.com\\\/fr\\\/\",\"name\":\"Sinch\",\"description\":\"Messagerie SMS, Voix, Email, Vid\u00e9o & API de v\u00e9rification | Sinch\",\"publisher\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sinch.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/#organization\",\"name\":\"Sinch\",\"url\":\"https:\\\/\\\/sinch.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/Thumbnail-Logo-Honey.png\",\"contentUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/Thumbnail-Logo-Honey.png\",\"width\":800,\"height\":496,\"caption\":\"Sinch\"},\"image\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/wearesinch\\\/\",\"https:\\\/\\\/x.com\\\/WeAreSinch\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/sinch\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCZZ2u_B2afTxA0v-xcgfsaw\",\"https:\\\/\\\/www.instagram.com\\\/wearesinch\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sinch.com\\\/fr\\\/#\\\/schema\\\/person\\\/b2bde1c2728a21bc953ea0e129936c08\",\"name\":\"Gunnar Grosch\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g\",\"caption\":\"Gunnar Grosch\"},\"description\":\"Gunnar Grosch is a Principal Developer Advocate at Sinch and an engineer with over 25 years of experience building software, scaling developer communities, and making complex technology accessible. He shares code, insights, and lessons through conference talks, blog posts, and open source.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l'API vocale Sinch v2","description":"Connectez des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques en direct sans infrastructure de t\u00e9l\u00e9communication gr\u00e2ce \u00e0 l'API vocale Sinch v2 et \u00e0 Voice Relay. Marche \u00e0 suivre, du clonage jusqu'\u00e0 un appel fonctionnel.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/","og_locale":"fr_FR","og_type":"article","og_title":"Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l'API vocale Sinch v2","og_description":"Connectez des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques en direct sans infrastructure de t\u00e9l\u00e9communication gr\u00e2ce \u00e0 l'API vocale Sinch v2 et \u00e0 Voice Relay. Marche \u00e0 suivre, du clonage jusqu'\u00e0 un appel fonctionnel.","og_url":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/","og_site_name":"Sinch","article_publisher":"https:\/\/www.facebook.com\/wearesinch\/","og_image":[{"width":1296,"height":788,"url":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/09\/SI_NEB_Voice_API-V2.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@WeAreSinch","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/#article","isPartOf":{"@id":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/"},"author":{"name":"Gunnar Grosch","@id":"https:\/\/sinch.com\/fr\/#\/schema\/person\/b2bde1c2728a21bc953ea0e129936c08"},"headline":"Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l\u2019API vocale Sinch v2","datePublished":"2026-09-25T10:35:19+00:00","mainEntityOfPage":{"@id":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/"},"wordCount":2737,"publisher":{"@id":"https:\/\/sinch.com\/fr\/#organization"},"image":{"@id":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/#primaryimage"},"thumbnailUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/09\/SI_NEB_Voice_API-V2.png","inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/","url":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/","name":"Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l'API vocale Sinch v2","isPartOf":{"@id":"https:\/\/sinch.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/#primaryimage"},"image":{"@id":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/#primaryimage"},"thumbnailUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/09\/SI_NEB_Voice_API-V2.png","datePublished":"2026-09-25T10:35:19+00:00","description":"Connectez des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques en direct sans infrastructure de t\u00e9l\u00e9communication gr\u00e2ce \u00e0 l'API vocale Sinch v2 et \u00e0 Voice Relay. Marche \u00e0 suivre, du clonage jusqu'\u00e0 un appel fonctionnel.","breadcrumb":{"@id":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/#primaryimage","url":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/09\/SI_NEB_Voice_API-V2.png","contentUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/09\/SI_NEB_Voice_API-V2.png","width":1296,"height":788,"caption":"Two developers reviewing code on a laptop, branded \"Sinch Voice API v2\""},{"@type":"BreadcrumbList","@id":"https:\/\/sinch.com\/fr\/blog\/agent-ia-appels-telephoniques-relais-api-vocale\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sinch.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/sinch.com\/fr\/blog\/"},{"@type":"ListItem","position":3,"name":"Connecter des agents IA \u00e0 des appels t\u00e9l\u00e9phoniques avec l\u2019API vocale Sinch v2"}]},{"@type":"WebSite","@id":"https:\/\/sinch.com\/fr\/#website","url":"https:\/\/sinch.com\/fr\/","name":"Sinch","description":"Messagerie SMS, Voix, Email, Vid\u00e9o & API de v\u00e9rification | Sinch","publisher":{"@id":"https:\/\/sinch.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sinch.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/sinch.com\/fr\/#organization","name":"Sinch","url":"https:\/\/sinch.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/sinch.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/sinch.com\/wp-content\/uploads\/2024\/09\/Thumbnail-Logo-Honey.png","contentUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2024\/09\/Thumbnail-Logo-Honey.png","width":800,"height":496,"caption":"Sinch"},"image":{"@id":"https:\/\/sinch.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/wearesinch\/","https:\/\/x.com\/WeAreSinch","https:\/\/www.linkedin.com\/company\/sinch","https:\/\/www.youtube.com\/channel\/UCZZ2u_B2afTxA0v-xcgfsaw","https:\/\/www.instagram.com\/wearesinch\/"]},{"@type":"Person","@id":"https:\/\/sinch.com\/fr\/#\/schema\/person\/b2bde1c2728a21bc953ea0e129936c08","name":"Gunnar Grosch","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g","caption":"Gunnar Grosch"},"description":"Gunnar Grosch is a Principal Developer Advocate at Sinch and an engineer with over 25 years of experience building software, scaling developer communities, and making complex technology accessible. He shares code, insights, and lessons through conference talks, blog posts, and open source."}]}},"_links":{"self":[{"href":"https:\/\/sinch.com\/fr\/wp-json\/wp\/v2\/blog\/211316","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sinch.com\/fr\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/sinch.com\/fr\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/sinch.com\/fr\/wp-json\/wp\/v2\/users\/93"}],"version-history":[{"count":0,"href":"https:\/\/sinch.com\/fr\/wp-json\/wp\/v2\/blog\/211316\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sinch.com\/fr\/wp-json\/wp\/v2\/media\/211257"}],"wp:attachment":[{"href":"https:\/\/sinch.com\/fr\/wp-json\/wp\/v2\/media?parent=211316"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sinch.com\/fr\/wp-json\/wp\/v2\/tags?post=211316"},{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/sinch.com\/fr\/wp-json\/wp\/v2\/blog_category?post=211316"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}