# 建立聊天機器人

本頁介紹如何使用 Messaging API 建立 LINE 聊天機器人。如欲部署範例聊天機器人,請至 使用 Heroku 建立範例聊天機器人

# 開始之前

請確認下列項目已完成:

  • 為聊天機器人建立 channel
  • 為聊天機器人設置 server,開發者可使用雲端平台服務,例如 Heroku

# 於 console 建立聊天機器人

此聊天機器人 app 需要一個 channel access token 以進行 API call,以及一個 webhook URL 以接收來自 LINE Platform 的 webhook payload。

# 發佈一個 channel access token

此 channel access token 為長期 token,須於 authorization header 中設定,以進行 API call。開發者可隨時透過 console 重新發佈 channel access token。

欲發佈 channel access token,請於 LINE Developers Console 中的 "Channel settings" 頁面點選 Issue

# 設定 webhook URL

此 webhook URL 為聊天機器人 server 的 endpoint,由此發出 webhook payload。

  1. 登入 LINE Developers Console 並點選 provider,以設定 Messaging API channel。

  2. 點選 Messaging API channel。

  3. 點選 Webhook URL 欄位的 Edit 按鈕,並輸入 Webhook URL (當 LINE platform 向聊天機器人發送 event 時,此 Webhook URL 為最終到達網址),接著點選 Update

  4. 點選 Use webhook 欄位的 Edit 按鈕,並點選 Enabled,接著點選 Update

    啟動 webhook 前,請先輸入 webhook URL

    如於輸入 webhook URL 前啟動 webhook,設定將自動切換為 "Disabled",且不會以訊息通知開發者。請重新整理頁面,確認已成功啟動 webhook。

  5. 點選 Verify

    如 webhook URL 接受 request,則畫面將顯示 "Success"。

    注意

    Webhook URL 必須使用 HTTPS,並持有由經授權的數位憑證認證機構 [authorized certificate authority (CA)][ca-list] 所發佈的 SSL 憑證。

Console Channel settings page: Webhook URL

# 將 LINE 官方帳號加為好友

前往 LINE Developers Console 掃描 "Channel settings" 頁面中的 QR code,將連接此聊天機器人 channel 的 LINE 官方帳號加為好友。

# 調整 security settings (非必須)

為改善資訊安全,開發者可於 LINE Developers Console 中的 "Security settings" 頁面指定 server 以呼叫 LINE Platform API。開發者可個別註冊 IP 位址,如有多個 server,開發者可使用 CIDR notation 註冊 network address。

Security settings page

# 確認 webhook 設定

當用戶與開發者的 LINE 官方帳號進行互動,例如將 LINE 官方帳號加為好友,或對 LINE 官方帳號發送訊息,LINE Platform 將傳送包含 webhook event object 的 HTTP POST request 至聊天機器人 server,此 server 可於 console 中的 "Webhook URL" 欄位指定。此 request header 包含 signature。

此部份說明如何確認 server 可接收 webhook event,以及如何驗證 webhook event 的 signature。

# 接收 webhook event

為確保 server 可接收 webhook event,請封鎖 LINE 官方帳號,並檢視 server log,以確認聊天機器人 server 接收到來自 LINE Platform 的 unfollow event。下方為 log 範例:

2017-07-21T09:18:46.755256+00:00 app[web.1]: 2017-07-21 09:18:46.737  INFO 4 --- [io-13386-exec-2] c.e.bot.spring.KitchenSinkController     : unfollowed this bot: UnfollowEvent(source=UserSource(userId=Uxxxxxxxxxx...), timestamp=2017-07-21T09:18:46.031Z)

確認 webhook 的運作正常後,請再次將 LINE 官方帳號加為好友。

# 驗證 signature

為確保 request 是由 LINE Platform 發送,聊天機器人 server 必須驗證 request header 中的 X-Line-Signature

  1. 使用 channel secret 作為 secret key,並以 HMAC-SHA256 演算法,從 request body 產生 Base64-encoded digest。
  2. 確認 request header 中的 X-Line-Signature signature 與 digest 相符。

下方範例說明如何於 Python® 中進行 signature validation:

import base64
import hashlib
import hmac

channel_secret = '...' # Channel secret string
body = '...' # Request body string
hash = hmac.new(channel_secret.encode('utf-8'),
    body.encode('utf-8'), hashlib.sha256).digest()
signature = base64.b64encode(hash)
# Compare X-Line-Signature request header and the signature

如欲取得更多相關資訊和 code sample,請查看 Messaging API reference 中的 Signature validation

# Webhook event 類型

當用戶與開發者的 LINE 官方帳號互動,例如將 LINE 官方帳號加為好友,或對 LINE 官方帳號發送訊息,LINE Platform 將發送包含 webhook event object 的 HTTP POST request 至聊天機器人 server,此 server 可於 console 中的 "Webhook URL" 欄位指定。開發者可依據 webhook event object 中的數據資料,控制聊天機器人的行為,並回應用戶。

下列 webhook event 可用於一對一聊天,如欲取得更多相關資訊,請查看 Messaging API reference 中的 Webhook event objects

