歡迎光臨
每天分享高質量文章

Python 的 ChatOps 庫:Opsdroid 和 Errbot | Linux 中國

學習一下 Python 世界里最廣泛使用的 ChatOps 庫:每個都能做什麼,如何使用。

— Jeff Triplett, Lacey Williams Henschel

 

ChatOps 是基於會話導向而進行的開發。其思路是你可以編寫能夠對聊天視窗中的某些輸入進行回覆的可執行代碼。作為一個開發者,你能夠用 ChatOps 從 Slack 合併拉取請求,自動從收到的 Facebook 訊息中給某人分配支持工單,或者通過 IRC 檢查開髮狀態。

在 Python 世界,最為廣泛使用的 ChatOps 庫是 Opsdroid 和 Errbot。在這個月的 Python 專欄,讓我們一起聊聊使用它們是怎樣的體驗,它們各自適用於什麼方面以及如何著手使用它們。

Opsdroid

Opsdroid[1] 是一個相對年輕的(始於 2016)Python 開源聊天機器人庫。它有著良好的開發文件,不錯的教程,並且包含能夠幫助你對接流行的聊天服務的插件。

它內置了什麼

庫本身並沒有自帶所有你需要上手的東西,但這是故意的。輕量級的框架鼓勵你去運用它現有的連接器(Opsdroid 所謂的幫你接入聊天服務的插件)或者去編寫你自己的,但是它並不會因自帶你所不需要的連接器而自貶身價。你可以輕鬆使用現有的 Opsdroid 連接器來接入:

◈ 命令列
◈ Cisco Spark
◈ Facebook
◈ GitHub
◈ Matrix
◈ Slack
◈ Telegram
◈ Twitter
◈ Websocket

Opsdroid 會呼叫使聊天機器人能夠展現它們的“技能”的函式。這些技能其實是異步 Python 函式,並使用 Opsdroid 叫做“匹配器”的匹配裝飾器。你可以設置你的 Opsdroid 專案,來使用同樣從你設置檔案所在的代碼中的“技能”。你也可以從外面的公共或私人倉庫呼叫這些“技能”。

你同樣可以啟用一些現存的 Opsdroid “技能”,包括 seen[2] —— 它會告訴你聊天機器人上次是什麼時候看到某個用戶的,以及 weather[3] —— 會將天氣報告給用戶。

最後,Opdroid 允許你使用現存的資料庫模塊設置資料庫。現在 Opdroid 支持的資料庫包括:

◈ Mongo
◈ Redis
◈ SQLite

你可以在你的 Opdroid 專案中的 configuration.yaml 檔案設置資料庫、技能和連接器。

Opsdroid 的優勢

Docker 支持:從一開始 Opsdroid 就打算在 Docker 中良好運行。在 Docker 中的指導是它 安裝文件[4] 中的一部分。使用 Opsdroid 和 Docker Compose 也很簡單:將 Opsdroid 設置成一種服務,當你運行 docker-compose up 時,你的 Opsdroid 服務將會開啟你的聊天機器人也將就緒。

  1. version: "3"
  2. services:
  3. opsdroid:
  4. container_name: opsdroid
  5. build:
  6. context: .
  7. dockerfile: Dockerfile

豐富的連接器: Opsdroid 支持九種像 Slack 和 Github 等從外部接入的服務連接器。你所要做的一切就是在你的設置檔案中啟用那些連接器,然後把必須的口令或者 API 密匙傳過去。比如為了啟用 Opsdroid 以在一個叫做 #updates 的 Slack 頻道發帖,你需要將以下代碼加入你設置檔案的 connectors 部分:

  1. - name: slack
  2.     api-token: "this-is-my-token"
  3.     default-room: "#updates"

在設置 Opsdroid 以接入 Slack 之前你需要添加一個機器人用戶[5]

如果你需要接入一個 Opsdroid 不支持的服務,在文件[6]里有有添加你自己的連接器的教程。

相當不錯的文件: 特別是對於一個在積極開發中的新興庫來說,Opsdroid 的文件十分有幫助。這些文件包括一篇帶你創建幾個不同的基本技能的教程[7]。Opsdroid 在技能[8]連接器[6]資料庫[9],以及匹配器[10]方面的文件也十分清晰。

它所支持的技能和連接器的倉庫為它的技能提供了富有幫助的示範代碼。

