Actions on Google Node.js istemci kitaplığıyla (Dialogflow) istek karşılama oluşturma

JavaScript'te istek karşılama webhook'u oluşturuyorsanız Actions on Google platformuna erişmek ve platformla etkileşimde bulunmak için Actions on Google Node.js istemci kitaplığı önerilir.

Giriş

Node.js istemci kitaplığı, Actions on Google'ın şu özellikleri sunan bir istek karşılama kitaplığıdır:

  • Metin ve zengin multimedya yanıtları, hesapta oturum açma, veri depolama, işlemler ve daha fazlası dahil tüm Actions on Google özelliklerini destekler.
  • JavaScript'te görüşme HTTP/JSON webhook API'sini sarmalayan deyimsel bir soyutlama katmanı sağlar.
  • Sipariş karşılama durumunuz ve Actions on Google platformu arasındaki iletişimin alt düzey ayrıntılarını ele alır.
  • npm veya yarn gibi bilinen paket yönetimi araçları kullanılarak yüklenebilir.
  • Karşılama webhook'unuzu Cloud Functions for Firebase veya AWS Lambda gibi sunucusuz bilgi işlem platformlarında kolayca dağıtmanızı sağlar. Karşılama webhook'unuzu bir bulut servis sağlayıcıda veya kendi kendine barındırılan ve kendi kendine yönetilen bir ortamda da barındırabilirsiniz.
  • Node.js v6.0.0 ve sonraki sürümleriyle uyumludur.

İstemci kitaplığını Actions on Google için Dialogflowflow entegrasyonu veya Actions SDK ile birlikte kullanabilirsiniz.

İstemci kitaplığını kullanmayla ilgili tam kod örneklerini görmek için örnekler sayfasını ziyaret edebilirsiniz.

API referansını görüntüleyin

API referansı, Actions on Google Node.js istemci kitaplığı GitHub sayfasında barındırılır.

Ayrıca, istemci kitaplığı kodunu indirdiğiniz dizinden aşağıdaki komutu çalıştırarak referansın yerel bir kopyasını da oluşturabilirsiniz:

yarn docs

Oluşturulan dokümanlar, istemci kitaplığı kodunu indirdiğiniz dizinin docs klasöründe bulunur.

İşleyiş şeklini anlayın

İstemci kitaplığını kullanmadan önce, istek karşılama webhook'unuzun, Actions on Google'ın karşılamanıza gönderdiği kullanıcı isteklerini işlemek için istemci kitaplığını nasıl kullandığını anlamanız yararlı olur.

JavaScript'te istek karşılama webhook'u oluşturduğunuzda kodunuzu Google'ın Cloud Functions for Firebase veya AWS Lambda gibi sunucusuz bir bilgi işlem ortamında dağıtıp barındırabilirsiniz. Ek çalışma yapmadan Express web çerçevesini kullanarak kodu kendiniz de barındırabilirsiniz.

Çalışma zamanı ortamında, istek karşılama webhook'u, kullanıcı isteklerini işlemek ve kullanıcı çıkışının oluşturulması için yanıtları Actions on Google'a göndermek amacıyla istemci kitaplığındaki işlevleri çağırabilir.

İstek karşılama webhook'unuzun istemci kitaplığı yardımıyla işlediği temel görevler aşağıda kısaca özetlenmiştir:

