Gemini ile Google Chat için uygulamalar oluşturma

1. Başlamadan önce

Gemini'ı içeren Google Chat uygulamaları nedir?

Gemini özellikli Google Chat uygulamaları şunları yapar:

  • Hizmetlerinizi ve kaynaklarınızı Google Chat'e taşıyın. Böylece kullanıcılar, görüşmeden ayrılmadan bilgi alabilir ve işlem yapabilir.
  • İş akışlarınızı kolaylaştırmak için belirli zamanlarda metin veya resim gibi veriler oluşturabilmeleri ya da arayabilmeleri amacıyla Gemini üretken yapay zeka modeliyle entegre edin.

Google Chat uygulamaları neden Gemini ile entegre edilmelidir?

Gemini gibi üretken yapay zeka modellerinin tipik kullanım alanları aşağıdaki kategorilere girer:

  • İçerik oluşturma ve geliştirme. Pazarlama metinleri oluşturma, sosyal medya gönderileri hazırlama, gerçekçi görüntüler oluşturma, müzik besteleme veya video içeriklerinin oluşturulmasına yardımcı olma
  • Veri arama. Yapılandırılmamış bir bilgi tabanından önemli analizler elde edin, uzun metinleri özetleyin, içerikleri sınıflandırın veya dilleri daha doğru ve hızlı bir şekilde çevirin.
  • Görüşme Doğal, bilgilendirici ve yaratıcı sohbetler edin.

Bu özellikleri doğrudan Google Chat'in tanıdık arayüzüne entegre edebilme olanağı, kullanıcılarının deneyimini ve üretkenliğini artırmak isteyen herkes için büyük bir fırsattır.

Ön koşullar

Oluşturduğunuz içerikler

Bu codelab'de, önceki bölümde tanıtılan üç kullanım alanını kapsayacak şekilde Gemini ile üç Google Chat uygulaması oluşturacaksınız.

Sorun yönetimi uygulaması (içerik oluşturma ve geliştirme)

Bu uygulama şunları yapar:

  • Temel etkileşimler, uygulama ana sayfası ve uygulama kimlik doğrulaması ile sorunları oluşturulmalarından kapatılmalarına kadar yönetir.
  • İletileri izler ve etkinlikler ile aksesuar widget'ları için kapsayıcılık konusunda yardımcı olur.

Gemini'ı kullanarak şunları yapabilirsiniz:

  • Mesaj geçmişine ve sorun ayrıntılarına göre sorun raporları oluşturun.
  • Sınırlı istemler içeren mesajlardaki kapsayıcı olmayan kelimeleri sınıflandırın.

Kullanılan temel teknolojiler Vertex AI, Gemini, Apps Komut Dosyası ve Google Workspace API'leridir (Yönetici, Chat, Dokümanlar, Etkinlikler).

22efdecff4601417.png

2d127c63518673b2.png

9aea694937f2f3ed.png

Bu uygulama, doğal dildeki soruları anlayıp yanıtlamak ve yapılandırılmamış verilerden kaynak referansları döndürmek için Gemini'ı kullanır.

Kullanılan başlıca teknolojiler Dialogflow CX veri deposu aracısı, Dialogflow CX webhook'u, Google Cloud Functions ve Gemini'dır.

9468866bfe848bb8.png

Geri bildirim uygulaması (iletişim)

Bu uygulama, doğal dildeki sohbetlerle birlikte yorumları toplamak ve saklamak için Gemini'ı kullanır.

Kullanılan temel teknolojiler Dialogflow CX temsilcisi, Dialogflow CX aracı, OpenAPI, Google Cloud Functions ve Gemini'dır.

99a7a0295f122f31.png

Öğrenecekleriniz

  • Google Chat uygulamalarını Vertex AI aracılığıyla Gemini ile entegre etme
  • Google Chat uygulamalarını Dialogflow CX aracılarıyla entegre etme
  • Google Chat'in en yeni özelliklerini (uygulama ana sayfası, Google Chat Etkinlikleri ve aksesuar widget'ları) kullanma

İhtiyacınız olanlar

2. Hazırlanın

Kaynakları başlatma

Bu bölümde, tercih ettiğiniz web tarayıcısından aşağıdaki kaynaklara erişip bunları yapılandıracaksınız.

Apps Komut Dosyası projesi

Apps Komut Dosyası Konsolu'nda şu adımları uygulayın:

  1. Ayarlar'ı tıklayın ve Google Apps Komut Dosyası API'sini etkinleştirin.

ea06c593b347b9d1.png

  1. Projenizi seçin.
  2. Proje ayarları'nı tıklayın.
  3. Show "appsscript.json" manifest file in editor (Düzenleyicide "appsscript.json" manifest dosyasını göster) onay kutusunu işaretleyin.
  4. Projeyi Chat Apps Gemini olarak yeniden adlandırın.

12c1485bd248b766.png

Google Cloud projesi

Google Cloud Console'da şu adımları uygulayın:

  1. Projenizi seçin.
  2. Menü ☰ > API'ler ve hizmetler > OAuth kullanıcı rızası ekranı > Uygulamayı düzenle'yi tıklayın ve Uygulama adı'nı Chat Apps Gemini olarak ayarlayın.

  1. Google Chat API yapılandırmasına gidin, ardından Uygulama adı ve Açıklama'yı Chat Apps Gemini olarak ayarlayın.

a71f040755da3b8b.png

Google Chat

Google Chat'te şu adımları uygulayın:

  1. Gerekirse Google Chat uygulamanızla sohbet başlatın.
  2. Çalıştığından emin olmak için Hello gibi bir mesaj gönderin.

9625418251528ae9.png

Kaynak kodu ve kaynakları yerel olarak indirme

  1. Bu GitHub deposunu indirin.

  1. Tercih ettiğiniz geliştirme ortamında apps-script dizinini açın ve ardından terminalinizde aynı dizine gidin.

da9478df97c99194.png

clasp yükleme ve yapılandırma

Kaynak kodun sürümlerini yerel ortamdan Apps Komut Dosyası projesine kolayca düzenlemek ve aktarmak için clasp kullanırız.

  1. Yerel ortamınızda node, npm ve clasp'nin en son sürümlerini yükleyin.
npm install -g @google/clasp
  1. Hesabınızla giriş yapın:
clasp login

8bc2434e6dc6f22a.png

İşlem başarılı olursa web tarayıcınızda temel bir onay ekranı görürsünüz ve istemci kimlik bilgilerinizin bulunduğu .clasprc.json dosyası güncellenir. Terminalinizde bulunduğu yeri görebilirsiniz.

e1d833eb4d5b3a8f.png

3. 1. uygulama: Oluşturma

Kavramları inceleme

Vertex AI

Vertex AI; yapay zeka çözümleri, Agent Builder, 130'dan fazla temel model ve birleşik yapay zeka platformu dahil olmak üzere üretken yapay zeka oluşturmak ve kullanmak için ihtiyacınız olan her şeyi sunar.

c9e9c7a1945b22ac.png

Gemini

Gemini, Vertex AI üzerinden erişilebilen, Google'ın çok formatlı bir LLM'sidir. Kullanıcıların hayal güçlerini artırmalarına, meraklarını genişletmelerine ve üretkenliklerini geliştirmelerine yardımcı olarak potansiyellerini ortaya çıkarmalarını sağlar.

Gelişmiş Chat hizmeti

Gelişmiş Chat hizmeti, Apps Komut Dosyası'nda Google Chat API'yi kullanmanıza olanak tanır. Bu izin, komut dosyalarının Chat alanlarını bulmasına, oluşturmasına ve değiştirmesine, alanlara üye eklemesine veya alanlardan üye kaldırmasına, metin, kart, ek ve tepki içeren mesajları okumasına ya da yayınlamasına olanak tanır.

Mimarinin gözden geçirilmesi

8c9c7b7328a69ea6.png

Bu Google Chat sohbet uygulaması, Apps Komut Dosyası ile oluşturulmuştur. İşleyiş şekli şöyledir:

  1. Bir kullanıcı, uygulamaya doğrudan mesaj yoluyla veya bir alanda mesaj gönderir.
  2. Apps Komut Dosyası projesinde uygulanan ve bir Google Cloud projesiyle ilişkilendirilen uygulama, mesajı işler.
  3. Uygulama, Google Dokümanlar ve Google Chat API'leriyle entegre olur.
  4. Uygulama, verileri komut dosyası özelliklerinde kalıcı hale getirmek için Özellikler Hizmeti'ni kullanır.
  5. Uygulama, doğrudan mesaj yoluyla veya orijinal alanda eşzamanlı bir yanıt gönderir.

İnceleme akışları

Sorun oluşturma

7ca0e8ba3c8255bb.png

Sorunları özel alandan giderme

51b47714c378a24b.png

Sorunu özel alandan kapatma

89e50228deeab0f9.png

