跳到主要內容

Wechaty 對話式 RPA SDK:從零開始建構聊天機器人完整指南

為什麼需要聊天機器人?

在這個數位化時代,聊天機器人已經成為企業與客戶互動的重要工具。無論是客服自動回覆會議提醒群組管理,還是訊息轉發,聊天機器人都能大幅提升工作效率,讓重複性的工作自動化處理。

想像一下: 

- 🤖 自動客服:24小時回答常見問題,不用擔心客戶半夜找不到人 

- 📅 智能助理:自動提醒會議、生日、重要事項 

- 👥 群組管理:自動歡迎新成員、分享重要訊息、過濾垃圾訊息 

- 🔄 訊息轉發:將重要訊息自動轉發到相關群組或個人

什麼是 Wechaty?

Wechaty 是一個對話式 RPA (機器人流程自動化) SDK,專為聊天機器人開發者設計。它就像是聊天機器人界的「萬能翻譯機」,讓你寫一次程式碼,就能在多個平台上使用

Wechaty 的核心優勢:

  1. 跨平台支援:一套程式碼可以同時支援微信、WhatsApp、飛書等多個平台
  2. 多語言支援:支援 JavaScript、Python、Go、Java 等7種程式語言
  3. 開源免費:完全開源,有活躍的社群支持
  4. 簡單易學:最少只需要6行程式碼就能建立一個基礎機器人
  5. 功能強大:支援發送訊息、管理群組、處理好友請求等完整功能

適合誰使用?

  • 程式新手:想要學習機器人開發的初學者
  • 小企業主:需要自動化客服或群組管理
  • 開發者:想要快速建立聊天機器人原型
  • 創業團隊:需要低成本的自動化解決方案

建構步驟與模組

1. 環境準備(約需10分鐘)

在開始建構你的第一個聊天機器人之前,我們需要先準備好開發環境。別擔心,這些工具都是免費的!

安裝 Node.js

Node.js 是執行 JavaScript 程式的環境,就像手機需要作業系統一樣。

步驟: 1. 前往 Node.js 官網 2. 下載 LTS 版本(目前建議 v18 或更新版本) 3. 下載完成後,雙擊安裝檔案,按照指示完成安裝 4. 安裝完成後,開啟終端機(Windows 用戶請開啟「命令提示字元」) 5. 輸入 node --version 確認安裝成功

預期結果: 應該會顯示類似 v18.17.0 的版本號

檢查 npm

npm 是 Node.js 的套件管理工具,會隨著 Node.js 一起安裝,用來下載和管理程式庫。

  • 在終端機輸入 npm --version
  • 應該會顯示類似 9.6.7 的版本號
選擇性:安裝程式碼編輯器

雖然不是必需,但建議安裝一個好用的編輯器: - Visual Studio Code(推薦):免費、功能強大 - Sublime Text:輕量級選擇 - Atom:GitHub 開發的編輯器

2. 快速安裝 Wechaty(約需2分鐘)

現在讓我們安裝 Wechaty!這個過程很簡單:

建立專案資料夾
mkdir my-wechat-bot    # 建立專案資料夾
cd my-wechat-bot       # 進入資料夾
npm init -y            # 初始化 npm 專案
安裝 Wechaty
npm install wechaty

安裝過程中你會看到: - 下載進度條 - 各種套件名稱快速滾動 - 最終顯示「安裝完成」的訊息

如果遇到錯誤怎麼辦? - 網路問題:可以嘗試使用淘寶鏡像:npm install wechaty --registry=https://registry.npm.taobao.org - 權限問題:Windows 用戶可能需要以「系統管理員身分」執行命令提示字元 - 版本衝突:清除快取後重試:npm cache clean --force

3. 建立你的第一個機器人(約需15分鐘)

現在是最有趣的部分!讓我們建立一個會自動回覆的機器人。

建立基礎機器人檔案

在你的專案資料夾中建立一個新檔案:bot.js

// 匯入 Wechaty
import { WechatyBuilder } from 'wechaty'

// 建立機器人實例
const bot = WechatyBuilder.build({
  name: 'my-first-bot', // 給你的機器人取個名字
})

// 當需要掃描 QR Code 登入時
bot.on('scan', (qrcode, status) => {
  console.log('請用微信掃描以下網址的 QR Code 登入:')
  console.log(`https://wechaty.js.org/qrcode/${encodeURIComponent(qrcode)}`)
  console.log(`狀態: ${status}`)
})

// 當成功登入時
bot.on('login', (user) => {
  console.log(`🎉 機器人登入成功!歡迎 ${user.name()}`)
})

// 當收到訊息時
bot.on('message', async (message) => {
  console.log(`收到訊息: ${message.text()}`)
  
  // 忽略機器人自己發送的訊息
  if (message.self()) return
  
  // 簡單的自動回覆
  if (message.text() === '你好') {
    await message.say('你好!我是機器人助手 🤖')
  }
})

