Webhookは、1つ以上のイベントが発生したときにThriveDeskがあなたのサーバー上のスクリプトを呼び出す方法であり、あなたが好きなように反応できるようにします。Webhookは、イベントリスナーまたはプッシュ通知として考えることができます。
利用可能なイベント:
利用可能なイベント:
各リクエストボディは、以下の表にリンクされたオブジェクト形式を使用します。すべてのWebhookはv1ペイロードを使用します。
| イベント名 | イベントタイプ |
|---|---|
| 会話が作成されました | conversation.created |
| 会話が割り当てられました | conversation.assigned |
| 会話にメモが追加されました | conversation.note.added |
| ユーザーが会話に返信しました | conversation.agent.replied |
| 顧客が会話に返信しました | conversation.contact.replied |
| 会話のステータスが更新されました | conversation.status.updated |
| 会話のタグが追加/更新されました | conversation.tags.updated |
| 会話が移動しました | conversation.moved |
レスポンス:
サンプルレスポンスボディはここに示されています:
{
"eventType": "conversation.tags.updated",
"data": {
"type": "conversation",
"id": "dea1fca0-6529-43fd-91df-044afbf2a1d4",
"ticketId": 26,
"subject": "Duis aute irure dolor in reprehenderit in voluptate velit",
"excerpt": "Cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat...",
"status": "アクティブ",
"priority": "ノーマル",
"active": true,
"createdAt": "2021-06-29T13:04:05.000000Z",
"tags": [
"Beatae",
"Consequuntur",
"Cumque"
],
"inbox": {
"id": "f86385ff-9ce5-456a-a207-0bbf4ec59c0e",
"name": "Dev",
"inboxAddress": "example@app.thrivedesk.email",
"connectedEmailAddress": "example@mail.com"
},
"cc": [
"examplecc@mail.com"
],
"bcc": [
"examplebcc@mail.com"
],
"assignedTo": {
"id": "050cbdb6-a973-40df-a5dd-b7f72c993055",
"firstName": "Assigned",
"lastName": "Example",
"email": "exampleassigned@mail.com"
},
"contact": {
"id": "925298d4-a7d9-4d6b-8a01-10b2dea439aa",
"name": "example",
"email": "example@mail.com",
"avatar": null
},
"hasAttachment": false,
"hasInlineAttachment": false,
"threadsCount": 3,
"threads": [
{
"id": "967b48b3-32d7-4d63-81cc-4f6d04d879b1",
"type": "Email",
"status": "アクティブ",
"direction": "Outbound",
"htmlBody": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut...",
"textBody": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut...",
"createdAt": "2021-06-29T13:04:05.000000Z",
"updatedAt": "2021-06-29T13:04:05.000000Z",
"viewedAt": null
},
{
"id": "e84aea7e-65ee-4b5a-a8d0-4f216192847e",
"type": "Email",
"status": "アクティブ",
"direction": "Outbound",
"htmlBody": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea...",
"textBody": null,
"createdAt": "2021-06-29T13:04:46.000000Z",
"updatedAt": "2021-06-29T13:04:46.000000Z",
"viewedAt": null
},
{
"id": "ce7946ae-86c4-4891-af2a-485d984a6a74",
"type": "Note",
"status": "アクティブ",
"direction": null,
"htmlBody": "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla...",
"textBody": null,
"createdAt": "2021-06-29T13:04:59.000000Z",
"updatedAt": "2021-06-29T13:04:59.000000Z",
"viewedAt": null
}
]
}
}レスポンスフィールド(会話):
| パス | タイプ | 説明 |
|---|---|---|
| eventType | String | イベントの種類、利用可能なイベントの1つ |
| type | String | データの種類、例: 会話 |
| data | Object | 主なレスポンスボディ |
| id | String | 一意の識別子 |
| ticketId | Integer | 一意のチケット識別子 |
| subject | String | 会話の件名 |
| excerpt | String | 会話の抜粋 |
| status | String | 会話のステータス、以下のいずれか: アクティブ 保留中 クローズ |
| priority | String | 会話の優先度、以下のいずれか: 高 普通 低 |
| active | Boolean | 会話のアクティブステータス |
| createdAt | String | 会話が作成されたUTC時間 |
| tags | Array | 以下のフィールドを持つタグのリスト: name |
| inbox | Object | 会話の受信トレイ情報、以下のフィールドを持つ: id name inboxAddress connectedEmailAddress |
| cc | Array | CCされたメールのリスト |
| bcc | Array | BCCされたメールのリスト |
| assignedTo | Object | 会話が割り当てられている人、以下のフィールドを持つ: id firstName lastName |
| contactInfo | Object | 会話に関連する連絡先情報を含むオブジェクト、以下のフィールドを持つ: id name avatar |
| hasAttachment | Boolean | 会話に添付ファイルがあるかどうか |
| hasInlineAttachment | Boolean | 会話にインライン添付ファイルがあるかどうか |
| isDraft | Boolean | 会話がドラフトかどうか |
| threadsCount | Integer | 会話が持つスレッドの数 |
| threads | Array | 以下のフィールドを持つスレッドのリスト: id type (Email, Note, Draft) status Direction (Inbound, Outbound ) htmlBody textBody createdAt updatedAt viewedAt |
ヘッダー:
各Webhookには1つのThriveDeskヘッダーが含まれています:
X-TD-SIGNATURE: ThriveDeskによって生成された計算された署名。リクエストが有効かどうかを知るために使用されます。
検証:
Webhookは、デジタル署名を計算することでThriveDeskからのものであることを確認できます。各Webhookリクエストには、指定された秘密鍵を使用して生成されたX-TD-SIGNATUREヘッダーと、リクエストで送信されたJSONエンコードされたペイロードデータ(レスポンスデータのデータフィールドのみ)が含まれています。
リクエストがThriveDeskからのものであるかどうかを確認するには、HMACハッシュを計算し、それをリクエストで送信されたヘッダー値と比較します。計算された署名が一致すれば、リクエストがThriveDeskから送信されたことが確実です。
署名は、ThriveDeskによってサーバーに渡された生のリクエストボディに基づいて計算されます。これは、ペイロードに非ASCII文字が含まれている場合、ThriveDeskによって渡されたエスケープされた音訳文字列に基づいて署名を計算する必要があることを意味します。一般的には、ASCIIデータを主に扱う人々にとっても、これをベストプラクティスとして推奨します。
PHP
function isFromThriveDesk($data, $signature, $secret_key) { $calculate = base64_encode(hash_hmac('sha1', json_encode($data), $secret_key, true)); return $signature == $calculate; } /** * $request->get('data') * * リクエストボディのデータフィールドのみ */ if (isFromThriveDesk($request->get('data'), $signature, $secret_key)) { // 何かをする }
Node JS