1. Genel Bakış
Actions on Google, Google'ın sanal kişisel asistanı Google Asistan'ın işlevlerini akıllı hoparlörler, telefonlar, arabalar, TV'ler, kulaklıklar ve diğer 1 milyardan fazla cihazda geliştirmenizi sağlayan bir geliştirici platformudur. Kullanıcılar, market alışverişi veya araç rezervasyonu gibi işlemler için Asistan'ı kullanarak konuşur. (Yapabileceklerinizin tam listesi için İşlemler dizinine göz atın.) Geliştirici olarak, kullanıcılar ile üçüncü taraf hizmetiniz arasındaki keyifli ve etkili sohbet deneyimlerini kolayca oluşturmak ve yönetmek için Actions on Google'ı kullanabilirsiniz.
Bu, Google Asistan için İşlemler oluşturma konusunda belirli bir deneyime sahip okuyuculara yönelik gelişmiş bir codelab modülüdür. Actions on Google'da daha önce uygulama geliştirme deneyiminiz yoksa tanıtım amaçlı codelab'lerimizi ( 1. Seviye, Düzey 2 ve 3. Seviye) izleyerek platform hakkında bilgi sahibi olmanızı önemle tavsiye ederiz. Bu gelişmiş modüller, Action'ınızın işlevlerini artırmanıza ve kitlenizi büyütmenize yardımcı olabilecek bir dizi özellik konusunda size yol gösterecektir.
Bir İşlemin başarısını ölçmenin önemli bir yöntemi, kullanıcı etkileşimidir veya İşlemin, kullanıcıları ilk etkileşimden sonra geri getirmede ne kadar etkili olduğudur. Bunu kolaylaştırmak için İşleminize, kullanıcıların görüşmenize giden yollarını sağlayan çeşitli özellikler uygulayabilirsiniz.
Codelab, Actions on Google ile ilgili kullanıcı etkileşimi özelliklerini ve en iyi uygulamaları kapsar.
Neler oluşturacaksınız?
Daha önce oluşturulmuş bir özelliği, şu işlemleri gerçekleştirmek için etkinleştirerek geliştirebilirsiniz:
- Kullanıcılara, Action'ınızla konuşmak için dokunabilecekleri günlük bir güncelleme gönderin
- Kullanıcılara İşleminize bağlantı veren push bildirimleri gönderin
- Kullanıcıları bir mobil web tarayıcısından İşleminize yönlendiren bir bağlantı oluşturun
Neler öğreneceksiniz?
- Kullanıcı etkileşimi nedir ve bir İşlemin başarısı için neden önemlidir?
- Kullanıcı etkileşimini artırmak için işlemleri değiştirme
- Farklı Eylem türlerinde hangi kullanıcı etkileşimi özelliklerinin kullanılması gerekir?
- Asistan üzerinden bildirim göndermek için Actions API'yi kullanma
İhtiyacınız olanlar
Aşağıdaki araçlara sahip olmanız gerekir:
- WebStorm, Atom veya Sublime gibi tercih ettiğiniz bir IDE/metin düzenleyici
- Node.js, npm ve git'in yüklü olduğu kabuk komutlarını çalıştırmak için kullanılan bir terminal
- Google Chrome gibi bir web tarayıcısı
- Firebase komut satırı arayüzüyle yerel geliştirme ortamı
- Asistan özellikli bir mobil cihaz (Android veya iOS) (Bu projeyi oluşturmak için kullanacağınız Google Hesabı ile Asistan'da oturum açmış olmanız gerekir.)
Webhook kodunu anlamak için JavaScript (ES6) hakkında bilgi sahibi olmanız da zorunlu olmasa da kesinlikle önerilir.
2. Projenizi oluşturun
Bu bölümde, daha önce oluşturulmuş eksiksiz bir İşleme kullanıcı etkileşimi özelliklerinin nasıl ekleneceği gösterilmektedir.
Örneği anlama
Bu codelab'in örneği, "Aksiyon Salonu" adlı hayali bir spor salonuna yönelik basit bir Action'dır. İşlem, her gün dönüşümlü olarak yayınlanan sınıfların listesi de dahil olmak üzere spor salonu hakkında bilgi sağlıyor. Bunun gibi bilgilendirici bir İşlem, dönüşümlü olarak yayınlanan sınıf listesi her gün farklı ve faydalı bilgiler sağladığından tüm kullanıcı etkileşimi özellikleri için iyi bir adaydır.
Aşağıdaki şemada Action Gym örneğinin konuşma akışı gösterilmektedir:
Eklediğiniz etkileşim özelliklerine daha uygun olması için iletişim kutusunda küçük değişiklikler yapacaksınız. Ancak sohbetin genel tasarımı çok fazla değişmeyecek.
Temel dosyalarınızı indirin
Şu komutu çalıştırarak codelab için GitHub deposunu klonlayın:
git clone https://github.com/actions-on-google/user-engagement-codelab-nodejs
Projenizi ve aracınızı ayarlayın
Actions projenizi ve Dialogflow aracınızı ayarlamak için aşağıdaki adımları uygulayın:
- Actions console'u açın.
- Yeni proje'yi tıklayın.
engagement-codelab
gibi bir Proje adı yazın.- Proje Oluştur'u tıklayın.
- Bir kategori seçmek yerine aşağı kaydırıp Diğer seçenekler bölümüne gidin ve Sohbet kartını tıklayın.
- Seçenekleri genişletmek için İşleminizi Derleyin'i tıklayın ve İşlem Ekle'yi seçin.
- İlk İşleminizi Ekleyin'i tıklayın.
- Create Action (İşlem Oluştur) iletişim kutusunda Custom Intent'i (Özel Niyet) seçin ve ardından Build (Derleme) düğmesini tıklayarak Dialogflow konsolunu başlatın.
- Dialogflow konsolunun aracı oluşturma sayfasında Oluştur'u tıklayın.
- Sol gezinme bölümünde (dişli simgesi) tıklayın.
- Dışa ve İçe Aktar'ı, ardından Zip'ten Geri Yükle'yi tıklayın.
- Daha önce indirdiğiniz
/user-engagement-codelab-nodejs/start/
dizinindenagent.zip
dosyasını yükleyin. RESTORE
yazın ve Geri yükle'yi tıklayın.- Bitti'yi tıklayın.
Sipariş karşılama dağıtımınızı dağıtma
Artık Actions projeniz ve Dialogflow aracınız hazır olduğuna göre, Firebase Functions CLI'ı kullanarak yerel index.js
dosyanızı dağıtın.
Temel dosya klonunuzun /user-engagement-codelab-nodejs/start/functions/
dizininde aşağıdaki komutları çalıştırın:
firebase use <PROJECT_ID>
npm install
firebase deploy
Birkaç dakika sonra "Deploy complete!" (Dağıtma tamamlandı) bildirimini görürsünüz. Bu simge, webhook'unuzu Firebase'e başarıyla dağıttığınızı gösterir.
Dağıtım URL'sini alma
Dialogflow'a bulut işlevinin URL'sini sağlamanız gerekir. Bu URL'yi almak için aşağıdaki adımları izleyin:
- Firebase Konsolu'nu açın.
- Seçenekler listesinden Actions projenizi seçin.
- Geliştir > İşlevler'i seçin. "Veri paylaşım ayarlarını seçin" istemi görüntülenirse Bunu daha sonra yap'ı tıklayarak bu seçeneği yoksayabilirsiniz.
- Kontrol paneli sekmesinde "sipariş karşılama" ile ilgili bir giriş görürsünüz Tetikleyici altında bir URL ile değiştirin. Bu URL'yi kaydedin; sonraki bölümde onu Dialogflow'a kopyalamanız gerekecek.
Dialogflow'da webhook URL'sini ayarlama
Şimdi, istek karşılama için webhook'unuzu kullanmak üzere Dialogflow aracınızı güncellemeniz gerekiyor. Bunu yapmak için şu adımları uygulayın:
- Dialogflow konsolunu açın (isterseniz Firebase konsolunu kapatabilirsiniz).
- Soldaki gezinme bölümünde Sipariş Karşılama'yı tıklayın.
- Webhook'u etkinleştirin.
- Görünmüyorsa Firebase kontrol panelinden kopyaladığınız URL'yi yapıştırın.
- Kaydet'i tıklayın.
Projenizin doğru şekilde ayarlandığını doğrulama
Kullanıcılar Action Gym hakkında bilgi edinmek için İşleminizi çağırabilir. Buna, çalışma saatlerini içeren sabit kodlu bir metin yanıtı ve haftanın her günü için ders programını listeleyen bir metin yanıtı dahildir.
İşleminizi Actions simülatöründe test etmek için:
- Dialogflow konsolunun sol gezinme menüsünden Integrations'ı (Entegrasyonlar) tıklayın > Google Asistan.
- Değişiklikleri otomatik önizleme'nin etkin olduğundan emin olun ve Actions projenizi güncellemek için Test'i tıklayın.
- Actions simülatörü, Actions projenizi yükler. İşleminizi test etmek için Giriş alanına
Talk to my test app
yazıp Enter'a basın. - Action Gym'e hoş geldiniz demek için bir yanıt göreceksiniz. Sohbete devam etmek için istemleri uygulamayı deneyin. Ayrıca, isteklerin her girişte karşılandığından emin olun.
3. Günlük güncelleme abonelikleri ekleyin
Kullanıcılara en faydalı olduğu anda bilgi sunmak, kullanıcıların ilgisini çekmenin yaygın bir yöntemidir. Kullanıcılara amaçların yerine getirilmesi için günlük güncellemelere abone olma seçeneği sunulur. Bu sayede kullanıcılar, söz konusu amacın yerine getirilmesine doğrudan yönlendiren bir Asistan bildirimi gönderebilir.
Bu adımda, günlük güncelleme abonelikleri hakkında bilgi edinecek ve bunları İşleminizin Sınıf Listesi amacına ekleyeceksiniz. Bu talimatları uyguladıktan sonra İşleminizle ilgili görüşme aşağıdaki şemaya benzeyecektir:
Bu, kullanıcıların katılımını nasıl sağlayacak?
Akıllı telefon kullanıcıları, uygulamaya özel bilgiler ve güncellemeler sağlayan push bildirimlerine muhtemelen aşinadır. Güncellemeleri gönderdiğiniz amacın kullanıcıya günlük olarak değer sağlamaya devam etmesi koşuluyla, günlük güncelleme abonelikleri, kullanıcılara Asistan dışında mobil cihazlardan erişmenin kolay bir yoludur.
Günlük güncellemeler yararlı bir etkileşim aracı olabilir ancak her işleme dahil edilmeleri gerekmez. Bir İşleme günlük güncelleme abonelikleri ekleyip eklemeyeceğinize karar verirken şu ipuçlarını göz önünde bulundurun:
- Günlük güncellemelerin kullanıcının her gün farklı, faydalı bilgiler görmesini sağladığından emin olun. Günlük bir güncellemeye dokunulduğunda her seferinde aynı istem gösteriliyorsa kullanıcı birkaç gün sonra büyük olasılıkla e-posta listesinden çıkabilir.
- Kullanıcılar günlük güncellemenizin amacına doğrudan ulaştıysa iletişim kutunuzun kullanıcılarınız için anlamlı olduğundan emin olun. Kullanıcınız görüşmenin başından itibaren başlamayabilir, bu nedenle çok fazla bağlam bilgisine sahip olması beklenmemelidir.
- Günlük güncellemelere abone olmasını istemeden önce kullanıcınıza İşleminizin faydasını gösterin. Kullanıcınız, "Bu içeriği her gün istiyorum" şeklinde düşünmelidir. abonelik seçeneği sunulduğunda.
- Tekrar tekrar abone olma önerileriyle kullanıcıyı bunaltmayın. Kullanıcıya abone olacakları içerikleri gösterdikten hemen sonra günlük güncelleme aboneliği teklif edin ve bu konuda onları başka bir yerde rahatsız etmeyin.
- Güncelleme amacı tetiklendikten sonra görüşmeyi kısa tutun. Çoğu günlük güncelleme yalnızca tek bir yanıttan oluşmalı ve ardından kullanıcı girişi gerektirmeden kapatılmalıdır.
Günlük güncellemeleri aç
Günlük güncelleme abonelikleri, karşılama amacına ekleyebilirsiniz. Bu amaç, kullanıcıyı görüşmenizin başına ya da görüşmenin içindeki bir yere derin bağlantı oluşturmak için daha belirli bir amaca yönlendirir. Diyalog her gün değişeceğinden, kullanıcılara mevcut sınıfların hatırlatılmasını faydalı bulabileceği için, bu codelab'de Sınıf Listesi amacı en mantıklı olanıdır.
Sınıf Listesi amacı için günlük güncellemeleri etkinleştirmek üzere şu adımları uygulayın:
- Actions konsolunda Geliştir sekmesini tıklayın ve soldaki gezinme çubuğunda İşlemler'i seçin.
- İşlemler listesinin altında Sınıf Listesi'ni tıklayın.
- Kullanıcı etkileşimi bölümünde Kullanıcılara günlük güncelleme sunmak ister misiniz? seçeneğini etkinleştirin.
- Günlük güncellemeyi açıklayan açıklayıcı bir İçerik başlığı belirleyin. "Günlük <içerik başlığı>" içeriğinizi saat kaçta göndermemi istersiniz?" olur. Bu nedenle, başlığınızın hem açıklayıcı hem sesli söylendiğinde doğru bir şekilde göründüğünden emin olun. Bu örnekte, İçerik başlığı'nı
list of upcoming Action Gym classes
olarak ayarlayın. - Sayfanın üst kısmındaki Kaydet'i tıklayın.
Dialogflow kurulumu
Günlük güncelleme abonelik akışı için niyet oluşturmak üzere Dialogflow konsolunda şu adımları uygulayın:
Kullanıcıdan abone olmasını isteyin
- Günlük güncellemelere abone olmak isteyen kullanıcıları işleme almak için yeni bir amaç oluşturun. Dialogflow konsolunda yeni bir amaç oluşturmak için sol gezinme bölümünde Amaçlar'ın yanında bulunan + düğmesini tıklayın.
- Bu yeni amacı
Setup Updates
olarak adlandırın. - Eğitim ifadeleri bölümünde aşağıdaki kullanıcı ifadelerini ekleyin:
Send daily reminders
Reminder
Remind me
Updates
Upcoming classes
- Karşılama bölümünde Bu niyet için webhook çağrısını etkinleştir seçeneğini açın.
- Sayfanın üst kısmındaki Kaydet'i tıklayın.
Kullanıcının kararını yerine getirme
- Kullanıcının günlük güncellemeler abonelik istemine vereceği yanıtı işlemek için yeni bir amaç oluşturun. Yeni bir amaç oluşturmak için sol gezinme bölümünde Amaçlar'ın yanında bulunan + düğmesini tıklayın.
- Bu yeni amacı
Confirm Updates
olarak adlandırın. - Etkinlikler bölümünde
actions_intent_REGISTER_UPDATE
değerini ekleyin. Bu Dialogflow etkinliği, kullanıcının abone olup olmamasına bakılmaksızın günlük güncelleme abonelik akışını tamamlamasıyla tetiklenir. - Karşılama bölümünde Bu niyet için webhook çağrısını etkinleştir seçeneğini açın.
- Sayfanın üst kısmındaki Kaydet'i tıklayın.
Sipariş karşılamayı uygulama
İstek karşılamayı webhook'unuza uygulamak için aşağıdaki adımları tamamlayın:
Bağımlılıkları yükleme
index.js
dosyasında require()
işlevini güncelleyerek RegisterUpdate
paketini actions-on-google
paketinden ekleyin. Böylece, içe aktarma işlemleriniz aşağıdaki gibi görünür:
index.js
const {
dialogflow,
Suggestions,
RegisterUpdate,
} = require('actions-on-google');
Öneri çiplerini güncelleme
index.js
dosyasındaki öneri çipi başlıkları listesine DAILY
girişi ekleyin. Böylece Suggestion
tanımınız şu şekilde görünür:
index.js
// Suggestion chip titles
const Suggestion = {
HOURS: 'Ask about hours',
CLASSES: 'Learn about classes',
DAILY: 'Send daily reminders',
};
Yeni amaçlar için karşılama ekleme
Kullanıcı abone olmak istediğini söylediğinde, güncellemenin hedef amacı (Sınıf Listesi) ve türü (DAILY
) ile birlikte RegisterUpdate
yardımcısını çağırarak günlük güncelleme abonelik akışını başlatın. Abonelik akışı bittikten sonra Asistan, aboneliğin başarılı olup olmadığını açıklayan bir status
bağımsız değişkeniyle actions_intent_REGISTER_UPDATE
etkinliğini tetikler. Kullanıcıya abonelik durumuna bağlı olarak değişen takip istemleri sunun.
index.js
dosyasına aşağıdaki kodu ekleyin:
index.js
// Start opt-in flow for daily updates
app.intent('Setup Updates', (conv) => {
conv.ask(new RegisterUpdate({
intent: 'Class List',
frequency: 'DAILY',
}));
});
// Confirm outcome of opt-in for daily updates
app.intent('Confirm Updates', (conv, params, registered) => {
if (registered && registered.status === 'OK') {
conv.ask(`Gotcha, I'll send you an update everyday with the ` +
'list of classes. Can I help you with anything else?');
} else {
conv.ask(` I won't send you daily reminders. Can I help you with anything else?`);
}
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.HOURS, Suggestion.CLASSES]));
}
});
Kullanıcıya alternatif istemler sunma
Sınıf Listesi yanıtınız, sonunda günlük güncelleme aboneliğini sunar ancak bu durum bir soruna işaret eder. Kullanıcı günlük güncelleme bildirimine dokunduğunda aynı yanıt tetikleneceğinden, yeni bildirimden gelmiş olsa bile kullanıcıdan günlük güncellemelere abone olması istenir. Kullanıcıların yeniden abone olmaları gerektiğini düşünmelerini nasıl önleyebilirsiniz?
Neyse ki conv
nesnenizin bağımsız değişkenleri, kullanıcının sohbeti nerede başlattığıyla ilgili bilgiler içeriyor. Kullanıcının, görüşmeyi günlük güncelleme bildiriminden başlattığını belirten bir UPDATES
bölümü içerip içermediğini görmek için conv
bağımsız değişkenlerini kontrol edebilir ve yanıtı buna göre değiştirebilirsiniz. Günlük güncellemeyi kısa tutmaya yönelik en iyi uygulamamız doğrultusunda, sınıfların listesini sağladıktan hemen sonra iletişim kutusunu kapatmak için bu görüşme dalını da kullanabilirsiniz.
index.js
dosyasında aşağıdaki kodu değiştirin:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
const classesMessage =
`On ${day} we offer the following classes: ${classes}. ` +
`Can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.HOURS]));
}
});
şununla yap:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like me to send you daily reminders of upcoming classes, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.HOURS]));
};
};
});
Günlük güncellemelerinizi test edin
Terminalde, güncellenmiş webhook kodunuzu Firebase'e dağıtmak için aşağıdaki komutu çalıştırın:
firebase deploy
Actions simülatöründe özel yeniden isteminizi test etmek için aşağıdaki adımları uygulayın:
- Actions konsolunda Test'e gidin.
- Giriş alanına
Talk to my test app
yazıp Enter'a basın. Learn about classes
yazıp Enter'a basın. İşleminizin yanıtı artık günlük hatırlatıcılar göndermeyi teklif edecek.Send daily reminders
yazıp Enter'a basın.- Güncellemeyi görmek istediğiniz saati yazıp Enter'a basın. Test amacıyla, geçerli saatten 3-5 dakika sonra yanıt vermeyi deneyin.
Mobil cihazınızda, güncellemeler için belirttiğiniz saatte Asistan'dan bir bildirim alırsınız. Bu bildirimin görünmesinin birkaç dakika sürebileceğini unutmayın. Bildirime dokunduğunuzda, bildirim doğrudan Asistan'daki Sınıf Listesi amacına derin bağlantı oluşturarak yaklaşan sınıfların listesini sunar:
4. Push bildirimi ekleme
Kullanıcıları İşleminizin dışında etkileşime geçirmek için başka bir seçenek olarak, kullanıcılara push bildirimleri göndermek üzere Actions API'yi çağırabilirsiniz. Günlük güncellemelerden farklı olarak bu bildirimler Asistan tarafından otomatik olarak planlanmadığından istediğinizde gönderebilirsiniz.
Bu adımda, yeni bir Sınıf İptal Edildi niyeti ekleyerek ve kullanıcılara sınıf iptali konusunda bildirimde bulunan bildirimler göndererek İşleminizde push bildirimlerini nasıl uygulayacağınızı öğreneceksiniz. Ayrıca bildirim göndermek için gereken aşağıdaki üç bileşeni de ayarlamanız gerekir:
- Actions API hesabı: Kullanıcıya bir API'ye
POST
isteği göndererek bildirim gönderirsiniz. Bu nedenle, bu API ile arayüz oluşturmak için bir hizmet hesabı ve kimlik bilgileri ayarlamanız gerekir. - İzin yardımcısı: Push bildirimleri göndermek için gereken kullanıcı kimliğine erişmek üzere kullanıcının iznine ihtiyacınız vardır. Bu örnekte, izin yardımcısını çağırmak ve bu kimliği istemek için bir istemci kitaplığı işlevi kullanacaksınız.
- Depolama: Kullanıcılara görüşmelerin dışında push bildirimleri göndermek için kullanıcı kimliklerini istendiğinde geri getirilebilecek bir yerde depolamanız gerekir. Bu örnekte, her kullanıcının bilgilerini depolamak için bir Firestore veritabanı oluşturacaksınız.
Bu talimatları uyguladıktan sonra, İşleminizin ileti dizisine aşağıdaki iletişim kutusunu ekleyeceksiniz:
Bu, kullanıcıların katılımını nasıl sağlayacak?
Akıllı telefon kullanıcıları, uygulamaya özel bilgiler ve güncellemeler sağlayan push bildirimlerine muhtemelen aşinadır. Push bildirimlerini etkinleştirmek için geçerli bir neden olması koşuluyla, kullanıcılara Asistan'ın dışında mobil cihazlarından erişmek için esnek bir yol kullanabilirsiniz. Günlük güncellemelerle, kullanıcılar günlük olarak bilgilendirileceklerinin zaten farkındadır. Push bildirimleri sayesinde kullanıcılar, ara sıra bildirim almayı tercih edip etmediklerini bilmezler veya gün içinde birden fazla bildirim alırlar.
Push bildirimleri, kullanışlı bir etkileşim aracı olabilir ancak her işleme dahil edilmelidir. Bir İşleme push bildirimleri ekleyip eklemeyeceğinize karar verirken şu ipuçlarını göz önünde bulundurun:
- Push bildirimleriniz için bazı örnek programlar planlayın. Günde yalnızca bir push bildirimi göndermeyi düşünüyorsanız bunun yerine günlük güncellemeleri kullanmayı düşünebilirsiniz.
- Push bildirimlerinizin her alındığında faydalı bilgiler sağladığından emin olun. Bildirimleriniz, İşleminizin amaçlarından birine derin bağlantı da verebilir. Bu nedenle, amacın faydalı ve alakalı olduğundan emin olun.
- Kullanıcılardan push bildirimlerine abone olmalarını isterken açık olun. Her push bildiriminden ne bekleyebileceklerini bilmeleri ve bildirimlerin ne sıklıkta gönderildiği hakkında bilgi sahibi olmaları gerekir.
Actions API'yi etkinleştirme
- Google Cloud Console'u açın ve açılır listeden Actions projenizin adını seçin.
- Gezinme menüsünde (☰) API'ler ve Hizmetler > Kitaplık.
- Actions API'yi arayın ve Etkinleştir'i tıklayın.
Hizmet hesabı oluşturma
Actions API için kimlik doğrulama gerekir. Bu nedenle, istek göndermek için hizmet hesabı oluşturmanız gerekir. Actions API için bir hizmet hesabı anahtarı oluşturmak ve yüklemek üzere şu adımları uygulayın:
- Google Cloud Console'un gezinme menüsünde (☰) API'ler ve Hizmetler > Kimlik Bilgileri.
- Kimlik bilgileri oluştur > Hizmet hesabı anahtarı.
- Hizmet hesabı açılır menüsünden Yeni Hizmet Hesabı'nı seçin.
- Aşağıdaki bilgileri doldurun:
- Hizmet hesabı adı:
service-account
- Rol: Proje > Sahibi
- Hizmet hesabı kimliği:
service-account
(her zaman @<proje_kimliği>.iam.gserviceaccount.com gelir) - Anahtar türü: JSON
- Oluştur'u tıklayın.
- İndirilen JSON dosyasını projenizin /user-engagement-codelab/start/functions/ dizinine taşıyın.
- JSON dosyasının adını
service-account.json
olarak değiştirin.
Firestore'u etkinleştir
Görüşmenin dışında bildirim göndermek için bildirim kodunuzda referans verilebilecek kullanıcı kimliklerini depolamanın bir yolunu bulmanız gerekir. Bu örnekte, abone olan kullanıcıların kullanıcı kimliklerini depolamak için bir Firestore veritabanı kullanıyoruz.
İşleminiz için Firestore veritabanı oluşturmak üzere aşağıdaki adımları uygulayın:
- Firebase konsolunda Actions projenizin adını seçin.
- Sol gezinme menüsünde Geliştir > Veritabanı'nı seçin ve ardından Veritabanı oluştur'u tıklayın.
- Test modunda başlat'ı seçin.
- Etkinleştir'i tıklayın.
Dialogflow kurulumu
Push bildirimlerini etkinleştirme akışını oluşturmak için Dialogflow konsolunda şu adımları uygulayın:
Kullanıcıdan abone olmasını isteyin
- İptal edilen sınıflar için push bildirimlerine abone olmak isteyen kullanıcıları ele almak üzere yeni bir amaç oluşturun. Dialogflow konsolunda yeni bir amaç oluşturmak için sol gezinme bölümünde Amaçlar'ın yanında bulunan + düğmesini tıklayın.
- Bu yeni amacı
Setup Push Notifications
olarak adlandırın. - Eğitim ifadeleri bölümünde aşağıdaki kullanıcı ifadelerini ekleyin:
Subscribe to notifications
Send notification
Notify me
Send class notifications
Cancelled notifications
- Karşılama bölümünde Bu niyet için webhook çağrısını etkinleştir seçeneğini açın.
- Sayfanın üst kısmındaki Kaydet'i tıklayın.
Kullanıcının kararını yerine getirme
- Kullanıcının push bildirimleri abonelik istemine vereceği yanıtı işlemek için yeni bir amaç oluşturun. Yeni bir amaç oluşturmak için sol gezinme bölümünde Amaçlar'ın yanında bulunan + düğmesini tıklayın.
- Bu yeni amacı
Confirm Push Notifications
olarak adlandırın. - Etkinlikler bölümünde
actions_intent_PERMISSION
değerini ekleyin. Bu Dialogflow etkinliği, kullanıcının abone olup olmamasına bakılmaksızın push bildirimleri abonelik akışını tamamlamasıyla tetiklenir. - Karşılama bölümünde Bu niyet için webhook çağrısını etkinleştir seçeneğini açın.
- Sayfanın üst kısmındaki Kaydet'i tıklayın.
Push bildirimini işleme
Push bildirimlerinizi belirli bir amaca bağlayabilirsiniz. Böylece push bildirimine dokunan kullanıcılar İşleminizdeki bu niyetle doğrudan derin bağlantı kurar. Bu örnekte, iptal edilen sınıflarla ilgili ayrıntıları içeren yeni bir push bildirimleri hedefi ekleyin.
Kullanıcının push bildirimine dokunduğunda tetiklenecek bir amaç eklemek için aşağıdaki adımları uygulayın:
- Dialogflow konsolunda yeni bir amaç oluşturmak için sol gezinme bölümünde Amaçlar'ın yanında bulunan + düğmesini tıklayın.
- Bu yeni amacı
Class Canceled
olarak adlandırın. - Eğitim ifadeleri bölümünde kullanıcı ifadesi olarak
Cancelations
'yi ekleyin. - Karşılama bölümünde Bu niyet için webhook çağrısını etkinleştir seçeneğini açın.
- Sayfanın üst kısmındaki Kaydet'i tıklayın.
Görüşmenin ortasında test bildirimleri gönderme
Üretimde, push bildirimleri gönderen işlem karşılama kodunuzdan ayrı bir komut dosyanız olmalıdır. Bu örnek için, İşleminizle konuşurken push bildirimi göndermek için çağırabileceğiniz bir amaç oluşturun. Bu niyet yalnızca hata ayıklama amacıyla kullanılmaktadır; Pratikte push bildirimleri, sipariş karşılama ile ele alınmamalı veya İşlem ile ilgili görüşmenin bir parçası olarak başka bir şekilde tetiklenmemelidir.
Push bildirimlerini test etmek amacıyla niyet oluşturmak için şu adımları uygulayın:
- Test ve hata ayıklama amacıyla abone olan kullanıcılara push bildirimleri göndermenize olanak tanıyan yeni bir intent oluşturun. Dialogflow konsolunda yeni bir amaç oluşturmak için sol gezinme bölümünde Amaçlar'ın yanında bulunan + düğmesini tıklayın.
- Bu yeni amacı
Test Notification
olarak adlandırın. - Eğitim ifadeleri bölümünde kullanıcı ifadesi olarak
Test notification
'yi ekleyin. - Karşılama bölümünde Bu niyet için webhook çağrısını etkinleştir seçeneğini açın.
- Sayfanın üst kısmındaki Kaydet'i tıklayın.
Push bildirimlerini açın
Sınıf İptal Edildi niyeti için push bildirimlerini etkinleştirmek üzere aşağıdaki adımları uygulayın:
- Dialogflow konsolundaki gezinme çubuğunda Integrations'a (Entegrasyonlar) gidin.
- Google Asistan kartında Entegrasyon Ayarları'nı tıklayın.
- Sınıf İptal Edildi'yi Dolaylı çağrı niyeti olarak ekleyin. Bu adım, Dialogflow'un kullanıcıların görüşmenizi Sınıf İptal Edildi amacıyla (bir push bildirimine dokunarak) başlatabileceğini bilmesi için gereklidir.
- Kapat'ı tıklayın.
- Actions konsolunda Geliştir sekmesini tıklayın ve soldaki gezinme çubuğunda İşlemler'i seçin.
- İşlemler listesinin altında Sınıf İptal Edildi seçeneğini tıklayın.
- Kullanıcı etkileşimi bölümünde Push bildirimi göndermek ister misiniz? seçeneğini etkinleştirin.
- Push bildirimini açıklayan açıklayıcı bir İçerik başlığı belirleyin. Bu bağlamda, "<content title> için push bildirimleri gönderebilirsem sorun olur mu?" gibi bir ifade kullanabilirsiniz. Bu nedenle, sesli söylendiğinde başlığınızın hem açıklayıcı hem de sesin doğru olduğundan emin olun. Bu örnekte, İçerik başlığı'nı
class cancelations
olarak ayarlayın. - Sayfanın üst kısmındaki Kaydet'i tıklayın.
Sipariş karşılamayı uygulama
İstek karşılamayı webhook'unuza uygulamak için aşağıdaki adımları tamamlayın:
Bağımlılıkları yükleme
index.js
dosyasında require()
işlevini güncelleyerek UpdatePermission
paketini actions-on-google
paketinden ekleyin. Böylece, içe aktarma işlemleriniz aşağıdaki gibi görünür:
index.js
const {
dialogflow,
Suggestions,
RegisterUpdate,
UpdatePermission,
} = require('actions-on-google');
Öneri çiplerini güncelleme
index.js
dosyasındaki öneri çipi başlıkları listesine NOTIFICATIONS
girişi ekleyin. Böylece Suggestion
tanımınız şu şekilde görünür:
index.js
// Suggestion chip titles
const Suggestion = {
HOURS: 'Ask about hours',
CLASSES: 'Learn about classes',
DAILY: 'Send daily reminders',
NOTIFICATIONS: 'Get notifications',
};
Yeni içe aktarma işlemleri oluşturma
Firestore veritabanınıza bağlanmak için firebase-admin
paketini ve veritabanında depolanan alanlar için sabit değerler ekleyin. Ayrıca, Actions API'ye yapılan kimlik doğrulama işlemlerini ve istekleri işlemek için google-auth-library
ve request
paketlerini içe aktarın.
index.js
dosyasında, içe aktarma işlemlerinize aşağıdaki kodu ekleyin:
index.js
// Firebase admin import
const admin = require('firebase-admin');
// Initialize Firestore
admin.initializeApp();
const db = admin.firestore();
// Firestore constants
const FirestoreNames = {
INTENT: 'intent',
USER_ID: 'userId',
USERS: 'users',
};
// Actions API authentication imports
const {auth} = require('google-auth-library');
const request = require('request');
Sınıf iptal bildirimleri ayarlamayı öner
index.js
dosyasında aşağıdaki kodu değiştirin:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like me to send you daily reminders of upcoming classes, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.HOURS]));
};
};
});
şununla yap:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like to receive daily reminders of upcoming classes, subscribe to notifications about cancelations, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.NOTIFICATIONS,
Suggestion.HOURS]));
};
};
});
Yeni amaçlar için karşılama ekleme
Kullanıcı push bildirimlerine abone olmak istediğini söylediğinde kullanıcıdan izin istemek için UpdatePermission
yardımcısını çağırın. Bu başarılı olursa PERMISSION
bağımsız değişkeni, konuşmayı özetlemek için kontrol edebileceğiniz conv
nesnesinin bağımsız değişkenlerine eklenir.
Kullanıcının iznini aldıktan sonra, conv
nesnesinin bağımsız değişkenlerinden kullanıcı kimliğini alın ve veritabanınıza kaydedin. Bu kullanıcı kimliğini daha sonra Actions API'ye göndereceksiniz. Bu API, Asistan'ın bildirimi kimin alacağını belirlemesini sağlar.
Son olarak, push bildirimine dokunarak tetiklenen Class Canceled
amacına yönelik istek karşılama ekleyin. Bu örnekte yanıtınız bir yer tutucu dizedir. Ancak bu İşlemin üretime hazır bir sürümünde bildirim komut dosyanız, hangi sınıfın iptal edildiği hakkında daha dinamik bilgiler sağlar.
index.js
dosyasına aşağıdaki kodu ekleyin:
index.js
// Call the User Information helper for permission to send push notifications
app.intent('Setup Push Notifications', (conv) => {
conv.ask('Update permission for setting up push notifications');
conv.ask(new UpdatePermission({intent: 'Class Canceled'}));
});
// Handle opt-in or rejection of push notifications
app.intent('Confirm Push Notifications', (conv) => {
if (conv.arguments.get('PERMISSION')) {
let userId = conv.arguments.get('UPDATES_USER_ID');
if (!userId) {
userId = conv.request.conversation.conversationId;
}
// Add the current conversation ID and the notification's
// target intent to the Firestore database.
return db.collection(FirestoreNames.USERS)
.add({
[FirestoreNames.INTENT]: 'Class Canceled',
[FirestoreNames.USER_ID]: userId,
})
.then(() => {
conv.ask(`Great, I'll notify you whenever there's a class cancelation. ` +
'Can I help you with anything else?');
});
} else {
conv.ask(`Okay, I won't send you notifications about class cancelations. ` +
'Can I help you with anything else?');
}
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.CLASSES, Suggestion.HOURS]));
}
});
// Intent triggered by tapping the push notification
app.intent('Class Canceled', (conv) => {
conv.ask('Classname at classtime has been canceled.');
});
Test bildirimleri ekleme
Bir kullanıcıya push bildirimi göndermek için kullanıcı kimliği, bildirimin başlığı ve hedef niyeti içeren Actions API'ye POST
isteği gönderin. Bu örnekte Test Bildirimi niyetinin tetiklenmesi, Firestore veritabanınız üzerinden yinelenir ve bildirimlere abone olan her kullanıcıya push bildirimleri gönderir.
Bu örnekte, webhook isteğinize push bildirimini gönderen kodu dahil ettiğinizi ve görüşmenizde bir test niyeti çağırarak bu kodu tetiklediğinizi unutmayın. Yayınlamak istediğiniz İşlemler'de, push bildirimi kodunuz sipariş karşılama işleminden ayrı bir komut dosyasında bulunmalıdır.
index.js
dosyasına aşağıdaki kodu ekleyin:
index.js
// Debug intent to trigger a test push notification
app.intent('Test Notification', (conv) => {
// Use the Actions API to send a Google Assistant push notification.
let client = auth.fromJSON(require('./service-account.json'));
client.scopes = ['https://www.googleapis.com/auth/actions.fulfillment.conversation'];
let notification = {
userNotification: {
title: 'Test Notification from Action Gym',
},
target: {},
};
client.authorize((err, tokens) => {
if (err) {
throw new Error(`Auth error: ${err}`);
}
// Iterate through Firestore and send push notifications to every user
// who's currently opted in to canceled class notifications.
db.collection(FirestoreNames.USERS)
.where(FirestoreNames.INTENT, '==', 'Class Canceled')
.get()
.then((querySnapshot) => {
querySnapshot.forEach((user) => {
notification.target = {
userId: user.get(FirestoreNames.USER_ID),
intent: user.get(FirestoreNames.INTENT),
};
request.post('https://actions.googleapis.com/v2/conversations:send', {
'auth': {
'bearer': tokens.access_token,
},
'json': true,
'body': {'customPushMessage': notification, 'isInSandbox': true},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ` +
`${httpResponse.statusMessage}`);
console.log(JSON.stringify(body));
});
});
})
.catch((error) => {
throw new Error(`Firestore query error: ${error}`);
});
});
conv.ask('A notification has been sent to all subscribed users.');
});
Push bildirimlerinizi test etme
Terminalde, güncellenmiş webhook kodunuzu Firebase'e dağıtmak için aşağıdaki komutu çalıştırın:
firebase deploy
Actions simülatöründe bildirimleri test etmek için aşağıdaki adımları uygulayın:
- Actions konsolunda Test sekmesine gidin.
- Giriş alanına
Talk to my test app
yazıp Enter'a basın. Learn about classes
yazıp Enter'a basın.Get notifications
yazıp Enter'a basın.- İşleminize push bildirimleri göndermesi için henüz izin vermediyseniz
yes
yazıp Enter tuşuna basın. yes
yazıp Enter'a basın. Google Hesabınızın bu işlem için push bildirimlerine artık abone olması gerekir.
- Çıkmak için
no
yazıp Enter tuşuna basın. - Yeni bir görüşme başlatmak için
Talk to my test app
yazın ve Enter tuşuna basın. Test notification
yazıp Enter'a basın.
Birkaç dakika içinde "Action Gym'den Test Bildirimi" alacaksınız. Mobil cihazınızda Asistan push bildirimi. Bu bildirime dokunduğunuzda, işleminizin Sınıf İptal Edildi amacına derin bağlantı oluşturulur.
5. Asistan bağlantısı oluştur
Şimdiye kadar kullanıcıların İşleminize geri dönmesini sağlamak için uygulayabileceğiniz etkileşim özelliklerinden bahsettik. Ancak bu özelliklerin temeli, kullanıcıların işleminizi keşfedip kullanmalarına bağlıdır.
Mobil cihazlardaki kullanıcıları doğrudan Asistan'daki Action'ınıza bağlayacak bir Asistan bağlantısı oluşturabilirsiniz. Asistan bağlantısı standart bir köprü olduğundan, bir web sitesine veya blog ya da sosyal medya yayını gibi herhangi bir web pazarlama materyaline ekleyebilirsiniz.
Bu adımda Asistan bağlantısının ne olduğunu, İşleminizin karşılama amacı için nasıl bir bağlantı oluşturacağınızı ve test için basit bir web sitesine nasıl ekleyebileceğinizi öğreneceksiniz.
Bu, kullanıcıların katılımını nasıl sağlayacak?
Kullanıcıları İşleminize ilk kez çekmek, özellikle de Asistan'da işleminizi açıkça çağırmaları gerektiğinde zor olabilir. Asistan bağlantısı, kullanıcılara İşleminizle doğrudan bağlantı sunarak bu sorunu azaltır. Asistan özellikli bir cihazda Asistan bağlantınızı takip eden kullanıcılar doğrudan İşleminize yönlendirilir. Bir kullanıcı, bağlantınızı mobil olmayan bir cihazda veya Asistan'ı desteklemeyen başka bir cihazda açtığında, İşlemler dizini girişinize (yayınlandıysa) yönlendirilir. Böylece söz konusu bağlantı, İşleminizi bu kullanıcılara pazarlamaya devam edebilir.
Asistan bağlantıları yararlı bir etkileşim aracı olabilir. Bu nedenle, İşleminizin reklamını web siteniz veya sosyal medya üzerinden yapmayı planlıyorsanız bir tane oluşturmalısınız. Asistan bağlantısı oluşturup dağıtmadan önce aşağıdaki ipuçlarını göz önünde bulundurun:
- Asistan bağlantıları yalnızca İşleminiz yayınlandıktan sonra çalışır. Projeniz taslak durumundayken bağlantı yalnızca kendi cihazlarınızda çalışır. Diğer herkes İşlemler dizinindeki bir 404 sayfasına yönlendirilir.
- İşleminizi alfa veya beta ortamında yayınlayarak, kullanıcıların yayınlamadan önce Asistan bağlantısını test etmesine izin verebilirsiniz. Asistan bağlantınızı yalnızca alfa veya beta sürümünüze katılan kullanıcıların test edebileceğini unutmayın.
- Asistan bağlantınızdaki hedefin yeni kullanıcılarda iyi bir ilk izlenim bıraktığından emin olun. Karşılama amacınız, Asistan bağlantısı için varsayılan hedeftir çünkü işleminizi tanıtmak için zaten iyi bir iş çıkarmış olacaktır.
Asistan bağlantılarını etkinleştirin
Karşılama amacı için Asistan bağlantısı oluşturmak üzere aşağıdaki adımları uygulayın:
- Actions konsolunda Geliştir sekmesini tıklayın ve soldaki gezinme çubuğunda İşlemler'i seçin.
- İşlemler listesinin altında actions.intent.MAIN'i tıklayın.
- Bağlantılar bölümünde Bu İşlem için bir URL'yi etkinleştirmek ister misiniz? seçeneğini etkinleştirin.
- İşleminizi açıklayan açıklayıcı bir Bağlantı başlığı belirleyin. Adınızı, kullanıcının İşleminizle neler başarabileceğini açıklayan basit bir fiil-isim çifti haline getirin. Bu örnekte, Bağlantı başlığı'nı
learn about Action Gym
olarak ayarlayın. - Bu sayfanın alt kısmındaki HTML snippet'ini kopyalayın ve daha sonra kullanmak üzere kaydedin.
- Sayfanın üst kısmındaki Kaydet'i tıklayın.
Test web sitesi dağıtma
Asistan bağlantınızı test etmek için Firebase araçlarını kullanarak sipariş karşılama ile birlikte test web sitesini dağıtabilirsiniz. Bu örnek için basit bir test web sitesi oluşturduk. Yapmanız gereken sadece Asistan bağlantınızı eklemektir.
Sipariş karşılama işleminizin /user-engagement-codelab-nodejs/start/public/
dizinine gidin ve index.html
dosyasını bir metin düzenleyicide açın.
index.html
dosyasında, Asistan bağlantınızın HTML snippet'ini body öğesine yapıştırın. Dosya, aşağıdaki snippet'e benzer şekilde görünecektir:
index.html
<body>
<p>
<a href="https://assistant.google.com/services/invoke/uid/000000efb5f2fd97">🅖 Ask my test app to learn about Action Gym
</a>
</p>
</body>
Asistan bağlantınızı test edin
Terminalde test web sitenizi Firebase'e dağıtmak için aşağıdaki komutu çalıştırın:
firebase deploy
Dağıtma komutunun çalışması tamamlandıktan sonra, çıkıştaki Barındırma URL'sini not edin.
Mobil cihazınızın web tarayıcısında bu URL'ye gittiğinizde test web sitenizde Asistan bağlantısını görürsünüz. Mobil cihazınızda bu bağlantıyı tıkladığınızda İşleminizin Asistan'daki karşılama amacına yönlendirilirsiniz.
İşleminiz yayınlanmadığı için masaüstü tarayıcıda Barındırma URL'si adresine gitmeyi de deneyebilirsiniz. Asistan dizinindeki 404 sayfasına yönlendirilirsiniz.
6. Sonraki adımlar
Tebrikler!
İşlem geliştirirken kullanıcı etkileşiminin önemini, platformda hangi kullanıcı etkileşimi özelliklerinin mevcut olduğunu ve her bir özelliğin bir İşleme nasıl ekleneceğini öğrendiniz.
Ek öğrenme kaynakları
İşleminizle ilgili kullanıcı etkileşimi hakkında daha fazla bilgi edinmek için şu kaynakları inceleyin:
- Kullanıcı etkileşimi ve Asistan dokümanları bağlantıları: Bu codelab'de açıklanan özelliklerle ilgili resmi Actions on Google dokümanları ve genel olarak kullanıcı etkileşimi.
- Kullanıcıları elde tutma analizleri: Actions Console'daki analiz özelliğiyle ilgili olarak, yayınlanan işleminiz için kullanıcıları elde tutmayı gösteren dokümanlar.
- Konuşma tasarımı yönergeleri: Kullanıcı etkileşimi özelliklerinin nasıl tasarlanacağına ilişkin en iyi uygulamalar ve yönergeler.
- Actions on Google GitHub deposu: Örnek kod ve kitaplıklar.
- r/GoogleAssistantDev: Asistan ile çalışan geliştiriciler için resmi Reddit topluluğu.
En son duyurularımızı kaçırmamak için bizi Twitter @ActionsOnGoogle'da takip edin ve çalışmalarınızı paylaşmak için #AoGDevs'e tweet atın.
Geri bildirim anketi
Ayrılmadan önce bizi bilgilendirmek için lütfen bu formu doldurun.