Kaynak kodunu inceleme

Apps Komut Dosyası projesi aşağıdaki komut dosyalarını içerir:

  • Configuration: Ortama göre düzenlenecek sabitler.
  • ChatApp: Mesajlar, kart tıklamaları, eğik çizgi komutları ve iletişim kutuları dahil olmak üzere Google Chat etkileşim etkinliklerini işler.
  • Storage: Mülk Hizmetleri'ne dayalı yardımcı işlevler.
  • ChatAppAuth: Google Chat sohbet uygulaması kimlik doğrulamasına dayalı hizmet işlevleri.
  • Docs: Google Dokümanlar'ı temel alan yardımcı işlevler.
  • VertexAi: Vertex AI'ı kullanan yardımcı işlevler.

Gemini ile rapor belgeleri ve sohbet alanı geçmişleri oluşturulurken etkin olarak kullanılan bölümler şunlardır:

appsscript.json

// Enables the Admin SDK Directory and Chat services, which you need to retrieve
// messages and usernames.

"enabledAdvancedServices": [
  ...
  {
    "userSymbol": "AdminDirectory",
    "version": "directory_v1",
    "serviceId": "admin"
  },
  {
    "userSymbol": "Chat",
    "version": "v1",
    "serviceId": "chat"
  }
  ...
]
// Includes the OAuth scopes to request the Admin SDK Directory, Google Chat,
// Google Docs, and Vertex AI APIs.

"oauthScopes": [
  ...
  "https://www.googleapis.com/auth/admin.directory.user.readonly",
  "https://www.googleapis.com/auth/chat.messages.readonly",
  "https://www.googleapis.com/auth/documents",
  "https://www.googleapis.com/auth/cloud-platform",
  ...
]

Configuration.js

// Relies on two constants: the first one is the Google Cloud project ID and the
// second one is the Vertex AI location to be used.

...
const PROJECT_ID = 'replace-with-gcp-project-id';
const VERTEX_AI_LOCATION_ID = 'us-central1';
...

ChatApp.js

// The slash command process function retrieves history, generates content, and passes
// it to the report generator.

function processSlashCommand(event) {
  ...
  if (event.message.slashCommand.commandId == CLOSE_COMMAND_ID
    && event.message.space.type !== "DM") {
    ...
    const history = exportSpaceHistory(spaceId);
    const summary = summarizeSpace(history);
    const docUrl = createReport(
      issue.title, issue.description, resolution, history, summary
    );
    ...
  }
  ...
}
/**
 * Fetches and concatenates the 100 first space messages by using the Google Chat API.
 *
 * Messages with slash commands are filtered (app command invocations).
 *
 * @return {string} concatenate space messages in the format "Sender's name: Message"
 */
function exportSpaceHistory(spaceName) {
  const messages = Chat.Spaces.Messages.list(spaceName, { 'pageSize': 100 }).messages;
  // Returns results after fetching message sender display names.
  let users = new Map();
  return messages
    .filter(message => message.slashCommand === undefined)
    .map(message =>
      `${getUserDisplayName(users, message.sender.name)}: ${message.text}`
    ).join('\n');
}
/**
 * Fetches a user's display name by using the Admin Directory API.
 *
 * A cache is used to only call the API once per user.
 *
 * @param {Map} cache the map containing users previously fetched
 * @param {string} userId the user ID to fetch
 * @return {string} the user's display name
 */
function getUserDisplayName(cache, userId) {
  if (cache.has(userId)) {
    return cache.get(userId);
  }
  let displayName = 'Unknown User';
  try {
    const user = AdminDirectory.Users.get(
      userId.replace("users/", ""),
      { projection: 'BASIC', viewType: 'domain_public' });
    displayName = user.name.displayName ? user.name.displayName : user.name.fullName;
  } catch (e) {
    // Ignores errors, uses 'Unknown User' by default.
  }
  cache.set(userId, displayName);
  return displayName;
}

VertexAi.js

/**
 * Summarizes a Google Chat space history with the Gemini Pro model using
 * Vertex AI API.
 *
 * @param {string} history the history
 * @return {string} the summary
 */
