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
email
contactInfo Object 会話に関連する連絡先情報を含むオブジェクト、以下のフィールドを持つ:
id
name
email
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ヘッダーが含まれています:

検証:

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