Şekil 1. Node.js istemci kitaplığının üst düzey mimarisi
  1. Kullanıcı istekleri alma: Bir kullanıcı Google Asistan'a sorgu oluşturduğunda Actions on Google platformu, istek karşılama webhook'unuza bir HTTP isteği gönderir. İstek, amacı ve kullanıcı girişinin ham metni gibi diğer verileri ve kullanıcının cihazının yüzey özelliklerini içeren bir JSON yükünü içerir. JSON yük içeriğinin daha fazla örneği için Dialogflow webhook biçimi ve görüşme webhook biçimi kılavuzlarına bakın.
  2. Çerçeve çağrı biçimi algılama: İstemci kitaplığı, desteklenen çerçevelerde çerçevenin çağrı biçimini otomatik olarak algılar (örneğin, istek Express web çerçevesinden veya AWS Lambda'dan geldiyse) ve Actions on Google platformuyla iletişimin sorunsuz şekilde nasıl yönetileceğini bilir.
  3. Hizmet işleyici işleme: İstemci kitaplığı, Dialogflow için HTTP/JSON webhook API ve Actions SDK'sını bir hizmet işlevi olarak temsil eder. Karşılama webhook'unuz uygun hizmeti kullanarak global bir app örneği oluşturur. app örneği, HTTP istekleri için bir işleyici görevi görür ve hizmetin özel protokolünü anlar.
  4. İleti dizisi işleme: İstemci kitaplığı, görüşme başına bilgileri app örneğine eklenmiş bir Conversation nesnesi olarak temsil eder. Karşılama webhook'unuz, konuşmalar arası depolanan verileri veya durum bilgilerini almak, kullanıcılara yanıt göndermek ya da mikrofonu kapatmak için Conversation nesnesini kullanabilir.
  5. Ara yazılım işleme: İstemci kitaplığı, kendi ileti dizisi hizmetleri ara yazılımınızı oluşturmanıza olanak tanır. Bu katman, amaç işleyiciyi çağırmadan önce istemci kitaplığının otomatik olarak çalıştıracağını tanımladığınız bir veya daha fazla işlevden oluşur. Karşılama webhook'unuz, Conversation nesnesine özellik veya yardımcı sınıf eklemek için ara katman yazılımınızı kullanabilir.
  6. Amaç işleyici işleme: İstemci kitaplığı, istek karşılama webhook'unuzun anladığı amaçlar için işleyiciler tanımlamanızı sağlar. Dialogflow için istemci kitaplığı, Dialogflow konsolunda tanımlanan amaç adının tam dizesiyle eşleyerek isteği doğru amaç işleyiciye yönlendirir. Actions SDK'sı için Actions on Google'dan gönderilen intent özelliğine göre yönlendirilir.
  7. Kullanıcılara yanıt gönderme: Karşılama webhook'unuz yanıt oluşturmak için Conversation#ask() işlevini çağırır. Yanıtı aşamalı olarak oluşturmak için ask() işlevi birden çok kez çağrılabilir. İstemci kitaplığı, yanıtı JSON yükü içeren bir HTTP isteğine seriler ve Actions on Google'a gönderir. close() işlevi, ask() işlevine benzer bir davranışa sahiptir ancak ileti dizisini kapatır.

Yerel geliştirme ortamınızı ayarlama

Karşılama webhook'unuzu uygulamadan önce istemci kitaplığını yüklediğinizden emin olun.

İstemci kitaplığını yükleme

İstemci kitaplığını yerel geliştirme ortamınıza yüklemenin en kolay yolu, npm veya yarn gibi bir paket yöneticisi kullanmaktır.

Yüklemek için terminalden şu komutlardan birini çalıştırın:

  • npm kullanılıyorsa: npm install actions-on-google
  • İplik 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 Firebase için Cloud Functions, AWS Lambda veya kendi bünyesinde barındırılan Express) dosyalarınızı kaydetmek için belirli bir proje klasörü yapısı oluşturmanız gerekebilir.

Örneğin, Cloud Functions for Firebase kullanıyorsanız Node.js ve Firebase CLI'yı kurma ve Firebase for Cloud Functions'ı başlatma bölümünde açıklanan adımları uygulayarak gerekli proje klasörlerini oluşturabilirsiniz. Cloud Functions for Firebase'de, genellikle istek karşılama webhook'unuzu /functions/index.js dosyasına yazarsınız.

Uygulama örneği oluşturma

Actions on Google, Dialogflow veya Actions SDK kullanarak bir etkileşimli İşlem derlemenize ya da bir akıllı ana sayfa İşlemi derlemenize bağlı olarak istek ve yanıtları istek ve yanıtları karşılama webhook'unuzla değiştirmek için belirli mesajlaşma biçimleri kullanır.

İstemci kitaplığı, bu farklı istek ve yanıt protokollerini temsil etmek için üç hizmet işlevi sağlar:

Görüşme webhook'u protokolü her iki sohbet hizmeti (Dialogflow ve Actions SDK'sı) tarafından kullanılır ancak her hizmet mesajları farklı şekilde sarmalar.

