Google Chat uygulaması için ana sayfa oluşturma

Bu sayfada, Google Chat uygulamanızla doğrudan mesajlar için ana sayfa oluşturma hakkında bilgi verilmektedir. Google Chat API'de uygulama ana sayfası olarak adlandırılan ana sayfa, bir kullanıcı ile Chat uygulaması arasındaki doğrudan mesaj alanlarının Ana Sayfa sekmesinde görünen özelleştirilebilir bir kart arayüzüdür.

İki widget içeren uygulama ana kartı.
Şekil 1: Bir Chat uygulamasındaki doğrudan mesajlarda gösterilen bir ana sayfa örneği.

Chat uygulamasıyla etkileşime geçmeyle ilgili ipuçları paylaşmak veya kullanıcıların Chat'ten harici bir hizmete veya araca erişip bu aracı kullanmasına izin vermek için uygulama ana sayfasını kullanabilirsiniz.


Chat uygulamaları için mesajlaşma ve kullanıcı arayüzlerini tasarlamak ve önizlemek üzere Kart Oluşturucu'yu kullanın:

Kart Oluşturucu'yu açma

Ön koşullar

Node.js

Etkileşimli özellikler için etkinleştirilmiş bir Google Chat uygulaması. HTTP hizmetini kullanarak etkileşimli bir Chat uygulaması oluşturmak için bu hızlı başlangıç kılavuzunu tamamlayın.

Python

Etkileşimli özellikler için etkinleştirilmiş bir Google Chat uygulaması. HTTP hizmetini kullanarak etkileşimli bir Chat uygulaması oluşturmak için bu hızlı başlangıç kılavuzunu tamamlayın.

Java

Etkileşimli özellikler için etkinleştirilmiş bir Google Chat uygulaması. HTTP hizmetini kullanarak etkileşimli bir Chat uygulaması oluşturmak için bu hızlı başlangıç kılavuzunu tamamlayın.

Apps Komut Dosyası

Etkileşimli özellikler için etkinleştirilmiş bir Google Chat uygulaması. Apps Komut Dosyası'nda etkileşimli bir Chat uygulaması oluşturmak için bu hızlı başlangıç kılavuzunu tamamlayın.

Chat uygulamanız için uygulama ana ekranını yapılandırma

Uygulama ana sayfasını desteklemek için Chat uygulamanızı APP_HOME etkileşim etkinliklerini alacak şekilde yapılandırmanız gerekir. Chat uygulamanız, bir kullanıcı Chat uygulamasındaki doğrudan mesajdan Ana Sayfa sekmesini her tıkladığında bu etkinliği alır.

Google Cloud Console'da yapılandırma ayarlarınızı güncellemek için aşağıdakileri yapın:

  1. Google Cloud Console'da Menü > Diğer ürünler > Google Workspace > Ürün Kitaplığı > Google Chat API'ye gidin.

    Google Chat API'ye gidin

  2. Yönet'i ve ardından Yapılandırma sekmesini tıklayın.

  3. Uygulama ana sayfasını yapılandırmak için Etkileşimli özellikler altındaki İşlevsellik bölümüne gidin:

    1. Bire bir mesajlar al onay kutusunu işaretleyin.
    2. Destek Uygulaması Ana Sayfası onay kutusunu işaretleyin.
  4. Chat uygulamanız bir HTTP hizmeti kullanıyorsa Bağlantı ayarları'na gidin ve Uygulama Ana Sayfası URL'si alanı için bir uç nokta belirtin. HTTP uç nokta URL'si alanında belirttiğiniz URL'yi kullanabilirsiniz.

  5. Kaydet'i tıklayın.

Uygulama ana ekran kartı oluşturma

Bir kullanıcı uygulama ana sayfasını açtığında Chat uygulamanız, APP_HOME etkileşimi etkinliğini pushCard gezinme ve Card ile bir RenderActions örneği döndürerek işlemelidir. Kart, etkileşimli bir deneyim oluşturmak için Chat uygulamasının işleyip ek kartlarla veya bir iletişim kutusuyla yanıt verebileceği düğmeler veya metin girişleri gibi etkileşimli widget'lar içerebilir.

Aşağıdaki örnekte Chat uygulaması, kartın oluşturulduğu zamanı gösteren bir ilk uygulama ana sayfa kartı ve bir düğme gösterir. Kullanıcı düğmeyi tıkladığında Chat uygulaması, güncellenen kartın oluşturulduğu zamanı gösteren güncellenmiş bir kart döndürür.

Node.js