自然語言處理: Opsdroid 的技能裡面能使用正則運算式,但也同樣提供了幾個包括 Dialogflow[11]luis.ai[12]Recast.AI[13] 以及 wit.ai[14] 的 NLP API。

Opsdroid 可能的不足

Opsdroid 對它的一部分連接器還沒有啟用全部的特性。比如說,Slack API 允許你向你的訊息添加顏色柱、圖片以及其他的“附件”。Opsdroid Slack 連接器並沒有啟用“附件”特性,所以如果那些特性對你來說很重要的話,你需要編寫一個自定義的 Slack 連接器。如果連接器缺少一個你需要的特性,Opsdroid 將歡迎你的貢獻[15]。文件中可以使用更多的例子,特別是對於預料到的使用場景。

示例用法

  1. from opsdroid.matchers import match_regex
  2. import random
  3. @match_regex(r'hi|hello|hey|hallo')
  4. async def hello(opsdroid, config, message):
  5. text = random.choice(["Hi {}", "Hello {}", "Hey {}"]).format(message.user)
  6. await message.respond(text)

hello/__init__.py

  1. connectors:
  2. - name: websocket
  3. skills:
  4. - name: hello
  5. repo: "https://github.com//hello-skill"

configuration.yaml

Errbot

Errbot[16] 是一個功能齊全的開源聊天機器人。Errbot 發行於 2012 年,並且擁有人們從一個成熟的專案能期待的一切,包括良好的文件、優秀的教程以及許多幫你連入現有的流行聊天服務的插件。

它內置了什麼

不像採用了較輕量級方式的 Opsdroid,Errbot 自帶了你需要可靠地創建一個自定義機器人的一切東西。

Errbot 包括了對於本地 XMPP、IRC、Slack、Hipchat 以及 Telegram 服務的支持。它通過社區支持的後端列出了另外十種服務。

Errbot 的優勢

良好的文件: Errbot 的文件成熟易讀。

動態插件架構: Errbot 允許你通過和聊天機器人交談安全地安裝、卸載、更新、啟用以及禁用插件。這使得開發和添加特性十分簡便。感謝 Errbot 的顆粒性授權系統,出於安全意識這所有的一切都可以被鎖閉。

當某個人輸入 !help,Errbot 使用你的插件的文件字串來為可獲取的命令生成文件,這使得瞭解每行命令的作用更加簡便。

內置的管理和安全特性: Errbot 允許你限制擁有管理員權限的用戶串列,甚至細粒度訪問控制。比如說你可以限制特定用戶或聊天房間訪問特定命令。

額外的插件框架: Errbot 支持鉤子、回呼、子命令、webhook、輪詢以及其它更多特性[17]。如果那些還不夠,你甚至可以編寫動態插件[18]。當你需要基於在遠程服務器上的可用命令來啟用對應的聊天命令時,這個特性十分有用。

自帶測試框架: Errbot 支持 pytest[19],同時也自帶一些能使你簡便測試插件的有用功能。它的“測試你的插件[20]”的文件出於深思熟慮,並提供了足夠的資料讓你上手。

Errbot 可能的不足

以 “!” 開頭: 預設情況下,Errbot 命令發出時以一個驚嘆號打頭(!help 以及 !hello)。一些人可能會喜歡這樣,但是另一些人可能認為這讓人煩惱。謝天謝地,這很容易關掉。

插件元資料 首先,Errbot 的 Hello World[21] 插件示例看上去易於使用。然而我無法加載我的插件,直到我進一步閱讀了教程併發現我還需要一個 .plug 文件,這是一個 Errbot 用來加載插件的文件。這可能比較吹毛求疵了,但是在我深挖文件之前,這對我來說都不是顯而易見的。

示例用法

  1. import random
  2. from errbot import BotPlugin, botcmd
  3. class Hello(BotPlugin):
  4. @botcmd
  5. def hello(self, msg, args):
  6. text = random.choice(["Hi {}", "Hello {}", "Hey {}"]).format(message.user)
  7. return text

hello.py

  1. [Core]
  2. Name = Hello
  3. Module = hello
  4. [Python]
  5. Version = 2+
  6. [Documentation]
  7. Description = Example "Hello" plugin

hello.plug

你用過 Errbot 或 Opsdroid 嗎?如果用過請留下關於你對於這些工具印象的留言。

 

赞(0)

分享創造快樂