Integrowanie agentów Gemini Enterprise z Google Workspace

1. Zanim zaczniesz

83e1c1629d14fb31.png

Czym jest Gemini Enterprise?

Gemini Enterprise to zaawansowana platforma agentowa, która zapewnia wszystkim pracownikom we wszystkich przepływach pracy dostęp do najlepszych funkcji AI od Google. Umożliwia zespołom odkrywanie, tworzenie, udostępnianie i uruchamianie agentów AI w jednym, bezpiecznym środowisku.

  • Dostęp do zaawansowanych modeli: użytkownicy uzyskują natychmiastowy dostęp do najpotężniejszej multimodalnej AI od Google, w tym Gemini, aby rozwiązywać złożone problemy biznesowe.
  • Korzystaj ze specjalistycznych agentów: pakiet zawiera gotowych do użycia agentów Google do badań, kodowania i robienia notatek, którzy od razu zapewniają wartość.
  • Umożliwienie każdemu pracownikowi tworzenia agentów: opcje niewymagające kodowania i wymagające kodowania umożliwiają pracownikom wszystkich działów tworzenie własnych agentów niestandardowych do automatyzacji przepływów pracy i zarządzanie nimi.
  • Grounding agentów w danych: agenty można bezpiecznie łączyć z wewnętrznymi danymi firmy i aplikacjami innych firm, aby zapewnić kontekstową dokładność odpowiedzi.
  • Scentralizowane zarządzanie: administratorzy mogą wizualizować i kontrolować całą aktywność agentów, aby mieć pewność, że organizacja spełnia rygorystyczne standardy bezpieczeństwa i zgodności.
  • Rozszerzanie możliwości dzięki ekosystemom: platforma jest zintegrowana z szeroką siecią aplikacji partnerów i dostawców usług, co pozwala rozszerzyć automatyzację na różne systemy.

127f2ed7d484722c.png

Czym jest Google Workspace?

Google Workspace to zbiór rozwiązań w chmurze zwiększających produktywność i ułatwiających współpracę, które są przeznaczone dla osób indywidualnych, szkół i firm:

  • Komunikacja: profesjonalne usługi poczty e-mail (Gmail), wideokonferencje (Meet) i komunikatory zespołowe (Chat).
  • Tworzenie treści: narzędzia do pisania dokumentów (Dokumenty), tworzenia arkuszy kalkulacyjnych (Arkusze) i projektowania prezentacji (Prezentacje).
  • Organizacja: udostępnione kalendarze (Kalendarz) i cyfrowe notatki (Keep).
  • Miejsce na dane: centralne miejsce w chmurze do bezpiecznego zapisywania i udostępniania plików (Dysk).
  • Zarządzanie: narzędzia administracyjne do zarządzania użytkownikami i ustawieniami zabezpieczeń (konsola administracyjna Workspace).

Jakie rodzaje integracji niestandardowych?

Google Workspace i Gemini Enterprise tworzą zaawansowaną pętlę informacji zwrotnej, w której Workspace dostarcza dane w czasie rzeczywistym i kontekst współpracy, a Gemini Enterprise oferuje modele, rozumowanie agentowe i orkiestrację niezbędne do automatyzacji inteligentnych przepływów pracy.

  • Inteligentna łączność: magazyny danych, interfejsy API i serwery MCP zarządzane przez Google (zarówno te zarządzane przez Google, jak i niestandardowe) umożliwiają agentom bezpieczny i bezproblemowy dostęp do danych Workspace oraz podejmowanie działań w imieniu użytkowników.
  • Agenci niestandardowi: zespoły mogą tworzyć specjalistycznych agentów na podstawie danych i działań w Workspace zarządzanych przez administratora, korzystając z bezkodowych projektantów lub platform z kodem.
  • Natywna integracja: dodatki do Workspace łączą systemy AI z aplikacjami takimi jak Chat czy Gmail, zarówno za pomocą specjalnych komponentów interfejsu, jak i procesów działających w tle. Dzięki temu pracownicy obsługi klienta mogą spotykać się z użytkownikami w miejscu, w którym się znajdują, i udzielać im natychmiastowej pomocy dostosowanej do kontekstu.

Łącząc solidny ekosystem produktywności Google Workspace z zaawansowanymi możliwościami agentów Gemini Enterprise, organizacje mogą przekształcać swoje działania za pomocą niestandardowych agentów AI opartych na danych, którzy automatyzują złożone przepływy pracy bezpośrednio w narzędziach, z których ich zespoły korzystają na co dzień.

Wymagania wstępne

Jeśli chcesz wykonać wszystkie czynności we własnym środowisku, potrzebujesz:

Co utworzysz

W tym ćwiczeniu stworzymy 3 rozwiązania z agentami AI Gemini Enterprise ściśle zintegrowanymi z Google Workspace. Zaprezentują wzorce architektoniczne, których można używać do interakcji z danymi, działaniami i interfejsami.

Agent niestandardowy niewymagający kodowania

Umożliwia on użytkownikom wyszukiwanie danych i podejmowanie działań w Workspace w języku naturalnym. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane i działania: magazyny danych Gemini Enterprise w Google Workspace (Kalendarz, Gmail, Dysk, NotebookLM), Wyszukiwarka Google.
  • Narzędzia do tworzenia agentów: Gemini Enterprise Agent Designer.
  • Host agenta: Gemini Enterprise.
  • Interfejs: aplikacja internetowa Gemini Enterprise.

90e42539e5959634.png

60e62437ce29a818.png

Niestandardowy agent wymagający kodowania

Ten agent umożliwia użytkownikom wyszukiwanie danych i podejmowanie działań w Workspace w języku naturalnym za pomocą niestandardowych narzędzi i reguł. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane i działania: magazyny danych Gemini Enterprise w Google Workspace (Kalendarz, Gmail, Dysk, NotebookLM), Wyszukiwarka Google, zarządzany przez Google serwer protokołu kontekstowego modelu wyszukiwania Vertex AI (MCP), niestandardowa funkcja narzędzia do wysyłania wiadomości na Google Chat (za pomocą interfejsu Google Chat API).
  • Narzędzia do tworzenia agentów: pakiet Agent Development Kit (ADK).
  • Host agenta: Vertex AI Agent Engine.
  • Interfejs: aplikacja internetowa Gemini Enterprise.

1647ebff031c42e7.png

a8087d2351e77fb4.png

Domyślny agent jako dodatek do Google Workspace

