# linebot flask 課程
用ssh連linux
環境建置:
```
from flask import Flask, request
from linebot import LineBotApi, WebhookHandler
from linebot.models import TextSendMessage # 載入 TextSendMessage 模組
import json
app = Flask(__name__)
CHANNEL_SECRET = ""
CHANNEL_ACCESS_TOKEN = ""
@app.route("/", methods=['GET'])
def home():
return "Hi"
@app.route("/", methods=['POST'])
def linebot():
body = request.get_data(as_text=True)
json_data = json.loads(body)
print(json_data)
try:
line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(CHANNEL_SECRET)
signature = request.headers['X-Line-Signature']
handler.handle(body, signature)
tk = json_data['events'][0]['replyToken'] # 取得 reply token
msg = json_data['events'][0]['message']['text'] # 取得使用者發送的訊息
text_message = TextSendMessage(text = msg)#TextSendMessage(text=msg) # 設定回傳同樣的訊息
line_bot_api.reply_message(tk,text_message) # 回傳訊息
except Exception as e:
print('error: ' + str(e))
return 'OK'
app.run(port="5000")
```
在終端機裝進linebot模組
```
pip3 uninstall line-bot-sdk
pip3 install line-bot-sdk==2.4.2
pip3 list | grep line-bot-sdk
pip3 install line-bot-sdk
```
## 建置ngrok(讓我的內容與linebot做連線)
1.網址部分到官網取得:https://ngrok.com/download
```
sudo wget<URL>
```
```
1.sudo tar xvzf ~/Downloads/ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin
2.curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list && sudo apt update && sudo apt install ngrok
3..snap install ngrok
```
5.token需要登入ngrok
```
ngrok config add-authtoken <token>
```
6.監聽5000
```
ngrok http 5000
```
## 打開line delevor
https://developers.line.biz/console/channel/2002736998/messaging-api
---
### 如果不小心關閉執行背景
1.得到nprok執行程序
```
ps aux | grep ngrok
```

2.刪除此編號執行程序
```
kill -9 5855
````
再次輸入ngrok http 5000開啟執行背景

ps.此時webhook會變動要重填
---
1.將監聽的網址交給line delevor


2.將金鑰填入程式碼
(1)


(2)


填到這裡

成功執行的畫面

## 下載open ai
```
pip3 install openai
```
設定金鑰
```
export OPENAI_API_KEY=金鑰密碼
```
```
env | grep OPENAI_API_KEY
```

flash.py
```
from flask import Flask, request
from linebot import LineBotApi, WebhookHandler
from linebot.models import TextSendMessage # 載入 TextSendMessage 模組
import json
from ai import chat
app = Flask(__name__)
CHANNEL_SECRET = "35099f8c7501adf95e28076bb175309d"
CHANNEL_ACCESS_TOKEN = "69ElomYq8LbM1cI2NiJuWdAntptQmbX+2wUDvkcMW7GX+DAM7z/4HPxvMQS9EE9rMcfhYf/CiLzcVTghYSnbrR7uZKKesmFIu+9k4gkTc7vegYF8IodnlutoFEuXFzjRHcv8ZAdl7uQA81sRl+hiWQdB04t89/1O/w1cDnyilFU="
@app.route("/", methods=['POST'])
def linebot():
body = request.get_data(as_text=True)
json_data = json.loads(body)
print(json_data)
try:
line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(CHANNEL_SECRET)
signature = request.headers['X-Line-Signature']
handler.handle(body, signature)
tk = json_data['events'][0]['replyToken'] # 取得 reply token
msg = json_data['events'][0]['message']['text'] # 取得使用者發送的訊息
text_message = TextSendMessage(text = chat(msg))#TextSendMessage(text=msg) # 設定回傳同樣的訊息
line_bot_api.reply_message(tk,text_message) # 回傳訊息
except Exception as e:
print('error: ' + str(e))
return 'OK'
app.run(port="5000")
```
ai.py
```
import json
import os
import openai
def chat(text):
openai.api_key = os.getenv("OPENAI_API_KEY")
completion = openai.chat.completions.create(
model="gpt-4",
messages=[
{"role": "user", "content": text}
]
)
return completion.choices[0].message.content
```

## 我們可以在程式內給予promt,讓他給予相關協助
ai.py
```
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
def chat(msg):
completion = openai.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是一個非常專業的健身教練。"} ,
{"role": "system", "content": "一律使用正體中文回答。"} ,
{"role": "user", "content": msg}
]
)
return completion.choices[0].message.content
```

---
## 導入訓練的內容,給予適當的promt使之成為特定腳色