Gemini ile Google Chat için uygulamalar oluşturma

1. Başlamadan önce

Gemini ile Google Chat uygulamaları nelerdir?

Gemini ile Google Chat uygulamaları şunları yapar:

  • Hizmetlerinizi ve kaynaklarınızı Google Chat'e taşıyın. Google Chat, kullanıcıların görüşmeden ayrılmadan bilgi almasına ve işlem yapmasına olanak tanır.
  • Üretken yapay zeka modeli Gemini ile entegre edin. Böylece iş akışlarınızı kolaylaştırmak için belirli zamanlarda metin veya resim gibi veriler oluşturabilir ya da arayabilirler.

Google Chat uygulamalarını neden Gemini ile entegre etmelisiniz?

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

  • İçerik oluşturma ve geliştirme. Pazarlama metni oluşturma, sosyal medya yayınları hazırlama, gerçekçi görüntüler oluşturma, müzik besteleme veya video içeriği oluşturmaya 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ı konuşmalar yapın.

Bu özellikleri doğrudan Google Chat'in tanıdık arayüzüne entegre edebilmek, kullanıcılarının deneyimini ve üretkenliğini iyileştirmek isteyen herkes için muhteşem bir fırsat sunuyor.

Ön koşullar

Oluşturduğunuz şey

Bu codelab'de, önceki bölümde açıklanan üç kullanım alanını ele almak için Gemini ile üç Google Chat uygulaması geliştireceksiniz.

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ı sayesinde, oluşturma işleminden kapanışa kadar tüm sorunları yönetir.
  • Mesajları izler, etkinlikler ve aksesuar widget'larıyla kapsayıcılık konusunda yardımcı olur.

Gemini'ı kullanarak:

  • Mesaj geçmişine ve sorun ayrıntılarına dayalı sorun raporları oluşturun.
  • Anahtarlı istemlerle mesajlardaki kapsayıcı olmayan kelimeleri sınıflandırın.

Kullanılan ana 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'dan yararlanır.

Kullanılan ana teknolojiler Dialogflow CX veri depolama aracısı, Dialogflow CX webhook, Google Cloud Functions ve Gemini'dır.

9468866bfe848bb8.png

Geri bildirim uygulaması (görüşme)

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

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

99a7a0295f122f31.png

Öğrendikleriniz

  • 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 özellikleri nasıl kullanılır? Uygulama ana sayfası, Google Chat Etkinlikleri ve aksesuar widget'ları

İ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ı konsolunda aşağıdaki adımları uygulayın:

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

ea06c593b347b9d1.png

  1. Projenizi seçin.
  2. Proje ayarları'nı tıklayın.
  3. Göster: "appsscript.json" manifest dosyası düzenleyicide onay kutusunu işaretleyin.
  4. Projenin adını Chat Apps Gemini olarak değiştirin.

12c1485bd248b766.png

Google Cloud projesi

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Projenizi seçin.
  2. Menü lastik veya > simgesini tıklayın API'ler ve hizmetler > OAuth izin ekranı > Uygulamayı düzenleyin, ardından 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 Sohbet

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 kodunu 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 kolayca düzenlemek ve Apps Komut Dosyası projesine aktarmak için clasp aracını kullanıyoruz.

  1. Yerel ortamınıza node, npm ve clasp uygulamalarının 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 bilgilerinizi içeren .clasprc.json dosyası güncellenir. Kartın bulunduğu yeri terminalinizde bulabilirsiniz.

e1d833eb4d5b3a8f.png

3. Uygulama 1: Derleme

Kavramları inceleme

Vertex AI

Vertex AI; yapay zeka çözümleri, aracı oluşturucu, 130'dan fazla temel modeli ve birleştirilmiş yapay zeka platformu dahil, üretken yapay zeka geliştirip kullanmak için ihtiyacınız olan her şeyi sunar.

c9e9c7a1945b22ac.png

Gemini

