メッセージ受信 - Callback 形式

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

    現在、Callback イベントの種類 (type) は message / join / leave / joined / left があります。 今後、イベントの種類は追加される可能性があります。

    タイプ 説明
    message メンバーからのメッセージ
    join Bot が複数人トークルームに招待された
    leave Bot が複数人トークルームから退室した
    joined メンバーが Bot のいる複数人トークルームに参加した
    left メンバーが Bot のいる複数人トークルームから退室した
    postback postback タイプのメッセージ

    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, … }
    

    メッセージサーバーから送信されたメッセージの改ざん有無を確認するには、ヘッダーに含まれる X-WORKS-Signature を用います。 確認プロセスは以下を参照してください。

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

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

    3. 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 の 「利用開始」の文字列は各メンバーの言語に合わせて変更されます。