Webhook を利用して通知を受け取る
こちらの機能はリリース前のβ機能となります
導入を検討されているお客様は営業担当までお問い合わせください。
また、今後予告なく仕様変更を伴う機能改善が行なわれる可能性があります。ご了承ください。
事前準備
以下の条件を満たす KARTE Apps を作成しておく
- 対象となる Webhook が登録されている
エンドポイントの実装例
Message Webhook の場合
ユーザーのメッセージを受け取る をご確認ください。
Assign Webhook の場合
ユーザーの担当者変更情報を受け取る をご確認ください。
HMAC Signature を付与した場合
assign webhook を例に、リクエストの送信元が KARTE であることを確認した後、webhook の内容を出力するサンプルコードを記載します。
const crypto = require('crypto');
const HMAC_ALGORITHM = 'sha256';
const CLIENT_ID = 'B5iJ+5SFT6EjYJiRMnjALqH84NOQCRYm';
const CLIENT_SECRET_KEY = 'NSWShy21RYUDCdbV5iLtjryR0vxWOo4W';
app.post('/hook/assign', function(req, res) {
const userAgent = req.get('User-Agent');
if (!userAgent || userAgent !== 'KARTE-Service-Account-Webhook/1.0') {
throw new Error('Invalid User-Agent');
} // User-Agentの確認
const authHeader = req.get('Authorization');
if (!authHeader || authHeader.indexOf('KARTE-HMAC-SHA256') === -1) {
throw new Error('Missing authorization header');
} // Autorizationが存在し、KARTE-HMAC-SHA256と記載があることを確認
const hmacSignature = authHeader.split(' ')[1];
const [credential, timestamp, signature] = hmacSignature.split(',');
const calculatedHMAC = crypto
.createHmac(HMAC_ALGORITHM, CLIENT_SECRET_KEY)
.update(JSON.stringify(req.body))
.digest('base64');
if (credential !== `Credential=${CLIENT_ID}` || signature !== `Signature=${calculatedHMAC}`) {
throw new Error('Invalid hamc signature');
} // HMAC署名の確認
const timestampFromKarte = Date.parse(timestamp.replace('Timestamp=', ''));
if (new Date() - timestampFromKarte > 60 * 5 * 1000) {
throw new Error('The request timestamp is more than five minutes from local time');
} // Timestampの確認
const {api_key, user_id, assignee} = req.body;
console.log(api_key) // api key
console.log(user_id) // user id
console.log(assignee) // assignee
// do something
});
Updated 9 months ago