Ten agent umożliwia użytkownikom wyszukiwanie danych Workspace w języku naturalnym w interfejsach aplikacji Workspace. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane: magazyny danych Gemini Enterprise w Google Workspace (Kalendarz, Gmail, Dysk, NotebookLM), Wyszukiwarka Google.
  • Host agenta: Gemini Enterprise.
  • Interfejs: dodatek Google Workspace do Google Chat i Gmaila (można go łatwo rozszerzyć na Kalendarz, Dysk, Dokumenty, Arkusze i Prezentacje).
  • Dodatek Google Workspace: Apps Script, interfejsy Gemini Enterprise i Vertex AI API, kontekstowe (metadane użytkownika, wybrana wiadomość w Gmailu).

c8c63fb3f324fecf.png

d33b8cb50ee251b7.png

Czego się nauczysz

  • Punkty integracji między Gemini Enterprise a Google Workspace, które umożliwiają przesyłanie danych i wykonywanie działań.
  • Opcje niewymagające kodowania i wymagające kodowania do tworzenia agentów niestandardowych hostowanych w Gemini Enterprise.
  • Sposoby, w jakie użytkownicy mogą uzyskiwać dostęp do agentów z aplikacji internetowej Gemini Enterprise i aplikacji Google Workspace.

2. Konfiguracja

Sprawdź pojęcia

Aplikacja Gemini Enterprise

Aplikacja Gemini Enterprise udostępnia użytkownikom wyniki wyszukiwania, działania i agentów. W kontekście interfejsów API termin „aplikacja” może być używany zamiennie z terminem „wyszukiwarka”. Aby aplikacja mogła używać danych z magazynu danych do wyświetlania wyników wyszukiwania, odpowiedzi lub działań, musi być z nim połączona.

Aplikacja internetowa Gemini Enterprise

Aplikacja internetowa Gemini Enterprise jest powiązana z aplikacją Gemini Enterprise. Działa ona jako centralne centrum AI, w którym pracownicy mogą korzystać z jednego interfejsu czatu, aby wyszukiwać informacje w odseparowanych danych firmowych, uruchamiać wyspecjalizowane agenty AI do złożonych przepływów pracy i generować treści o profesjonalnej jakości z ochroną prywatności na poziomie przedsiębiorstwa.

Inicjowanie zasobów i uzyskiwanie do nich dostępu

W tej sekcji uzyskasz dostęp do tych zasobów i skonfigurujesz je w preferowanej przeglądarce.

Aplikacja Gemini Enterprise

Otwórz konsolę Google Cloud na nowej karcie i wykonaj te czynności:

  1. Wybierz projekt.
  2. W polu wyszukiwania Google Cloud wyszukaj i wybierz Gemini Enterprise, a potem kliknij + Utwórz aplikację. Jeśli nie masz licencji na Gemini Enterprise, pojawi się prośba o aktywowanie 30-dniowej bezpłatnej licencji próbnej.

  1. W polu Nazwa aplikacji wpisz codelab.
  2. Identyfikator zostanie wygenerowany na podstawie nazwy i wyświetlony pod polem. Skopiuj go.
  3. Ustaw Wiele regionów na global (Global).
  4. Kliknij Utwórz.

8712ada39377205e.png

  1. Aplikacja zostanie utworzona i automatycznie przekierujemy Cię do Gemini Enterprise > Przegląd.
  2. W sekcji Uzyskaj pełny dostęp kliknij Skonfiguruj tożsamość.
  3. Na nowym ekranie wybierz Użyj tożsamości Google i kliknij Potwierdź tożsamość pracowników.

3209c156eff4ba43.png

  1. Konfiguracja zostanie zapisana i automatycznie przejdziesz do sekcji Gemini Enterprise > Przegląd.
  2. Kliknij Konfiguracje.
  3. Na karcie Zarządzanie funkcjami włącz opcję Włącz projektanta agentów i kliknij Zapisz.

f0cd9da419b41cb6.png

Aplikacja internetowa Gemini Enterprise

Otwórz Gemini Enterprise w konsoli Cloud na nowej karcie, a następnie wykonaj te czynności:

  1. Kliknij aplikację o nazwie codelab.
  2. Skopiuj wyświetlony adres URL, ponieważ w następnych krokach użyjemy go do przejścia do aplikacji internetowej Gemini Enterprise.

b46ee6176744565d.png

3. Niestandardowy agent niewymagający kodowania

Umożliwia on użytkownikom wyszukiwanie danych i podejmowanie działań w Workspace w języku naturalnym. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane i działania: magazyny danych Gemini Enterprise w Google Workspace (Kalendarz, Gmail, Dysk, NotebookLM), Wyszukiwarka Google.
  • Narzędzia do tworzenia agentów: Gemini Enterprise Agent Designer.
  • Host agenta: Gemini Enterprise.
  • Interfejs: aplikacja internetowa Gemini Enterprise.

Sprawdź pojęcia

Gemini

Gemini to multimodalny LLM od Google. Pomaga ludziom wykorzystywać ich potencjał, rozwijać wyobraźnię, ciekawość i produktywność.

Magazyn danych Gemini Enterprise

Magazyn danych Gemini Enterprise to jednostka zawierająca dane pozyskane ze źródła danych własnych, takiego jak Google Workspace, lub z aplikacji innych firm, takich jak Jira czy Salesforce. Magazyny danych zawierające dane z aplikacji innych firm są też nazywane łącznikami danych.

Kreator agentów Gemini Enterprise

Projektant agentów Gemini Enterprise to interaktywna platforma niewymagająca lub wymagająca niewielkiej ilości kodu, która umożliwia tworzenie, zarządzanie i uruchamianie agentów jedno- i wielokrokowych w Gemini Enterprise.

Sprawdzanie architektury rozwiązania

e77aafb772502aaf.png

włączyć interfejsy API,

Magazyny danych Gemini Enterprise Workspace wymagają włączenia tych interfejsów API:

  1. W konsoli Google Cloud włącz interfejsy API Kalendarza, Gmaila i Kontakty:

573322606b715a69.png

  1. Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a potem sprawdź, czy na liście znajdują się Google Calendar API, Gmail APIPeople API.

