跳到主要內容

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:為什麼 Junior 更快上手?Senior 要如何追趕?

現象層面(市場觀察) 最近有篇文章討論 junior & senior 開發者在 AI 時代的角色轉變,非常熱門。 身為 Cympack 產品開發團隊 ,我們也一直關注這個議題,在閱讀這篇文章時觀察到一些有趣的現象,對我們來說,這正好反映出 AI 正在改變開發生態,junior 借力 AI 快速成長、senior 則需要在 「架構思維」 與 「多 agent 協作」 中找到新定位,其中有些啟發(insight) 可以跟大家分享。 為什麼 Junior 更容易上手 vibe coding? 心智負擔低 → Junior 沒有太多傳統 code workflow 的框架包袱 敢於嘗鮮 → Gen Z / 年輕工程師天生習慣用 prompt-based 工具、跟 LLM 互動 少「優雅程式設計」的束縛 → 不太糾結「這樣寫會不會不夠優雅」,反而 embrace 快速迭代、快速出成果 反觀 Senior: 熟悉大型系統設計 有豐富的「工程正統流程」知識(架構設計、測試策略、效能優化、設計模式) 對 AI 生成 code 的品質 / 維護性通常比較保留 部分 10+ 年資深工程師,對 prompt engineering 沒那麼熟練,還在觀望 技能面(未來的關鍵能力) Vibe coding 本質上 = prompt engineering + AI co-pilot 管理能力 能力項目 誰目前比較有優勢? Prompt 撰寫 / AI 互動 Junior 較強(熟悉 chat-based 流程) 系統設計 / 架構把關 Senior 較強 AI 生成 code 驗證 / Bug 察覺能力 Senior 較強(能看出潛在問題) 快速疊代 / Hackathon 式開發 Junior 較強 長期維護性 / 穩定性 Senior 較強 總結 Junior 確實更快適應 vibe coding,並且更習慣以 「chat-based coding」 的工作流開發。 Senior 擁有驗證 AI 產物與系統設計的深度能力,但若不主動練習 vibe coding,長期會逐漸落後於新一波開發潮流。 就如同在 GAI 技術年會分享,希望帶給各位的感受, 『與 AI 協...

Vibe Coding 協作到自建 Dev Agent?從 Claude / Codex 到 OpenHands

過去一年,越來越多工程師開始 把 AI 真正帶進工作流程 。從一開始用 ChatGPT、Claude 來問語法問題,到後來很多人愛上 Cursor,直接在編輯器裡讓 AI 幫忙改 code、補 test case、甚至自動整理 PR。這樣的開發體驗,已經大大改變了我們寫程式的方式。 更現實的是,在很多企業內部、政府單位、或涉及機密資料的專案裡, 其實根本不能直接用 Cursor 或雲端 LLM 工具。   畢竟這些服務通常會把資料傳到雲端模型做處理,萬一專案裡有未公開的技術、敏感客戶資料,或是受限於法規 (像金融、醫療、政府標案) ,直接用雲端 AI 工具就會踩 紅線 。  因此,許多團隊反而更希望 「自己架一套 Dev Agent」 ,可以在內網執行,資料完全掌握在自己手上,該整合的內部工具、該讀的私有 repo、該串的 CI/CD pipeline,全部客製化、安全可控。 這時候,像 OpenHands 這樣的開源 Dev Agent 框架就特別有價值。它的出發點不是單純的 AI 助手,而是讓你能夠打造出一個真的可以跑在自己環境裡、可以理解整個開發流程的 AI 工程師。從建置到部署,從 CLI 操作到瀏覽器查詢, 從多檔案編輯到自動測試,全部都能自己完成,甚至還能針對不同專案調整專屬的工作流。 對很多開始探索 AI 協作開發的團隊來說,這是一條 從 「AI 幫你寫一段程式」,走向「AI 幫你解決一整個任務」 的進化路徑。而且,還是在可控、可自定義、安全的環境裡完成的。 🧩 主要概述 OpenHands 是由 All‑Hands AI 開發的開源「軟體開發代理人平台」,能模仿人類工程師從建立程式、修改程式碼、執行指令,到瀏覽網頁、呼叫 API……等一整套開發流程 它提供雲端(OpenHands Cloud)與本地 Docker 運行版本,用戶能配置 LLM(如 Claude、OpenAI、Gemini…) 📚 核心特性與怎麼使用 代理人的工具能力 支援代碼編輯、命令行、執行環境、網頁瀏覽、API 呼叫—接近人類開發者完整技能。其中 OpenHands Cloud 版本提供 $50 試用額度讓大家方便使用,又或者如果自己本機有 docker 的話,可以自己Local 版本透過 Docker 自架環境。 ...

RAG 和 Prompt 原理超簡單解說!想知道 AI 怎麼找答案看這篇

這篇文章是給對於你已經開始使用所謂的 ChatGPT / Claude / Gemini 之類的 AI 服務,甚至是 Siri (嘿丟,他也是一種 AI 應用服務喔) 簡單來說是非 技術人員, PM,小白,想要趕快惡補的人 ,直接花十分鐘可以看完的一篇科普業配文章。 或者是概念僅止於,AI 這東西會幻想,會有誤差,會對於生活有些幫助但沒有幫助的人們,做個簡單又不是太簡單的介紹,希望用一個非常入門的方式讓你們有個了解。 當然,這篇文章目的很簡單, 就是引流 ,如果你身邊有已經對於 Web 技術開發的人員,歡迎報名分享給他,年末出國不如學一技在身,參加今年我們舉辦最後一場 RAG 實作工作坊,報名連結 , https://exma.kktix.cc/events/ai-for-dev-course-rag-2 注意: 接下來每個大段落結束都會有一段工商導入,但文章絕對精彩,請注意! 為了讓各位容易想像,我們將整個世界的資訊,先濃縮到這本『西遊記』的世界觀當中,我們整個世界都在這個 『西遊記』 ,而 大型語言模型 我們用 『書精靈』 來描述。 PS. 我們先預設各位,應該都有聽過,西遊記!如果沒有聽過西遊記的,請右轉出去,謝謝! 先來談談向量 在《西遊記》的世界裡,我們可以把 向量想像成一種「內容座標」 ,讓系統知道每個角色、場景、法術等的 「位置」和「距離」 。向量幫助語言模型知道不同內容之間的關聯程度。 向量就像內容的「距離」和「位置」 比方說,唐三藏的 「位置」(向量)會接近「佛經」和「取經」 的概念,因為他一路上都是為了取經而前進。孫悟空的 向量位置則會更靠近「金箍棒」和「七十二變」 這些概念,因為這些是他的特徵。 相似內容靠得更近:像「佛經」和「取經」會靠近唐三藏的向量,因為它們彼此有很強的關聯。 相差較大內容會離得較遠:像「取經」和「妖怪」「妖怪的寶藏」就距離比較遠,因為妖怪的寶藏和取經的目標關聯性不大。 是誰決定的這些位置? 簡單來說,這些位置和關係是模型自己學出來的。語言模型會閱讀大量的資料和這世界觀的資訊,觀察哪些詞語經常一起出現,根據「共同出現的頻率」來決定它們的關係,並且自動生成向量。例如: 如果模型看到 「唐三藏」 總是和 「取經」 一起出現,它就會讓「唐三藏」的向量靠近「取經」。 ...