<p>Bonjour,</p>
<p>Oui, vous n’êtes pas seul dans cette situation. Les arrêts soudains de bots Teams affectent régulièrement de nombreuses organisations, et les causes peuvent être très variées. Cette réponse couvre les raisons les plus fréquentes pour lesquelles un <strong>bot Microsoft Teams</strong> cesse de fonctionner subitement, et les étapes de diagnostic et résolution.</p>
<hr>
<h2><a name="p-34564-causes-frquentes-darrt-soudain-dun-bot-teams-1" class="anchor" href="#p-34564-causes-frquentes-darrt-soudain-dun-bot-teams-1" aria-label="Heading link"></a>Causes fréquentes d’arrêt soudain d’un bot Teams</h2>
<h3><a name="p-34564-vue-densemble-2" class="anchor" href="#p-34564-vue-densemble-2" aria-label="Heading link"></a>Vue d’ensemble</h3>
<div class="md-table">
<table>
<thead>
<tr>
<th>Cause</th>
<th>Fréquence</th>
<th>Gravité</th>
</tr>
</thead>
<tbody>
<tr>
<td>Expiration du secret client (client secret) de l’app Azure AD</td>
<td>Très fréquente</td>
<td>Bloquante</td>
</tr>
<tr>
<td>Incident de service Microsoft (Azure Bot Service, Teams)</td>
<td>Fréquente</td>
<td>Bloquante mais temporaire</td>
</tr>
<tr>
<td>Webhook ou endpoint de bot inaccessible</td>
<td>Fréquente</td>
<td>Bloquante</td>
</tr>
<tr>
<td>Certificat SSL expiré sur le serveur du bot</td>
<td>Fréquente</td>
<td>Bloquante</td>
</tr>
<tr>
<td>Permissions d’application révoquées ou modifiées</td>
<td>Moins fréquente</td>
<td>Bloquante</td>
</tr>
<tr>
<td>Changement dans les politiques Teams de l’organisation</td>
<td>Moins fréquente</td>
<td>Bloquante</td>
</tr>
<tr>
<td>Quota API dépassé (Microsoft Graph ou Bot Framework)</td>
<td>Occasionnelle</td>
<td>Partielle</td>
</tr>
</tbody>
</table>
</div><hr>
<h2><a name="p-34564-tape-1-vrifier-ltat-des-services-microsoft-3" class="anchor" href="#p-34564-tape-1-vrifier-ltat-des-services-microsoft-3" aria-label="Heading link"></a>Étape 1 : Vérifier l’état des services Microsoft</h2>
<p>Avant toute chose, vérifiez si Microsoft rencontre un incident de service.</p>
<p><strong>Tableau de bord de santé des services Microsoft 365 :</strong></p>
<ul>
<li>Portail admin : <a href="https://admin.microsoft.com">admin.microsoft.com</a> > Intégrité > État du service</li>
<li>Page publique : <a href="https://status.office365.com">status.office365.com</a></li>
<li>Azure Status : <a href="https://status.azure.com">status.azure.com</a></li>
</ul>
<p>Si un incident est en cours sur <strong>Microsoft Teams</strong> ou <strong>Azure Bot Service</strong>, votre bot est probablement victime d’une panne globale ou régionale — dans ce cas, il suffit d’attendre la résolution.</p>
<hr>
<h2><a name="p-34564-tape-2-vrifier-le-secret-client-de-lapplication-azure-ad-4" class="anchor" href="#p-34564-tape-2-vrifier-le-secret-client-de-lapplication-azure-ad-4" aria-label="Heading link"></a>Étape 2 : Vérifier le secret client de l’application Azure AD</h2>
<h3><a name="p-34564-la-cause-la-plus-frquente-5" class="anchor" href="#p-34564-la-cause-la-plus-frquente-5" aria-label="Heading link"></a>La cause la plus fréquente</h3>
<p>La raison numéro 1 des arrêts de bots Teams est l’<strong>expiration du secret client (Client Secret)</strong> de l’application Azure AD associée au bot. Par défaut, ces secrets sont créés avec une durée de validité de <strong>1 an</strong> — et quand ils expirent, le bot cesse immédiatement de fonctionner sans message d’erreur explicite pour l’utilisateur final.</p>
<h3><a name="p-34564-vrification-dans-le-portail-azure-6" class="anchor" href="#p-34564-vrification-dans-le-portail-azure-6" aria-label="Heading link"></a>Vérification dans le portail Azure</h3>
<ol>
<li>Connectez-vous à <a href="https://portal.azure.com">portal.azure.com</a></li>
<li>Naviguez vers <strong>Azure Active Directory (Entra ID)</strong> > <strong>Inscriptions d’applications</strong></li>
<li>Trouvez l’application enregistrée pour votre bot</li>
<li>Cliquez sur <strong>“Certificats et secrets”</strong></li>
<li>Vérifiez la colonne <strong>“Date d’expiration”</strong> de chaque secret</li>
</ol>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Lister toutes les applications Entra ID et leurs secrets expirés via Graph PowerShell
Connect-MgGraph -Scopes "Application.Read.All"
$apps = Get-MgApplication -All
foreach ($app in $apps) {
foreach ($secret in $app.PasswordCredentials) {
if ($secret.EndDateTime -lt (Get-Date).AddDays(30)) {
Write-Host "App: $($app.DisplayName) | Secret expiration: $($secret.EndDateTime)" -ForegroundColor Red
}
}
}
</code></pre>
<h3><a name="p-34564-renouveler-le-secret-client-7" class="anchor" href="#p-34564-renouveler-le-secret-client-7" aria-label="Heading link"></a>Renouveler le secret client</h3>
<ol>
<li>Dans <strong>“Certificats et secrets”</strong>, cliquez sur <strong>“+ Nouveau secret client”</strong></li>
<li>Donnez une description et choisissez une durée de validité (recommandation : <strong>24 mois</strong> maximum, puis planifiez le renouvellement)</li>
<li><strong>Copiez immédiatement</strong> la valeur du secret — elle n’est visible qu’une seule fois</li>
<li>Mettez à jour la valeur du secret dans la configuration de votre bot (variables d’environnement, Key Vault, appsettings.json, etc.)</li>
<li>Redémarrez le service hébergeant le bot</li>
</ol>
<hr>
<h2><a name="p-34564-tape-3-vrifier-laccessibilit-du-endpoint-du-bot-8" class="anchor" href="#p-34564-tape-3-vrifier-laccessibilit-du-endpoint-du-bot-8" aria-label="Heading link"></a>Étape 3 : Vérifier l’accessibilité du endpoint du bot</h2>
<p>Teams envoie des messages à votre bot via une URL <strong>HTTPS</strong> appelée <strong>Messaging Endpoint</strong>. Si cette URL n’est plus accessible (serveur arrêté, changement IP, DNS périmé), le bot ne reçoit plus aucun message.</p>
<h3><a name="p-34564-vrification-dans-azure-bot-service-9" class="anchor" href="#p-34564-vrification-dans-azure-bot-service-9" aria-label="Heading link"></a>Vérification dans Azure Bot Service</h3>
<ol>
<li>Portail Azure > <strong>Azure Bot</strong> (ou <strong>Bot Services</strong>)</li>
<li>Onglet <strong>“Configuration”</strong></li>
<li>Vérifiez l’URL dans le champ <strong>“Messaging endpoint”</strong></li>
</ol>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Tester l'accessibilité du endpoint depuis PowerShell
$botEndpoint = "https://votre-bot.azurewebsites.net/api/messages"
try {
$response = Invoke-WebRequest -Uri $botEndpoint -Method POST -UseBasicParsing -TimeoutSec 10
Write-Host "Endpoint accessible - Code: $($response.StatusCode)"
} catch {
Write-Host "Endpoint inaccessible : $($_.Exception.Message)" -ForegroundColor Red
}
</code></pre>
<h3><a name="p-34564-vrifier-le-certificat-ssl-du-serveur-10" class="anchor" href="#p-34564-vrifier-le-certificat-ssl-du-serveur-10" aria-label="Heading link"></a>Vérifier le certificat SSL du serveur</h3>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Vérifier le certificat SSL du endpoint du bot
$hostname = "votre-bot.azurewebsites.net"
$port = 443
$tcpClient = New-Object System.Net.Sockets.TcpClient($hostname, $port)
$sslStream = New-Object System.Net.Security.SslStream($tcpClient.GetStream())
$sslStream.AuthenticateAsClient($hostname)
$cert = $sslStream.RemoteCertificate
Write-Host "Certificat valable jusqu'au : $($cert.GetExpirationDateString())"
Write-Host "Sujet : $($cert.Subject)"
$sslStream.Close()
$tcpClient.Close()
</code></pre>
<hr>
<h2><a name="p-34564-tape-4-vrifier-les-permissions-de-lapplication-teams-11" class="anchor" href="#p-34564-tape-4-vrifier-les-permissions-de-lapplication-teams-11" aria-label="Heading link"></a>Étape 4 : Vérifier les permissions de l’application Teams</h2>
<h3><a name="p-34564-dans-le-centre-dadministration-teams-12" class="anchor" href="#p-34564-dans-le-centre-dadministration-teams-12" aria-label="Heading link"></a>Dans le Centre d’administration Teams</h3>
<ol>
<li>Connectez-vous à <a href="https://admin.teams.microsoft.com">admin.teams.microsoft.com</a></li>
<li>Naviguez vers <strong>“Applications Teams”</strong> > <strong>“Gérer les applications”</strong></li>
<li>Recherchez votre bot</li>
<li>Vérifiez le statut : <strong>Autorisé</strong> ou <strong>Bloqué</strong></li>
</ol>
<p>Un administrateur peut involontairement bloquer une application lors d’une révision de la politique des applications Teams.</p>
<h3><a name="p-34564-vrifier-les-politiques-dautorisation-des-applications-13" class="anchor" href="#p-34564-vrifier-les-politiques-dautorisation-des-applications-13" aria-label="Heading link"></a>Vérifier les politiques d’autorisation des applications</h3>
<pre data-code-wrap="powershell"><code class="lang-powershell">Connect-MicrosoftTeams
Lister les politiques d'autorisation d'applications
Get-CsTeamsAppPermissionPolicy
Vérifier quelle politique est assignée à vos utilisateurs
Get-CsUserPolicyAssignment -Identity "utilisateur@votredomaine.com" -PolicyType TeamsAppPermissionPolicy
</code></pre>
<hr>
<h2><a name="p-34564-tape-5-consulter-les-logs-du-bot-14" class="anchor" href="#p-34564-tape-5-consulter-les-logs-du-bot-14" aria-label="Heading link"></a>Étape 5 : Consulter les logs du bot</h2>
<h3><a name="p-34564-logs-azure-app-service-si-hberg-sur-azure-15" class="anchor" href="#p-34564-logs-azure-app-service-si-hberg-sur-azure-15" aria-label="Heading link"></a>Logs Azure App Service (si hébergé sur Azure)</h3>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Via Azure CLI — récupérer les logs récents
az webapp log tail --name nom-de-votre-app --resource-group votre-resource-group
Télécharger les logs d'application
az webapp log download --name nom-de-votre-app --resource-group votre-resource-group --log-file logs.zip
</code></pre>
<h3><a name="p-34564-logs-bot-framework-16" class="anchor" href="#p-34564-logs-bot-framework-16" aria-label="Heading link"></a>Logs Bot Framework</h3>
<p>Dans le portail Azure > votre ressource <strong>Azure Bot</strong> > <strong>“Test dans Web Chat”</strong> : tentez d’envoyer un message directement. Si le bot répond dans le Web Chat mais pas dans Teams, le problème est du côté du canal Teams. Si le bot ne répond pas non plus dans le Web Chat, le problème est dans le code ou la configuration du bot lui-même.</p>
<hr>
<h2><a name="p-34564-tape-6-re-publier-le-canal-teams-si-ncessaire-17" class="anchor" href="#p-34564-tape-6-re-publier-le-canal-teams-si-ncessaire-17" aria-label="Heading link"></a>Étape 6 : Re-publier le canal Teams si nécessaire</h2>
<p>Parfois, le canal Teams d’un bot se déconnecte sans raison apparente, notamment après des changements de configuration :</p>
<ol>
<li>Portail Azure > <strong>Azure Bot</strong> > <strong>“Canaux”</strong></li>
<li>Cliquez sur le canal <strong>Microsoft Teams</strong></li>
<li>Cliquez sur <strong>“Supprimer”</strong> pour retirer le canal</li>
<li>Attendez 1 minute</li>
<li>Recliquez sur <strong>“Microsoft Teams”</strong> pour ré-ajouter le canal</li>
<li>Acceptez les conditions d’utilisation</li>
</ol>
<hr>
<h2><a name="p-34564-bonnes-pratiques-pour-viter-les-rcidives-18" class="anchor" href="#p-34564-bonnes-pratiques-pour-viter-les-rcidives-18" aria-label="Heading link"></a>Bonnes pratiques pour éviter les récidives</h2>
<ol>
<li><strong>Alertes d’expiration des secrets</strong> : configurez des alertes dans Azure Monitor 90 jours avant l’expiration des secrets clients</li>
<li><strong>Utiliser Azure Key Vault</strong> pour stocker les secrets — simplifier la rotation sans redéploiement du code</li>
<li><strong>Surveiller la santé du bot</strong> avec Azure Application Insights</li>
<li><strong>Documenter les dates d’expiration</strong> de tous les certificats et secrets dans un registre interne</li>
</ol>
<pre data-code-wrap="powershell"><code class="lang-powershell"># Script de monitoring hebdomadaire des secrets proches de l'expiration
À planifier dans Azure Automation ou GitHub Actions
Connect-MgGraph -Scopes "Application.Read.All"
$alertDays = 60
Get-MgApplication -All | ForEach-Object {
$app = $_
$app.PasswordCredentials | Where-Object {$.EndDateTime -lt (Get-Date).AddDays($alertDays)} | ForEach-Object {
[PSCustomObject]@{
Application = $app.DisplayName
SecretName = $.DisplayName
ExpiresOn = $.EndDateTime
DaysLeft = ($.EndDateTime - (Get-Date)).Days
}
}
} | Sort-Object DaysLeft | Format-Table -AutoSize
</code></pre>
<p>Faites-nous savoir quelle cause a finalement été identifiée pour votre bot — cela pourra aider d’autres membres de la communauté qui rencontrent le même problème.</p>
<hr>
<p><em>Ayi NEDJIMI — Consultant IT & Microsoft 365 / Teams</em><br>
<em>Pour le diagnostic et la maintenance de vos bots et applications Teams : <a href="https://ayinedjimi-consultants.fr">ayinedjimi-consultants.fr</a></em></p>