Fix cronjob/telegram fallback for keyless server-key providers
Cronjobs and Telegram bots threw a hard error when an agent had no assigned user API key, even for providers (nvidia/gemini/minimax/ pollinations) whose server-side key ChatEndpoint resolves automatically via ResolveProviderConfig. The guard blocked every non-empty provider instead of only "openai", so e.g. the nvidia agent failed on "Jetzt ausführen" although the normal chat worked. Mirror ChatEndpoint's three-way handling at all three sites (ExecuteCronjob, SendCronjobNotification, TelegramService.HandleMessage): - Anthropic (empty provider): Claude CLI fallback when permitted/available - "openai": hard error (no server key, no CLI equivalent) - other providers: pass through with empty token; server key resolved later Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
f99c3c1db9
commit
e3f89043c1
2 files changed
+85
-24
No files matched your search
+24
-19
@@ -177,28 +177,33 @@ public class TelegramService
|
||||
|
||||
if (userApiKey == null)
|
||||
{
|
||||
// Kein Key → CLI-Fallback prüfen (analog ChatEndpoint).
|
||||
// Nur für Anthropic-Agents möglich (CLI = Claude). OpenAI-Provider haben kein CLI-Äquivalent.
|
||||
if (!string.IsNullOrEmpty(ctx.Provider))
|
||||
// Kein User-Key – Verhalten exakt wie ChatEndpoint:
|
||||
// - Anthropic (Provider leer) → Claude-CLI-Fallback (sofern berechtigt/verfügbar)
|
||||
// - "openai" → abbrechen (kein Server-Key, kein CLI-Äquivalent)
|
||||
// - nvidia/gemini/minimax/pollinations → durchlassen: Server-Key via ResolveProviderConfig
|
||||
if (string.IsNullOrEmpty(ctx.Provider))
|
||||
{
|
||||
await SendMessage(chatId, botToken, "❌ Kein API-Key für diesen Agent zugewiesen. Für OpenAI-kompatible Provider ist kein CLI-Fallback möglich – der Bot-Besitzer muss im Web-UI einen Key zuweisen.");
|
||||
var botOwner = await _db.GetUser(botUserId);
|
||||
if (botOwner != null && !botOwner.CanUseCli && !botOwner.IsAdmin)
|
||||
{
|
||||
await SendMessage(chatId, botToken, "❌ Kein API-Key für diesen Agent zugewiesen und der Bot-Besitzer hat keine CLI-Berechtigung.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_anthropic.IsCliAvailable)
|
||||
{
|
||||
await SendMessage(chatId, botToken, "❌ Kein API-Key für diesen Agent zugewiesen und Claude CLI nicht verfügbar. Der Bot-Besitzer muss im Web-UI einen Key zuweisen oder `claude login` auf dem Server ausführen.");
|
||||
return;
|
||||
}
|
||||
|
||||
useCliFallback = true;
|
||||
}
|
||||
else if (ctx.Provider == "openai")
|
||||
{
|
||||
await SendMessage(chatId, botToken, "❌ Kein API-Key für diesen Agent zugewiesen. OpenAI benötigt zwingend einen Key – der Bot-Besitzer muss im Web-UI einen Key zuweisen.");
|
||||
return;
|
||||
}
|
||||
|
||||
var botOwner = await _db.GetUser(botUserId);
|
||||
if (botOwner != null && !botOwner.CanUseCli && !botOwner.IsAdmin)
|
||||
{
|
||||
await SendMessage(chatId, botToken, "❌ Kein API-Key für diesen Agent zugewiesen und der Bot-Besitzer hat keine CLI-Berechtigung.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_anthropic.IsCliAvailable)
|
||||
{
|
||||
await SendMessage(chatId, botToken, "❌ Kein API-Key für diesen Agent zugewiesen und Claude CLI nicht verfügbar. Der Bot-Besitzer muss im Web-UI einen Key zuweisen oder `claude login` auf dem Server ausführen.");
|
||||
return;
|
||||
}
|
||||
|
||||
useCliFallback = true;
|
||||
// sonst: nvidia/gemini/minimax/pollinations → ctx.ApiToken bleibt leer (Server-Key-Auflösung).
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user