為什麼有這個 side project
過往工作的團隊都是跟外面店家訂午餐,並且有各種門檻:需要滿多少錢 or 需要幾份以上才能外送。這造成負責訂餐的同仁需要先統計資訊後才能向店家訂餐,且都是大家透過 Slack 傳訊息給負責人,不只耗費人力去統計且偶爾會出錯造成餐點數量不對。
這個 side project 就是為了減少這件事所耗費的人力與時間成本,讓收集、統計訂單資訊的這種工作更有效率和降低出錯機率。
這個 project 是使用 Bolt for Python 建立 socket mode 的 Slack app,這模式有不用固定 IP、不用域名、不用合法 SSL 憑證等等優勢。
Demo

注意事項
- 此專案是使用 socket mode,沒辦法部屬到 Slack Marketplace。建議只在公司內部、私人 workspace 使用。
- 如果同時運作兩個 socket mode app,原則上應該會踢出第一個 app,但因為使用 docker compose 且設定
restart: always的關係,可能兩個 app 會持續重新啟動互相競爭,造成功能異常。
重頭建立 Slack app
你可以直接使用我已經設定好的 manifest 檔案去建立 Slack app,跳至 Create your app from a manifest
- 建立你的 Slack app:使用
from scratch的方式,建立之後你將進入你的 Slack app 基本資訊頁面。或從 Your Apps 進入剛剛建立的 Slack app。 - 啟用 Socket Mode 與建立 App-level token:點選側邊欄的
Socket Mode,將Enable Socket Mode的 Toggle Button 開啟,這將協助你建立 App-level token 和需要的 Scope。建立完後可將 App-level token 先複製下來,此 Token 應該由xapp-開頭。 - 設定 Slash Commands:點選側邊欄的
Slash Commands,點選Create new Command,指令名稱可隨意,例如:- Command:
/order - Short Description:
開啟午餐訂單
- Command:
- 調整 Bot Token Scopes:點選側邊欄的
OAuth & Permissions,滾動到 Scopes 部份的Bot Token Scopes區域,點選Add an OAuth Scope新增以下 scopes:commands:上面開啟 Slash Commands 就會新增了chat:write:Slack app 發送訊息到頻道pins:write:透過/orderslash command 開啟的訊息會被 pined
- 安裝 Slack App 到 Workspace:點選側邊欄的
Install App,點選Install to {Your workspace}。安裝完後同頁面會出現 Bot User OAuth Token,應該為xoxb-開頭,同樣複製起來。 - 將 Slack App 加入某個 Slack 頻道:
- 打開你的 Slack
- 對 Slack 頻道按右鍵,點選
View channel details - 切到
Integrations分頁 - 按
Add an App,選擇剛剛建立的 Slack app
使用 manifest 檔案建立 Slack app
- 建立你的 Slack app:使用
from a manifest的方式,貼上以下 manifest json - 建立好 Slack app 後,一樣需要將其安裝到 Workspace 和從 Slack 頻道加入 App
{
"display_information": {
"name": "slack-order"
},
"features": {
"bot_user": {
"display_name": "slack-order",
"always_online": false
},
"slash_commands": [
{
"command": "/order",
"description": "開啟午餐訂單",
"should_escape": false
}
]
},
"oauth_config": {
"scopes": {
"bot": [
"chat:write",
"commands",
"pins:write"
]
}
},
"settings": {
"interactivity": {
"is_enabled": true
},
"org_deploy_enabled": false,
"socket_mode_enabled": true,
"token_rotation_enabled": false
}
}
運作 Slack app
- 透過 docker compose 去運行 app,所以主機需要先安裝 Docker Engine
- clone 專案
git clone https://github.com/WCYa/slack-order.git
- 從範例複製環境變數設定檔
cd slack-order
cp env_template .env
- 編輯
.env,新增以下兩個 tokens- SLACK_APP_TOKEN=‘xapp-…’
- SLACK_BOT_TOKEN=‘xoxb-…’
- 運行
docker compose up
# or run container in background
docker compose up -d