# Python send message to slack app ## 這份文件可以做甚麼? - 使用python發送訊息到slack app ## steps 1. 建立slack帳戶(已有帳號請跳至 step 2) 2. 在slack中新增一個`workspace`與`channel`(已有`channel`請跳至step 3) 3. 複製channel id 4. 新增slack apps 5. 新增必要權限 6. 安裝slack apps 7. 執行python程式碼 ### step 1:建立slack帳戶 到[slack](https://slack.com/)建立新帳號 ### step 2:在slack中新增一個`workspace`與`channel` 1. 到[https://app.slack.com/workspace-signin](https://app.slack.com/workspace-signin)登入/建立`workspace` 2. 建立/選擇要接收訊息的`channel` - `channel`為`public channel`,否則須將機器人手動新增至`channel`內 - 範例:設定為`public channel` ![image](https://hackmd.io/_uploads/HkR02tQF1g.png) ### step 3:複製channel id 在`channel`的`頻道詳細資料`(對`channel`按右鍵)中的`關於`頁面最下方複製`channel id` - 範例: ![image](https://hackmd.io/_uploads/BJQAeFQtye.png) ### step 4:新增slack apps 到[https://api.slack.com/apps](https://api.slack.com/apps) 建立`slack apps` - 範例: 1. ![image](https://hackmd.io/_uploads/BJ1-GF7Y1x.png) 2. ![image](https://hackmd.io/_uploads/H10EGKQKJe.png) 3. ![image](https://hackmd.io/_uploads/HypPfFmKJg.png) ### step 5:新增必要權限 1. 點擊OAuth & Permissions` - 範例: ![image](https://hackmd.io/_uploads/ryPO7tXKJe.png) 2. 設定`chat:write`權限 - 範例: ![image](https://hackmd.io/_uploads/r1yLvF7Ykx.png) ![image](https://hackmd.io/_uploads/r1aKVY7tJx.png) 3. 設定`chat:write.public`權限 - 範例: ![image](https://hackmd.io/_uploads/Byi43K7tkg.png) ### step 6:安裝slack apps 1. 點擊`Install App` ![image](https://hackmd.io/_uploads/Bk4WSYXtyx.png) 2. 點擊安裝 ![image](https://hackmd.io/_uploads/HklErtQtJe.png) ![image](https://hackmd.io/_uploads/rJtdqtXF1g.png) 3. 複製`token` ![螢幕擷取畫面 2025-02-07 210854](https://hackmd.io/_uploads/S14p8KQKyl.png) ### step 7:執行python程式碼 - 執行以下`python`程式碼 - `TOKEN`為 [step 6](#step-6:安裝slack-apps)最後複製的`token` - `channel_id`為[step 3](#step-3:複製channel-id)複製的`channel id` - `text`為想發送到頻道的訊息 ```python= import logging # Import WebClient from Python SDK (github.com/slackapi/python-slack-sdk) from slack_sdk import WebClient from slack_sdk.errors import SlackApiError # WebClient instantiates a client that can call API methods # When using Bolt, you can use either `app.client` or the `client` passed to listeners. TOKEN = "YOUR-TOKEN-HERE" client = WebClient(token=TOKEN) logger = logging.getLogger(__name__) # ID of the channel you want to send the message to channel_id = "YOUR-CHANNEL-ID-HERE" try: # Call the chat.postMessage method using the WebClient result = client.chat_postMessage( channel=channel_id, text="Hello world" # message you want to send ) logger.info(result) except SlackApiError as e: logger.error(f"Error posting message: {e}") ``` - 範例: ![image](https://hackmd.io/_uploads/BJDtJ9XKye.png) ## 附註 - 透過不同`channel_id`可發送訊息至不同頻道 - 透過不同`slack_apps`/`token`使用不同應用程式發送訊息