Ссылки для предварительного просмотра

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Чтобы предотвратить переключение контекста, когда пользователи делятся ссылкой в ​​Google Chat, ваше приложение Chat может предварительно просмотреть ссылку, прикрепив к их сообщению карточку , которая дает больше информации и позволяет людям выполнять действия прямо из Google Chat.

Например, представьте пространство чата Google, в котором есть все агенты по обслуживанию клиентов компании, а также приложение чата под названием Case-y. Агенты часто делятся ссылками на обращения в службу поддержки клиентов в пространстве чата, и каждый раз, когда они делают это, их коллеги должны открывать ссылку на обращение, чтобы просмотреть такие сведения, как уполномоченный, статус и тема. Аналогичным образом, если кто-то хочет стать владельцем обращения или изменить статус, ему необходимо открыть ссылку.

Предварительный просмотр ссылки позволяет встроенному в пространство приложению Chat Case-y прикреплять карточку с указанием исполнителя, статуса и темы всякий раз, когда кто-то делится ссылкой на дело. Кнопки на карточке позволяют агентам взять на себя ответственность за дело и изменить статус прямо из потока чата.

Когда кто-то добавляет ссылку в свое сообщение, появляется чип, который сообщает им, что приложение чата может предварительно просмотреть ссылку.

Чип, указывающий, что приложение чата может предварительно просмотреть ссылку

После отправки сообщения ссылка отправляется в приложение Chat, которое затем генерирует и прикрепляет карточку к сообщению пользователя.

Приложение чата, предварительное просмотр ссылки путем прикрепления карточки к сообщению

Наряду со ссылкой карточка предоставляет дополнительную информацию о ссылке, включая интерактивные элементы, такие как кнопки. Ваше приложение для чата может обновлять прикрепленную карточку в ответ на взаимодействие с пользователем, например нажатие кнопки.

Если кто-то не хочет, чтобы приложение Chat предварительно просматривало его ссылку, прикрепив карточку к своему сообщению, он может запретить предварительный просмотр, нажав кнопку « » на чипе предварительного просмотра. Пользователи могут удалить прикрепленную карточку в любое время, щелкнув Удалить предварительный просмотр .

Зарегистрируйте определенные ссылки, такие как example.com , support.example.com и support.example.com/cases/ , в качестве шаблонов URL-адресов на странице конфигурации вашего приложения для чата в Google Cloud Console, чтобы ваше приложение для чата могло их просмотреть.

Меню конфигурации превью ссылок

  1. Откройте облачную консоль Google .
  2. Рядом с «Google Cloud Platform» нажмите стрелку вниз и откройте проект своего приложения для чата.
  3. В поле поиска введите Google Chat API и нажмите Google Chat API .
  4. Щелкните Управление > Конфигурация .
  5. В разделе «Предварительный просмотр ссылок» добавьте или измените шаблон URL.
    1. Чтобы настроить предварительный просмотр ссылок для нового шаблона URL, нажмите « Добавить шаблон URL » .
    2. Чтобы изменить конфигурацию существующего шаблона URL, щелкните стрелку вниз .
  6. В поле Шаблон хоста введите домен шаблона URL. Приложение Chat будет предварительно просматривать ссылки на этот домен.

    Чтобы ссылки предварительного просмотра приложения Chat для определенного субдомена, например subdomain.example.com , включали субдомен.

    Чтобы ссылки для предварительного просмотра приложения Chat были доступны для всего домена, укажите в качестве субдомена подстановочный знак со звездочкой (*). Например, *.example.com соответствует subdomain.example.com и any.number.of.subdomains.example.com .

  7. В поле Префикс пути введите путь для добавления к домену шаблона хоста.

    Чтобы сопоставить все URL-адреса в домене шаблона хоста, оставьте префикс пути пустым.

    Например, если шаблон хоста — support.example.com , чтобы сопоставить URL-адреса для запросов, размещенных на support.example.com/cases/ , введите cases/ .

  8. Щелкните Готово .

  9. Нажмите Сохранить .

