乾貨 | 如何用 Python 打造一個聊天機器人?【附代碼】

聊天機器人(Bot) 是一種像 Slack 同樣的實用的互動聊天服務方式。若是你以前歷來沒有創建過聊天機器人,那麼這篇文章提供了一個簡單的入門指南,告訴你如何用 Python 結合 Slack API 創建你第一個聊天機器人。python

咱們經過搭建你的開發環境, 得到一個 Slack API 的聊天機器人令牌,並用 Pyhon 開發一個簡單聊天機器人。linux

咱們所需的工具web

咱們的聊天機器人咱們將它稱做爲「StarterBot」,它須要 Python 和 Slack API。要運行咱們的 Python 代碼,咱們須要:數據庫

Python 2 或者 Python 3後端

pip 和 virtualenv 來處理 Python 應用程序依賴關係api

一個能夠訪問 API 的免費 Slack 帳號,或者你能夠註冊一個 Slack Developer Hangout team。函數

經過 Slack 團隊創建的官方 Python Slack 客戶端代碼庫工具

Slack API 測試令牌學習

當你在本教程中進行構建時,Slack API 文檔 是頗有用的。測試

本教程中全部的代碼都放在 slack-starterbot 公共庫裏,並以 MIT 許可證開源。

搭建咱們的環境

咱們如今已經知道咱們的項目須要什麼樣的工具,所以讓咱們來搭建咱們所的開發環境吧。首先到終端上(或者 Windows 上的命令提示符)而且切換到你想要存儲這個項目的目錄。在那個目錄裏,建立一個新的 virtualenv 以便和其餘的 Python 項目相隔離咱們的應用程序依賴關係。

激活 virtualenv:

你的提示符如今應該看起來如截圖:

已經激活的starterbot的virtualenv的命令提示符這個官方的 slack 客戶端 API 幫助庫是由 Slack 創建的,它能夠經過 Slack 通道發送和接收消息。經過這個pip 命令安裝 slackclient 庫:

當 pip 命令完成時,你應該看到相似這樣的輸出,並返回提示符。

在已經激活的virtualenv用pip安裝slackclient的輸出咱們也須要爲咱們的Slack項目得到一個訪問令牌,以便咱們的聊天機器人能夠用它來鏈接到Slack API。

Slack 實時消息傳遞(RTM)API

Slack 容許程序經過一個 Web API 來訪問他們的消息傳遞通道。去這個 Slack Web API 頁面 註冊創建你本身的 Slack 項目。你也能夠登陸一個你擁有管理權限的已有帳號。

使用 Web API頁面的右上角登陸按鈕登陸後你會到達 聊天機器人用戶頁面。

定製聊天機器人用戶頁面給你的聊天機器人起名爲「starterbot」而後點擊 「Add bot integration」 按鈕。

添加一個bot integration 並起名爲「starterbot」這個頁面將從新加載,你將看到一個新生成的訪問令牌。你還能夠將標誌改爲你本身設計的。例如我給的這個「Full Stack Python」標誌。

爲你的新 Slack 聊天機器人複製和粘貼訪問令牌在頁面底部點擊「Save Integration」按鈕。你的聊天機器人如今已經準備好鏈接 Slack API。

Python 開發人員的一個常見的作法是以環境變量輸出祕密令牌。輸出的Slack令牌名字爲SLACK_BOT_TOKEN:

好了,咱們如今獲得了將這個 Slack API 用做聊天機器人的受權。

咱們創建聊天機器人還須要更多信息:咱們的聊天機器人的 ID。接下來咱們將會寫一個簡短的腳本,從 Slack API 得到該 ID。

得到咱們聊天機器人的 ID

這是最後寫一些 Python 代碼的時候了! 咱們編寫一個簡短的 Python 腳本得到 StarterBot 的 ID 來熱身一下。這個 ID 基於 Slack 項目而不一樣。

