Conversational Actions will be deprecated on June 13, 2023. For more information, see Conversational Actions sunset.

Derleme karşılama (Dialogflow)

Stay organized with collections Save and categorize content based on your preferences.

Sipariş karşılama, Action'ın kullanıcı girişini elde etmek için konuşma arayüzünü ve girişi işleyip belirli bir süre sonra işlemin tamamlanmasını sağlayan mantığı tanımlar.

Görüşmenizi tanımlayın

İşlemleri tanımladığınıza göre bu İşlemler için ilgili işlemleri oluşturabilirsiniz. Bunu, dil bilgisini tanımlayan bir Dialogflow niyeti oluşturarak veya niyeti tetiklemek için kullanıcıların söylemesi gerekenleri, tetiklendiğinde niyeti yerine getirmek için karşılık gelen isteği yerine getirmesi gerekir.

İleti dizinizin tamamını tanımlamak için istediğiniz kadar niyet oluşturabilirsiniz.

Niyet oluşturma

Dialogflow'un sol gezinme menüsündeki Niyetler menü öğesinin yanındaki + işaretini tıklayın. Amaç Düzenleyici aşağıdaki bilgileri girebileceğiniz yerdir:

  • Niyet adı, IDE'de gösterilen niyetin adıdır.
  • Bağlamlar, niyetin tetiklenmesini belirli durumlara kapsamanıza olanak tanır. Daha fazla bilgi için Bağlamlar ile ilgili Dialogflow dokümanlarını okuyun.
  • Etkinlikler, kullanıcıların herhangi bir şey söylemesine gerek kalmadan amaçları tetikler. GOOGLE_ASSISTANT_WELCOME etkinliği, Google Asistan'ın İşleminizi çağırmasına izin veren bir etkinliktir. Bu etkinlik, İşleminizin varsayılan işlemi için kullanılır. Yerleşik yardımcı amaçları hakkında daha fazla bilgi için dokümanlarımıza bakın.
  • Eğitim ifadeleri, kullanıcıların niyeti tetiklemek için söylemeleri gerekenleri (dil bilgisi) tanımlar. Kullanıcıların niyeti tetiklemek için neler söyleyebileceğine dair birkaç ifade (5-10) yazın. Dialogflow, sağladığınız örnek ifadelerin doğal varyasyonlarını otomatik olarak işler.
  • İşlem ve parametreler, bu amaç için karşılama etkinleştirildiyse istek karşılamaya iletilecek verileri tanımlar. Kullanıcı girişinden ayrıştırılan veriler ve hangi isteğin tetiklendiğini algılamak için karşılamanızda kullanabileceğiniz ad buna dahildir. Bu adı daha sonra amacınızı ilgili sipariş karşılama mantığıyla eşlemek için kullanacaksınız. Eylemleri tanımlama hakkında daha fazla bilgi için Dialogflow dokümanlarındaki İşlemler ve parametreler bölümüne bakın.

  • Yanıtlar, Dialogflow Yanıt Oluşturucu'dur. Burada, bu niyete verilen yanıtı, karşılamayı çağırmadan doğrudan Dialogflow'da tanımlayabilirsiniz. Bu özellik, karşılama gerektirmeyen statik yanıtlar için yararlıdır. Bunu kullanarak basit karşılama veya veda mesajları gönderebilirsiniz. Ancak çoğu durumda kullanıcılarınıza yanıt vermek için sipariş karşılama yöntemini kullanabilirsiniz.

  • Karşılama, bu amaç tetiklendiğinde karşılamanızı çağırmak isteyip istemediğinizi belirtir. Bu işlemi büyük olasılıkla Dialogflow aracınızdaki çoğu işlem için etkinleştirirsiniz. Bu öğeyi niyet içinde görmek için Karşılama menüsünde temsilci için sipariş karşılamayı etkinleştirmeniz gerekir.

Dialogflow'da yanıt oluşturma

Bazı niyetlerde, karşılamanızın yanıt döndürmesi gerekmeyebilir. Böyle durumlarda, yanıt oluşturmak için Dialogflow'daki yanıt oluşturucuyu kullanabilirsiniz.

