deepseek-slack-teams-automated-ticket-flow
在節奏快速的現代企業環境中,員工日常透過 Slack 或 Microsoft Teams 提交的支援請求、故障報告或功能建議,往往需要經過人工審閱、分類和指派,才能轉化為正式的工單。這個手動過程不僅耗時、易出錯,更可能延誤關鍵問題的解決。藉助 DeepSeek 強大的自然語言處理能力,企業能夠將此流程徹底自動化,從根本上提升營運效率與員工滿意度。
本指南將帶領您一步步實現在企業通訊平台(Slack 或 Teams)上,透過 DeepSeek API 自動識別訊息意圖、生成摘要、判斷優先級,並將其無縫流轉至現有工單系統的全自動化工作流程。
傳統的工單處理流程通常涉及以下挑戰:
DeepSeek 的語言模型,如 deepseek-chat,透過其卓越的理解、歸納和生成能力,為解決這些痛點提供了強大的工具。它可以實時分析來自 Slack 或 Teams 的非結構化文本,自動完成意圖識別、信息提取、摘要生成等任務,將其轉化為結構化的數據,為後續的自動化工單流轉奠定基礎。
實現全自動工單流轉,主要需要以下三部分技術協同工作:
本文將以自訂後端服務(Python)配合 webhook 為例,演示其運作原理。
首先,您需要獲取 DeepSeek API 存取權限並了解如何調用其服務。
前往 chat.deepseek.com 註冊並登入,然後導航至您的 API 儀表板以獲取 API 金鑰。請妥善保管此金鑰,切勿直接暴露在客戶端代碼中。
對於工單流轉場景,建議使用 deepseek-chat 或更強大的模型,以確保對複雜語義的理解能力。
DeepSeek API 遵循標準的 RESTful 規範,您可以透過 POST 請求發送內容並接收 JSON 格式的回應。
範例:使用 Python 調用 DeepSeek API 進行文本分析
import os
import requests
import json
DEEPSEEK_API_KEY = os.environ.get("DEEPSEEK_API_KEY") # 建議從環境變數讀取
DEEPSEEK_API_URL = "https://api.deepseek.com/chat/completions" # 根據實際情況調整
def analyze_message_with_deepseek(message_text):
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {DEEPSEEK_API_KEY}"
}
# 設計清晰的 System Prompt 來引導 DeepSeek 執行任務
system_prompt = """
你是一位企業工單自動化助理。請根據用戶提供的訊息,執行以下任務:
1. 識別訊息的「意圖」(Intent),例如:支援請求、Bug 報告、功能建議、資訊查詢、其他。
2. 提取關鍵「摘要」(Summary),精簡描述問題的核心。
3. 判斷「優先級」(Priority),分為:高 (High)、中 (Medium)、低 (Low)。
4. 建議「處理組別」(AssignedGroup),例如:IT、HR、產品、銷售、財務。
請以 JSON 格式輸出,例如:
{
"intent": "支援請求",
"summary": "無法連接公司VPN",
"priority": "高",
"assigned_group": "IT"
}
如果無法明確判斷,請將對應欄位設為「未知」。
"""
data = {
"model": "deepseek-chat", # 或其他更適合的模型
"messages": [
{"role": "system", "content": system_prompt},
{"role": "user", "content": message_text}
],
"temperature": 0.3, # 較低的溫度值有助於生成更穩定、精確的結果
"max_tokens": 500
}
try:
response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data)
response.raise_for_status() # 對於非 2xx 響應拋出異常
result = response.json()
if result and result.get("choices"):
content = result["choices"][0]["message"]["content"]
try:
# DeepSeek 返回的內容應該是 JSON 格式
return json.loads(content)
except json.JSONDecodeError:
print(f"DeepSeek 返回的內容不是有效的 JSON: {content}")
return {"error": "Invalid JSON response from DeepSeek"}
else:
return {"error": "No valid response from DeepSeek"}
except requests.exceptions.RequestException as e:
print(f"DeepSeek API 請求失敗: {e}")
return {"error": f"API request failed: {e}"}
# 示例調用
# message = "我的 Outlook 突然打不開了,顯示錯誤碼 0x80040115,急需解決!"
# analysis = analyze_message_with_deepseek(message)
# print(analysis)
這段代碼展示了如何向 DeepSeek API 發送請求,並透過精心設計的 system_prompt 來引導模型按照預期的 JSON 格式輸出結構化數據。
要捕獲 Slack 或 Teams 中的訊息,您需要設定一個應用程序或連接器,將相關事件發送到您的自動化中介層。
chat:write, channels:read, channels:history, groups:read, im:read, mpim:read。xoxb-YOUR-TOKEN)。message.channels, message.groups, app_mention 等事件,以便監聽新訊息或提及。對於 Microsoft Teams,有幾種方法可以實現:
Webhook 端點範例 (Python Flask 框架)
這是一個簡單的 Flask 服務,用於接收 Slack 或 Teams 的 webhook 請求。
from flask import Flask, request, jsonify
import os
import hashlib
import hmac
import time
import json
app = Flask(__name__)
SLACK_SIGNING_SECRET = os.environ.get("SLACK_SIGNING_SECRET")
# 假設您有一個 function 來處理 DeepSeek 分析並與工單系統集成
from your_deepseek_integration_module import analyze_message_with_deepseek, create_ticket_in_system, send_slack_message
@app.route("/slack/events", methods=["POST"])
def slack_events():
# 驗證 Slack 請求
timestamp = request.headers.get("X-Slack-Request-Timestamp")
if abs(time.time() - int(timestamp)) > 60 * 5: # 請求過期
return "Request expired", 400
req_body = request.get_data().decode('utf-8')
sig_basestring = f"v0:{timestamp}:{req_body}"
my_signature = 'v0=' + hmac.new(
SLACK_SIGNING_SECRET.encode('utf-8'),
sig_basestring.encode('utf-8'),
hashlib.sha256
).hexdigest()
slack_signature = request.headers.get("X-Slack-Signature")
if not hmac.compare_digest(my_signature, slack_signature):
return "Invalid signature", 403
event_data = request.json
# 處理 Slack URL 驗證
if event_data.get("type") == "url_verification":
return jsonify({"challenge": event_data.get("challenge")})
event = event_data.get("event")
if event and event.get("type") == "message" and not event.get("subtype"):
channel_id = event.get("channel")
user_id = event.get("user")
message_text = event.get("text")
if message_text and not user_id == "USLACKBOT": # 避免處理來自 bot 自己的訊息
print(f"Received message from Slack: {message_text}")
# 非同步處理 DeepSeek 分析和工單創建
# 實際應用中,您會將此任務放入背景工作佇列(如 Celery)
process_slack_message_async(channel_id, user_id, message_text)
return "", 200 # 立即響應 Slack,避免超時
def process_slack_message_async(channel_id, user_id, message_text):
# 在實際應用中,這會是一個獨立的背景任務
print(f"Processing message in background: {message_text}")
deepseek_analysis = analyze_message_with_deepseek(message_text)
if deepseek_analysis and not deepseek_analysis.get("error"):
# 假設工單系統 API 接口
ticket_id = create_ticket_in_system(
deepseek_analysis["intent"],
deepseek_analysis["summary"],
deepseek_analysis["priority"],
deepseek_analysis["assigned_group"],
original_reporter=user_id,
original_message=message_text
)
if ticket_id:
response_message = f"<@{user_id}> 已收到您的請求:\n" \
f"**意圖:** {deepseek_analysis['intent']}\n" \
f"**摘要:** {deepseek_analysis['summary']}\n" \
f"**優先級:** {deepseek_analysis['priority']}\n" \
f"**處理組別:** {deepseek_analysis['assigned_group']}\n" \
f"工單號碼:`{ticket_id}` 已成功建立,相關團隊將會盡快處理,謝謝!"
send_slack_message(channel_id, response_message)
else:
send_slack_message(channel_id, f"<@{user_id}> 抱歉,工單系統創建失敗,請稍後再試或直接聯繫支援團隊。")
else:
send_slack_message(channel_id, f"<@{user_id}> 抱歉,DeepSeek 分析請求失敗或未能理解您的意圖,請提供更多細節或直接聯繫支援團隊。")
# 這裡需要定義這些假想的函數,實際會調用 Slack API 和您的工單系統 API
def create_ticket_in_system(intent, summary, priority, assigned_group, original_reporter, original_message):
print(f"Creating ticket in system: Intent={intent}, Summary={summary}, Priority={priority}, Group={assigned_group}, Reporter={original_reporter}")
# 這裡將調用您的工單系統 (Jira, Zendesk, ServiceNow 等) API
# 假設成功並返回一個工單號碼
import uuid
return f"DSK-{uuid.uuid4().hex[:8].upper()}"
def send_slack_message(channel, text):
# 這裡將調用 Slack Web API (chat.postMessage)
# 使用您的 Bot User OAuth Token
SLACK_BOT_TOKEN = os.environ.get("SLACK_BOT_TOKEN")
slack_api_url = "https://slack.com/api/chat.postMessage"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {SLACK_BOT_TOKEN}"
}
data = {
"channel": channel,
"text": text
}
response = requests.post(slack_api_url, headers=headers, json=data)
if not response.ok:
print(f"Failed to send Slack message: {response.text}")
if __name__ == "__main__":
# 在生產環境中請使用 WSGI 伺服器,如 Gunicorn
app.run(port=5000, debug=True)
自動化流程的核心在於將 DeepSeek 的分析結果與您的工單系統無縫對接。
analyze_message_with_deepseek 函數,將訊息內容發送給 DeepSeek API 進行分析。DeepSeek 將返回結構化的意圖、摘要、優先級和建議處理組別。假設一位員工在公司 Slack 的 #it-helpdesk 頻道發送了一條訊息:
@IT Helpdesk 我的網路連線突然斷了,完全上不了網,很緊急!請快點幫我解決。
自動化流程:
Slack 觸發: Slack 將此訊息作為事件,透過 webhook 發送至您的 Flask 服務。
DeepSeek 分析: Flask 服務將訊息文本 "我的網路連線突然斷了,完全上不了網,很緊急!請快點幫我解決。" 發送給 DeepSeek API。
DeepSeek 可能返回如下 JSON:
{
"intent": "支援請求",
"summary": "用戶網路連線中斷,無法上網",
"priority": "高",
"assigned_group": "IT"
}
工單創建: 您的服務將此結構化數據傳遞給 Jira API。Jira 自動創建一個標題為「網路連線中斷,無法上網」的工單,類型為「支援請求」,優先級為「高」,並指派給「IT 部門」。
Slack 回覆: 您的服務將透過 Slack API 在 #it-helpdesk 頻道中回覆:
@員工姓名 已收到您的請求:
**意圖:** 支援請求
**摘要:** 用戶網路連線中斷,無法上網
**優先級:** 高
**處理組別:** IT
工單號碼:`DSK-ADF8E5B6` 已成功建立,IT 團隊將會盡快處理,謝謝!
透過這套機制,員工的問題可以在數秒內被分析、分類並建立工單,大幅縮短了響應時間,並確保了工單流轉的準確性。
200 OK),然後將複雜的 DeepSeek 分析和工單創建任務放入背景工作佇列(如 Celery, RabbitMQ)中非同步處理,以避免超時。system_prompt。根據實際業務場景和 DeepSeek 的表現,持續迭代和優化提示詞,以獲得更精準的分析結果。您可以提供更多範例、定義模糊情況的處理方式。DeepSeek 與企業通訊平台的整合,為香港乃至全球的企業提供了一個革新的工單自動化解決方案。透過精確的自然語言理解和智能流轉,企業不僅能顯著提升 IT 支援、HR 諮詢等服務的響應速度和處理效率,更能讓寶貴的人力資源從重複性工作中解放出來,專注於更有價值的策略性任務。這不僅是技術的升級,更是企業營運模式的一次深刻轉型。