CINXE.COM

Authenticate as a Google Chat app  |  Google for Developers

<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Google for Developers"> <meta property="og:type" content="website"><meta name="theme-color" content="#fff"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/developers/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/favicon-new.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/touchicon-180-new.png"><link rel="canonical" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app"><link rel="search" type="application/opensearchdescription+xml" title="Google for Developers" href="https://developers.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app" /><link rel="alternate" hreflang="x-default" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app" /><link rel="alternate" hreflang="ar" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=ar" /><link rel="alternate" hreflang="bn" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=fa" /><link rel="alternate" hreflang="fr" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=fr" /><link rel="alternate" hreflang="de" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=de" /><link rel="alternate" hreflang="he" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=he" /><link rel="alternate" hreflang="hi" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=hi" /><link rel="alternate" hreflang="id" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=id" /><link rel="alternate" hreflang="it" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=it" /><link rel="alternate" hreflang="ja" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=ja" /><link rel="alternate" hreflang="ko" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=ko" /><link rel="alternate" hreflang="pl" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=es-419" /><link rel="alternate" hreflang="th" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=th" /><link rel="alternate" hreflang="tr" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=tr" /><link rel="alternate" hreflang="vi" href="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app?hl=vi" /><title>Authenticate as a Google Chat app &nbsp;|&nbsp; Google for Developers</title> <meta property="og:title" content="Authenticate as a Google Chat app &nbsp;|&nbsp; Google for Developers"><meta property="og:url" content="https://developers.google.com/workspace/chat/authenticate-authorize-chat-app"><meta property="og:image" content="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/opengraph/white.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Authenticate as a Google Chat app" } </script><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Google Workspace", "item": "https://developers.google.com/workspace" },{ "@type": "ListItem", "position": 2, "name": "Google Chat", "item": "https://developers.google.com/workspace/chat" },{ "@type": "ListItem", "position": 3, "name": "Authenticate as a Google Chat app", "item": "https://developers.google.com/workspace/chat/authenticate-authorize-chat-app" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="white" type="article" layout="docs" concierge='closed' display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="https://developers.google.com/workspace"> <div class="devsite-product-logo-container" size="medium" > <picture> <img class="devsite-product-logo" alt="Google Workspace" src="https://fonts.gstatic.com/s/i/productlogos/googleg/v6/16px.svg" srcset=" https://fonts.gstatic.com/s/i/productlogos/googleg/v6/16px.svg" sizes="64px" loading="lazy" > </picture> </div> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> <a href="https://developers.google.com/workspace" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google Workspace" > <svg class="devsite-google-wordmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 148 48"> <title>Google</title> <path class="devsite-google-wordmark-svg-path" d="M19.58,37.65c-9.87,0-18.17-8.04-18.17-17.91c0-9.87,8.3-17.91,18.17-17.91c5.46,0,9.35,2.14,12.27,4.94l-3.45,3.45c-2.1-1.97-4.93-3.49-8.82-3.49c-7.21,0-12.84,5.81-12.84,13.02c0,7.21,5.64,13.02,12.84,13.02c4.67,0,7.34-1.88,9.04-3.58c1.4-1.4,2.32-3.41,2.66-6.16H19.58v-4.89h16.47c0.18,0.87,0.26,1.92,0.26,3.06c0,3.67-1.01,8.21-4.24,11.44C28.93,35.9,24.91,37.65,19.58,37.65z M61.78,26.12c0,6.64-5.1,11.53-11.36,11.53s-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53S61.78,19.43,61.78,26.12z M56.8,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C53.84,33.11,56.8,30.22,56.8,26.12z M87.25,26.12c0,6.64-5.1,11.53-11.36,11.53c-6.26,0-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53C82.15,14.59,87.25,19.43,87.25,26.12zM82.28,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C79.32,33.11,82.28,30.22,82.28,26.12z M112.09,15.29v20.7c0,8.52-5.02,12.01-10.96,12.01c-5.59,0-8.95-3.76-10.22-6.81l4.41-1.83c0.79,1.88,2.71,4.1,5.81,4.1c3.8,0,6.16-2.36,6.16-6.77v-1.66h-0.18c-1.14,1.4-3.32,2.62-6.07,2.62c-5.76,0-11.05-5.02-11.05-11.49c0-6.51,5.28-11.57,11.05-11.57c2.75,0,4.93,1.22,6.07,2.58h0.18v-1.88H112.09z M107.64,26.16c0-4.06-2.71-7.03-6.16-7.03c-3.49,0-6.42,2.97-6.42,7.03c0,4.02,2.93,6.94,6.42,6.94C104.93,33.11,107.64,30.18,107.64,26.16z M120.97,3.06v33.89h-5.07V3.06H120.97z M140.89,29.92l3.93,2.62c-1.27,1.88-4.32,5.11-9.61,5.11c-6.55,0-11.28-5.07-11.28-11.53c0-6.86,4.77-11.53,10.71-11.53c5.98,0,8.91,4.76,9.87,7.34l0.52,1.31l-15.42,6.38c1.18,2.31,3.01,3.49,5.59,3.49C137.79,33.11,139.58,31.84,140.89,29.92zM128.79,25.77l10.31-4.28c-0.57-1.44-2.27-2.45-4.28-2.45C132.24,19.04,128.66,21.31,128.79,25.77z"/> </svg>Workspace </a> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab > <a href="https://developers.google.com/workspace" track-metadata-eventdetail="https://developers.google.com/workspace" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - home" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Home" track-name="home" > Home </a> </tab> <tab class="devsite-active"> <a href="https://developers.google.com/workspace/chat" track-metadata-eventdetail="https://developers.google.com/workspace/chat" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - google chat" track-metadata-module="primary nav" aria-label="Google Chat, selected" data-category="Site-Wide Custom Events" data-label="Tab: Google Chat" track-name="google chat" > Google Chat </a> </tab> <tab class="devsite-dropdown "> <a href="https://developers.google.com/workspace/products-menu" track-metadata-eventdetail="https://developers.google.com/workspace/products-menu" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - all products" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: All products" track-name="all products" > All products </a> <a href="#" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Dropdown menu for All products" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/products-menu" track-metadata-position="nav - all products" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: All products" track-name="all products" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></a> <div class="devsite-tabs-dropdown" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Google Workspace apps</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/admin-sdk" track-type="nav" track-metadata-eventdetail="https://developers.google.com/admin-sdk" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Admin console" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Admin console </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/cloud-search" track-type="nav" track-metadata-eventdetail="https://developers.google.com/cloud-search" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Cloud Search" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Cloud Search </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/gmail" track-type="nav" track-metadata-eventdetail="https://developers.google.com/gmail" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Gmail" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Gmail </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/calendar" track-type="nav" track-metadata-eventdetail="https://developers.google.com/calendar" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Google Calendar" > <div class="devsite-nav-item-title"> Google Calendar </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/chat" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/chat" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Google Chat" > <div class="devsite-nav-item-title"> Google Chat </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/classroom" track-type="nav" track-metadata-eventdetail="https://developers.google.com/classroom" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Google Classroom" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Classroom </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/docs" track-type="nav" track-metadata-eventdetail="https://developers.google.com/docs" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Google Docs" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Docs </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/drive" track-type="nav" track-metadata-eventdetail="https://developers.google.com/drive" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="google workspace apps" tooltip data-label="Tab menu: All products - Google Drive" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Drive </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/forms" track-type="nav" track-metadata-eventdetail="https://developers.google.com/forms" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Forms" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Forms </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/keep" track-type="nav" track-metadata-eventdetail="https://developers.google.com/keep" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Keep" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Keep </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/meet" track-type="nav" track-metadata-eventdetail="https://developers.google.com/meet" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Google Meet" > <div class="devsite-nav-item-title"> Google Meet </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/sheets" track-type="nav" track-metadata-eventdetail="https://developers.google.com/sheets" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Sheets" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Sheets </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/sites" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/sites" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Sites" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Sites </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/slides" track-type="nav" track-metadata-eventdetail="https://developers.google.com/slides" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Slides" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Slides </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/tasks" track-type="nav" track-metadata-eventdetail="https://developers.google.com/tasks" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Tasks" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Tasks </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/vault" track-type="nav" track-metadata-eventdetail="https://developers.google.com/vault" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline=" " tooltip data-label="Tab menu: All products - Google Vault" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Google Vault </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Extend, automate &amp; share</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/add-ons" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/add-ons" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="extend, automate &amp; share" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Add-ons" > <div class="devsite-nav-item-title"> Add-ons </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/apps-script" track-type="nav" track-metadata-eventdetail="https://developers.google.com/apps-script" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="extend, automate &amp; share" tooltip data-label="Tab menu: All products - Apps Script" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Apps Script </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/chat/overview" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/chat/overview" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="extend, automate &amp; share" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Chat apps" > <div class="devsite-nav-item-title"> Chat apps </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/drive/api/guides/about-apps" track-type="nav" track-metadata-eventdetail="https://developers.google.com/drive/api/guides/about-apps" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="extend, automate &amp; share" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Drive apps" > <div class="devsite-nav-item-title"> Drive apps </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/marketplace" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/marketplace" track-metadata-position="nav - all products" track-metadata-module="tertiary nav" track-metadata-module_headline="extend, automate &amp; share" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: All products - Marketplace" > <div class="devsite-nav-item-title"> Marketplace </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://developers.google.com/workspace/resources-menu" track-metadata-eventdetail="https://developers.google.com/workspace/resources-menu" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - resources" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" > Resources </a> <a href="#" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Dropdown menu for Resources" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/resources-menu" track-metadata-position="nav - resources" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></a> <div class="devsite-tabs-dropdown" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Tools</li> <li class="devsite-nav-item"> <a href="https://admin.google.com/" track-type="nav" track-metadata-eventdetail="https://admin.google.com/" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="tools" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: Resources - Admin console" target="admin-console" > <div class="devsite-nav-item-title"> Admin console </div> </a> </li> <li class="devsite-nav-item"> <a href="https://script.google.com/" track-type="nav" track-metadata-eventdetail="https://script.google.com/" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="tools" tooltip data-category="Workspace top menu navigation" target="_blank" data-label="Tab menu: Resources - Apps Script dashboard" > <div class="devsite-nav-item-title"> Apps Script dashboard </div> </a> </li> <li class="devsite-nav-item"> <a href="https://console.cloud.google.com/workspace-api" track-type="nav" track-metadata-eventdetail="https://console.cloud.google.com/workspace-api" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="tools" tooltip target="console" data-category="Workspace top menu navigation" data-label="Tab menu: Resources - Google Cloud console" > <div class="devsite-nav-item-title"> Google Cloud console </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/explore" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/explore" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="tools" tooltip data-label="Tab menu: Resources - APIs Explorer" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> APIs Explorer </div> </a> </li> <li class="devsite-nav-item"> <a href="https://addons.gsuite.google.com/uikit/builder" track-type="nav" track-metadata-eventdetail="https://addons.gsuite.google.com/uikit/builder" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="tools" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: Resources - Card Builder" target="_blank" > <div class="devsite-nav-item-title"> Card Builder </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Training &amp; support</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/guides/get-started" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/guides/get-started" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="training &amp; support" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: Resources - How to get started" > <div class="devsite-nav-item-title"> How to get started </div> </a> </li> <li class="devsite-nav-item"> <a href="https://codelabs.developers.google.com/?product=googleworkspace" track-type="nav" track-metadata-eventdetail="https://codelabs.developers.google.com/?product=googleworkspace" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="training &amp; support" tooltip target="_blank" data-category="Workspace top menu navigation" data-label="Tab menu: Resources - Codelabs" > <div class="devsite-nav-item-title"> Codelabs </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/support" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/support" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="training &amp; support" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: Resources - Developer support" > <div class="devsite-nav-item-title"> Developer support </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Updates</li> <li class="devsite-nav-item"> <a href="https://developers.googleblog.com/search/?query=Google+Workspace" track-type="nav" track-metadata-eventdetail="https://developers.googleblog.com/search/?query=Google+Workspace" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="updates" tooltip data-label="Tab menu: Resources - Blog" target="_blank" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Blog </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/preview" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/preview" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="updates" tooltip data-category="Workspace top menu navigation" data-label="Tab menu: Resources - Developer previews" > <div class="devsite-nav-item-title"> Developer Previews </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/workspace/newsletters" track-type="nav" track-metadata-eventdetail="https://developers.google.com/workspace/newsletters" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="updates" tooltip data-label="Tab menu: Resources - Newsletter" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> Newsletter </div> </a> </li> <li class="devsite-nav-item"> <a href="https://twitter.com/workspacedevs" track-type="nav" track-metadata-eventdetail="https://twitter.com/workspacedevs" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="updates" tooltip target="_blank" data-label="Tab menu: Resources - X (Twitter)" data-category="Workspace top menu navigation" > <div class="devsite-nav-item-title"> X (Twitter) </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.youtube.com/channel/UCUcg6az6etU_gRtZVAhBXaw" track-type="nav" track-metadata-eventdetail="https://www.youtube.com/channel/UCUcg6az6etU_gRtZVAhBXaw" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="updates" tooltip target="_blank" data-category="Workspace top menu navigation" data-label="Tab menu: Resources - YouTube" > <div class="devsite-nav-item-title"> YouTube </div> </a> </li> </ul> </div> </div> </div> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Google Chat" tenant-name="Google for Developers" project-scope="/workspace/chat" url-scoped="https://developers.google.com/s/results/workspace/chat" > <form class="devsite-search-form" action="https://developers.google.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/workspace/chat" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google Chat" > Google Chat </a> </li> </ul> </div> </div> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab > <a href="https://developers.google.com/workspace/chat" track-metadata-eventdetail="https://developers.google.com/workspace/chat" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - overview" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" > Overview </a> </tab> <tab class="devsite-active"> <a href="https://developers.google.com/workspace/chat/overview" track-metadata-eventdetail="https://developers.google.com/workspace/chat/overview" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - guides" track-metadata-module="primary nav" aria-label="Guides, selected" data-category="Site-Wide Custom Events" data-label="Tab: Guides" track-name="guides" > Guides </a> </tab> <tab > <a href="https://developers.google.com/workspace/chat/api/reference" track-metadata-eventdetail="https://developers.google.com/workspace/chat/api/reference" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - reference" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" > Reference </a> </tab> <tab > <a href="https://developers.google.com/workspace/chat/samples" track-metadata-eventdetail="https://developers.google.com/workspace/chat/samples" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - samples" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" > Samples </a> </tab> <tab > <a href="https://developers.google.com/workspace/chat/support" track-metadata-eventdetail="https://developers.google.com/workspace/chat/support" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - support" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Support" track-name="support" > Support </a> </tab> <tab > <a href="https://addons.gsuite.google.com/uikit/builder" track-metadata-eventdetail="https://addons.gsuite.google.com/uikit/builder" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - card builder" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Card builder" track-name="card builder" > Card builder </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="https://developers.google.com/workspace"> <div class="devsite-product-logo-container" size="medium" > <picture> <img class="devsite-product-logo" alt="Google Workspace" src="https://fonts.gstatic.com/s/i/productlogos/googleg/v6/16px.svg" srcset=" https://fonts.gstatic.com/s/i/productlogos/googleg/v6/16px.svg" sizes="64px" loading="lazy" > </picture> </div> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> <a href="https://developers.google.com/workspace" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google Workspace" > <svg class="devsite-google-wordmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 148 48"> <title>Google</title> <path class="devsite-google-wordmark-svg-path" d="M19.58,37.65c-9.87,0-18.17-8.04-18.17-17.91c0-9.87,8.3-17.91,18.17-17.91c5.46,0,9.35,2.14,12.27,4.94l-3.45,3.45c-2.1-1.97-4.93-3.49-8.82-3.49c-7.21,0-12.84,5.81-12.84,13.02c0,7.21,5.64,13.02,12.84,13.02c4.67,0,7.34-1.88,9.04-3.58c1.4-1.4,2.32-3.41,2.66-6.16H19.58v-4.89h16.47c0.18,0.87,0.26,1.92,0.26,3.06c0,3.67-1.01,8.21-4.24,11.44C28.93,35.9,24.91,37.65,19.58,37.65z M61.78,26.12c0,6.64-5.1,11.53-11.36,11.53s-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53S61.78,19.43,61.78,26.12z M56.8,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C53.84,33.11,56.8,30.22,56.8,26.12z M87.25,26.12c0,6.64-5.1,11.53-11.36,11.53c-6.26,0-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53C82.15,14.59,87.25,19.43,87.25,26.12zM82.28,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C79.32,33.11,82.28,30.22,82.28,26.12z M112.09,15.29v20.7c0,8.52-5.02,12.01-10.96,12.01c-5.59,0-8.95-3.76-10.22-6.81l4.41-1.83c0.79,1.88,2.71,4.1,5.81,4.1c3.8,0,6.16-2.36,6.16-6.77v-1.66h-0.18c-1.14,1.4-3.32,2.62-6.07,2.62c-5.76,0-11.05-5.02-11.05-11.49c0-6.51,5.28-11.57,11.05-11.57c2.75,0,4.93,1.22,6.07,2.58h0.18v-1.88H112.09z M107.64,26.16c0-4.06-2.71-7.03-6.16-7.03c-3.49,0-6.42,2.97-6.42,7.03c0,4.02,2.93,6.94,6.42,6.94C104.93,33.11,107.64,30.18,107.64,26.16z M120.97,3.06v33.89h-5.07V3.06H120.97z M140.89,29.92l3.93,2.62c-1.27,1.88-4.32,5.11-9.61,5.11c-6.55,0-11.28-5.07-11.28-11.53c0-6.86,4.77-11.53,10.71-11.53c5.98,0,8.91,4.76,9.87,7.34l0.52,1.31l-15.42,6.38c1.18,2.31,3.01,3.49,5.59,3.49C137.79,33.11,139.58,31.84,140.89,29.92zM128.79,25.77l10.31-4.28c-0.57-1.44-2.27-2.45-4.28-2.45C132.24,19.04,128.66,21.31,128.79,25.77z"/> </svg>Workspace </a> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/workspace" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Home" track-name="home" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Home" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Home </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/chat" class="devsite-nav-title gc-analytics-event devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Google Chat" track-name="google chat" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Chat" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Chat </span> </a> <ul class="devsite-nav-responsive-tabs"> <li class="devsite-nav-item"> <a href="/workspace/chat" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/chat/overview" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Guides" track-name="guides" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Guides" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip menu="_book"> Guides </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="_book"> </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/chat/api/reference" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Reference </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/chat/samples" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Samples" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Samples </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/chat/support" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Support" track-name="support" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Support" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Support </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="https://addons.gsuite.google.com/uikit/builder" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Card builder" track-name="card builder" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Card builder" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Card builder </span> </a> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/workspace/products-menu" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: All products" track-name="all products" data-category="Site-Wide Custom Events" data-label="Responsive Tab: All products" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > All products </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: All products" track-name="all products" > <span class="devsite-nav-text" tooltip menu="All products"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="All products"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/workspace/resources-menu" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Resources" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Resources </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" > <span class="devsite-nav-text" tooltip menu="Resources"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Resources"> </span> </span> </li> </ul> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Get started</span> </div></li> <li class="devsite-nav-item"><a href="/workspace/chat/overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/overview" ><span class="devsite-nav-text" tooltip>Develop with Google Chat overview</span></a></li> <li class="devsite-nav-item devsite-nav-external"><a href="/workspace/guides/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/guides/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/guides/get-started" target="_blank"><span class="devsite-nav-text" tooltip>Develop on Google Workspace</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Quickstarts</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Call the Chat API</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/api/guides/quickstart/apps-script" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/api/guides/quickstart/apps-script" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/api/guides/quickstart/apps-script" ><span class="devsite-nav-text" tooltip>Apps Script</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/api/guides/quickstart/java" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/api/guides/quickstart/java" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/api/guides/quickstart/java" ><span class="devsite-nav-text" tooltip>Java</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/api/guides/quickstart/nodejs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/api/guides/quickstart/nodejs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/api/guides/quickstart/nodejs" ><span class="devsite-nav-text" tooltip>Node.js</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/api/guides/quickstart/python" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/api/guides/quickstart/python" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/api/guides/quickstart/python" ><span class="devsite-nav-text" tooltip>Python</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Build a basic interactive Chat app</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/quickstart/gcf-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/quickstart/gcf-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/quickstart/gcf-app" ><span class="devsite-nav-text" tooltip>HTTP service</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/quickstart/apps-script-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/quickstart/apps-script-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/quickstart/apps-script-app" ><span class="devsite-nav-text" tooltip>Apps Script</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/build-dialogflow-chat-app-natural-language" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/build-dialogflow-chat-app-natural-language" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/build-dialogflow-chat-app-natural-language" ><span class="devsite-nav-text" tooltip>Dialogflow CX</span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://cloud.google.com/dialogflow/es/docs/integrations/google-chat" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://cloud.google.com/dialogflow/es/docs/integrations/google-chat" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://cloud.google.com/dialogflow/es/docs/integrations/google-chat" target="_blank"><span class="devsite-nav-text" tooltip>Dialogflow ES</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/quickstart/webhooks" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/quickstart/webhooks" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/quickstart/webhooks" ><span class="devsite-nav-text" tooltip>Webhook</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/quickstart/pub-sub" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/quickstart/pub-sub" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/quickstart/pub-sub" ><span class="devsite-nav-text" tooltip>Pub/Sub</span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://support.google.com/appsheet/answer/12923581" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://support.google.com/appsheet/answer/12923581" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://support.google.com/appsheet/answer/12923581" target="_blank"><span class="devsite-nav-text" tooltip>AppSheet</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Authenticate and authorize</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/authenticate-authorize" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/authenticate-authorize" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/authenticate-authorize" ><span class="devsite-nav-text" tooltip>Authenticate with Chat</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/authenticate-authorize-chat-user" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/authenticate-authorize-chat-user" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/authenticate-authorize-chat-user" ><span class="devsite-nav-text" tooltip>Authenticate as a user</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/authenticate-authorize-chat-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/authenticate-authorize-chat-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/authenticate-authorize-chat-app" ><span class="devsite-nav-text" tooltip>Authenticate as an app</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/verify-requests-from-chat" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/verify-requests-from-chat" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/verify-requests-from-chat" ><span class="devsite-nav-text" tooltip>Verify requests from Chat</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Call the Chat API</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/api-overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/api-overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/api-overview" ><span class="devsite-nav-text" tooltip>Chat API overview</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/libraries" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/libraries" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/libraries" ><span class="devsite-nav-text" tooltip>Install client libraries</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/configure-chat-api" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/configure-chat-api" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/configure-chat-api" ><span class="devsite-nav-text" tooltip>Configure the Chat API</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Plan</span> </div></li> <li class="devsite-nav-item"><a href="/workspace/chat/audience" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/audience" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/audience" ><span class="devsite-nav-text" tooltip>Identify your users&#39; needs</span></a></li> <li class="devsite-nav-item"><a href="/workspace/chat/journeys" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/journeys" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/journeys" ><span class="devsite-nav-text" tooltip>Define all user journeys</span></a></li> <li class="devsite-nav-item"><a href="/workspace/chat/structure" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/structure" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/structure" ><span class="devsite-nav-text" tooltip>Choose a Chat app architecture</span></a></li> <li class="devsite-nav-item"><a href="/workspace/chat/interactivity" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/interactivity" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/interactivity" ><span class="devsite-nav-text" tooltip>Design user interactions</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Build</span> </div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Send and manage messages</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/messages-overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/messages-overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/messages-overview" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/create-messages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/create-messages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/create-messages" ><span class="devsite-nav-text" tooltip>Send a message</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/format-messages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/format-messages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/format-messages" ><span class="devsite-nav-text" tooltip>Format messages</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Build user interfaces</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/design-components-card-dialog" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/design-components-card-dialog" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/design-components-card-dialog" ><span class="devsite-nav-text" tooltip>Build cards</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/add-text-image-card-dialog" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/add-text-image-card-dialog" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/add-text-image-card-dialog" ><span class="devsite-nav-text" tooltip>Add text and images</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/design-interactive-card-dialog" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/design-interactive-card-dialog" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/design-interactive-card-dialog" ><span class="devsite-nav-text" tooltip>Add interactive UI elements</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Manage messages</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/get-messages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/get-messages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/get-messages" ><span class="devsite-nav-text" tooltip>Get a message</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/list-messages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/list-messages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/list-messages" ><span class="devsite-nav-text" tooltip>List messages</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/update-messages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/update-messages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/update-messages" ><span class="devsite-nav-text" tooltip>Update messages</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/delete-messages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/delete-messages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/delete-messages" ><span class="devsite-nav-text" tooltip>Delete a message</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/chat-archiving" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/chat-archiving" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/chat-archiving" ><span class="devsite-nav-text" tooltip>Archive messages</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Check message read state</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/get-space-read-state" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/get-space-read-state" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/get-space-read-state" ><span class="devsite-nav-text" tooltip>Get read state for a space message</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/update-space-read-state" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/update-space-read-state" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/update-space-read-state" ><span class="devsite-nav-text" tooltip>Update read state for a space message</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/get-thread-read-state" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/get-thread-read-state" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/get-thread-read-state" ><span class="devsite-nav-text" tooltip>Get read state for a thread message</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Work with spaces</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/create-spaces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/create-spaces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/create-spaces" ><span class="devsite-nav-text" tooltip>Create a space</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/set-up-spaces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/set-up-spaces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/set-up-spaces" ><span class="devsite-nav-text" tooltip>Set up a space with initial members</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/get-spaces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/get-spaces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/get-spaces" ><span class="devsite-nav-text" tooltip>Get details about a space</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/find-direct-message-in-spaces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/find-direct-message-in-spaces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/find-direct-message-in-spaces" ><span class="devsite-nav-text" tooltip>Find a direct message space</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/list-spaces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/list-spaces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/list-spaces" ><span class="devsite-nav-text" tooltip>List spaces</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/update-spaces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/update-spaces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/update-spaces" ><span class="devsite-nav-text" tooltip>Update a space</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/delete-spaces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/delete-spaces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/delete-spaces" ><span class="devsite-nav-text" tooltip>Delete a space</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Manage members in spaces</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/create-members" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/create-members" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/create-members" ><span class="devsite-nav-text" tooltip>Invite or add a user, Google Group, or Chat app to a space</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/get-members" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/get-members" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/get-members" ><span class="devsite-nav-text" tooltip>Get details about a membership</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/list-members" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/list-members" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/list-members" ><span class="devsite-nav-text" tooltip>List members in a space</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/update-members" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/update-members" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/update-members" ><span class="devsite-nav-text" tooltip>Make a user a space manager or regular member</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/delete-members" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/delete-members" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/delete-members" ><span class="devsite-nav-text" tooltip>Remove a member from a space</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>React to messages</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/create-reactions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/create-reactions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/create-reactions" ><span class="devsite-nav-text" tooltip>Add a reaction to a message</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/list-reactions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/list-reactions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/list-reactions" ><span class="devsite-nav-text" tooltip>List reactions for a message</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/delete-reactions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/delete-reactions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/delete-reactions" ><span class="devsite-nav-text" tooltip>Delete a reaction from a message</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Upload and download attachments</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/upload-media-attachments" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/upload-media-attachments" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/upload-media-attachments" ><span class="devsite-nav-text" tooltip>Upload media as a file attachment</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/download-media-attachments" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/download-media-attachments" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/download-media-attachments" ><span class="devsite-nav-text" tooltip>Download media as a file attachment</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/get-media-attachments" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/get-media-attachments" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/get-media-attachments" ><span class="devsite-nav-text" tooltip>Get metadata about a message attachment</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Interact with users</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/receive-respond-interactions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/receive-respond-interactions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/receive-respond-interactions" ><span class="devsite-nav-text" tooltip>Receive and respond to user interactions</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/slash-commands" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/slash-commands" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/slash-commands" ><span class="devsite-nav-text" tooltip>Respond to slash commands</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/dialogs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/dialogs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/dialogs" ><span class="devsite-nav-text" tooltip>Open interactive dialogs</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/preview-links" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/preview-links" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/preview-links" ><span class="devsite-nav-text" tooltip>Preview links</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/send-app-home-card-message" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/send-app-home-card-message" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/send-app-home-card-message" ><span class="devsite-nav-text" tooltip>Build a homepage for your Chat app</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/read-form-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/read-form-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/read-form-data" ><span class="devsite-nav-text" tooltip>Collect and process information from users</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/connect-web-services-tools" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/connect-web-services-tools" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/connect-web-services-tools" ><span class="devsite-nav-text" tooltip>Connect to external systems and tools</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Work with events from Google Chat</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/events-overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/events-overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/events-overview" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/get-space-event" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/get-space-event" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/get-space-event" ><span class="devsite-nav-text" tooltip>Get details about a space event</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/list-space-events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/list-space-events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/list-space-events" ><span class="devsite-nav-text" tooltip>List events from a space</span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="/workspace/events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/events" target="_blank"><span class="devsite-nav-text" tooltip>Subscribe to events using the Google Workspace Events API</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li></ul></div></li> <li class="devsite-nav-item"><a href="/workspace/chat/identify-reference-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/identify-reference-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/identify-reference-users" ><span class="devsite-nav-text" tooltip>Identify and specify Google Chat users</span></a></li> <li class="devsite-nav-item"><a href="/workspace/chat/write-error-messages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/write-error-messages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/write-error-messages" ><span class="devsite-nav-text" tooltip>Write actionable error messages</span></a></li> <li class="devsite-nav-item"><a href="/workspace/chat/samples" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/samples" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/samples" ><span class="devsite-nav-text" tooltip>Explore Chat app samples and tutorials</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Deploy, test, and troubleshoot</span> </div></li> <li class="devsite-nav-item"><a href="/workspace/chat/create-manage-deployments" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/create-manage-deployments" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/create-manage-deployments" ><span class="devsite-nav-text" tooltip>Create and manage deployments</span></a></li> <li class="devsite-nav-item"><a href="/workspace/chat/test-interactive-features" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/test-interactive-features" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/test-interactive-features" ><span class="devsite-nav-text" tooltip>Test interactive features</span></a></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Log errors</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/turn-on-error-logging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/turn-on-error-logging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/turn-on-error-logging" ><span class="devsite-nav-text" tooltip>Turn on error logging</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/query-logs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/query-logs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/query-logs" ><span class="devsite-nav-text" tooltip>Query error logs</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Troubleshoot</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/troubleshoot-fix-chat-errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/troubleshoot-fix-chat-errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/troubleshoot-fix-chat-errors" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/troubleshoot-chat-apps" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/troubleshoot-chat-apps" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/troubleshoot-chat-apps" ><span class="devsite-nav-text" tooltip>Troubleshoot Chat app errors</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/troubleshoot-cards" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/troubleshoot-cards" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/troubleshoot-cards" ><span class="devsite-nav-text" tooltip>Troubleshoot card and dialog errors</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/debug-apps" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/debug-apps" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/debug-apps" ><span class="devsite-nav-text" tooltip>Debug Chat apps</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Publish</span> </div></li> <li class="devsite-nav-item"><a href="/workspace/chat/apps-publish" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/apps-publish" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/apps-publish" ><span class="devsite-nav-text" tooltip>Publish Google Chat apps</span></a></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Publish to Google Workspace Marketplace</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-external"><a href="/workspace/marketplace/how-to-publish" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/marketplace/how-to-publish" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/marketplace/how-to-publish" target="_blank"><span class="devsite-nav-text" tooltip>Publish apps to the Google Workspace Marketplace</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="/workspace/marketplace/about-app-review" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/marketplace/about-app-review" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/marketplace/about-app-review" target="_blank"><span class="devsite-nav-text" tooltip>Process and review requirements for public apps</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Maintain published apps</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-external"><a href="/workspace/marketplace/manage-app-listing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/marketplace/manage-app-listing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/marketplace/manage-app-listing" target="_blank"><span class="devsite-nav-text" tooltip>Update or unpublish an app listing in the Google Workspace Marketplace</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Migrate Chat apps after merging organizations</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/determine-chat-app-migration" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/determine-chat-app-migration" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/determine-chat-app-migration" ><span class="devsite-nav-text" tooltip>Determine if Chat apps need to migrate</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/migrate-apps" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/migrate-apps" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/migrate-apps" ><span class="devsite-nav-text" tooltip>Migrate Chat apps to a new organization</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item"><a href="/workspace/chat/turn-off-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/turn-off-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/turn-off-app" ><span class="devsite-nav-text" tooltip>Turn off or delete an app</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Manage Chat as a Google Workspace administrator</span> </div></li> <li class="devsite-nav-item"><a href="/workspace/chat/admin-overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/admin-overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/admin-overview" ><span class="devsite-nav-text" tooltip>Overview</span></a></li> <li class="devsite-nav-item"><a href="/workspace/chat/search-manage-admin" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/search-manage-admin" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/search-manage-admin" ><span class="devsite-nav-text" tooltip>Search for and manage spaces in your organization</span></a></li> <li class="devsite-nav-item"><a href="/workspace/chat/space-target-audience" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/space-target-audience" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/space-target-audience" ><span class="devsite-nav-text" tooltip>Make a space discoverable to specific users</span></a></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Migrate your organization to Chat</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/workspace/chat/import-data-overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/import-data-overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/import-data-overview" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/authorize-import" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/authorize-import" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/authorize-import" ><span class="devsite-nav-text" tooltip>Authorize Chat apps to import data</span></a></li><li class="devsite-nav-item"><a href="/workspace/chat/import-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /workspace/chat/import-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/workspace/chat/import-data" ><span class="devsite-nav-text" tooltip>Import data to Chat</span></a></li></ul></div></li> </ul> <ul class="devsite-nav-list" menu="All products" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Google Workspace apps </span> </span> </li> <li class="devsite-nav-item"> <a href="/admin-sdk" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Admin console" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Admin console </span> </a> </li> <li class="devsite-nav-item"> <a href="/cloud-search" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Search" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Search </span> </a> </li> <li class="devsite-nav-item"> <a href="/gmail" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Gmail" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Gmail </span> </a> </li> <li class="devsite-nav-item"> <a href="/calendar" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Calendar" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Calendar </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/chat" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Chat" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Chat </span> </a> </li> <li class="devsite-nav-item"> <a href="/classroom" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Classroom" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Classroom </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Docs" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Docs </span> </a> </li> <li class="devsite-nav-item"> <a href="/drive" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Drive" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Drive </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip >   </span> </span> </li> <li class="devsite-nav-item"> <a href="/forms" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Forms" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Forms </span> </a> </li> <li class="devsite-nav-item"> <a href="/keep" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Keep" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Keep </span> </a> </li> <li class="devsite-nav-item"> <a href="/meet" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Meet" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Meet </span> </a> </li> <li class="devsite-nav-item"> <a href="/sheets" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Sheets" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Sheets </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/sites" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Sites" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Sites </span> </a> </li> <li class="devsite-nav-item"> <a href="/slides" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Slides" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Slides </span> </a> </li> <li class="devsite-nav-item"> <a href="/tasks" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Tasks" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Tasks </span> </a> </li> <li class="devsite-nav-item"> <a href="/vault" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Vault" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Vault </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Extend, automate &amp; share </span> </span> </li> <li class="devsite-nav-item"> <a href="/workspace/add-ons" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add-ons" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add-ons </span> </a> </li> <li class="devsite-nav-item"> <a href="/apps-script" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Apps Script" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Apps Script </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/chat/overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Chat apps" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Chat apps </span> </a> </li> <li class="devsite-nav-item"> <a href="/drive/api/guides/about-apps" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Drive apps" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Drive apps </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/marketplace" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Marketplace" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Marketplace </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Resources" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Tools </span> </span> </li> <li class="devsite-nav-item"> <a href="https://admin.google.com/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Admin console" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Admin console </span> </a> </li> <li class="devsite-nav-item"> <a href="https://script.google.com/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Apps Script dashboard" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Apps Script dashboard </span> </a> </li> <li class="devsite-nav-item"> <a href="https://console.cloud.google.com/workspace-api" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud console" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud console </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/explore" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: APIs Explorer" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > APIs Explorer </span> </a> </li> <li class="devsite-nav-item"> <a href="https://addons.gsuite.google.com/uikit/builder" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Card Builder" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Card Builder </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Training &amp; support </span> </span> </li> <li class="devsite-nav-item"> <a href="/workspace/guides/get-started" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: How to get started" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > How to get started </span> </a> </li> <li class="devsite-nav-item"> <a href="https://codelabs.developers.google.com/?product=googleworkspace" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Codelabs" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Codelabs </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/support" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Developer support" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Developer support </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Updates </span> </span> </li> <li class="devsite-nav-item"> <a href="https://developers.googleblog.com/search/?query=Google+Workspace" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Blog" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Blog </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/preview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Developer Previews" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Developer Previews </span> </a> </li> <li class="devsite-nav-item"> <a href="/workspace/newsletters" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Newsletter" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Newsletter </span> </a> </li> <li class="devsite-nav-item"> <a href="https://twitter.com/workspacedevs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: X (Twitter)" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > X (Twitter) </span> </a> </li> <li class="devsite-nav-item"> <a href="https://www.youtube.com/channel/UCUcg6az6etU_gRtZVAhBXaw" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: YouTube" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > YouTube </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" class="devsite-main-content" has-book-nav > <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Home </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/workspace" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Google Workspace" > Google Workspace </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/workspace/chat" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="Google Chat" > Google Chat </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/workspace/chat/overview" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="" > Guides </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <devsite-feedback position="header" project-name="Google Chat" product-id="717201" bucket="google-chat" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="header" class="nocontent" project-feedback-url="https://issuetracker.google.com/issues/new?component=350158&amp;template=1047215" project-icon="https://www.gstatic.com/images/branding/productlogos/chat_2023q4/v2/web-64dp/logo_chat_2023q4_color_1x_web_64dp.png" project-support-url="https://developers.google.com/workspace/chat/support" > <button> Send feedback </button> </devsite-feedback> <h1 class="devsite-page-title" tabindex="-1"> Authenticate as a Google Chat app </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <p>This guide explains how to set up and use a service account to access the <a href="/workspace/chat/api/reference/rest">Google Chat API</a> on behalf of a Chat app. First, it walks you through how to create a service account. Then, it demonstrates how to write a script that uses the service account to authenticate with the Chat API and post a message in a Chat space.</p> <p>When authenticated with a service account, to get data about or perform actions in a Chat space, Chat apps must have membership in the space. For example, to list members of a space, or to create a message in a space, the Chat app has to itself be a member of the space. The only exception is when a Chat apps creates a space with app authentication, in which case the app creates the space and then automatically becomes a member.</p> <p>Google Chat API methods that support app authorization with authorization scopes that have names that begin <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.app.*</code> require one-time <a href="https://support.google.com/a?p=chat-app-auth">administrator approval</a>. Google Chat API methods that support app authorization with the <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.bot</code> authorization scope don&#39;t require additional approval. The <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.app.*</code> authorization scopes are available in <a href="/workspace/preview">Developer Preview</a>.</p> <p>If your Chat app needs to access user data or perform actions on a user&#39;s behalf, <a href="/workspace/chat/authenticate-authorize-chat-user">authenticate as a user</a> instead. If you&#39;re a domain administrator, you can grant domain-wide delegation of authority to authorize a Chat app&#39;s service account to access your user&#39;s data without requiring each user to give consent. For more information, see <a href="/workspace/chat/authenticate-authorize-chat-user#domain-wide-delegation">Authenticate and authorize using domain-wide delegation</a>.</p> <p>To learn more about when Chat apps require authentication and what kind of authentication to use, see <a href="/workspace/chat/authenticate-authorize#types_of_required_authentication">Types of required authentication</a> in the Chat API authentication and authorization overview.</p> <h2 id="prerequisites" data-text="Prerequisites" tabindex="-1">Prerequisites</h2> <p></p> <div class="ds-selector-tabs" data-ds-scope="code-sample"> <section><h3 id="java" data-text="Java" tabindex="-1">Java</h3><p> </p> <ul> <li> <a href="https://openjdk.org/install">JDK</a> 1.7 or greater </li> <li> The <a href="https://maven.apache.org/">Maven</a> package management tool </li> <li> An initialized Maven project. To initialize a new project, run the following command in your command-line interface: <div></div><devsite-code><pre class="devsite-click-to-copy posix-terminal" translate="no" dir="ltr" is-upgraded syntax="Java"><span class="devsite-syntax-n">mvn</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">archetype</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-n">generate</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">DgroupId</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">com</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">google</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">chat</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">app</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">authsample</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">DartifactId</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">auth</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">sample</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">app</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">DarchetypeArtifactId</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">maven</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">archetype</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">quickstart</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">DarchetypeVersion</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-mf">1.4</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">DinteractiveMode</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-kc">false</span></pre></devsite-code> </li> <li> A Google Chat app that's enabled for interactive features. To create an interactive Chat app using an HTTP service, complete this <a href="/workspace/chat/quickstart/gcf-app">quickstart</a>. </li> <li> Add the Chat app to a space. To add the Chat app, see <a href="/workspace/chat/test-interactive-features"> Test interactive features for Google Chat apps</a>. </li> </ul></section> <section><h3 id="python" data-text="Python" tabindex="-1">Python</h3><p> </p> <ul> <li> Python 3.6 or greater </li> <li> The <a href="https://pypi.python.org/pypi/pip">pip</a> package management tool </li> <li> A Google Chat app that's enabled for interactive features. To create an interactive Chat app using an HTTP service, complete this <a href="/workspace/chat/quickstart/gcf-app">quickstart</a>. </li> <li> Add the Chat app to a space. To add the Chat app, see <a href="/workspace/chat/test-interactive-features"> Test interactive features for Google Chat apps</a>. </li> </ul></section> <section><h3 id="node.js" data-text="Node.js" tabindex="-1">Node.js</h3><p> </p> <ul> <li> <a href="https://nodejs.org/en/download">Node.js 14 or greater</a> </li> <li> The <a href="https://docs.npmjs.com/getting-started/installing-node#1-install-nodejs--npm">npm</a> package management tool </li> <li> An initialized Node.js project. To initialize a new project, create and switch into a new folder, then run the following command in your command-line interface: <div></div><devsite-code><pre class="devsite-click-to-copy posix-terminal" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><span class="devsite-syntax-nx">npm</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">init</span></pre></devsite-code> </li> <li> A Google Chat app that's enabled for interactive features. To create an interactive Chat app using an HTTP service, complete this <a href="/workspace/chat/quickstart/gcf-app">quickstart</a>. </li> <li> Add the Chat app to a space. To add the Chat app, see <a href="/workspace/chat/test-interactive-features"> Test interactive features for Google Chat apps</a>. </li> </ul></section> <section><h3 id="apps-script" data-text="Apps Script" tabindex="-1">Apps Script</h3><p> </p> <ul> <li> A Google Chat app that's enabled for interactive features. To create an interactive Chat app in Apps Script, complete this <a href="/workspace/chat/quickstart/apps-script-app">quickstart</a>. </li> <li> Add the Chat app to a space. To add the Chat app, see <a href="/workspace/chat/test-interactive-features"> Test interactive features for Google Chat apps</a>. </li> </ul></section> </div> <h2 id="create-service-account" data-text="Step 1: Create a service account in Google Cloud console" tabindex="-1">Step 1: Create a service account in Google Cloud console</h2> <p>Create a service account that your Chat app can use to access Google APIs.</p> <h3 id="create_a_service_account" data-text="Create a service account" tabindex="-1">Create a service account</h3> <p>To create a service account, follow these steps:</p> <devsite-selector> <section> <h3 id="google-cloud-console" data-text="Google Cloud console" tabindex="-1">Google Cloud console</h3> <ol> <li> In the Google Cloud console, go to Menu <span class="material-icons" aria-hidden="true" translate="no">menu</span> <span aria-label="and then">></span> <b>IAM &amp; Admin</b> <span aria-label="and then">></span> <b>Service Accounts</b>. <p><a href="https://console.cloud.google.com/iam-admin/serviceaccounts" class="button button-primary" target="console">Go to Service Accounts</a></p> </li> <li>Click <b>Create service account</b>.</li> <li>Fill in the service account details, then click <b>Create and continue</b>. <aside class="note">Note: By default, Google creates a unique service account ID. If you would like to change the ID, modify the ID in the service account ID field.</aside> </li> <li>Optional: Assign roles to your service account to grant access to your Google Cloud project's resources. For more details, refer to <a href="https://cloud.google.com/iam/docs/granting-changing-revoking-access" target="_blank" class="external">Granting, changing, and revoking access to resources</a>.</li> <li>Click <b>Continue</b>.</li> <li>Optional: Enter users or groups that can manage and perform actions with this service account. For more details, refer to <a href="https://cloud.google.com/iam/docs/impersonating-service-accounts" target="_blank" class="external">Managing service account impersonation</a>.</li> <li>Click <b>Done</b>. Make a note of the email address for the service account.</li> </ol> </section> <section> <h3 id="gcloud-cli" data-text="gcloud CLI" tabindex="-1">gcloud CLI</h3> <ol> <li>Create the service account: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash Session"><code class="devsite-terminal" translate="no" dir="ltr"><span class="devsite-syntax-go">gcloud iam service-accounts create <var translate="no"><code translate="no" dir="ltr">SERVICE_ACCOUNT_NAME</code></var> \</span> <span class="devsite-syntax-go"> --display-name="<var translate="no"><code translate="no" dir="ltr">SERVICE_ACCOUNT_NAME</code></var>"</span></code></pre></devsite-code> </li> <li>Optional: Assign roles to your service account to grant access to your Google Cloud project's resources. For more details, refer to <a href="https://cloud.google.com/iam/docs/granting-changing-revoking-access" target="_blank" class="external">Granting, changing, and revoking access to resources</a>.</li> </ol> </section> </devsite-selector> <p>The service account appears on the service account page. Next, create a private key for the service account.</p> <h3 id="create-private-key" data-text="Create a private key" tabindex="-1">Create a private key</h3> <aside class="warning"> <p> <b>Warning: </b> This example uses an exported service account key for simplicity's sake. Exporting a private key is not recommended in production because it shouldn't be stored in an insecure location, such as source control. </p> <p> To learn more about secure service account implementations and best practices, see <a href="https://cloud.google.com/iam/docs/best-practices-for-using-and-managing-service-accounts#choose-when-to-use">Choose when to use service accounts</a>.</p></aside> <p> </p> <p>To create and download a private key for the service account, follow these steps:</p> <ol> <li> In the Google Cloud console, go to Menu <span class="material-icons" aria-hidden="true" translate="no">menu</span> <span aria-label="and then">></span> <b>IAM &amp; Admin</b> <span aria-label="and then">></span> <b>Service Accounts</b>. <p><a href="https://console.cloud.google.com/iam-admin/serviceaccounts" class="button button-primary" target="console">Go to Service Accounts</a></p> </li> <li>Select your service account.</li> <li>Click <b>Keys</b> <span aria-label="and then">></span> <b>Add key</b> <span aria-label="and then">></span> <b>Create new key</b>.</li> <li>Select <b>JSON</b>, then click <b>Create</b>. <p>Your new public/private key pair is generated and downloaded to your machine as a new file. Save the downloaded JSON file as <code translate="no" dir="ltr">credentials.json</code> in your working directory. This file is the only copy of this key. For information about how to store your key securely, see <a href="https://cloud.google.com/iam/docs/best-practices-for-managing-service-account-keys" target="_blank" class="external">Managing service account keys</a>.</p> </li> <li>Click <b>Close</b>.</li> </ol> <p>For more information about service accounts, see <a href="https://cloud.google.com/iam/docs/service-accounts">service accounts</a> in the Google Cloud IAM documentation.</p> <p>Next, create a Google Workspace Marketplace-compatible OAuth client for this service account.</p> <h3 id="admin-approval" data-text="Receive administrator approval" tabindex="-1">Receive administrator approval</h3> <aside class="preview"><strong>Developer Preview:</strong> Available as part of the <a href="https://developers.google.com/workspace/preview" target="_blank" class="external">Google Workspace Developer Preview Program</a>, which grants early access to certain features.</aside> <p>To use an authorization scope that begins with <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.app.*</code>, which are available as part of a Developer Preview, your Chat app must get a one-time <a href="https://support.google.com/a?p=chat-app-auth">administrator approval</a>.</p> <p>To use the <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.bot</code> authorization scope, no administrator approval is required.</p> <p>To receive administrator approval, you must prepare your Chat app&#39;s service account with the following information:</p> <ul> <li>A Google Workspace Marketplace-compatible OAuth client.</li> <li>App configuration in the Google Workspace Marketplace SDK.</li> </ul> <h4 id="create-gwm-oauth-client" data-text="Create a Google Workspace Marketplace-compatible OAuth client" tabindex="-1">Create a Google Workspace Marketplace-compatible OAuth client</h4> <p>To create a Google Workspace Marketplace-compatible OAuth client, follow these steps:</p> <ol> <li><p>In the Google Cloud console, go to Menu <span class="material-icons" aria-hidden="true" translate="no">menu</span> <span aria-label="and then">&gt;</span> <strong>IAM &amp; Admin</strong> <span aria-label="and then">&gt;</span> <strong>Service Accounts</strong>.</p> <p><a href="https://console.cloud.google.com/iam-admin/serviceaccounts" target="console" class="button button-blue">Go to Service Accounts</a> </p></li> <li><p>Click the service account you created for your Chat app.</p></li> <li><p>Click <strong>Advanced settings</strong>.</p></li> <li><p>Click <strong>Create Google Workspace Marketplace-compatible OAuth client</strong>.</p></li> <li><p>Click <strong>Continue</strong>.</p></li> </ol> <p>A confirmation message appears that says a Google Workspace Marketplace-compatible OAuth client has been created.</p> <h4 id="configure-gwm" data-text="Configure the Chat app in the Google Workspace Marketplace SDK" tabindex="-1">Configure the Chat app in the Google Workspace Marketplace SDK</h4> <p>To configure the Chat app in the Google Workspace Marketplace SDK, follow these steps:</p> <ol> <li><p>In the Google Cloud console, enable the Google Workspace Marketplace SDK.</p> <p><a href="https://console.cloud.google.com/flows/enableapi?apiid=appsmarket-component.googleapis.com" class="button button-blue" track-type="tasks" track-name="consoleLink" track-metadata-end-goal="enableApis" target="console">Enable the Google Workspace Marketplace SDK</a> </p></li> <li><p>In the Google Cloud console, go to go to <strong>Menu</strong> <span class="material-icons" aria-hidden="true" translate="no">menu</span> <span aria-label="and then">&gt;</span> <strong>APIs &amp; Services</strong> <span aria-label="and then">&gt;</span> <strong>Enabled APIs &amp; services</strong> <span aria-label="and then">&gt;</span> <strong>Google Workspace Marketplace SDK</strong> <span aria-label="and then">&gt;</span> <strong>App Configuration</strong>.</p> <p><a href="https://console.cloud.google.com/apis/api/appsmarket-component.googleapis.com/googleapps_sdk" class="button button-blue" track-type="tasks" track-name="consoleLink" track-metadata-end-goal="goToAppConfiguration" target="console">Go to App Configuration</a> </p></li> <li><p>Complete the App Configuration page. How you configure your Chat app depends on who your intended audience is and other factors. For help completing the app configuration page, see <a href="/workspace/marketplace/enable-configure-sdk">Configure your app in the Google Workspace Marketplace SDK</a>. For the purposes of this guide, enter the following information:</p> <ol> <li>Under <strong>App visibility</strong>, select <strong>Private</strong>.</li> <li>Under <strong>Installation settings</strong>, select <strong>Individual + admin install</strong>.</li> <li>Under <strong>App integrations</strong>, select <strong>Chat app</strong>.</li> <li><p>Under <strong>OAuth scopes</strong>, enter all the <a href="/workspace/chat/authenticate-authorize#chat-api-scopes">authentication scopes</a> your Chat app uses.</p> <aside class="warning"><strong>Warning:</strong><span> Don&#39;t enter the <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.bot</code> authorization scope, which doesn&#39;t require configuration on this page. Since the example in this guide uses the <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.bot</code> authorization scope, to run the example, you don&#39;t need to enter anything here.</span></aside></li> <li><p>Under <strong>Developer information</strong>, enter your <strong>Developer name</strong>, <strong>Developer website URL</strong>, and <strong>Developer email</strong>.</p></li> <li><p>Click <strong>Save draft</strong>.</p></li> </ol></li> </ol> <h4 id="get-admin-approval" data-text="Get administrator approval" tabindex="-1">Get administrator approval</h4> <p>Now that your service account is configured to receive administrator approval, obtain it from a Google Workspace administrator who can grant approval by following the steps in <a href="https://support.google.com/a?p=chat-app-auth">Set up authorization for Chat apps</a>.</p> <h2 id="step_2_install_the_google_client_library_and_other_dependencies" data-text="Step 2: Install the Google client library and other dependencies" tabindex="-1">Step 2: Install the Google client library and other dependencies</h2> <p>Install the Google client library and other dependencies required for the project.</p> <div class="ds-selector-tabs" data-ds-scope="code-sample"> <section><h3 id="java_1" data-text="Java" tabindex="-1">Java</h3><p>To add the Google client libraries and other required dependencies to your Maven project, edit the file <code translate="no" dir="ltr">pom.xml</code> in your project&#39;s directory and add the following dependencies:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="XML"><code translate="no" dir="ltr">&lt;dependencies&gt; <span class="devsite-syntax-w"> </span>&lt;!--<span class="devsite-syntax-w"> </span>...<span class="devsite-syntax-w"> </span>existing<span class="devsite-syntax-w"> </span>dependencies<span class="devsite-syntax-w"> </span>...<span class="devsite-syntax-w"> </span>--&gt; <span class="devsite-syntax-w"> </span>&lt;dependency&gt; <span class="devsite-syntax-w"> </span>&lt;groupId&gt;com.google.apis&lt;/groupId&gt; <span class="devsite-syntax-w"> </span>&lt;artifactId&gt;google-api-services-chat&lt;/artifactId&gt; <span class="devsite-syntax-w"> </span>&lt;version&gt;v1-rev20230905-2.0.0&lt;/version&gt; <span class="devsite-syntax-w"> </span>&lt;/dependency&gt; <span class="devsite-syntax-w"> </span>&lt;dependency&gt; <span class="devsite-syntax-w"> </span>&lt;groupId&gt;com.google.auth&lt;/groupId&gt; <span class="devsite-syntax-w"> </span>&lt;artifactId&gt;google-auth-library-oauth2-http&lt;/artifactId&gt; <span class="devsite-syntax-w"> </span>&lt;version&gt;1.19.0&lt;/version&gt; <span class="devsite-syntax-w"> </span>&lt;/dependency&gt; <span class="devsite-syntax-w"> </span>&lt;dependency&gt; <span class="devsite-syntax-w"> </span>&lt;groupId&gt;com.google.code.gson&lt;/groupId&gt; <span class="devsite-syntax-w"> </span>&lt;artifactId&gt;gson&lt;/artifactId&gt; <span class="devsite-syntax-w"> </span>&lt;version&gt;2.10.1&lt;/version&gt; <span class="devsite-syntax-w"> </span>&lt;/dependency&gt; &lt;/dependencies&gt; </code></pre></devsite-code></section> <section><h3 id="python_1" data-text="Python" tabindex="-1">Python</h3><p>If you haven&#39;t already installed the Google client libraries for Python, run the following command in your command-line interface:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code class="devsite-terminal" translate="no" dir="ltr">pip3<span class="devsite-syntax-w"> </span>install<span class="devsite-syntax-w"> </span>--upgrade<span class="devsite-syntax-w"> </span>google-api-python-client<span class="devsite-syntax-w"> </span>google-auth</code></pre></devsite-code></section> <section><h3 id="node.js_1" data-text="Node.js" tabindex="-1">Node.js</h3><p>To add the Google client libraries to your Node.js project, switch into your project&#39;s directory and run the following command in your command-line interface:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code class="devsite-terminal" translate="no" dir="ltr">npm<span class="devsite-syntax-w"> </span>install<span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"@googleapis/chat"</span></code></pre></devsite-code></section> <section><h3 id="apps-script_1" data-text=" Apps Script " tabindex="-1"> Apps Script </h3><p>This sample uses the <a href="https://github.com/googleworkspace/apps-script-oauth2">OAuth2 for Apps Script library</a> to generate a JWT token for service account authentication. To add the library to your Apps Script project:</p> <ol> <li>At the left, click <strong>Editor</strong> <span class="material-icons" aria-hidden="true" translate="no">code</span>.</li> <li>At the left, next to <strong>Libraries</strong>, click <strong>Add a library</strong> <span class="material-icons" aria-hidden="true" translate="no">add</span>.</li> <li>Enter the script ID <code translate="no" dir="ltr">1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF</code>.</li> <li>Click <strong>Look up</strong>, then click <strong>Add</strong>.</li> </ol> <p>This sample uses the <a href="/apps-script/advanced/chat">Advanced Chat service</a> to call Google Chat API. To turn on the service for your Apps Script project:</p> <ol> <li>At the left, click <strong>Editor</strong> <span class="material-icons" aria-hidden="true" translate="no">code</span>.</li> <li>At the left, next to <strong>Services</strong>, click <strong>Add a service</strong> <span class="material-icons" aria-hidden="true" translate="no">add</span>.</li> <li>Select <strong>Google Chat API</strong>.</li> <li>In <strong>Version</strong>, select <strong>v1</strong>.</li> <li>Click <strong>Add</strong>.</li> </ol></section> </div> <p>You can use any language supported by our <a href="/api-client-library">client libraries</a>.</p> <h2 id="write-a-script" data-text="Step 3: Write a script that uses the service account to authenticate with Chat API" tabindex="-1">Step 3: Write a script that uses the service account to authenticate with Chat API</h2> <p>The following code authenticates with the <a href="/workspace/chat/api/reference/rest">Chat API</a> using a service account, then posts a message to a Chat space:</p> <aside class="note"><strong>Note:</strong><span> To try a sample that authenticates with a <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.app.*</code> authorization scope, available as part of a Developer Preview, see <a href="/workspace/chat/create-spaces#create-named-app-auth">Create a space as a Chat app</a>.</span></aside><div class="ds-selector-tabs" data-ds-scope="code-sample"> <section><h3 id="java_2" data-text="Java" tabindex="-1">Java</h3><ol> <li>In your project&#39;s directory, open the file <code translate="no" dir="ltr">src/main/java/com/google/chat/app/authsample/App.java</code>.</li> <li><p>Replace the contents in <code translate="no" dir="ltr">App.java</code> with the following code:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Java"><code translate="no" dir="ltr"><span class="devsite-syntax-kn">package</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.chat.app.authsample</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.api.client.googleapis.javanet.GoogleNetHttpTransport</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.api.client.http.HttpRequestInitializer</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.api.client.json.gson.GsonFactory</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.api.services.chat.v1.HangoutsChat</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.api.services.chat.v1.model.Message</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.auth.http.HttpCredentialsAdapter</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.auth.oauth2.GoogleCredentials</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-cm">/**</span> <span class="devsite-syntax-cm"> * Authenticates with Chat API using service account credentials,</span> <span class="devsite-syntax-cm"> * then creates a Chat message.</span> <span class="devsite-syntax-cm"> */</span> <span class="devsite-syntax-kd">public</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">class</span> <span class="devsite-syntax-nc">App</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Specify required scopes.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">private</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">static</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">final</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">CHAT_SCOPE</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"https://www.googleapis.com/auth/chat.bot"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Specify service account details.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">private</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">static</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">final</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">PRIVATE_KEY_RESOURCE_URI</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"/credentials.json"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">public</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">static</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kt">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">main</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-o">[]</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">args</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">try</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Run app.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Message</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">response</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">App</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">createChatMessage</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Print details about the created message.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">System</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">out</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">response</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">catch</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Exception</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">printStackTrace</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">private</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">static</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Message</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">createChatMessage</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">throws</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Exception</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Build the Chat API client and authenticate with the service account.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GoogleCredentials</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GoogleCredentials</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">fromStream</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">App</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">class</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getResourceAsStream</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">PRIVATE_KEY_RESOURCE_URI</span><span class="devsite-syntax-p">))</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">createScoped</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">CHAT_SCOPE</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">HttpRequestInitializer</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">requestInitializer</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">HttpCredentialsAdapter</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">HangoutsChat</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">chatService</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">HangoutsChat</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">Builder</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GoogleNetHttpTransport</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">newTrustedTransport</span><span class="devsite-syntax-p">(),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GsonFactory</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getDefaultInstance</span><span class="devsite-syntax-p">(),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">requestInitializer</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setApplicationName</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"auth-sample-app"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">build</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// The space to create the message in.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">//</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Replace SPACE_NAME with a space name.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Obtain the space name from the spaces resource of Chat API,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// or from a space's URL.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">spaceName</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"spaces/<var translate="no">SPACE_NAME</var>"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Create a Chat message.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Message</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">message</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Message</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">setText</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Hello, world!"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">chatService</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">spaces</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">messages</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">create</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">spaceName</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">message</span><span class="devsite-syntax-p">).</span><span class="devsite-syntax-na">execute</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code></li> <li><p>In the code, replace <code translate="no" dir="ltr"><var translate="no">SPACE_NAME</var></code> with a space name, which you can obtain from the <a href="/workspace/chat/api/reference/rest/v1/spaces/list"><code translate="no" dir="ltr">spaces.list</code></a> method in Chat API, or from a space&#39;s URL.</p></li> <li><p>Create a new subdirectory named <code translate="no" dir="ltr">resources</code> within your project&#39;s directory.</p></li> <li><p>Make sure that the private key file for your service account is named <code translate="no" dir="ltr">credentials.json</code> and copy it to the <code translate="no" dir="ltr">resources</code> subdirectory.</p></li> <li><p>To configure Maven to include the private key file in the project package, edit the file <code translate="no" dir="ltr">pom.xml</code> in your project&#39;s directory and add the following configuration to the <code translate="no" dir="ltr">&lt;build&gt;</code> section:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="XML"><code translate="no" dir="ltr">&lt;build&gt; <span class="devsite-syntax-w"> </span>&lt;!--<span class="devsite-syntax-w"> </span>...<span class="devsite-syntax-w"> </span>existing<span class="devsite-syntax-w"> </span>configurations<span class="devsite-syntax-w"> </span>...<span class="devsite-syntax-w"> </span>--&gt; <span class="devsite-syntax-w"> </span>&lt;resources&gt; <span class="devsite-syntax-w"> </span>&lt;resource&gt; <span class="devsite-syntax-w"> </span>&lt;directory&gt;resources&lt;/directory&gt; <span class="devsite-syntax-w"> </span>&lt;/resource&gt; <span class="devsite-syntax-w"> </span>&lt;/resources&gt; &lt;/build&gt; </code></pre></devsite-code></li> <li><p>To configure Maven to include the dependencies in the project package and to execute your application&#39;s main class, edit the file <code translate="no" dir="ltr">pom.xml</code> in your project&#39;s directory and add the following configuration to the <code translate="no" dir="ltr">&lt;plugins&gt;</code> section:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="XML"><code translate="no" dir="ltr">&lt;plugins&gt; <span class="devsite-syntax-w"> </span>&lt;!--<span class="devsite-syntax-w"> </span>...<span class="devsite-syntax-w"> </span>existing<span class="devsite-syntax-w"> </span>configurations<span class="devsite-syntax-w"> </span>...<span class="devsite-syntax-w"> </span>--&gt; <span class="devsite-syntax-w"> </span>&lt;plugin&gt; <span class="devsite-syntax-w"> </span>&lt;artifactId&gt;maven-assembly-plugin&lt;/artifactId&gt; <span class="devsite-syntax-w"> </span>&lt;configuration&gt; <span class="devsite-syntax-w"> </span>&lt;archive&gt; <span class="devsite-syntax-w"> </span>&lt;manifest&gt; <span class="devsite-syntax-w"> </span>&lt;mainClass&gt;com.google.chat.app.authsample.App&lt;/mainClass&gt; <span class="devsite-syntax-w"> </span>&lt;/manifest&gt; <span class="devsite-syntax-w"> </span>&lt;/archive&gt; <span class="devsite-syntax-w"> </span>&lt;descriptorRefs&gt; <span class="devsite-syntax-w"> </span>&lt;descriptorRef&gt;jar-with-dependencies&lt;/descriptorRef&gt; <span class="devsite-syntax-w"> </span>&lt;/descriptorRefs&gt; <span class="devsite-syntax-w"> </span>&lt;/configuration&gt; <span class="devsite-syntax-w"> </span>&lt;/plugin&gt; &lt;/plugins&gt; </code></pre></devsite-code></li> </ol></section> <section><h3 id="python_2" data-text="Python" tabindex="-1">Python</h3><ol> <li>In your working directory, create a file named <code translate="no" dir="ltr">chat_app_auth.py</code>.</li> <li><p>Include the following code in <code translate="no" dir="ltr">chat_app_auth.py</code>:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">apiclient.discovery</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">build</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">google.oauth2</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">service_account</span> <span class="devsite-syntax-c1"># Specify required scopes.</span> <span class="devsite-syntax-n">SCOPES</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'https://www.googleapis.com/auth/chat.bot'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-c1"># Specify service account details.</span> <span class="devsite-syntax-n">creds</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">service_account</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Credentials</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">from_service_account_file</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-s1">'credentials.json'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">scopes</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">SCOPES</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Build the URI and authenticate with the service account.</span> <span class="devsite-syntax-n">chat</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">build</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'chat'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s1">'v1'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">creds</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Create a Chat message.</span> <span class="devsite-syntax-n">result</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">chat</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">spaces</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">messages</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">create</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-c1"># The space to create the message in.</span> <span class="devsite-syntax-c1">#</span> <span class="devsite-syntax-c1"># Replace SPACE_NAME with a space name.</span> <span class="devsite-syntax-c1"># Obtain the space name from the spaces resource of Chat API,</span> <span class="devsite-syntax-c1"># or from a space's URL.</span> <span class="devsite-syntax-n">parent</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'spaces/<var translate="no">SPACE_NAME</var>'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-c1"># The message to create.</span> <span class="devsite-syntax-n">body</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-s1">'text'</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s1">'Hello, world!'</span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">execute</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-c1"># Prints details about the created message.</span> <span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">result</span><span class="devsite-syntax-p">)</span> </code></pre></devsite-code></li> <li><p>In the code, replace <code translate="no" dir="ltr"><var translate="no">SPACE_NAME</var></code> with a space name, which you can obtain from the <a href="/workspace/chat/api/reference/rest/v1/spaces/list"><code translate="no" dir="ltr">spaces.list</code></a> method in Chat API, or from a space&#39;s URL. Make sure that the private key file for your service account is named <code translate="no" dir="ltr">credentials.json</code>.</p></li> </ol></section> <section><h3 id="node.js_2" data-text="Node.js" tabindex="-1">Node.js</h3><ol> <li>In your project&#39;s directory, create a file named <code translate="no" dir="ltr">chat_app_auth.js</code>.</li> <li><p>Include the following code in <code translate="no" dir="ltr">chat_app_auth.js</code>:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">chat</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">require</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'@googleapis/chat'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-k">async</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">function</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">createMessage</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">auth</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-ow">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">chat</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">auth</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">GoogleAuth</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Specify service account details.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">keyFilename</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'credentials.json'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Specify required scopes.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">scopes</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'https://www.googleapis.com/auth/chat.bot'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">authClient</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">auth</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">getClient</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Create the Chat API client and authenticate with the service account.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">chatClient</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">chat</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">chat</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">version</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'v1'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">auth</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">authClient</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Create a Chat message.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">result</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">chatClient</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">spaces</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">messages</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">create</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// The space to create the message in.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">//</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Replace SPACE_NAME with a space name.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Obtain the space name from the spaces resource of Chat API,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// or from a space's URL.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">parent</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'spaces/<var translate="no">SPACE_NAME</var>'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// The message to create.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">requestBody</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'text'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'Hello, world!'</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">result</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-c1">// Execute function then print details about the created message.</span> <span class="devsite-syntax-nx">createMessage</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-nx">then</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">);</span> </code></pre></devsite-code></li> <li><p>In the code, replace <code translate="no" dir="ltr"><var translate="no">SPACE_NAME</var></code> with a space name, which you can obtain from the <a href="/workspace/chat/api/reference/rest/v1/spaces/list"><code translate="no" dir="ltr">spaces.list</code></a> method in Chat API, or from a space&#39;s URL. Make sure that the private key file for your service account is named <code translate="no" dir="ltr">credentials.json</code>.</p></li> </ol></section> <section><h3 id="apps-script_2" data-text=" Apps Script " tabindex="-1"> Apps Script </h3><ol> <li><p>In the Apps Script editor, edit the file <code translate="no" dir="ltr">appsscript.json</code> and add the OAuth scope necessary to make external requests to obtain the service account OAuth token:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JSON"><code translate="no" dir="ltr"><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nt">"oauthScopes"</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">[</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"https://www.googleapis.com/auth/script.external_request"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">]</span> </code></pre></devsite-code></li> <li><p>Save the following code in a file named <code translate="no" dir="ltr">ChatAppAuth.gs</code> in your Apps Script project:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-c1">// Specify the contents of the file credentials.json.</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">CREDENTIALS</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><var translate="no"><span class="devsite-syntax-nx">CREDENTIALS</span></var><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">SCOPE</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'https://www.googleapis.com/auth/chat.bot'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-c1">// The space to create the message in.</span> <span class="devsite-syntax-c1">//</span> <span class="devsite-syntax-c1">// Replace SPACE_NAME with a space name.</span> <span class="devsite-syntax-c1">// Obtain the space name from the spaces resource of Chat API,</span> <span class="devsite-syntax-c1">// or from a space's URL.</span> <span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">PARENT</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'spaces/<var translate="no">SPACE_NAME</var>'</span> <span class="devsite-syntax-cm">/**</span> <span class="devsite-syntax-cm"> * Authenticates with Chat API using app credentials, then posts a message.</span> <span class="devsite-syntax-cm"> */</span> <span class="devsite-syntax-kd">function</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">createMessageWithAppCredentials</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">try</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">service</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getService_</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">!</span><span class="devsite-syntax-nx">service</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">hasAccess</span><span class="devsite-syntax-p">())</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">error</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">service</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">getLastError</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Specify the message to create.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">message</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-s1">'text'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'Hello world!'</span><span class="devsite-syntax-p">};</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Call Chat API with a service account to create a message.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">result</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Chat</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Spaces</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Messages</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">create</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">message</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">PARENT</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Authenticate with the service account token.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-s1">'Authorization'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'Bearer '</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">service</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">getAccessToken</span><span class="devsite-syntax-p">()});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// Log details about the created message.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">result</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">catch</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-c1">// TODO (developer) - Handle exception.</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">console</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Failed to create message with error %s'</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">message</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-cm">/**</span> <span class="devsite-syntax-cm"> * Configures the OAuth library to authenticate with the service account.</span> <span class="devsite-syntax-cm"> */</span> <span class="devsite-syntax-kd">function</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getService_</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">OAuth2</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">createService</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">CREDENTIALS</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">client_email</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">setTokenUrl</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'https://oauth2.googleapis.com/token'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">setPrivateKey</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">CREDENTIALS</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">private_key</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">setIssuer</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">CREDENTIALS</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">client_email</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">setSubject</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">CREDENTIALS</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">client_email</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">setScope</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">SCOPE</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">setPropertyStore</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">PropertiesService</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">getScriptProperties</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code></li> <li><p>In the code, replace <code translate="no" dir="ltr"><var translate="no">CREDENTIALS</var></code> with the contents of the file <code translate="no" dir="ltr">credentials.json</code>.</p></li> <li><p>In the code, replace <code translate="no" dir="ltr"><var translate="no">SPACE_NAME</var></code> with a space name, which you can obtain from the <a href="/workspace/chat/api/reference/rest/v1/spaces/list"><code translate="no" dir="ltr">spaces.list</code></a> method in Chat API, or from a space&#39;s URL.</p></li> </ol></section> </div> <h2 id="step_4_run_the_complete_example" data-text="Step 4: Run the complete example" tabindex="-1">Step 4: Run the complete example</h2> <p>In your working directory, build and run the sample:</p> <div class="ds-selector-tabs" data-ds-scope="code-sample"> <section><h3 id="java_3" data-text="Java" tabindex="-1">Java</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code class="devsite-terminal" translate="no" dir="ltr">mvn<span class="devsite-syntax-w"> </span>compile<span class="devsite-syntax-w"> </span>assembly:single</code> <code class="devsite-terminal" translate="no" dir="ltr">java<span class="devsite-syntax-w"> </span>-jar<span class="devsite-syntax-w"> </span>target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar</code></pre></devsite-code></section> <section><h3 id="python_3" data-text="Python" tabindex="-1">Python</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code class="devsite-terminal" translate="no" dir="ltr">python3<span class="devsite-syntax-w"> </span>chat_app_auth.py</code></pre></devsite-code></section> <section><h3 id="node.js_3" data-text="Node.js" tabindex="-1">Node.js</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code class="devsite-terminal" translate="no" dir="ltr">node<span class="devsite-syntax-w"> </span>chat_app_auth.js</code></pre></devsite-code></section> <section><h3 id="apps-script_3" data-text=" Apps Script " tabindex="-1"> Apps Script </h3><p>Open the file <code translate="no" dir="ltr">ChatAppAuth.gs</code> in the Apps Script Editor and click <strong>Run</strong>.</p></section> </div> <p>Your script makes an authenticated request to the <a href="/workspace/chat/api/reference/rest">Chat API</a>, which responds by posting a message in a Chat space as a Chat app.</p> <h2 id="troubleshoot_the_example" data-text="Troubleshoot the example" tabindex="-1">Troubleshoot the example</h2> <p>This section describes common issues that you might encounter while attempting to run this sample.</p> <h3 id="you_are_not_permitted_to_use_this_app" data-text="You are not permitted to use this app" tabindex="-1">You are not permitted to use this app</h3> <p>When running the script, you might receive an error that says:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded><code translate="no" dir="ltr">&lt;HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}/messages?alt=json returned &#34;You are not permitted to use this app&#34;. Details: &#34;You are not permitted to use this app&#34;&gt; </code></pre></devsite-code> <p>This error message means that the Chat app doesn&#39;t have permission to create Chat messages in the specified Chat space.</p> <p>To resolve the error, <a href="https://support.google.com/chat/answer/7653881">add the Chat app to the Chat space</a> specified in the script.</p> <h3 id="the_administrator_must_grant_the_app_the_required_oauth_authorization_scope_for_this_action" data-text="The administrator must grant the app the required OAuth authorization scope for this action" tabindex="-1">The administrator must grant the app the required OAuth authorization scope for this action</h3> <p>When running the script, you might receive an error that says:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded><code translate="no" dir="ltr">&lt;HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}?alt=json returned &#34;The administrator must grant the app the required OAuth authorization scope for this action.&#34;. Details: &#34;The administrator must grant the app the required OAuth authorization scope for this action.&#34;&gt; </code></pre></devsite-code> <p>This error message means that a Google Workspace administrator hasn&#39;t yet granted one-time approval to the Chat app to use authorization scopes that begin with the name <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.app.*</code>.</p> <p>To resolve the error:</p> <ul> <li>Ask the Google Workspace administrator to <a href="https://support.google.com/a?p=chat-app-auth">grant approval to your Chat app</a>. When handling this error in your Chat app logic, consider <a href="/workspace/chat/create-messages">sending a message</a> announcing that the Chat app needs administrator approval to perform the requested action, perhaps: <code translate="no" dir="ltr">To perform this action, I need approval. &lt;https://support.google.com/a?p=chat-app-auth|Learn more&gt;.</code></li> <li>If the Google Chat API method supports the <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.bot</code> authorization scope, which doesn&#39;t require administrator approval, consider using it instead. To check which authorization scopes a method supports, see the <a href="/workspace/chat/api-overview">Google Chat API reference documentation</a>.</li> </ul> <h2 id="related-topics" data-text="Related topics" tabindex="-1">Related topics</h2> <ul> <li>Learn what else Chat API can do by reviewing the Chat API <a href="/workspace/chat/api/reference/rest">reference documentation</a>.</li> <li>If using an OAuth authorization scopes that begins with <code translate="no" dir="ltr">https://www.googleapis.com/auth/chat.app.*</code>, learn how <a href="https://support.google.com/a?p=chat-app-auth">administrators grant one-time approval</a>.</li> </ul> <devsite-hats-survey class="nocontent" hats-id="SrQ6jyjMz0eGRuQsCn30Qs2P7pj5" listnr-id="717201"></devsite-hats-survey> </div> <devsite-recommendations display="in-page" hidden yield> </devsite-recommendations> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-feedback position="footer" project-name="Google Chat" product-id="717201" bucket="google-chat" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="footer" class="nocontent" project-feedback-url="https://issuetracker.google.com/issues/new?component=350158&amp;template=1047215" project-icon="https://www.gstatic.com/images/branding/productlogos/chat_2023q4/v2/web-64dp/logo_chat_2023q4_color_1x_web_64dp.png" project-support-url="https://developers.google.com/workspace/chat/support" > <button> Send feedback </button> </devsite-feedback> <devsite-recommendations id="recommendations-link" yield></devsite-recommendations> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2024-11-06 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-thumb-rating-feedback"> <devsite-feedback position="thumb-rating" project-name="Google Chat" product-id="717201" bucket="google-chat" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="thumb-rating" class="nocontent" project-feedback-url="https://issuetracker.google.com/issues/new?component=350158&amp;template=1047215" project-icon="https://www.gstatic.com/images/branding/productlogos/chat_2023q4/v2/web-64dp/logo_chat_2023q4_color_1x_web_64dp.png" project-support-url="https://developers.google.com/workspace/chat/support" > <button> Need to tell us more? </button> </devsite-feedback> </template> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-11-06 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> <nav class="devsite-footer-promos nocontent" aria-label="Promotions"> <ul class="devsite-footer-promos-list"> <li class="devsite-footer-promo"> <a href="https://developers.googleblog.com/search/?query=Google+Workspace" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer" target="_blank" data-label="Promo - Google Workspace Developers Blog" > <picture> <img class="devsite-footer-promo-icon" src="https://www.gstatic.com/images/branding/product/2x/google_cloud_64dp.png" loading="lazy" alt="Blog"> </picture> <span class="devsite-footer-promo-label"> Blog </span> </a> <div class="devsite-footer-promo-description">Read the Google Workspace Developers blog</div> </li> <li class="devsite-footer-promo"> <a href="https://twitter.com/workspacedevs" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Promo - Google Workspace on X (Twitter)" data-category="Workspace Footer" target="_blank" > <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-x.svg" loading="lazy" alt="X (Twitter)"> </picture> <span class="devsite-footer-promo-label"> X (Twitter) </span> </a> <div class="devsite-footer-promo-description">Follow @workspacedevs on X (Twitter)</div> </li> <li class="devsite-footer-promo"> <a href="https://github.com/googleworkspace" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" target="_blank" data-label="Promo - Google Workspace Github" data-category="Workspace Footer" > <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-github.svg" loading="lazy" alt="Code Samples"> </picture> <span class="devsite-footer-promo-label"> Code Samples </span> </a> <div class="devsite-footer-promo-description">Explore our sample apps or copy them to build your own</div> </li> <li class="devsite-footer-promo"> <a href="https://codelabs.developers.google.com/?product=googleworkspace" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer" data-label="Promo - Google Workspace Codelabs" target="_blank" > <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/developers-logo-color.svg" loading="lazy" alt="Codelabs"> </picture> <span class="devsite-footer-promo-label"> Codelabs </span> </a> <div class="devsite-footer-promo-description">Try a guided, hands-on coding experience</div> </li> <li class="devsite-footer-promo"> <a href="https://www.youtube.com/channel/UCUcg6az6etU_gRtZVAhBXaw" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer" data-label="Promo - Google Workspace on YouTube" target="_blank" > <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-youtube.svg" loading="lazy" alt="Videos"> </picture> <span class="devsite-footer-promo-label"> Videos </span> </a> <div class="devsite-footer-promo-description">Subscribe to our YouTube channel</div> </li> </ul> </nav> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Google Workspace for Developers</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/workspace" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer"data-label="Linkbox - Platform overview"> Platform overview </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/workspace/products" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer"data-label="Linkbox - Developer products"> Developer products </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/workspace/support" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - Developer support"data-category="Workspace Footer"> Developer support </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/workspace/terms" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer"data-label="Linkbox - Terms of Service"> Terms of Service </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Tools</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://admin.google.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer"data-label="Linkbox - Admin console"target="admin-console"> Admin console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://script.google.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - Apps Script Dashboard"target="_blank"data-category="Workspace Footer"> Apps Script Dashboard </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://console.cloud.google.com/workspace-api" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - Google Cloud console"target="console"data-category="Workspace Footer"> Google Cloud console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/workspace/explore" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer"data-label="Linkbox - APIs Explorer"> APIs Explorer </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Connect</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://developers.googleblog.com/search/?query=Google+Workspace" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer"target="_blank"data-label="Linkbox - Blog"> Blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/workspace/newsletters" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-category="Workspace Footer"data-label="Linkbox - Newsletter"> Newsletter </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://twitter.com/workspacedevs" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - X (Twitter)"data-category="Workspace Footer"target="_blank"> X (Twitter) </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://www.youtube.com/channel/UCUcg6az6etU_gRtZVAhBXaw" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Linkbox - YouTube"data-category="Workspace Footer"target="_blank"> YouTube </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link" > Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link" > Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link" > Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link" > Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="//ai.google.dev/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google AI Link" > Google AI </a> </li> <li class="devsite-footer-sites-item"> <a href="/products" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link" > All products </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/terms/site-terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Sign up for the Google for Developers newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="/newsletter/subscribe" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link" > Subscribe </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> <devsite-concierge data-info-panel data-ai-panel data-api-explorer-panel > </devsite-concierge> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{&#34;dimensions&#34;: {&#34;dimension5&#34;: &#34;en&#34;, &#34;dimension4&#34;: &#34;Google Chat&#34;, &#34;dimension1&#34;: &#34;Signed out&#34;, &#34;dimension11&#34;: false, &#34;dimension3&#34;: false, &#34;dimension6&#34;: &#34;en&#34;}, &#34;gaid&#34;: &#34;UA-24532603-1&#34;, &#34;metrics&#34;: {&#34;ratings_count&#34;: &#34;metric2&#34;, &#34;ratings_value&#34;: &#34;metric1&#34;}, &#34;purpose&#34;: 1}]</script> <script type="application/json" tag-management>{&#34;at&#34;: &#34;True&#34;, &#34;ga4&#34;: [{&#34;id&#34;: &#34;G-272J68FCRF&#34;, &#34;purpose&#34;: 1}, {&#34;id&#34;: &#34;G-YYP88VSJWR&#34;, &#34;purpose&#34;: 0}], &#34;ga4p&#34;: [{&#34;id&#34;: &#34;G-272J68FCRF&#34;, &#34;purpose&#34;: 1}], &#34;gtm&#34;: [], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;False&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;article&#34;, &#34;projectName&#34;: &#34;Google Chat&#34;, &#34;signedIn&#34;: &#34;False&#34;, &#34;tenant&#34;: &#34;developers&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="RICN+In7M5NCPgMGfiQ+e8ChyNJRMr"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/js/app_loader.js', '[1,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers","https://developers-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/developers/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/favicon-new.png","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","developers.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["Cloud__enable_cloud_shell_fte_user_flow","Search__enable_ai_eligibility_checks","MiscFeatureFlags__developers_footer_image","Profiles__enable_developer_profiles_callout","MiscFeatureFlags__developers_footer_dark_image","Search__enable_ai_search_summaries_restricted","Cloud__enable_cloud_shell","Cloud__enable_cloudx_experiment_ids","MiscFeatureFlags__enable_project_variables","Profiles__enable_completecodelab_endpoint","TpcFeatures__enable_required_headers","Concierge__enable_pushui","CloudShell__cloud_code_overflow_menu","Profiles__enable_page_saving","MiscFeatureFlags__enable_explain_this_code","Concierge__enable_concierge","Profiles__enable_dashboard_curated_recommendations","MiscFeatureFlags__enable_firebase_utm","Profiles__enable_awarding_url","Search__enable_page_map","Profiles__enable_release_notes_notifications","Cloud__enable_llm_concierge_chat","CloudShell__cloud_shell_button","Search__enable_ai_search_summaries","Cloud__enable_cloud_facet_chat","MiscFeatureFlags__emergency_css","Cloud__enable_cloudx_ping","Search__enable_suggestions_from_borg","Profiles__enable_recognition_badges","BookNav__enable_tenant_cache_key","Profiles__enable_public_developer_profiles","Profiles__enable_profile_collections","DevPro__enable_cloud_innovators_plus","Cloud__enable_cloud_dlp_service","Profiles__enable_complete_playlist_endpoint","MiscFeatureFlags__enable_variable_operator","Cloud__enable_legacy_calculator_redirect","Analytics__enable_clearcut_logging","Cloud__enable_free_trial_server_call","Experiments__reqs_query_experiments","Profiles__require_profile_eligibility_for_signin","Concierge__enable_concierge_restricted","TpcFeatures__enable_mirror_tenant_redirects","MiscFeatureFlags__enable_view_transitions","EngEduTelemetry__enable_engedu_telemetry","Search__enable_dynamic_content_confidential_banner","Significatio__enable_by_tenant","DevPro__enable_developer_subscriptions"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,null,"https://developerprofiles-pa.clients6.google.com",[1,"developers","Google for Developers","developers.google.com",null,"developers-dot-devsite-v2-prod.appspot.com",null,null,[1,1,[1],null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1,20],"/recommendations/information"],null,null,null,[1,1,1],[1,1,null,1,1]],null,[null,null,null,null,null,null,"/images/lockup-new.svg","/images/touchicon-180-new.png",null,null,null,null,1,null,null,null,null,null,null,null,null,1,null,null,null,"/images/lockup-dark-theme-new.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,14,15,20,22,23,29,32,36],null,[[null,null,null,[3,7,10,2,39,17,4,32,24,11,12,13,34,15,25],null,null,[1,[["docType","Choose a content type",[["Tutorial",null,null,null,null,null,null,null,null,"Tutorial"],["Guide",null,null,null,null,null,null,null,null,"Guide"],["Sample",null,null,null,null,null,null,null,null,"Sample"]]],["product","Choose a product",[["Android",null,null,null,null,null,null,null,null,"Android"],["ARCore",null,null,null,null,null,null,null,null,"ARCore"],["ChromeOS",null,null,null,null,null,null,null,null,"ChromeOS"],["Firebase",null,null,null,null,null,null,null,null,"Firebase"],["Flutter",null,null,null,null,null,null,null,null,"Flutter"],["Assistant",null,null,null,null,null,null,null,null,"Google Assistant"],["GoogleCloud",null,null,null,null,null,null,null,null,"Google Cloud"],["GoogleMapsPlatform",null,null,null,null,null,null,null,null,"Google Maps Platform"],["GooglePay",null,null,null,null,null,null,null,null,"Google Pay & Google Wallet"],["GooglePlay",null,null,null,null,null,null,null,null,"Google Play"],["Tensorflow",null,null,null,null,null,null,null,null,"TensorFlow"]]],["category","Choose a topic",[["AiAndMachineLearning",null,null,null,null,null,null,null,null,"AI and Machine Learning"],["Data",null,null,null,null,null,null,null,null,"Data"],["Enterprise",null,null,null,null,null,null,null,null,"Enterprise"],["Gaming",null,null,null,null,null,null,null,null,"Gaming"],["Mobile",null,null,null,null,null,null,null,null,"Mobile"],["Web",null,null,null,null,null,null,null,null,"Web"]]]]]],[1,1],null,1],[[["UA-24532603-1"],["UA-22084204-5"],null,null,["UA-24532603-5"],null,null,[["G-272J68FCRF"],null,null,[["G-272J68FCRF",2]]],[["UA-24532603-1",2]],null,[["UA-24532603-5",2]],null,1],[[5,4],[12,9],[6,5],[11,8],[14,11],[15,12],[1,1],[16,13],[3,2],[13,10],[4,3]],[[1,1],[2,2]]],null,4,null,null,null,null,null,null,null,null,null,null,null,null,null,"developers.devsite.google"],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m"]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10