Gemini, Google'ın Vertex AI'dan erişilebilen çok modlu bir geniş kapsamlı dil modelidir. İnsanların hayal güçlerini zenginleştirmeleri, meraklarını geliştirmeleri ve üretkenliğini artırmaları için insani potansiyellerini ortaya çıkarmalarına yardımcı oluyor.

Gelişmiş Chat hizmeti

Gelişmiş Chat hizmeti, Apps Komut Dosyası'nda Google Chat API'yi kullanmanıza olanak tanır. Bu sayede komut dosyaları Chat alanlarını bulup oluşturabilir ve değiştirebilir, alanlara üye ekleyip kaldırabilir ve metin, kart, ek ve tepki içeren mesajları okuyup yayınlayabilir.

İnceleme mimarisi

8c9c7b7328a69ea6.png

Bu Google Chat uygulaması, Apps Komut Dosyası ile geliştirilmiştir. İşleyiş şekli:

  1. Kullanıcı, uygulamaya doğrudan mesaj veya bir alan üzerinden mesaj gönderir.
  2. Bir Apps Komut Dosyası projesinde uygulanan ve bir Google Cloud projesiyle ilişkilendirilmiş olan uygulama, mesajı işler.
  3. Uygulama, Google Dokümanlar ve Google Chat API'leri ile entegre olur.
  4. Uygulama, komut dosyası özelliklerindeki verileri saklamak için Özellikler Hizmeti'ni kullanır.
  5. Uygulama, doğrudan mesajda veya orijinal alanda eşzamanlı bir yanıt gönderir.

Akışları inceleme

Sorun oluştur

7ca0e8ba3c8255bb.png

Özel alandan sorun giderme

51b47714c378a24b.png

Sorunu özel alandan kapat

89e50228deeab0f9.png

Kaynak kodunu inceleme

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

  • Configuration: Ortama göre düzenlenecek sabit değerler.
  • ChatApp: Mesajlar, kart tıklamaları, eğik çizgi komutları ve iletişim kutuları gibi Google Chat etkileşim etkinliklerini işler.
  • Storage: Mülk Hizmetleri'ni kullanan yardımcı işlevler.
  • ChatAppAuth: Google Chat uygulamasının kimlik doğrulamasını temel alan yardımcı işlevler.
  • Docs: Google Dokümanlar'ı temel alan yardımcı işlevler.
  • VertexAi: Vertex AI'a dayanan yardımcı işlevler.

Gemini ve sohbet alanı geçmişleriyle rapor belgeleri oluştururken 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 konsolunda Google Dokümanlar, Google Yönetici Konsolu SDK'sı ve Vertex AI API'lerini etkinleştirin:

  1. Menü lastik veya > simgesini tıklayın API'ler ve Hizmetler > Etkin API'ler ve Hizmetler'i tıklayın ve API'lerin etkinleştirildiğini onaylayın.

Hizmet hesabı başlatma

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü lastik veya > simgesini tıklayın 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ı öğesini 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önlendirilir 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. Anahtar ekle'yi tıklayın.
  4. Yeni anahtar oluştur'u tıklayın.
  5. JSON'yi seçin.
  6. Oluştur'u tıklayın.

9f7e6ea020978ab0.png

İletişim kutusu kapanır ve yeni oluşturulan ortak/özel anahtar çiftiniz otomatik olarak yerel ortamınıza bir JSON dosyası biçiminde indirilir. Projenin içeriğini daha sonra Apps Komut Dosyası projenizin kaynak kodunu düzenlediğinizde kullanabilirsiniz.

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

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Eğik çizgi komutu ekleyin.
  2. Ad/create olarak ayarlayın.
  3. Komut Kimliği'ni 1 olarak ayarlayın.
  4. Açıklama'yı Create a new issue olarak ayarlayın.
  5. İletişim kutusu açar onay kutusunu işaretleyin.
  6. Başka bir eğik çizgi komutu ekleyin.
  7. Ad/close olarak ayarlayın.
  8. Komut Kimliği'ni 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 kodu içerir. Kaynak kodu Apps Komut Dosyası projenize aktarmadan önce birkaç şey 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ü uygulanır > IAM ve Yönetici > Ayarlar.

  1. Proje kimliğini kopyalayın.