Yanıtlar alanında, kullanıcılara döndürmek istediğiniz yazılı yanıtı sağlayın. Varsayılan metin yanıtları, birden fazla Dialogflow entegrasyonunda çalışabilen basit TTS metin yanıtlarıdır. Google Asistan yanıtları, Yanıtlar sayfasında açıklanmıştır.

Sipariş karşılama yanıtları oluşturma

Sipariş karşılama kodunuz, bir işlem için webhook sipariş karşılama mantığında barındırılıyor. Örneğin, Saçma Ad Oluşturucu örneğinde, bu mantık Firebase için Cloud Functions işlevi için index.js adresinde bulunur.

İstek karşılamayı kullanan bir amaç tetiklendiğinde, Dialogflow'dan amaç hakkında bilgi içeren bir istek alırsınız. Ardından, niyeti işleyip bir yanıt döndürerek isteğe yanıt verirsiniz. Bu istek ve yanıt, Dialogflow webhook tarafından tanımlanır.

İstekleri işlemek ve yanıtları döndürmek için Node.js istemci kitaplığını kullanmanızı önemle tavsiye ederiz. İstemci kitaplığını kullanmaya ilişkin genel süreç şu şekildedir:

  1. Dialogflow nesnesini ilk kullanıma hazırlayın. Bu nesne, istekleri dinleme ve ayrıştırmanızı otomatik olarak gerçekleştirir. Böylece bunları karşılamanızda işleyebilirsiniz.
  2. İstekleri işleyecek işlevler oluşturun. Bu işlevler, kullanıcının girişini ve niyetin diğer bileşenlerini işler ve Dialogflow'a dönmek için yanıt oluşturur.

Dialogflow nesnesini ilk kullanıma hazırlayın.

Aşağıdaki kod, Dialogflow örneğini oluşturur ve Google Cloud Functions için bazı ortak Node.js kurulumlarını yapar:

Node.js
'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

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

app.intent('Default Welcome Intent', (conv) => {
  // Do things
});
exports.yourAction = functions.https.onRequest(app);
Java
public class DfFulfillment extends DialogflowApp {
  private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class);

  @ForIntent("Default Welcome Intent")
  public ActionResponse welcome(ActionRequest request) {
    // Do things
    // ...
  }

İstekleri işlemek için işlevler oluşturma

Kullanıcılar bir niyeti tetikleyen bir kelime öbeği söylediğinde, Dialogflow'dan isteği karşılamanıza yarayan bir işlevle yaptığınız bir istek alırsınız. Bu işlevde genellikle aşağıdakileri yaparsınız:

  1. Kullanıcı girişini işlemek için gereken tüm mantığı uygulayın.
  2. Tetiklenen amaçlara yanıt vermek için yanıtlarınızı oluşturun. Kullanıcılarınızın uygun yanıtlar oluşturmak için kullandıkları yüzeyi göz önünde bulundurun. Farklı yüzeylere yanıt verme hakkında daha fazla bilgi için yüz yüzey özelliklerine bakın.
  3. Yanıtınızla ask() işlevini çağırın.

Aşağıdaki kod, çağrı amacına (input.welcome) ve kullanıcıyı İşleminize davet eden ve kullanıcının adıyla Dialogflow niyeti için konuştuğu bir sayıyı temsil eden iletişim kutusu amacına (input.number) karşılık gelen iki TTS yanıtı oluşturmayı göstermektedir:

Node.js
const app = dialogflow();
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Welcome to number echo! Say a number.');
});
app.intent('Input Number', (conv, {num}) => {
// extract the num parameter as a local string variable
conv.close(`You said ${num}`);
});
Java
@ForIntent("Default Welcome Intent")
public ActionResponse defaultWelcome(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  rb.add("Welcome to number echo! Say a number.");
  return rb.build();
}

@ForIntent("Input Number")
public ActionResponse inputNumber(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  Integer number = (Integer) request.getParameter("num");
  rb.add("You said " + number.toString());
  return rb.endConversation().build();
}

