成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何運用Python建立你的第一個Slack聊天機器人?

開發 后端
聊天機器人(Bot) 是一種像 Slack 一樣的實用的互動聊天服務方式。如果你之前從來沒有建立過聊天機器人,那么這篇文章提供了一個簡單的入門指南,告訴你如何用 Python 結合 Slack API 建立你第一個聊天機器人。我們通過搭建你的開發環境, 獲得一個 Slack API 的聊天機器人令牌,并用 Pyhon 開發一個簡單聊天機器人。

[[172889]]

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

我們通過搭建你的開發環境, 獲得一個 Slack API 的聊天機器人令牌,并用 Pyhon 開發一個簡單聊天機器人。

我們所需的工具

我們的聊天機器人我們將它稱作為“StarterBot”,它需要 Python 和 Slack API。要運行我們的 Python 代碼,我們需要:

  • Python 2 或者 Python 3
  • pip 和 virtualenv 來處理 Python 應用程序依賴關系
  • 一個可以訪問 API 的免費 Slack 賬號,或者你可以注冊一個 Slack Developer Hangout team。
  • 通過 Slack 團隊建立的官方 Python Slack 客戶端代碼庫
  • Slack API 測試令牌

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

本教程中所有的代碼都放在 slack-starterbot 公共庫里,并以 MIT 許可證開源。

搭建我們的環境

我們現在已經知道我們的項目需要什么樣的工具,因此讓我們來搭建我們所的開發環境吧。首先到終端上(或者 Windows 上的命令提示符)并且切換到你想要存儲這個項目的目錄。在那個目錄里,創建一個新的 virtualenv 以便和其他的 Python 項目相隔離我們的應用程序依賴關系。

  1. virtualenv starterbot 

激活 virtualenv:

  1. source starterbot/bin/activate 

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

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

  1. pip install 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:

  1. export SLACK_BOT_TOKEN='你的 slack 令牌粘帖在這里' 

好了,我們現在得到了將這個 Slack API 用作聊天機器人的授權。

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

獲得我們聊天機器人的 ID

這是最后寫一些 Python 代碼的時候了! 我們編寫一個簡短的 Python 腳本獲得 StarterBot 的 ID 來熱身一下。這個 ID 基于 Slack 項目而不同。

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

