Node.js istemci kitaplığı,
Şu özellikleri sağlayan Actions on Google:
Metin ve zengin multimedya yanıtları da dahil olmak üzere tüm Actions on Google özelliklerini destekler.
hesap oturum açma, veri depolama, işlemler ve daha fazlası.
Sipariş karşılama ile teslimat arasındaki iletişimin alt düzey ayrıntılarını ele alır.
Actions on Google platformu.
Aşağıdakiler gibi aşina olduğunuz paket yönetimi araçlarıyla yüklenebilir:
npm veya yarn.
Sipariş karşılama webhook'unuzu sunucusuz bilgi işlem platformlarında kolayca dağıtmanızı sağlar
Cloud Functions for Firebase gibi
veya AWS Lambda. Ayrıca sipariş karşılama webhook'unuzu da barındırabilirsiniz.
kendi bünyesinde barındırılan ve kendi yönettiği bir ortamda yürütebilir.
Referansın yerel bir kopyasını aşağıdaki komutu çalıştırarak da oluşturabilirsiniz:
komutunu (istemci kitaplığını indirdiğiniz dizinden) indirin.
kod:
yarn docs
Oluşturulan dokümanlar, dizinin docs klasöründe bulunabilir
istemci kitaplığı kodunu indirdiğiniz yerdir.
İşleyiş şeklini anlayın
İstemci kitaplığını kullanmadan önce, Google Hesapları'ndaki İşlemler'in yerine getirme işleminize gönderdiği kullanıcı isteklerini işlemek için yerine getirme webhook'ınızın istemci kitaplığını nasıl kullandığını anlamanız faydalı olacaktır.
JavaScript'te sipariş karşılama webhook'u oluşturduğunuzda kodunuzu dağıtıp barındırabilirsiniz.
Google'ınki gibi sunucusuz bir bilgi işlem ortamında
Firebase için Cloud Functions
veya AWS Lambda kullanın. Ek bir işlem yapmanıza gerek kalmadan kodu kendiniz de barındırabilirsiniz.
Ekspres web çerçevesini kullanarak.
Karşılama webhook'u, çalışma zamanı ortamında
kullanıcı isteklerini işleme almak ve yanıtları
Kullanıcı çıkışında oluşturma için Google'da yapılan işlemler
Sipariş karşılama webhook'unuzun şunu kullanarak işlediği temel görevler:
istemci kitaplığı aşağıda kısaca özetlenmiştir:
Kullanıcı istekleri alma: Kullanıcı Google Asistan'a sorgu gönderdiğinde
Actions on Google platformu, sipariş karşılama webhook'unuza bir HTTP isteği gönderir. istek
amacı ve ham görüntüler gibi diğer verileri içeren bir JSON yükünü içerir
kullanıcı girişinin metni ve kullanıcının cihazının yüzey özellikleri.
JSON yük içeriğinin daha fazla örneği için bkz.
Dialogflow webhook biçimi ve
ileti dizisi webhook'u biçimi
kılavuzlar.
Çerçeve çağrısı biçimi algılama: Desteklenen çerçevelerde istemci kitaplığı, çerçevenin çağrı biçimini otomatik olarak algılar (ör. istek Express web çerçevesinden veya AWS Lambda'dan geldiyse) ve Google'da İşlemler platformuyla iletişimi sorunsuz bir şekilde nasıl yöneteceğini bilir.
Hizmet işleyici işleme: İstemci kitaplığı aşağıdakini temsil eder:
Dialogflow ve Actions SDK için sohbet HTTP/JSON webhook API'si
bir hizmet işlevi olarak görür. Yerine getirme webhook'ınız, global bir app örneği oluşturmak için uygun hizmeti kullanır. app örneği, HTTP istekleri için işleyici görevi görür ve hizmetin özel protokolünü anlar.
İleti dizisi işleme: İstemci kitaplığı
ekli bir Conversation nesnesi biçiminde ileti dizisine
app örneği. Sipariş karşılama webhook'unuz Conversation nesnesini kullanarak şunları yapabilir:
sohbetler arası depolanan verileri veya durum bilgilerini alma, yanıtlar gönderme
veya mikrofonu kapatın.
Ara yazılım işleme: İstemci kitaplığı,
Bir veya daha fazla işlevden oluşan kendi sohbet hizmetleri ara yazılımı
çağrı yapmadan önce istemci kitaplığının otomatik olarak çalışacağını tanımlarsınız
amaç işleyiciyi de ekleyin. Conversation nesnesine özellik veya yardımcı sınıf eklemek için sipariş tamamlama webhook'ınız aracı yazılımınızı kullanabilir.
Niyet işleyici işleme: İstemci kitaplığı,
istek karşılama webhook'unuzun anladığı amaçlar için işleyiciler. Dialogflow için
istemci kitaplığı, isteği doğru intent işleyiciye yönlendirir.
tanımlanan amaç adının tam dizesine
Dialogflow konsolu. Actions SDK'sı için, gönderilen intent özelliğine göre yönlendirilir.
Google'daki Actions on Google programından.
Kullanıcılara yanıt gönderme: Yanıt oluşturmak için sipariş karşılama webhook'unuz
Conversation#ask() işlevini çağırır. ask() işlevi,
amacıyla birden fazla kez çağrılır. İlgili içeriği oluşturmak için kullanılan
yanıtı bir HTTP isteğine dönüştürür.
JSON yükü ve bunu Actions on Google'a gönderir. close() işlevi, ask() ile benzer bir davranışa sahiptir ancak ileti dizisini kapatır.
Yerel geliştirme ortamınızı ayarlama
Karşılama webhook'unuzu uygulamadan önce
kullanabilirsiniz.
İstemci kitaplığını yükleme
Yerel geliştirme şirketinize istemci kitaplığını yüklemenin en kolay yolu
ortamının npm veya yarn gibi bir paket yöneticisi kullanması gerekir.
Yüklemek için terminalden aşağıdaki komutlardan birini çalıştırın:
npm kullanılıyorsa: npm install actions-on-google
Yumak kullanılıyorsa: yarn add actions-on-google
Proje klasörlerinizi oluşturun
Karşılama webhook'unu nereye dağıtmayı planladığınıza bağlı olarak (Google'ın Cloud Functions işlevi)
Firebase, AWS Lambda veya kendi bünyenizde barındırılan Express için bir
proje klasörünün yapısını belirleyin.
Örneğin, Firebase için Cloud Functions'ı kullanıyorsanız şunları ayarlayabilirsiniz:
gerekli proje klasörlerini oluşturmak için
Node.js'yi ve Firebase CLI'ı kurun ve
Cloud Functions için Firebase'i başlatın. Cloud Functions for Firebase için genellikle
/functions/index.js dosyasında sipariş karşılama webhook'u var.
Uygulama örneği oluşturma
Actions on Google, istek ve yanıt alışverişi için belirli mesajlaşma biçimleri kullanır
sohbet odaklı bir görüşme yapıp yapmadığınıza bağlı olarak
sipariş karşılama webhook'unuzu kullanarak
Dialogflow veya Actions SDK'yı kullanarak işlem
veya akıllı ev işlemi geliştirebilirsiniz.
Bu farklı istek ve yanıt protokollerini temsil etmek için
istemci kitaplığı üç hizmet işlevi sağlar:
Görüşme webhook protokolü
hem konuşma hizmetleri (Dialogflow hem de Actions SDK) tarafından kullanılır, ancak bunların her biri
hizmeti, iletileri farklı bir şekilde sarmalar.
app örneği oluşturmak için bir hizmet kullanıyorsunuz. app örneği, aşağıdakileri içerir:
webhook'unuz ve herkese açık kullanıcı adınız için global durum ve karşılama mantığı
Actions on Google ile gerçekleştirmeniz arasındaki iletişimi
özel bir protokol kullanın.
app örneğinin özelliklerini yapılandırabilir ve bu örnekteki yöntemleri şu şekilde çağırabilirsiniz:
web sitesi karşılama webhook'unun davranışını yönlendirin. İsterseniz app örneğini kolayca bağlayabilirsiniz
Cloud Functions for Firebase gibi sunucusuz bir bilgi işlem ortamına
HTTP istekleri için işleyici olarak JavaScript işlevlerini kabul eder.
app örneğini sipariş tamamlama webhook'unuzda oluşturmak için aşağıdaki adımları uygulayın:
"actions-on-google"ı içe aktarmak için require() işlevini çağırın modülünü ve
istediğiniz hizmeti yükleyebilirsiniz. Örneğin, aşağıdaki snippet'te dialogflow hizmetini ve yanıt oluşturmak için kullanılan bazı öğeleri nasıl yükleyeceğiniz ve dialogflow adlı bir sabit değere nasıl atayacağınız gösterilmektedir:
// Import the service function and various response classes
const {
dialogflow,
actionssdk,
Image,
Table,
Carousel,
} = require('actions-on-google');
Bir app örneği elde ederken isteğe bağlı olarak zengin yanıtları, yardımcı intent'leri ve kullanmak istediğiniz diğer Actions on Google işlevlerini temsil eden sınıfları belirtebilirsiniz.
tam listesini görmek için, aşağıdaki
referans belgelerine bakın:
ileti dizisi yanıtı
ve yardımcı amacı
modüllerinde yer alır.
Yüklediğiniz hizmeti çağırarak bir app örneği oluşturun. Örnek:
const app = dialogflow();
app örneğini başlatma sırasında yapılandırmak için şunları sağlayabilirsiniz:
Hizmeti çağırdığınızda ilk bağımsız değişken olarak options nesnesi kullanılır. (Bkz.
Ayrıntılı bilgi için DialogflowOptions.)
Örneğin, aşağıdaki snippet'te ham JSON yükünün
{ debug: true } işaretini ayarlayarak kullanıcı isteği veya yanıtı:
const app = dialogflow({
debug: true
});
Etkinlikler için işleyiciler ayarlama
Kullanıcının İşleminizle etkileşiminin yaşam döngüsü sırasında istemci kitaplığı tarafından oluşturulan Actions on Google ile ilgili etkinlikleri işlemek için istemci kitaplığını kullanarak kullanıcı isteklerini işleyen ve yanıt gönderen işleyiciler oluşturursunuz.
İstemci kitaplığının tanıdığı aşağıdaki ana etkinlik türleri için işleyici görevi gören işlevler oluşturabilirsiniz:
Intent etkinlikleri: Intent'ler, kullanıcı belirli bir işlev istediğinde Google Hesabı İşlemleri'nin yerine getirme işlevinize gönderdiği benzersiz tanımlayıcılardır. Eğer
Dialogflow kullanıyorsanız bu, Dialogflow'un bir kullanıcı sorgusuyla
bir niyete dönüştürür.
Hata etkinlikleri: Bir JavaScript veya istemci kitaplığı hatası oluştuğunda
hata istisnasını işlemek için app örneğinin catch işlevini kullanabilirsiniz
sağlayabilir. Tüm öğeleri işlemek için tek bir catch işlevi uygulamanız gerekir.
hatalar olduğundan emin olun.
Yedek etkinlikler: Kullanıcı
Actions on Google'ın tanıyamadığı bir sorgu gönderir. app kullanabilirsiniz
genel bir yedek işleyici kaydetmek için örneğin fallback işlevini
gelen sipariş karşılama için hiçbir amaç işleyici eşleştirilmemişse tetiklenir
isteği gönderin. Tüm öğeleri işlemek için tek bir fallback işlevi uygulamanız gerekir.
yedek etkinlikler. Dialogflow kullanıyorsanız Dialogflow belirli bir
başka amaç eşleşmediğinde yedek intent sunar. Bu yedek amaç için ilgili bir intent işleyici oluşturmanız gerekir.
Kullanıcı İşleminize her istek gönderdiğinde app örneği bir
Conversation
nesnesini ifade eder. Bu nesneye şuradan erişilir:
intent işleyici işlevindeconv
ilk işlev bağımsız değişkenidir. Normalde conv
nesnenizde kullanabilirsiniz.
Kullanıcı sorguları, İşleminizin yanıtları hassaslaştırmak için ayıklayıp kullanabileceği parametreler de içerebilir.
Actions SDK'sını kullanıyorsanız parametreleri İşlem paketinde tanımlarsınız.
Amaçlardan parametreleri nasıl ayıklayabileceğinizle ilgili bir örnek görmek için şu sayfaya bakın:
Eliza kod örneği.
Dialogflow kullanıyorsanız parametre değerlerine şuradan erişebilirsiniz:
params değişkeni Dialogflow'da parametrelerle amaçları işleme örneklerini görmek için Parametrelere ve bağlamlara erişim başlıklı makaleyi inceleyin.
Amaçlar için işleyiciler ayarlama
İşleyiciyi bir intent için ayarlamak üzere app cihazınızın intent() işlevini çağırın
örneğidir. Örneğin, Dialogflow kullanıyorsanız bu DialogflowApp#intent() işlevidir. Bağımsız değişkenlerde, amaç adını belirtin ve bir işleyici işlevi sağlayın.
Dialogflow kullanıyorsanız
temsilcinize gönderin. Bunun yerine, kendi işleyici işlevlerinizi uygulamadan niyetleri otomatik olarak işlemek için Dialogflow'un yerleşik yanıt işleyicisinden yararlanabilirsiniz. Örneğin,
varsayılan karşılama niyeti şöyle olabilir:
Dialogflow'a devredilebilir.
Aşağıdaki örnekte "greeting" için amaç işleyiciler gösterilmektedir ve "bye"
amaçlar. Anonim işleyici işlevleri conv bağımsız değişkeni alıp geri gönderir
kullanıcıya basit bir dize yanıtı conv.ask()işlevini kullanarak:
app.intent('Default Welcome Intent', (conv) => {
conv.ask('How are you?');
});
app.intent('bye', (conv) => {
conv.close('See you later!');
});
close() işlevinin, kapatılması dışında ask() işlevine benzer olduğunu unutmayın.
ve sohbet sona erer.
Intent'ler için işleyici oluşturma hakkında daha fazla bilgi edinmek istiyorsanız Intent işleyicinizi oluşturma başlıklı makaleyi inceleyin.
Hata etkinlikleri için işleyicileri ayarlama
Hata işleyicileri ayarlamak için app cihazınızın catch() işlevini çağırın
örneğidir. (Örneğin Dialogflow kullanıyorsanız bu
DialogflowApp#catch()
function.)
Aşağıdaki örnekte, hatayı
konsol çıkışıyla kullanıcıya basit bir dize yanıtı gönderir.
conv.ask() işlevi:
app.catch((conv, error) => {
console.error(error);
conv.ask('I encountered a glitch. Can you say that again?');
});
Yedek etkinlikler için işleyiciler ayarlama
Gelen yerine getirme isteği için eşleşen bir intent olmadığında genel yedek işleyici ayarlamak için app örneğinizin fallback() işlevini çağırın. (Örneğin, Dialogflow kullanıyorsanız bu DialogflowApp#fallback() işlevidir.)
Aşağıdaki örnekte, kullanıcıya conv.ask() işlevi aracılığıyla istem göstermek için basit bir dize yanıtı döndüren basit bir yedek işleyici gösterilmektedir:
app.fallback((conv) => {
conv.ask(`I couldn't understand. Can you say that again?`);
});
Niyet işleyicinizi oluşturun
Bu bölümde, amaç işleyicileri uyguladığınızda bazı yaygın kullanım alanları ele alınmaktadır
değiştirme işlemini uygulayın. İstemci kitaplığının nasıl eşleştiğini görmek için
"Intent işleyici işleme" bölümüne bakın. bölümündeki bölüm
İşleyiş şeklini anlayın.
Erişim parametreleri ve bağlamlar
Dialogflow kullanıyorsanız
parameters ve
Dialogflow aracınızdaki bağlamları
konuşma akışını kontrol etme.
Parametreler, kullanıcı hesabındaki önemli kelimeleri, kelime öbeklerini veya değerleri yakalamak için yararlıdır
daha fazla bilgi edineceksiniz. Dialogflow,
ve bu parametre değerlerini sipariş karşılama webhook'unuzda işleyebilirsiniz.
ve kullanıcılara nasıl yanıt vereceğini
belirlemenize yardımcı olur.
Kullanıcı İşleminize her istek gönderdiğinde DialogflowApp örneği
bir parameters oluşturur
Dialogflow'un bundan ayıkladığı parametre değerlerini temsil eden nesne
isteği gönderin. Bu nesneye params değişken adı üzerinden erişilir.
Aşağıdaki snippet'te, kullanıcı istek gönderdiğinde params nesnesinden name özelliğine nasıl erişebileceğiniz gösterilmektedir:
Aynı işlemi yapan alternatif bir snippet aşağıda verilmiştir. Kıvırcık ayraçlar
({}) JavaScript'in yapılandırmasını uygulayın
name özelliğini parameters nesnesinden alıp yerel olarak kullanmak için
değişken:
Bağlamlar, kullanıcıların
Dialogflow'u seçin. Görüşme durumunu, akışını ve dallanma noktalarını yönetmek için bağlamları kullanabilirsiniz. İstemci kitaplığı,
DialogflowConversation#contexts
nesnesini tanımlayın. Aşağıdaki snippet'te, bir bağlamı programatik olarak nasıl ayarlayabileceğiniz gösterilmektedir
bağlam nesnesini nasıl alabileceğinizi öğrenin:
İstemci kitaplığı, kolaylık sağlamak amacıyla İşlemler'in sıklıkla istediği yaygın kullanıcı veri türlerini sarmalayan yardımcı intent sınıfları sağlar. Bu
çeşitli Actions on Google arama sonuçlarını temsil eden sınıfları
yardımcı amaçlar. Aşağıdaki durumlarda yardımcı intent'leri kullanırsınız:
Google Asistan'ın kullanıcının yapması gereken
görüşmenin bazı bölümleriyle başa çıkmasını istiyorsanız
konuşmaya devam etmek için
giriş yapın.
Örnek: Onay yardımcısı sonuçları
Onay yardımcısı amacı,
kullanıcıdan evet/hayır onayı
istediğinizde sonuç alırsınız.
Aşağıdaki snippet'te webhook'unuzun yanıtına göre nasıl özelleştirilebileceği gösterilmektedir
onay yardımcısı amacı tarafından döndürülen sonuçlara uygulanır. Daha kapsamlı bir örnek için Confirmation sınıf referans dokümanlarına bakın.
// Create Dialogflow intent with `actions_intent_CONFIRMATION` event
app.intent('get_confirmation', (conv, input, confirmation) => {
if (confirmation) {
conv.close(`Great! I'm glad you want to do it!`);
} else {
conv.close(`That's okay. Let's not do it now.`);
}
});
Örnek: Bant sonuçları
Aşağıdaki snippet, karşılama webhook'unuzun yanıtını nasıl özelleştirebileceğini gösterir
kullanıcının girişlerine bağlı olarak
Carousel oluşturun. Atlı karınca bileşeni,
İşleminiz kullanıcıların seçebileceği seçenekler sunuyor. Daha kapsamlı bir örnek için Carousel sınıf referans dokümanlarına bakın.
app.intent('carousel', (conv) => {
conv.ask('Which of these looks good?');
conv.ask(new Carousel({
items: {
car: {
title: 'Car',
description: 'A four wheel vehicle',
synonyms: ['automobile', 'vehicle'],
},
plane: {
title: 'Plane',
description: 'A flying machine',
synonyms: ['aeroplane', 'jet'],
}
}
}));
});
// Create Dialogflow intent with `actions_intent_OPTION` event
app.intent('get_carousel_option', (conv, input, option) => {
if (option === 'one') {
conv.close(`Number one is a great choice!`);
} else {
conv.close(`Number ${option} is a great choice!`);
}
});
İleti dizisi yanıtı nesnelerini yapılandırma
İstemci kitaplığı, işleminizin gönderebileceği zengin yanıtları veya multimedya öğelerini temsil eden ileti dizisi yanıtı sınıfları sağlar.
Genellikle bu yanıtları veya öğeleri, kullanıcıların
herhangi bir girdi kullanarak devam edebilirsiniz.
Örnek: Resim
Aşağıdaki snippet'te, sipariş karşılama webhook'unuzun
Image
tarafından BasicCard yanıtına otomatik olarak eklenecek yanıtta
kitaplık:
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Hi, how is it going?');
conv.ask(`Here's a picture of a cat`);
conv.ask(new Image({
url: '/web/fundamentals/accessibility/semantics-builtin/imgs/160204193356-01-cat-500.jpg',
alt: 'A cat',
}));
});
Eşzamansız işlev çağrıları yapma
Actions on Google Node.js istemci kitaplığı, eşzamansız kullanım için tasarlanmıştır.
öğreneceğiz. Niyet işleyiciniz
vadettiğiniz bir sonraki
sipariş karşılama webhook'u, yanıt oluşturma işlemi tamamlandı.
Aşağıdaki snippet'te
bir taahhüt nesnesi döndürün ve ardından, sipariş karşılama webhook'unuz olursa bir mesajla yanıt verin
kullanıcı "selamlama" mesajını aldığında isteyebilirsiniz. Bu snippet'teki vaat,
karşılama webhook'u, yalnızca
harici API çağrısı çözümlendi.
Bu örnekte, hava durumu verilerini almak için sahte bir API kullanıyoruz.
/**
* Make an external API call to get weather data.
* @return {Promise<string>}
*/
const forecast = () => {
// ...
};
app.intent('Default Welcome Intent', (conv) => {
return forecast().then((weather) => {
conv.ask('How are you?');
conv.ask(`Today's weather is ${weather}.`);
});
});
Aşağıdaki basitleştirilmiş kod snippet'i de aynı etkiye sahiptir ancak
asyncawait özelliği ECMA 2017'de kullanıma sunuldu (Node.js sürüm 8). Kullanılacak
bu kodu Cloud Functions for Firebase ile kullanmak istiyorsanız
firebase-tools'ın doğru sürümü
ve doğru yapılandırmaya sahip olduğundan emin olun.
app.intent('Default Welcome Intent', async (conv) => {
const weather = await forecast();
conv.ask('How are you?');
conv.ask(`Today's weather is ${weather}.`);
});
Konuşma verilerini depolayın
İstemci kitaplığı, sipariş karşılama webhook'unuzun
ileti dizilerine veri kaydetme
yararlı olabilir. Veri depolama için kullanabileceğiniz önemli nesneler şunlardır:
Aşağıdaki snippet, karşılama webhook'unuzun bir
tanımladığınız rastgele mülk (someProperty) ve
Conversation#user.storage
nesnesini tanımlayın. Daha eksiksiz bir örnek için
Conversation#user.storage
sınıf referansı belgeleri.
Şunu kullanabilirsiniz: Conversation#user
kullanıcı hakkında bilgi edinmek için kullanılacak nesne (dize tanımlayıcı ve
kişisel bilgiler. conv.user.name.display ve
conv.user.email, şunun için conv.ask(new Permission) istenmesini gerektiriyor:
Google ile Oturum Açma için sırasıyla NAME ve conv.ask(new SignIn).
const {Permission} = require('actions-on-google');
app.intent('Default Welcome Intent', (conv) => {
if (conv.user.last.seen) {
conv.ask('Welcome back! How are you?');
} else {
conv.ask('Nice to meet you! How are you doing?');
}
});
app.intent('permission', (conv) => {
conv.ask(new Permission({
context: 'To greet you personally',
permissions: 'NAME',
}));
});
// Create Dialogflow intent with `actions_intent_PERMISSION` event
app.intent('get_permission', (conv, input, granted) => {
if (granted) {
conv.close(`Hi ${conv.user.name.display}!`);
} else {
// User did not grant permission
conv.close(`Hello!`);
}
});
Ara katman yazılımıyla ölçeklendirme
Ara katman yazılımları kullanarak istemci kitaplığını genişletebilirsiniz.
Ara katman yazılımı katmanı, tanımladığınız bir veya daha fazla işlevden oluşur.
çağrılmadan önce istemci kitaplığının otomatik olarak çalıştırdığı
intent işleyicisi ile uyumludur. Ara katman kullanmak, Conversation örneğini değiştirmenize ve ek işlevler eklemenize olanak tanır.
Dialogflow ve Actions SDK hizmetleri, app.middleware() işlevini sunar.
Conversation API'sine mülkler veya yardımcı sınıflar eklemenize olanak tanır.
örneğidir.
Aşağıdaki snippet'te, ara yazılımları nasıl kullanabileceğinize dair bir örnek gösterilmektedir:
Bir web çerçevesi veya sunucusuz bilgi işlem platformu için istek karşılama webhook'unu kullanıma sunmak için:
app nesnesini herkesin erişebileceği bir webhook olarak dışa aktarmanız gerekir. İlgili içeriği oluşturmak için kullanılan
istemci kitaplığının Google Play dışındaki bir dizi ortama dağıtımı
kutucuk.
Aşağıdaki snippet'ler, app dosyasını farklı çalışma zamanlarında nasıl dışa aktarabileceğinizi gösterir:
const functions = require('firebase-functions');
// ... app code here
// Exported function name must be 'dialogflowFirebaseFulfillment'
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
Örnek: Kendi bünyesinde barındırılan Express sunucusu (basit)