Теперь всякий раз, когда кто-то включает ссылку, которая соответствует шаблону URL-адреса предварительного просмотра ссылки, на сообщение в пространстве чата, которое включает ваше приложение чата, ваше приложение предварительно просматривает ссылку.

После того как вы настроите предварительный просмотр для данной ссылки, ваше приложение чата сможет распознавать и предварительно просматривать ссылку, добавляя к ней дополнительную информацию.

Внутри областей чата, включающих ваше приложение чата, когда чье-то сообщение содержит ссылку, соответствующую шаблону URL-адреса предварительного просмотра ссылки, ссылка отправляется в ваше приложение чата в качестве атрибута matchedUrl в объекте message :

JSON

message {

  . . . // other message attributes redacted

  "matchedUrl": {
     "url": "https://support.example.com/cases/case123"
   },

  . . . // other message attributes redacted

}

Проверяя наличие атрибута matchedUrl в объекте message , ваше приложение Chat может добавить информацию в сообщение с предварительно просмотренной ссылкой. Ваше приложение чата может либо ответить простым текстовым сообщением, либо прикрепить карточку .

Ответить текстовым сообщением

Для простых ответов ваше приложение Chat может предварительно просмотреть ссылку, ответив простым текстовым сообщением на ссылку. В этом примере прикрепляется сообщение, в котором повторяется URL-адрес ссылки, соответствующий шаблону URL-адреса предварительного просмотра ссылки.

Node.js

node/preview-link/simple-text-message.js
/**
 * Responds to messages that have links whose URLs match URL patterns
 * configured for link previewing.
 *
 * @param {Object} req Request sent from Google Chat.
 * @param {Object} res Response to send back.
 */
exports.onMessage = (req, res) => {
  if (req.method === 'GET' || !req.body.message) {
    res.send(
        'Hello! This function is meant to be used in a Google Chat Space.');
  }

  // Checks for the presence of event.message.matchedUrl and responds with a
  // text message if present
  if (req.body.message.matchedUrl) {
    res.json({
      'text': 'req.body.message.matchedUrl.url: ' +
                req.body.message.matchedUrl.url,
    });
  }

  // If the Chat app doesn’t detect a link preview URL pattern, it says so.
  res.json({'text': 'No matchedUrl detected.'});
};

Скрипт приложений

приложения-скрипт/превью-ссылка/простое-текстовое-сообщение.gs
/**
 * Responds to messages that have links whose URLs match URL patterns
 * configured for link previewing.
 *
 * @param {Object} event The event object from Chat API.
 *
 * @return {Object} Response from the Chat app attached to the message with
 * the previewed link.
 */
function onMessage(event) {
  // Checks for the presence of event.message.matchedUrl and responds with a
  // text message if present
  if (event.message.matchedUrl) {
    return {
      'text': 'event.message.matchedUrl.url: ' + event.message.matchedUrl.url,
    };
  }

  // If the Chat app doesn’t detect a link preview URL pattern, it says so.
  return {'text': 'No matchedUrl detected.'};
}

Прикрепить карту

Чтобы прикрепить карточку к предварительно просмотренной ссылке, верните ActionResponse типа UPDATE_USER_MESSAGE_CARDS . Этот пример прикрепляет простую карту.

Приложение чата, предварительное просмотр ссылки путем прикрепления карточки к сообщению

Node.js

узел/превью-ссылка/attach-card.js
/**
 * Responds to messages that have links whose URLs match URL patterns
 * configured for link previewing.
 *
 * @param {Object} req Request sent from Google Chat.
 * @param {Object} res Response to send back.
 */
