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

Bu sayfada, Google Chat uygulamanızla doğrudan mesajlaşma için nasıl ana sayfa oluşturacağınız açıklanmaktadır. Google Chat API'sinde uygulama ana sayfası olarak adlandırılan ana sayfa, bir kullanıcı ile Chat uygulaması arasındaki doğrudan mesajlaşma alanlarının Ana Sayfa sekmesinde görünen, özelleştirilebilir bir kart arayüzüdür. Chat uygulamanızı Google Workspace eklentisi olarak oluşturursanız Chat için ana sayfa yapılandırma başlıklı makaleyi inceleyin.

İki widget'ın bulunduğu uygulama ana ekranı kartı.
Şekil 1: Chat uygulamasıyla gönderilen doğrudan mesajlarda görünen bir ana sayfa örneği.

Uygulama ana sayfasını kullanarak Chat uygulamasıyla etkileşim kurma ipuçları paylaşabilir veya kullanıcıların Chat'ten harici bir hizmete ya da araca erişip bunları kullanmasına izin verebilirsiniz.


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çın

Ön koşullar

Node.js

Etkileşim etkinliklerini alan ve yanıtlayan bir Google Chat uygulaması. HTTP hizmeti kullanarak etkileşimli bir Chat uygulaması oluşturmak için bu hızlı başlangıç kılavuzunu tamamlayın.

Python

Etkileşim etkinliklerini alan ve yanıtlayan bir Google Chat uygulaması. HTTP hizmeti kullanarak etkileşimli bir Chat uygulaması oluşturmak için bu hızlı başlangıç kılavuzunu tamamlayın.

Java

Etkileşim etkinliklerini alan ve yanıtlayan bir Google Chat uygulaması. HTTP hizmeti kullanarak etkileşimli bir Chat uygulaması oluşturmak için bu hızlı başlangıç kılavuzunu tamamlayın.

Apps Komut Dosyası

Etkileşim etkinliklerini alan ve yanıtlayan 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 sayfası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ıyla doğrudan mesajlaşırken Ana Sayfa sekmesini 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 konsolunda Menü > API'ler ve Hizmetler > Etkin API'ler ve Hizmetler > Google Chat API > Yapılandırma'yı tıklayın. Chat API yapılandırmasına gitme
  2. Etkileşimli özellikler bölümündeki İşlevsellik bölümüne gidin ve Uygulama ana sayfasını destekle'yi seçin.
  3. Sohbet 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.
  4. Kaydet'i tıklayın.

Uygulama ana sayfası kartı oluşturma

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

Aşağıdaki örnekte, Chat uygulaması, kartın oluşturulma zamanını ve bir düğmeyi gösteren bir ilk uygulama ana sayfası kartı görüntülüyor. Kullanıcı düğmeyi tıkladığında Chat uygulaması, güncellenen kartın oluşturulma zamanını 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, card JSON 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 sayfası etkileşimlerine yanıt verme

İlk uygulama ana sayfası kartınızda düğmeler veya seçim girişleri gibi etkileşimli widget'lar varsa Chat uygulamanız, updateCard gezinme ile 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.

Önceki örnekte, ilk uygulama ana sayfası kartında bir düğme vardı. Kullanıcı düğmeyi her tıkladığında, aşağıdaki kodda gösterildiği gibi CARD_CLICKED etkileşim etkinliği, uygulama ana sayfa 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, card JSON 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ını açma

Chat uygulamanız, iletişim kutularını açarak uygulama ana sayfasındaki etkileşimlere de yanıt verebilir.

Çeşitli widget'ların yer aldığı bir iletişim kutusu.
Şekil 3: Kullanıcıyı kişi eklemeye yönlendiren iletişim kutusu.

Uygulama ana sayfasından bir iletişim kutusu açmak için Card nesnesi içeren updateCard gezinme ile renderActions döndürerek ilgili etkileşim etkinliğini işleyin. Aşağıdaki örnekte, bir Chat uygulaması, CARD_CLICKED etkileşim etkinliğini işleyerek ve bir iletişim kutusu açarak uygulama ana sayfası kartındaki bir düğme tıklaması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 Sohbet uygulamasının ilk uygulama ana kartına döner.
  • CLOSE_DIALOG_AND_EXECUTE: İletişim kutusunu kapatır ve uygulamanın ana kartını yeniler.

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

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

Kullanıcılardan bilgi toplamak için sıralı diyaloglar da oluşturabilirsiniz. Sıralı iletişim kutuları oluşturma hakkında bilgi edinmek için İletişim kutularını açma ve yanıtlama başlıklı makaleyi inceleyin.