Yukarıdaki koda eşlik eden özel amaç Giriş Numarası, kullanıcı ifadelerinden bir sayı çıkarmak için @sys.number varlığını kullanır. Amaç daha sonra, kullanıcıdaki numarayı içeren num parametresini istekteki işleve gönderir.

Her niyet için ayrı işleyiciler yerine, alternatif bir yedek işlevi ekleyebilirsiniz. Yedek işlevinin içinde, hangi niyetin tetiklendiğini kontrol edin ve buna uygun olanı yapın.

Node.js
const WELCOME_INTENT = 'Default Welcome Intent';
const NUMBER_INTENT = 'Input Number';
const NUMBER_PARAMETER = 'num';
// you can add a fallback function instead of a function for individual intents
app.fallback((conv) => {
 // intent contains the name of the intent
 // you defined in the Intents area of Dialogflow
 const intent = conv.intent;
 switch (intent) {
   case WELCOME_INTENT:
     conv.ask('Welcome! Say a number.');
     break;
   case NUMBER_INTENT:
     const num = conv.parameters[NUMBER_PARAMETER];
     conv.close(`You said ${num}`);
     break;
 }
});
Java
// you can add a fallback function instead of a function for individual intents
@ForIntent("Default Fallback Intent")
public ActionResponse fallback(ActionRequest request) {
  final String WELCOME_INTENT = "Default Welcome Intent";
  final String NUMBER_INTENT = "Input Number";
  final String NUMBER_ARGUMENT = "num";
  // intent contains the name of the intent
  // you defined in the Intents area of Dialogflow
  ResponseBuilder rb = getResponseBuilder(request);
  String intent = request.getIntent();
  switch (intent) {
    case WELCOME_INTENT:
      rb.add("Welcome! Say a number.");
      break;
    case NUMBER_INTENT:
      Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT);
      rb.add("You said " + num).endConversation();
      break;
  }
  return rb.build();
}

Eşleşmeyi engelleyen yeniden pazarlama

Dialogflow, intent'lerinizin Eğitim ifadeleri'nde tanımlanan giriş dilbilgilerinden hiçbiriyle eşleşmezse yedek niyeti tetikler. Yedek amaçları genellikle kullanıcıya İşleminiz için gerekli girişi sağlaması istenir. Yeniden değerlendirme ifadelerini yedek amacının Yanıt alanında belirterek sağlayabilir veya yanıt vermek için webhook kullanabilirsiniz.

Bir kullanıcının yanıtı İşleminizin eğitim ifadeleriyle eşleşmediğinde Google Asistan girişi işlemeye çalışır. Bu davranış, kullanıcıların bir görüşmenin ortasında İşlemleri değiştirmesini kolaylaştırır. Örneğin, bir kullanıcı "Bu hafta filmler hangileri?" diye soruyor ve görüşmenin ortasında bağlamı değiştiriyor: "Yarın hava nasıl olacak?" Bu örnekte, "Yarın hava nasıl olacak?" ilk istem tarafından tetiklenen sohbete geçerli bir yanıt olmadığı için Asistan, eşleşmeyi otomatik olarak işlemeye ve kullanıcıyı uygun bir görüşmeye taşımaya çalışır.

Asistan, kullanıcının girişiyle eşleşen uygun bir İşlem bulamazsa, kullanıcı İşleminizin bağlamına geri döner.

Asistan, geçerli bir eşleşme dışı senaryoya yanıt vermek için İşleminizi kesintiye uğratabileceğinden, kullanıcı sorgularını yerine getirmek amacıyla yedek niyet kullanmayın. Yalnızca geçerli giriş için kullanıcıya tekrar istemde bulunmak amacıyla yedek niyetleri kullanmanız gerekir.