建立一個命名為 printbotid.py 的新文件,并且填入下面的代碼:

  1. import os 
  2. from slackclient import SlackClient 
  3. BOT_NAME = 'starterbot' 
  4. slack_client = SlackClient(os.environ.get('SLACK_BOT_TOKEN')) 
  5. if __name__ == "__main__"
  6.     api_call = slack_client.api_call("users.list"
  7.     if api_call.get('ok'): 
  8.         # retrieve all users so we can find our bot 
  9.         users = api_call.get('members'
  10.         for user in users: 
  11.             if 'name' in user and user.get('name') == BOT_NAME: 
  12.                 print("Bot ID for '" + user['name'] + "' is " + user.get('id')) 
  13.     else
  14.         print("could not find bot user with the name " + BOT_NAME) 

我們的代碼導入 SlackClient,并用我們設置的環境變量 SLACK_BOT_TOKEN 實例化它。 當該腳本通過 python 命令執行時,我們通過會訪問 Slack API 列出所有的 Slack 用戶并且獲得匹配一個名字為“satrterbot”的 ID。

這個獲得聊天機器人的 ID 的腳本我們僅需要運行一次。

  1. python print_bot_id.py 

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

 

在你的 Slack 項目中用 Python 腳本打印 Slack 聊天機器人的 ID復制這個腳本打印出的唯一 ID。并將該 ID 作為一個環境變量 BOT_ID 輸出。

  1. (starterbot)$ export BOT_ID='bot id returned by script' 

這個腳本僅僅需要運行一次來獲得聊天機器人的 ID。 我們現在可以在我們的運行 StarterBot 的 Python應用程序中使用這個 ID 。

編碼我們的 StarterBot

現在我們擁有了寫我們的 StarterBot 代碼所需的一切。 創建一個新文件命名為 starterbot.py ,它包括以下代碼。

  1. import os 
  2. import time 
  3. from slackclient import SlackClient 

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

通過我們導入的依賴包,我們可以使用它們獲得環境變量值,并實例化 Slack 客戶端。

  1. # starterbot 的 ID 作為一個環境變量 
  2. BOT_ID = os.environ.get("BOT_ID"
  3. # 常量 
  4. AT_BOT = "<@" + BOT_ID + ">:" 
  5. EXAMPLE_COMMAND = "do" 
  6. # 實例化 Slack 和 Twilio 客戶端 
  7. slack_client = SlackClient(os.environ.get('SLACK_BOT_TOKEN')) 

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

  1. if __name__ == "__main__"
  2.     READ_WEBSOCKET_DELAY = 1 # 1 從 firehose 讀取延遲 1 秒 
  3.     if slack_client.rtm_connect(): 
  4.         print("StarterBot connected and running!"
  5.         while True
  6.             command, channel = parse_slack_output(slack_client.rtm_read()) 
  7.             if command and channel: 
  8.                 handle_command(command, channel) 
  9.             time.sleep(READ_WEBSOCKET_DELAY) 
  10.     else
  11.         print("Connection failed. Invalid Slack token or bot ID?"

Slack 客戶端會連接到 Slack RTM API WebSocket,然后當解析來自 firehose 的消息時會不斷循環。如果有任何發給 StarterBot 的消息,那么一個被稱作 handle_command 的函數會決定做什么。

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

  1. def handle_command(command, channel): 
  2.     ""
  3.         Receives commands directed at the bot and determines if they 
  4.         are valid commands. If so, then acts on the commands. If not
  5.         returns back what it needs for clarification. 
  6.     ""
  7.     response = "Not sure what you mean. Use the *" + EXAMPLE_COMMAND + \ 
  8.                "* command with numbers, delimited by spaces." 
  9.     if command.startswith(EXAMPLE_COMMAND): 
  10.         response = "Sure...write some more code then I can do that!" 
  11.     slack_client.api_call("chat.postMessage", channel=channel, 
  12.                           text=response, as_user=True
  13. def parse_slack_output(slack_rtm_output): 
  14.     ""
  15.         The Slack Real Time Messaging API is an events firehose. 
  16.         this parsing function returns None unless a message is 
  17.         directed at the Bot, based on its ID. 
  18.     ""
  19.     output_list = slack_rtm_output 
  20.     if output_list and len(output_list) > 0: 
  21.         for output in output_list: 
  22.             if output and 'text' in output and AT_BOT in output['text']: 
  23.                 # 返回 @ 之后的文本,刪除空格 
  24.                 return output['text'].split(AT_BOT)[1].strip().lower(), \ 
  25.                        output['channel'
  26.     return None, None 

parse_slack_output 函數從 Slack 接受信息,并且如果它們是發給我們的 StarterBot 時會作出判斷。消息以一個給我們的聊天機器人 ID 的直接命令開始,然后交由我們的代碼處理。目前只是通過 Slack 管道發布一個消息回去告訴用戶去多寫一些 Python 代碼!

這是整個程序組合在一起的樣子 (你也可以 在 GitHub 中查看該文件):

  1. import os 
  2. import time 
  3. from slackclient import SlackClient 
  4. # starterbot 的 ID 作為一個環境變量 
  5. BOT_ID = os.environ.get("BOT_ID"
  6. # 常量 
  7. AT_BOT = "<@" + BOT_ID + ">:" 
  8. EXAMPLE_COMMAND = "do" 
  9. # 實例化 Slack 和 Twilio 客戶端 
  10. slack_client = SlackClient(os.environ.get('SLACK_BOT_TOKEN')) 
  11. def handle_command(command, channel): 
  12.     ""
  13.         Receives commands directed at the bot and determines if they 
  14.         are valid commands. If so, then acts on the commands. If not
  15.         returns back what it needs for clarification. 
  16.     ""
  17.     response = "Not sure what you mean. Use the *" + EXAMPLE_COMMAND + \ 
  18.                "* command with numbers, delimited by spaces." 
  19.     if command.startswith(EXAMPLE_COMMAND): 
  20.         response = "Sure...write some more code then I can do that!" 
  21.     slack_client.api_call("chat.postMessage", channel=channel, 
  22.                           text=response, as_user=True
  23. def parse_slack_output(slack_rtm_output): 
  24.     ""
  25.         The Slack Real Time Messaging API is an events firehose. 
  26.         this parsing function returns None unless a message is 
  27.         directed at the Bot, based on its ID. 
  28.     ""
  29.     output_list = slack_rtm_output 
  30.     if output_list and len(output_list) > 0: 
  31.         for output in output_list: 
  32.             if output and 'text' in output and AT_BOT in output['text']: 
  33.                 # 返回 @ 之后的文本,刪除空格 
  34.                 return output['text'].split(AT_BOT)[1].strip().lower(), \ 
  35.                        output['channel'
  36.     return None, None 
  37. if __name__ == "__main__"
  38.     READ_WEBSOCKET_DELAY = 1 # 1 second delay between reading from firehose 
  39.     if slack_client.rtm_connect(): 
  40.         print("StarterBot connected and running!"
  41.         while True
  42.             command, channel = parse_slack_output(slack_client.rtm_read()) 
  43.             if command and channel: 
  44.                 handle_command(command, channel) 
  45.             time.sleep(READ_WEBSOCKET_DELAY) 
  46.     else
  47.         print("Connection failed. Invalid Slack token or bot ID?"

現在我們的代碼已經有了,我們可以通過 python starterbot.py 來運行我們 StarterBot 的代碼了。

 

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

 

在 Slack 界面創建一個新通道并且邀請 StarterBot現在在你的通道中給 StarterBot 發命令。

 

在你的 Slack 通道里給你的 StarterBot 發命令如果你從聊天機器人得到的響應中遇見問題,你可能需要做一個修改。正如上面所寫的這個教程,其中一行AT_BOT = "<@" + BOT_ID + ">:",在“@starter”(你給你自己的聊天機器人起的名字)后需要一個冒號。從 AT_BOT 字符串后面移除:。Slack 似乎需要在@ 一個人名后加一個冒號,但這好像是有些不協調的。

結束

好吧,你現在已經獲得一個簡易的聊天機器人,你可以在代碼中很多地方加入你想要創建的任何特性。

我們能夠使用 Slack RTM API 和 Python 完成很多功能??纯赐ㄟ^這些文章你還可以學習到什么:

  • 附加一個持久的關系數據庫 或者 NoSQL 后端 比如 PostgreSQL、MySQL 或者 SQLite ,來保存和檢索用戶數據
  • 添加另外一個與聊天機器人互動的通道,比如 短信 或者電話呼叫
  • 集成其它的 web API,比如 GitHub、Twilio 或者 api.ai

有問題? 通過 Twitter 聯系我 @fullstackpython 或 @mattmakai。 我在 GitHub 上的用戶名是mattmakai。

這篇文章感興趣? Fork 這個 GitHub 上的頁面吧。

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2020-02-26 17:39:18

Python機器人Word

2020-07-30 08:06:34

Python開發工具

2020-08-07 14:40:09

Python聊天機器人編程語言

2022-09-30 13:55:46

Python機器人

2021-11-30 10:56:43

ChatterBot機器人人工智能

2021-05-24 15:29:24

人工智能機器人聊天

2022-08-04 07:03:41

AnswersInfobip無代碼

2020-12-02 13:00:17

Recast.AI聊天機器人人工智能

2022-07-05 06:42:01

聊天機器人人工智能

2021-10-28 22:46:13

Python機器人數據

2017-03-28 12:21:21

機器人定義

2024-11-08 15:31:55

2021-03-30 17:51:25

機器人系統聊天

2023-12-18 19:05:34

2022-07-03 10:23:06

機器人場景個性化

2019-04-19 14:40:15

代碼Python機器人

2017-06-08 10:07:53

機器人銀行微軟

2023-07-27 14:38:58

人工智能機器人開發

2020-02-20 09:00:00

網絡應用數據技術

2024-11-01 07:30:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久国产精品网 | 草草影院ccyy| 精品国产三级 | 亚洲黄色av网站 | 亚洲精品欧美 | 在线视频91 | 亚洲精品一区二区 | 久久精品国产亚洲一区二区三区 | 午夜午夜精品一区二区三区文 | 精品国产一区二区三区久久久久久 | 婷婷丁香综合网 | 欧美亚洲视频在线观看 | 成人久久久久久久久 | 精品啪啪 | 噜久寡妇噜噜久久寡妇 | 国产精品久久久久久中文字 | 国产伦精品一区二区三区照片91 | 国产特一级黄色片 | 精品一区二区三区不卡 | 国产亚洲精品精品国产亚洲综合 | 91视视频在线观看入口直接观看 | 9久久 | 亚洲国产精品一区二区www | 九色视频网站 | 国产综合久久 | 欧美jizzhd精品欧美巨大免费 | 久久久久亚洲 | 九色 在线 | 国产精品国产三级国产aⅴ中文 | 国产美女福利在线观看 | 欧美综合一区二区 | 日韩精品久久久久 | 天天摸天天干 | 91成人在线 | 日韩欧美网 | 久久专区| 中文字幕日韩欧美 | 久久蜜桃资源一区二区老牛 | 日韩国产免费观看 | 国产午夜精品视频 | 四虎影院久久 |