Bu sayfada, Chat uygulamanızın iletişim kutularını nasıl açabileceği açıklanmaktadır yanıt verebilmeniz için kritik öneme sahiptir.
İletişim kutuları pencereli, kart tabanlı arayüzlerdir Chat alanından veya mesajından açılan bir pencere açar. Diyalog ve içeriği yalnızca açan kullanıcıya görünür.
Chat uygulamaları, kullanıcılardan bilgi istemek ve toplamak için iletişim kutularını kullanabilir Çok adımlı formlar da dahil olmak üzere Chat kullanıcıları. Ayrıntılı bilgi için Kullanıcılardan bilgi toplama ve işleme başlıklı makaleye göz atın.
Ön koşullar
Node.js
- Etkileşimli özellikler için etkinleştirilmiş bir Google Chat uygulaması. Bir HTTP hizmeti kullanarak etkileşimli Chat uygulaması için bu hızlı başlangıç kılavuzunu tamamlayın.
Python
- Etkileşimli özellikler için etkinleştirilmiş bir Google Chat uygulaması. Bir HTTP hizmeti kullanarak etkileşimli Chat uygulaması 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ı. Bir Apps Komut Dosyası'ndaki etkileşimli Chat uygulaması için bu hızlı başlangıç kılavuzunu tamamlayın.
İletişim kutusu aç
Bu bölümde, aşağıdakileri yaparak nasıl yanıt vereceğiniz ve iletişim kutusu nasıl oluşturacağınız açıklanmaktadır:
- İletişim kutusu isteğini kullanıcı etkileşiminden tetikler.
- Geri dönüp bir iletişim kutusu açarak isteği yerine getirin.
- Kullanıcılar bilgileri gönderdikten sonra olabilir veya başka bir iletişim kutusu döndürebilir.
İletişim kutusu isteği tetikleme
Chat uygulamaları yalnızca bir kullanıcıya yanıt vermek için iletişim kutusu açabilir eğik çizgi komutu veya karttaki bir mesajdan düğme tıklaması gibi etkileşim sağlar.
Kullanıcılara iletişim kutusuyla yanıt vermek için Chat uygulamasının aşağıdaki gibi bir iletişim kutusu isteğini tetikleyen bir etkileşim oluşturun:
- Eğik çizgi komutuna yanıt verin. İsteği eğik çizgi komutuyla tetiklemek için komutu yapılandırırken İletişim kutusu açar onay kutusunu işaretlemeniz gerekir.
- Bir tablodaki düğme
message?
bir kartın parçası olarak veya iletinin altında. Tetiklemek için
bir istek için gönderdiğiniz e-posta adresini
düğmenin
onClick
interaction
değeriniOPEN_DIALOG
olarak ayarlayarak ilgili işlemi uygulayın. - Chat uygulamasının ana sayfasında düğme tıklamasına yanıt verin. Ana sayfalarda iletişim kutularını açma hakkında bilgi edinmek için bkz. Google Chat uygulamanız için bir ana sayfa oluşturun.
Aşağıdaki JSON,
kart mesajı. İletişim kutusunu açmak için
button.interaction
alanı OPEN_DIALOG
değerine ayarlanırsa:
{
"buttonList": { "buttons": [{
"text": "BUTTON_TEXT",
"onClick": { "action": {
"function": "FUNCTION_NAME",
"interaction": "OPEN_DIALOG"
}}
}]}
}
Burada BUTTON_TEXT, düğmede gösterilen metindir FUNCTION_NAME ise ilk açılış sayfasını açmak için çalışan iletişim kutusu.
İlk iletişim kutusunu aç
Bir kullanıcı iletişim kutusu isteğini tetiklediğinde Chat uygulamanız
Kullanıcı bir etkileşim etkinliği aldığında,
event
Chat API'ye gidin. Etkileşim bir iletişim kutusu isteğini tetiklerse etkinlik
dialogEventType
alanı REQUEST_DIALOG
olarak ayarlanmış.
Bir iletişim kutusunu açmak için Chat uygulamanız
bir
actionResponse
type
öğesinin DIALOG
olarak ayarlandığı ve
Message
nesnesini tanımlayın. İletişim kutusunun içeriğini belirtmek için aşağıdakileri ekleyin:
nesneler:
actionResponse
type
değeriDIALOG
olarak ayarlanmış bir nesne olacaktır.dialogAction
nesnesini tanımlayın.body
alanı, şununla aynı olacak kullanıcı arayüzü öğelerini içerir: kartta, bir veya daha fazla Widget'lardansections
tanesi. Kullanıcılardan bilgi toplamak için form girişi widget'ları belirtebilir ve bir düğme widget'ı. Form girişleri tasarlama hakkında daha fazla bilgi edinmek için Kullanıcılardan bilgi toplayın ve bu bilgileri işleyin.
Aşağıdaki JSON, bir Chat uygulamasının nasıl döndüğünü gösterir iletişim kutusu açan bir yanıt:
{ "actionResponse": {
"type": "DIALOG",
"dialogAction": { "dialog": { "body": { "sections": [{
"widgets": [{
WIDGETS,
{ "buttonList": { "buttons": [{
"text": "BUTTON_TEXT",
"onClick": {
"action": {"function": "FUNCTION_NAME"}
}
}]}}
}]
}]}}}
}}
Burada BUTTON_TEXT, düğmede gösterilen metindir (örneğin,
Next
veya Submit
), WIDGETS bir veya daha fazlasını temsil eder
form giriş widget'ları ve
FUNCTION_NAME, kullanıcılar bir düğmeyi tıkladığında çalışan işlevdir.
İletişim kutusu gönderimini işleme
Kullanıcılar iletişim kutusu gönderen bir düğmeyi tıkladığında
Chat uygulamasının almaları
CARD_CLICKED
etkileşimi
dialogEventType
bulunan etkinlik
SUBMIT_DIALOG
.
Chat uygulamanız, etkileşim etkinliğini şu tarihe kadar işlemelidir: aşağıdakilerden birini yapabilirsiniz:
- Başka bir kartı doldurmak için başka bir iletişim kutusu döndür veya formu doldur.
- Kullanıcının gönderdiği verileri doğruladıktan sonra iletişim kutusunu kapatın ve isterseniz onay mesajı gönderebilirsiniz.
İsteğe bağlı: Başka bir iletişim kutusu döndürme
Kullanıcılar ilk iletişim kutusunu gönderdikten sonra Chat uygulamaları kullanıcıların bilgileri gözden geçirmesine yardımcı olmak için bir veya daha fazla iletişim kutusu döndürerek çok adımlı formları doldurabilir veya form içeriğini dinamik olarak doldurabilirsiniz.
Kullanıcıların ilk iletişim kutusundan girdiği verileri yüklemek için
parametrelerini sonraki iletişim kutusunu açan düğmeye veya orijinal
İlk iletişimdeki CARD_CLICKED
etkileşim etkinliği. Ayrıntılar için bkz.
Verileri başka bir karta aktarın.
Bu örnekte, bir Chat uygulaması
göndermeden önce ikinci bir iletişim kutusu döndürür. Giriş verilerini yüklemek için
Chat uygulaması, CARD_CLICKED
etkileşim etkinliğini geçer
aşağıdaki iletişim kutusunu açan işlevin parametresi olarak kullanabilirsiniz:
Node.js
// Respond to button clicks on attached cards
if (event.type === "CARD_CLICKED") {
// Open the first dialog.
if (event.common.invokedFunction === "openDialog") {
openDialog(event);
}
// Open the second dialog.
if (event.common.invokedFunction === "openNextDialog") {
openNextDialog(event);
}
}
/**
* Opens and starts a dialog that lets users add details about a contact.
*
* @param {object} event the event object from Google Chat.
*
* @return {object} open a dialog.
*/
function openDialog(event) {
res.json({ "actionResponse": {
"type": "DIALOG",
"dialogAction": { "dialog": { "body": { "sections": [{ "widgets": [
WIDGETS,
{ "buttonList": { "buttons": [{
"text": "Next",
"onClick": { "action": {
"function": "openNextDialog"
}}
}]}}
]}]}}}
}});
};
/**
* Opens a second dialog that lets users add more contact details.
*
* @param {object} event the event object from Google Chat.
*
* @return {object} open a dialog.
*/
function openNextDialog(event) {
res.json({ "actionResponse": {
"type": "DIALOG",
"dialogAction": { "dialog": { "body": { "sections": [{ "widgets": [
WIDGETS,
{
"horizontalAlignment": "END",
"buttonList": { "buttons": [{
"text": "Submit",
"onClick": { "action": {
"function": "submitDialog"
}}
}]}
}
]}]}}}
}});
}
Python
from typing import Any, Mapping
import flask
import functions_framework
@functions_framework.http
def main(req: flask.Request) -> Mapping[str, Any]:
"""Responds to a MESSAGE event in Google Chat that includes the /createContact
slash command by opening a dialog.
Args:
req (flask.Request): the event object from Chat API.
Returns:
Mapping[str, Any]: open a Dialog in response to a card's button click.
"""
if req.method == 'GET':
return 'Sorry, this function must be called from a Google Chat.'
request = req.get_json(silent=True)
if request.get('type') == 'CARD_CLICKED':
if invoked_function := request.get('common', dict()).get('invokedFunction'):
if invoked_function == 'open_dialog':
return open_dialog(request)
elif invoked_function == 'open_next_dialog':
return open_dialog(request)
def open_dialog(request: Mapping[str, Any]) -> Mapping[str, Any]:
"""Opens a dialog in Google Chat.
Args:
request (Mapping[str, Any]): the event object from Chat API.
Returns:
Mapping[str, Any]: open a Dialog in response to a card's button click.
"""
return { "actionResponse": {
"type": "DIALOG",
"dialogAction": { "dialog": { "body": { "sections": [{ "widgets": [
WIDGETS,
{ "buttonList": { "buttons": [{
"text": "Next",
"onClick": { "action": {
"function": "open_next_dialog"
}}
}]}}
]}]}}}
}}
def open_next_dialog(request: Mapping[str, Any]) -> Mapping[str, Any]:
"""Opens a second dialog that lets users add more contact details.
Args:
request (Mapping[str, Any]): the event object from Chat API.
Returns:
Mapping[str, Any]: open a Dialog in response to a card's button click.
"""
return { "actionResponse": {
"type": "DIALOG",
"dialogAction": { "dialog": { "body": { "sections": [{ "widgets": [
WIDGETS,
{
"horizontalAlignment": "END",
"buttonList": { "buttons": [{
"text": "Submit",
"onClick": { "action": {
"function": "submit_dialog"
}}
}]}
}
]}]}}}
}}
Apps Komut Dosyası
Bu örnekte, kart JSON'a ekleyin. Ayrıca şunu da kullanabilirsiniz: Apps Komut Dosyası kart hizmeti.
/**
* Responds to a CARD_CLICKED event in Google Chat.
*
* @param {Object} event the event object from Google Chat
*/
function onCardClick(event) {
// When a user clicks a card, the Chat app checks to see which function to run.
if (event.common.invokedFunction === "openDialog") {
return openDialog(event);
}
if (event.common.invokedFunction === "openNextDialog") {
return openNextDialog(event);
}
}
/**
* Opens and starts a dialog that lets users add details about a contact.
*
* @param {object} event the event object from Google Chat.
*
* @return {object} open a dialog.
*/
function openDialog(event) {
return { "actionResponse": {
"type": "DIALOG",
"dialogAction": { "dialog": { "body": { "sections": [{ "widgets": [
WIDGETS,
{ "buttonList": { "buttons": [{
"text": "Next",
"onClick": { "action": {
"function": "openNextDialog"
}}
}]}}
]}]}}}
}};
}
/**
* Opens a second dialog that lets users add more contact details.
*
* @param {object} event the event object from Google Chat.
*
* @return {object} open a dialog.
*/
function openNextDialog(event) {
return { "actionResponse": {
"type": "DIALOG",
"dialogAction": { "dialog": { "body": { "sections": [{ "widgets": [
WIDGETS,
{
"horizontalAlignment": "END",
"buttonList": { "buttons": [{
"text": "Submit",
"onClick": { "action": {
"function": "submitDialog"
}}
}]}
}
]}]}}}
}};
}
Burada WIDGETS, bir veya daha fazlasını temsil eder form giriş widget'ları.
İletişim kutusunu kapat
Kullanıcılar iletişim kutusundaki bir düğmeyi tıkladığında Chat uygulaması şu bilgileri bulabilirsiniz:
eventType
CARD_CLICKED
.dialogEventType
SUBMIT_DIALOG
.common.formInputs
kullanıcıların widget'ları kullanarak girdiği verileri içerir.
Aşağıdaki bölümlerde, kullanıcıların girdiği verilerin nasıl doğrulanacağı ve iletişim kutusunu kapatın.
Kullanıcı giriş verilerini doğrula ve iletişim kutusunu kapat
Chat uygulaması, kullanıcıların girdiği verileri işlemek için
,
event.common.formInputs
nesnesini tanımlayın. Giriş widget'larından değer alma hakkında daha fazla bilgi edinmek için bkz.
Kullanıcılardan bilgi toplayın ve bu bilgileri işleyin.
Kullanıcı zorunlu bir alanı atlar veya yanlış değerler girerse
Chat uygulaması bir hata ile yanıt verebilir. Bunun için bir
ActionResponse
"actionStatus": "ERROR MESSAGE"
var.
Aşağıdaki örnek, kullanıcının bir widget için şu değeri girip girmediğini kontrol eder:
textInput
widget'ı gibi dizeleri (stringInputs
) kabul eder. Yoksa
Chat uygulaması hata döndürüyor. Varsa
Chat uygulaması, diyalog gönderimini onaylar ve
iletişim kutusunu kapatır:
Node.js
/**
* Checks for a form input error, the absence of
* a "name" value, and returns an error if absent.
* Otherwise, confirms successful receipt of a dialog.
*
* Confirms successful receipt of a dialog.
*
* @param {Object} event the event object from Chat API.
*
* @return {Object} open a Dialog in Google Chat.
*/
function submitDialog(event) {
// Checks to make sure the user entered a value
// in a dialog. If no value detected, returns
// an error message. Any "actionStatus" value other than "OK"
// gets returned as an error.
if (event.common.formInputs.WIDGET_NAME.stringInputs.value[0] === "") {
res.json({
"actionResponse": {
"type": "DIALOG",
"dialogAction": {
"actionStatus": "ERROR_MESSAGE"
}
}
});
// Otherwise the Chat app indicates that it received
// form data from the dialog. An "actionStatus" of "OK" is
// interpreted as code 200, and the dialog closes.
} else {
res.json({
"actionResponse": {
"type": "DIALOG",
"dialogAction": {
"actionStatus": "OK"
}
}
});
}
}
Python
def receive_dialog(event: Mapping[str, Any]) -> Mapping[str, Any]:
"""Checks for a form input error, the absence of a "name" value, and returns
an error if absent. Otherwise, confirms successful receipt of a dialog.
Args:
event (Mapping[str, Any]): the event object from Chat API.
Returns:
Mapping[str, Any]: the response.
"""
if common := event.get('common'):
if form_inputs := common.get('formInputs'):
if contact_name := form_inputs.get('WIDGET_NAME'):
if string_inputs := contact_name.get('stringInputs'):
if name := string_inputs.get('value')[0]:
return {
'actionResponse': {
'type': 'DIALOG',
'dialogAction': {
'actionStatus': 'OK'
}
}
}
else:
return {
'actionResponse': {
'type': 'DIALOG',
'dialogAction': {
'actionStatus': 'ERROR_MESSAGE'
}
}
}
Apps Komut Dosyası
Bu örnekte, kart JSON'a ekleyin. Ayrıca şunu da kullanabilirsiniz: Apps Komut Dosyası kart hizmeti.
/**
* Checks for a form input error, the absence of
* a "name" value, and returns an error if absent.
* Otherwise, confirms successful receipt of a dialog.
*
* Confirms successful receipt of a dialog.
*
* @param {Object} event the event object from Chat API.
*
* @return {object} open a Dialog in Google Chat.
*/
function submitDialog(event) {
// Checks to make sure the user entered a value
// in a dialog. If no value detected, returns
// an error message. Any "actionStatus" value other than "OK"
// gets returned as an error.
if (event.common.formInputs.WIDGET_NAME[""].stringInputs.value[0] === "") {
return {
"actionResponse": {
"type": "DIALOG",
"dialogAction": {
"actionStatus": "ERROR_MESSAGE"
}
}
};
// Otherwise the Chat app indicates that it received
// form data from the dialog. An "actionStatus" of "OK" is
// interpreted as code 200, and the dialog closes.
} else {
return {
"actionResponse": {
"type": "DIALOG",
"dialogAction": {
"actionStatus": "OK"
}
}
};
}
}
Bu örnekte WIDGET_NAME, name
widget'ı (contactName
gibi) ve ERROR_MESSAGE etiketi
içeriği (Don't forget to name your contact
gibi) sağlar.
Widget'lardan giriş verilerini işlemeyle ilgili ayrıntılar için bkz.
Etkileşimli widget'lardan veri alma.
İsteğe bağlı: Onay mesajı gönderme
İletişim kutusunu kapattığınızda yeni bir mesaj da gönderebilir veya kullanabilirsiniz.
Yeni bir mesaj göndermek için
ActionResponse
type
öğesinin NEW_MESSAGE
değerine ayarlandığı bir nesnedir. Örneğin, iletişim kutusunu kapatmak için
ve bir kısa mesaj gönderdiyseniz aşağıdakileri döndür:
{
"actionResponse": {
"type": "NEW_MESSAGE",
},
"text": "Your information has been submitted."
}
Bir mesajı güncellemek için şunu içeren actionResponse
nesnesini döndürün:
iletiyi güncelledi ve type
özelliğini aşağıdakilerden birine ayarladı:
UPDATE_MESSAGE
: Şu mesajı günceller: iletişim isteğini tetikledi.UPDATE_USER_MESSAGE_CARDS
: Kartı, bağlantı önizleme.
Sorun giderme
Bir Google Chat uygulaması veya card bir hata döndürürse Chat arayüzünde "Bir sorun oluştu" mesajı gösteriliyor. veya "İsteğiniz işlenemiyor." Chat kullanıcı arayüzü herhangi bir hata mesajı görüntülenmiyor ancak Chat uygulaması veya kart beklenmeyen bir sonuç veriyorsa; Örneğin karttaki bir mesajda görünür.
Chat kullanıcı arayüzünde hata mesajı görüntülenmese de Hataları düzeltmenize yardımcı olmak için açıklayıcı hata mesajları ve günlük verileri sunulur Chat uygulamaları için hata günlük kaydı etkinleştirildiğinde. Görüntüleme konusunda yardım için ve hataları düzeltme ile ilgili daha fazla bilgi edinmek için Google Chat hatalarını giderme ve düzeltme
İlgili konular
- Google Chat uygulamasının ana sayfasından iletişim kutuları açın.
- İletişim kutuları kullanan Chat uygulaması örneklerini görüntüleme
- Önizleme bağlantıları
- Eğik çizgi komutlarını ayarlama ve bu komutları yanıtlama
- Kullanıcıların girdiği işlem bilgileri