Działania Gemini Enterprise w Kalendarzu Google i Gmailu wymagają konfiguracji ekranu zgody:

  1. W konsoli Google Cloud kliknij Menu ☰ > Platforma Google Auth > Branding.

  1. Kliknij Rozpocznij.
  2. W sekcji Informacje o aplikacji ustaw Nazwę aplikacji na Codelab .
  3. W polu Adres e-mail dla użytkowników potrzebujących pomocy wybierz adres e-mail, pod którym użytkownicy mogą się z Tobą kontaktować, jeśli mają pytania dotyczące ich zgody.
  4. Kliknij Dalej.
  5. W sekcji Odbiorcy wybierz Wewnętrzny.
  6. Kliknij Dalej.
  7. W sekcji Dane kontaktowe wpisz adres e-mail, na który będziesz otrzymywać powiadomienia o wszelkich zmianach w projekcie.
  8. Kliknij Dalej.
  9. W sekcji Zakończ zapoznaj się z zasadami dotyczącymi danych użytkownika w usługach interfejsu API Google, a jeśli je akceptujesz, kliknij Akceptuję zasady dotyczące danych użytkownika w usługach interfejsu API Google.
  10. Kliknij Dalej, a potem Utwórz.

578c2b38219b2f7b.png

  1. Konfiguracja zostanie zapisana i automatycznie przejdziesz do sekcji Platforma uwierzytelniania Google > Przegląd.
  2. Otwórz Dostęp do danych.
  3. Kliknij Dodaj lub usuń zakresy.
  4. Skopiuj te zakresy i wklej je w polu Ręczne dodawanie zakresów.
https://www.googleapis.com/auth/calendar.readonly
https://www.googleapis.com/auth/calendar.events
https://www.googleapis.com/auth/calendar.calendars
https://www.googleapis.com/auth/gmail.send
https://www.googleapis.com/auth/gmail.readonly
  1. Kliknij kolejno Dodaj do tabeli, AktualizujZapisz.

874b1dda14e8f379.png

Więcej informacji znajdziesz w pełnym przewodniku Konfigurowanie zgody OAuth.

Tworzenie danych uwierzytelniających klienta OAuth

Utwórz nowego klienta OAuth dla Gemini Enterprise, aby uwierzytelniać użytkowników:

  1. W konsoli Google Cloud kliknij Menu ☰ > Platforma uwierzytelniania Google > Klienci.

  1. Kliknij + Utwórz klienta.
  2. Jako Typ aplikacji wybierz Aplikacja internetowa.
  3. W polu Nazwa wpisz codelab.
  4. Pomiń sekcję Autoryzowane źródła JavaScriptu.
  5. W sekcji Autoryzowane identyfikatory URI przekierowania kliknij Dodaj URI i wpisz https://vertexaisearch.cloud.google.com/oauth-redirect.
  6. Kliknij Utwórz.
  7. Pojawi się okno z nowo utworzonym identyfikatorem klienta OAuth i tajnym kluczem. Zapisz te informacje w bezpiecznym miejscu.

a46e5ebfb851aea5.png

Tworzenie magazynów danych

Otwórz Gemini Enterprise w konsoli Cloud na nowej karcie, a następnie wykonaj te czynności:

  1. Kliknij aplikację o nazwie codelab.
  2. W menu nawigacyjnym kliknij Połączone magazyny danych.
  3. Kliknij + Nowy magazyn danych.
  4. W sekcji Źródło wyszukaj Kalendarz Google i kliknij Wybierz.
  5. W sekcji Działania wpisz Identyfikator klientaTajny klucz klienta zapisane w poprzednich krokach, a następnie kliknij Zweryfikuj uwierzytelnianie i wykonaj czynności, aby uwierzytelnić i autoryzować klienta OAuth.
  6. Włącz działania Utwórz wydarzenie w kalendarzuZaktualizuj wydarzenie w kalendarzu.
  7. Kliknij Dalej.

a1d76e70edec0cf.png

  1. W sekcji Konfiguracja ustaw w polu Nazwa łącznika danych wartość calendar.
  2. Kliknij Utwórz.
  3. Automatycznie przekierujemy Cię do sekcji Połączone magazyny danych, w której zobaczysz nowo dodany magazyn danych.

Utwórz magazyn danych Gmaila:

  1. Kliknij + Nowy magazyn danych.
  2. W sekcji Źródło wyszukaj Google Gmail i kliknij Wybierz.
  3. W sekcji Działania wpisz identyfikator klientatajny klucz klienta zapisane w poprzednich krokach, a następnie kliknij Zweryfikuj uwierzytelnianie.
  4. Włącz działanie Wyślij e-maila.
  5. Kliknij Dalej.
  6. W sekcji Konfiguracja ustaw w polu Nazwa łącznika danych wartość gmail.
  7. Kliknij Utwórz.
  8. Automatycznie przekierujemy Cię do sekcji Połączone magazyny danych, w której zobaczysz nowo dodany magazyn danych.

Utwórz magazyn danych Dysku Google:

  1. Kliknij + Nowy magazyn danych.
  2. W sekcji Źródło wyszukaj Dysk Google i kliknij Wybierz.
  3. W sekcji Dane kliknij Wszystkie, a potem Dalej.
  4. W sekcji Konfiguracja ustaw w polu Nazwa łącznika danych wartość drive.
  5. Kliknij Utwórz.
  6. Automatycznie przekierujemy Cię do sekcji Połączone magazyny danych, w której zobaczysz nowo dodany magazyn danych.

Utwórz magazyn danych NotebookLM:

  1. Kliknij + Nowy magazyn danych.
  2. W sekcji Źródło wyszukaj NotebookLM i kliknij Wybierz.
  3. W sekcji Konfiguracja ustaw w polu Nazwa łącznika danych wartość notebooklm.
  4. Kliknij Utwórz.
  5. Automatycznie przekierujemy Cię do sekcji Połączone magazyny danych, w której zobaczysz nowo dodany magazyn danych.

Po kilku minutach stan wszystkich połączonych magazynów danych (z wyjątkiem NotebookLM) zmieni się na Aktywny. Jeśli widzisz błędy, możesz kliknąć źródło danych, aby wyświetlić szczegóły błędu.

ceba9eb2480a2696.png

Testowe magazyny danych

Otwórz skopiowany wcześniej URL aplikacji internetowej Gemini Enterprise:

  1. Kliknij Menu ☰ > Nowy czat.
  2. W stopce nowego pola wiadomości na czacie kliknij ikonę Łączniki i włącz wszystkie łączniki.
  3. Możesz teraz eksperymentować z promptami związanymi z konektorami. Na przykład na czacie wpisz Do I have any meetings today? i naciśnij enter.
  4. Następnie wpisz How many emails did I receive today? i naciśnij enter.
  5. Na koniec wpisz Give me the title of the last Drive file I created i naciśnij enter.

90e42539e5959634.png

Tworzenie agenta niestandardowego

W aplikacji internetowej Gemini Enterprise utwórz nowego agenta za pomocą narzędzia Agent Designer:

  1. Kliknij Menu ☰ > + Nowy agent.
  2. Na czacie wpisz An agent that always sends pirate-themed emails but use normal English otherwise i naciśnij enter.