82592fa0bd113469.png

  1. Configuration.js dosyasındaki PROJECT_ID adlı dize sabit değerini, proje kimliğine ayarlayın.

383cee561130ceba.png

clasp ayarlarını yapılandırın

Kaynak kodu doğru Apps Komut Dosyası projesine aktarmak üzere clasp ayarlarını başlatmak için şu adımları uygulayın:

  1. Apps Komut Dosyası konsolunda 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> değerini, 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 aktarma

  • 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 Hello! adlı kullanıcıyı uygulamaya doğrudan mesajla gönderin. Uygulama yanıt vermiyor, ancak yapılandırma istemi içeren bir mesaj görünüyor.

4c1fc68121dcffed.png

  1. Yapılandır'ı tıklayın.
  2. Google Hesabınızı seçin.
  3. Kimlik doğrulaması yapma.
  4. Uygulamayı inceleyin ve uygulamaya erişim izni verin.

4a2fd7ac5918bf1a.png

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

acb9065568fe47d2.png

2d6ef9c62f47e082.png

  1. /create eğik çizgi komutunu kullanarak uygulamaya başka bir doğrudan mesaj gönderin.

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. Aynı başlıkla, yeni oluşturulan soruna özel 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. Size 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 özel 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. Raporda temel bilgiler, geçmiş ve özet bilgileri yer alır.

9aea694937f2f3ed.png

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

Kavramları inceleme

Uygulama ana sayfası, kullanıcı Chat uygulamasındaki doğrudan mesaj üzerinden Ana Sayfa sekmesine eriştiğinde Chat uygulamasının kullanıcıya gönderdiği özelleştirilebilir kart mesajıdır. Bu genellikle uygulama belgelerini veya genel bakışı görüntülemek için kullanılır. Teknik olarak, gerçekleştirilmesi gereken özel bir etkinlik vardır ve bu etkinlik, kart mesajlarıyla aynı temel ilkelere dayanır.

65f56f70f67a32e4.png

Akışları inceleme

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 aşağıdaki adımları uygulayın:

  1. Etkileşimli özellikler bölümünde Destek uygulaması ana sayfası onay kutusunu seçin.

97159c1c69ca8303.png

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

  1. Terminalinizdeki geçerli dizini issue-management/2-app-home olarak değiştirin. Bu paket, kullanmanız gereken kaynak kodunu 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 dizinin yerini alması için geçerli dizininize kopyalayın.
  4. Aşağıdaki komutu çalıştırın:
clasp push

Deneyin

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

  1. Uygulamaya eğik çizgi komutuyla (/create) 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ıyla 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ı inceleyin

Pub/Sub