function summarizeSpace(history) {
  const url = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1`
    + `/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}`
    + "/publishers/google/models/gemini-1.0-pro:generateContent";
  const options = {
    method: "POST",
    headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
    contentType: "application/json",
    payload: JSON.stringify({
      contents: {
        role: "user",
        parts: {
          text: "Summarize the following conversation between engineers resolving"
              + " an issue in a few sentences.\n\n" + history
        }
      },
      safetySettings: {
        category: "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        threshold: "BLOCK_LOW_AND_ABOVE"
      },
      generationConfig: {
        temperature: 0.2,
        topP: 0.8,
        topK: 40
      }
    })
  };

  return JSON.parse(UrlFetchApp.fetch(url, options).getContentText())
    .candidates[0].content.parts[0].text;
}

Docs.js

// The report generator function adds two sections: the first one is for the summary and the second one is for history.
function createReport(..., history, summary) {
  ...
  body.appendParagraph("Summary").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(summary);
  body.appendParagraph("History").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(history);
  ...
}

Google Cloud projesini güncelleme

API'leri etkinleştirme

  1. Google Cloud Console'da Google Dokümanlar, Google Yönetici SDK'sı ve Vertex AI API'lerini etkinleştirin:

  1. Menü ☰ > API'ler ve Hizmetler > Etkin API'ler ve Hizmetler'i tıklayın ve API'lerin etkinleştirildiğini doğrulayın.

Hizmet hesabını başlatma

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > IAM ve Yönetici > Hizmet Hesapları > + Hizmet hesabı oluştur'u tıklayın.

.

74cf57426419f39.png

  1. Hizmet hesabı adı'nı chat-app olarak ayarlayın.
  2. Hizmet hesabı açıklaması'nı Chat app auth olarak ayarlayın.
  3. Oluştur ve devam et'i tıklayın.
  4. Bitti'yi tıklayın. Hizmet hesapları sayfasına yönlendirilirsiniz ve oluşturduğunuz hizmet hesabını görebilirsiniz.

ca0468f1f93990f9.png

  1. Yeni oluşturulan hizmet hesabını seçin.
  2. Anahtarlar sekmesini seçin.
  3. Add key'yi (Anahtar ekle) tıklayın.
  4. Yeni anahtar oluştur'u tıklayın.
  5. JSON'ı seçin.
  6. Oluştur'u tıklayın.

9f7e6ea020978ab0.png

İletişim kutusu kapanır ve yeni oluşturulan herkese açık/özel anahtar çiftiniz JSON dosyası olarak yerel ortamınıza otomatik olarak indirilir. İçeriğini daha sonra Apps Komut Dosyası projenizin kaynak kodunu düzenlerken kullanırsınız.

Google Chat API yapılandırmasını güncelleme

Google Cloud Console'da şu adımları uygulayın:

  1. Eğik çizgi komutu ekleyin.
  2. Name (Ad) öğesini /create olarak ayarlayın.
  3. Command ID (Komut Kimliği) değerini 1 olarak ayarlayın.
  4. Açıklama'yı Create a new issue olarak ayarlayın.
  5. İletişim kutusu açılır onay kutusunu seçin.
  6. Başka bir eğik çizgi komutu ekleyin.
  7. Name (Ad) öğesini /close olarak ayarlayın.
  8. Command ID (Komut Kimliği) değerini 2 olarak ayarlayın.
  9. Açıklama'yı Close an issue olarak ayarlayın.
  10. Kaydet'i tıklayın.

bee2e7b63659ab33.png

Apps Komut Dosyası projesini güncelleme

  • Yerel terminalinizdeki mevcut dizini issue-management/1-baseline olarak değiştirin. Kaynak kodunu içerir. Kaynak kodunu Apps Komut Dosyası projenize aktarmadan önce birkaç şeyi yapılandırmanız gerekir.

Kaynak kodunu yapılandırma

  1. Configuration.js dosyasındaki CHAT_CREDENTIALS adlı JSON sabitini, daha önce indirdiğiniz özel anahtar dosyası içeriğine ayarlayın.

d721f6bff73c5304.png

  1. Google Cloud Console'da Menü ☰ > IAM & Admin > Settings'i (Menü ☰ > IAM ve Yönetici > Ayarlar) tıklayın.

.

  1. Proje kimliğini kopyalayın.

82592fa0bd113469.png

  1. Configuration.js dosyasındaki PROJECT_ID adlı dize sabitini proje kimliğine ayarlayın.

383cee561130ceba.png

clasp ayarlarını yapılandırma

Kaynak kodu doğru Apps Komut Dosyası projesine göndermek için clasp ayarlarını başlatmak üzere aşağıdaki adımları uygulayın:

  1. Apps Komut Dosyası Konsolu'nda projenizi seçin.
  2. Proje Ayarları'nı seçin.
  3. Kimlikler bölümünde Kopyala'yı tıklayın.

20ea033b6de882c6.png

  1. Geçerli dizinde bir .clasp.json dosyası oluşturun.
  2. <your-script-id> kısmını kopyalanan kimlikle değiştirin.
  3. Sonucu .clasp.json dosyasına kopyalayın.
  4. .clasp.json dosyasını kaydedin.
{
  "scriptId": "<your-script-id>"
}

Kaynak kodu gönderme

  • Aşağıdaki komutu çalıştırın:
$clasp push
? Manifest file has been updated. Do you want to push and overwrite? Yes
└─ appsscript.json
└─ ChatApp.js
└─ ChatAppAuth.js
└─ Configuration.js
└─ Docs.js
└─ Storage.js
└─ VertexAi.js
Pushed 7 files.

Deneyin

  1. Google Chat'te uygulamaya doğrudan mesaj olarak Hello! gönderin. Uygulama yanıt vermez ancak yapılandırma yapmanızı isteyen bir mesaj gösterilir.

4c1fc68121dcffed.png

  1. Yapılandır'ı tıklayın.
  2. Google Hesabınızı seçin.
  3. Kimliğinizi doğrulayın.
  4. Uygulamaya erişimi inceleyip izin verin.

4a2fd7ac5918bf1a.png

Başarılı olursa web sayfasında temel bir onay ekranı ve uygulamadan orijinal mesajınıza gerçek bir yanıt görürsünüz.

acb9065568fe47d2.png

2d6ef9c62f47e082.png

  1. Uygulamaya başka bir doğrudan mesaj gönderin ancak /create eğik çizgi komutunu kullanın.

be3f3c6eb0f929c1.png

  1. İletişim kutusunda BaşlıkIssue Title 1 olarak ayarlayın.
  2. Açıklama'yı Sorun Description 1 olarak ayarlayın.
  3. Oluştur'u tıklayın.

22efdecff4601417.png

Uygulama şunları yapar:

  1. İletişim kutusunu kapatır.
  2. Yeni oluşturulan soruna ayrılmış ve aynı başlığa sahip bir alan oluşturur.
  3. Yeni oluşturulan alana katılır.
  4. Yeni oluşturulan alanda sorunun açıklamasını içeren bir mesaj gönderir.
  5. Yeni oluşturulan alanın bağlantısını içeren bir doğrudan mesaj gönderir.

3253cec2392e281f.png

  1. Yeni oluşturulan alanda, /close eğik çizgi komutunu ve Not reproducible gibi bir çözünürlüğü içeren bir mesaj gönderin.

132cc4acfc10b98c.png

Uygulama şunları yapar:

  1. Google Dokümanlar'da bir rapor dokümanı oluşturur.
  2. Soruna ayrılmış alana, yeni oluşturulan rapor dokümanının bağlantısını içeren bir mesaj gönderir.

2d127c63518673b2.png

  1. Rapor dokümanını açın. Temel bilgiler, geçmiş ve özet yer alır.

9aea694937f2f3ed.png

4. İsteğe bağlı: 1. uygulama: Uygulama ana sayfasını ekleme

Kavramları inceleme

Uygulama ana sayfası, bir sohbet uygulamasının, kullanıcı sohbet uygulamasıyla doğrudan mesajlaşırken Ana Sayfa sekmesine eriştiğinde gönderdiği özelleştirilebilir bir kart mesajıdır. Bu mesaj genellikle uygulama dokümanlarını veya genel bir bakışı göstermek için kullanılır. Teknik olarak, ele alınması gereken özel bir etkinlik vardır ve bu etkinlik, kart mesajlarıyla aynı temel ilkelere dayanır.

65f56f70f67a32e4.png

İnceleme akışları

Sorunları yönetme

10663f5fc107fb3f.png

Kaynak kodunu inceleme

Apps Komut Dosyası projesinin düzenlenmesi gerekiyor.

ChatApp.js

/**
 * Handles app home requests in Google Chat.
 * 
 * Displays the latest status of all issues.
 */
function onAppHome() {
  // Generates one card section per issue.
  var sections = [];
  for (var issueKey in appProperties.getProperties()) {
    const issue = JSON.parse(appProperties.getProperty(issueKey));
    if (issue.spaceId) {
      sections.push({
        header: `${issue.status} - ${issue.title}`,
        widgets: [{ textParagraph: {
            text: `Description: ${issue.description}`
          }}, { textParagraph: {
            text: `Resolution: ${issue.resolution}`
          }}, { buttonList: { buttons: [{
              text: "Open space",
              onClick: { openLink: {
                url: `https://mail.google.com/mail/u/0/#chat/space/${issue.spaceId}`
              }}
            }, {
              text: "Open report",
              onClick: { openLink: {
                url: issue.reportUrl !== "" ? issue.reportUrl : "docs.new"
              }},
              disabled: issue.reportUrl === ""
          }]}
        }]
      });
    }
  }

  return { action: { navigations: [{ push_card: {
    sections: sections
  }}]}};
}

Google Cloud projesini güncelleme

Google Cloud Console'da şu adımları uygulayın:

  1. Etkileşimli özellikler bölümünde Uygulama ana sayfasını destekle onay kutusunu işaretleyin.

97159c1c69ca8303.png

Yerel ortamınızda şu adımları uygulayın:

  1. Terminalinizdeki mevcut dizini issue-management/2-app-home olarak değiştirin. Kullanmanız gereken kaynak kodu içerir.
  2. issue-management/1-baseline/.clasp.json dosyasını geçerli dizininize kopyalayın.
  3. issue-management/1-baseline/Configuration.js dosyasını mevcut dizininize kopyalayarak mevcut dosyanın yerine geçmesini sağlayın.
  4. Aşağıdaki komutu çalıştırın:
clasp push

Deneyin

Google Chat'te şu adımları uygulayın:

  1. Uygulamaya /create eğik çizgi komutuyla doğrudan mesaj gönderin. Uygulama bir iletişim kutusu açar.
  2. BaşlıkIssue Title 2 olarak ayarlayın.
  3. Açıklama'yı Sorun Description 2 olarak ayarlayın.
  4. Oluştur'u tıklayın.

3b2a8690e758f965.png

  1. Google Chat uygulamasında alanınızdan Ana Sayfa sekmesini seçin. Oluşturduğunuz sorunların ayrıntılarını görebilirsiniz.

ed8e32da0e6f2ac6.png

5. İsteğe bağlı: 1. uygulama: Alan izleme ekleme

Kavramları inceleme

Pub/Sub

