Derleme istek karşılama (Dialogflow)

Karşılama, İşleminizin elde edeceği sohbet arayüzünü tanımlar. girişi işleme ve sonunda yerine getirme mantığı İşlem.

Konuşmanızı tanımlayın

Artık İşlemleri tanımladığınıza göre, sohbet edebilirsiniz. Bu işlemi gerçekleştireceğiniz zaman: dil bilgisini veya kullanıcıların ihtiyacını tanımlayan Dialogflow niyetleri oluşturmak işleme koymaya ve buna karşılık gelen işleme anlamaya çalışın.

Görüşmenizin tamamını tanımlamak için istediğiniz kadar intent oluşturabilirsiniz yardımcı olur.

Amaç oluştur

Dialogflow'un Niyetler menü öğesinin yanındaki + işaretini tıklayın. sol gezinme. Aşağıdaki bilgileri girebileceğiniz Intent Düzenleyici görünür:

  • Amaç adı, IDE'de görüntülenen amacın adıdır.
  • Bağlamlar, niyetin tetiklenme kapsamını belirli durumlarda kapsamanıza olanak tanır. Bağlamlar ile ilgili Dialogflow belgelerini okuyun. konulu videomuzu izleyin.
  • Etkinlikler, kullanıcıların hiçbir şey söylemesine gerek kalmadan amaçları tetikler. Bir örnek etkinlik olan GOOGLE_ASSISTANT_WELCOME etkinliği Google'ın Asistan'ın İşleminizi çağırması için: Bu etkinlik, İşleminizin varsayılan İşlem. Yerleşik yardımcı amaçları hakkında daha fazla bilgi edinmek için dokümanlarımıza göz atın.
  • Eğitim ifadeleri, bir etkinliği tetiklemek için kullanıcıların ne söylemesi gerektiğini (dil bilgisi) tanımlar düşünmelisiniz. Kullanıcıların tetiklemek için söyleyebilecekleri birkaç ifadeyi (5-10) buraya yazın yardımcı oluyorum. Dialogflow, örneğin doğal varyasyonlarını otomatik olarak işler anlamına gelir.
  • İşlem ve parametreler, aşağıdaki durumlarda sipariş karşılamaya iletilecek verileri tanımlar: bu amaç için istek karşılama etkinleştirildi. Bu, kullanıcı girişini ve sipariş karşılamada kullanabileceğiniz adı tetiklendi. Amacınızı daha sonra mantığıyla örtüşüyor. İşlemler ve parametreler bölümüne bakın bölümünü inceleyin.

  • Yanıtlar, Dialogflow Yanıt Oluşturucu'dur. Burada çağrı yapmadan, doğrudan Dialogflow'da bu amaca yanıt istek karşılamayı da kapsar. Bu özellik, ek bilgi gerektirmeyen statik yanıtlar için istek karşılamayı da kapsar. Bunu basit karşılama veya veda mesajları göndermek için kullanabilirsiniz. Ancak büyük olasılıkla kullanıcılarınıza yanıt vermek için sipariş karşılamayı kullanacaksınız. amaçlar.

  • Sipariş karşılama, sipariş karşılamaya çağrı yapmak isteyip istemediğinizi belirtir. bu amaç tetiklendiğinde geçerlidir. Bu özelliği büyük olasılıkla çoğu için intent'inizin altını çizmek için kullanır. Bu öğeyi niyette görmek için Sipariş Karşılama menüsünde, aracı için sipariş karşılamanın etkin olması gerekir.

Dialogflow'da yanıt derleme

Bazı amaçlar için karşılamanızın yanıt döndürmesini sağlamanız gerekmeyebilir. Böyle durumlarda Dialogflow'daki yanıt oluşturucuyu kullanarak tıklayın.

Yanıtlar alanında, geri dönmek istediğiniz yazılı yanıtı girin yardımcı olur. Varsayılan metin yanıtları, birlikte kullanılabilecek basit TTS metin yanıtlarıdır Dialogflow entegrasyonu sağlar. Google Asistan'ın yanıtları açıklanır Yanıtlar sayfasında yer alır.

İstek karşılama yanıtları oluşturma

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

İstek karşılamayı kullanan bir intent tetiklendiğinde size bir istek gönderilir. Amaç hakkında bilgiler içeren Dialogflow. Ardından isteği işleme koydurabilir. Bu istek ve yanıt Dialogflow webhook tarafından tanımlanır.

İstekleri işlemek için Node.js istemci kitaplığını kullanmanızı ve yanıtları döndür. İstemci kitaplığını kullanmayla ilgili genel süreç şöyledir:

  1. Dialogflow nesnesini başlatın. Bu nesne, isteklerin dinlenmesini ve ayrıştırılmasını otomatik olarak işler. bunları isteyebilirsiniz.
  2. İstekleri işlemek için işlevler oluşturun. Bu işlevler, kullanıcı girişini ve amacın diğer bileşenlerini işler ve yanıtı derlemektir.

Dialogflow nesnesini başlatın

Aşağıdaki kod, Dialogflow öğesini örneklendirir ve birtakım ortak işaretler yapar Google Cloud Functions için Node.js kurulumu:

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 niyeti tetikleyen bir ifade söylediğinde sizden istek alırsınız. İstek karşılamanızdaki bir işlevle işlediğiniz Dialogflow. Burada işlevini yerine getirirseniz genellikle şunları yaparsınız:

  1. Kullanıcı girişini işlemek için gerekli mantığı uygulayın.
  2. Tetiklenen amaçlara yanıt vermek için yanıtlarınızı oluşturun. Lütfen uygun yanıtlar oluşturmak için kullandıkları bir yüzeydir. Görüntüleyin sunma özellikleri .
  3. Yanıtınızla birlikte ask() işlevini çağırın.
