【Chatbot】Dialogflow API 串接 python 的方法 (內含範例程式碼)

前言

line chatbot 寫久了之後,如果只是單純「固定的」輸入輸出,
也就是使用者只能輸入特定的「關鍵字」來觸發功能,
或許就是少了那麼一點「自然對話的感覺」,
本篇提供 Dialogflow 的基本 API 使用範本,

至於「串接 chatbot」的部份請參考我的另外一篇文章,
這邊只專注在提供怎麼用 python 連接 Dialogflow API 的服務。

前置步驟 - 取得 Dialogflow API 金鑰

Step 1: 先去 Dialogflow 建立一個 agent

(因為我已經建過幾個了,可能畫面有點不太一樣)

* 按下「Create new agent」

Step 2: 輸入 Dialogflow agent 的相關資訊

在下面的內容分別輸入,

  • 名稱
  • DEFAULT LANGUAGE

    選繁體中文,「Chinese (Traditional) — zh-tw

  • DEFAULT TIME ZONE 選我們的時區,「(GMT+8:00) Asia/Hong_Kong
  • GOOGLE PROJECT 預設是「Create a new Google project」,除非你已經有相關的專案。
  • - 最後按下「CREATE」就可以建立新的 agent 囉!

    (這邊因為 demo 似乎是禁用字,後來我改成了 testwongwong)

    Step 3: 從建立好的 dialogflow 連結進入 Google Cloud Platform

    點擊左上角的齒輪進入設定,並點擊 Project ID 的連結進入 Google Cloud Platform

    註:如果看到「您的權限不足,無法瀏覽這個頁面
    請先「將其他 google 帳戶登出」,或直接使用「無痕模式」執行動作。

    Step 4: 進入設定「服務帳戶」

    • 點選左側,「IAM 與管理」-> 「服務帳戶」

    Step 5: 建立「服務帳戶」

    • 建立「服務帳戶」

    Step 6: 設定「服務帳戶」- 1

    • 設定「服務帳戶名稱」:我這邊輸入與剛剛取的專案名稱一樣 (不一定要一樣)
    • 設定「服務帳戶 ID」:(會依據上面自動產生)

    Step 7: 設定「服務帳戶」- 2

    • 設定「Dialogflow」並選擇「Dialogflow API 用戶端」

    Step 8: 設定「服務帳戶」- 3

    • 這邊基本上不用設定,直接按完成即可。

    Step 9: 進入「管理金鑰」頁面

    • 從產生的帳戶結果中,按下右邊「管理金鑰」,進入金鑰管理頁面

    Step 10: 新增金鑰

    • 按下「新增金鑰」,選擇 JSON,並按下建立。

    Step 11: 得到我們下載後的金鑰檔!

    • 我們就得到我們下載後的金鑰檔囉!

    開始測試並使用 Dialogflow API

    這邊我們就直接來實驗 Dialogflow API 的使用吧!
    (關於 Dialogflow 的訓練方式會再用另外一篇文章寫)

    範例程式碼

    import os
    import dialogflow
    from google.api_core.exceptions import InvalidArgument
    
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = '你剛剛得到的金鑰路徑'
    DIALOGFLOW_PROJECT_ID = '剛剛的 PROJECT ID'
    DIALOGFLOW_LANGUAGE_CODE = 'zh-TW'
    SESSION_ID = 'anything'
    
    text_to_be_analyzed = "你好"
    
    session_client = dialogflow.SessionsClient()
    session = session_client.session_path(DIALOGFLOW_PROJECT_ID, SESSION_ID)
    text_input = dialogflow.types.TextInput(text=text_to_be_analyzed, language_code=DIALOGFLOW_LANGUAGE_CODE)
    query_input = dialogflow.types.QueryInput(text=text_input)
    try:
        response = session_client.detect_intent(session=session, query_input=query_input)
    except InvalidArgument:
        raise
    
    print("輸入文字:", response.query_result.query_text)
    print("得到的 intent:", response.query_result.intent.display_name)
    print("偵測到 intent 的 confidence:", response.query_result.intent_detection_confidence)
    print("回應的話:", response.query_result.fulfillment_text)
    

    產生結果

    (我的 Dialogflow 有先進行訓練過,實際結果可能因訓練結果而有所不同。)

    Dialogflow API 範例使用說明

    主要改的內容有:

    • os.environ[“GOOGLE_APPLICATION_CREDENTIALS”]:改成你剛剛得到的「金鑰路徑」
    • DIALOGFLOW_PROJECT_ID:改成你的「PROJECT ID」
    • DIALOGFLOW_LANGUAGE_CODE:改成使用語言,例如「zh-TW」
    • SESSION_ID:這邊基本上可以任意
    • text_to_be_analyzed:要分析的文字

    Reference

    https://medium.com/swlh/working-with-dialogflow-using-python-client-cb2196d579a4
    https://www.timelog.to/a181507263

    Licensed under CC BY-NC-SA 4.0