Pub/Sub, eşzamansız ve ölçeklenebilir bir mesajlaşma hizmetidir. Mesaj üreten hizmetleri, bu mesajları işleyen hizmetlerden ayırır. Pub/Sub, yayıncılar ve aboneler olarak adlandırılan etkinlik üreticisi ve tüketicisi sistemleri oluşturmanıza olanak tanır. Yayıncılar, eşzamanlı uzak prosedür çağrıları (RPC'ler) yerine etkinlik yayınlayarak abonelerle eşzamansız şekilde iletişim kurar.

Yayıncılar, bu etkinliklerin nasıl veya ne zaman işleneceğine bakılmaksızın etkinlikleri Pub/Sub hizmetine gönderir. Ardından Pub/Sub, etkinlikleri yanıt veren tüm hizmetlere yayınlar. RPC'ler aracılığıyla iletişim kuran sistemlerde yayıncıların, verileri alması için aboneleri beklemesi gerekir. Ancak Pub/Sub'daki eşzamansız entegrasyon, genel sistemin esnekliğini ve sağlamlığını artırır.

Konu: Mesaj feed'ini temsil eden adlandırılmış bir kaynak. Yayınlayabilmek veya abone olabilmek için önce bir konu oluşturmanız gerekir.

Abonelik: Bir konuda yayınlanan mesajları almak için ilgili konuya abone olmanız gerekir. Abone istemci, konuya yayınlanan mesajları alır ve işler. Bir konunun birden fazla aboneliği olabilir ancak belirli bir abonelik tek bir konuya aittir.

Google Workspace etkinlikleri

Google Workspace etkinlikleri, kaynakların oluşturulması, güncellenmesi veya silinmesi gibi Google Workspace kaynaklarında yapılan değişiklikleri ifade eder. Uygulamalar, ilgili etkinlikleri asenkron olarak almak ve işlemek için Google Workspace kaynaklarına abone olabilir.

7816e477b112bfb6.png

Google Workspace Events API, etkinlikleri bir uygulamaya abonelik üzerinden şu şekilde iletir:

  1. Uygulama, Google Workspace uygulamasındaki bir kaynağa (ör. alan) abone olur.
  2. Uygulamanın abone olduğu kaynak değişir.
  3. Google Workspace uygulaması, Pub/Sub'daki bir konuya etkinlik gönderir. Bu konu, uygulamanın Google Workspace aboneliğinin bildirim uç noktası olarak işlev görür. Etkinlik, kaynakta değişenlerle ilgili verileri içerir.
  4. Uygulama, etkinliği içeren Pub/Sub mesajını işler ve gerekirse işlem yapar.

İnceleme akışları

Sorun oluşturma (güncelleme)

6d7a9d7a68666a80.png

Özel alandaki sorunu giderme (güncelleme)

17e60f052f222456.png

Özel alandan sorunu kapatma (güncelleme)

742d490ea0b6fe3a.png

Abonelikleri işleme

de3017100dec6401.png

Kaynak kodunu inceleme

Apps Komut Dosyası projesinin düzenlenmesi gerekiyor.

appsscript.json

// Enables the Workspace Events service.

"enabledAdvancedServices": [
  ...
  {
    "userSymbol": "WorkspaceEvents",
    "version": "v1",
    "serviceId": "workspaceevents"
  }
  ...
]

Configuration.js

// Adds two constants: the first one is the Pub/Sub topic ID and the second one
// is the Pub/Sub subscription ID to be used to retrieve Google Workspace events.

...
const GWS_PUBSUB_TOPIC_ID = `projects/${PROJECT_ID}/topics/workspace-events`;
const GWS_PUBSUB_SUBSCRIPTION_ID =
  `projects/${PROJECT_ID}/subscriptions/workspace-events-sub`;
...

ChatApp.js

// Edits the function to delete the subscription at issue closure.

function processSlashCommand(event) {
  ...
  if (event.message.slashCommand.commandId == CLOSE_COMMAND_ID
    && event.message.space.type !== "DM") {
    ...
    deleteSubscription(issue.subscriptionId);
    ...
  }
  ...
}
// Edits the function to create the subscription.

function createIssue(event) {
  ...
  const subscriptionId = createSpaceSubscription(spaceUrl);
  const createdIssue = saveCreatedIssue(..., subscriptionId);
  ...
}
// Edits the function to delete the subscription.

function onRemoveFromSpace(event) {
  ...
  deleteSubscription(issue.subscriptionId);
  ...
}

Storage.js

// Edits the function to keep track of the subscription ID.

function saveCreatedIssue(..., spaceId, subscriptionId) {
  ...
  appProperties.setProperty(spaceId, JSON.stringify({
    ...
    subscriptionId: subscriptionId,
    ...
  }));
  ...
}

WorkspaceEvent.js

/**
 * Creates a new subscription to Google Workspace Events associated to a
 * Google Chat space.
 * 
 * The subscription scope includes message creation events and resources.
 * 
 * @param {string} spaceId the space ID to create a subscription for
 * @return the ID of the newly created subscription
 */
function createSpaceSubscription(spaceId) {
  const operation = WorkspaceEvents.Subscriptions.create({
    targetResource: `//chat.googleapis.com/${spaceId}`,
    eventTypes: ["google.workspace.chat.message.v1.created"],
    notificationEndpoint: { pubsubTopic: GWS_PUBSUB_TOPIC_ID },
    payloadOptions: { includeResource: true },
  });

  return operation.response.name;
}
/**
 * Processes events from subscription by using the Google Cloud PubSub API.
 * 
 * It pulls and acknowledges each event.
 */
function processSubscription() {
  const response = UrlFetchApp.fetch(
    `https://pubsub.googleapis.com/v1/${GWS_PUBSUB_SUBSCRIPTION_ID}:pull`,
    {
      method: "POST",
      contentType: "application/json",
      headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
      payload: JSON.stringify({ maxMessages: 10 })
    }
  );

  const messages = JSON.parse(response.getContentText()).receivedMessages;
  for (var messageIndex in messages) {
    const message = messages[messageIndex];
    const ceType = message.message.attributes["ce-type"];
    const dataStr = Utilities.newBlob(Utilities.base64Decode(message.message.data))
      .getDataAsString();
    if (ceType === "google.workspace.events.subscription.v1.expirationReminder") {
      // Renews subscription.
      renewSubscription(JSON.parse(dataStr).subscription.name);
    } else if (ceType === "google.workspace.chat.message.v1.created") {
      // Processes the message text when it's sent in a space.
      const chatMessage = JSON.parse(dataStr).message;
      if (chatMessage.sender.type !== "BOT") {
        console.log("Message was processed.");
      }
    }
    // Acknowledges successful processing to avoid getting it again next time.
    ackSubscription(message.ackId);
  }
}
/**
 * Acknowledges a subscription event by using the Google Cloud PubSub API.
 * 
 * @param {string} ackId the ID of the event acknowledgment to send
 */
function ackSubscription(ackId) {
  UrlFetchApp.fetch(
    `https://pubsub.googleapis.com/v1/${GWS_PUBSUB_SUBSCRIPTION_ID}:acknowledge`,
    {
      method: "POST",
      contentType: "application/json",
      headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
      payload: JSON.stringify({
        ackIds: [ackId]
      })
    }
  );
}
/**
 * Renews a subscription to Google Workspace Events.
 * 
 * The default time to live option is used.
 * 
 * @param {string} subscriptionId the ID of the subscription to renew
 */
function renewSubscription(subscriptionId) {
  WorkspaceEvents.Subscriptions.patch({ttl: '0s'}, subscriptionId);
}
/**
 * Deletes a subscription to Google Workspace Events.
 * 
 * @param {string} subscriptionId the ID of the subscription to delete
 */
function deleteSubscription(subscriptionId) {
  WorkspaceEvents.Subscriptions.remove(subscriptionId);
}

Google Cloud projesini güncelleme

API'leri etkinleştirme

  1. Google Cloud Console'da Google Workspace Events ve PubSub'ı etkinleştirin.

  1. Menü ☰ > API'ler ve hizmetler > Etkin API'ler ve hizmetler'i tıklayın ve her ikisinin de etkinleştirildiğini doğrulayın.

Aboneliği başlatma

Tüm çalışma alanı etkinliklerinin yayınlanması için bir Pub/Sub konusu oluşturup bu konuya abone olmanız gerekir.

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Pub/Sub > Konular'a gidin.

  1. Create topic'i (Konu oluştur) tıklayın.
  2. Konu kimliği'ni workspace-events olarak ayarlayın.
  3. Varsayılan abonelik ekle onay kutusunu işaretleyin.
  4. Oluştur'u tıklayın.

b39f9a0aec7c9939.png

Google Chat'ten yeni oluşturduğunuz konuda Pub/Sub mesajları yayınlama erişimi vermek için aşağıdaki adımları uygulayın:

  1. Listeden konuyu seçin.
  2. İzinler sekmesini seçin.
  3. chat-api-push@system.gserviceaccount.com öğesini New principals (Yeni ana hesaplar) listesine ekleyin.
  4. Rol için Pub/Sub Yayıncısı'nı seçin.
  5. Kaydet'i tıklayın.

8d4016c37532503.png

Apps Komut Dosyası projesini güncelleme

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > IAM & Admin > Ayarlar'a gidin.

.

  1. Proje kimliğini kopyalayın.

82592fa0bd113469.png

Yerel ortamınızda şu adımları uygulayın:

  1. Terminalinizdeki mevcut dizini issue-management/3-message-monitoring olarak değiştirin. Gerekli kaynak kodunu içerir.
  2. Configuration.js dosyasındaki PROJECT_ID adlı dize sabitini kopyalanan proje kimliğine ayarlayın.
  3. Configuration.js dosyasındaki CHAT_CREDENTIALS adlı JSON sabitini, daha önce indirdiğiniz özel anahtar dosyası içeriğine ayarlayın.
  4. issue-management/2-app-home/.clasp.json dosyasını geçerli dizininize kopyalayın.
  5. Aşağıdaki komutu çalıştırın:
clasp push

Deneyin

Google Chat'te şu adımları uygulayın:

  1. Uygulamaya /create eğik çizgi komutuyla doğrudan mesaj gönderin. Uygulama bir iletişim kutusu açar.
  2. BaşlıkIssue Title 3 olarak ayarlayın.
  3. Açıklama'yı Sorun Description 3 olarak ayarlayın.
  4. Oluştur'u tıklayın.
  5. Yeni oluşturulan alanda, sorunla ilgili birkaç mesaj gönderin.
  6. /close eğik çizgi komutu ve Fixed gibi bir çözünürlükle mesaj gönderin.

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Pub/Sub > Abonelikler'e gidin.

.

  1. workspace-events-sub aboneliğini seçin.
  2. Mesajlar sekmesini seçin.
  3. Çek'i tıklayın. Tabloda, yeni oluşturulan alana gönderdiğiniz içeriklerle ilgili mesajlar gösterilir.

82631c9792d83889.png

Apps Komut Dosyası Konsolu'nda şu adımları uygulayın:

  1. Projenizi seçin.
  2. Düzenleyen'i seçin.
  3. WorkspaceEvent.gs dosyasını seçin.
  4. Çalıştır bölümünde processSubscription simgesini seçin.
  5. Run simgesini tıklayın.Yürütme günlüğünden mesajların işlendiğini görebilirsiniz.

c612e8fa2bd0a163.png

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Pub/Sub > Abonelikler'e gidin.

.

  1. workspace-events-sub aboneliğini seçin.
  2. Mesajlar sekmesini seçin.
  3. Çek'i tıklayın. Tabloda, yeni oluşturulan alana gönderdiğiniz içerikle ilgili mesajlar artık gösterilmez.

e185454cac862a7b.png

  • Google Chat'te, eğik çizgi komutu /create ile oluşturduğunuz üçüncü soruna ayrılmış alanda, sorunla ilgili birkaç mesaj daha gönderin.

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Pub/Sub > Abonelikler'e gidin.

.

  1. workspace-events-sub aboneliğini seçin.
  2. Mesajlar sekmesini seçin.
  3. Çek'i tıklayın. Tabloda, yeni oluşturulan alana gönderdiğiniz içeriklerle ilgili mesajlar gösterilmez.

6. İsteğe bağlı: 1. uygulama: Kapsayıcılıkla ilgili yardım ekleme

Kavramları inceleme

Üretken yapay zeka istemi, üretken yapay zeka modelini istenen belirli çıkış türüne yönlendirmek için talimat veya soru oluşturma sanatıdır. İstemlere kural ve koşul ekleyerek yanıtları sınırlamak yaygın bir uygulamadır. Bu sayede, çıkışın güvenli, alakalı, tutarlı ve beklentilere uygun olması sağlanabilir.

İnceleme akışları

Abonelikleri işleme (güncelleme)

780d0802f77dd180.png

Kaynak kodunu inceleme

Apps Komut Dosyası projesinin düzenlenmesi gerekiyor.

WorkspaceEvent.js

// Edits the function to replace logging by an actual card message.

function processSubscription() {
  ...
  for (var messageIndex in messages) {
    ...
    } else if (ceType === "google.workspace.chat.message.v1.created") {
      ...
      const inclusivityCheck = getInclusivityFeedback(chatMessage.text);
      if (inclusivityCheck !== "It's inclusive!") {
        createAppMessageUsingChatService({
          cardsV2: [{ cardId: "1", card: { header: {
              title: "Inclusivity",
              subtitle: `The following words are not inclusive: ${inclusivityCheck}`
          }}}]
        },
        chatMessage.space.name);
      }
      ...
    }
    ...
  }
  ...
}

