メッセージ受信 - 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 を用います。 確認プロセスは以下を参照してください。
API ID を秘密鍵として利用し、メッセージサーバーから送られた body の内容を HMAC-SHA256 アルゴリズムでエンコードします。
上記の HMAC-SHA256 アルゴリズムでエンコードした結果を BASE64 エンコードします。
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 の 「利用開始」の文字列は各メンバーの言語に合わせて変更されます。