Pub/Sub, mesaj üreten hizmetleri bu mesajları işleyen hizmetlerden ayıran eşzamansız ve ölçeklenebilir bir mesajlaşma hizmetidir. Pub/Sub, yayıncı ve abone adı verilen etkinlik yapımcıları ve tüketicilerinden oluşan sistemler oluşturmanıza olanak tanır. Yayıncılar, eşzamanlı uzak prosedür çağrıları (RPC'ler) yerine etkinlikleri yayınlayarak abonelerle eşzamansız bir biçimde iletişim kurar.

Yayıncılar, nasıl veya ne zaman işleneceğine bakmadan etkinlikleri Pub/Sub hizmetine gönderir. Daha sonra Pub/Sub, etkinlikleri bu etkinliklere tepki veren tüm hizmetlere yayınlar. RPC'ler aracılığıyla iletişim kuran sistemlerde yayıncılar, abonelerin verileri almasını beklemelidir. Ancak Pub/Sub'daki eşzamansız entegrasyon, genel sistemin esnekliğini ve dayanıklılığını artırır.

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

Abonelik: Bir konuda yayınlanan mesajları almak için o konuya abonelik oluşturmanız gerekir. Abone istemcisi, konuda yayınlanan mesajları alır ve işler. Bir konunun birden çok aboneliği olabilir, ancak belirli bir abonelik tek bir konuya aittir.

Google Workspace etkinlikleri

Google Workspace etkinlikleri, Google Workspace kaynaklarında yapılan değişiklikleri temsil eder (ör. kaynakların oluşturulması, güncellenmesi veya silinmesi). Uygulamalar, alakalı etkinlikleri eşzamansız olarak almak ve işlemek için Google Workspace kaynaklarına abone olabilir.

7816e477b112bfb6.png

Google Workspace Events API'nin etkinlikleri abonelik üzerinden bir uygulamaya nasıl yayınladığı aşağıda açıklanmıştır:

  1. Uygulama, Google Workspace uygulamasındaki alan gibi bir kaynağa abone olur.
  2. Uygulamanın abone olduğu kaynak değişir.
  3. Google Workspace uygulaması, Pub/Sub'daki bir konuya etkinlik yayınlar. Bu etkinlik, uygulamanın Google Workspace aboneliği için bildirim uç noktası görevi görür. Etkinlik, kaynakta nelerin değiştiğiyle ilgili verileri içerir.
  4. Uygulama, etkinliği içeren Pub/Sub mesajını işler ve gerekirse işlem yapar.

Akışları inceleme

Sorun oluştur (güncelleme)

6d7a9d7a68666a80.png

Özel alanla ilgili sorun giderme (güncelleme)

17e60f052f222456.png

Özel alandaki sorunu kapat (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 konsolunda Google Workspace Etkinliklerini ve PubSub'ı etkinleştirin.

  1. Menü lastik veya > simgesini tıklayın API'ler ve hizmetler > Etkin API'ler ve hizmetleri edinin ve her ikisinin de etkin olduğunu onaylayın.

Aboneliği başlatma

Tüm Workspace etkinliklerinin yayınlanması için bir Pub/Sub konusu oluşturmanız ve bu konuya abone olmanız gerekir.

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü ]# > simgesine gidin. Pub/Sub > Konular.

  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şturulan konunuza Pub/Sub mesajları yayınlama erişimi vermek için şu adımları uygulayın:

  1. Listeden konuyu seçin.
  2. İzinler sekmesini seçin.
  3. chat-api-push@system.gserviceaccount.com öğesini Yeni ana hesaplar'a 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 aşağıdaki adımları uygulayın:

  1. Menü ]# > simgesine gidin. IAM ve Yönetici > Ayarlar.

  1. Proje kimliğini kopyalayın.

82592fa0bd113469.png

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

  1. Terminalinizdeki geçerli dizini issue-management/3-message-monitoring olarak değiştirin. İhtiyacınız olan kaynak kodunu içerir.
  2. Configuration.js dosyasındaki PROJECT_ID adlı dize sabit değerini, 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 eğik çizgi komutuyla (/create) 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, sorunu açıklayan birkaç mesaj gönderin.
  6. /close eğik çizgi komutunu ve Fixed gibi bir çözünürlüğü içeren bir mesaj gönderin.

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü ]# > simgesine gidin. Pub/Sub > Abonelikler.

  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önderdiklerinizle ilgili mesajlar gösterilir.

82631c9792d83889.png

Apps Komut Dosyası konsolunda aşağıdaki adımları uygulayın:

  1. Projenizi seçin.
  2. Düzenleyici'yi 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, iletilerin işlendiğini görebilirsiniz.

c612e8fa2bd0a163.png

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü ]# > simgesine gidin. Pub/Sub > Abonelikler.

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

e185454cac862a7b.png

  • Google Chat'te, /create eğik çizgi komutuyla oluşturduğunuz üçüncü soruna özel alanda, sorunu açıklayan birkaç mesaj daha gönderin.

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü ]# > simgesine gidin. Pub/Sub > Abonelikler.

  1. workspace-events-sub aboneliğini seçin.
  2. Mesajlar sekmesini seçin.
  3. Çek'i tıklayın. Yeni oluşturulan alana gönderdiklerinizle ilgili mesajlar tabloda gösterilmez.