node/app-home/index.js
app.post('/', async (req, res) => {
  let event = req.body.chat;

  let body = {};
  if (event.type === 'APP_HOME') {
    // App home is requested
    body = { action: { navigations: [{
      pushCard: getHomeCard()
    }]}}
  } else if (event.type === 'SUBMIT_FORM') {
    // The update button from app home is clicked
    commonEvent = req.body.commonEventObject;
    if (commonEvent && commonEvent.invokedFunction === 'updateAppHome') {
      body = updateAppHome()
    }
  }

  return res.json(body);
});

// Create the app home card
function getHomeCard() {
  return { sections: [{ widgets: [
    { textParagraph: {
      text: "Here is the app home 🏠 It's " + new Date().toTimeString()
    }},
    { buttonList: { buttons: [{
      text: "Update app home",
      onClick: { action: {
        function: "updateAppHome"
      }}
    }]}}
  ]}]};
}

Python

python/app-home/main.py
@app.route('/', methods=['POST'])
def post() -> Mapping[str, Any]:
  """Handle requests from Google Chat

  Returns:
      Mapping[str, Any]: the response
  """
  event = request.get_json()
  match event['chat'].get('type'):

    case 'APP_HOME':
      # App home is requested
      body = { "action": { "navigations": [{
        "pushCard": get_home_card()
      }]}}

    case 'SUBMIT_FORM':
      # The update button from app home is clicked
      event_object = event.get('commonEventObject')
      if event_object is not None:
        if 'update_app_home' == event_object.get('invokedFunction'):
          body = update_app_home()

    case _:
      # Other response types are not supported
      body = {}

  return json.jsonify(body)


def get_home_card() -> Mapping[str, Any]:
  """Create the app home card

  Returns:
      Mapping[str, Any]: the card
  """
  return { "sections": [{ "widgets": [
    { "textParagraph": {
      "text": "Here is the app home 🏠 It's " +
        datetime.datetime.now().isoformat()
    }},
    { "buttonList": { "buttons": [{
      "text": "Update app home",
      "onClick": { "action": {
        "function": "update_app_home"
      }}
    }]}}
  ]}]}

Java

java/app-home/src/main/java/com/google/chat/app/home/App.java
// Process Google Chat events
@PostMapping("/")
@ResponseBody
public GenericJson onEvent(@RequestBody JsonNode event) throws Exception {
  switch (event.at("/chat/type").asText()) {
    case "APP_HOME":
      // App home is requested
      GenericJson navigation = new GenericJson();
      navigation.set("pushCard", getHomeCard());

      GenericJson action = new GenericJson();
      action.set("navigations", List.of(navigation));

      GenericJson response = new GenericJson();
      response.set("action", action);
      return response;
    case "SUBMIT_FORM":
      // The update button from app home is clicked
      if (event.at("/commonEventObject/invokedFunction").asText().equals("updateAppHome")) {
        return updateAppHome();
      }
  }

  return new GenericJson();
}

// Create the app home card
GoogleAppsCardV1Card getHomeCard() {
  return new GoogleAppsCardV1Card()
    .setSections(List.of(new GoogleAppsCardV1Section()
      .setWidgets(List.of(
        new GoogleAppsCardV1Widget()
          .setTextParagraph(new GoogleAppsCardV1TextParagraph()
            .setText("Here is the app home 🏠 It's " + new Date())),
        new GoogleAppsCardV1Widget()
          .setButtonList(new GoogleAppsCardV1ButtonList().setButtons(List.of(new GoogleAppsCardV1Button()
            .setText("Update app home")
            .setOnClick(new GoogleAppsCardV1OnClick()
              .setAction(new GoogleAppsCardV1Action()
                .setFunction("updateAppHome"))))))))));
}

Apps Komut Dosyası

Tüm APP_HOME etkileşim etkinliklerinden sonra çağrılan onAppHome işlevini uygulayın:

Bu örnek, kart JSON'unu döndürerek kart mesajı gönderir. Apps Komut Dosyası kart hizmetini de kullanabilirsiniz.

apps-script/app-home/app-home.gs
/**
 * Responds to a APP_HOME event in Google Chat.
 */
function onAppHome() {
  return { action: { navigations: [{
    pushCard: getHomeCard()
  }]}};
}

/**
 * Returns the app home card.
 */
function getHomeCard() {
  return { sections: [{ widgets: [
    { textParagraph: {
      text: "Here is the app home 🏠 It's " + new Date().toTimeString()
    }},
    { buttonList: { buttons: [{
      text: "Update app home",
      onClick: { action: {
        function: "updateAppHome"
      }}
    }]}}
  ]}]};
}

Uygulama ana ekranındaki etkileşimlere yanıt verme