2803c1dedd20433e.png

  1. Projektant agentów tworzy agenta na podstawie promptu i otwiera go w edytorze.
  2. Kliknij Utwórz.

Wypróbuj niestandardowego agenta

  1. W aplikacji internetowej Gemini Enterprise porozmawiaj z nowo utworzonym agentem:
  2. Kliknij Menu ☰ > Agenci.
  3. Wybierz agenta w sekcji Twoi agenci.
  4. W stopce nowego pola wiadomości na czacie kliknij ikonę Łączniki, a następnie kliknij Włącz działania w przypadku Poczty i postępuj zgodnie z instrukcjami, aby autoryzować agenta.
  5. Na czacie wpisz Send an email to someone@example.com saying I'll see them at Cloud Next, generate some subject and body yourself i naciśnij enter. Przykładowy adres e-mail możesz zastąpić swoim adresem.
  6. Aby wysłać e-maila, kliknij ✔️.

60e62437ce29a818.png

d4fb65d14fdf27da.png

4. Agent niestandardowy z kodem

Ten agent umożliwia użytkownikom wyszukiwanie danych i podejmowanie działań w Workspace w języku naturalnym za pomocą niestandardowych narzędzi i reguł. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane i działania: magazyny danych Gemini Enterprise w Google Workspace (Kalendarz, Gmail, Dysk, NotebookLM), Wyszukiwarka Google, zarządzany przez Google serwer protokołu kontekstowego modelu wyszukiwania Vertex AI (MCP), niestandardowa funkcja narzędzia do wysyłania wiadomości na Google Chat (za pomocą interfejsu Google Chat API).
  • Narzędzia do tworzenia agentów: pakiet Agent Development Kit (ADK).
  • Host agenta: Vertex AI Agent Engine.
  • Interfejs: aplikacja internetowa Gemini Enterprise.

Zostanie ona zintegrowana z Gemini Enterprise za pomocą funkcji BYO, więc musimy przejść przez etapy wdrażania, rejestracji i konfiguracji.

Sprawdź pojęcia

Vertex AI

Vertex AI oferuje wszystko, czego potrzebujesz do tworzenia i używania generatywnej AI, w tym rozwiązania AI, wyszukiwanie i rozmowy, ponad 130 modeli podstawowych i ujednoliconą platformę AI.

4670fcf7a826af4d.png

Agent Development Kit (ADK)

Pakiet Agent Development Kit (ADK) to specjalistyczny zestaw narzędzi i platform, który upraszcza tworzenie autonomicznych agentów AI dzięki gotowym modułom do wnioskowania, zarządzania pamięcią i integracji narzędzi.

Model Context Protocol (MCP)

Protokół kontekstu modelu (MCP) to otwarty standard zaprojektowany z myślą o umożliwieniu bezproblemowej i bezpiecznej integracji aplikacji AI z różnymi źródłami danych lub narzędziami za pomocą uniwersalnego interfejsu „plug and play”.

Narzędzie do funkcji

Narzędzie funkcji to predefiniowana procedura wykonywalna, którą model AI może wywołać w celu wykonania określonych działań lub pobrania danych w czasie rzeczywistym z systemów zewnętrznych, co rozszerza jego możliwości poza proste generowanie tekstu.

Sprawdzanie architektury rozwiązania

43df337e0f3d64e8.png

Sprawdź kod źródłowy

agent.py

...
MODEL = "gemini-2.5-flash"

# Gemini Enterprise authentication injects a bearer token into the ToolContext state.
# The key pattern is "GE_AUTH_NAME_<random_digits>".
# We dynamically parse this token to authenticate our MCP and API calls.
GE_AUTH_NAME = "enterprise-ai"

VERTEXAI_SEARCH_TIMEOUT = 15.0

def get_project_id():
    """Fetches the consumer project ID from the environment natively."""
    _, project = google.auth.default()
    if project:
        return project
    raise Exception(f"Failed to resolve GCP Project ID from environment.")

def find_serving_config_path():
    """Dynamically finds the default serving config in the engine."""
    project_id = get_project_id()
    engines = discoveryengine_v1.EngineServiceClient().list_engines(
        parent=f"projects/{project_id}/locations/global/collections/default_collection"
    )
    for engine in engines:
        # engine.name natively contains the numeric Project Number
        return f"{engine.name}/servingConfigs/default_serving_config"
    raise Exception(f"No Discovery Engines found in project {project_id}")

def _get_access_token_from_context(tool_context: ToolContext) -> str:
    """Helper method to dynamically parse the intercepted bearer token from the context state."""
    escaped_name = re.escape(GE_AUTH_NAME)
    pattern = re.compile(fr"^{escaped_name}_\d+$")
    # Handle ADK varying state object types (Raw Dict vs ADK State)
    state_dict = tool_context.state.to_dict() if hasattr(tool_context.state, 'to_dict') else tool_context.state
    matching_keys = [k for k in state_dict.keys() if pattern.match(k)]
    if matching_keys:
        return state_dict.get(matching_keys[0])
    raise Exception(f"No bearer token found in ToolContext state matching pattern {pattern.pattern}")

def auth_header_provider(tool_context: ToolContext) -> dict[str, str]:
    token = _get_access_token_from_context(tool_context)
    return {"Authorization": f"Bearer {token}"}

def send_direct_message(email: str, message: str, tool_context: ToolContext) -> dict:
    """Sends a Google Chat Direct Message (DM) to a specific user by email address."""
    chat_client = chat_v1.ChatServiceClient(
        credentials=Credentials(token=_get_access_token_from_context(tool_context))
    )

    # 1. Setup the DM space or find existing one
    person = chat_v1.User(
        name=f"users/{email}",
        type_=chat_v1.User.Type.HUMAN
    )
    membership = chat_v1.Membership(member=person)
    space_req = chat_v1.Space(space_type=chat_v1.Space.SpaceType.DIRECT_MESSAGE)
    setup_request = chat_v1.SetUpSpaceRequest(
        space=space_req,
        memberships=[membership]
    )
    space_response = chat_client.set_up_space(request=setup_request)
    space_name = space_response.name
    
    # 2. Send the message
    msg = chat_v1.Message(text=message)
    message_request = chat_v1.CreateMessageRequest(
        parent=space_name,
        message=msg
    )
    message_response = chat_client.create_message(request=message_request)
    
    return {"status": "success", "message_id": message_response.name, "space": space_name}