6. İsteğe bağlı: 1. uygulama: Kapsayıcılık yardımı ekleyin

Kavramları inceleyin

Üretken yapay zeka istemi, üretken yapay zeka modelini istenen çıktı türüne göre yönlendirmek için talimatlar veya sorular oluşturma sanatıdır. Yaygın bir uygulama, istemlere kurallar ve koşullar ekleyerek yanıtları kontrol etmektir. Bu da çıktının güvenli, alakalı, tutarlı ve beklentilerle uyumlu olmasına yardımcı olur.

Akışları inceleme

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 geçerli dizini issue-management/4-inclusivity-help olarak değiştirin. İhtiyacınız olan kaynak kodunu 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 dizinin yerini alması için geçerli dizininize kopyalayın.
  4. Aşağıdaki komutu çalıştırın:
clasp push

Deneyin

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

  1. Uygulamaya eğik çizgi komutuyla (/create) 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 yazıp gönderin.

Apps Komut Dosyası konsolunda aşağıdaki adımları uygulayın:

  1. Projenizi seçin.
  2. Düzenleyici'yi 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, iletilerin işlendiğini görebilirsiniz.

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

  1. Uygulamanın yeni oluşturulan alanda herhangi bir kapsayıcılık yardımı göndermediğine dikkat edin.
  2. Yeni oluşturulan alanda I had to add myself from the master to fix it mesajını gönderin.

Apps Komut Dosyası konsolunda aşağıdaki adımları uygulayın:

  1. Projenizi seçin.
  2. Düzenleyici'yi 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, iletilerin işlendiğini görebilirsiniz. Uygulama, Google Chat'te yeni oluşturulan alanda bir kapsayıcılık yardım mesajı gönderdi.

7936342847acbe2d.png

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

.

Kavramları inceleyin

Aksesuar widget'ı, uygulamalar tarafından gönderilen mesajların alt kısmına eklenen kenarlıksız bir widget'tır. Bu, genellikle belirli bir mesaj bağlamında kullanıcının hızlı tepki vermesini sağlamak için kullanılır. Teknik olarak, kart düğmeleriyle aynı temel ilkelere dayanır.

eebe88238f6b13f.png

Akışları inceleme

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

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 geçerli dizini issue-management/5-disable-help olarak değiştirin. İhtiyacınız olan 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 dizinin yerini alması için geçerli dizininize kopyalayın.
  4. Aşağıdaki komutu çalıştırın:
clasp push

Deneyin

Yardımı devre dışı bırak

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

Apps Komut Dosyası konsolunda aşağıdaki adımları uygulayın:

  1. Projenizi seçin.
  2. Düzenleyici'yi 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, iletilerin işlendiğini görebilirsiniz.

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

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

de722cff1928dec9.png

Devre dışı bırakmayı kontrol etme

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

Apps Komut Dosyası konsolunda aşağıdaki adımları uygulayın:

  1. Projenizi seçin.
  2. Düzenleyici'yi 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, iletilerin işlendiğini görebilirsiniz. Uygulama, devre dışı bırakıldığı için Google Chat'te soruna ayrılmış alana kapsayıcılık yardımını içeren bir mesaj göndermedi.

347d659db53b73e9.png

8. Uygulama 2: Derleme

Kavramları inceleme

Üretken yapay zekayı temel alma

Hedef, yapay zeka modellerini doğrulanabilir bilgi kaynaklarına bağlayarak daha gerçek ve güvenilir hale getirmektir. Bu teknik, yapay zekanın bilgi üretmesini önlemeye yardımcı olur. Ayrıca yanıtları bağlamsal olarak alakalı ve daha önyargılı hale getirebilir.

Doğal dil

Yapay veya bilgisayar tabanlı dillerin aksine, insanlar tarafından günlük iletişim için konuşulan veya yazılan herhangi bir dil.

Cloud Storage