exports.onMessage = (req, res) => {
  if (req.method === 'GET' || !req.body.message) {
    res.send(
        'Hello! This function is meant to be used in a Google Chat Space.');
  }

  // Checks for the presence of event.message.matchedUrl and attaches a card
  // if present
  if (req.body.message.matchedUrl) {
    res.json({
      'actionResponse': {'type': 'UPDATE_USER_MESSAGE_CARDS'},
      'cards': [
        {
          'header': {
            'title': 'Example Customer Service Case',
            'subtitle': 'Case basics',
          },
          'sections': [
            {
              'widgets': [
                {'keyValue': {'topLabel': 'Case ID', 'content': 'case123'}},
                {'keyValue': {'topLabel': 'Assignee', 'content': 'Charlie'}},
                {'keyValue': {'topLabel': 'Status', 'content': 'Open'}},
                {'keyValue': {
                  'topLabel': 'Subject', 'content': 'It won"t turn on...',
                }},
              ],
            },
            {
              'widgets': [
                {
                  'buttons': [
                    {
                      'textButton': {
                        'text': 'OPEN CASE',
                        'onClick': {
                          'openLink': {
                            'url': 'https://support.example.com/orders/case123',
                          },
                        },
                      },
                    },
                    {
                      'textButton': {
                        'text': 'RESOLVE CASE',
                        'onClick': {
                          'openLink': {
                            'url': 'https://support.example.com/orders/case123?resolved=y',
                          },
                        },
                      },
                    },
                    {
                      'textButton': {
                        'text': 'ASSIGN TO ME',
                        'onClick': {
                          'action': {
                            'actionMethodName': 'assign',
                          },
                        },
                      },
                    },
                  ],
                },
              ],
            },
          ],
        },
      ],
    });
  }

  // If the Chat app doesn’t detect a link preview URL pattern, it says so.
  res.json({'text': 'No matchedUrl detected.'});
};

Скрипт приложений

apps-script/preview-link/attach-card.gs
/**
 * Responds to messages that have links whose URLs match URL patterns
 * configured for link previewing.
 *
 * @param {Object} event The event object from Chat API.
 * @return {Object} Response from the Chat app attached to the message with
 * the previewed link.
 */
function onMessage(event) {
  // Checks for the presence of event.message.matchedUrl and attaches a card
  // if present
  if (event.message.matchedUrl) {
    return {
      'actionResponse': {
        'type': 'UPDATE_USER_MESSAGE_CARDS',
      },
      'cards': [
        {
          'header': {
            'title': 'Example Customer Service Case',
            'subtitle': 'Case basics',
          },
          'sections': [{
            'widgets': [
              {'keyValue': {'topLabel': 'Case ID', 'content': 'case123'}},
              {'keyValue': {'topLabel': 'Assignee', 'content': 'Charlie'}},
              {'keyValue': {'topLabel': 'Status', 'content': 'Open'}},
              {
                'keyValue': {
                  'topLabel': 'Subject', 'content': 'It won\'t turn on...',
                },
              },
            ],
          },
          {
            'widgets': [{
              'buttons': [
                {
                  'textButton': {
                    'text': 'OPEN CASE',
                    'onClick': {
                      'openLink': {
                        'url': 'https://support.example.com/orders/case123',
                      },
                    },
                  },
                },
                {
                  'textButton': {
                    'text': 'RESOLVE CASE',
                    'onClick': {
                      'openLink': {
                        'url': 'https://support.example.com/orders/case123?resolved=y',
                      },
                    },
                  },
                },
                {
                  'textButton': {
                    'text': 'ASSIGN TO ME',
                    'onClick': {
                      'action': {
                        'actionMethodName': 'assign',
                      },
                    },
                  },
                },
              ],
            },
            ],
          },
          ],
        },
      ],
    };
  }

  // If the Chat app doesn’t detect a link preview URL pattern, it says so.
  return {'text': 'No matchedUrl detected.'};
}

Обновить карту

Чтобы обновить карточку, прикрепленную к предварительно просмотренной ссылке, верните ActionResponse типа UPDATE_USER_MESSAGE_CARDS . Карточки, прикрепленные к предварительным ссылкам, обновляются только в ответ на синхронные запросы от событий чата . Асинхронные запросы на обновление карточек, прикрепленных к ссылке для предварительного просмотра, через REST API чата не поддерживаются.

Предварительный просмотр ссылок не поддерживает возврат ActionResponse типа UPDATE_MESSAGE . Поскольку UPDATE_MESSAGE обновляет все сообщение, а не только карточку, оно работает только в том случае, если приложение Chat создало исходное сообщение. Предварительный просмотр ссылки прикрепляет карточку к созданному пользователем сообщению, поэтому у приложения Chat нет разрешения на ее обновление.