vertexai_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://discoveryengine.googleapis.com/mcp",
        timeout=VERTEXAI_SEARCH_TIMEOUT,
        sse_read_timeout=VERTEXAI_SEARCH_TIMEOUT
    ),
    tool_filter=['search'],
    # The auth_header_provider dynamically injects the bearer token from the ToolContext
    # into the MCP call for authentication.
    header_provider=auth_header_provider
)

# Answer nicely the following user queries:
#  - Please find my meetings for today, I need their titles and links
#  - What is the latest Drive file I created?
#  - What is the latest Gmail message I received?
#  - Please send the following message to someone@example.com: Hello, this is a test message.

root_agent = LlmAgent(
    model=MODEL,
    name='enterprise_ai',
    instruction=f"""
        You are a helpful assistant that always uses the Vertex AI MCP search tool to answer the user's message, unless the user asks you to send a message to someone.
        If the user asks you to send a message to someone, use the send_direct_message tool to send the message.
        You MUST unconditionally use the Vertex AI MCP search tool to find answer, even if you believe you already know the answer or believe the Vertex AI MCP search tool does not contain the data.
        The Vertex AI MCP search tool accesses the user's data through datastores including Google Drive, Google Calendar, and Gmail.
        Only use the Vertex AI MCP search tool with servingConfig and query parameters, do not use any other parameters.
        Always use the servingConfig {find_serving_config_path()} while using the Vertex AI MCP search tool.
    """,
    tools=[vertexai_mcp, FunctionTool(send_direct_message)]
)

włączyć interfejsy API,

Rozwiązanie wymaga włączenia dodatkowych interfejsów API:

  1. W konsoli Google Cloud włącz interfejsy API Vertex AI, Cloud Resource Manager i Google Chat:

4f02a36b050bab00.png

  1. Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a potem sprawdź, czy na liście znajdują się Vertex AI API, Cloud Resource Manager APIGoogle Chat API.

Rozwiązanie wymaga dodatkowego dostępu do danych:

  1. W konsoli Google Cloud kliknij Menu ☰ > Platforma Google Auth > Dostęp do danych.

  1. Kliknij Dodaj lub usuń zakresy.
  2. Skopiuj te zakresy i wklej je w polu Ręczne dodawanie zakresów.
  3. Kliknij kolejno Dodaj do tabeli, AktualizujZapisz.
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/chat.messages.create
https://www.googleapis.com/auth/chat.spaces.create
  1. Kliknij kolejno Dodaj do tabeli, AktualizujZapisz.

56fbba733139acfe.png

Aktualizowanie danych uwierzytelniających klienta OAuth

Rozwiązanie wymaga dodatkowego autoryzowanego identyfikatora URI przekierowania:

  1. W konsoli Google Cloud kliknij Menu ☰ > Platforma uwierzytelniania Google > Klienci.

  1. Kliknij nazwę klienta codelab.
  2. W sekcji Autoryzowane identyfikatory URI przekierowania kliknij Dodaj URI i wpisz https://vertexaisearch.cloud.google.com/static/oauth/oauth.html.
  3. Kliknij Zapisz.

deed597aa54fec91.png

Włączanie Vertex AI Search MCP

  1. W terminalu wykonaj to polecenie:
gcloud beta services mcp enable discoveryengine.googleapis.com \
     --project=$(gcloud config get-value project)

Konfigurowanie aplikacji Google Chat

  1. W konsoli Google Cloud w polu wyszukiwania Google Cloud wpisz Google Chat API, kliknij Google Chat API, Zarządzaj i Konfiguracja.

  1. Ustaw Nazwę aplikacjiOpis na Gemini Enterprise.
  2. Ustaw adres URL awatara na https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png.
  3. Odznacz opcję Włącz funkcje interaktywne, a potem w wyświetlonym oknie kliknij Wyłącz.
  4. Wybierz Loguj błędy w usłudze Logging.
  5. Kliknij Zapisz.

90cb612e51bce4e6.png

Wdrażanie agenta w Vertex AI Agent Engine

  1. Pobierz to repozytorium GitHub.

  1. W terminalu otwórz katalog solutions/enterprise-ai-agent, a następnie wykonaj to polecenie:
# 1. Create and activate a new virtual environment
python3 -m venv .venv
source .venv/bin/activate

# 2. Install poetry and project dependencies
pip install poetry
poetry install

# 3. Deploy the agent
adk deploy agent_engine \
  --project=$(gcloud config get-value project) \
  --region=us-central1 \
  --display_name="Enterprise AI" \
  enterprise_ai

eafd2f9c4fbf305.png

  1. Gdy w logach zobaczysz wiersz Deploying to agent engine... (Wdrażanie w silniku agenta…), otwórz nowy terminal i wykonaj to polecenie, aby dodać wymagane uprawnienia do agenta usługi Vertex AI Reasoning Engine:
# 1. Get the current Project ID
PROJECT_ID=$(gcloud config get-value project)

# 2. Extract the Project Number for that ID
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

# 3. Construct the Service Account name
SERVICE_ACCOUNT="service-${PROJECT_NUMBER}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"

# 4. Apply the IAM policy binding
gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member="serviceAccount:$SERVICE_ACCOUNT" \
     --role="roles/discoveryengine.viewer"
  1. Poczekaj na zakończenie działania polecenia adk deploy, a następnie skopiuj nazwę zasobu nowo wdrożonego agenta z danych wyjściowych polecenia (na zielono).

d098fe1347d6581b.png

Rejestrowanie agenta w Gemini Enterprise

Otwórz Gemini Enterprise w konsoli Cloud na nowej karcie, a następnie wykonaj te czynności:

  1. Kliknij aplikację o nazwie codelab.
  2. W menu nawigacyjnym kliknij Agenci.
  3. Kliknij + Dodaj agenta.
  4. Kliknij Dodaj w sekcji Agent niestandardowy z Agent Engine. Wyświetli się sekcja Autoryzacje.
  5. Kliknij Dodaj autoryzację.
  6. W polu Nazwa autoryzacji wpisz enterprise-ai. Identyfikator zostanie wygenerowany na podstawie nazwy i wyświetlony pod polem. Skopiuj go.
  7. Ustaw wartość Identyfikator klienta na taką samą, jak w przypadku klienta OAuth utworzonego i zaktualizowanego w poprzednich krokach.
  8. Ustaw wartość Tajny klucz klienta na taką samą jak w przypadku klienta OAuth utworzonego i zaktualizowanego w poprzednich krokach.
  9. Ustaw Identyfikator URI tokena na https://oauth2.googleapis.com/token.
  10. Identyfikatorze URI autoryzacji ustaw tę wartość, zastępując <CLIENT_ID> identyfikatorem klienta OAuth utworzonym i zaktualizowanym w poprzednich krokach.