Cloud Storage, verilerin tüm dünyada depolanabilmesini ve her zaman istenen miktarda verinin alınabilmesini sağlar. 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 dahil olmak üzere çeşitli senaryolarda kullanılabilir.

Dialogflow CX veri deposu

Dialogflow CX, veri deposu aracıları tarafından belirli verilerden son kullanıcı sorularının yanıtlarını bulmak için kullanılan web sitesi ve belge koleksiyonları olan veri depolarıyla entegre olur. Belirli bir soru için veri deposu aracısı, belirtilen kaynak içerikten bir yanıt arar ve bulguları tutarlı bir yanıt olarak özetler. Ayrıca, son kullanıcının daha fazla bilgi edinmesi için yanıtın kaynaklarına yönlendiren destekleyici bağlantılar da sağlanır.

İnceleme mimarisi

9d3342d12f3b4dda.png

Bu Google Chat uygulaması, Dialogflow CX ile geliştirilmiştir ve şu şekilde çalışır:

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

Akışları inceleme

Soruyu cevapla

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 içerir. Bu bilgiler, Google Workspace geliştiricileri web sitesindeki bir sayfanın basılı versiyonudur.

e9b91c4587b1a3a0.png

Google Cloud projesini güncelleyin

Google Cloud konsolunda ş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ü lastik veya > simgesini tıklayın API'ler ve hizmetler > Etkin API'ler ve hizmetleri'ni tıklayın ve tüm API'lerin etkinleştirildiğinden emin olun.

.

Dialogflow CX veri deposu aracısı oluşturma

Bilgi verilerini başlatma

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Tıklayarak Menü ▾ > Cloud Storage > Paketler.

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 aşağıdaki adımları uygulayın:

  1. Menü lastik veya > simgesini tıklayın Temsilci oluşturucu > Uygulamalar'a gidin.

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

44276003074bcf14.png

  1. Company name değerini şirketinizin adı olarak ayarlayın.
  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ü uygulanır > Temsilci oluşturucu > Uygulamalar'ı tıklayın.

d929a7431dd84968.png

  1. Menü lastik veya > simgesini tıklayın Temsilci oluşturucu > Veri depoları.

  1. gchat-knowledge-ds veri deposunu tıklayın. Doküman sayısı 1 ve bu sayı, dokümanın hazır olduğunu gösteriyor.

558319790a0accf2.png

Uygulamayı tamamlama ve test etme

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

  1. Google Cloud projenizi seçin.
  2. Bilgi temsilcisini seçin.

ca9b2fb4be92e8e4.png

  1. Temsilci ayarları > Üretken Yapay Zeka > Üretken temsilci.
  2. Modeli Text Bison'dan Gemini Pro'ya geçirin.
  3. Kaydet'i tıklayın.

68cc4713ec9b25a0.png

  1. Test aracısı'nı tıklayın.
  2. What is Google Chat? gönder. Temsilci, anlamlı bir cümleyle yanıt verir.

8e3a2cb02469041a.png

Google Chat uygulamasını entegre edin

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

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

e19f61185158110d.png

Google Cloud Console'da aşağıdaki 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. Aracı veya Ortam kaynağı adı'nı, kopyaladığınız aracı 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 mesajla What is Google Chat? numaralı telefonu gönderin. Temsilci, anlamlı bir cümleyle yanıt verir.

abda9e43b81fb0ea.png

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

Kavramları inceleme

Dialogflow CX webhook

İş mantığını barındıran veya diğer hizmetleri çağıran hizmet. Dialogflow CX oturumu sırasında webhook'lar, dinamik yanıtlar oluşturmak, toplanan verileri doğrulamak veya arka uçta işlemleri tetiklemek için doğal dil işleme tarafından ayıklanan verilerden yararlanabilir.

Cloud Functions

Cloud Functions; sunucusuz arka uçlar oluşturmak, gerçek zamanlı veri işleme gerçekleştirmek ve akıllı uygulamalar oluşturmak için idealdir. Temel hazırlık, yönetim, yama veya güncelleme yapılacak bir sunucu yoktur. Otomatik olarak ölçeklendirilir, yüksek düzeyde kullanılabilirdir ve hatadan etkilenmez.