Event 類型 說明
Message event 用戶已發送訊息。開發者可回覆此 event。
Follow event 開發者的 LINE 官方帳號已被加為好友 (或解除封鎖)。開發者可回覆此 event。
Unfollow event 開發者的 LINE 官方帳號已被用戶封鎖。
Join event 開發者帳號已加入群組或聊天室。開發者可回覆此 event。
Leave event 用戶已刪除群組中的聊天機器人,或聊天機器人已離開群組/聊天室。
Member join event 用戶已加入包含聊天機器人的群組或聊天室。開發者可回覆此 event。
Member leave vent 用戶已離開包含聊天機器人的群組或聊天室。
Postback event 用戶已執行 postback action。開發者可回覆此 event。
Beacon event 用戶已進入 LINE Beacon 裝置範圍。開發者可回覆此 event。如欲取得更多相關資訊,請查看 Using beacons
Account link event 用戶已將 LINE 帳號連接至提供者 (provider) 的服務帳號。開發者可回覆此 event。如欲取得更多相關資訊,請查看 Linking user accounts
Device link event (LINE Things) 用戶已將裝置與 LINE 連接。
Device unlink event (LINE Things) 用戶已解除裝置與 LINE 的連結。
LINE Things scenario execution event (LINE Things) 自動通訊情境已被執行。

請至 Group chats 查看群組聊天專屬的 webhook event。

# 發送 request 至 endpoint

請執行下列操作步驟:

# 發送 reply message

Reply messages 是為了回應用戶而發送的訊息,例如當用戶將開發者的 LINE 官方帳號加為好友,或對 LINE 官方帳號傳送訊息。開發者只能回覆包含 reply token 的 webhook events

如欲發送 reply message,請先將 HTTP POST request 發送至 /bot/message/reply endpoint。Authorization header 須包含 channel access token,且 body 須包含 reply token。單一 request 最多可發送 5 則 message objects

如欲取得更多相關資訊、了解可用 Messaging API 發送的訊息類型,請查看 Message types

# 範例

curl -v -X POST https://api.line.me/v2/bot/message/reply \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
    "replyToken":"nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
    "messages":[
        {
            "type":"text",
            "text":"Hello, user"
        },
        {
            "type":"text",
            "text":"May I help you?"
        }
    ]
}'

如欲取得更多相關資訊,請查看 Messaging API reference 中的 Send reply message

# 發送 push messages

Push messages 是可隨時發送給用戶的訊息。不同於 reply messages,push message 不需要 reply token。

依據接收訊息的用戶數量,將 POST request 發送至下列 endpoint:

Endpoint 接收用戶數量
/message/push 單一用戶
/message/multicast 多位用戶
/message/broadcast 所有已將開發者 LINE 官方帳號加為好友的用戶。

如欲發送訊息給特定用戶,請於 property 中指定 user ID to。可於 webhook event object 中查看接收訊息的用戶 ID:

單一 request 最多可發送 5 則 message objects

如欲取得更多相關資訊、了解可使用 Messaging API 發送的訊息類型,請查看 Message types

# 範例

curl -v -X POST https://api.line.me/v2/bot/message/multicast \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
    "to": ["U4af4980629...","U0c229f96c4..."],
    "messages":[
        {
            "type":"text",
            "text":"Hello, world1"
        },
        {
            "type":"text",
            "text":"Hello, world2"
        }
    ]
}'

如欲取得更多相關資訊,請至 Messaging API reference 查看下列內容:

# 取得用戶發送的內容

如欲取得用戶發送的圖片、影片、音訊,以及檔案,請將 HTTP GET request 發送至 /bot/message/{messageId}/content endpoint。

注意

用戶發送的內容將於特定時間後自動刪除。

# 範例

curl -v -X GET https://api-data.line.me/v2/bot/message/{messageId}/content \
-H 'Authorization: Bearer {channel access token}'

如欲取得更多相關資訊,請查看 Messaging API reference 中的 Get content

# 取得用戶資料

如用戶已將 LINE 官方帳號加為好友,或曾對 LINE 官方帳號發送訊息,開發者可將 HTTP GET request 傳送至 /bot/profile/{userId} endpoint 以取得 LINE 用戶資料。此 request 將回傳用戶的顯示名稱、user ID、顯示圖片之 URL,以及 status message 等,由用戶提供的內容。

# Example

curl -v -X GET https://api.line.me/v2/bot/profile/{userId} \
-H 'Authorization: Bearer {channel access token}'

如執行成功,將回傳 JSON object。

{
    "displayName":"LINE Botto",
    "userId":"U4af4980629...",
    "pictureUrl":"https://obs.line-apps.com/...",
    "statusMessage":"Hello world!"
}

如欲取得更多相關資訊,請查看 Messaging API reference 中的 Get profile

# 透過 LINE Official Account Manager 進行設定

LINE Official Account Manager 是用於管理 LINE Official Account 的工具。除了使用 Messaging API 提供的功能,開發者可透過 個人化 account page、創作 Timeline post,以及運用更多 LINE Official Account Manager 的功能,改善使用者體驗。

如欲取得 LINE Official Accounts 完整功能列表,請至 LINE for Business 網站。

# 個人化 account page

Account page 為用戶提供開發者 LINE 官方帳號的基本資訊。

請至 LINE Official Account Manager 為 LINE 官方帳號新增基本資訊。開發者可為顯示圖片、logo、按鈕,以及提供的資訊進行個人化。

LINE Official Account Manager account page

# 設定歡迎訊息 (非必須)

如於 console 中的 "Channel settings" 頁面開啟 "Greeting message" 選項,可至 LINE Official Account Manager 設定歡迎訊息,於用戶首次將此 LINE 官方帳號加為好友時發送。開發者亦可撰寫程式,回覆用戶傳送的 follow webhook event。

# 設定 auto reply 訊息 (非必須)

如於 console 中的 "Channel settings" 頁面開啟 "Auto reply message" 選項,可至 LINE Official Account Manager 設定自動回覆訊息,以回應用戶發送的訊息。如同透過程式設定聊天機器人,開發者亦可運用 Messaging API,用不同的方式回應各種 webhook events。

# 下一步

如欲取得更多相關資訊、了解 Messaging API 提供的功能,請查看 Messaging API documentation