ziyaret edin.

Aşağıdaki kod, bir (input.welcome) ve iletişim amacını (input.number) Kullanıcı İşleminize hoş geldiniz demek ve bir kullanıcının söylemiş olduğu bir sayıyı tekrarlamak Şu ada sahip bir Dialogflow niyeti:

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ı, @sys.number varlığıyla kullanıcı ifadelerinden sayı çıkarın. Amaç o zaman kullanıcıdan alınan sayıyı içeren num parametresini işlevi görür.

Her amaç için ayrı işleyiciler kullanmak yerine bir yedek işlevdir. Yedek işlevinde, hangi niyetin tetiklendiğini kontrol edin ve ona göre uygun şeyi yapmalarını isteyebilirsiniz.

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şmezlik durumunu yeniden isteme

Dialogflow, niyetlerinizde tanımlanan giriş dilbilgilerinin hiçbiriyle eşleşemediğinde Eğitim ifadeleri, bir yedek niyetini tetikler. Yedek amaçlar genellikle kullanıcıdan İşleminiz için gerekli bilgileri sağlamasını yeniden isteyin. Şunları yapabilirsiniz: reprompt ifadelerini bir yanıtın Yanıt alanında belirterek sağlayabilirsiniz. veya yanıt sağlamak için webhook kullanabilirsiniz.

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 Konuşmanın ortasındaki işlemler. Örneğin, bir kullanıcı "Neyi filme alır?" bu hafta nasıl bir oyun oynuyor?” Ardından, görüşmenin ortasında bağlamı değiştiriyor: " yarınki hava durumu nasıl olacak?" Bu örnekte, "Yarın hava nasıl olacak?" ilk istemle tetiklenen ileti dizisi için geçerli bir yanıt değilse Asistan otomatik olarak eşleşmeyi yakalamayı ve kullanıcıyı uygun konuşmaya başlamanıza yardımcı olur.

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

Asistan, geçerli bir eşleşmeme durumuna yanıt vermek için işleminizi kesintiye uğratabileceği için bu senaryoda, kullanıcı sorgularını yerine getirmek için yedek intent'leri kullanmayın. Siz yalnızca kullanıcınızdan geçerli giriş için yeniden istemde bulunmak amacıyla yedek intentler kullanmalıdır.

Yedek intent oluşturmak için:

  1. Dialogflow'un gezinme menüsünde Intents'i (Niyetler) tıklayın.
  2. Amaç oluştur'un yanındaki ⋮ seçeneğini tıklayın ve seçin Yedek Niyet Oluştur. (Alternatif olarak Varsayılan Yedek Düzenleme amacı.)
  3. Kullanıcılara yanıt vermek için reprompt ifadelerini belirtin. Bu ifadeler sohbet odaklı olmalı ve kullanıcının mevcut bağlamı açısından mümkün olduğunca faydalı olmalıdır.

    Bunu karşılama olmadan yapmak için: Yanıt alanında kelime öbeklerini belirtin kastediyorum. Dialogflow bu listedeki ifadeleri rastgele seçer geri bildirim almaya çalışır.

    Bunu sipariş karşılama ile yapmak için:

    1. Niyetin Karşılama bölümünde Bu niyet için webhook çağrısını etkinleştir'i açın.
    2. Sipariş karşılama mantığınızda yedek intent'i diğer işlemler gibi işleme alın. İstekleri işlemek için işlevler oluşturma konusunda açıklandığı gibi bölümüne ekleyin.

    Örneğin, aşağıdaki işlev conv.data nesnesini (bir durumu korumak için kullanabileceğiniz rastgele veri yükü) Depolayacak Node.js istemci kitaplığı Bir yedek amacın kaç kez tetiklendiğini izleyen sayaç. Eğer işlem birden çok kez tetiklendiğinde işlem kapatılır. Gösterilmese de diğer amaçların bu sayacı 0'a sıfırlamasını sağlamalısınız. yedek olmayan bir amaç tetiklendiğinde (Daha fazla bilgi için Number Genie örneği .)

    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 niyetleri tetiklemesini istiyorsanız bağlamları kullanın. durumlardan birine sahip olmaları halinde başlatabilirler. Bu özellik, her bir kullanıcı için farklı yedek farklı senaryolarda kullanılabilir.

  • Bir yedek intent'de bağlam belirlemezseniz başka bir amaç olmadığında Dialogflow'un tetiklediği genel yedek intent eşleşti. Bunlardan birini kullanmayı seçerseniz bunlardan yalnızca biri tanımlanmış olmalıdır.
  • Bir yedek intent üzerinde giriş bağlamları ayarlarsanız Dialogflow bunu tetikler yedek intent:

    • Kullanıcının geçerli bağlamları, isteyebilirsiniz.
    • Başka amaç eşleşmesi yok.

    Bu, farklı giriş bağlamlarına sahip birden fazla yedek intent kullanmanıza olanak tanır. eşleşmeme durumunu belirli senaryolara göre özelleştirme

  • Yedek intent'de bir çıkış bağlamı ayarlarsanız kullanıcıyı Aynı bağlam, yedek intent tetiklenip işlendikten sonra gösterilir.

Daha fazla bilgi için Dialogflow Bağlamları bölümüne bakın.

Giriş yokken yeniden istem

Nasıl yapılacağıyla ilgili ayrıntılı bilgi için Yeniden istemler sayfasına bakın. kullanıcı bir ses cihazından başka herhangi bir giriş yapmadığında işleme alınır. Sürekli etkileşim gerektiren Google Home