app örneği oluşturmak için bir hizmet kullanırsınız. app örneği, webhook'unuzun genel durumu ve istek karşılama mantığını içerir ve hizmete özel protokolü kullanarak Actions on Google ile istek karşılama arasındaki iletişimi yönetir.

app örneğinin özelliklerini yapılandırabilir ve istek karşılama webhook'unun davranışını yönlendirmek için yöntemlere çağrıda bulunabilirsiniz. app örneğini, HTTP istekleri için işleyiciler olarak JavaScript işlevlerini kabul eden Cloud Functions for Firebase gibi sunucusuz bir bilgi işlem ortamına da kolayca takabilirsiniz.

Karşılama webhook'unuzda app örneği oluşturmak için şu adımları uygulayın:

  1. "actions-on-google" modülünü içe aktarmak ve istediğiniz hizmeti yüklemek için require() işlevini çağırın. Örneğin aşağıdaki snippet, dialogflow hizmetini ve yanıt oluşturmak için kullanılan bazı öğeleri yükleyip dialogflow adlı bir sabite nasıl atayabileceğinizi gösterir:

    // Import the service function and various response classes
    const {
      dialogflow,
      actionssdk,
      Image,
      Table,
      Carousel,
    } = require('actions-on-google');

    Burada actions-on-google, proje klasörünüzdeki bir package.json dosyasında belirtilen bir bağımlılığı ifade eder (örnek için bu örnek package.json dosyasını inceleyebilirsiniz).

    Bir app örneği elde ederken isteğe bağlı olarak zengin yanıtları, yardımcı amaçları ve kullanmak istediğiniz diğer Actions on Google işlevlerini temsil eden sınıflar belirtebilirsiniz. Yükleyebileceğiniz geçerli sınıfların tam listesi için ileti dizisi yanıtı ve yardımcı amacı modüllerinin referans dokümanlarına bakın.

  2. Yüklediğiniz hizmeti çağırarak bir app örneği oluşturun. Örneğin:

    const app = dialogflow();

  3. İlk kullanıma hazırlama sırasında app örneğini yapılandırmak için hizmeti çağırırken ilk bağımsız değişken olarak bir options nesnesi sağlayabilirsiniz. (Daha fazla bilgi için bkz. DialogflowOptions.) Örneğin, aşağıdaki snippet'te { debug: true } işaretini ayarlayarak kullanıcı isteğinden veya yanıtından alınan ham JSON yükünün nasıl günlüğe kaydedileceği gösterilmektedir:

const app = dialogflow({
  debug: true
});

Etkinlikler için işleyiciler ayarlama

İşleminizle kullanıcı 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şleyip yanıtları gönderecek işleyiciler oluşturabilirsiniz.

İ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:

  • Amaç etkinlikleri: Amaçlar, bir kullanıcı belirli bir işlev talep ettiğinde Actions on Google'ın karşılamanıza gönderdiği benzersiz tanımlayıcılardır. Dialogflow kullanıyorsanız bu durum Dialogflow'un bir kullanıcı sorgusunu Dialogflow aracınızdaki bir niyetle eşleştirmesine karşılık gelir.
  • Hata etkinlikleri: Bir JavaScript veya istemci kitaplığı hatası oluştuğunda, hata istisnasını uygun şekilde işlemek için app örneğin catch işlevini kullanabilirsiniz. Sipariş karşılamanızın önem verdiği tüm hataları işlemek için tek bir catch işlevi uygulamanız gerekir.
  • Yedek etkinlikler: Kullanıcı, Actions on Google'ın tanıyamadığı bir sorgu gönderdiğinde yedek etkinlik oluşur. Gelen sipariş karşılama isteği için hiçbir amaç işleyici eşleşmediğinde tetiklenecek genel bir yedek işleyici kaydetmek amacıyla app örneğindeki fallback işlevini kullanabilirsiniz. Tüm yedek etkinlikleri işlemek için tek bir fallback işlevi uygulamanız gerekir. Dialogflow kullanıyorsanız Dialogflow başka bir niyet eşleşmediğinde belirli bir yedek niyeti tetikleyebilir. Bu yedek amaç için karşılık gelen bir intent işleyici oluşturmanız gerekir.