İlk uygulama ana kartınız düğme veya seçim girişi gibi etkileşimli widget'lar içeriyorsa Chat uygulamanız, updateCard gezinme özelliğiyle RenderActions örneği döndürerek ilgili etkileşim etkinliklerini işlemelidir. Etkileşimli widget'ları işleme hakkında daha fazla bilgi edinmek için Kullanıcılar tarafından girilen bilgileri işleme başlıklı makaleyi inceleyin.

Yukarıdaki örnekte, ilk uygulama ana kartta bir düğme bulunuyordu. Kullanıcı düğmeyi her tıkladığında, aşağıdaki kodda gösterildiği gibi CARD_CLICKED etkileşim etkinliği, uygulama ana kartını yenilemek için updateAppHome işlevini tetikler:

Node.js

Node/app-home/index.js
// Update the app home
function updateAppHome() {
  return { renderActions: { action: { navigations: [{
    updateCard: getHomeCard()
  }]}}}
};

Python

python/app-home/main.py
def update_app_home() -> Mapping[str, Any]:
  """Update the app home

  Returns:
      Mapping[str, Any]: the update card render action
  """
  return { "renderActions": { "action": { "navigations": [{
    "updateCard": get_home_card()
  }]}}}

Java

java/app-home/src/main/java/com/google/chat/app/home/App.java
// Update the app home
GenericJson updateAppHome() {
  GenericJson navigation = new GenericJson();
  navigation.set("updateCard", getHomeCard());

  GenericJson action = new GenericJson();
  action.set("navigations", List.of(navigation));

  GenericJson renderActions = new GenericJson();
  renderActions.set("action", action);

  GenericJson response = new GenericJson();
  response.set("renderActions", renderActions);
  return response;
}

Apps Komut Dosyası

Bu örnek, kart JSON'unu döndürerek kart mesajı gönderir. Apps Komut Dosyası kart hizmetini de kullanabilirsiniz.

apps-script/app-home/app-home.gs
/**
 * Updates the home app.
 */
function updateAppHome() {
  return { renderActions: { action: { navigations: [{
    updateCard: getHomeCard()
  }]}}};
}

İletişim kutuları aç

Chat uygulamanız, uygulama ana ekranında iletişim kutuları açarak da etkileşimlere yanıt verebilir.

Çeşitli widget'ların gösterildiği bir iletişim kutusu.
Şekil 3: Kullanıcıdan kişi eklemesini isteyen bir iletişim kutusu.

Uygulama ana sayfasından bir iletişim kutusu açmak için Card nesnesi içeren updateCard gezinme öğesiyle renderActions döndürerek ilgili etkileşim etkinliğini işleyin. Aşağıdaki örnekte, bir Chat uygulaması, CARD_CLICKEDetkileşim etkinliğini işleyerek ve bir iletişim kutusu açarak uygulama ana kartındaki bir düğmenin tıklanmasına yanıt veriyor:

{ renderActions: { action: { navigations: [{ updateCard: { sections: [{
  header: "Add new contact",
  widgets: [{ "textInput": {
    label: "Name",
    type: "SINGLE_LINE",
    name: "contactName"
  }}, { textInput: {
    label: "Address",
    type: "MULTIPLE_LINE",
    name: "address"
  }}, { decoratedText: {
    text: "Add to favorites",
    switchControl: {
      controlType: "SWITCH",
      name: "saveFavorite"
    }
  }}, { decoratedText: {
    text: "Merge with existing contacts",
    switchControl: {
      controlType: "SWITCH",
      name: "mergeContact",
      selected: true
    }
  }}, { buttonList: { buttons: [{
    text: "Next",
    onClick: { action: { function: "openSequentialDialog" }}
  }]}}]
}]}}]}}}

Bir iletişim kutusunu kapatmak için aşağıdaki etkileşim etkinliklerini işleyin:

  • CLOSE_DIALOG: İletişim kutusunu kapatır ve Chat uygulamasının ilk uygulama ana sayfasına döner.
  • CLOSE_DIALOG_AND_EXECUTE: İletişim kutusunu kapatır ve uygulama ana kartını yeniler.

Aşağıdaki kod örneğinde, bir iletişim kutusunu kapatmak ve uygulama ana kartına dönmek için CLOSE_DIALOG kullanılmaktadır:

{ renderActions: { action: {
  navigations: [{ endNavigation: { action: "CLOSE_DIALOG" }}]
}}}

Kullanıcılardan bilgi toplamak için sıralı iletişim kutuları da oluşturabilirsiniz. Sıralı iletişim kutularını nasıl oluşturacağınızı öğrenmek için İletişim kutularını açma ve yanıtlama başlıklı makaleyi inceleyin.