Google Chat メッセージを送信する

このページでは、Google Chat アプリがユーザー操作に返信するメッセージを送信する方法について説明します。

  • スラッシュ コマンドからのお問い合わせフォーム。
    図 1.Chat アプリは、スラッシュ コマンドにテキスト メッセージとボタンで応答します。
  • ダイアログのお問い合わせフォーム。
    [Figure 2.]Chat アプリは、ユーザーが情報を入力できるダイアログを開きます。
  • フォーム入力ウィジェットを含むカード メッセージ。
    図 5.Chat アプリは、テキストとインタラクティブなカードを含むメッセージを送信します。

前提条件

HTTP

Google Chat を拡張する Google Workspace アドオン。作成するには、 HTTP クイックスタートを完了します。

Apps Script

Google Chat を拡張する Google Workspace アドオン。作成するには、 次の Apps Script クイックスタートを完了します。

メッセージを作成する

Chat アプリには、メッセージに次のいずれかを含めることができます。

  • ハイパーリンク、@メンション、絵文字を含むテキスト。
  • 1 つ以上のカード。メッセージに表示することも、新しいウィンドウでダイアログとして開くこともできます。
  • 1 つ以上の補助ウィジェット。メッセージ内のテキストまたはカードの後に表示されるボタンです。

メッセージの設計については、次の Google Chat API ドキュメントをご覧ください。

メッセージで応答

Chat アプリは、次のいずれかのトリガーまたはインタラクションに対してメッセージで応答できます。

それ以外の場合、Chat アプリは Google Chat API を呼び出してメッセージをプロアクティブに送信できます。

メッセージで返信するには、アクション DataActions を使用して CreateMessageAction オブジェクトを返します。

{ "hostAppDataAction": { "chatDataAction": { "createMessageAction": {
  "message": MESSAGE
}}}

MESSAGE は、Chat API の Message リソースに置き換えます。アクションの仕組みについて詳しくは、 Chat アクションをご覧ください。

次の例では、Chat アプリはスペースに追加されるたびにテキスト メッセージを作成して送信します。ユーザーがスペースに Chat アプリを追加したときにテキスト メッセージを送信するには、Chat アプリがアクション DataActions を返すことで、スペースに追加 トリガーに応答します。

Node.js

/**
 * Sends an onboarding message when the Chat app is added to a space.
 *
 * @param {Object} req The request object from Google Workspace add-on.
 * @param {Object} res The response object from the Chat app.
 */
exports.cymbalApp = function cymbalApp(req, res) {
  const chatEvent = req.body.chat;
  // Send an onboarding message when added to a Chat space
  if (chatEvent.addedToSpacePayload) {
    res.json({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
      text: 'Hi, Cymbal at your service. I help you manage your calendar' +
        'from Google Chat. Take a look at your schedule today by typing' +
        '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. ' +
        'To learn what else I can do, type `/help`.'
    }}}}});
  }
};

Python

from flask import Flask, request, json
app = Flask(__name__)

@app.route('/', methods=['POST'])
def cymbal_app():
  """Sends an onboarding message when the Chat app is added to a space.

  Returns:
    Mapping[str, Any]: The response object from the Chat app.
  """
  chat_event = request.get_json()["chat"]
  if "addedToSpacePayload" in chat_event:
    return json.jsonify({ "hostAppDataAction": { "chatDataAction": {
      "createMessageAction": { "message": {
        "text": 'Hi, Cymbal at your service. I help you manage your calendar' +
        'from Google Chat. Take a look at your schedule today by typing' +
        '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. ' +
        'To learn what else I can do, type `/help`.'
      }}
    }}})

Java

@SpringBootApplication
@RestController
public class App {
  public static void main(String[] args) {
    SpringApplication.run(App.class, args);
  }

  /*
   * Sends an onboarding message when the Chat app is added to a space.
   *
   * @return The response object from the Chat app.
   */
  @PostMapping("/")
  @ResponseBody
  public GenericJson onEvent(@RequestBody JsonNode event) throws Exception {
    JsonNode chatEvent = event.at("/chat");
    if(!chatEvent.at("/addedToSpacePayload").isEmpty()) {
      return new GenericJson() { {
        put("hostAppDataAction", new GenericJson() { {
          put("chatDataAction", new GenericJson() { {
            put("createMessageAction", new GenericJson() { {
              put("message", new Message().setText(
                "Hi, Cymbal at your service. I help you manage your calendar" +
                "from Google Chat. Take a look at your schedule today by typing" +
                "`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. " +
                "To learn what else I can do, type `/help`."
              ));
            } });
          } });
        } });
      } };
    }
  }
}

Apps Script

/**
 * Sends an onboarding message when the Chat app is added to a space.
 *
 * @param {Object} event The event object from Chat API.
 * @return {Object} Response from the Chat app.
 */
function onAddedToSpace(event) {
  return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
    text: 'Hi, Cymbal at your service. I help you manage your calendar' +
          'from Google Chat. Take a look at your schedule today by typing' +
          '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. ' +
          'To learn what else I can do, type `/help`.'
  }}}}};
}

このコードサンプルは、次のテキスト メッセージを返します。

オンボーディング メッセージの例。

メッセージで応答する方法のその他の例については、次のガイドをご覧ください。

メッセージを更新する

Chat アプリは、送信したメッセージを更新することもできます。たとえば、ユーザーがダイアログを送信した後や、メッセージ内のボタンをクリックした後にメッセージを更新する場合などです。

Chat アプリのメッセージを更新するには、次の例に示すように、 UpdateMessageAction を使用してアクション DataActions を返します。

{ "hostAppDataAction": { "chatDataAction": { "updateMessageAction": {
  "message": MESSAGE
}}}}

MESSAGE は、Chat API の Message リソースに置き換えます。

アクションの仕組みについて詳しくは、 Chat アクションをご覧ください。

Chat アプリは、ユーザーからのメッセージを更新して、送信したリンクのプレビューを返すこともできます。詳しくは、 Google Chat メッセージでリンクをプレビューするをご覧ください。

Google Chat API を使用してインタラクションに返信するか、プロアクティブなメッセージを送信する

Chat アプリは、アドオン アクションを返すのではなく、Google Chat API を使用してインタラクションに応答する必要がある場合があります。たとえば、Chat アプリは Google Chat API を呼び出して、次のいずれかを行う必要があります。

  • スケジュールに基づいてメッセージを送信する、または外部リソースの変更に関するメッセージを送信する。たとえば、新しい問題やケースに関する通知などです。
  • インタラクションから 30 秒以上経過してから返信する。たとえば、長時間実行されるタスクが完了した後にメッセージで応答する場合などです。
  • インタラクションが発生したスペースの外部にメッセージを送信する。
  • Chat ユーザーに代わってメッセージを送信する。

Chat API を使用してメッセージを送信するには、認証を設定し、Message リソースで create() メソッドを呼び出す必要があります。手順については、 Google Chat API を使用してメッセージを送信するをご覧ください。