Akışları inceleme

Soruyu yanıtla (güncelleme)

92767c07c7b252aa.png

Kaynak kodunu inceleme

İhtiyacınız olan tek kaynak kodu, temsilci yanıtlarını Google Chat mesajlarına uyarlama işlevidir. 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 konsolunda şu adımları uygulayın:

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

  1. Menü lastik veya > simgesini tıklayın API'ler ve hizmetler > Etkin API'ler ve hizmetleri'ni tıklayın ve API'lerin etkinleştirildiğini onaylayın.

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

Mümkün olduğunda bir Cloud Functions işlevi dağıtmanız ve Dialogflow CX webhook'unu bu işlevi birden fazla kaynakla tetikleyecek şekilde güncellemeniz gerekir.

Birden fazla kaynağı döndürme

Varsayılan olarak, yeni bir veri deposu aracısı yalnızca maksimum bir kaynak döndürür ancak daha fazla kaynak için değişiklik yapabilirsiniz.

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

  1. Google Cloud projenizi seçin.
  2. Bilgi temsilcisini seçin.
  3. Başlangıç sayfası'nı seçin.
  4. Veri depolarını düzenle'yi seçin.
  5. Temsilci 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 Functions işlevini başlatma

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü lastik veya > simgesini tıklayın Cloud Functions.

  1. İşlev oluştur'u tıklayın.
  2. Temel Bilgiler'in altındaki adfunction-1 olarak ayarlayın.
  3. Kimlik Doğrulama altında, 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 başlatma

Dialogflow CX aracısını, yeni dağıtılan işlevi tetikleyen bir webhook kullanacak şekilde yapılandırmanız gerekir.

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

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

5f3c6804d52b87c1.png

  1. Build (Derle) seçeneğini tıklayın.
  2. Başlangıç sayfası'nı seçin.
  3. Veri depolarını düzenle'yi seçin.
  4. Webhook ayarları altında Webhook'u etkinleştir açma/kapatma düğmesini tıklayın.
  5. Webhook için Google Chat Yanıt Bağdaştırıcısı'nı seçin.
  6. tag değerini arbitrary_tag olarak ayarlayın.
  7. Kaydet'i tıklayın.

442fcaaec9b8f2e3.png

Test uygulaması

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

9468866bfe848bb8.png

10. Uygulama 3: Derleme

Kavramları inceleme

Diyaloğa dayalı etkileşimler

Doğal dil aracılığıyla iki veya daha fazla kişi arasında birbirlerinin bilgi veya fikir alışverişinde bulunmaktır. Bu, genellikle durum bilgisiz, yüksek düzeyde yapılandırılmış ve hoşgörüsüz alışverişlere dayanan teknik arayüzlerle zıtlık oluşturur.

OpenAPI Spesifikasyonu

API yaşam döngüsünün her aşamasında bilgi taşımak için tutarlı bir yöntem sunar. Yapı ve söz dizimini, API'nin oluşturulduğu programlama diline bağlı olmayan bir şekilde tanımlayan, HTTP API'lerine yönelik bir spesifikasyon dilidir. API spesifikasyonları genellikle YAML veya JSON biçiminde yazılarak spesifikasyonun kolayca paylaşılıp tüketilmesine olanak tanır.

Dialogflow CX aracısı

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

Dialogflow CX aracı

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

İnceleme mimarisi

9d3342d12f3b4dda.png

Bu Google Chat uygulaması, Dialogflow CX ile geliştirilmiştir ve şu şekilde çalışır:

  1. Kullanıcı, uygulamaya doğrudan mesaj veya bir alan üzerinden mesaj gönderir.
  2. Bir Google Cloud projesiyle ilişkilendirilmiş olan ve Dialogflow CX aracısı olan uygulama, mesajı işler.
  3. Uygulama bir aracı ile entegre olur.
  4. Uygulama, doğrudan mesajda 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 eden işlevdir.

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 modelini başlatma