Чтобы функция обновляла как созданные пользователем, так и созданные приложением карточки в потоке чата, динамически задайте ActionResponse в зависимости от того, создало ли сообщение приложение чата или пользователь.

  • Если пользователь создал сообщение, установите для ActionResponse значение UPDATE_USER_MESSAGE_CARDS .
  • Если приложение чата создало сообщение, установите для ActionResponse значение UPDATE_MESSAGE .

Это можно сделать двумя способами: указать и проверить настраиваемое actionMethodName как часть свойства onclick прикрепленной карточки (которое идентифицирует сообщение как созданное пользователем) или проверить, было ли сообщение создано пользователем.

Вариант 1. Проверка на actionMethodName

Чтобы использовать actionMethodName для правильной обработки событий клика на карточке в предварительно просмотренных карточках , установите пользовательское actionMethodName как часть свойства onclick прикрепленной карточки:

JSON

. . . // Preview card details
{
  "textButton": {
    "text": "ASSIGN TO ME",
    "onClick": {

      // actionMethodName identifies the button to help determine the
      // appropriate ActionResponse.
      "action": {
        "actionMethodName": "assign",
      }
    }
  }
}
. . . // Preview card details

С "actionMethodName": "assign" , идентифицирующим кнопку как часть предварительного просмотра ссылки, можно динамически возвращать правильный ActionResponse , проверяя соответствие actionMethodName :

Node.js

node/preview-link/update-card.js
/**
 * Responds to messages that have links whose URLs match URL patterns
 * configured for link previewing.
 *
 * @param {Object} req Request sent from Google Chat.
 * @param {Object} res Response to send back.
 */
exports.onMessage = (req, res) => {
  if (req.method === 'GET' || !req.body.message) {
    res.send(
        'Hello! This function is meant to be used in a Google Chat Space.');
  }

  // Respond to button clicks on attached cards
  if (req.body.type === 'CARD_CLICKED') {
    // Checks for the presence of "actionMethodName": "assign" and sets
    // actionResponse.type to "UPDATE_USER"MESSAGE_CARDS" if present or
    // "UPDATE_MESSAGE" if absent.
    const actionResponseType = req.body.action.actionMethodName === 'assign' ?
      'UPDATE_USER_MESSAGE_CARDS' :
      'UPDATE_MESSAGE';

    if (req.body.action.actionMethodName === 'assign') {
      res.json({
        'actionResponse': {

          // Dynamically returns the correct actionResponse type.
          'type': actionResponseType,
        },

        // Preview card details
        'cards': [{}],
      });
    }
  }
};

Скрипт приложений

apps-script/preview-link/update-card.gs
/**
 * Updates a card that was attached to a message with a previewed link.
 *
 * @param {Object} event The event object from Chat API.
 * @return {Object} Response from the Chat app. Either a new card attached to
 * the message with the previewed link, or an update to an existing card.
 */
function onCardClick(event) {
  // Checks for the presence of "actionMethodName": "assign" and sets
  // actionResponse.type to "UPDATE_USER"MESSAGE_CARDS" if present or
  // "UPDATE_MESSAGE" if absent.
  const actionResponseType = event.action.actionMethodName === 'assign' ?
    'UPDATE_USER_MESSAGE_CARDS' :
    'UPDATE_MESSAGE';

  if (event.action.actionMethodName === 'assign') {
    return assignCase(actionResponseType);
  }
}

/**
 * Updates a card to say that "You" are the assignee after clicking the Assign
 * to Me button.
 *
 * @param {String} actionResponseType Which actionResponse the Chat app should
 * use to update the attached card based on who created the message.
 * @return {Object} Response from the Chat app. Updates the card attached to
 * the message with the previewed link.
 */
function assignCase(actionResponseType) {
  return {
    'actionResponse': {

      // Dynamically returns the correct actionResponse type.
      'type': actionResponseType,
    },
    // Preview card details
    'cards': [{}],
  };
}

Вариант 2. Проверьте тип отправителя