// 啟動機器人
bot.start()
  .then(() => console.log('🚀 機器人啟動成功!'))
  .catch(error => console.error('❌ 啟動失敗:', error))
進階範例:智能客服機器人

讓我們建立一個更實用的客服機器人 smart-bot.js

import { WechatyBuilder } from 'wechaty'

const bot = WechatyBuilder.build({ name: 'smart-customer-service' })

// 常見問題和回答
const faqDatabase = {
  '營業時間': '我們的營業時間是週一到週五 9:00-18:00',
  '聯絡方式': '客服電話:02-1234-5678\n客服信箱:service@example.com',
  '退貨政策': '商品到貨7天內可無條件退貨,請保持商品完整包裝',
  '運費': '單筆訂單滿1000元免運費,未滿則收取60元運費',
  '付款方式': '支援信用卡、ATM轉帳、貨到付款'
}

bot.on('scan', (qrcode, status) => {
  console.log('🔗 登入網址:https://wechaty.js.org/qrcode/' + encodeURIComponent(qrcode))
})

bot.on('login', (user) => {
  console.log(`✅ ${user.name()} 登入成功`)
})

bot.on('message', async (message) => {
  if (message.self()) return // 忽略自己的訊息
  
  const messageText = message.text()
  const contact = message.from()
  
  console.log(`📨 ${contact?.name()}: ${messageText}`)
  
  // 關鍵字匹配回覆
  for (const [keyword, answer] of Object.entries(faqDatabase)) {
    if (messageText.includes(keyword)) {
      await message.say(`📋 ${answer}`)
      return
    }
  }
  
  // 如果沒有匹配到關鍵字
  if (messageText === '幫助' || messageText === 'help') {
    const helpText = `🤖 我可以回答以下問題:\n\n${Object.keys(faqDatabase).map(key => `• ${key}`).join('\n')}\n\n請輸入關鍵字或直接詢問!`
    await message.say(helpText)
  } else if (messageText.length > 0) {
    await message.say('🤔 抱歉,我不太理解您的問題。請輸入「幫助」查看我能回答的問題清單。')
  }
})

// 處理群組訊息
bot.on('message', async (message) => {
  if (message.room() && message.mentionSelf()) {
    // 如果在群組中被 @ 到
    await message.say('👋 您好!我是群組助手,有什麼可以幫助您的嗎?')
  }
})

bot.start().then(() => console.log('🚀 智能客服機器人啟動!'))
運行你的機器人
  1. 執行基礎機器人

    node bot.js

  2. 執行智能客服機器人

    node smart-bot.js

登入流程
  1. 執行程式後,終端機會顯示一個網址
  2. 在瀏覽器中打開該網址,會看到 QR Code
  3. 用微信掃描 QR Code
  4. 在微信中確認登入
  5. 成功!你的機器人就上線了

💡 測試建議: - 先對機器人發送「你好」測試基本功能 - 對智能客服機器人發送「營業時間」、「幫助」等關鍵字 - 在群組中 @ 機器人測試群組功能

4. Wechaty 核心模組與 API

Wechaty 提供了一系列強大的類別和 API,以實現更複雜的機器人功能:

  • Wechaty 類別:這是主要的機器人類別,負責控制特定的 wechaty-puppet(協議提供者),並提供登入、登出、訊息接收等核心事件與方法。
  • Contact 類別:封裝了所有微信聯絡人(包括好友和非好友)。您可以用它來查詢聯絡人、同步資料、發送訊息,並獲取聯絡人的姓名、別名、性別、地區和頭像等資訊。ContactSelf 類別是 Contact 的延伸,專用於機器人本身的聯絡人資訊,如設定頭像或獲取自身的 QR Code。
  • Message 類別:封裝了所有微信消息。透過此類別,您可以獲取訊息的發送者 (from)、接收者 (to)、所在的群組 (room)、文字內容 (text),並可以回覆 (say) 或轉發 (forward) 訊息。
  • Room 類別:封裝了所有微信群組。您可以利用它來建立群組、查詢群組、發送訊息、管理群組成員(新增/刪除)、設定群組主題、以及獲取群組的 QR Code 供他人掃碼加入。RoomInvitation 類別則用於處理接受群組邀請的事件。
  • Friendship 類別:處理好友請求的發送、接收和確認事件。

5. 機器人部署:讓它 24 小時為你工作

當你的機器人測試成功後,就可以部署到伺服器上,讓它持續運行。以下是幾種部署方式的詳細說明:

總結

通過這份完整指南,你已經學會了:

  1. 🎯 理解 Wechaty 的核心概念:跨平台聊天機器人開發框架
  2. ⚙️ 建立開發環境:從 Node.js 安裝到 Wechaty 配置
  3. 🤖 編寫第一個機器人:基礎回覆到智能客服
  4. 🚀 部署到生產環境:從本地測試到雲端運行