https://accounts.google.com/o/oauth2/v2/auth?client_id=<CLIENT_ID>&redirect_uri=https%3A%2F%2Fvertexaisearch.cloud.google.com%2Fstatic%2Foauth%2Foauth.html&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.calendars%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.events%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.send%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fchat.messages.create%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fchat.spaces.create&include_granted_scopes=true&response_type=code&access_type=offline&prompt=consent
  1. Kliknij kolejno Gotowe i Dalej. Wyświetli się sekcja Konfiguracja.
  2. Ustaw nazwę agentaopis agenta na Enterprise AI.
  3. Ustaw silnik rozumowania Agent Engine na nazwę zasobu silnika rozumowania skopiowaną w poprzednich krokach. Ma on taki format:
projects/<PROJECT_ID>/locations/<LOCATION>/reasoningEngines/<REASONING_ENGINE_ID>
  1. Kliknij Utwórz. Nowo dodany pracownik obsługi klienta pojawi się w sekcji Pracownicy obsługi klienta.

Wypróbuj agenta

  1. W aplikacji internetowej Gemini Enterprise porozmawiaj z nowo zarejestrowanym agentem:
  2. Kliknij Menu ☰ > Agenci.
  3. Wybierz agenta w sekcji Z organizacji.
  4. Na czacie wpisz Please find my meetings for today, I need their titles and links i naciśnij enter.
  5. Kliknij Autoryzuj, a potem postępuj zgodnie z instrukcjami autoryzacji.

ed61cf654cbcd76c.png

  1. Agent odpowiada listą wydarzeń w Kalendarzu (w zależności od konta użytkownika).
  2. Na czacie wpisz Please send a Chat message to someone@example.com with the following text: Hello! i naciśnij enter.
  3. Agent odpowiada wiadomością z potwierdzeniem.

1647ebff031c42e7.png

a8087d2351e77fb4.png

5. Domyślny agent jako dodatek do Google Workspace

Ten agent umożliwia użytkownikom wyszukiwanie danych Workspace w języku naturalnym w kontekście interfejsów aplikacji Workspace. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane: magazyny danych Gemini Enterprise w Google Workspace (Kalendarz, Gmail, Dysk, NotebookLM), Wyszukiwarka Google.
  • Host agenta: Gemini Enterprise.
  • Interfejs: dodatek Google Workspace do Google Chat i Gmaila (można go łatwo rozszerzyć na Kalendarz, Dysk, Dokumenty, Arkusze i Prezentacje).
  • Dodatek Google Workspace: Apps Script, interfejsy Gemini Enterprise i Vertex AI API, kontekstowe (metadane użytkownika, wybrana wiadomość w Gmailu).

Dodatek Google Workspace będzie połączony z Gemini Enterprise za pomocą interfejsu StreamAssist API.

Przeglądanie pojęć

Dodatek do Google Workspace

Dodatek do Google Workspace to dostosowana aplikacja, która rozszerza jedną lub kilka aplikacji Google Workspace (Gmail, Google Chat, Kalendarz, Dokumenty, Dysk, Meet, Arkusze i Prezentacje).

Apps Script

Apps Script to oparta na chmurze platforma JavaScript obsługiwana przez Dysk Google, która umożliwia integrację z usługami Google i automatyzację zadań w tych usługach.

Platforma kart Google Workspace

Platforma kart w Google Workspace umożliwia deweloperom tworzenie rozbudowanych, interaktywnych interfejsów użytkownika. Umożliwia tworzenie uporządkowanych i atrakcyjnych wizualnie kart, które mogą zawierać tekst, obrazy, przyciski i inne widżety. Karty te zwiększają komfort użytkowania, ponieważ zawierają uporządkowane informacje i umożliwiają szybkie wykonywanie działań bezpośrednio w aplikacjach Workspace.

Sprawdzanie architektury rozwiązania

1798c39f7aaed8fc.png

Sprawdź kod źródłowy

appsscript.json

...
"addOns": {
    "common": {
      "name": "Enterprise AI",
      "logoUrl": "https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png"
    },
    "chat": {},
    "gmail": {
      "contextualTriggers": [
        {
          "unconditional": {},
          "onTriggerFunction": "onAddonEvent"
        }
      ]
    }
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/discoveryengine.assist.readwrite",
    "https://www.googleapis.com/auth/gmail.addons.execute",
    "https://www.googleapis.com/auth/gmail.addons.current.message.readonly"
  ]
...

Chat.gs

...
// Service that handles Google Chat operations.

// Handle incoming Google Chat message events, actions will be taken via Google Chat API calls
function onMessage(event) {
  if (isInDebugMode()) {
    console.log(`MESSAGE event received (Chat): ${JSON.stringify(event)}`);
  }
  // Extract data from the event.
  const chatEvent = event.chat;
  setChatConfig(chatEvent.messagePayload.space.name);

  // Request AI agent to answer the message
  requestAgent(chatEvent.messagePayload.message);
  // Respond with an empty response to the Google Chat platform to acknowledge execution
  return null; 
}

// --- Utility functions ---

// The Chat direct message (DM) space associated with the user
const SPACE_NAME_PROPERTY = "DM_SPACE_NAME"

// Sets the Chat DM space name for subsequent operations.
function setChatConfig(spaceName) {
  const userProperties = PropertiesService.getUserProperties();
  userProperties.setProperty(SPACE_NAME_PROPERTY, spaceName);
  console.log(`Space is set to ${spaceName}`);
}

// Retrieved the Chat DM space name to sent messages to.
function getConfiguredChat() {
  const userProperties = PropertiesService.getUserProperties();
  return userProperties.getProperty(SPACE_NAME_PROPERTY);
}

