メッセージ受信 - Callback 形式

    メンバーがトーク Bot に送信したメッセージや Bot が受け取ったイベント情報を、受信サーバーへ転送します。

    Callback イベントの種類 (type) は message, join, leave, joined, left があり、今後も追加される予定です。

    タイプ 説明
    message 一般メッセージ。
    join Bot を複数人トークルームに招待。
    leave Bot が複数人トークルームから退室。
    joined メンバーが Bot の属するトークルームに参加。
    left メンバーが Bot の属するトークルームから退室。

    Header Information

    ヘッダー情報は、下記の通りです。

    • Protocol: HTTPS
    • HTTP Method: POST
    • Content type: application/json; charset=UTF-8

    使用サンプルは、下記の通りです。

    POST /callback HTTP/1.1
    Host: YOUR_SERVER_HOST_NAME
    Content-type: application/json; charset=UTF-8
    X-WORKS-Signature: /xZcekiWAICrwq5Dc+wBwBf6Gq33il-jRAo01KAVO3/U=
    X-WORKS-BotNo: 123
    
    { "type": 0, … }
    

    LINE WORKS メッセージサーバーから送信されたメッセージの改ざん有無を確認するプロセスは以下を参照してください。

    1. API ID を秘密鍵として利用し、メッセージサーバーから送られた body の内容を HMAC-SHA256 アルゴリズムでエンコードします。

    2. 上記の HMAC-SHA256 アルゴリズムでエンコードした結果を BASE64 エンコードします。

    3. X-WORKS-Signature のヘッダー値と比較し、同一であればメッセージは改ざんされていないと判断できます。

    X-WORKS-Signature ヘッダー情報は、メッセージの改ざん有無を確認する手段です。仮にこの値が異なる場合、メッセージが改ざんされている恐れがあります。

    API ID を外部に流出させないよう注意してください。

    以下のサンプルコードは、Java でメッセージの改ざん有無を確認する例です。

    String apiId = ...;        // API ID string
    String httpRequestBody = ...; // Request body string
    SecretKeySpec key = new SecretKeySpec(apiId.getBytes(), "HmacSHA256");
    Mac mac = Mac.getInstance("HmacSHA256");
    mac.init(key);
    byte[] source = httpRequestBody.getBytes("UTF-8");
    String signature = Base64.encodeBase64String(mac.doFinal(source));
    

    Bot の番号は X-WORKS-BotNo としてヘッダー情報に含まれています。

    Botがトークルームに招待された際の Callback メッセージ

    Bot のドメイン登録時に Bot リストに公開するよう設定した場合、メンバー側から Bot を選んで話しかけることができます。

    メンバーと Bot との初回トークを開始する画面で「利用開始」を押すと、自動的に「利用開始」というメッセージが送信されます。このとき、以下のように Bot 側には callback として content.postback に "start" を含めたメッセージが渡されます。

    {  
       "type":"message",
       "source":{  
          "accountId":"manager@example.com"
       },
       "createdTime":1537510318191,
       "content":{  
          "type":"text",
          "text":"利用開始",
          "postback":"start"
       }
    }
    

    参考

    • 上記のサンプルで content.text の 「利用開始」の文字列は各メンバーの言語に合わせて変更されます。