VertexAi.js

/**
 * Gets feedback on inclusivity for a text with the Gemini Pro model using
 * Vertex AI API.
 * 
 * Returns "It's inclusive!" when it is otherwise a list of word(s) that might not
 * be optimal.
 *
 * @param {string} text the text
 * @return {string} the feedback
 */
function getInclusivityFeedback(text) {
  const url = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1`
    + `/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}`
    + "/publishers/google/models/gemini-1.0-pro:generateContent";
  const options =  {
    method: "POST",
    headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
    contentType: "application/json",
    payload: JSON.stringify({
      contents: {
        role: "user",
        parts: {
          text: "Are there any words that obviously go against inclusivity "
            + "in this text:"
            + `\n\n----------\n${text}\n----------\n\n`
            + "If there are not, answer \"It's inclusive!\" "
            + "otherwise answer by listing them separated by commas. "
            + "Do not answer with any explanation."
        }
      },
      safetySettings: {
        category: "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        threshold: "BLOCK_LOW_AND_ABOVE"
      },
      generationConfig: {
        temperature: 0.2,
        topP: 0.8,
        topK: 40
      }
    })
  };

  return JSON.parse(UrlFetchApp.fetch(url, options).getContentText())
    .candidates[0].content.parts[0].text;
}

Apps Komut Dosyası projesini güncelleme

Yerel ortamınızda şu adımları uygulayın:

  1. Terminalinizdeki mevcut dizini issue-management/4-inclusivity-help olarak değiştirin. İhtiyacınız olan kaynak kodu içerir.
  2. issue-management/3-message-monitoring/.clasp.json dosyasını geçerli dizininize kopyalayın.
  3. issue-management/3-message-monitoring/Configuration.js dosyasını mevcut dizininize kopyalayarak mevcut dosyanın yerine geçmesini sağlayın.
  4. Aşağıdaki komutu çalıştırın:
clasp push

Deneyin

Google Chat'te şu adımları uygulayın:

  1. Uygulamaya /create eğik çizgi komutuyla doğrudan mesaj gönderin. Uygulama bir iletişim kutusu açar.
  2. BaşlıkIssue Title 4 olarak ayarlayın.
  3. Açıklama'yı Sorun Description 4 olarak ayarlayın.
  4. Oluştur'u tıklayın.
  5. Yeni oluşturulan alanda It happened to me last week as well gönderin.

Apps Komut Dosyası Konsolu'nda şu adımları uygulayın:

  1. Projenizi seçin.
  2. Düzenleyen'i seçin.
  3. WorkspaceEvent.gs dosyasını seçin.
  4. Çalıştır bölümünde processSubscription simgesini seçin.
  5. Çalıştır'ı tıklayın. Yürütme günlüğünden, mesajların işlendiğini görebilirsiniz.

Google Chat'te şu adımları uygulayın:

  1. Uygulamanın, yeni oluşturulan alanda kapsayıcılıkla ilgili herhangi bir yardım göndermediğini fark edeceksiniz.
  2. Yeni oluşturulan alanda mesajı gönderin I had to add myself from the master to fix it.

Apps Komut Dosyası Konsolu'nda şu adımları uygulayın:

  1. Projenizi seçin.
  2. Düzenleyen'i seçin.
  3. WorkspaceEvent.gs dosyasını seçin.
  4. Çalıştır bölümünde processSubscription simgesini seçin.
  5. Çalıştır'ı tıklayın. Yürütme günlüğünden, mesajların işlendiğini görebilirsiniz. Uygulama, Google Chat'te yeni oluşturulan alana kapsayıcılıkla ilgili bir yardım mesajı gönderdi.

7936342847acbe2d.png

7. İsteğe bağlı: 1. uygulama: Tercih ekleme

.

Kavramları inceleme

Aksesuar widget'ı, bir uygulama tarafından gönderilen mesajın altına eklenen, kenarlığı olmayan bir widget'tır. Genellikle kullanıcının mesaj bağlamında hızlı tepki vermesini sağlamak için kullanılır. Teknik olarak, kart düğmeleriyle aynı temel ilkelere dayanır.

eebe88238f6b13f.png

İnceleme akışları

Kapsayıcılık yardımını devre dışı bırakma

1bb7a8592ee6221e.png

Kaynak kodunu inceleme

Apps Komut Dosyası projesinin düzenlenmesi gerekiyor.

ChatApp.js

// Edits the function to handle the inclusivity help disablement action for a
// given space.

function onCardClick(event) {
  ...
  if (event.action.actionMethodName === "disableInclusivityHelp") {
    disableInclusivityHelp(event.common.parameters.spaceId);
  }
}

Storage.js

// Edits the function to keep track of the inclusivity help setting.

function saveCreatedIssue(title, description, spaceId, subscriptionId) {
  appProperties.setProperty(spaceId, JSON.stringify({
    ...
    inclusivityHelp: true,
    ...
  }));
  ...
}
/**
 * Disables inclusivity help in a space.
 * 
 * @param {string} spaceId the ID of dedicated space of the issue
 */
function disableInclusivityHelp(spaceId) {
  var issue = JSON.parse(appProperties.getProperty(spaceId));
  issue.inclusivityHelp = false;
  appProperties.setProperty(spaceId, JSON.stringify(issue));
}
/**
 * Checks whether the app should help with inclusivity in a given space.
 * 
 * @param {string} spaceId the ID of dedicated space of the issue
 * @return whether the app should help with inclusivity
 */
function shouldHelpWithInclusivity(spaceId) {
  return JSON.parse(appProperties.getProperty(spaceId)).inclusivityHelp;
}

WorkspaceEvent.js

// Edits the function to display the accessory widget to the existing card message.

function processSubscription() {
  ...
  for (var messageIndex in messages) {
    ...
    } else if (ceType === "google.workspace.chat.message.v1.created") {
      ...
      if (... && shouldHelpWithInclusivity(chatMessage.space.name)) {
        createAppMessageUsingChatService({
          ...
          accessoryWidgets: [{ buttonList: { buttons: [{
            altText: "Disable inclusivity help",
            icon: {
              iconUrl: "https://upload.wikimedia.org/.../Stop_hand_rugen.png"
            },
            onClick: { action: {
              function: "disableInclusivityHelp",
              parameters: [{
                key: "spaceId",
                value: chatMessage.space.name
              }]
            }}
          }]}}]
        }, ...);
        ...
      }
      ...
    }
    ...
  }
  ...
}

Apps Komut Dosyası projesini güncelleme

Yerel ortamınızda şu adımları uygulayın:

  1. Terminalinizdeki mevcut dizini issue-management/5-disable-help olarak değiştirin. Gerekli kaynak kodunu içerir.
  2. issue-management/4-inclusivity-help/.clasp.json dosyasını geçerli dizininize kopyalayın.
  3. issue-management/4-inclusivity-help/Configuration.js dosyasını mevcut dizininize kopyalayarak mevcut dosyanın yerine geçmesini sağlayın.
  4. Aşağıdaki komutu çalıştırın:
clasp push

Deneyin

Yardımı devre dışı bırakma

  • Google Chat'te, eğik çizgi komutu /create ile oluşturduğunuz dördüncü sayıya ayrılmış alanda I had to add myself from the master to fix mesajını gönderin.

Apps Komut Dosyası Konsolu'nda şu adımları uygulayın:

  1. Projenizi seçin.
  2. Düzenleyen'i seçin.
  3. WorkspaceEvent.gs dosyasını seçin.
  4. Çalıştır bölümünde processSubscription simgesini seçin.
  5. Çalıştır'ı tıklayın. Yürütme günlüğünden, mesajların işlendiğini görebilirsiniz.

Google Chat'te şu adımları uygulayın:

  1. Uygulamanın, aksesuar widget'ıyla ilgili soruna ayrılmış alana kapsayıcılıkla ilgili yardım içeren bir mesaj gönderdiğini fark edin.
  2. Kapsayıcılık yardımını devre dışı bırakmak için aksesuar widget'ını tıklayın.

de722cff1928dec9.png

Çekle ödeme özelliğinin devre dışı bırakılması

  • Google Chat'te, eğik çizgi komutu /create ile oluşturduğunuz dördüncü sayıya ayrılmış alanda I had to add myself from the master to fix mesajını gönderin.

Apps Komut Dosyası Konsolu'nda şu adımları uygulayın:

  1. Projenizi seçin.
  2. Düzenleyen'i seçin.
  3. WorkspaceEvent.gs dosyasını seçin.
  4. Çalıştır bölümünde processSubscription simgesini seçin.
  5. Çalıştır'ı tıklayın. Yürütme günlüğünden, mesajların işlendiğini görebilirsiniz. Google Chat'te, kapsayıcılıkla ilgili yardım mesajı, devre dışı bırakıldığı için soruna ayrılmış alana gönderilmedi.

347d659db53b73e9.png

8. 2. uygulama: Build

Kavramları inceleme

Üretken yapay zeka temellendirmesi

Bu, yapay zeka modellerini doğrulanabilir bilgi kaynaklarına bağlayarak daha doğru ve güvenilir hale getirmekle ilgilidir. Bu teknik, yapay zekanın bilgi uydurmasını önlemeye yardımcı olur ve yanıtların bağlamsal olarak alakalı ve daha az taraflı olmasını sağlayabilir.

Doğal dil

Yapay veya bilgisayar tabanlı dillerin aksine, insanların günlük iletişim için konuştuğu veya yazdığı herhangi bir dil.

Cloud Storage

Cloud Storage, her büyüklükteki verilerin herhangi bir zamanda tüm dünyada depolanmasına ve alınmasına olanak tanır. Web sitesi içeriği sunma, arşiv ve olağanüstü durum kurtarma amacıyla veri depolama veya doğrudan indirme yoluyla büyük veri nesnelerini kullanıcılara dağıtma gibi çeşitli senaryolar için kullanılabilir.

Dialogflow CX veri deposu

Dialogflow CX, veri depolarıyla entegre olur. Veri depoları, veri deposu aracıları tarafından son kullanıcının sorularına belirli verilerden yanıt bulmak için kullanılan web siteleri ve belgeler koleksiyonlarıdır. Veri deposu aracısı, belirli bir soru için verilen kaynak içerikte yanıt arar ve bulguları tutarlı bir yanıt şeklinde özetler. Ayrıca, son kullanıcının daha fazla bilgi edinmesi için yanıtın kaynaklarına destekleyici bağlantılar da sağlar.

Mimarinin gözden geçirilmesi

9d3342d12f3b4dda.png

Bu Google Chat sohbet uygulaması Dialogflow CX ile oluşturulmuştur ve aşağıdaki şekilde çalışır:

  1. Bir kullanıcı, uygulamaya doğrudan mesaj yoluyla veya bir alanda mesaj gönderir.
  2. Dialogflow CX temsilcisi olan ve bir Google Cloud projesiyle ilişkilendirilmiş uygulama, mesajı işler.
  3. Uygulama, Cloud Storage'da bulunan bir veri deposuyla entegre olur.
  4. Uygulama, doğrudan mesaj yoluyla veya orijinal alanda eşzamanlı bir yanıt gönderir.

Akışları inceleme

Soruyu yanıtlayın

aad9fb5a7ca48956.png

Kaynak kodunu inceleme

İhtiyacınız olan tek kaynak kod değil, temellendirme için kullandığınız verilerdir.

google-chat-overview.pdf

Google Chat uygulamalarının yapılandırılmamış bilgilerini, Google Workspace geliştiricileri web sitesindeki bir sayfanın yazdırılmış versiyonunu içerir.

e9b91c4587b1a3a0.png

Google Cloud projesini güncelleme

Google Cloud Console'da şu adımları uygulayın:

  1. Dialogflow ve Cloud Storage API'lerini etkinleştirin.

  1. Vertex AI Agent Builder API'yi etkinleştirin.

  1. Menü ☰ > API'ler ve hizmetler > Etkin API'ler ve hizmetler'i tıklayın ve tüm API'lerin etkinleştirildiğini doğrulayın.

.

Dialogflow CX veri deposu aracısı oluşturma

Bilgi verilerini başlatma

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Cloud Storage > Paketler'i tıklayın.

4f15978ae9f1b687.png

  1. Oluştur'u tıklayın.
  2. Adgchat-knowledge olarak ayarlayın.
  3. Oluştur'u tıklayın.

6b38c6d4d2c41bba.png

  1. gchat-knowledge paketini seçin.
  2. Dosyaları yükle'yi tıklayın.
  3. Yerel ortamınızdan google-chat-overview.pdf dosyasını indirip seçin.

df89acb22e1762af.png

Uygulama oluşturma

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Agent Builder > Uygulamalar'ı tıklayın.

.

  1. Yeni uygulama'yı tıklayın.
  2. Chat türünü seçin.

44276003074bcf14.png

  1. Company name alanına şirket adınızı girin.
  2. Agent name öğesini knowledge olarak ayarlayın.
  3. Devam'ı tıklayın.

c4fedfd7556f723b.png

  1. Yeni veri deposu oluştur'u tıklayın.
  2. Veri kaynağı olarak Cloud Storage'ı seçin.

6e2440ecf0f8f9bd.png

  1. Dosya'yı seçin.
  2. Göz at'ı tıklayın.
  3. google-chat-overview.pdf dosyasını seçin.
  4. Devam'ı tıklayın.
  5. Veri deposu adını gchat-knowledge-ds olarak ayarlayın.
  6. Oluştur'u tıklayın.

a675df7490b83900.png

  1. Tabloda gchat-knowledge-ds veri deposunu seçin.
  2. Oluştur'u tıklayın.

f121d580771ed96.png

  1. Birkaç dakika sonra Menü ☰ > Agent Builder > Uygulamalar'ı tıklayın. Uygulamayı görebilirsiniz.

.

d929a7431dd84968.png

  1. Menü ☰ > Agent Builder > Veri depoları'nı tıklayın.

.

  1. gchat-knowledge-ds veri deposunu tıklayın. Doküman sayısı 1'dır. Bu, dokümanın hazır olduğunu gösterir.

558319790a0accf2.png

Uygulamayı tamamlama ve test etme

Dialogflow CX konsolunda şu adımları uygulayın:

  1. Google Cloud projenizi seçin.
  2. Bilgi aracısını seçin.

ca9b2fb4be92e8e4.png

  1. Aracı ayarları > Üretken yapay zeka > Üretken aracı'yı seçin.
  2. Modeli Text Bison'dan Gemini Pro'ya değiştirin.
  3. Kaydet'i tıklayın.

68cc4713ec9b25a0.png

  1. Test agent'ı (Test aracısı) tıklayın.
  2. What is Google Chat? gönderin. Müşteri temsilcisi anlamlı bir yanıt veriyor.

8e3a2cb02469041a.png

Google Chat uygulamasını entegre etme

Dialogflow CX konsolunda şu adımları uygulayın:

  1. Google Cloud projenizi seçin.
  2. Bilgi aracısının satırında 1e7ede7abae4aa3c.png > Adı kopyala'yı tıklayın.

e19f61185158110d.png

Google Cloud Console'da şu adımları uygulayın:

  1. Google Chat API yapılandırmasına gidin.

  1. Bağlantı ayarları bölümünde Dialogflow'u seçin.
  2. Dialogflow ayarları bölümünde Dialogflow CX'i seçin.
  3. Temsilci veya Ortam kaynak adı'nı kopyaladığınız temsilci adına ayarlayın.
  4. İki eğik çizgi komutunu kaldırın.

505ff39a50880904.png

  1. Google Chat'te, Google Chat uygulamasına doğrudan mesaj olarak What is Google Chat? gönderin. Temsilci, anlamlı bir yanıt verir.

abda9e43b81fb0ea.png

9. İsteğe bağlı: 2. uygulama: Kaynak ekleme

Kavramları inceleme

Dialogflow CX webhook'u

İşletme mantığını barındıran veya diğer hizmetleri çağıran bir hizmet. Webhook'lar, Dialogflow CX oturumu sırasında doğal dil işleme tarafından çıkarılan verileri kullanarak dinamik yanıtlar oluşturabilir, toplanan verileri doğrulayabilir veya arka uçta işlemleri tetikleyebilir.

Cloud Functions

Cloud Functions, sunucusuz arka uçlar oluşturmak, gerçek zamanlı veri işleme yapmak ve akıllı uygulamalar oluşturmak için idealdir. Sağlama, yönetim, yama uygulama veya güncelleme için sunucu gerekmez. Otomatik olarak ölçeklendirilir, yüksek düzeyde kullanılabilir ve hatadan etkilenmez.

Akışları inceleme

Soruyu yanıtlama (güncelleme)

92767c07c7b252aa.png

Kaynak kodunu inceleme

İhtiyacınız olan tek kaynak kodu, aracı yanıtlarını Google Chat mesajlarına uyarlayan işlevdir. Webhook olarak kullanılır.

package.json

// The function relies on the Cloud Functions framework to run.

{
  "name": "agent-response-adapter",
  "version": "0.0.1",
  "dependencies": {
    "@google-cloud/functions-framework": "^3.0.0"
  },
  ...
}

index.js

/** 
 * Handles all incoming requests.
 *
 * It takes a Dialogflow CX agent response as input and returns a
 * valid Google Chat card message with both the text and source links
 */
functions.http('agent-response-adapter', (request, response) => {
  // Creates Google Chat buttons based on the data store agent response
  // grounding details.
  var linkTitles = [];
  var linkButtons = [];
  const grounding = request.body.messages[1].payload.richContent[0][0];
  if (grounding.type === "match_citations") {
    // Supports citation match type.
    grounding.citations.forEach((citation) => {
      // Avoid duplications.
      if (linkTitles.indexOf(citation.title) < 0) {
        linkButtons.push({
          text: citation.title,
          onClick: { openLink: {
            url: citation.actionLink
          }}
        });
        linkTitles.push(citation.title);
      }
    });
  } else if (grounding.type === "info") {
    // Supports info type.
    if (linkTitles.indexOf(grounding.title) < 0) {
      linkButtons.push({
        text: grounding.title,
        onClick: { openLink: {
          url: grounding.actionLink
        }}
      });
      linkTitles.push(grounding.title);
    }
  }

  // Sends the Dialogflow CX fulfillment response to replace the agent response
  // with the Chat message with text and source buttons.
  response.send({ fulfillment_response: {
    merge_behavior: "REPLACE",
    messages: [{ payload: {
      // Reuses the original data store agent response text.
      text: request.body.messages[0].text.text[0],
      cardsV2: [{
        cardId: "sourcesCard",
        card: { sections: [{
          header: "Sources",
          widgets: [{ buttonList: {
            buttons: linkButtons
          }}]
        }]}
      }]
    }}]
  }});
});

Google Cloud projesini güncelleme

Google Cloud Console'da şu adımları uygulayın:

  1. Cloud Build, Cloud Functions, Cloud Logging, Artifact Registry ve Cloud Run API'lerini etkinleştirin.

  1. Menü ☰ > API'ler ve hizmetler > Etkin API'ler ve hizmetler'i tıklayın ve API'lerin etkinleştirildiğini doğrulayın.

Dialogflow CX veri deposu aracısını güncelleme

Bir Cloud Functions işlevi dağıtmanız ve mümkün olduğunda birden fazla kaynakla tetiklemek için Dialogflow CX webhook'unu güncellemeniz gerekir.

Birden fazla kaynak döndürme

Varsayılan olarak, yeni bir veri deposu aracısı en fazla bir kaynak döndürür ancak bunu daha fazla kaynak döndürecek şekilde değiştirebilirsiniz.

Dialogflow CX konsolunda şu adımları uygulayın:

  1. Google Cloud projenizi seçin.
  2. Bilgi aracısını seçin.
  3. Başlangıç sayfası'nı seçin.
  4. Veri depolarını düzenle'yi seçin.
  5. Aracı yanıtları bölümünde, Veri deposu yanıt seçenekleri'ni 5 olarak ayarlayın.
  6. Kaydet'i tıklayın.

f5932d03057df645.png

Cloud Function'ı başlatma

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Cloud Functions'ı tıklayın.

  1. Create function'ı (İşlev oluştur) tıklayın.
  2. Temel bilgiler bölümünde adfunction-1 olarak ayarlayın.
  3. Kimlik doğrulama bölümünde Kimliği doğrulanmayan çağrılara izin ver radyo düğmesini seçin.
  4. Çalışma zamanı, derleme, bağlantılar ve güvenlik ayarları bölümünde Maksimum örnek sayısı'nı 3 olarak ayarlayın.
  5. İleri'yi tıklayın.

bd3790a9285f9c07.png

  1. Giriş noktası'nı agent-response-adapter olarak ayarlayın.
  2. Varsayılan içeriği package.json ve index.js dosyalarıyla değiştirin.
  3. Dağıt'ı tıklayın.

b379bb8ca0fc1079.png

  1. İşlevin dağıtılması için birkaç dakika beklerken URL'yi kopyalayın.

eaae08cf048b9b1c.png

Webhook'u başlatma

Yeni dağıtılan işlevi tetikleyen bir webhook kullanmak için Dialogflow CX aracısını yapılandırmanız gerekir.

Dialogflow CX konsolunda şu adımları uygulayın:

  1. Google Cloud projenizi seçin.
  2. Bilgi aracısını seçin.
  3. Yönet > Web kancaları > Oluştur'u seçin.
  4. Görünen adGoogle Chat Response Adapter olarak ayarlayın.
  5. Webhook URL'sini daha önce kopyaladığınız URL olarak ayarlayın.
  6. Kaydet'i tıklayın.

5f3c6804d52b87c1.png

  1. Build'ı (Derle) tıklayın.
  2. Başlangıç sayfası'nı seçin.
  3. Veri depolarını düzenle'yi seçin.
  4. Webhook ayarları bölümünde Webhook'u etkinleştir açma/kapatma düğmesini tıklayın.
  5. Google Chat Response Adapter for Webhook'u seçin.
  6. Etiketi arbitrary_tag olarak ayarlayın.
  7. Kaydet'i tıklayın.

442fcaaec9b8f2e3.png

Test uygulaması

  • Google Chat'te, Google Chat uygulamasına doğrudan mesaj olarak What is Google Chat? gönderin. Temsilci, anlamlı bir yanıt ve varsa kaynakların yer aldığı bir kartla yanıt verir.

9468866bfe848bb8.png

10. 3. uygulama: Build

Kavramları inceleme

Sohbet etkileşimleri

Bunlar, doğal dil aracılığıyla iki veya daha fazla kişi arasında bilgi ya da fikir alışverişidir. Bu durum, genellikle durum bilgisiz, son derece yapılandırılmış ve toleranssız değişimlere dayanan teknik arayüzlerle çelişir.

OpenAPI Specification

API yaşam döngüsünün her aşamasında bilgilerin tutarlı bir şekilde aktarılmasını sağlar. Bu, HTTP API'leri için bir spesifikasyon dilidir. Yapıyı ve söz dizimini, API'nin oluşturulduğu programlama diline bağlı olmayacak şekilde tanımlar. API spesifikasyonları genellikle YAML veya JSON ile yazılır. Bu sayede spesifikasyonun kolayca paylaşılması ve kullanılması sağlanır.

Dialogflow CX aracısı

Aracı uygulamalarının temel yapı taşıdır. Aracı uygulamalarında genellikle birçok aracı bulunur. Her aracı, belirli görevleri yerine getirmek üzere tanımlanır. LLM'ye aracı verileri sağlanır. Böylece LLM, soruları yanıtlamak ve görevleri yürütmek için ihtiyaç duyduğu bilgilere sahip olur. Her temsilci bilgi sağlayabilir, harici hizmetlere sorgu gönderebilir veya alt görevleri işlemek için sohbet işlemeyi bir Dialogflow CX akışına ya da başka bir temsilciye erteleyebilir.

Dialogflow CX aracı

Araçlar, aracı uygulamalarını harici sistemlere bağlamak için kullanılır. Bu sistemler, aracı uygulamalarının bilgilerini artırabilir ve karmaşık görevleri verimli bir şekilde yürütmelerini sağlayabilir.

Mimarinin gözden geçirilmesi

9d3342d12f3b4dda.png

Bu Google Chat sohbet uygulaması Dialogflow CX ile oluşturulmuştur ve aşağıdaki şekilde çalışır:

  1. Bir kullanıcı, uygulamaya doğrudan mesaj yoluyla veya bir alanda mesaj gönderir.
  2. Dialogflow CX temsilcisi olan ve bir Google Cloud projesiyle ilişkilendirilmiş uygulama, mesajı işler.
  3. Uygulama, bir temsilciyle entegre olmalıdır.
  4. Uygulama, doğrudan mesaj yoluyla veya orijinal alanda eşzamanlı bir yanıt gönderir.

Akışları inceleme

Yorum toplama

a67a5b8b513bfc2c.png

Kaynak kodunu inceleme

İhtiyacınız olan tek kaynak kodu, aracının araç olarak kullandığı arka uç hizmetini taklit etme işlevidir.

package.json

// The function relies on the Cloud Functions framework to run.

{
  "name": "feedback-app-backend",
  "version": "0.0.1",
  "dependencies": {
    "@google-cloud/functions-framework": "^3.0.0"
  },
  ...
}

index.js

/** 
 * Handles all incoming requests.
 * 
 * It always returns OK in plain text.
 */
functions.http('feedback-app-backend', (request, response) => {
    response.send('OK');
});

service-openapi.yaml

// Defines the backend service structure and how to request it.

openapi: 3.1.0
info:
  title: Review Store
  license:
    name: Apache 2.0
    identifier: Apache-2.0
  version: 0.0.1
servers:
  - url: https://us-central1-project-0.cloudfunctions.net
paths:
  /store-review:
    post:
      operationId: storeReview
      summary: Store a new review
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                stars:
                  type: integer
                  format: int64
      responses:
        '200':
          description: success
          content:
            application/json:
              schema:
                type: string

Arka uç hizmeti sahtesini başlatma

Dialogflow CX temsilci uygulamasının entegre etmesi ve araç olarak çağırması gereken bir arka uç hizmetini simüle etmek için Cloud Functions işlevi dağıtırsınız.

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Cloud Functions'ı tıklayın.

  1. Create function'ı (İşlev oluştur) tıklayın.
  2. Temel bilgiler bölümünde adfunction-2 olarak ayarlayın.
  3. Kimlik Doğrulama bölümünde Kimliği doğrulanmayan çağrılara izin ver radyo düğmesini seçin.
  4. Çalışma zamanı, derleme, bağlantılar ve güvenlik ayarları bölümünde Maksimum örnek sayısı'nı 3 olarak ayarlayın.
  5. İleri'yi tıklayın.

e8cf0ee7441bf634.png

  1. Giriş noktası'nı feedback-app-backend olarak ayarlayın.
  2. Varsayılan içeriği package.json ve index.js dosyalarıyla değiştirin.
  3. Dağıt'ı tıklayın.

bdb5cf9f503aa7f6.png

  1. İşlevin dağıtılması için birkaç dakika beklerken URL'yi kopyalayın.

Dialogflow CX aracısı uygulaması oluşturma

Uygulama oluşturma

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Agent Builder > Uygulamalar'ı tıklayın.

.

  1. Yeni uygulama'yı tıklayın.
  2. Agent'ı (Ajan) seçin.
  3. Görünen adFeedback App olarak ayarlayın.
  4. Oluştur'u tıklayın.

7ef3dbacee96c5aa.png

Aracı başlatma

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Agent Builder > Uygulamalar'ı tıklayın.

.

  1. Geri Bildirim Uygulaması aracısını seçin.
  2. Araçlar > + Oluştur'u tıklayın.
  3. Name (Ad) öğesini review olarak ayarlayın.
  4. OpenAPI'yi seçin.
  5. description değerini aşağıdaki gibi ayarlayın:
The tool takes the number of stars as a parameter of the store review method and saves it in a database for later use.
  1. service-openapi.yaml dosyasında $URL değerini indirip daha önce kopyaladığınız URL ile değiştirin.
  2. YAML Schema değerini service-openapi.yaml dosyasının düzenlenmiş içeriği olarak ayarlayın.
  3. Kaydet'i tıklayın.

58085d6d56b603f7.png

Aracıyı başlatma

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Agent Builder > Uygulamalar'ı tıklayın.

.

  1. Geri Bildirim Uygulaması aracısını seçin.
  2. Aracılar > Varsayılan Üretken Yapay Zeka Aracı'nı seçin.
  3. Agent name (Aracı adı) değerini Feedback collector olarak ayarlayın.
  4. goal değerini aşağıdakine ayarlayın:
You are an agent that collects reviews from Google Chat app developers.
A review may be between 0 and 5 stars. The more stars, the more positive the review.
  1. instructions değerini aşağıdakine ayarlayın:
If the developer didn't provide the number of stars, ask for the number of stars.
After the developer provides the number of stars of the review, confirm the number with the developer and use ${TOOL: review} to store the review with the number of stars.
If ${TOOL: review} fails, apologize and ask to try again later. Otherwise, thank the developer for the review.
  1. Kaydet'i tıklayın.

ebee7fdfa826b487.png

Test uygulaması

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Agent Builder > Uygulamalar'ı tıklayın.

.

  1. Geri Bildirim Uygulaması aracısını seçin.
  2. Ajanı önizle'ye gidin.
  3. Aracı bölümünde Geri bildirim toplayıcı'yı seçin.
  4. Üretken model seçin bölümünde gemini-pro'yu seçin.
  5. Başlamak için Hello! mesajını gönderin.

90ca8cb7b2c1cb4b.png

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > Cloud Functions'ı tıklayın.

  1. function-2 > Günlükler'i seçin. Bazı günlüklerde arayan olarak Google-Dialogflow gösteriliyor.

48bfdf1788004d18.png

Google Chat uygulamasını entegre etme

Dialogflow CX konsolunda şu adımları uygulayın:

  1. Google Cloud projenizi seçin.
  2. Feedback App aracısının işlem menüsünü tıklayın.
  3. Adı kopyala'yı tıklayın.

Google Cloud Console'da şu adımları uygulayın:

  1. Google Chat API yapılandırmasına gidin.

  1. Agent or Environment resource name (Aracı veya Ortam kaynak adı) alanını daha önce kopyaladığınız aracı adı olarak ayarlayın.

df16619a1cb85cf8.png

  • Başlamak için Google Chat'te Google Chat uygulamasına doğrudan mesaj olarak Hello! gönderin. Temsilci, Dialogflow CX konsolundaki testinize benzer şekilde yanıt verir.

99a7a0295f122f31.png

11. Temizleme

Google Cloud projesini silme

Bu codelab'de kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek istiyorsanız Google Cloud projesini silmenizi öneririz.

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > IAM ve Yönetici > Ayarlar'ı tıklayın.

.

  1. Kapat'ı tıklayın.
  2. Proje kimliğini girin.
  3. Yine de kapat'ı tıklayın.

407699a4e03afea6.png

Apps Komut Dosyası projesini silme

Apps Komut Dosyası projenizi de silmenizi öneririz.

Apps Komut Dosyası Konsolu'nda şu adımları uygulayın:

  1. Projenizi seçin.
  2. İşlem menüsünü tıklayın.
  3. Kaldır'ı tıklayın.

fa3a42d7d2201eb9.png

12. Tebrikler

Tebrikler! Gemini ile Google Chat uygulamaları geliştirdiniz.

Yapabilecekleriniz

Bu codelab'de yalnızca basit kullanım alanları gösterilmiştir ancak Google Chat uygulamalarınızda dikkate almak isteyebileceğiniz birçok genişletme alanı vardır. Örneğin:

  • Özel olanlar da dahil olmak üzere diğer üretken yapay zeka modelleriyle entegrasyon
  • Ses, resim ve video gibi diğer medya türlerini destekler.
  • Çok formatlılık özelliğini kullanın.
  • Daha uzun bağlam pencerelerinden ve geri bildirim döngülerinden yararlanın.
  • Üretime hazır Google Chat uygulamalarını pazar yerinde yayınlayın. Geliştiriciler için YouTube videoları, doküman web siteleri, kod örnekleri ve eğitici içerikler gibi birçok kaynak mevcuttur.
  • Kuruluşunuz için Google Chat'i etkinleştirin. İçe aktarma modu özelliği, başlangıçta işinizi kolaylaştırır.

Daha fazla bilgi