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

【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
    使用 Hugo 建立
    主題 StackJimmy 設計