// Finds the Chat DM space name between the Chat app and the given user.
function findChatAppDm(userName) {
  return Chat.Spaces.findDirectMessage(
    { 'name': userName },
    {'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}`}
  ).name;
}

// Creates a Chat message in the configured space.
function createMessage(message) {
  const spaceName = getConfiguredChat();
  console.log(`Creating message in space ${spaceName}...`);
  return Chat.Spaces.Messages.create(
    message,
    spaceName,
    {},
    {'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}`}
  ).name;
}

Sidebar.gs

...
// Service that handles Gmail operations.

// Triggered when the user opens the Gmail Add-on or selects an email.
function onAddonEvent(event) {
  // If this was triggered by a button click, handle it
  if (event.parameters && event.parameters.action === 'send') {
    return handleSendMessage(event);
  }

  // Otherwise, just render the default initial sidebar
  return createSidebarCard();
}

// Creates the standard Gmail sidebar card consisting of a text input and send button.
// Optionally includes an answer section if a response was generated.
function createSidebarCard(optionalAnswerSection) {
  const card = CardService.newCardBuilder();
  const actionSection = CardService.newCardSection();

  // Create text input for the user's message
  const messageInput = CardService.newTextInput()
    .setFieldName("message")
    .setTitle("Message")
    .setMultiline(true);

  // Create action for sending the message
  const sendAction = CardService.newAction()
    .setFunctionName('onAddonEvent')
    .setParameters({ 'action': 'send' });

  const sendButton = CardService.newTextButton()
    .setText("Send message")
    .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
    .setOnClickAction(sendAction);

  actionSection.addWidget(messageInput);
  actionSection.addWidget(CardService.newButtonSet().addButton(sendButton));

  card.addSection(actionSection);

  // Attach the response at the bottom if we have one
  if (optionalAnswerSection) {
    card.addSection(optionalAnswerSection);
  }

  return card.build();
}

// Handles clicks from the Send message button.
function handleSendMessage(event) {
  const commonEventObject = event.commonEventObject || {};
  const formInputs = commonEventObject.formInputs || {};
  const messageInput = formInputs.message;

  let userMessage = "";
  if (messageInput && messageInput.stringInputs && messageInput.stringInputs.value.length > 0) {
    userMessage = messageInput.stringInputs.value[0];
  }

  if (!userMessage || userMessage.trim().length === 0) {
    return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification().setText("Please enter a message."))
      .build();
  }

  let finalQueryText = `USER MESSAGE TO ANSWER: ${userMessage}`;

  // If we have an email selected in Gmail, append its content as context
  if (event.gmail && event.gmail.messageId) {
    try {
      GmailApp.setCurrentMessageAccessToken(event.gmail.accessToken);
      const message = GmailApp.getMessageById(event.gmail.messageId);

      const subject = message.getSubject();
      const bodyText = message.getPlainBody() || message.getBody();

      finalQueryText += `\n\nEMAIL THE USER HAS OPENED ON SCREEN:\nSubject: ${subject}\nBody:\n---\n${bodyText}\n---`;
    } catch (e) {
      console.error("Could not fetch Gmail context: " + e);
      // Invalidate the token explicitly so the next prompt requests the missing scopes
      ScriptApp.invalidateAuth();

      CardService.newAuthorizationException()
        .setResourceDisplayName("Enterprise AI")
        .setAuthorizationUrl(ScriptApp.getAuthorizationUrl())
        .throwException();
    }
  }

  try {
    const responseText = queryAgent({ text: finalQueryText, forceNewSession: true });

    // We leverage the 'showdown' library to parse the LLM's Markdown output into HTML
    // We also substitute markdown listings with arrows and adjust newlines for clearer rendering in the sidebar
    let displayedText = substituteListingsFromMarkdown(responseText);
    displayedText = new showdown.Converter().makeHtml(displayedText).replace(/\n/g, '\n\n');

    const textParagraph = CardService.newTextParagraph();
    textParagraph.setText(displayedText);

    const answerSection = CardService.newCardSection()
      .addWidget(textParagraph);

    const updatedCard = createSidebarCard(answerSection);

    return CardService.newActionResponseBuilder()
      .setNavigation(CardService.newNavigation().updateCard(updatedCard))
      .build();

  } catch (err) {
    return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification().setText("Error fetching response: " + err.message))
      .build();
  }
}
...

AgentHandler.gs

...
// Service that handles Gemini Enterprise AI Agent operations.

// Submits a query to the AI agent and returns the response string synchronously
function queryAgent(input) {
  const isNewSession = input.forceNewSession || !PropertiesService.getUserProperties().getProperty(AGENT_SESSION_NAME);
  const sessionName = input.forceNewSession ? createAgentSession() : getOrCreateAgentSession();

  let systemPrompt = "SYSTEM PROMPT START Do not respond with tables but use bullet points instead.";
  if (input.forceNewSession) {
    systemPrompt += " Do not ask the user follow-up questions or converse with them as history is not kept in this interface.";
  }
  systemPrompt += " SYSTEM PROMPT END\n\n";

  const queryText = isNewSession ? systemPrompt + input.text : input.text;

  const requestPayload = {
    "session": sessionName,
    "userMetadata": { "timeZone": Session.getScriptTimeZone() },
    "query": { "text": queryText },
    "toolsSpec": { "vertexAiSearchSpec": { "dataStoreSpecs": getAgentDataStores().map(ds => { dataStore: ds }) } },
    "agentsSpec": { "agentSpecs": [{ "agentId": getAgentId() }] }
  };

  const responseContentText = UrlFetchApp.fetch(
    `https://${getLocation()}-discoveryengine.googleapis.com/v1alpha/${getReasoningEngine()}/assistants/default_assistant:streamAssist?alt=sse`,
    {
      method: 'post',
      headers: { 'Authorization': `Bearer ${ScriptApp.getOAuthToken()}` },
      contentType: 'application/json',
      payload: JSON.stringify(requestPayload),
      muteHttpExceptions: true
    }
  ).getContentText();

  if (isInDebugMode()) {
    console.log(`Response: ${responseContentText}`);
  }

  const events = responseContentText.split('\n').map(s => s.replace(/^data:\s*/, '')).filter(s => s.trim().length > 0);
  console.log(`Received ${events.length} agent events.`);

  let answerText = "";
  for (const eventJson of events) {
    if (isInDebugMode()) {
      console.log("Event: " + eventJson);
    }
    const event = JSON.parse(eventJson);

    // Ignore internal events
    if (!event.answer) {
      console.log(`Ignored: internal event`);
      continue;
    }

    // Handle text replies
    const replies = event.answer.replies || [];
    for (const reply of replies) {
      const content = reply.groundedContent.content;
      if (content) {
        if (isInDebugMode()) {
          console.log(`Processing content: ${JSON.stringify(content)}`);
        }
        if (content.thought) {
          console.log(`Ignored: thought event`);
          continue;
        }
        answerText += content.text;
      }
    }

    if (event.answer.state === "SUCCEEDED") {
      console.log(`Answer text: ${answerText}`);
      return answerText;
    } else if (event.answer.state !== "IN_PROGRESS") {
      throw new Error("Something went wrong, check the Apps Script logs for more info.");
    }
  }
  return answerText;
}

