一個整合了 AWS Bedrock 的 Telegram 聊天機器人,透過 bedrock-chat API 提供智能對話功能。
- 智能對話: 使用Bedrock提供高質量的 AI 回應
- 即時回應: 優化的輪詢機制,AI 完成回應後立即發送
- 用戶授權: 支持指定用戶授權使用
- 打字指示器: 處理過程中顯示打字狀態
- 錯誤處理: 完善的錯誤處理和日誌記錄
- 簡潔配置: 僅保留必要配置,易於部署和維護
- Python 3.8+
- AWS 帳號(用於部署 bedrock-chat API)
- Telegram 帳號(用於創建機器人)
graph TB
subgraph "用戶端"
U[Telegram 用戶]
end
subgraph "Telegram 平台"
TB[Telegram Bot]
TBA[Telegram Bot API]
end
subgraph "本地/伺服器環境"
APP[ Python Bot 應用程式<br/>main.py]
CONFIG[ 環境配置<br/>.env]
end
subgraph "AWS 雲端服務"
subgraph "bedrock-chat API"
APIGW[API Gateway]
LAMBDA[Lambda Function]
BEDROCK[Amazon Bedrock]
end
subgraph "其他 AWS 服務"
LOGS[CloudWatch Logs]
IAM[IAM Roles]
end
end
%% 用戶互動流程
U -->|1. 發送訊息| TB
TB -->|2. Webhook/Polling| TBA
TBA -->|3. 接收訊息| APP
%% 授權檢查
APP -->|4. 檢查用戶授權| CONFIG
%% API 呼叫流程
APP -->|5. HTTP POST /chat| APIGW
APIGW -->|6. 觸發| LAMBDA
LAMBDA -->|7. 呼叫 AI 模型| BEDROCK
BEDROCK -->|8. AI 回應| LAMBDA
LAMBDA -->|9. 回傳結果| APIGW
APIGW -->|10. JSON 回應| APP
%% 回應用戶
APP -->|11. 格式化回應| TBA
TBA -->|12. 發送回應| TB
TB -->|13. 顯示回應| U
%% 日誌記錄
APP -.->|記錄日誌| LOGS
LAMBDA -.->|記錄日誌| LOGS
%% 權限管理
LAMBDA -.->|使用角色| IAM
%% 樣式設定
classDef userClass fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef telegramClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef appClass fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef awsClass fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
classDef aiClass fill:#fff8e1,stroke:#f57f17,stroke-width:3px
class U userClass
class TB,TBA telegramClass
class APP,CONFIG appClass
class APIGW,LAMBDA,LOGS,IAM awsClass
class BEDROCK aiClass
-
用戶互動層
- 用戶透過 Telegram 應用程式與機器人對話
- 支援文字訊息的雙向溝通
-
機器人應用層
- Python 應用程式處理 Telegram Bot API 的訊息
- 實作用戶授權、訊息處理和錯誤處理
- 透過環境變數進行配置管理
-
AWS 服務層
- API Gateway: 提供 RESTful API 端點
- Lambda: 處理聊天請求的無伺服器運算
- Bedrock: 提供 Claude 3.5 Haiku AI 模型服務
- CloudWatch: 記錄和監控系統運行狀態
-
資料流程
- 用戶訊息 → Telegram → Bot 應用程式 → AWS API → AI 模型 → 回應用戶
- 完整的請求-回應週期,包含授權驗證和錯誤處理
在開始之前,你需要先部署 bedrock-chat API 服務。
git clone https://github.com/aws-samples/bedrock-chat.git
cd bedrock-chat按照 bedrock-chat 專案的 README 指示進行部署:
-
安裝 AWS CDK(如果尚未安裝):
npm install -g aws-cdk
-
配置 AWS 認證:
aws configure
輸入你的 AWS Access Key ID、Secret Access Key 和預設區域。
-
部署 CDK Stack:
# 安裝依賴 npm install # 首次部署需要 bootstrap cdk bootstrap # 部署 cdk deploy
-
記錄 API 端點: 部署完成後,CDK 會輸出 API Gateway 的端點 URL,類似:
✅ BedrockChatStack Outputs: BedrockChatStack.ApiEndpoint = https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/prod重要: 請記錄這個 URL,稍後會用到。
curl -X POST https://your-api-endpoint.execute-api.us-east-1.amazonaws.com/prod/chat \
-H "Content-Type: application/json" \
-d '{"message": "Hello, how are you?"}'如果回應正常,表示 API 部署成功。
- 在 Telegram 中搜尋並開啟 @BotFather
- 發送
/start開始對話
-
發送
/newbot命令 -
BotFather 會要求你提供機器人名稱:
Alright, a new bot. How are we going to call it? Please choose a name for your bot.輸入你想要的機器人顯示名稱,例如:
My Bedrock Chat Bot -
接著要求提供用戶名(必須以
bot結尾):Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.輸入用戶名,例如:
my_bedrock_chat_bot
創建成功後,BotFather 會提供你的 Bot Token:
Done! Congratulations on your new bot. You will find it at t.me/my_bedrock_chat_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
Keep your token secure and store it safely, it can be used by anyone to control your bot.
重要: 請安全保存這個 Token,不要分享給他人。
為了設定授權用戶,你需要獲取 Telegram 用戶 ID。
-
在 Telegram 中搜尋並開啟 @getidsbot
-
發送
/start或任意訊息 -
機器人會回覆你的用戶資訊:
🆔 Your ID: 123456789 👤 First Name: John 👤 Username: @john_doe 🌐 Language: en -
記錄你的用戶 ID(例如:
123456789)
如果你想授權其他用戶使用機器人:
- 請他們也與 @getidsbot 對話
- 獲取他們的用戶 ID
- 將所有授權用戶的 ID 記錄下來
git clone https://github.com/hoycdanny/amazon-bedrock-chat-telegram.git
cd amazon-bedrock-chat-telegram# 建議使用虛擬環境
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows
# 安裝依賴
pip install -r requirements.txt-
複製環境變數範例:
cp .env.example .env
-
編輯
.env文件:nano .env # 或使用你喜歡的編輯器 -
填入實際配置:
# Telegram Bot Configuration TELEGRAM_BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz # bedrock-chat API Configuration BEDROCK_CHAT_API_URL=https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/prod BEDROCK_CHAT_API_TOKEN= BEDROCK_CHAT_TIMEOUT=30 # Security Configuration (用逗號分隔多個用戶 ID) AUTHORIZED_USERS=123456789,987654321 # System Configuration LOG_LEVEL=INFO
配置說明:
TELEGRAM_BOT_TOKEN: 從 BotFather 獲得的 TokenBEDROCK_CHAT_API_URL: 從 CDK 部署輸出獲得的 API 端點BEDROCK_CHAT_API_TOKEN: 通常留空(除非你的 API 需要額外認證)AUTHORIZED_USERS: 從 @getidsbot 獲得的用戶 ID 列表
python main.py成功啟動會看到:
🚀 Telegram Bot 正在啟動 (Polling 模式)...
🤖 Bot 用戶名: @my_bedrock_chat_bot
📱 現在可以在 Telegram 中發送訊息測試了!
⏹️ 按 Ctrl+C 停止 bot
- 在 Telegram 中搜尋你的機器人(例如:
@my_bedrock_chat_bot) - 發送
/start開始對話 - 發送任意訊息測試 AI 回應功能
- 使用授權用戶帳號測試:應該能正常對話
- 使用未授權帳號測試:應該收到權限拒絕訊息
/start- 開始使用機器人/help- 顯示幫助訊息/status- 檢查服務狀態
直接發送任何文字訊息給機器人,它會透過 AWS Bedrock Chat API 來回應你的問題。
- 開始對話: 在 Telegram 中找到你的機器人並發送
/start - 發送訊息: 直接輸入你想問的問題或想聊的內容
- 等待回應: 機器人會顯示「正在輸入...」狀態,然後回傳 AI 生成的回應
- 繼續對話: 可以持續對話,每次都會獲得智能回應
| 變數名 | 必填 | 說明 | 範例 | 獲取方式 |
|---|---|---|---|---|
TELEGRAM_BOT_TOKEN |
✅ | Telegram Bot 的認證 Token | 1234567890:ABCdefGHIjklMNOpqrsTUVwxyz |
從 @BotFather 創建機器人時獲得 |
BEDROCK_CHAT_API_URL |
✅ | Bedrock Chat API 的端點 URL | https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/prod |
從 bedrock-chat CDK 部署輸出獲得 |
BEDROCK_CHAT_API_TOKEN |
✅ | API 認證 Token | your-api-token |
填入Publish API Token |
BEDROCK_CHAT_TIMEOUT |
❌ | API 請求超時時間(秒) | 30 |
根據需要調整,預設 30 秒 |
AUTHORIZED_USERS |
✅ | 授權用戶 ID 列表 | 123456789 |
從 @getidsbot 獲得用戶 ID |
LOG_LEVEL |
❌ | 日誌級別 | INFO |
可選:DEBUG, INFO, WARNING, ERROR |
- 如果
AUTHORIZED_USERS為空,所有用戶都可以使用 - 如果設定了用戶 ID,只有列表中的用戶可以使用機器人
- 多個用戶 ID 用逗號分隔,不要有空格
amazon-bedrock-chat-telegram/
├── main.py # 主程式入口
├── requirements.txt # Python 依賴
├── .env.example # 環境變數範例
├── .gitignore # Git 忽略文件
├── README.md # 專案說明
└── telegram_bot/ # 機器人模組
├── __init__.py
├── config/ # 配置管理
│ ├── __init__.py
│ └── settings.py # 設定類別
└── services/ # 服務層
├── __init__.py
└── bedrock_service.py # Bedrock API 服務
- 創建虛擬環境:
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows- 安裝開發依賴:
pip install -r requirements.txt- 運行測試:
python main.py機器人會輸出詳細的運行日誌,包括:
- 用戶訊息接收
- API 請求狀態
- 回應處理時間
- 錯誤訊息