Проверьте, является ли message.sender.type HUMAN или BOT . Если HUMAN , установите для ActionResponse значение UPDATE_USER_MESSAGE_CARDS , в противном случае установите для ActionResponse значение UPDATE_MESSAGE . Вот как:

Node.js

узел/предварительный просмотр-ссылка/sender-type.js
/**
 * Responds to messages that have links whose URLs match URL patterns
 * configured for link previewing.
 *
 * @param {Object} req Request sent from Google Chat.
 * @param {Object} res Response to send back.
 */
exports.onMessage = (req, res) => {
  if (req.method === 'GET' || !req.body.message) {
    res.send(
        'Hello! This function is meant to be used in a Google Chat Space.');
  }

  // Respond to button clicks on attached cards
  if (req.body.type === 'CARD_CLICKED') {
    // Checks whether the message event originated from a human or a Chat app
    // and sets actionResponse.type to "UPDATE_USER_MESSAGE_CARDS if human or
    // "UPDATE_MESSAGE" if Chat app.
    const actionResponseType = req.body.action.actionMethodName === 'HUMAN' ?
      'UPDATE_USER_MESSAGE_CARDS' :
      'UPDATE_MESSAGE';

    res.json({
      'actionResponse': {

        // Dynamically returns the correct actionResponse type.
        'type': actionResponseType,
      },

      // Preview card details
      'cards': [{}],
    });
  }
};

Скрипт приложений

приложения-скрипт/превью-ссылка/sender-type.gs
/**
 * Updates a card that was attached to a message with a previewed link.
 *
 * @param {Object} event The event object from Chat API.
 * @return {Object} Response from the Chat app. Either a new card attached to
 * the message with the previewed link, or an update to an existing card.
 */
function onCardClick(event) {
  // Checks whether the message event originated from a human or a Chat app
  // and sets actionResponse.type to "UPDATE_USER_MESSAGE_CARDS if human or
  // "UPDATE_MESSAGE" if Chat app.
  const actionResponseType = event.message.sender.type === 'HUMAN' ?
    'UPDATE_USER_MESSAGE_CARDS' :
    'UPDATE_MESSAGE';

  return assignCase(actionResponseType);
}

/**
 * Updates a card to say that "You" are the assignee after clicking the Assign
 * to Me button.
 *
 * @param {String} actionResponseType Which actionResponse the Chat app should
 * use to update the attached card based on who created the message.
 * @return {Object} Response from the Chat app. Updates the card attached to
 * the message with the previewed link.
 */
function assignCase(actionResponseType) {
  return {
    'actionResponse': {

      // Dynamically returns the correct actionResponse type.
      'type': actionResponseType,
    },
    // Preview card details
    'cards': [{}],
  };
}

Типичная причина обновления карты — нажатие кнопки. Вспомните кнопку « Назначить мне» из предыдущего раздела « Прикрепить карту ». В следующем полном примере карточка обновляется так, чтобы в ней говорилось, что она назначена «Вам» после того, как пользователь нажимает « Назначить мне» . Пример динамически устанавливает ActionResponse , проверяя тип отправителя.

Полный пример: Case-y приложение чата обслуживания клиентов

Вот полный код для Case-y, приложения для чата, которое предварительно отображает ссылки на обращения в пространстве чата, в котором сотрудничают агенты службы поддержки клиентов.

Node.js

узел/предварительный просмотр-ссылка/предварительный просмотр-ссылка.js
/**
 * Responds to messages that have links whose URLs match URL patterns
 * configured for link previewing.
 *
 * @param {Object} req Request sent from Google Chat.
 * @param {Object} res Response to send back.
 */
exports.onMessage = (req, res) => {
  if (req.method === 'GET' || !req.body.message) {
    res.send(
        'Hello! This function is meant to be used in a Google Chat Space.');
  }

  // Checks for the presence of event.message.matchedUrl and attaches a card
  // if present
  if (req.body.message.matchedUrl) {
    res.json(createMessage());
  }

  // Respond to button clicks on attached cards
  if (req.body.type === 'CARD_CLICKED') {
    // Checks whether the message event originated from a human or a Chat app
    // and sets actionResponse.type to "UPDATE_USER_MESSAGE_CARDS if human or
    // "UPDATE_MESSAGE" if Chat app.
    const actionResponseType = req.body.action.actionMethodName === 'HUMAN' ?
      'UPDATE_USER_MESSAGE_CARDS' :
      'UPDATE_MESSAGE';

    if (req.body.action.actionMethodName === 'assign') {
      res.json(createMessage(actionResponseType, 'You'));
    }
  }

  // If the Chat app doesn’t detect a link preview URL pattern, it says so.
  res.json({'text': 'No matchedUrl detected.'});
};

/**
 * Message to create a card with the correct response type and assignee.
 *
 * @param {string} actionResponseType
 * @param {string} assignee
 * @return {Object} a card with URL preview
 */
function createMessage(
    actionResponseType = 'UPDATE_USER_MESSAGE_CARDS',
    assignee = 'Charlie'
) {
  return {
    'actionResponse': {'type': actionResponseType},
    'cards': [
      {
        'header': {
          'title': 'Example Customer Service Case',
          'subtitle': 'Case basics',
        },
        'sections': [
          {
            'widgets': [
              {'keyValue': {'topLabel': 'Case ID', 'content': 'case123'}},
              {'keyValue': {'topLabel': 'Assignee', 'content': assignee}},
              {'keyValue': {'topLabel': 'Status', 'content': 'Open'}},
              {
                'keyValue': {
                  'topLabel': 'Subject', 'content': 'It won"t turn on...',
                },
              },
            ],
          },
          {
            'widgets': [
              {
                'buttons': [
                  {
                    'textButton': {
                      'text': 'OPEN CASE',
                      'onClick': {
                        'openLink': {
                          'url': 'https://support.example.com/orders/case123',
                        },
                      },
                    },
                  },
                  {
                    'textButton': {
                      'text': 'RESOLVE CASE',
                      'onClick': {
                        'openLink': {
                          'url': 'https://support.example.com/orders/case123?resolved=y',
                        },
                      },
                    },
                  },
                  {
                    'textButton': {
                      'text': 'ASSIGN TO ME',
                      'onClick': {
                        'action': {
                          'actionMethodName': 'assign',
                        },
                      },
                    },
                  },
                ],
              },
            ],
          },
        ],
      },
    ],
  };
}

Скрипт приложений

приложения-скрипт/preview-link/preview-link.gs
/**
 * Responds to messages that have links whose URLs match URL patterns
 * configured for link previews.
 *
 * @param {Object} event The event object from Chat API.
 * @return {Object} Response from the Chat app attached to the message with
 * the previewed link.
 */
function onMessage(event) {
  // Checks for the presence of event.message.matchedUrl and attaches a card
  // if present
  if (event.message.matchedUrl) {
    return {
      'actionResponse': {
        'type': 'UPDATE_USER_MESSAGE_CARDS',
      },
      'cards': [{
        'header': {
          'title': 'Example Customer Service Case',
          'subtitle': 'Case basics',
        },
        'sections': [{
          'widgets': [
            {'keyValue': {'topLabel': 'Case ID', 'content': 'case123'}},
            {'keyValue': {'topLabel': 'Assignee', 'content': 'Charlie'}},
            {'keyValue': {'topLabel': 'Status', 'content': 'Open'}},
            {'keyValue': {
              'topLabel': 'Subject', 'content': 'It won\'t turn on...',
            }},
          ],
        },
        {
          'widgets': [{
            'buttons': [{
              'textButton': {
                'text': 'OPEN CASE',
                'onClick': {
                  'openLink': {
                    'url': 'https://support.example.com/orders/case123',
                  },
                },
              },
            },
            {
              'textButton': {
                'text': 'RESOLVE CASE',
                'onClick': {
                  'openLink': {
                    'url': 'https://support.example.com/orders/case123?resolved=y',
                  },
                },
              },
            },
            {
              'textButton': {
                'text': 'ASSIGN TO ME',
                'onClick': {
                  'action': {
                    'actionMethodName': 'assign',
                  },
                },
              },
            },
            ],
          }],
        }],
      }],
    };
  }

  // If the Chat app doesn’t detect a link preview URL pattern, it says so.
  return {'text': 'No matchedUrl detected.'};
}