// Gets the list of data stores configured for the agent to include in the request.
function getAgentDataStores() {
  const responseContentText = UrlFetchApp.fetch(
    `https://${getLocation()}-discoveryengine.googleapis.com/v1/${getReasoningEngine().split('/').slice(0, 6).join('/')}/dataStores`,
    {
      method: 'get',
      // Use the add on service account credentials for data store listing access
      headers: { 'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}` },
      contentType: 'application/json',
      muteHttpExceptions: true
    }
  ).getContentText();
  if (isInDebugMode()) {
    console.log(`Response: ${responseContentText}`);
  }
  const dataStores = JSON.parse(responseContentText).dataStores.map(ds => ds.name);
  if (isInDebugMode()) {
    console.log(`Data stores: ${dataStores}`);
  }
  return dataStores;
}
...

Inicjowanie konta usługi

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu ☰ > Administracja > Konta usługi > + Utwórz konto usługi.

  1. Ustaw Nazwę konta usługi na ge-add-on.

d44d6aae29e2464c.png

  1. Kliknij Utwórz i kontynuuj.
  2. Dodaj rolę Wyświetlający silnik wykrywania w uprawnieniach.

f1374efa4f326ef5.png

  1. Kliknij kolejno DalejGotowe. Nastąpi przekierowanie na stronę Konta usługi, na której zobaczysz utworzone konto usługi.

b9496085f1404c5c.png

  1. Wybierz nowo utworzone konto usługi, a następnie kliknij kartę Klucze.
  2. Kliknij Dodaj klucz, a następnie Utwórz nowy klucz.
  3. Wybierz JSON, a potem kliknij Utwórz.

f4280f5533a08821.png

  1. Okno dialogowe zostanie zamknięte, a nowo utworzona para kluczy publicznych/prywatnych zostanie automatycznie pobrana do środowiska lokalnego w postaci pliku JSON.

Tworzenie i konfigurowanie projektu Apps Script

  1. Aby otworzyć projekt Apps Script dodatku Enterprise AI, kliknij ten przycisk:

  1. Kliknij Przegląd > Utwórz kopię.
  2. W projekcie Apps Script kliknij Ustawienia projektu > Edytuj właściwości skryptu > Dodaj właściwość skryptu, aby dodać właściwości skryptu.
  3. Ustaw REASONING_ENGINE_RESOURCE_NAME na nazwę zasobu aplikacji Gemini Enterprise. Ma on taki format:
# 1. Replace PROJECT_ID with the Google Cloud project ID.
# 2. Replace GE_APP_ID with the codelab app ID found in Google Cloud console > Gemini Enterprise > Apps.

projects/<PROJECT_ID>/locations/global/collections/default_collection/engines/<GE_APP_ID>
  1. Ustaw wartość APP_SERVICE_ACCOUNT_KEY na klucz JSON z pliku konta usługi pobranego w poprzednich krokach.
  2. Kliknij Zapisz właściwości skryptu.

Wdrażanie w Gmailu i Google Chat

W projekcie Apps Script wykonaj te czynności:

  1. Kliknij Wdróż > Testuj wdrożenia, a potem Zainstaluj. Jest już dostępna w Gmailu.
  2. W sekcji Identyfikator wdrożenia z nagłówka kliknij Kopiuj.

2ed2df972ad92715.png

W konsoli Google Cloud wykonaj te czynności:

  1. W polu wyszukiwania Google Cloud wpisz Google Chat API, kliknij Google Chat API, a następnie Zarządzaj i Konfiguracja.

  1. Kliknij Włącz funkcje interaktywne.
  2. Odznacz opcję Dołączanie do pokoi i rozmów grupowych.
  3. W sekcji Ustawienia połączenia wybierz Apps Script.
  4. Ustaw Identyfikator wdrożenia na Identyfikator wdrożenia głównego skopiowany w poprzednich krokach.
  5. W sekcji Widoczność wybierz Udostępnij tę aplikację do obsługi czatu konkretnym osobom i grupom w domenie Workspace i wpisz swój adres e-mail.
  6. Kliknij Zapisz.

3b7d461c423f7c51.png

Wypróbuj dodatek

Otwórz Google Chat w nowej karcie, a następnie wykonaj te czynności:

  1. Otwórz pokój na czacie z aplikacją Chat Gemini Enterprise.

3da8690d19baf2d0.png

  1. Kliknij Skonfiguruj i przejdź proces uwierzytelniania.
  2. Wpisz What are my meetings for today? i naciśnij enter. Aplikacja do czatowania Gemini Enterprise powinna odpowiedzieć wynikami.

c8c63fb3f324fecf.png

Otwórz Gmail w nowej karcie i wykonaj te czynności:

  1. Wyślij do siebie e-maila z polem Subject (Temat) ustawionym na We need to talk i polem Body (Treść) ustawionym na Are you available today between 8 and 9 AM?.
  2. Otwórz nowo otrzymanego e-maila.
  3. Otwórz pasek boczny dodatku Enterprise AI.
  4. W polu Wiadomość ustaw Am I?.
  5. Kliknij Wyślij wiadomość.
  6. Odpowiedź jest wyświetlana po przycisku.

d33b8cb50ee251b7.png

6. Czyszczenie danych

Usuwanie projektu Google Cloud

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby użyte w tym ćwiczeniu, zalecamy usunięcie projektu Google Cloud.

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu ☰ > Administracja > Ustawienia.

.

  1. Kliknij Wyłącz.
  2. Wpisz identyfikator projektu.
  3. Kliknij Wyłącz mimo to.

3b9492d97f771b2c.png

7. Gratulacje

Gratulacje! Stworzyliście rozwiązania, które wykorzystują potencjał połączenia Gemini Enterprise i Google Workspace, aby ułatwić pracę.

Co dalej?

W tym samouczku przedstawiamy tylko najbardziej typowe przypadki użycia, ale istnieje wiele obszarów, które możesz uwzględnić w swoich rozwiązaniach, np.:

  • Korzystaj z narzędzi dla programistów opartych na AI, takich jak interfejs wiersza poleceń Gemini i Antigravity.
  • integrować się z innymi platformami i narzędziami agentów, takimi jak niestandardowe serwery MCP, niestandardowe wywołania funkcji i generatywne interfejsy użytkownika;
  • Integracja z innymi modelami AI, w tym modelami niestandardowymi, hostowanymi na dedykowanych platformach, takich jak Vertex AI.
  • Integracja z innymi agentami hostowanymi na dedykowanych platformach, takich jak Dialogflow, lub przez inne firmy za pośrednictwem Cloud Marketplace.
  • Publikuj agentów w Cloud Marketplace, aby umożliwić korzystanie z nich zespołom, organizacjom i użytkownikom publicznym.

Więcej informacji

Deweloperzy mają do dyspozycji wiele materiałów, takich jak filmy w YouTube, strony z dokumentacją, przykłady kodu i samouczki: