メインコンテンツへスキップ
本文書では、ボットを通じて送信するチャットのタイプとデータ形式、およびボットが受信するチャットのデータ形式について詳しく説明します。

ボットによるチャット送信

チャットタイプ

ボットチャットの送信方法は 2 種類あり、API 経由でボットチャットを送信する方法と、Webhook 経由でボットチャットを送信する方法があります。それぞれ、サポートされるチャットタイプとデータ形式が異なります。
API 経由でのチャット送信を推奨します。

方法 1:API 経由

重要

  • ユーザーとボットの個別チャットにおけるボットチャット:画像・音声・ファイルの送受信に対応しています。
  • グループチャットにおけるボットチャット:画像・音声・動画・ファイルの送信に対応していますが、グループチャット内でユーザーがボットに対して音声・動画・ファイルを@メンションで送信することはできません

対応 API

データ形式

  • チャットテンプレート Key:チャットテンプレート Key とは、開発者がチャットを送信する際に使用する一意の識別子です。プログラムコードを記述する際に、事前に設定したチャットテンプレートを素早く参照できます。
  • チャットテンプレートパラメータ:チャットテンプレート内で事前定義されたプレースホルダーを置き換える実データです。例えば、sampleText というチャットテンプレート Key を使用する場合、content フィールドの値を定義する必要があります。
  • :社内アプリのボットがグループ内テキストタイプを送信する HTTP のサンプルコードを提供します:
    • チャットテンプレート Key: "msgKey" : "sampleText"
    • チャットテンプレートパラメータ: "msgParam" : "{\"content\":\"DingTalk、進歩を起こす\"}"
詳細は ボットによるグループチャットメッセージの送信 を参照してください。

Markdown でサポートされる構文

チャットタイプ sampleMarkdown における Markdown 構文の補足説明です。

方法 2:Webhook 経由

Webhook 方式はグループチャットでのみ対応しています。
Webhook によるチャット送信の実装方法については、ボットの返信/チャット送信 および カスタムボットの作成 を参照してください。

テキスト text タイプ

このタイプは@メンションには対応していません。

Markdown タイプ

現在は Markdown 構文のサブセットのみ対応しており、対応する要素は以下の通りです:

ActionCard タイプ

  • 全体遷移 ActionCard タイプ
  • 独立遷移 ActionCard タイプ

FeedCard タイプ

このタイプは@メンションには対応していません。
グループにチャットを返信したくない場合は、以下の形式で返信します:

ボットによるチャット受信

ユーザーがグループボットを@メンションした場合、またはボットと個別チャットでメッセージを送信した場合、DingTalk はボットが受信したチャットを、開発者が設定したボットのコールバックサービスへ送信します。

チャット本文

本例では text テキストタイプを例に説明します。HTTP コールバック方式を使用する場合、POST リクエストで DingTalk からプッシュされたチャットを受信します。

チャットタイプ

ボットは現在、テキスト・音声・画像・ファイル・動画・リッチテキストタイプのチャット受信に対応しています。以下は、ボットが受信する各チャットタイプのフィールドの説明です。チャットタイプとチャット本文のフィールドが異なる以外は、その他のパラメータフィールドは上記のテーブルと同じです。

テキストチャット

リッチテキストチャット

画像メッセージ

音声チャット

グループチャットにおいて、グループメンバーがボットを @メンションした場合、ボットは音声チャットの受信に対応していません

動画メッセージ

グループチャットにおいて、グループメンバーがボットを @メンションした場合、ボットは動画メッセージの受信に対応していません

ファイルメッセージ

グループチャットにおいて、グループメンバーがボットを @メンションした場合、ボットはファイルメッセージの受信に対応していません

関連情報

社内アプリのボット作成 時に、チャット受信モードで HTTP モードを選択した場合、ボットの利用中、ボットがチャットを受信した際に、上記のチャット本文に加えて、以下の形式の HTTP header パラメータが存在します:
header 内の timestamp と sign を検証し、DingTalk からの正当なリクエストであるかを判断する必要があります。これは、他者が DingTalk を偽装して開発者の HTTPS サービスにデータを送信することを防ぐためです。具体的な検証ロジックは以下の通りです:
  • timestamp とシステムの現在のタイムスタンプの差が 1 時間以上ある場合、不正なリクエストと見なします。
  • sign が開発者自身が計算した結果と一致しない場合、不正なリクエストと見なします。
timestamp と sign の両方の検証が通過した場合のみ、DingTalk からの正当なリクエストと見なすことができます。 HmacSHA256 アルゴリズムを使用して署名を計算し、Base64 エンコードを行うことで、最終的な署名値を取得します。例は以下の通りです:

エラーコード

ボットの Webhook と Stream の使用量が上限を超えた場合、以下のような内容が表示されます:

エラーの状態

グループチャット
個別チャット

エラーの説明

関連ドキュメント

  • 社内ボットによるグループチャットメッセージの送信
  • 社内ボットによる個別チャットメッセージの送信
  • カスタムボットによるグループチャットメッセージの送信
  • グループテンプレートボットによるグループチャットメッセージの送信