# LineBOT #### 題目:應用先前已申請的[LineBOT Devp](https://hackmd.io/@yillkid/SJw7aUDJ5)廣播功能 ```py= from linebot import LineBotApi from linebot.models import TextSendMessage CHANNEL_ACCESS_TOKEN = "" #Token先隱藏起來 line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN) line_bot_api.broadcast(TextSendMessage(text = "哈囉!我是LINEBOT PYTHON程式測試")) ``` * 現在,我想請妳 * 使用 LINE BOT 的 webhook 功能 * 搭配 openai.completion.create * 打造一個 LINEBOT 聊天機器人 * 安裝ngrok sudo snap install ngrok * 我的程式碼: ai_chat.py ```py= import requests import os import json def chat(msg): apiUrl = "https://api.openai.com/v1/completions" data1 = { "model": "text-davinci-003", "prompt": msg, "max_tokens":200, "temperature":0.8, "n":1 } key = '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' key2 = f'Bearer {key}' headers = {"Content-Type":"application/json", "Authorization": key2} response = requests.post( apiUrl, json = data1, headers = headers) b = response.json() return b["choices"][0]["text"].replace("\n","") ``` 主程式 ```py= from flask import Flask, request from linebot import LineBotApi, WebhookHandler from linebot.models import TextSendMessage # 載入 TextSendMessage 模組 import json from Openai_06_forLineBot import chat app = Flask(__name__) CHANNEL_SECRET = "03e55c872c23eb9e8cc48e540b196dda" 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 = chat(msg)) line_bot_api.reply_message(tk,text_message) # 回傳訊息 except Exception as e: print('error: ' + str(e)) return 'OK' app.run(port="5000") ``` * Output: ![](https://hackmd.io/_uploads/S1mHAvX43.png) ###### tags: `python` `機器學習` `openai` `linebot`