Yedek niyet oluşturmak için:

  1. Dialogflow'un gezinme menüsünde Niyetler'ı tıklayın.
  2. Niyet Oluştur'un yanındaki ⋮ simgesini tıklayıp Yedek Niyet Oluştur'u seçin. (Alternatif olarak Varsayılan Geri Dönüş Niyeti'ni tıklayarak da düzenleyebilirsiniz.)
  3. Kullanıcılara hitap etmek için yeniden istem ifadeleri belirtin. Bu ifadeler konuşma dilinde olmalı ve kullanıcının mevcut bağlamı açısından mümkün olduğunca faydalı olmalıdır.

    Bunu yerine getirmeden yapmak için: Niyetin Yanıt alanında kelime öbeklerini belirtin. Dialogflow, daha spesifik bir amaç tetiklenene kadar kullanıcılara cevap vermek için bu listedeki ifadeleri rastgele seçer.

    Bunu yerine getirmek için:

    1. Niyetin Karşılama bölümünde Bu niyet için webhook çağrısını etkinleştir ayarını açık duruma getirin.
    2. Sipariş karşılama mantığınızda, diğer tüm istekler gibi yedek niyetini de İstekleri işleyecek işlevler oluşturma bölümünde açıklandığı gibi işleyin.

    Örneğin, aşağıdaki işlev bir Nde.js istemci kitaplığındaki conv.data nesnesini (durumu korumak için kullanabileceğiniz rastgele bir veri yükü) kullanarak yedek niyetin kaç kez tetiklendiğini takip eden bir sayacı kullanır. Birden fazla kez tetiklenirse İşlem kapanır. Kodda gösterilmese de, yedek olmayan bir amaç tetiklendiğinde diğer niyetlerin bu sayacı 0'a sıfırlaması gerekir. (Bu yöntemin nasıl kullanılacağına dair ayrıntılar için Number Genie örneğine bakın.)

    Node.js
    app.intent('Default Fallback Intent', (conv) => {
     conv.data.fallbackCount++;
     // Provide two prompts before ending game
     if (conv.data.fallbackCount === 1) {
       conv.contexts.set(DONE_YES_NO_CONTEXT, 5);
       conv.ask('Are you done playing Number Genie?');
     } else {
       conv.close(`Since I'm still having trouble, so I'll stop here. ` +
         `Let's play again soon.`);
     }
    });
    Java
    @ForIntent("Default Fallback Intent")
    public ActionResponse defaultFallback(ActionRequest request) {
      final String DONE_YES_NO_CONTEXT = "done_yes_no_context";
      ResponseBuilder rb = getResponseBuilder(request);
    
      int fallbackCount =
          request.getConversationData().get("fallbackCount") == null
              ? 0
              : (Integer) request.getConversationData().get("fallbackCount");
      fallbackCount++;
      request.getConversationData().put("fallbackCount", fallbackCount);
    
      if (fallbackCount == 1) {
        rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5));
        rb.add("Are you done playing Number Genie?");
      } else {
        rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon")
            .endConversation();
      }
      return rb.build();
    }

Bağlamları kullanma

Dialogflow'un yalnızca belirli durumlarda yedek niyet tetiklemesini istiyorsanız bağlamlardan yararlanın. Bu, farklı eşleşme dışı senaryolar için farklı yedek amaçlarınız varsa yararlıdır.

  • Bir yedek amacı için bağlam belirlemezseniz bu, Dialogflow'un başka bir niyet eşleşmediğinde tetiklediği genel bir yedek niyeti olarak kabul edilir. Bunlardan birini kullanacaksanız yalnızca birini tanımlamış olmanız gerekir.
  • Bir yedek amacı için giriş bağlamları belirlerseniz Dialogflow, aşağıdakiler geçerli olduğunda bu yedek niyeti tetikler:

    • Kullanıcının mevcut bağlamları, amaçta tanımlanan bağlamların üst kümesidir.
    • Başka niyet eşleşmesi yok.

    Bu, eşleşmeme geçersiz kılmayı belirli senaryolara göre özelleştirmek için farklı giriş bağlamlarına sahip birden çok yedek niyeti kullanmanıza olanak tanır.

  • Yedek amacı için bir çıkış bağlamı ayarlarsanız yedek niyeti tetiklenip işlendikten sonra kullanıcıyı aynı bağlamda tutarsınız.

Daha fazla bilgi için Dialogflow Bağlamları konusuna bakın.

Giriş yok

Kullanıcı, sürekli etkileşim gerektiren bir Google Home gibi bir ses cihazında daha fazla giriş sağlamadığında nasıl işlem yapılacağı hakkında ayrıntılı bilgi için Takipler sayfasına bakın.