Kullanıcı İşleminize istek gönderdiğinde app örneği, söz konusu sohbet oturumunu temsil eden bir Conversation nesnesi oluşturur. Bu nesneye, amaç işleyici işlevinde ilk işlev bağımsız değişkeni olarak iletilen conv değişken adı üzerinden erişilir. Kullanıcıya yanıt göndermek için genellikle işleyicilerinizde conv nesnesini kullanırsınız.

Kullanıcı sorguları, İşleminizin çıkarıp yanıtları hassaslaştırmak için 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 çıkarabileceğinize dair bir örnek görmek için Eliza kod örneğine göz atın.
  • Dialogflow kullanıyorsanız parametre değerlerine params değişkeni üzerinden erişebilirsiniz. Dialogflow'daki parametrelerle niyet işleme örneklerini görmek için Parametrelere ve bağlamlara erişim bölümüne bakın.

Amaçlar için işleyiciler ayarlayın

Bir amacın işleyicisini ayarlamak için app örneğinizin intent() işlevini çağırın. Ö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 aracınızdaki her niyet için işleyiciler ayarlamanıza gerek yoktur. 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 Dialogflow'a bu şekilde yetki verilebilir.

Aşağıdaki örnekte "karşılama" ve "güle güle" amaçları için amaç işleyiciler gösterilmektedir. Bunların anonim işleyici işlevleri, bir conv bağımsız değişkeni alır ve conv.ask() işleviyle kullanıcıya basit bir dize yanıtı gönderir:

app.intent('Default Welcome Intent', (conv) => {
  conv.ask('How are you?');
});

app.intent('bye', (conv) => {
  conv.close('See you later!');
});

close() işlevinin, mikrofonu kapatması ve konuşmanın bitmesi dışında ask() işlevine benzer olduğunu unutmayın.

Amaçlar için işleyiciler oluşturma hakkında daha fazla bilgi edinmek isterseniz Amaç işleyicinizi oluşturma bölümüne bakın.

Hata etkinlikleri için işleyiciler ayarlama