現在,你已經具備了建立專業聊天機器人的所有技能!開始你的機器人開發之旅吧!

如果有什麼想法,還請多多分享,祝福大家開發順利!

留言

這個網誌中的熱門文章

Vibe Coding:到底?氛圍驅動程式開發必殺技?

Vibe Coding(氛圍編程) 是由 OpenAI 共同創辦人 Andrej Karpathy 在 2025 年提出的革命性程式開發方式,它讓開發者透過自然語言與 AI 對話來生成程式碼,徹底改變了傳統的編程模式。 這種開發方式的核心理念是 「順著感覺走」 ,讓 AI 處理技術細節,開發者專注於創意和需求描述。 Vibe Coding 需要基本上的規劃和執行,但並沒有強制規範,從日常經驗來說可分為三個階段, 前期準備、開發過程、和後期維護 三個關鍵階段。每個階段都有其特定的任務和注意事項,正確執行這些步驟將大幅提升開發效率和程式品質。 將靈感與需求透過 AI 快速轉化成產品功能或原型。以下幫你分成 「前、中、後」 三階段要做的事情,適合你自己做、或帶團隊做 前期:設定 vibe & 準備素材 這個階段的重點是 「建立開發語境」 ,因為 AI 的生成表現高度依賴前期提供的上下文與資料。 明確目標 :釐清要解決的問題、預期要做的功能與核心價值。例如在筆記軟體的情境中,可能是:「我要做一款讓使用者能用 Markdown 記錄筆記,並提供標籤與全文搜尋功能的簡單 App。」 收集靈感 :觀察同類產品(如 Obsidian、Notion)、蒐集市場痛點(例如太多筆記軟體無法脫機使用,或同步效能差)。 建立語境 :準備初步 prompt、背景知識、產品定位、品牌調性、目標使用者輪廓等。 確認資源 :決定用哪些工具(Gemini、ChatGPT、設計軟體、流程管理工具等)。 確認完上述內容之後,就可以先開始進行準備規格,進行第一次的 Vibe Coding 方向驗證 提示詞模板準備 很多人會跳過這步驟,但一份 「好的 AI 提示詞模板」 將決定接下來每一次 AI 對話的品質。有效的提示詞模板需具備: 描述具體且無歧義 包含技術要求和約束條件 提供範例資料和測試案例 指定程式碼風格和慣例 例如針對筆記軟體的案例:   「建立一個支援 AI 功能純文字筆記,輸入內容可即時渲染;需支援儲存到本地檔案,提供標籤欄位做分類;以 React 架構,程式風格採用 Tailwind style components 並使用 hooks。」 開發工具選擇 開發工具的選擇 同樣重要,目前市場上主要的 ...

Claude Code Hooks:自動化與安全的最佳實踐

寫在最前頭,這份文章主要寫起來是給自己看, 同時內容是比較適合開發者,工程師們可以做些自動化處理的簡單筆記。 Claude Code hooks Claude Code hooks 是一種強大的自動化機制,允許用戶在 Claude Code 的不同生命週期階段,自定義執行 shell 指令。這種設計讓開發者能夠將規則和自動化行為嵌入到應用層級,確保每次都能可靠執行,而不必依賴 LLM(大型語言模型)是否會選擇執行某項操作。 Hooks 的核心用途 通知 :自訂收到 Claude Code 等待用戶輸入或執行權限時的提醒方式。 自動格式化 :如在每次檔案編輯後自動執行 prettier (針對 .ts 檔)、 gofmt (針對 .go 檔)等。 日誌記錄 :追蹤所有執行過的命令,便於合規或除錯。 自動反饋 :當 Claude Code 產生不符合團隊規範的程式碼時,自動給出反饋。 自訂權限 :阻擋對生產環境檔案或敏感目錄的修改[^1]。 配置與結構 Hooks 透過設定檔進行配置,分為全域( ~/.claude/settings.json )、專案( .claude/settings.json )、本地專案( .claude/settings.local.json )以及企業級策略設定。每個 hook 由「事件名稱」和「匹配器」組成: "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "jq -r '...'" } ] } ] } matcher :用於匹配工具名稱(支援正則表達式),如 Write 、 Edit|Write 、 Notebook.* 。 hooks :當匹配時要執行的命令陣列。 type :目前僅支援 "command" 。 ...

[CSS] z-index 在不同瀏覽器繼承問題

今天會討論到這個課題,是因為要實做一個Popup dialog,所以我們希望的結果如下圖。 可是在IE7 卻發生了這樣的情況。 Popup不論怎麼設定z-index都無法浮在最上層,我們看一下html架構發生什麼事情。