咱們須要該ID,當解析從Slack RTM上發給StarterBot的消息時,它用於對咱們的應用驗明正身。咱們的腳本也會測試咱們SLACK_BOT_TOKEN環境變量是否設置正確。

創建一個命名爲printbotid.py的新文件,而且填入下面的代碼:

咱們的代碼導入SlackClient,並用咱們設置的環境變量SLACK_BOT_TOKEN實例化它。 當該腳本經過python命令執行時,咱們經過會訪問Slack API列出全部的 Slack 用戶而且得到匹配一個名字爲「satrterbot」的ID。

這個得到聊天機器人的ID的腳本咱們僅須要運行一次。

當它運行爲咱們提供了聊天機器人的ID時,腳本會打印出簡單的一行輸出。

在你的Slack 項目中用Python腳本打印Slack聊天機器人的ID複製這個腳本打印出的惟一ID。並將該ID做爲一個環境變量BOT_ID輸出。

這個腳本僅僅須要運行一次來得到聊天機器人的ID。 咱們如今能夠在咱們的運行StarterBot的Python應用程序中使用這個ID。

編碼咱們的 StarterBot

如今咱們擁有了寫咱們的StarterBot代碼所需的一切。 建立一個新文件命名爲starterbot.py,它包括如下代碼。

對os和SlackClient的導入咱們看起來很熟悉,由於咱們已經在theprintbotid.py中用過它們了。

經過咱們導入的依賴包,咱們可使用它們得到環境變量值,並實例化Slack客戶端。

該代碼經過咱們以輸出的環境變量SLACK_BOT_TOKEN 實例化SlackClient`客戶端。

Slack 客戶端會鏈接到 Slack RTM API WebSocket,而後當解析來自 firehose 的消息時會不斷循環。若是有任何發給 StarterBot 的消息,那麼一個被稱做 handle_command 的函數會決定作什麼。

接下來添加兩個函數來解析 Slack 的輸出並處理命令。

parse_slack_output 函數從 Slack 接受信息,而且若是它們是發給咱們的 StarterBot 時會做出判斷。消息以一個給咱們的聊天機器人 ID 的直接命令開始,而後交由咱們的代碼處理。目前只是經過 Slack 管道發佈一個消息回去告訴用戶去多寫一些 Python 代碼!

這是整個程序組合在一塊兒的樣子 (你也能夠 在 GitHub 中查看該文件):

如今咱們的代碼已經有了,咱們能夠經過 python starterbot.py 來運行咱們 StarterBot 的代碼了。

當 StarterBot 開始運行並且鏈接到 API 的輸出通道在 Slack 中建立新通道,而且把 StarterBot 邀請進來,或者把 StarterBot 邀請進一個已經存在的通道中。

在Slack界面建立一個新通道而且邀請 StarterBot如今在你的通道中給 StarterBot 發命令。

在你的Slack通道里給你的 StarterBot 發命令若是你從聊天機器人獲得的響應中碰見問題,你可能須要作一個修改。正如上面所寫的這個教程,其中一行AT_BOT = 「:」,在「@starter」(你給你本身的聊天機器人起的名字)後須要一個冒號。從 AT_BOT 字符串後面移除:。Slack 彷佛須要在@ 一我的名後加一個冒號,但這好像是有些不協調的。

結束

好吧,你如今已經得到一個簡易的聊天機器人,你能夠在代碼中不少地方加入你想要建立的任何特性。

咱們可以使用 Slack RTM API 和 Python 完成不少功能。看看經過這些文章你還能夠學習到什麼:

附加一個持久的關係數據庫 或者 NoSQL 後端 好比 PostgreSQL、MySQL 或者 SQLite ,來保存和檢索用戶數據

添加另一個與聊天機器人互動的通道,好比 短信 或者電話呼叫

集成其它的 web API,好比 GitHub、Twilio 或者 api.ai

原文:fullstackpython.com

譯文:http://linux.cn

譯者:jiajia9linuxer

來源:Python開發

End

相關文章
相關標籤/搜索