/**
 * Updates a card that was attached to a message with a previewed link.
 *
 * @param {Object} event The event object from Chat API.
 * @return {Object} Response from the Chat app. Either a new card attached to
 * the message with the previewed link, or an update to an existing card.
 */
function onCardClick(event) {
  // Checks whether the message event originated from a human or a Chat app
  // and sets actionResponse to "UPDATE_USER_MESSAGE_CARDS if human or
  // "UPDATE_MESSAGE" if Chat app.
  const actionResponseType = event.message.sender.type === 'HUMAN' ?
    'UPDATE_USER_MESSAGE_CARDS' :
    'UPDATE_MESSAGE';

  // To respond to the correct button, checks the button's actionMethodName.
  if (event.action.actionMethodName === 'assign') {
    return assignCase(actionResponseType);
  }
}

/**
 * Updates a card to say that "You" are the assignee after clicking the Assign
 * to Me button.
 *
 * @param {String} actionResponseType Which actionResponse the Chat app should
 * use to update the attached card based on who created the message.
 * @return {Object} Response from the Chat app. Updates the card attached to
 * the message with the previewed link.
 */
function assignCase(actionResponseType) {
  return {
    'actionResponse': {

      // Dynamically returns the correct actionResponse type.
      'type': actionResponseType,
    },
    'cards': [{
      'header': {
        'title': 'Example Customer Service Case',
        'subtitle': 'Case basics',
      },
      'sections': [{
        'widgets': [
          {'keyValue': {'topLabel': 'Case ID', 'content': 'case123'}},
          {'keyValue': {'topLabel': 'Assignee', 'content': 'You'}},
          {'keyValue': {'topLabel': 'Status', 'content': 'Open'}},
          {'keyValue': {
            'topLabel': 'Subject', 'content': 'It won\'t turn on...',
          }},
        ],
      },
      {
        'widgets': [{
          'buttons': [{
            'textButton': {
              'text': 'OPEN CASE',
              'onClick': {
                'openLink': {
                  'url': 'https://support.example.com/orders/case123',
                },
              },
            },
          },
          {
            'textButton': {
              'text': 'RESOLVE CASE',
              'onClick': {
                'openLink': {
                  'url': 'https://support.example.com/orders/case123?resolved=y',
                },
              },
            },
          },
          {
            'textButton': {
              'text': 'ASSIGN TO ME',
              'onClick': {
                'action': {
                  'actionMethodName': 'assign',
                },
              },
            },
          },
          ],
        }],
      }],
    }],
  };
}

Ограничения и соображения

При настройке предварительного просмотра ссылок для приложения Chat обратите внимание на следующие ограничения и соображения:

  • Каждое приложение чата поддерживает предварительный просмотр ссылок для 5 шаблонов URL.
  • Приложения для чата предварительно просматривают одну ссылку на сообщение. Если в одном сообщении присутствует несколько ссылок для предварительного просмотра, отображается только первая ссылка для предварительного просмотра.
  • Приложения для чата только предварительно просматривают ссылки, начинающиеся с https:// , поэтому https://support.example.com/cases/ предпросмотрит, а support.example.com/cases/ нет.
  • Если сообщение не содержит другой информации, отправляемой в приложение Chat, например команды косой черты , в предварительном просмотре ссылки в приложение Chat отправляется только URL-адрес ссылки.
  • Карточки, прикрепленные к предварительным ссылкам, поддерживают только ActionResponse типа UPDATE_USER_MESSAGE_CARDS и только в ответ на синхронные запросы от событий чата . Предварительный просмотр ссылки не поддерживает UPDATE_MESSAGE или асинхронные запросы на обновление карточек, прикрепленных к предварительно просмотренной ссылке через Chat REST API . Дополнительные сведения см. в разделе Обновление карты .

При реализации предварительного просмотра ссылок может потребоваться отладка приложения Chat путем чтения журналов приложения. Чтобы прочитать журналы, посетите Logs Explorer в Google Cloud Console.