1. Giriş
Bu laboratuvarda, Dialogflow'u kullanarak basit bir işlem derleyecek ve bu işlemi Google Asistan'a nasıl entegre edeceğinizi öğreneceksiniz.
Alıştırmalar, bulut geliştiricilerin sıkça takip ettiği adımlara uygun şekilde sıralanmıştır:
- Dialogflow v2 aracısı oluşturma
- Varlık oluşturma
- Amaç oluştur
- GCP Cloud işlevleriyle webhook oluşturma
- İçe aktarma işlemi için bilgi tabanını kullanma ile ilgili SSS
- Chatbot'u test edin
- Google Asistan entegrasyonunu etkinleştirme
Oluşturacağınız nedir?
Women in Voice buluşma grubu için bir Google Asistan uygulaması geliştireceğiz. Bir sonraki buluşmanın ne zaman, makale ve buluşma grubu hakkında ipuçları veya genel sorular sormalıdır. |
Neler öğreneceksiniz?
- Dialogflow v2 ile chatbot oluşturma
- Dialogflow ile doğrusal görüşme oluşturma
- Varlıklardan yararlanma
- Bilgi bankasından nasıl yararlanılır?
- Dialogflow ve GCP işlevleriyle webhook karşılamaları ayarlama
- Actions on Google ile uygulamanızı Google Asistan'a getirme
Ön koşullar
- Dialogflow aracısı oluşturmak için Google Kimliğine / gmail adresine ihtiyacınız olacaktır.
- GCP Cloud Functions'ı kullanımınız için size GCP bulut kredileri sağlarız
- Temsilci verilerini almak için bu herkese açık Google E-Tablosuna erişmeniz gerekir.
- Yeni bir sekmede açın: https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit?usp=sharing
- Temel JavaScript bilgisi gerekli değildir ancak webhook sipariş karşılama kodunu değiştirmek istediğinizde yararlı olabilir.
2. Kurulum
Tarayıcınızda Web Etkinliği'ni etkinleştirme
- http://myaccount.google.com/activitycontrols adresini tıklayın
- Web ve web Uygulama Etkinliği etkinse:
Dialogflow aracısı oluşturma
- https://console.dialogflow.com sayfasını açın.
- Sol çubukta, logonun hemen altında "Yeni Temsilci Oluştur"u seçin. Mevcut aracılarınız varsa önce açılır listeyi tıklayın.
- Bir temsilci adı belirtin:
yourname-wiv
(kendi adınızı kullanın) - Varsayılan dil olarak şu seçeneği belirleyin: İngilizce - en.
- Varsayılan saat dilimi olarak, size en yakın saat dilimini seçin.
- Mega Aracı'yı seçmeyin. (Bu özellik ile "alt" aracılar arasında düzenleme yapabilen bir kapsayıcı aracı oluşturabilirsiniz. Şu an buna ihtiyacımız yok.)
- Oluştur'u tıklayın
Dialogflow'u yapılandırma
- Soldaki menüde, proje adının yanındaki dişli simgesini tıklayın.
- Şu temsilci açıklamasını girin: Voice temsilcisindeki kadınlar
- Beta özellikleri etkinleştirmek için Beta Özellikler'e gidin ve anahtarı kaydırın.
- Günlük Ayarları'na gidin, ardından Dialogflow etkileşimlerini günlüğe kaydetmek ve tüm etkileşimleri Google Cloud Stackdriver'da günlüğe kaydetmek için iki anahtarı da çevirin. Daha sonra işlemimizde hata ayıklamak isteyebileceğimizi düşünerek bu bilgilere daha sonra ihtiyacımız olacak.
- Kaydet'i tıklayın
- Bitti'yi tıklayın
Actions on Google'ı yapılandırma
- Sağ taraftaki panelde Google Asistan'da nasıl çalıştığını görün bölümünde Google Asistan bağlantısını tıklayın.
Şu şekilde açılır: http://console.actions.google.com
NOT: Dialogflow'daki ile aynı Google Hesabı ile giriş yaptığınızdan emin olun.
Actions on Google'ı kullanmaya yeni başladıysanız önce şu formu doldurmanız gerekir:
- Simülatörde** proje adını tıklayarak işleminizi açmayı deneyin.**
- Menü çubuğunda Geliştir'i seçin
Kullanıcının dil ayarını eşleştir seçeneğinin işaretini kaldırın. Metin okuma sentezleyicinin, Asistan'ın varsayılan dili tarafından geçersiz kılınmamasını sağlamak için
- Kaydet'i tıklayın
- Menü çubuğunda Test et'i seçin
- Simülasyon aracının İngilizce olarak ayarlandığından emin olun ve Test uygulamamla konuş'u tıklayın.
İşlem, sizi temel Dialogflow varsayılan niyetiyle karşılar. Diğer bir deyişle, Action on Google ile entegrasyon ayarlandı.
Google Cloud'u yapılandırma
Bu eğitim için faturalandırma hesabı olan bir GCP hesabına ihtiyacınız vardır. Henüz bir hesabınız yoksa aşağıdaki adımları uygulayarak hesap oluşturabilirsiniz.
Normalde faturalandırma hesabı, kredi kartı gibi bir ödeme yöntemi gerektirir. Bu atölyede, atölye kredilerinden yararlanarak bu süreci atlayabiliriz.
- Bu URL'ye gidip giriş yapın
- Tıklayın: Burayı tıklayarak kredilerinize erişin
- Kabul et'i tıklayın. Devam et
Her şey hazır. 25 dolarlık bir faturalandırma hesabı oluşturdunuz. Bu tutar, Cloud Functions'ı uzun süre kullanmak için yeterli bir tutar olmalıdır.
Google Sheets API'yi etkinleştirme
Aracınızın birden fazla statik intent yanıtına ihtiyacı varsa (ör. bir web hizmeti, veritabanı veya E-Tablodan veri getirmek için) web hizmetinizi temsilcinize bağlamak için fulfillment özelliğini kullanmanız gerekir. Web hizmetinizi bağlamak, kullanıcı ifadelerine göre işlemler yapmanıza ve dinamik yanıtlar kullanıcıya geri göndermenize olanak tanır.
Örneğin, bir kullanıcı blog veya kitapla ilgili ipucu almak isterse web hizmetiniz veritabanınızı kontrol ederek kullanıcıya okuyacağı bir makaleyle yanıt verebilir.
Bu eğitimde veritabanı yerine Google E-Tablosu'ndan yararlanacağız. E-tablo güncellendiğinde Google Asistan işlemi de güncellenir. Çok güzel!
- Henüz yapmadıysanız bu Google E-Tablosunu yeni bir tarayıcı sekmesinde açın:
- https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit#gid=1240329448
- ÖNEMLİ: Bu sayfanın bir kopyasını oluşturun. Dosya > Kopya oluştur
- Sayfa kopyalandıktan sonra Paylaş'ı tıklayın.
- Dialogflow Hizmet Hesabı'na düzenleme hakları vermemiz gerekir. Bunu yapmak için Dialogflow > Ayarlar (Dişli çark).
- Google Projesi'ne ilerleyin
- Hizmet hesabı (e-posta) adresini kopyalayın. Şuna benzer bir görünümde olacaktır: dialogflow-<someid>@<my-gcp-project>.iam.gserviceaccount.com
- Bu hizmet hesabını Google E-Tablolar'ın Paylaş pop-up penceresine yapıştırın ve hesaba Düzenleme hakları verin.
- Ardından, şu anda üzerinde çalıştığımız sayfa kimliğini hatırlamamız gerekir.
The Sheets URL will look something like this:
https://docs.google.com/spreadsheets/d/1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o/edit#gid=1240329448
But we are only interested in the Sheet id, which is the part between:
https://docs.google.com/spreadsheets/d/ ve /edit#gid=1240329448 (eğik çizgi olmadan).
So it will look something like this: **1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o**
**Write this Sheet ID down**, or copy it to Notepad. In the Webhook steps we will use this again.
- Başka bir tarayıcı sekmesinde açın; http://console.cloud.google.com. (Daha fazla Google Cloud projeniz varsa yeni Dialogflow projesini etkinleştirin: yourname-wiv). - Arama çubuğunda Google Sheets API ifadesini arayın.
- Bunu tıklayın ve üst kısımdaki Google Sheets API'yi etkinleştir düğmesini tıklayın.
3. Özel Varlıklar
Varlıklar, uygulamanızın veya cihazınızın işlem yaptığı nesnelerdir. Bunu parametreler / değişkenler olarak düşünün. Yaptığımız işlem sırasında şunları soracağız:
"Şu konuyla ilgili bir okuma ipucu almak istiyorum:
chatbot'lar
/ Şu konuyla ilgili bir okuma ipucu almak istiyorum:
ses*"*
Chatbot, Voice veya her ikisi de dahil olmanız fark etmeksizin, bu bilgiler bir web hizmetine isteğimde parametre olarak kullanılacak özel bir varlıktan toplanır.
Dialogflow Varlıkları hakkında daha fazla bilgiyi burada bulabilirsiniz.
Kanal varlığı oluşturma
- Dialogflow Console menü öğesini tıklayın: Entities
- Varlık Oluştur'u tıklayın.
- Varlık adı:
tech
(tümü küçük harf olduğundan emin olun) - Eş anlamlıları içeren seçenekleri belirtin. (Arayüzde sekme tuşuyla gezinebilirsiniz.)
Chatbots - Chatbots, Chat, Web
Voice - Voice, Voicebots, Voice Assistants
Both - Both, All
5**.** Mavi kaydet düğmesinin yanındaki menü düğmesini tıklayarak **Ham Düzenleme** moduna geçin.
- Tüm varlıkları CSV biçiminde de girebileceğinize dikkat edin. Bu özellik, oluşturulması gereken çok sayıda öğe olduğunda işinize yarayabilir.
"Chatbots","Chatbots","Chat","Web"
"Voice","Voice","Voicebots","Voice Assistants"
"Both","Both","All"
- Kaydet'i tıklayın
4. Niyetler
Dialogflow, bir kullanıcının amaçlarını kategorilere ayırmak için intentleri kullanır. Amaçlarda Eğitim İfadeleri bulunur. Bunlar, kullanıcının aracınıza söyleyebileceklerine dair örneklerdir.
Örneğin, bir sonraki etkinliğin ne zaman olduğunu kimin bilmek istediğini öğrenmek isteyen bir kullanıcı şu soruyu sorabilir:
"Bir sonraki buluşma ne zaman?"
Bir kullanıcı, kullanıcı ifadesi olarak adlandırılan bir şey yazdığında veya söylediğinde Dialogflow, kullanıcı ifadesini aracınızdaki en iyi niyetle eşleştirir. Niyet eşleştirme, amaç sınıflandırması olarak da bilinir.
Dialogflow Intent'leri hakkında daha fazla bilgiyi burada bulabilirsiniz.
Varsayılan Karşılama Niyetini Değiştirme
Yeni bir Dialogflow aracısı oluşturduğunuzda iki varsayılan intent otomatik olarak oluşturulur. Varsayılan Karşılama Niyeti, temsilciyle görüşme başlattığınızda ilk gerçekleşen akıştır. Varsayılan Yedek Niyeti, aracı sizi anlayamadığında veya bir niyeti az önce söylediklerinizle eşleştiremediğinde alacağınız akıştır.
- Niyetler > Varsayılan Karşılama Niyeti
Google Asistan'da ise varsayılan Karşılama Niyeti ile otomatik olarak başlar. Bunun nedeni Dialogflow'un Karşılama etkinliğini dinlemesidir. Bununla birlikte, girilen eğitim ifadelerinden birini söyleyerek niyeti de çağırabilirsiniz.
Varsayılan Karşılama Niyeti için karşılama mesajı şöyledir:
Kullanıcı | Temsilci |
"Ok Google, <adınız>-WIV ile konuş" | "Merhaba, ben Anna. Women in Voice'un sanal temsilcisiyim.""Bana buluşmalar, Women in Voice hakkında bilgi veya okumayla ilgili bir ipucu isteyebilirsiniz."Ne öğrenmek istersiniz?" |
- Aşağı kaydırarak Yanıtlar'a gidin.
- Tüm Metin Yanıtları'nı temizle.
- Varsayılan sekmede aşağıdaki 3 yanıtı oluşturun. (Her yeni satır için Yanıt Ekle > Metin veya SSML Yanıtı seçeneğini tıklayın:)
- Merhaba, ben Anna. Women in Voice'un sanal temsilcisiyim.
- Benden buluşmalar, Women in Voice hakkında veya okuma ipuçlarıyla ilgili bilgi isteyebilirsin.
- Neyi öğrenmek istiyorsunuz?
Yapılandırma bu ekran görüntüsüne benzer olmalıdır.
- Önceki çıkış chatbot'lar için kullanılıyor. Sonucu özellikle Google Asistan için biraz değiştirebiliriz. Cümlelerimizde duraklamalar oluşturmak için SSML (Konuşma Sentezi Biçimlendirme Dili) kullanacağız. Google Asistan sekmesini tıklayın.
- Chatbot mesajı yeniden kullanılmayacağı için Varsayılan açma/kapatma düğmesini etkinleştirmeyin.
- Yanıt Ekle > Basit Yanıt
- Aşağıdaki metin sürümünü ekleyin:
Hey there, I'm Anna, the virtual agent of Women in Voice.
You can ask me for information about meetups, Women in Voice or a reading tip. What would you like to know?
- Ardından, Ses çıkışını özelleştir'i tıklayın
- Ayrıca aşağıdaki SSML sürümünü ekleyin:
<speak><p><s>Hey there, I'm Anna, the virtual agent of Women in Voice.</s><s>
You can ask me for information about meetups, Women in Voice or a reading tip.</s></p><break time="500ms"/><p><s>
What would you like to know?</s></p></speak>
Yapılandırma bu ekran görüntüsüne benzer olmalıdır.
- Kaydet'i tıklayın
Burada Actions on Google için SSML hakkında daha fazla bilgi bulabilirsiniz.
- Bu niyeti test edelim. İlk olarak Dialogflow Simülatörü'nde test edebiliriz.
Tür: Merhaba. Bu mesajı döndürmesi gerekir.
- Şimdi Actions on Google konsoluna geri dönün.
(Bunu başka bir sekmede tutmak isteyebilirsiniz.)
"Test uygulamamla konuş"u tıklayın. Yeni karşılama mesajını dinleyin.
Varsayılan Yedek Niyetini Değiştirme
- Niyetler > Varsayılan Yedek Niyet
- Aşağı kaydırarak Yanıtlar'a gidin.
- Tüm Metin Yanıtları'nı temizle.
- Varsayılan sekmede, her biri yeni bir satırda olacak şekilde aşağıdaki yanıtları oluşturun. Böylece yanıtlar bu seçenekler arasında geçiş yapar:
Sorry, can you repeat this?
I didn't understand you. You can ask me questions about Women in Voice, a book or article tip or when the next meetup will be.
- Kaydet'i tıklayın
Bir Google Asistan çıkışı girmediğinizde varsayılanın kullanılacağını unutmayın.
Stop Intent'i Oluşturma
- Niyetler menü öğesini tıklayın.
- Create Intent'i (Niyet Oluştur) tıklayın
- Amaç adını girin:
Stop Intent
- Eğitim ifadeleri ekle'yi tıklayın.
No
That's it
Bye
I don't want that
Goodbye
It's ok for now
Quit
I want to stop
Close this
End the conversation
- Yanıtlar'a ilerleyin. Yanıt Ekle
- Aşağıdaki metin seçeneklerini ekleyin:
Alright! Hopefully we will see you at one of our meetups!
No problem. See you at one of our meetups!
- Anahtarı çevirin: Bu amacı görüşmenin sonu olarak ayarlayın. Böylece, niyet eşleştirildiğinde Google Asistan işlemi kapatılır.
- Kaydet'i tıklayın.
Buluşma Niyetini Oluşturma
Meetup Intent'te görüşmenin şu bölümü yer alır:
Kullanıcı | Temsilci |
"Bir sonraki buluşma ne zaman?" | "Bir sonraki buluşma <date> Şu saatte: <time> <location> konumunda. Konu <topic> olacak. Konuşmacılar: <speakers>. Bültenimiz aracılığıyla kaydolabilirsiniz." |
- Niyetler menü öğesini tıklayın.
- Create Intent'i (Niyet Oluştur) tıklayın
- Amaç Adı'nı girin:
Meetup Intent
(Büyük M ve büyük I harfi kullandığınızdan emin olun. - Amacı farklı yazarsanız arka uç hizmeti çalışmaz!) - Eğitim ifadeleri ekle'yi tıklayın.
When is the next meetup?
Do you have any events?
Which events are in the planning?
Are there meetup events soon?
I would love to attend a meetup
Can I join a virtual meetup?
When will you get together?
Can I join?
What does your calendar look like?
- Karşılama > Sipariş Karşılamayı Etkinleştir
- Bu amaç için Webhook çağrısını etkinleştir anahtarını çevirin.
- Kaydet'i tıklayın
İpucu Amacı Oluşturma
İpucu Amacı, sohbetin bu kısmını içerecek:
Kullanıcı | Temsilci |
"Okuma ipucu istiyorum." | "Chatbot'lar mı, Voice'lar mı yoksa İkisi de mi hakkında daha fazla bilgi edinmek istersiniz?" |
"Ses" | "Tamam, işte günün ipucu. <type> <title> <author>. Başka bir kitap veya makale ipucu ister misin? Ayrıca, buluşmalar veya yaptıklarımız hakkında daha fazla bilgi verebilirim. Nasıl yardımcı olabilirim?" |
- Tekrar Niyetler menü öğesini tıklayın.
- Create Intent'i (Niyet Oluştur) tıklayın
- Niyet Adı'nı girin:
Tip Intent
(büyük harf L ve büyük I harfi kullandığınızdan emin olun. - Amacı farklı yazarsanız arka uç hizmeti çalışmaz!) - Eğitim ifadeleri ekle'yi tıklayın ve aşağıdakileri ekleyin:
Can I get a tip for an article?
I would like to receive a reading tip
Any book tips?
What's nice to read?
I want to learn more about Chatbots, what should I read?
What are nice blogs?
Do you have book suggestions?
I want to receive information about Both
Can I have Chatbots reading tip
I would like to read more about Voice
Voice please
Both are okay.
Reading tip
Tip
Blog
Article
Book
Book suggestions
Yes
Yeah
Another tip
Yes one more
- Aşağı kaydırarak İşlem ve parametreler'e gidin
- Teknoloji'yi gerekli olarak işaretleyin
İstemi Tanımla'yı tıklayın ve şunları girin:
Do you want to read more about Chatbots, Voice or Both?
- Karşılama > Sipariş Karşılamayı Etkinleştir
Bu kez yanıtları sabit olarak kodlayamıyoruz. Yanıt, Cloud Functions işlevinden gelir. Bu nedenle, Bu amaç için Webhook çağrısını etkinleştir anahtarını çevirin.
Karşılama > Sipariş Karşılamayı Etkinleştir
- Bu amaç için Webhook çağrısını etkinleştir anahtarını çevirin.
- Kaydet'i tıklayın
5. Bilgi Bağlayıcılar
Bilgi bağlayıcılar, tanımlanan amaçları tamamlar. Bilgi belgelerini ayrıştırarak otomatik yanıtlar bulurlar. (örneğin CSV dosyalarından, online web sitelerinden ve hatta PDF dosyalarından alınan SSS veya makaleler!) Bunları yapılandırmak için, bilgi belgelerinden oluşan koleksiyonlar olan bir veya daha fazla bilgi tabanı tanımlarsınız.
Bilgi Bağlayıcılar hakkında daha fazla bilgi edinin.
Şimdi bunu deneyelim.
- Üst menüden İngilizce dilini seçmek için en etiketini seçin.
- Menüden Bilgi (beta) seçeneğini belirleyin.
- Sağdaki mavi düğmeyi tıklayın: Bilgi Tabanı Oluştur
- Bilgi Tabanı adı olarak yazın; Sesi kullanan kadınlar'ı seçin ve Kaydet'e basın.
- İlki oluştur bağlantısını tıklayın
- Bunu yaptığınızda bir pencere açılır.
Aşağıdaki yapılandırmayı kullanın:
Doküman Adı: Kadınlar Voice'la İlgili SSS Sayfası
Bilgi Türü: SSS
Mime Türü: CSV
- Bu sayfadaki verilere ihtiyacımız var. Veri sayfasının açık olduğundan emin olun ve SSS sekmesini seçin.
- Dosya > İndir > CSV
- Dialogflow'a geri dönün ve Bilgisayardan Dosya Yükle'yi tıklayıp indirdiğiniz CSV dosyasını seçin. Oluştur'u tıklayın.
Bir bilgi bankası oluşturuldu:
- Yanıt Ekle'yi tıklayın.
Aşağıdaki yanıtları oluşturup Kaydet'i tıklayın:
$Knowledge.Answer[1]
- Ayrıntıları Göster'i tıklayın.
Dialogflow'da uyguladığınız tüm SSS'ler gösterilir.
Çok kolay!
Temsilcinize SSS aktarmak için SSS içeren online bir HTML web sitesine de yönlendirebileceğinizi unutmayın. Metin bloğu olan bir PDF dosyası yüklemek bile mümkün. Dialogflow soruları kendileri hazırlar.
- Tüm Bilgi tabanı bağlayıcılarına geri dönmek için Dialogflow menüsünde Bilgi (beta) seçeneğini tıklayın.
- Bilgi Tabanının güçlü ve zayıf yönlerini değiştirmek mümkündür. SSS'lerinizin amacınız doğrultusunda kazandığını veya kaybettiğini düşündüğünüz durumlarda bu mantıklıdır. Çok fazla amacımız olmadığı için Bilgi Tabanımızı biraz daha güçlendirelim. Ölçeği şu şekilde değiştirin: -0,2. Kaydırma çubuğu sürüklendikten sonra değer otomatik olarak kaydedilir.
SSS artık "ekstralar" olarak görülmelidir. amaç akışlarınızın yanına ekleyin. Bilgi Tabanı SSS'leri modeli eğitemez. Bu nedenle, soruları tamamen farklı bir şekilde sormak, Doğal Dil Anlama'yı (Makine Öğrenimi modelleri) kullanmadığı için eşleşme sağlayamayabilir. Bu nedenle, SSS'lerinizi amaçlara dönüştürmeniz bazen faydalı olacaktır.
6. Webhook Yerine Getirme
Google Cloud Functions işlevi oluşturma
- Başka bir tarayıcı sekmesinde http://console.cloud.google.com adresine gidin.
- Soldaki menüden Cloud Functions'ı seçin.
- İşlev Oluştur'u tıklayın.
- Aşağıdaki yapılandırmayı belirtin:
- Ad:
dialogflow
- Ayrılan bellek: 256MiB
- Tetikleyici: HTTP
- URL'yi panonuza kopyalayın.
- Satır içi düzenleyici'yi seçin
- Çalışma zamanı: NodeJS 8
- Yürütülecek işlev:
dialogflow
- Şu kimlik doğrulama onay kutusunun işaretlendiğinden emin olun:
- package.json dosyasının içeriğini burada bulabilirsiniz. Bunu kopyalayıp düzenleyicinin package.json sekmesine yapıştırın.
Bu kod parçası, Google Cloud'a doğru npm kitaplıklarını yükler:
{
"name": "dialogflow",
"description": "Cloud Functions",
"engines": {
"node": "8"
},
"dependencies": {
"request": "^2.85.0",
"request-promise": "^4.2.5",
"dialogflow-fulfillment": "^0.6.1",
"actions-on-google": "^2.2.0",
"googleapis": "^48.0.0",
"moment": "^2.24.0"
},
"devDependencies": {
"eslint": "^5.12.0",
"eslint-plugin-promise": "^4.0.1",
"ngrok": "^3.2.7"
},
"private": true
}
- Burada, index.js dosyasının içeriği bulunmaktadır. Bu kodu kopyalayıp düzenleyicinin index.js sekmesine yapıştırın.
Bu kod parçası, googleapis kitaplığıyla entegre olarak Google E-Tablosu'ndan veri getirir. Kartları bir Google Asistan cihazında göstermek için actions-on-google kitaplığından yararlanır. Dialogflow amaçlarını sınıflandırmak için kitaplık dialogflow-fulfillment olanağından yararlanır. Ayrıca, tarih ve saat nesnelerini işlemek için kitaplık an'dan yararlanır.
/* jshint esversion: 8 */
'use strict';
process.env.DEBUG = 'dialogflow:debug';
const ACCOUNTS_SHEET_ID = '1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY';
const {
BasicCard,
Button,
} = require('actions-on-google');
const {google} = require('googleapis');
const moment = require('moment');
moment.locale('nl');
const { WebhookClient } = require('dialogflow-fulfillment');
var books;
var meetups;
const SHEETS_SCOPE = 'https://www.googleapis.com/auth/spreadsheets.readonly';
/**
* Authenticates the Sheets API client for read-only access.
*
* @return {Object} sheets client
*/
async function getSheetsClient() {
// Should change this to file.only probably
const auth = await google.auth.getClient({
scopes: [SHEETS_SCOPE],
});
return google.sheets({version: 'v4', auth});
}
/**
* Return a natural spoken date
* @param {string} date in 'YYYY-MM-DD' format
* @returns {string}
*/
var getSpokenDate = function(date){
let datetime = moment(date, 'YYYY-MM-DD');
return `${datetime.format('D MMMM')}`;
};
/* When the tipIntent Intent gets invoked. */
function tipIntent(agent) {
var par = agent.parameters.tech;
var selection = [];
//console.log(par);
//console.log(books);
for(var i = 0; i<books.length; i++){
if(books[i][2].toLowerCase() == par.toLowerCase()) {
selection.push(books[i]);
}
}
var random = Math.floor(Math.random() * selection.length);
var booktip = selection[random];
//console.log(selection[random]);
let spokenText = `<p><s>Alright, here's the tip of the day!</s></p><p>The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.</p>`;
let writtenText = `Alright, here's the tip of the day! The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`;
//console.log(booktip[8]);
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(`<speak>${spokenText}</speak>`);
conv.ask(new BasicCard({
title: `Tip of the day!`,
subtitle: `${par}`,
text: `The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`,
buttons: new Button({
title: 'Read',
url: `${booktip[8]}`,
})
}));
conv.ask(`<speak><p><s>Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?</s></p></speak>`);
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(writtenText + ' Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?');
}
}
function meetupIntent(agent) {
let conv = agent.conv();
let record;
console.log(meetups);
for(var i = 0; i<meetups.length; i++){
let d = moment(meetups[i][0], 'YYYY-MM-DD');
let today = moment(new Date());
if(moment(d).isSameOrAfter(today)) {
// the i event is not in the past
record = meetups[i];
console.log(record);
break;
}
}
let date = getSpokenDate(record[0]);
let spokenText1 = `The next meetup will be ${date} at ${record[1]} in ${record[3]}.`;
let spokenText2 = `The topic will be <emphasis level="moderate">${record[2]}.</emphasis>`;
let spokenText3 = `You can register via our newsletter.`;
let writtenText = `${spokenText1} The topic will be ${record[2]}. ${spokenText3}`;
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
conv.ask(`<speak>${spokenText1} ${spokenText2} ${spokenText3}</speak>`);
conv.ask(new BasicCard({
title: `Meetup`,
subtitle: `${record[2]}`,
text: `${record[0]} ${record[1]} - ${record[3]}`,
buttons: new Button({
title: 'Register',
url: `http://www.meetup.com`
})
}));
conv.ask('<speak><p><s>Is there anything else I can help you with?</s></p></speak>');
agent.add(conv);
} else {
agent.add(`${writtenText} Is there anything else I can help you with?`);
}
}
exports.dialogflow = async (request, response) => {
var agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
const client = await getSheetsClient();
const allBooks = await client.spreadsheets.values.get({
spreadsheetId: ACCOUNTS_SHEET_ID,
range: 'Books&Blogs!A:I',
});
const allEvents = await client.spreadsheets.values.get({
spreadsheetId: ACCOUNTS_SHEET_ID,
range: 'Meetups!A:D',
});
books = allBooks.data.values;
meetups = allEvents.data.values;
books.shift();
meetups.shift();
var intentMap = new Map();
intentMap.set('Tip Intent', tipIntent);
intentMap.set('Meetup Intent', meetupIntent);
agent.handleRequest(intentMap);
};
- Ortam değişkenleri, ağ iletişimi, zaman aşımları ve daha fazlası bağlantısını tıklayın
- Dialogflow Integrations hizmet hesabını seçin.
(Varsayılan olarak bir GAE App Engine Hizmet hesabı kullanılmaktadır ancak bu hesap, bu eğiticinin ilk adımlarında belirtilen Google E-Tablolar dosyanız içinde paylaşılan hesapla aynı hizmet hesabı olmalıdır.)
- Cloud Functions işlevini dağıtmadan önce. index.js sekmesindeki kodumuzdaki bir satırı değiştireceğiz. 3. kod satırı:
const
ACCOUNTS_SHEET_ID = '1Yo_E8KONgSiUm00ZmTOqtjXCwULmc2JuI3sjxRyvrkE';
İlk adımların birinde, bu anahtarı Not Defteri'ne yazdık. Bu nedenle, bu kimliği kopyalayıp kodunuza yapıştırın.
- Artık hazırız. Oluştur düğmesini tıklayın. Bu işlem, sunucusuz işlevinizi dağıttığı için biraz zaman alacaktır.
Dialogflow'da karşılamaları etkinleştirme
- Dialogflow'a geri dönme
- Ana menüde Karşılama'yı tıklayın
- Webhook anahtarını etkinleştirin.
- Panoya kopyalanan bulut işlevinin URL'sini girin.
Örneğin: https://us-central1-leeboonstra-wiv-uhtefa.cloudfunctions.net/dialogflow
- Kaydet'i tıklayın.
- Şimdi, kodun çalışıp çalışmadığını görmek ve akışları doğrudan Dialogflow simülatöründe test etmek için webhook'u test edelim.
7. Actions on Google
Actions on Google, Google Asistan için bir geliştirme platformudur. Üçüncü taraflarca geliştirilip "işlemlerin" (Google Asistan için genişletilmiş işlevsellik sağlayan appt'ler) geliştirilmesini sağlar.
Google'dan bir uygulamayı açmasını veya uygulamayla konuşmasını isteyerek bir Google işlemini çağırmanız gerekir.
Bu seçenek, işleminizi açar, sesi değiştirir ve "yerel"den ayrılırsınız Google Asistan kapsamı. Dolayısıyla bu noktadan itibaren temsilcinizden isteyeceğiniz her şeyi sizin oluşturmanız gerekir. Kendi hareketinizde birden Google Asistan'dan Google hava durumu bilgilerini isteyemezsiniz. İlk olarak mevcut işleminizin (uygulamanız) kapsamını bırakmalısınız (kapatmalısınız).
İşleminizi Google Asistan simülasyon aracında test etme
Aşağıdaki konuşmayı test edelim:
Kullanıcı | Google Asistan |
"Ok Google, test uygulamamla konuş." | "Uygulamamın test sürümünü edinme." |
Kullanıcı | Adınız-WIV |
- | "Merhaba, ben Anna. Women in Voice'un sanal temsilcisiyim. Bana buluşmalar, Kadınlar İçin Sesli Sohbet veya okuma ipuçlarıyla ilgili bilgi isteyebilirsin. Neyi öğrenmek istiyorsunuz?" |
Blog için ipucu alabilir miyim? | "Chatbot'lar mı, Voice'lar mı yoksa İkisi de mi hakkında daha fazla bilgi edinmek istersiniz?" |
Chatbot'lar | "Tamam, işte günün ipucu. The makale Chatbots And The Challenge Of Invisible Affordances of Cobus Greyling.Bir kitap veya makale ipucu ister misiniz? Ayrıca, buluşmalar veya yaptıklarımız hakkında daha fazla bilgi verebilirim. Nasıl yardımcı olabilirim?" |
Bir sonraki buluşma ne zaman? | "Bir sonraki buluşma 29 Nisan'da saat 18:00'de sanal bir Hangout'ta olacak. Konu: Online Atölye: Dialogflow ile Google Eylemleri Oluşturma! Bültenimiz aracılığıyla kaydolabilirsiniz. Yardımcı olabileceğim başka bir konu var mı?" |
Web sitenizin URL'si nedir? | "Bize www.femaleinvoice.com adresinden ulaşabilirsiniz. Sizin için yapabileceğim başka bir şey var mı?" |
Hepsi bu kadar, teşekkürler | "Tamam. Umarım buluşmalarımızdan birinde görüşürüz." |
- Google Asistan simülatörüne geri dönme
Şu adrese gidin: https://console.actions.google.com
- Mikrofon simgesini tıklayın ve şunları sorun:
Talk to my test app.
- Şimdi şunları soralım:
Can I have a tip for a blog?
Bu kod şunu döndürmelidir:
"Chatbot'lar mı, Voice'lar mı yoksa İkisi de mi hakkında daha fazla bilgi edinmek istersiniz?"
Chatbots
"Tamam, işte günün ipucu. The makale Chatbots And The Challenge Of Invisible Affordance of Cobus Greyling.
Başka bir kitap veya makale ipucu ister misiniz? Ayrıca, buluşmalar veya yaptıklarımız hakkında daha fazla bilgi verebilirim. Nasıl yardımcı olabilirim?"
- Aynı sorunun farklı bir versiyonunu deneyelim:
"Yes, I want to read more about Voice"
"Tamam, işte günün ipucu. Kitap Tasarlama Sesli Kullanıcı Arayüzleri: Konuşma Deneyimlerinin İlkeleri. ... Cathy Pearl.
Başka bir kitap veya makale ipucu ister misiniz? Ayrıca, buluşmalar veya yaptıklarımız hakkında daha fazla bilgi verebilirim. Nasıl yardımcı olabilirim?"
Bu eğitim ifadesini daha önce Dialogflow'da hiç kullanmadığınızı göz önünde bulundurun. Tam anlamıyla doğru amaçla karşılandı.
Ayrıca Dialogflow'un devam etmesi için yeterli bilgi sağladığınız için bir takip sorusu almadığınızı unutmayın.
- Dialogflow'a aşağıdaki ifadelerle devam edin:
What's the URL for your website
Bye
Hata mı var? Günlükleri kontrol edin.
Cloud Functions işlevi kodunuzda console.log()
kodunu her kullandığınızda veriler GCP günlüklerinize (Stackdriver) yazılır. Bu günlüklere Cloud Console'u açarak erişebilirsiniz > Günlük kaydı.
İlk açılır menüde Cloud Functions işlevi > contactflow'u kullanabilirsiniz.
8. Tebrikler
Dialogflow ile ilk Google Asistan işleminizi oluşturdunuz, tebrikler!
Sizin de fark etmiş olabileceğiniz gibi işleminiz, Google Hesabınıza bağlı test modunda gerçekleştiriliyordu. Nest cihazınızda veya Google Asistan uygulamanızda iOS ya da Android telefonunuzda aynı hesapla giriş yaparsanız İşleminizi de test edebilirsiniz.
Bu bir atölye demosu. Ancak Google Asistan için gerçek anlamda uygulamalar oluştururken İşleminizi onaya gönderebilirsiniz. Daha fazla bilgi için bu kılavuzu okuyun.
İşlediklerimiz
- Dialogflow v2 ile chatbot oluşturma
- Dialogflow ile özel varlık oluşturma
- Dialogflow ile doğrusal görüşme oluşturma
- Dialogflow ve Google Cloud Functions ile webhook karşılamaları ayarlama
- Actions on Google ile uygulamanızı Google Asistan'a getirme
Sırada ne var?
Bu codelab'i beğendiniz mi? Bu muhteşem laboratuvarlara göz atın.
- Dialogflow ve Actions on Google ile TV rehberi işlemi derleme
- Dialogflow ile Google Asistan İçin İşlemler Derleme (1. seviye)
- Dialogflow ile Google Asistan İçin İşlemler Derleme (2. seviye)
- Dialogflow ile Google Asistan İçin İşlemler Derleme (3. seviye)
- Dialogflow'u Google Takvim ile entegre ederek istek karşılamayı anlama
- Google Cloud Vision API'yi Dialogflow ile entegre etme