Bot が受信したメッセージやイベント情報を、Callback としてボットサーバーが受け取ることができます。
Developer Console > Bot で指定した Callback URL(ボットサーバー)に対して、LINE WORKS のメッセージサーバーからイベントオブジェクトを含む HTTPS POST リクエストが送られます。
注意
- Callback Url にはセキュリティ上の理由から自己署名された証明書は許可されていません。
- 許可された認証機関のリストについては CAリスト を参照してください。
Callback イベントリクエストからレスポンスまでの流れを図にすると以下のようになります。
参考
- HTTPS POST リクエストの処理が後続のイベントの処理に遅延を与えないよう、イベント処理を非同期化することを推奨します。
トークルームへの参加やメッセージの送信などのイベントが発生すると、Callback URL(ボットサーバー)に対して、LINE WORKS のメッセージサーバーから HTTPS POST リクエストが送信されます。
| フィールド名 | 説明 |
|---|---|
| Content-Type | リクエストのコンテンツタイプ 固定で "application/json; charset=UTF-8" が入ります。 |
| X-WORKS-BotId | Bot ID |
| X-WORKS-Signature | 署名検証に使う署名 |
注意
- リクエストヘッダーのフィールド名は大文字小文字を区別せずに扱ってください。表記が予告なく変更される可能性があります。
- 参考: https://datatracker.ietf.org/doc/html/rfc7230#section-3.2
送信元情報 (メンバーのユーザー ID userId やトークルーム ID channelId など) やメッセージ内容等を含んだ JSON 形式になっています。
例. メッセージイベントの場合
{ "type": "message", "source": { "userId": "c72af563-0f21-4736-11e4-045237113344", "channelId": "12345a12-b12c-12d3-e123fghijkl", "domainId": 40029600 }, "issuedTime": "2022-01-04T05:16:05.716Z", "content": { "type": "text", "text": "hello" }}内容は Callback イベントタイプ によって異なります。詳しくはそれぞれのページを参照してください。
注意
- Bot サーバーが受信した HTTPS POST リクエストは、LINE WORKS プラットフォームから送信されていない危険なリクエストの可能性があります。
- 必ず署名を検証してから、イベントオブジェクトを処理してください。
受け取ったリクエストが LINE WORKS のメッセージングサーバーから正しく送られたものであることを確認するために、リクエストヘッダーの X-WORKS-Signature に含まれる署名を検証します。
注意
- Bot Secret を外部に流出させないよう注意してください。
Java で署名検証を実装する例は以下の通りです。
String botSecret = ...;String httpRequestBody = ...; // Request body stringSecretKeySpec key = new SecretKeySpec(botSecret.getBytes(), "HmacSHA256");Mac mac = Mac.getInstance("HmacSHA256");mac.init(key);byte[] source = httpRequestBody.getBytes("UTF-8");String signature = Base64.encodeBase64String(mac.doFinal(source));// Compare X-WORKS-Signature request header and the signature// signature == headers_signaturePython の実装例は以下の通りです。
import base64import hashlibimport hmacbot_secret = '...' # Bot Secret stringbody = '...' # Request body stringhash = hmac.new(bot_secret.encode('utf-8'), body.encode('utf-8'), hashlib.sha256).digest()signature = base64.b64encode(hash)# Compare X-WORKS-Signature request header and the signature# signature == headers_signatureCallback イベントの種類は以下の通りです。Bot との 1 対 1 トークの場合と複数人トークの場合とで受け取れるイベントが異なります。
| タイプ | 説明 | 1 対 1 トーク | 複数人トーク |
|---|---|---|---|
| メッセージイベント (message) | メンバーからメッセージが送信されたことを示すイベントです。 | ○ | ○ |
| ポストバックイベント (postback) | ポストバックアクションが実行されたことを示すイベントです。 | ○ | ○ |
| 参加イベント (join) | Bot が複数人トークルームに招待されたことを示すイベントです。 | ✕ | ○ |
| 退室イベント (leave) | Bot が複数人トークルームから退室したことを示すイベントです。 | ✕ | ○ |
| メンバー参加イベント (joined) | メンバーが Bot のいる複数人トークルームに参加したことを示すイベントです。 | ✕ | ○ |
| メンバー退室イベント (left) | メンバーが Bot のいる複数人トークルームから退室したことを示すイベントです。 | ✕ | ○ |
| 開始イベント (begin) | Bot とメンバーが 1:1 トークルームを開始したことを示すイベントです。 | ○ | ✕ |
| 終了イベント (end) | Bot とメンバーの 1:1 トークルームが終了したことを示すイベントです。 | ○ | ✕ |
それぞれのイベントについての詳細やオブジェクトの形式については各ページを参照してください。
イベントの種類は、今後、追加される可能性があります。
イベントのオブジェクトには、送信者であるメンバーのユーザー ID userId が含まれています。このユーザー ID を使用すると、そのメンバーの名前やメールアドレスなどの情報を取得できます。
ユーザー情報の取得は ユーザー情報の取得 を使用します。アクセストークン取得時に指定した Scope によって取得できる情報は異なります。
| 取得できる情報 | Scope |
|---|---|
| メールアドレスのみ | user.email.read |
| プロフィール情報 | user.profile.read |
| 全てのユーザー情報 | user.read |
詳しくは各 API のページを参照してください。
Bot からのリプライは Bot API のメッセージ送信を用いて行います。詳しくは メッセージ を参照してください。
Callback を受け取ったボットサーバーから LINE WORKS のメッセージングサーバーへのレスポンスは、ステータスコード 200 で返してください。