İşleyicileri hatalara ayarlamak için app örneğinizin catch() işlevini çağırın. (Örneğin, Dialogflow kullanıyorsanız bu DialogflowApp#catch() işlevidir.)

Aşağıdaki örnekte, hatayı konsol çıkışına gönderen ve kullanıcıyı conv.ask() işlevi aracılığıyla istemde bulunmak için basit bir dize yanıtı gönderen basit bir yakalama hata işleyicisi gösterilmektedir:

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 istek karşılama isteği için hiçbir amaç eşleşmediğinde genel bir yedek işleyici ayarlamak isterseniz 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ıyı conv.ask() işlevi aracılığıyla istemek için basit bir dize yanıtı gönderen basit bir yedek işleyici gösterilmektedir:

app.fallback((conv) => {
  conv.ask(`I couldn't understand. Can you say that again?`);
});

Amaç işleyicinizi oluşturun

Bu bölümde, istemci kitaplığıyla amaç işleyicileri uyguladığınızda görülen bazı yaygın kullanım alanları ele alınmaktadır. İstemci kitaplığının niyetle nasıl eşleştiğini görmek için İşleyiş şeklini anlama sayfasındaki "Amaç işleyici işleme" bölümüne bakın.

Parametrelere ve bağlamlara erişim

Dialogflow kullanıyorsanız durum bilgilerini korumak ve sohbet akışını kontrol etmek için Dialogflow aracınızda parametreler ve bağlamlar tanımlayabilirsiniz.

Parametreler, kullanıcı sorgularındaki önemli kelimeleri, kelime öbeklerini veya değerleri yakalamak için yararlıdır. Dialogflow, çalışma zamanında kullanıcı sorgularından karşılık gelen parametreleri ayıklar. Bu parametre değerlerini, kullanıcılara nasıl yanıt vereceğinizi belirlemek için istek karşılama webhook'unuzda işleyebilirsiniz.

Kullanıcı İşleminize istek gönderdiğinde DialogflowApp örneği, Dialogflow'un bu istekten çıkardığı parametre değerlerini temsil eden bir parameters nesnesi oluşturur. Bu nesneye params değişken adı aracılığıyla erişilebilir.

Aşağıdaki snippet'te kullanıcı istek gönderdiğinde params nesnesinden name mülküne nasıl erişebileceğiniz gösterilmektedir:

app.intent('Default Welcome Intent', (conv, params) => {
  conv.ask(`How are you, ${params.name}?`);
});

Burada, aynı şeyi yapan alternatif bir snippet'i görebilirsiniz. Süslü ayraçlar ({}), name özelliğini parameters nesnesinden alıp yerel bir değişken olarak kullanmak için JavaScript yapılandırma işlemi uygular:

app.intent('Default Welcome Intent', (conv, {name}) => {
  conv.ask(`How are you, ${name}?`);
});

Aşağıdaki snippet'te parametre adı full-name olsa da yapılandırılmamış ve name adlı yerel değişkene atanmıştır:

app.intent('Default Welcome Intent', (conv, {'full-name': name}) => {
  conv.ask(`How are you, ${name}?`);
});

Bağlamlar, Dialogflow'un gelişmiş bir özelliğidir. Konuşma durumunu, akışı ve kollara ayırma işlemini yönetmek için bağlamları kullanabilirsiniz. İstemci kitaplığı, DialogflowConversation#contexts nesnesi aracılığıyla bağlama erişim sağlar. Aşağıdaki snippet'te, istek karşılama webhook'unuzda programatik olarak nasıl bağlam ayarlayabileceğiniz ve bağlam nesnesinin nasıl alınacağı gösterilmektedir:

app.intent('intent1', (conv) => {
  const lifespan = 5;
  const contextParameters = {
    color: 'red',
  };
  conv.contexts.set('context1', lifespan, contextParameters);
  // ...
  conv.ask('...');
});

app.intent('intent2', (conv) => {
  const context1 = conv.contexts.get('context1');
  const contextParameters = context1.parameters;
  // ...
  conv.ask('...');
});

app.intent('intent3', (conv) => {
  conv.contexts.delete('context1');
  // ...
  conv.ask('...');
});

Yardımcı intent sonuçlarına erişme

İstemci kitaplığı, kolaylık sağlamak amacıyla İşlemlerin sıklıkla istediği yaygın kullanıcı verisi türlerini sarmalayan yardımcı amaç sınıfları sağlar. Bunlara, çeşitli Actions on Google yardımcı amaçları için sonuçları temsil eden sınıflar dahildir. Google Asistan'ın, kullanıcının görüşmeye devam etmek için giriş sağlaması gereken konuşma bölümlerini işlemesini istediğinizde yardımcı niyetlerden yararlanırsınız.

Örnek: Onay yardımcısı sonuçları

Onay yardımcı amacı, kullanıcıdan evet/hayır onayı istemenizi ve sonuca ulaşmanızı sağlar. Aşağıdaki snippet'te, webhook'unuzun onay yardımcı niyeti tarafından döndürülen sonuçlara göre yanıtını nasıl özelleştirebileceği gösterilmektedir. Daha kapsamlı bir örnek için Confirmation sınıf referans belgelerini inceleyin.

// 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.`);
  }
});