Dialogflow CX aracı uygulamasının entegre edip araç olarak çağırması gereken bir arka uç hizmetini simüle etmek için bir Cloud Functions işlevi dağıtabilirsiniz.

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü lastik veya > simgesini tıklayın Cloud Functions.

  1. Create function'ı (İşlev oluştur) tıklayın.
  2. Temel Bilgiler'in altındaki adfunction-2 olarak ayarlayın.
  3. Kimlik Doğrulama altında, 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ı uygulaması oluşturma

Uygulama oluşturma

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü lastik veya > simgesini tıklayın Temsilci oluşturucu > Uygulamalar'a gidin.

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

7ef3dbacee96c5aa.png

Aracı başlatın

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü lastik veya > simgesini tıklayın Temsilci oluşturucu > Uygulamalar'a gidin.

  1. Geri Bildirim Uygulaması aracısını seçin.
  2. Araçlar > + Oluştur'u tıklayın.
  3. Adreview olarak ayarlayın.
  4. OpenAPI'yi seçin.
  5. description öğesini şu değere 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ındaki $URL değerini indirin ve daha önce kopyaladığınız URL ile değiştirin.
  2. YAML Schema öğesini, 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şlat

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü lastik veya > simgesini tıklayın Temsilci oluşturucu > Uygulamalar'a gidin.

  1. Geri Bildirim Uygulaması aracısını seçin.
  2. Agents > (Temsilciler) > Varsayılan Üretken Aracı.
  3. Temsilci adı'nı Feedback collector olarak ayarlayın.
  4. goal öğesini şu değere 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. Talimatları aşağıdaki değere 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 aşağıdaki adımları uygulayın:

  1. Menü lastik veya > simgesini tıklayın Temsilci oluşturucu > Uygulamalar'a gidin.

  1. Geri Bildirim Uygulaması aracısını seçin.
  2. Aracıyı önizleme'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 aşağıdaki adımları uygulayın:

  1. Menü lastik veya > simgesini tıklayın Cloud Functions.

  1. fonksiyon-2 > Günlükler. Bazı günlüklerde çağrı olarak Google-Dialogflow gösterilir.

48bfdf1788004d18.png

Google Chat uygulamasını entegre edin

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 aşağıdaki adımları uygulayın:

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

  1. Aracı veya Ortam kaynağı adı'nı daha önce kopyaladığınız aracı adına ayarlayın.

df16619a1cb85cf8.png

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

99a7a0295f122f31.png

11. Temizleme

Google Cloud projesini sil

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

Google Cloud Console'da aşağıdaki adımları uygulayın:

  1. Menü lastik veya > simgesini tıklayın IAM ve Yönetici > Ayarlar.

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

407699a4e03afea6.png

Apps Komut Dosyası projesini silin

Apps Komut Dosyası projenizi de silmenizi öneririz.

Apps Komut Dosyası konsolunda aşağıdaki 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! Google Chat uygulamalarını Gemini ile geliştirdiniz.

Sırada ne var?

Bu codelab'de yalnızca basit kullanım alanlarını ele aldık ancak Google Chat uygulamalarınızda göz önünde bulundurabileceğiniz birçok genişletme alanı bulunmaktadır. Örneğin:

  • Gümrükler de dahil olmak üzere diğer üretken yapay zeka modelleriyle entegrasyon.
  • Ses, resim ve video gibi diğer medya türlerini destekleyin.
  • Çok modluluk özelliğini kullanın.
  • Daha uzun bağlam aralıklarına ve geri bildirim döngülerine yer verin.
  • Pazar yerinde üretime hazır Google Chat uygulamaları yayınlayın. Geliştiriciler için YouTube videoları, belge web siteleri, kod örnekleri ve eğiticiler gibi birçok kaynak vardır.
  • Kuruluşunuz için Google Chat'i etkinleştirin. İçe aktarma modu özelliği, başlamayı kolaylaştırır.

Daha fazla bilgi