πApp
μ°Έκ³ μλ£ 1: PythonμΌλ‘ Slack App(Bot) λ§λ€κΈ°
μ°Έκ³ μλ£ 2: [Slack] ChatGPT Slack μ±λ΄ λ§λ€κΈ° (2νΈ)
μ°Έκ³ μλ£ 3: Slack ChatGPT μ°λνκΈ°
λ³Έ λ΄μ©μ Alexandre t'Kintμ κΈμ μ°Έκ³ νμ¬ κ΅¬νν λ΄μ©μ μ 리ν κ²μ λλ€.
Step1: Slackμ appμ λ±λ‘νκ³ , token μμ±νκΈ°
Slackμ ChatGPTλ₯Ό μ°λνκΈ° μν΄μ, μ°λ¦¬λ Slackμ μ±λ΄ appμ λ§λ€κ³ , κ·Έ appμ ChatGPTλ₯Ό μ¬μ©νλ κΈ°λ₯μ λ£μ΄μ£Όκ² μ΅λλ€.
Bot κΈ°λ₯μ κ°μ§λ appμ λ§λ€ κ²μ΄κΈ° λλ¬Έμ, μ°λ¦¬λ Slack Bot Tokenκ³Ό Slack App Tokenμ κ°κ° μ»μ΄μ λ±λ‘ν΄μΌ ν©λλ€.
Slack workspaceμ λ‘κ·ΈμΈλ€.
Slack API websiteμ λ€μ΄κ°λ€.
'Create an app'μ λλ¬μ 'From scratch'λ₯Ό ν΄λ¦νλ€.

App μ΄λ¦μ μ νκ³ , μ€μΉν Slack workspaceλ₯Ό μ νν©λλ€. μ΄μ λΆν° μ±λ΄μ νμν κ°μ’ μ€μ λ€μ λ±λ‘νλ€.
'Basic information > Add features and functionalityμμ, 'Permissions'λ₯Ό μ νν΄μ λ€μ΄κ°λλ€. κ·Έλ¦¬κ³ Scopes add in Bot Token Scopesμμ
app_mentions:read
,channels: history
,channels:read
,chat:write
λ₯Ό λ±λ‘ν΄μ€λ€.Settings > Socket Modeμ λ€μ΄κ°μ, socket modeλ₯Ό νμ±ννλ€.

Basic information > 'App-Level Tokens'μμ 'Generate Token and Scopes'λ₯Ό ν΄λ¦ν΄μ Tokenμ μμ±ν©λλ€. κ·Έλ¦¬κ³ μμ±λT Slack Bot App Token ('xapp'μΌλ‘ μμνλ λ¬Έμμ΄)μ 볡μ¬νλ€.

Basic information > 'Add features and functionality' > 'Event Subscriptions'μ λ€μ΄κ°μ μ΄ κΈ°λ₯μ νμ±ννκ³ , 'Subscribe to bot events'μμλ 'app_mention'μ μ ννκ³ μ μ₯νλ€.

'OAuth & Permissions'μμ, Install to Workspaceλ₯Ό λλ¬μ Slackμ Appμ μ€μΉνλ€.
Slack Bot Tokenμ 볡μ¬νλ€ ('xoxb'λ‘ μμνλ λ¬Έμμ΄)
Step2: OpenAI API key μμ±νκΈ°
λ€μμΌλ‘, ChatGPT APIλ₯Ό μ 곡νλ 'OpenAI'μ API keyλ₯Ό μμ±νλ λ¨κ³μ΄λ€.
OpenAI API websiteμ μ μν΄μ νμκ°μ ν, λ‘κ·ΈμΈνλ€.
API Key νμΌλ‘ λ€μ΄κ°μ 'Create new secret key'λ₯Ό λλ¬μ μ API keyλ₯Ό λ§λ λ€.

OpenAI API keyλ₯Ό 볡μ¬νλ€.
Step3: νμ ν¨ν€μ§ μ€μΉ
λ€μμΌλ‘, pythonμΌλ‘ slackκ³Ό openaiλ₯Ό appμΌλ‘ μ°λνκΈ° μν νμ ν¨ν€μ§λ€μ μ€μΉνλ€. νΉν 'Slack-Bolt' ν¨ν€μ§λ Slack appμ μ μ½κ² λ§λ€ μ μλ ν¨μλ€μ μ 곡νλ€. κ°μνκ²½μ λ§λ€κ³ , μλμ ν¨ν€μ§λ€μ μ€μΉνλ€.
pip install openai
pip install slack-bolt
pip install slack_sdk
Step4: Application μ€ν
μμμ μμ±ν tokenλ€μ μ΄μ©ν΄μ appμ λ§λλ κ³Όμ μ΄λ€. Python scriptλ₯Ό μλμ κ°μ΄ μμ±νλ€.
SLACK_BOT_TOKEN = "μμμ μ»μ Slack Bot Tokenμ λ£μΌμΈμ."
SLACK_APP_TOKEN = "μμμ μ»μ Slack App Tokenμ λ£μΌμΈμ."
OPENAI_API_KEY = "μμμ μ»μ OpenAI API Tokenμ λ£μΌμΈμ."
import os
import openai
from slack_bolt.adapter.socket_mode import SocketModeHandler
from slack_sdk import WebClient
from slack_bolt import App
# Event API & Web API
app = App(token=SLACK_BOT_TOKEN)
client = WebClient(SLACK_BOT_TOKEN)
# This gets activated when the bot is tagged in a channel
@app.event("app_mention")
def handle_message_events(body, logger):
# Log message
print(str(body["event"]["text"]).split(">")[1])
# Create prompt for ChatGPT
prompt = str(body["event"]["text"]).split(">")[1]
# Let thre user know that we are busy with the request
response = client.chat_postMessage(channel=body["event"]["channel"],
thread_ts=body["event"]["event_ts"],
text=f"νμμ¬μ°κ° μ΄μ¬ν μ°Ύμ보λ μ€μ
λλ€. \nμ‘°κΈλ§ κΈ°λ€λ €μ£ΌμΈμ!")
# Check ChatGPT
openai.api_key = OPENAI_API_KEY
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=0.5).choices[0].text
# Reply to thread
response = client.chat_postMessage(channel=body["event"]["channel"],
thread_ts=body["event"]["event_ts"],
text=f"νμμ¬μ°μ λ΅λ³: \n{response}")
if __name__ == "__main__":
SocketModeHandler(app, SLACK_APP_TOKEN).start()
μΌλ°μ μΈ λ°©μμΌλ‘ μ€ννλ€λ©΄, μλμ λͺ λ Ήμ΄λ₯Ό ν°λ―Έλμ μ λ ₯νλ€.
python app.py
μ€ν ν ν°λ―Έλμ ββ‘οΈ Bolt app is running!βλΌκ³ λνλλ©΄, μ±κ³΅μ μΌλ‘ appμ΄ μ€νλ κ²μ΄λ€.
μ΄λ₯Ό λ°±κ·ΈλΌμ΄λμμ μ€ννκ³ μΆλ€λ©΄, nohupμ μ¬μ©ν΄ μ€ννλ€.
$ nohup python app.py&
μ΄μ slackμμ μνλ μ±λμ appμ λΆλ¬μ€κ³ , μ±λ΄ μ΄λ¦μ μΈκΈν΄μ λΆλ¬μ¨ ν λ΄μ©μ μ λ ₯νλ©΄ threadλ‘ λ΅λ³μ΄ λ¬λ¦°λ€.

Last updated