Aşağıdaki snippet'te, istek karşılama webhook'unuzun kullanıcının bant girişine göre yanıtını nasıl özelleştirebileceği gösterilmektedir. Bant bileşeni, İşleminizin kullanıcılara belirleyebilecekleri bir dizi seçenek sunmasını sağlar. Daha eksiksiz bir örnek için Carousel sınıf referans dokümanlarına göz atı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!`);
  }
});

Sohbet yanıtı nesnelerini yapılandırma

İstemci kitaplığı, İşleminizin gönderebileceği zengin yanıtları veya multimedya öğelerini temsil eden görüşme yanıtı sınıfları sağlar. Bu yanıtları veya öğeleri genellikle kullanıcıların görüşmeye devam etmek için herhangi bir giriş yapmaları gerekmediğinde gönderirsiniz.

Örnek: Resim

Aşağıdaki snippet'te, istek karşılama webhook'unuzun bir yanıtta nasıl Image gönderebileceği gösterilmektedir. Bu, kitaplık tarafından otomatik olarak bir BasicCard yanıtına eklenecek:

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

Actions on Google Node.js istemci kitaplığı, eşzamansız programlama için tasarlanmıştır. Amaç işleyiciniz, istek karşılama webhook'unuzun yanıt oluşturma işlemini tamamladığında çözümlenen bir söz döndürebilir.

Aşağıdaki snippet'te, bir vaat nesnesi döndürmek için eşzamansız işlev çağrısında bulunma ve istek karşılama webhook'unuz "karşılama" amacı alırsa bir mesajla yanıt verme işlemlerinin nasıl yapılacağı gösterilmektedir. Bu snippet'te sağlanan söz, istek karşılama webhook'unuzun yalnızca harici API çağrısı sözü çözümlendikten sonra bir sohbet yanıtı döndürmesini sağlar.

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 ECMA 2017'de sunulan async await özelliğini (Node.js sürüm 8) kullanır. Bu kodu Cloud Functions for Firebase ile kullanmak için firebase araçlarının doğru sürümünü kullandığınızdan ve doğru yapılandırmaya sahip olduğunuzdan 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ığı, istek karşılama webhook'unuzun gelecekte kullanılmak üzere görüşmelere veri kaydetmesine olanak tanır. Veri depolama için kullanabileceğiniz temel nesneler şunlardır:

Aşağıdaki snippet'te, istek karşılama webhook'unuzun, tanımladığınız (someProperty) rastgele bir mülkte verileri nasıl depolayabileceği ve Conversation#user.storage nesnesine nasıl ekleyebileceği gösterilmektedir. Daha kapsamlı bir örnek için Conversation#user.storage sınıf referans dokümanlarına göz atın.

app.intent('Default Welcome Intent', (conv) => {
  conv.user.storage.someProperty = 'someValue';
  conv.ask('...');
});

Conversation#user nesnesini, dize tanımlayıcısı ve kişisel bilgiler dahil olmak üzere kullanıcı hakkında bilgi edinmek için kullanabilirsiniz. conv.user.name.display ve conv.user.email gibi belirli alanlar, Google ile Oturum Açma için sırasıyla NAME ve conv.ask(new SignIn) için conv.ask(new Permission) isteğinde bulunulmasını gerektirir.

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ımları ile ölçeklendirme

İstemci kitaplığını ara katman yazılımları aracılığıyla genişletebilirsiniz.

Ara yazılım katmanı, tanımladığınız bir veya daha fazla işlevden oluşur. Bu işlev, istemci kitaplığının amaç işleyicisini çağırmadan önce otomatik olarak çalıştırır. Ara katman yazılımı katmanı kullanmak, Conversation örneğini değiştirmenize ve ek işlevler eklemenize olanak tanır.

Dialogflow ve Actions SDK hizmetleri, Conversation örneğine mülk veya yardımcı sınıf eklemenizi sağlayan bir app.middleware() işlevi sunar.

Aşağıdaki snippet'te, ara yazılımı nasıl kullanabileceğinize dair bir örnek gösterilmektedir:

class Helper {
  constructor(conv) {
    this.conv = conv;
  }

  func1() {
    this.conv.ask(`What's up?`);
  }
}

app.middleware((conv) => {
  conv.helper = new Helper(conv);
});

app.intent('Default Welcome Intent', (conv) => {
  conv.helper.func1();
});

Uygulamanızı dışa aktarın

Bir web çerçevesi veya sunucusuz bilgi işlem platformu için istek karşılama webhook'unuzu kullanıma sunmak isterseniz app nesnesini herkes tarafından erişilebilen bir webhook olarak dışa aktarmanız gerekir. İstemci kitaplığı, kullanıma hazır olarak bir dizi ortama dağıtımı destekler.

Aşağıdaki snippet'ler, farklı çalışma zamanlarında app verilerini nasıl dışa aktarabileceğinizi gösterir:

Örnek: Cloud Functions for Firebase

const functions = require('firebase-functions');
// ... app code here
exports.fulfillment = functions.https.onRequest(app);

Örnek: Dialogflow satır içi düzenleyici

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)

const express = require('express');
const bodyParser = require('body-parser');  

// ... app code here

express().use(bodyParser.json(), app).listen(3000);

Örnek: Kendi bünyesinde barındırılan Express sunucusu (birden fazla rota)

const express = require('express');
const bodyParser = require('body-parser');

// ... app code here

const expressApp = express().use(bodyParser.json());

expressApp.post('/fulfillment', app);

expressApp.listen(3000);

Örnek: AWS Lambda API ağ geçidi

// ... app code here

exports.fulfillment = app;