iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
0
AI & Machine Learning

ChatBot&Chatbase系列 第 17

Day17[Line ChatBot]Dialogflow&python

  • 分享至 

  • xImage
  •  

今天介紹如何使用python與webhook的方式與Dialogflow溝通&給予回應內容
Dialogflow 網站 : https://dialogflow.com/

這邊以問天氣為範例
1.先創建一個entity,以location做為分類
value分別加入各地區(ex:Tainan,Tapei...)
https://ithelp.ithome.com.tw/upload/images/20180106/20107144zcYXaMzVt9.png

2.建立一個Intent
取個名-->這邊叫askweather
接著再Action的地方
也取個名字,並引入步驟一的entity
https://ithelp.ithome.com.tw/upload/images/20180106/201071446GPB8RlHlE.png

3.輸入User Says並標記
https://ithelp.ithome.com.tw/upload/images/20180106/20107144WOaSAhQfKS.png
確認一下Value是不是對的
https://ithelp.ithome.com.tw/upload/images/20180106/20107144yV725HXHC3.png

做好後記得先按 SAVE 儲存!!!

4.從Dialogflow可以看到傳遞訊息的json
按一下Show Json
https://ithelp.ithome.com.tw/upload/images/20180106/20107144mGjYxvjQJQ.png
可以看到有一部分如下
https://ithelp.ithome.com.tw/upload/images/20180106/20107144WgLbQysAvA.png

5.接著進入程式的部分
這個程式是做解析json檔,透過webhook傳遞訊息的部分

#!/usr/bin/env python

import urllib
import json
import os

from flask import Flask
from flask import request
from flask import make_response

# Flask app should start in global layout
app = Flask(__name__)

@app.route("/", methods=['GET'])
def hello():
    return "Hello World!"

@app.route('/webhook', methods=['POST'])
def webhook():
    req = request.get_json(silent=True, force=True)
    print("Request:")
    print(json.dumps(req, indent=4))

    res = makeWebhookResult(req)

    res = json.dumps(res, indent=4)
    print(res)
    r = make_response(res)
    r.headers['Content-Type'] = 'application/json'
    return r

def makeWebhookResult(req):
    #askweather的地方是Dialogflow>Intent>Action 取名的內容
    if req.get("result").get("action") != "askweather":
        return {}
    result = req.get("result")
    parameters = result.get("parameters")
    #parameters.get("weatherlocation")的weatherlocation是Dialogflow > Entitiy
    #也就是步驟josn格式中parameters>weatherlocation
    zone = parameters.get("weatherlocation")
    #先設定一個回應
    #如果是Taipei,cost的位置就回營18
    cost = {'Taipei':'18', 'Kaohsiung':'20', 'Taichung':'10','Tainan':'25'}
    #speech就是回應的內容
    speech = "The temperatrue of " + zone + " is " + str(cost[zone])
    print("Response:")
    print(speech)
    #回傳
    return {
        "speech": speech,
        "displayText": speech,
        #"data": {},
        #"contextOut": [],
        "source": "agent"
    }

if __name__ == "__main__":
    app.run(debug=True,port=80)

寫好後

5.一樣在Windows PowerShell(系統管理員)開啟執行
$cd 找到檔案位置
$python 檔名.py

6.打開ngrok得到https的網址
(可以參考Day2)

7.把https網址貼至Dialogflow>Fullfillment>Webhook
記得打開成Enable
還有網址後要多 /webhook (因為程式碼 @app.route('/webhook'...) ->路徑要對好)
https://ithelp.ithome.com.tw/upload/images/20180106/20107144ZbYOyxTWKs.png

8.回到DialogFlow > Intent 點選下方的 Fulfillment
Use Webhook的地方打勾勾
https://ithelp.ithome.com.tw/upload/images/20180106/20107144JPTDgr0N43.png

記得SAVE!!!

9.測試一下
https://ithelp.ithome.com.tw/upload/images/20180106/201071442mMo1OaISj.png


上一篇
Day16[Line ChatBot]Dialogflow介紹
下一篇
Day18[Line ChatBot]!未解決!Dialogflow&LineBot之間的連接問題
系列文
ChatBot&Chatbase30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
such0305
iT邦新手 5 級 ‧ 2018-05-01 16:09:21

我在python app.py 那部分出現了這個問題,可是我有pip flask 惹~~~
為什麼會這樣???

Traceback (most recent call last):
File "app.py", line 7, in
from flask import Flask
ModuleNotFoundError: No module named 'flask'

我要留言

立即登入留言