314 lines
15 KiB
Python
314 lines
15 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Azure Bot Service channel plugin entry point."""
|
|
|
|
import logging
|
|
|
|
from pineagents.plugins.api import PluginApi
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class AzureBotChannelPlugin:
|
|
"""Azure Bot Service channel plugin."""
|
|
|
|
def register(self, api: PluginApi):
|
|
"""Register the Azure Bot channel.
|
|
|
|
Field order below intentionally mirrors the original built-in
|
|
channel form (app_id, app_password, tenant_id, http_host,
|
|
http_port, media_dir, share_session_in_group) so the UI keeps
|
|
the same layout as before.
|
|
"""
|
|
from .channel import AzureBotChannel
|
|
|
|
api.register_channel(
|
|
channel_class=AzureBotChannel,
|
|
label="Azure Bot",
|
|
description="Azure Bot Service (Bot Framework) integration",
|
|
icon=(
|
|
"https://img.alicdn.com/imgextra/i2/"
|
|
"O1CN01eo8rBj1pCuCWPQRrz_!!6000000005325-2-tps-3000-3000.png"
|
|
),
|
|
doc_url={
|
|
"zh": (
|
|
"https://qwenpaw.agentscope.io/docs/channels/"
|
|
"?lang=zh#Azure-BotMicrosoft-机器人服务"
|
|
),
|
|
"en": (
|
|
"https://qwenpaw.agentscope.io/docs/channels/"
|
|
"?lang=en#Azure-Bot-Microsoft-Bot-Service"
|
|
),
|
|
},
|
|
config_fields=[
|
|
{
|
|
"name": "app_id",
|
|
"label": "App ID",
|
|
"type": "text",
|
|
"required": True,
|
|
"placeholder": ("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
|
|
},
|
|
{
|
|
"name": "app_password",
|
|
"label": "App Password",
|
|
"type": "password",
|
|
"required": True,
|
|
"placeholder": "App Password (Client Secret)",
|
|
},
|
|
{
|
|
"name": "tenant_id",
|
|
"label": "Tenant ID",
|
|
"type": "text",
|
|
"required": True,
|
|
"placeholder": ("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
|
|
},
|
|
{
|
|
"name": "http_host",
|
|
"label": "HTTP Host",
|
|
"type": "text",
|
|
"required": False,
|
|
"placeholder": "0.0.0.0",
|
|
"default": "0.0.0.0",
|
|
},
|
|
{
|
|
"name": "http_port",
|
|
"label": "HTTP Port",
|
|
"type": "number",
|
|
"required": False,
|
|
"placeholder": "3978",
|
|
"default": 3978,
|
|
},
|
|
{
|
|
"name": "media_dir",
|
|
"label": {
|
|
"zh-CN": "媒体文件目录",
|
|
"en-US": "Media Directory",
|
|
"ja-JP": "メディアディレクトリ",
|
|
"ru-RU": "Директория медиафайлов",
|
|
"pt-BR": "Diretório de Mídia",
|
|
"vi-VN": "Thư mục media",
|
|
"id-ID": "Direktori Media",
|
|
},
|
|
"type": "text",
|
|
"required": False,
|
|
"help": {
|
|
"zh-CN": (
|
|
"默认为当前 agent 工作区下的 media "
|
|
"目录(workspaces/<agent_id>/media)。"
|
|
),
|
|
"en-US": (
|
|
"Defaults to the current agent's workspace "
|
|
"media directory (workspaces/<agent_id>/media)."
|
|
),
|
|
"ja-JP": (
|
|
"デフォルトは現在のエージェントのワークスペース内の "
|
|
"media ディレクトリ(workspaces/<agent_id>/media)です。"
|
|
),
|
|
"ru-RU": (
|
|
"По умолчанию — каталог media рабочей области "
|
|
"текущего агента (workspaces/<agent_id>/media)."
|
|
),
|
|
"pt-BR": (
|
|
"Padrão: diretório media do espaço de trabalho "
|
|
"do agente atual (workspaces/<agent_id>/media)."
|
|
),
|
|
"vi-VN": (
|
|
"Mặc định là thư mục media trong workspace "
|
|
"của agent hiện tại (workspaces/<agent_id>/media)."
|
|
),
|
|
"id-ID": (
|
|
"Default-nya adalah direktori media pada "
|
|
"workspace agen saat ini "
|
|
"(workspaces/<agent_id>/media)."
|
|
),
|
|
},
|
|
},
|
|
{
|
|
"name": "share_session_in_group",
|
|
"label": {
|
|
"zh-CN": "群聊共享上下文",
|
|
"en-US": "Share Context in Group",
|
|
"ja-JP": "グループでコンテキスト共有",
|
|
"ru-RU": "Общий контекст в группе",
|
|
"pt-BR": "Compartilhar Contexto em Grupo",
|
|
"vi-VN": "Chia sẻ ngữ cảnh trong nhóm",
|
|
"id-ID": "Bagikan Konteks dalam Grup",
|
|
},
|
|
"type": "switch",
|
|
"required": False,
|
|
"default": False,
|
|
"help": {
|
|
"zh-CN": ("启用时,群内所有成员共享同一会话上下文;" "禁用时,每位成员维护各自独立的会话。"),
|
|
"en-US": (
|
|
"When enabled, all group members share the "
|
|
"same conversation context. When disabled, "
|
|
"each member has their own independent context."
|
|
),
|
|
"ja-JP": (
|
|
"有効にすると、グループの全メンバーが"
|
|
"同じ会話コンテキストを共有します。"
|
|
"無効にすると、各メンバーが"
|
|
"独立したコンテキストを持ちます。"
|
|
),
|
|
"ru-RU": (
|
|
"Если включено, все участники группы "
|
|
"используют общий контекст разговора. "
|
|
"Если выключено, у каждого участника "
|
|
"независимый контекст."
|
|
),
|
|
"pt-BR": (
|
|
"Quando ativado, todos os membros do grupo "
|
|
"compartilham o mesmo contexto de conversa. "
|
|
"Quando desativado, cada membro tem seu "
|
|
"próprio contexto independente."
|
|
),
|
|
"vi-VN": (
|
|
"Khi bật, tất cả thành viên nhóm chia sẻ "
|
|
"cùng một ngữ cảnh hội thoại. Khi tắt, mỗi "
|
|
"thành viên có ngữ cảnh độc lập riêng."
|
|
),
|
|
"id-ID": (
|
|
"Saat diaktifkan, semua anggota grup berbagi "
|
|
"konteks percakapan yang sama. Saat "
|
|
"dinonaktifkan, setiap anggota memiliki "
|
|
"konteks independennya sendiri."
|
|
),
|
|
},
|
|
},
|
|
{
|
|
"name": "access_control_dm",
|
|
"label": {
|
|
"zh-CN": "私聊访问控制",
|
|
"en-US": "DM Access Control",
|
|
"ja-JP": "DM アクセス制御",
|
|
"ru-RU": "Контроль доступа в ЛС",
|
|
"pt-BR": "Controle de Acesso em DM",
|
|
"vi-VN": "Kiểm soát truy cập DM",
|
|
"id-ID": "Kontrol Akses DM",
|
|
},
|
|
"type": "switch",
|
|
"required": False,
|
|
"default": False,
|
|
"help": {
|
|
"zh-CN": "开启后,只有白名单用户可以通过私聊与机器人互动",
|
|
"en-US": (
|
|
"When enabled, only whitelisted users can "
|
|
"interact with the bot in direct messages"
|
|
),
|
|
"ja-JP": ("有効にすると、ホワイトリストのユーザーのみ" "DMでBotと対話できます"),
|
|
"ru-RU": (
|
|
"При включении только пользователи из "
|
|
"белого списка могут общаться с ботом "
|
|
"в личных сообщениях"
|
|
),
|
|
"pt-BR": (
|
|
"Quando ativado, apenas usuários na lista "
|
|
"branca podem interagir com o bot em "
|
|
"mensagens diretas"
|
|
),
|
|
"vi-VN": (
|
|
"Khi bật, chỉ người dùng trong danh sách "
|
|
"trắng mới có thể tương tác với bot trong "
|
|
"tin nhắn trực tiếp"
|
|
),
|
|
"id-ID": (
|
|
"Saat diaktifkan, hanya pengguna dalam daftar "
|
|
"putih yang dapat berinteraksi dengan bot di "
|
|
"pesan langsung"
|
|
),
|
|
},
|
|
},
|
|
{
|
|
"name": "access_control_group",
|
|
"label": {
|
|
"zh-CN": "群聊访问控制",
|
|
"en-US": "Group Access Control",
|
|
"ja-JP": "グループ アクセス制御",
|
|
"ru-RU": "Контроль доступа в группах",
|
|
"pt-BR": "Controle de Acesso em Grupo",
|
|
"vi-VN": "Kiểm soát truy cập nhóm",
|
|
"id-ID": "Kontrol Akses Grup",
|
|
},
|
|
"type": "switch",
|
|
"required": False,
|
|
"default": False,
|
|
"help": {
|
|
"zh-CN": "开启后,只有白名单用户可以在群聊中与机器人互动",
|
|
"en-US": (
|
|
"When enabled, only whitelisted users can "
|
|
"interact with the bot in group chats"
|
|
),
|
|
"ja-JP": (
|
|
"有効にすると、ホワイトリストのユーザーのみ" "グループチャットでBotと対話できます"
|
|
),
|
|
"ru-RU": (
|
|
"При включении только пользователи из "
|
|
"белого списка могут общаться с ботом "
|
|
"в групповых чатах"
|
|
),
|
|
"pt-BR": (
|
|
"Quando ativado, apenas usuários na lista "
|
|
"branca podem interagir com o bot em chats "
|
|
"de grupo"
|
|
),
|
|
"vi-VN": (
|
|
"Khi bật, chỉ người dùng trong danh sách "
|
|
"trắng mới có thể tương tác với bot trong "
|
|
"nhóm chat"
|
|
),
|
|
"id-ID": (
|
|
"Saat diaktifkan, hanya pengguna dalam daftar "
|
|
"putih yang dapat berinteraksi dengan bot di "
|
|
"chat grup"
|
|
),
|
|
},
|
|
},
|
|
{
|
|
"name": "require_mention",
|
|
"label": {
|
|
"zh-CN": "需要 @提及",
|
|
"en-US": "Require @Mention",
|
|
"ja-JP": "@メンション必須",
|
|
"ru-RU": "Требовать @упоминание",
|
|
"pt-BR": "Exigir @Menção",
|
|
"vi-VN": "Yêu cầu @Đề cập",
|
|
"id-ID": "Wajib @Sebut",
|
|
},
|
|
"type": "switch",
|
|
"required": False,
|
|
"default": False,
|
|
"help": {
|
|
"zh-CN": "开启后,群聊中仅在被 @提及 时才会回复",
|
|
"en-US": (
|
|
"When enabled, bot only responds in group "
|
|
"chats when explicitly @mentioned"
|
|
),
|
|
"ja-JP": (
|
|
"有効にすると、グループチャットでは" "明示的に@メンションされた場合のみ応答します"
|
|
),
|
|
"ru-RU": (
|
|
"Бот отвечает в групповых чатах только "
|
|
"при явном @упоминании"
|
|
),
|
|
"pt-BR": (
|
|
"Quando ativado, o bot só responde em "
|
|
"chats de grupo quando explicitamente "
|
|
"@mencionado"
|
|
),
|
|
"vi-VN": (
|
|
"Khi bật, bot chỉ trả lời trong nhóm chat "
|
|
"khi được @đề cập rõ ràng"
|
|
),
|
|
"id-ID": (
|
|
"Saat diaktifkan, bot hanya merespons di "
|
|
"chat grup saat secara eksplisit di-@sebut"
|
|
),
|
|
},
|
|
},
|
|
],
|
|
)
|
|
logger.info("✓ Azure Bot channel registered")
|
|
|
|
|
|
# Export plugin instance
|
|
plugin = AzureBotChannelPlugin()
|